//message.h
#include "platform_message.h"
#ifndef TOSH_DATA_LENGTH
#define TOSH_DATA_LENGTH 28
#endif
#ifndef TOS_BCAST_ADDR
#define TOS_BCAST_ADDR 0xFFFF
#endif
typedef nx_struct message_t {
nx_uint8_t header[sizeof(message_header_t)];
nx_uint8_t data[TOSH_DATA_LENGTH];
nx_uint8_t footer[sizeof(message_footer_t)];
nx_uint8_t metadata[sizeof(message_metadata_t)];
} message_t;
/*
* This resource is used to arbitrate access between ActiveMessageC,
* Ieee154MessageC and possibly future MessageC components to the
* underlying radio driver.
*/
#define RADIO_SEND_RESOURCE "RADIO_SEND_RESOURCE"
//platform_message.h
typedef union message_header {
cc2420_header_t cc2420;
serial_header_t serial;
} message_header_t;
typedef union TOSRadioFooter {
cc2420_footer_t cc2420;
} message_footer_t;
typedef union TOSRadioMetadata {
cc2420_metadata_t cc2420;
serial_metadata_t serial;
} message_metadata_t;
//CC2420.h
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 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_uint8_t dsn;
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 */
nxle_uint8_t network;
#endif
nxle_uint8_t type;
} cc2420_header_t;
/**
* CC2420 Packet Footer
*/
typedef nx_struct cc2420_footer_t {
} cc2420_footer_t;
/**
* CC2420 Packet metadata. Contains extra information about the message
* 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 rssi;
nx_uint8_t lqi;
nx_uint8_t tx_power;
nx_bool crc;
nx_bool ack;
nx_bool timesync;
nx_uint32_t timestamp;
nx_uint16_t rxInterval;
/** Packet Link Metadata */
#ifdef PACKET_LINK
nx_uint16_t maxRetries;
nx_uint16_t retryDelay;
#endif
} cc2420_metadata_t;
typedef nx_struct cc2420_packet_t {
cc2420_header_t packet;
nx_uint8_t data[];
} cc2420_packet_t;