AM.h
上传用户:joranyuan
上传日期:2022-06-23
资源大小:3306k
文件大小:3k
源码类别:

网络

开发平台:

Others

  1. #ifndef AM_H_INCLUDED
  2. #define AM_H_INCLUDED
  3. enum {
  4.   TOS_BCAST_ADDR = 0xffff,
  5.   TOS_UART_ADDR = 0x007e,
  6. };
  7. #ifndef DEF_TOS_AM_GROUP
  8. #define DEF_TOS_AM_GROUP 0x7d
  9. #endif
  10. enum {
  11.   TOS_DEFAULT_AM_GROUP = DEF_TOS_AM_GROUP
  12. };
  13. uint8_t TOS_AM_GROUP = TOS_DEFAULT_AM_GROUP;
  14. #ifndef TOSH_DATA_LENGTH
  15. #define TOSH_DATA_LENGTH 70
  16. #endif
  17. #ifndef TOSH_AM_LENGTH
  18. #define TOSH_AM_LENGTH 1
  19. #endif
  20. #ifndef TINYSEC_MAC_LENGTH
  21. #define TINYSEC_MAC_LENGTH 4
  22. #endif
  23. #ifndef TINYSEC_IV_LENGTH
  24. #define TINYSEC_IV_LENGTH 4
  25. #endif
  26. #ifndef TINYSEC_ACK_LENGTH
  27. #define TINYSEC_ACK_LENGTH 1
  28. #endif
  29. typedef struct TOS_Msg
  30. {
  31.   /* The following fields are transmitted/received on the radio. */
  32.   uint16_t addr;
  33.   uint8_t type;
  34.   uint8_t group;
  35.   uint8_t length;
  36.   int8_t data[TOSH_DATA_LENGTH];
  37.   uint16_t crc;
  38.   /* The following fields are not actually transmitted or received 
  39.    * on the radio! They are used for internal accounting only.
  40.    * The reason they are in this structure is that the AM interface
  41.    * requires them to be part of the TOS_Msg that is passed to
  42.    * send/receive operations.
  43.    */
  44.   uint16_t strength;
  45.   uint8_t ack;
  46.   uint16_t time;
  47.   uint8_t sendSecurityMode;
  48.   uint8_t receiveSecurityMode;  
  49. } TOS_Msg;
  50. typedef struct TOS_Msg_TinySecCompat
  51. {
  52.   /* The following fields are transmitted/received on the radio. */
  53.   uint16_t addr;
  54.   uint8_t type;
  55.   // length and group bytes are swapped
  56.   uint8_t length;
  57.   uint8_t group;
  58.   int8_t data[TOSH_DATA_LENGTH];
  59.   uint16_t crc;
  60.   /* The following fields are not actually transmitted or received 
  61.    * on the radio! They are used for internal accounting only.
  62.    * The reason they are in this structure is that the AM interface
  63.    * requires them to be part of the TOS_Msg that is passed to
  64.    * send/receive operations.
  65.    */
  66.   uint16_t strength;
  67.   uint8_t ack;
  68.   uint16_t time;
  69.   uint8_t sendSecurityMode;
  70.   uint8_t receiveSecurityMode;  
  71. } TOS_Msg_TinySecCompat;
  72. typedef struct TinySec_Msg
  73.   uint16_t addr;
  74.   uint8_t type;
  75.   uint8_t length;
  76.   // encryption iv
  77.   uint8_t iv[TINYSEC_IV_LENGTH];
  78.   // encrypted data
  79.   uint8_t enc[TOSH_DATA_LENGTH];
  80.   // message authentication code
  81.   uint8_t mac[TINYSEC_MAC_LENGTH];
  82.   // not transmitted - used only by MHSRTinySec
  83.   uint8_t calc_mac[TINYSEC_MAC_LENGTH];
  84.   uint8_t ack_byte;
  85.   bool cryptoDone;
  86.   bool receiveDone;
  87.   // indicates whether the calc_mac field has been computed
  88.   bool MACcomputed;
  89. } __attribute__((packed)) TinySec_Msg;
  90. enum {
  91.   MSG_DATA_SIZE = offsetof(struct TOS_Msg, crc) + sizeof(uint16_t), // 36 by default
  92.   TINYSEC_MSG_DATA_SIZE = offsetof(struct TinySec_Msg, mac) + TINYSEC_MAC_LENGTH, // 41 by default
  93.   DATA_LENGTH = TOSH_DATA_LENGTH,
  94.   LENGTH_BYTE_NUMBER = offsetof(struct TOS_Msg, length) + 1,
  95.   TINYSEC_NODE_ID_SIZE = sizeof(uint16_t)
  96. };
  97. enum {
  98.   TINYSEC_AUTH_ONLY = 1,
  99.   TINYSEC_ENCRYPT_AND_AUTH = 2,
  100.   TINYSEC_DISABLED = 3,
  101.   TINYSEC_RECEIVE_AUTHENTICATED = 4,
  102.   TINYSEC_RECEIVE_CRC = 5,
  103.   TINYSEC_RECEIVE_ANY = 6,
  104.   TINYSEC_ENABLED_BIT = 128,
  105.   TINYSEC_ENCRYPT_ENABLED_BIT = 64
  106. } __attribute__((packed));
  107. typedef TOS_Msg *TOS_MsgPtr;
  108. uint8_t TOS_MsgLength(uint8_t type)
  109. {
  110. #if 0
  111.   uint8_t i;
  112.   for (i = 0; i < MSGLEN_TABLE_SIZE; i++)
  113.     if (msgTable[i].handler == type)
  114.       return msgTable[i].length;
  115. #endif
  116.   return offsetof(TOS_Msg, strength);
  117. }
  118. #endif