Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-rtos mbed EthernetInterface
Diff: xbee.h
- Revision:
- 0:671a7b7e4673
- Child:
- 1:d5fc0c731f5d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xbee.h Sun Feb 12 16:07:11 2017 +0000 @@ -0,0 +1,159 @@ +#include "mbed.h" + +#ifndef XBEE_H +#define XBEE_H + +#define START 0x7E + +#define ADDR_64BIT_SIZE 8 +#define ADDR_16BIT_SIZE 2 +#define AT_CMD_ID_SIZE 2 + +// Présent dans tous les frames +#define START_IDX 0 +#define LENGTH_MSB_IDX 1 +#define LENGTH_LSB_IDX 2 +#define API_ID_IDX 3 +#define FRAME_MIN_SIZE 4 + +// Les API ID supportés2 +#define API_ID_AT_CMD 0x08 +#define API_ID_AT_CMD_QUEUE 0x09 +#define API_ID_TRANSMIT 0x10 +#define API_ID_REMOTE_AT_RQST 0x17 +#define API_ID_AT_CMD_RSP 0x88 +#define API_ID_MODEM_STATUS 0x8A +#define API_ID_TRANSMIT_STATUS 0x8B +#define API_ID_RECEIVED_PACKET 0x90 + +// Présent dans la majorité des frames +#define FRAME_ID_IDX 4 + +// Spécifique pour l'AT Command +#define AT_CMD_ID_IDX 5 +#define AT_PARAM_IDX 7 +#define AT_MIN_SIZE 4 + +// Spécifique pour l'AT Command Queue +#define AT_QUEUE_CMD_1_IDX 5 +#define AT_QUEUE_CMD_2_IDX 6 +#define AT_QUEUE_PARAM_IDX 7 +#define AT_QUEUE_MIN_SIZE 4 + +// Spécifique pour la Transmit Command +#define TRANSMIT_64BIT_MSB_IDX 5 +#define TRANSMIT_64BIT_LSB_IDX 12 +#define TRANSMIT_16BIT_MSB_IDX 13 +#define TRANSMIT_16BIT_LSB_IDX 14 +#define TRANSMIT_BROADCAST_IDX 15 +#define TRANSMIT_OPT_IDX 16 +#define TRANSMIT_DATA_IDX 17 +#define TRANSMIT_MIN_SIZE 14 + +// Les options de la Transmit Command +#define TRANSMIT_DEFAULT_BROADCAST 0x00 +#define TRANSMIT_DEFAULT_OPT 0x00 + +// Spécifique pour la Remote AT Request Command +#define REMOTE_AT_RQST_64BIT_MSB_IDX 5 +#define REMOTE_AT_RQST_64BIT_LSB_IDX 12 +#define REMOTE_AT_RQST_16BIT_MSB_IDX 13 +#define REMOTE_AT_RQST_16BIT_LSB_IDX 14 +#define REMOTE_AT_RQST_OPT_IDX 15 +#define REMOTE_AT_RQST_AT_CMD1_IDX 16 +#define REMOTE_AT_RQST_AT_CMD2_IDX 17 +#define REMOTE_AT_RQST_AT_PARAM_IDX 18 +#define REMOTE_AT_RQST_MIN_SIZE 15 + +// Les options pour la Remote AT Request Command +#define REMOTE_AT_RQST_DEFAULT_OPT 0x00 +#define REMOTE_AT_RQST_OPT_APPLY_CHANGE 0x02 + +// Spécifique pour la AT Command Response +#define AT_CMD_RSP_AT_CMD1_IDX 5 +#define AT_CMD_RSP_AT_CMD2_IDX 6 +#define AT_CMD_RSP_STATUS_IDX 7 +#define AT_CMD_RSP_DATA_IDX 8 +#define AT_CMD_RSP_MIN_SIZE 5 + +// Les status pour la AT Command Response +#define AT_CMD_RSP_STATUS_OK 0x00 +#define AT_CMD_RSP_STATUS_ERROR 0x01 +#define AT_CMD_RSP_STATUS_INVALID_CMD 0x02 +#define AT_CMD_RSP_STATUS_INVALID_PARAM 0x03 +#define AT_CMD_RSP_STATUS_TX_FAILURE 0x04 + +// Spécifique pour la Modem Status Command +#define MODEM_STATUS_STATUS_IDX 4 + +// Les status pour la Modem Status Command +#define MODEM_STATUS_HARDWARE_RST 0x00 +#define MODEM_STATUS_JOINED_NETWORK 0x02 +#define MODEM_STATUS_DISASSOCIATED 0x03 +#define MODEM_STATUS_COORDINATOR_STARTED 0x06 + +// Spécifique pour la Transit Status Command +#define TRANSMIT_STATUS_16BIT_MSB_IDX 5 +#define TRANSMIT_STATUS_16BIT_LSB_IDX 6 +#define TRANSMIT_STATUS_RETRY_COUNT_IDX 7 +#define TRANSMIT_STATUS_DELIVERY_STATUS_IDX 8 +#define TRANSMIT_STATUS_DISCOVERY_STATUS_IDX 9 + +#define TRANSMIT_STATUS_OK 0x00 + +// Spécifique pour la Received Packet Command +#define RECEIVED_PACKET_64BIT_MSB_IDX 4 +#define RECEIVED_PACKET_64BIT_LSB_IDX 11 +#define RECEIVED_PACKET_16BIT_MSB_IDX 12 +#define RECEIVED_PACKET_16BIT_LSB_IDX 13 +#define RECEIVED_PACKET_OPT_IDX 14 +#define RECEIVED_PACKET_DATA_IDX 15 +#define RECEIVED_PACKET_MIN_SIZE 12 + +inline uint16_t GetFrameLength(char * buffer){ + return (((uint16_t)buffer[LENGTH_MSB_IDX]) << 8) + buffer[LENGTH_LSB_IDX]; +} + +bool ValidateCheckSum(char * buffer){ + uint16_t length = GetFrameLength(buffer); + + char sum = 0; + for (int i = 0; i <= length; ++i){ + sum += buffer[i + API_ID_IDX]; + } + + return sum == 0xff; +} + +inline uint16_t GetAtParamLength(char * buffer){ + return GetFrameLength(buffer) - AT_MIN_SIZE; +} + +inline uint16_t GetAtQueueParamLength(char * buffer){ + return GetFrameLength(buffer) - AT_QUEUE_MIN_SIZE; +} + +inline uint16_t GetTransmitDataLength(char * buffer){ + return GetFrameLength(buffer) - TRANSMIT_MIN_SIZE; +} + +inline uint16_t GetRemoteAtRequestParamLength(char * buffer){ + return GetFrameLength(buffer) - REMOTE_AT_RQST_MIN_SIZE; +} + +inline uint16_t GetAtResponseParamLength(char * buffer){ + return GetFrameLength(buffer) - AT_CMD_RSP_MIN_SIZE; +} + +inline uint16_t GetReceivedPacketDataLength(char * buffer){ + return GetFrameLength(buffer) - RECEIVED_PACKET_MIN_SIZE; +} + +inline long long int Get64Addr(char * buffer, int start){ + long long int addr = 0; + memcpy(&addr, &buffer[start], ADDR_64BIT_SIZE); + + return addr; +} + +#endif \ No newline at end of file