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;
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
*/
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 */
nx_uint16_t maxRetries;
nx_uint16_t retryDelay;
#endif
-
} cc2420_metadata_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,
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 {
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