宁国市环保局 张菁菁:[转载]tinyos2.0的消息结构

来源:百度文库 编辑:偶看新闻 时间:2024/05/02 04:43:19
原文地址:tinyos2.0的消息结构作者:zhukai79

消息缓冲区:TinyOS2.0中的消息缓冲区类型是message_t(与1.x不同),并且仍采用了静态包缓冲策略。缓冲区大小可以适合任何节点的通信接口,组件不能直接访问结构的各域,所有缓冲区的访问必须通过接口AMPacket和Packet(定义在opttinyos-2.xtosintefaces目录)实现。

Message.h

#ifndef __MESSAGE_H__

#define __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_theader[sizeof(message_header_t)];

  nx_uint8_t data[TOSH_DATA_LENGTH];

  nx_uint8_tfooter[sizeof(message_footer_t)];

  nx_uint8_tmetadata[sizeof(message_metadata_t)];

} message_t;

************************

Am.h

typedef nx_uint8_t nx_am_id_t;

typedef nx_uint8_t nx_am_group_t;

typedef nx_uint16_t nx_am_addr_t;

 

typedef uint8_t am_id_t;

typedef uint8_t am_group_t;

typedef uint16_t am_addr_t;

 

enum {

  AM_BROADCAST_ADDR = 0xffff,

};

 

#ifndef DEFINED_TOS_AM_GROUP

#define DEFINED_TOS_AM_GROUP 0x22

#endif

 

#ifndef DEFINED_TOS_AM_ADDRESS

#define DEFINED_TOS_AM_ADDRESS 1

#endif

 

enum {

  TOS_AM_GROUP = DEFINED_TOS_AM_GROUP,

  TOS_AM_ADDRESS = DEFINED_TOS_AM_ADDRESS

};

 

#define UQ_AMQUEUE_SEND "amqueue.send"

************************************

Serial.h

#include "AM.h"

typedef uint8_t uart_id_t;

#define UQ_SERIALQUEUE_SEND "SerialQueueP.Send"

enum {

 HDLC_FLAG_BYTE         = 0x7e,

 HDLC_CTLESC_BYTE     = 0x7d,

};

// message_t type dispatch

enum {

  TOS_SERIAL_ACTIVE_MESSAGE_ID = 0,

  TOS_SERIAL_CC1000_ID = 1,

  TOS_SERIAL_802_15_4_ID = 2,

  TOS_SERIAL_UNKNOWN_ID = 255,

};

// Framer-level dispatch

enum {

  SERIAL_PROTO_ACK = 67,

  SERIAL_PROTO_PACKET_ACK = 68,

  SERIAL_PROTO_PACKET_NOACK = 69,

  SERIAL_PROTO_PACKET_UNKNOWN = 255

};

 

typedef struct radio_stats {

  uint8_t version;

  uint8_t flags;

  uint8_t reserved;

  uint8_t platform;

  uint16_t MTU;

  uint16_t radio_crc_fail;

  uint16_t radio_queue_drops;

  uint16_t serial_crc_fail;

  uint16_t serial_tx_fail;

  uint16_t serial_short_packets;

  uint16_t serial_proto_drops;

} radio_stats_t;

 

typedef nx_struct serial_header {

  nx_am_addr_t dest;

  nx_am_addr_t src;

  nx_uint8_t length;

  nx_am_group_t group;

  nx_am_id_t type;

} serial_header_t;

 

typedef nx_struct serial_packet {

  serial_header_t header;

  nx_uint8_t data[];

} serial_packet_t;

 

#endif

*********************************************

typedef union mega_mica_header {

  cc1000_header_t cc1k;

  cc2420_header_t cc2420;

  serial_header_t serial;

} message_header_t;

 

typedef union mega_mica_footer {

  cc1000_footer_t cc1k;

  cc2420_footer_t cc2420;

} message_footer_t;

 

typedef union mega_mica_metadata {

  cc1000_metadata_t cc1k;

  cc2420_metadata_t cc2420;

} message__metadata_t;

 

*********************************************

typedef nx_struct cc2420_metadata_t {

  nx_uint8_t tx_power;

  nx_uint8_t rssi;

  nx_uint8_t lqi;

  nx_bool crc;

  nx_bool ack;

  nx_uint16_t time;

} cc2420_metadata_t;

 

*********************************************

*********************************************

typedef struct TOS_Msg {

  // The following fields aretransmitted/received on the radio.

  uint8_t length;

  uint8_t fcfhi;

  uint8_t fcflo;

  uint8_t dsn;

  uint16_t destpan;

  uint16_t addr;

  uint8_t type;

  uint8_t group;

  int8_t data[TOSH_DATA_LENGTH];

 

  // The following fields are not actuallytransmitted or received

  // on the radio! They are used for internalaccounting only.

  // The reason they are in this structure isthat the AM interface

  // requires them to be part of the TOS_Msgthat is passed to

  // send/receive operations.

 

  uint8_t strength;

  uint8_t lqi;

  bool crc;

  uint8_t ack;

  uint16_t time;

 } TOS_Msg;

**********************************

 

#ifndef PACKET_ACK_H

#define PACKET_ACK_H

typedef enum {

   NO_ACK_REQUESTED = 1,

   WAS_ACKED,

   WAS_NOT_ACKED,

   ACK_REQUESTED = 128U

} packet_ack_t;

****************************

Cc2420.h

#ifndef __CC2420_H__

#define __CC2420_H__

 

typedef uint8_t cc2420_status_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;

 

 

#ifdef CC2420_IFRAME_TYPE

  nxle_uint8_t network;

#endif

 

  nxle_uint8_t type;

} cc2420_header_t;

 

 

typedef nx_struct cc2420_footer_t {

} cc2420_footer_t;

 

 

typedef nx_struct cc2420_metadata_t {

  nx_uint8_t tx_power;

  nx_uint8_t rssi;

  nx_uint8_t lqi;

  nx_bool crc;

  nx_bool ack;

  nx_uint16_t time;

  nx_uint16_t rxInterval;

 

 

#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;

 

 

#ifndef TOSH_DATA_LENGTH

#define TOSH_DATA_LENGTH 28

#endif

 

#ifndef CC2420_DEF_CHANNEL

#define CC2420_DEF_CHANNEL 26

#endif

 

#ifndef CC2420_DEF_RFPOWER

#define CC2420_DEF_RFPOWER 31

#endif

 

 

#ifndef RECEIVE_HISTORY_SIZE

#define RECEIVE_HISTORY_SIZE 4

#endif

 

 

#ifndef TINYOS_6LOWPAN_NETWORK_ID

#define TINYOS_6LOWPAN_NETWORK_ID 0x0

#endif

 

 

enum {

  // size of the header not including thelength byte

  MAC_HEADER_SIZE = sizeof( cc2420_header_t ) -1,

  // size of the footer (FCS field)

  MAC_FOOTER_SIZE = sizeof( uint16_t ),

  // MDU

  MAC_PACKET_SIZE = MAC_HEADER_SIZE +TOSH_DATA_LENGTH + MAC_FOOTER_SIZE,

};

*******************

IEEE802154.h

#ifndef __IEEE802154_H__

#define __IEEE802154_H__

 

enum ieee154_fcf_enums {

  IEEE154_FCF_FRAME_TYPE = 0,

  IEEE154_FCF_SECURITY_ENABLED = 3,

  IEEE154_FCF_FRAME_PENDING = 4,

  IEEE154_FCF_ACK_REQ = 5,

  IEEE154_FCF_INTRAPAN = 6,

  IEEE154_FCF_DEST_ADDR_MODE = 10,

  IEEE154_FCF_SRC_ADDR_MODE = 14,

};

 

enum ieee154_fcf_type_enums {

  IEEE154_TYPE_BEACON = 0,

  IEEE154_TYPE_DATA = 1,

  IEEE154_TYPE_ACK = 2,

  IEEE154_TYPE_MAC_CMD = 3,

};

 

enum iee154_fcf_addr_mode_enums {

  IEEE154_ADDR_NONE = 0,

  IEEE154_ADDR_SHORT = 2,

  IEEE154_ADDR_EXT = 3,

};