X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Fcc2420%2FCC2420.h;h=eae62c35b82fb2e7add4e331a2859de8264f25e2;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=91665102d5bd0e5c9a0ca706dc7642b18603702c;hpb=121da1045cafe46d32ab8ecf87a98fe19430462c;p=tinyos-2.x.git diff --git a/tos/chips/cc2420/CC2420.h b/tos/chips/cc2420/CC2420.h index 91665102..eae62c35 100644 --- a/tos/chips/cc2420/CC2420.h +++ b/tos/chips/cc2420/CC2420.h @@ -38,10 +38,60 @@ typedef uint8_t cc2420_status_t; +#if defined(TFRAMES_ENABLED) && defined(IEEE154FRAMES_ENABLED) +#error "Both TFRAMES and IEEE154FRAMES enabled!" +#endif + +/** + * CC2420 header definition. + * + * An I-frame (interoperability frame) header has an extra network + * byte specified by 6LowPAN + * + * Length = length of the header + payload of the packet, minus the size + * of the length byte itself (1). This is what allows for variable + * length packets. + * + * FCF = Frame Control Field, defined in the 802.15.4 specs and the + * CC2420 datasheet. + * + * DSN = Data Sequence Number, a number incremented for each packet sent + * by a particular node. This is used in acknowledging that packet, + * and also filtering out duplicate packets. + * + * DestPan = The destination PAN (personal area network) ID, so your + * network can sit side by side with another TinyOS network and not + * interfere. + * + * Dest = The destination address of this packet. 0xFFFF is the broadcast + * address. + * + * Src = The local node ID that generated the message. + * + * Network = The TinyOS network ID, for interoperability with other types + * of 802.15.4 networks. + * + * Type = TinyOS AM type. When you create a new AMSenderC(AM_MYMSG), + * the AM_MYMSG definition is the type of packet. + * + * TOSH_DATA_LENGTH defaults to 28, it represents the maximum size of + * the payload portion of the packet, and is specified in the + * tos/types/message.h file. + * + * All of these fields will be filled in automatically by the radio stack + * when you attempt to send a message. + */ /** - * CC2420 header. An I-frame (interoperability frame) header has an - * extra network byte specified by 6LowPAN + * CC2420 Security Header */ +typedef nx_struct security_header_t { + nx_uint8_t secLevel:3; + nx_uint8_t keyMode:2; + nx_uint8_t reserved:3; + nx_uint32_t frameCounter; + nx_uint8_t keyID[1]; // One byte for now +} security_header_t; + typedef nx_struct cc2420_header_t { nxle_uint8_t length; nxle_uint16_t fcf; @@ -49,15 +99,19 @@ typedef nx_struct cc2420_header_t { nxle_uint16_t destpan; nxle_uint16_t dest; nxle_uint16_t src; + /** CC2420 802.15.4 header ends here */ +#ifdef CC2420_HW_SECURITY + security_header_t secHdr; +#endif +#ifndef TFRAMES_ENABLED /** I-Frame 6LowPAN interoperability byte */ -#ifdef CC2420_IFRAME_TYPE nxle_uint8_t network; #endif nxle_uint8_t type; } cc2420_header_t; - + /** * CC2420 Packet Footer */ @@ -66,15 +120,19 @@ typedef nx_struct cc2420_footer_t { /** * CC2420 Packet metadata. Contains extra information about the message - * that will not be transmitted + * that will not be transmitted. + * + * Note that the first two bytes automatically take in the values of the + * FCS when the payload is full. Do not modify the first two bytes of metadata. */ typedef nx_struct cc2420_metadata_t { - nx_uint8_t tx_power; nx_uint8_t rssi; nx_uint8_t lqi; + nx_uint8_t tx_power; nx_bool crc; nx_bool ack; - nx_uint16_t time; + nx_bool timesync; + nx_uint32_t timestamp; nx_uint16_t rxInterval; /** Packet Link Metadata */ @@ -82,7 +140,6 @@ typedef nx_struct cc2420_metadata_t { nx_uint16_t maxRetries; nx_uint16_t retryDelay; #endif - } cc2420_metadata_t; @@ -113,13 +170,12 @@ typedef nx_struct cc2420_packet_t { #endif /** - * The 6LowPAN ID has yet to be defined for a TinyOS network. + * The 6LowPAN NALP ID for a TinyOS network is 63 (TEP 125). */ #ifndef TINYOS_6LOWPAN_NETWORK_ID -#define TINYOS_6LOWPAN_NETWORK_ID 0x0 +#define TINYOS_6LOWPAN_NETWORK_ID 0x3f #endif - enum { // size of the header not including the length byte MAC_HEADER_SIZE = sizeof( cc2420_header_t ) - 1, @@ -127,6 +183,10 @@ enum { MAC_FOOTER_SIZE = sizeof( uint16_t ), // MDU MAC_PACKET_SIZE = MAC_HEADER_SIZE + TOSH_DATA_LENGTH + MAC_FOOTER_SIZE, + + CC2420_SIZE = MAC_HEADER_SIZE + MAC_FOOTER_SIZE, + + AM_OVERHEAD = 2, }; enum cc2420_enums { @@ -135,7 +195,7 @@ enum cc2420_enums { CC2420_TIME_SYMBOL = 2, // 2 symbols / jiffy CC2420_BACKOFF_PERIOD = ( 20 / CC2420_TIME_SYMBOL ), // symbols CC2420_MIN_BACKOFF = ( 20 / CC2420_TIME_SYMBOL ), // platform specific? - CC2420_ACK_WAIT_DELAY = 128, // jiffies + CC2420_ACK_WAIT_DELAY = 256, // jiffies }; enum cc2420_status_enums { @@ -161,7 +221,7 @@ enum cc2420_config_reg_enums { CC2420_SACK = 0x0a, CC2420_SACKPEND = 0x0b, CC2420_SRXDEC = 0x0c, - CC2420_SRXENC = 0x0d, + CC2420_STXENC = 0x0d, CC2420_SAES = 0x0e, CC2420_MAIN = 0x10, CC2420_MDMCTRL0 = 0x11, @@ -359,4 +419,25 @@ enum cc2420_sfdmux_enums { CC2420_SFDMUX_XOSC16M_STABLE = 24, }; +enum cc2420_security_enums{ + CC2420_NO_SEC = 0, + CC2420_CBC_MAC = 1, + CC2420_CTR = 2, + CC2420_CCM = 3, + NO_SEC = 0, + CBC_MAC_4 = 1, + CBC_MAC_8 = 2, + CBC_MAC_16 = 3, + CTR = 4, + CCM_4 = 5, + CCM_8 = 6, + CCM_16 = 7 +}; +norace uint8_t SECURITYLOCK = 0; + +enum +{ + CC2420_INVALID_TIMESTAMP = 0x80000000L, +}; + #endif