desloges-libioulle / Mbed 2 deprecated app3_coordinator

Dependencies:   mbed-rtos mbed EthernetInterface

Committer:
amdesloges
Date:
Sun Feb 12 17:00:40 2017 +0000
Revision:
1:d5fc0c731f5d
Parent:
0:671a7b7e4673
Child:
2:ff0b74e5e62c
Ajout d?finitions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
libv2001 0:671a7b7e4673 1 #include "mbed.h"
libv2001 0:671a7b7e4673 2
libv2001 0:671a7b7e4673 3 #ifndef XBEE_H
libv2001 0:671a7b7e4673 4 #define XBEE_H
libv2001 0:671a7b7e4673 5
libv2001 0:671a7b7e4673 6 #define START 0x7E
libv2001 0:671a7b7e4673 7
libv2001 0:671a7b7e4673 8 #define ADDR_64BIT_SIZE 8
libv2001 0:671a7b7e4673 9 #define ADDR_16BIT_SIZE 2
libv2001 0:671a7b7e4673 10 #define AT_CMD_ID_SIZE 2
libv2001 0:671a7b7e4673 11
libv2001 0:671a7b7e4673 12 // Présent dans tous les frames
libv2001 0:671a7b7e4673 13 #define START_IDX 0
libv2001 0:671a7b7e4673 14 #define LENGTH_MSB_IDX 1
libv2001 0:671a7b7e4673 15 #define LENGTH_LSB_IDX 2
libv2001 0:671a7b7e4673 16 #define API_ID_IDX 3
libv2001 0:671a7b7e4673 17 #define FRAME_MIN_SIZE 4
libv2001 0:671a7b7e4673 18
libv2001 0:671a7b7e4673 19 // Les API ID supportés2
libv2001 0:671a7b7e4673 20 #define API_ID_AT_CMD 0x08
libv2001 0:671a7b7e4673 21 #define API_ID_AT_CMD_QUEUE 0x09
libv2001 0:671a7b7e4673 22 #define API_ID_TRANSMIT 0x10
libv2001 0:671a7b7e4673 23 #define API_ID_REMOTE_AT_RQST 0x17
libv2001 0:671a7b7e4673 24 #define API_ID_AT_CMD_RSP 0x88
libv2001 0:671a7b7e4673 25 #define API_ID_MODEM_STATUS 0x8A
libv2001 0:671a7b7e4673 26 #define API_ID_TRANSMIT_STATUS 0x8B
libv2001 0:671a7b7e4673 27 #define API_ID_RECEIVED_PACKET 0x90
amdesloges 1:d5fc0c731f5d 28 #define API_ID_REMOTE_CMD_RSP 0x97
libv2001 0:671a7b7e4673 29
libv2001 0:671a7b7e4673 30 // Présent dans la majorité des frames
libv2001 0:671a7b7e4673 31 #define FRAME_ID_IDX 4
libv2001 0:671a7b7e4673 32
libv2001 0:671a7b7e4673 33 // Spécifique pour l'AT Command
libv2001 0:671a7b7e4673 34 #define AT_CMD_ID_IDX 5
libv2001 0:671a7b7e4673 35 #define AT_PARAM_IDX 7
libv2001 0:671a7b7e4673 36 #define AT_MIN_SIZE 4
libv2001 0:671a7b7e4673 37
libv2001 0:671a7b7e4673 38 // Spécifique pour l'AT Command Queue
libv2001 0:671a7b7e4673 39 #define AT_QUEUE_CMD_1_IDX 5
libv2001 0:671a7b7e4673 40 #define AT_QUEUE_CMD_2_IDX 6
libv2001 0:671a7b7e4673 41 #define AT_QUEUE_PARAM_IDX 7
libv2001 0:671a7b7e4673 42 #define AT_QUEUE_MIN_SIZE 4
libv2001 0:671a7b7e4673 43
libv2001 0:671a7b7e4673 44 // Spécifique pour la Transmit Command
libv2001 0:671a7b7e4673 45 #define TRANSMIT_64BIT_MSB_IDX 5
libv2001 0:671a7b7e4673 46 #define TRANSMIT_64BIT_LSB_IDX 12
libv2001 0:671a7b7e4673 47 #define TRANSMIT_16BIT_MSB_IDX 13
libv2001 0:671a7b7e4673 48 #define TRANSMIT_16BIT_LSB_IDX 14
libv2001 0:671a7b7e4673 49 #define TRANSMIT_BROADCAST_IDX 15
libv2001 0:671a7b7e4673 50 #define TRANSMIT_OPT_IDX 16
libv2001 0:671a7b7e4673 51 #define TRANSMIT_DATA_IDX 17
libv2001 0:671a7b7e4673 52 #define TRANSMIT_MIN_SIZE 14
libv2001 0:671a7b7e4673 53
libv2001 0:671a7b7e4673 54 // Les options de la Transmit Command
libv2001 0:671a7b7e4673 55 #define TRANSMIT_DEFAULT_BROADCAST 0x00
libv2001 0:671a7b7e4673 56 #define TRANSMIT_DEFAULT_OPT 0x00
libv2001 0:671a7b7e4673 57
libv2001 0:671a7b7e4673 58 // Spécifique pour la Remote AT Request Command
libv2001 0:671a7b7e4673 59 #define REMOTE_AT_RQST_64BIT_MSB_IDX 5
libv2001 0:671a7b7e4673 60 #define REMOTE_AT_RQST_64BIT_LSB_IDX 12
libv2001 0:671a7b7e4673 61 #define REMOTE_AT_RQST_16BIT_MSB_IDX 13
libv2001 0:671a7b7e4673 62 #define REMOTE_AT_RQST_16BIT_LSB_IDX 14
libv2001 0:671a7b7e4673 63 #define REMOTE_AT_RQST_OPT_IDX 15
libv2001 0:671a7b7e4673 64 #define REMOTE_AT_RQST_AT_CMD1_IDX 16
libv2001 0:671a7b7e4673 65 #define REMOTE_AT_RQST_AT_CMD2_IDX 17
libv2001 0:671a7b7e4673 66 #define REMOTE_AT_RQST_AT_PARAM_IDX 18
libv2001 0:671a7b7e4673 67 #define REMOTE_AT_RQST_MIN_SIZE 15
libv2001 0:671a7b7e4673 68
libv2001 0:671a7b7e4673 69 // Les options pour la Remote AT Request Command
libv2001 0:671a7b7e4673 70 #define REMOTE_AT_RQST_DEFAULT_OPT 0x00
libv2001 0:671a7b7e4673 71 #define REMOTE_AT_RQST_OPT_APPLY_CHANGE 0x02
libv2001 0:671a7b7e4673 72
libv2001 0:671a7b7e4673 73 // Spécifique pour la AT Command Response
libv2001 0:671a7b7e4673 74 #define AT_CMD_RSP_AT_CMD1_IDX 5
libv2001 0:671a7b7e4673 75 #define AT_CMD_RSP_AT_CMD2_IDX 6
libv2001 0:671a7b7e4673 76 #define AT_CMD_RSP_STATUS_IDX 7
libv2001 0:671a7b7e4673 77 #define AT_CMD_RSP_DATA_IDX 8
libv2001 0:671a7b7e4673 78 #define AT_CMD_RSP_MIN_SIZE 5
libv2001 0:671a7b7e4673 79
libv2001 0:671a7b7e4673 80 // Les status pour la AT Command Response
libv2001 0:671a7b7e4673 81 #define AT_CMD_RSP_STATUS_OK 0x00
libv2001 0:671a7b7e4673 82 #define AT_CMD_RSP_STATUS_ERROR 0x01
libv2001 0:671a7b7e4673 83 #define AT_CMD_RSP_STATUS_INVALID_CMD 0x02
libv2001 0:671a7b7e4673 84 #define AT_CMD_RSP_STATUS_INVALID_PARAM 0x03
libv2001 0:671a7b7e4673 85 #define AT_CMD_RSP_STATUS_TX_FAILURE 0x04
libv2001 0:671a7b7e4673 86
libv2001 0:671a7b7e4673 87 // Spécifique pour la Modem Status Command
libv2001 0:671a7b7e4673 88 #define MODEM_STATUS_STATUS_IDX 4
libv2001 0:671a7b7e4673 89
libv2001 0:671a7b7e4673 90 // Les status pour la Modem Status Command
libv2001 0:671a7b7e4673 91 #define MODEM_STATUS_HARDWARE_RST 0x00
libv2001 0:671a7b7e4673 92 #define MODEM_STATUS_JOINED_NETWORK 0x02
libv2001 0:671a7b7e4673 93 #define MODEM_STATUS_DISASSOCIATED 0x03
libv2001 0:671a7b7e4673 94 #define MODEM_STATUS_COORDINATOR_STARTED 0x06
libv2001 0:671a7b7e4673 95
libv2001 0:671a7b7e4673 96 // Spécifique pour la Transit Status Command
libv2001 0:671a7b7e4673 97 #define TRANSMIT_STATUS_16BIT_MSB_IDX 5
libv2001 0:671a7b7e4673 98 #define TRANSMIT_STATUS_16BIT_LSB_IDX 6
libv2001 0:671a7b7e4673 99 #define TRANSMIT_STATUS_RETRY_COUNT_IDX 7
libv2001 0:671a7b7e4673 100 #define TRANSMIT_STATUS_DELIVERY_STATUS_IDX 8
libv2001 0:671a7b7e4673 101 #define TRANSMIT_STATUS_DISCOVERY_STATUS_IDX 9
libv2001 0:671a7b7e4673 102
libv2001 0:671a7b7e4673 103 #define TRANSMIT_STATUS_OK 0x00
libv2001 0:671a7b7e4673 104
libv2001 0:671a7b7e4673 105 // Spécifique pour la Received Packet Command
libv2001 0:671a7b7e4673 106 #define RECEIVED_PACKET_64BIT_MSB_IDX 4
libv2001 0:671a7b7e4673 107 #define RECEIVED_PACKET_64BIT_LSB_IDX 11
libv2001 0:671a7b7e4673 108 #define RECEIVED_PACKET_16BIT_MSB_IDX 12
libv2001 0:671a7b7e4673 109 #define RECEIVED_PACKET_16BIT_LSB_IDX 13
libv2001 0:671a7b7e4673 110 #define RECEIVED_PACKET_OPT_IDX 14
libv2001 0:671a7b7e4673 111 #define RECEIVED_PACKET_DATA_IDX 15
libv2001 0:671a7b7e4673 112 #define RECEIVED_PACKET_MIN_SIZE 12
libv2001 0:671a7b7e4673 113
amdesloges 1:d5fc0c731f5d 114 //
amdesloges 1:d5fc0c731f5d 115 #define REMOTE_CMD_RSP_64BIT_MSB_IDX 5
amdesloges 1:d5fc0c731f5d 116 #define REMOTE_CMD_RSP_64BIT_LSB_IDX 12
amdesloges 1:d5fc0c731f5d 117 #define REMOTE_CMD_RSP_16BIT_MSB_IDX 13
amdesloges 1:d5fc0c731f5d 118 #define REMOTE_CMD_RSP_16BIT_LSB_IDX 14
amdesloges 1:d5fc0c731f5d 119 #define REMOTE_CMD_RSP_AT_IDX 15
amdesloges 1:d5fc0c731f5d 120 #define REMOTE_CMD_RSP_STATUS_IDX 17
amdesloges 1:d5fc0c731f5d 121 #define REMOTE_CMD_RSP_DATA_IDX 18
amdesloges 1:d5fc0c731f5d 122 #define REMOTE_CMD_RSP_MIN_SIZE 14
amdesloges 1:d5fc0c731f5d 123
amdesloges 1:d5fc0c731f5d 124 // Les status pour la AT Command Response
amdesloges 1:d5fc0c731f5d 125 #define REMOTE_AT_CMD_RSP_STATUS_OK 0x00
amdesloges 1:d5fc0c731f5d 126 #define REMOTE_AT_CMD_RSP_STATUS_ERROR 0x01
amdesloges 1:d5fc0c731f5d 127 #define REMOTE_AT_CMD_RSP_STATUS_INVALID_CMD 0x02
amdesloges 1:d5fc0c731f5d 128 #define REMOTE_AT_CMD_RSP_STATUS_INVALID_PARAM 0x03
amdesloges 1:d5fc0c731f5d 129 #define REMOTE_AT_CMD_RSP_STATUS_TX_FAILURE 0x04
amdesloges 1:d5fc0c731f5d 130
libv2001 0:671a7b7e4673 131 inline uint16_t GetFrameLength(char * buffer){
libv2001 0:671a7b7e4673 132 return (((uint16_t)buffer[LENGTH_MSB_IDX]) << 8) + buffer[LENGTH_LSB_IDX];
libv2001 0:671a7b7e4673 133 }
libv2001 0:671a7b7e4673 134
libv2001 0:671a7b7e4673 135 bool ValidateCheckSum(char * buffer){
libv2001 0:671a7b7e4673 136 uint16_t length = GetFrameLength(buffer);
libv2001 0:671a7b7e4673 137
libv2001 0:671a7b7e4673 138 char sum = 0;
libv2001 0:671a7b7e4673 139 for (int i = 0; i <= length; ++i){
libv2001 0:671a7b7e4673 140 sum += buffer[i + API_ID_IDX];
libv2001 0:671a7b7e4673 141 }
libv2001 0:671a7b7e4673 142
libv2001 0:671a7b7e4673 143 return sum == 0xff;
libv2001 0:671a7b7e4673 144 }
libv2001 0:671a7b7e4673 145
libv2001 0:671a7b7e4673 146 inline uint16_t GetAtParamLength(char * buffer){
libv2001 0:671a7b7e4673 147 return GetFrameLength(buffer) - AT_MIN_SIZE;
libv2001 0:671a7b7e4673 148 }
libv2001 0:671a7b7e4673 149
libv2001 0:671a7b7e4673 150 inline uint16_t GetAtQueueParamLength(char * buffer){
libv2001 0:671a7b7e4673 151 return GetFrameLength(buffer) - AT_QUEUE_MIN_SIZE;
libv2001 0:671a7b7e4673 152 }
libv2001 0:671a7b7e4673 153
libv2001 0:671a7b7e4673 154 inline uint16_t GetTransmitDataLength(char * buffer){
libv2001 0:671a7b7e4673 155 return GetFrameLength(buffer) - TRANSMIT_MIN_SIZE;
libv2001 0:671a7b7e4673 156 }
libv2001 0:671a7b7e4673 157
libv2001 0:671a7b7e4673 158 inline uint16_t GetRemoteAtRequestParamLength(char * buffer){
libv2001 0:671a7b7e4673 159 return GetFrameLength(buffer) - REMOTE_AT_RQST_MIN_SIZE;
libv2001 0:671a7b7e4673 160 }
libv2001 0:671a7b7e4673 161
libv2001 0:671a7b7e4673 162 inline uint16_t GetAtResponseParamLength(char * buffer){
libv2001 0:671a7b7e4673 163 return GetFrameLength(buffer) - AT_CMD_RSP_MIN_SIZE;
libv2001 0:671a7b7e4673 164 }
libv2001 0:671a7b7e4673 165
libv2001 0:671a7b7e4673 166 inline uint16_t GetReceivedPacketDataLength(char * buffer){
libv2001 0:671a7b7e4673 167 return GetFrameLength(buffer) - RECEIVED_PACKET_MIN_SIZE;
libv2001 0:671a7b7e4673 168 }
libv2001 0:671a7b7e4673 169
libv2001 0:671a7b7e4673 170 inline long long int Get64Addr(char * buffer, int start){
libv2001 0:671a7b7e4673 171 long long int addr = 0;
libv2001 0:671a7b7e4673 172 memcpy(&addr, &buffer[start], ADDR_64BIT_SIZE);
libv2001 0:671a7b7e4673 173
libv2001 0:671a7b7e4673 174 return addr;
libv2001 0:671a7b7e4673 175 }
libv2001 0:671a7b7e4673 176
libv2001 0:671a7b7e4673 177 #endif