Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
xbee.h@29:56b6c15904e6, 2017-10-02 (annotated)
- Committer:
- JayMcGee
- Date:
- Mon Oct 02 21:54:52 2017 +0000
- Revision:
- 29:56b6c15904e6
- Parent:
- 27:3baf4701a047
Merge
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Cheroukee | 1:ea1b52d0a8a3 | 1 | /*** |
Cheroukee | 1:ea1b52d0a8a3 | 2 | * xbee.h - en-tete de lib xbee - fouj1807 - mcgj2701 |
Cheroukee | 1:ea1b52d0a8a3 | 3 | */ |
Cheroukee | 1:ea1b52d0a8a3 | 4 | |
Cheroukee | 1:ea1b52d0a8a3 | 5 | #pragma once |
Cheroukee | 1:ea1b52d0a8a3 | 6 | |
Cheroukee | 1:ea1b52d0a8a3 | 7 | #include "mbed.h" |
Cheroukee | 17:8abdbfa6019c | 8 | #include "BufferedSerial.h" |
Cheroukee | 1:ea1b52d0a8a3 | 9 | |
Cheroukee | 5:9e6a09a38785 | 10 | // xbee serial port object |
Cheroukee | 17:8abdbfa6019c | 11 | extern BufferedSerial xbee; |
Cheroukee | 1:ea1b52d0a8a3 | 12 | |
Cheroukee | 5:9e6a09a38785 | 13 | // Type de frames possible dans le mode API |
Cheroukee | 1:ea1b52d0a8a3 | 14 | typedef enum { |
Cheroukee | 5:9e6a09a38785 | 15 | ATCommand = 0x08, // Commande AT |
Cheroukee | 2:a9bb12eefc08 | 16 | ATCommandQueue = 0x09, |
Cheroukee | 5:9e6a09a38785 | 17 | TransmitRequest = 0x10, // Requete d'envoi de donnees |
Cheroukee | 2:a9bb12eefc08 | 18 | ExplicitAddressing = 0x11, |
Cheroukee | 5:9e6a09a38785 | 19 | RemoteCommandRequest = 0x17,// Commande AT a distance |
Cheroukee | 2:a9bb12eefc08 | 20 | CreateSourceRoute = 0x21, |
Cheroukee | 5:9e6a09a38785 | 21 | ATCommandResponse = 0x88, |
Cheroukee | 2:a9bb12eefc08 | 22 | ModemStatus = 0x8A, |
Cheroukee | 2:a9bb12eefc08 | 23 | ZigBeeTransmitStatus = 0x8B, |
Cheroukee | 2:a9bb12eefc08 | 24 | ZigBeeReceivePacket = 0x90, |
Cheroukee | 2:a9bb12eefc08 | 25 | ZigBeeExplicitRxIndicator = 0x91, |
Cheroukee | 2:a9bb12eefc08 | 26 | ZigBeeIODataSampleRxIndicator = 0x92, |
Cheroukee | 2:a9bb12eefc08 | 27 | XBeeSensorReadIndicator = 0x94, |
Cheroukee | 2:a9bb12eefc08 | 28 | NodeIndentificationIndicator = 0x95, |
Cheroukee | 2:a9bb12eefc08 | 29 | RemoteCommandResponse = 0x97, |
Cheroukee | 2:a9bb12eefc08 | 30 | OverTheAirFirmwareUpdateStatus = 0xA0, |
Cheroukee | 2:a9bb12eefc08 | 31 | RouteRecordIndicator = 0xA1, |
Cheroukee | 2:a9bb12eefc08 | 32 | ManyToOneRouteRequestIndicator = 0xA3 |
Cheroukee | 1:ea1b52d0a8a3 | 33 | } frame_type_t; |
Cheroukee | 1:ea1b52d0a8a3 | 34 | |
Cheroukee | 5:9e6a09a38785 | 35 | // Structure d'addressage du zigbee (64-bit) |
Cheroukee | 1:ea1b52d0a8a3 | 36 | typedef struct { |
Cheroukee | 2:a9bb12eefc08 | 37 | char addr_0; // MSB |
Cheroukee | 2:a9bb12eefc08 | 38 | char addr_1; |
Cheroukee | 2:a9bb12eefc08 | 39 | char addr_2; |
Cheroukee | 2:a9bb12eefc08 | 40 | char addr_3; |
Cheroukee | 2:a9bb12eefc08 | 41 | |
Cheroukee | 2:a9bb12eefc08 | 42 | char addr_4; |
Cheroukee | 2:a9bb12eefc08 | 43 | char addr_5; |
Cheroukee | 2:a9bb12eefc08 | 44 | char addr_6; |
Cheroukee | 2:a9bb12eefc08 | 45 | char addr_7; // LSB |
Cheroukee | 2:a9bb12eefc08 | 46 | } zigbee_addr_64_t; |
Cheroukee | 2:a9bb12eefc08 | 47 | |
Cheroukee | 5:9e6a09a38785 | 48 | // Structure d'addressage du zigbee (16-bit) |
Cheroukee | 2:a9bb12eefc08 | 49 | typedef struct { |
Cheroukee | 2:a9bb12eefc08 | 50 | char addr_msb; |
Cheroukee | 2:a9bb12eefc08 | 51 | char addr_lsb; |
Cheroukee | 2:a9bb12eefc08 | 52 | } zigbee_addr_16_t; |
Cheroukee | 2:a9bb12eefc08 | 53 | |
Cheroukee | 27:3baf4701a047 | 54 | #define MAX_FRAME_SIZE 64 |
Cheroukee | 27:3baf4701a047 | 55 | |
Cheroukee | 8:5955af1ee445 | 56 | typedef struct { |
Cheroukee | 8:5955af1ee445 | 57 | int length; |
Cheroukee | 27:3baf4701a047 | 58 | char buffer[MAX_FRAME_SIZE]; |
Cheroukee | 8:5955af1ee445 | 59 | } frame_t; |
Cheroukee | 8:5955af1ee445 | 60 | |
Cheroukee | 8:5955af1ee445 | 61 | typedef enum { |
Cheroukee | 8:5955af1ee445 | 62 | wait_delimiter, |
Cheroukee | 8:5955af1ee445 | 63 | read_length_msb, |
Cheroukee | 8:5955af1ee445 | 64 | read_length_lsb, |
Cheroukee | 8:5955af1ee445 | 65 | read_frame_specific, |
Cheroukee | 8:5955af1ee445 | 66 | read_checksum |
Cheroukee | 8:5955af1ee445 | 67 | } frame_recv_state_t; |
Cheroukee | 2:a9bb12eefc08 | 68 | |
Cheroukee | 5:9e6a09a38785 | 69 | // Position du frame delimiter |
Cheroukee | 2:a9bb12eefc08 | 70 | #define FRAME_DELIMITER_POS 0 |
Cheroukee | 5:9e6a09a38785 | 71 | // Length position MSB |
Cheroukee | 2:a9bb12eefc08 | 72 | #define FRAME_LEN_MSB_POS 1 |
Cheroukee | 5:9e6a09a38785 | 73 | // Length position LSB |
Cheroukee | 2:a9bb12eefc08 | 74 | #define FRAME_LEN_LSB_POS 2 |
Cheroukee | 2:a9bb12eefc08 | 75 | |
Cheroukee | 5:9e6a09a38785 | 76 | // position Checksum |
Cheroukee | 2:a9bb12eefc08 | 77 | #define FRAME_CHEKSUM_POS 3 + frame_data_size |
Cheroukee | 2:a9bb12eefc08 | 78 | |
Cheroukee | 5:9e6a09a38785 | 79 | // position Frame type |
Cheroukee | 2:a9bb12eefc08 | 80 | #define API_FRAME_TYPE_POS 3 |
Cheroukee | 5:9e6a09a38785 | 81 | // position Frame ID |
Cheroukee | 2:a9bb12eefc08 | 82 | #define API_FRAME_ID_POS 4 |
Cheroukee | 2:a9bb12eefc08 | 83 | |
Cheroukee | 5:9e6a09a38785 | 84 | // position Transmit req 64-bit address |
Cheroukee | 2:a9bb12eefc08 | 85 | #define TRANSMIT_REQ_ADDR64_MSB_POS 5 |
Cheroukee | 5:9e6a09a38785 | 86 | // position Transmit req 16-bit address |
Cheroukee | 2:a9bb12eefc08 | 87 | #define TRANSMIT_REQ_ADDR16_MSB_POS 13 |
Cheroukee | 5:9e6a09a38785 | 88 | // position Transmit req radius |
Cheroukee | 2:a9bb12eefc08 | 89 | #define TRANSMIT_REQ_RADIUS_POS 15 |
Cheroukee | 2:a9bb12eefc08 | 90 | |
Cheroukee | 5:9e6a09a38785 | 91 | // position de depart du data dans un transmit request |
Cheroukee | 2:a9bb12eefc08 | 92 | #define TRANSMIT_REQ_DATA_START 17 |
Cheroukee | 5:9e6a09a38785 | 93 | // taille du header de transmit request |
Cheroukee | 2:a9bb12eefc08 | 94 | #define TRANSMIT_REQ_OVERHEAD_LENGTH 14 |
Cheroukee | 2:a9bb12eefc08 | 95 | |
Cheroukee | 12:1286b80c68f7 | 96 | #define REMOTE_AT_OVERHEAD_LENGTH 13 |
Cheroukee | 14:cd488eba8bba | 97 | #define AT_COMMAND_OVERHEAD_LENGTH 4 |
Cheroukee | 12:1286b80c68f7 | 98 | |
Cheroukee | 12:1286b80c68f7 | 99 | #define AT_COMMAND_DIO4_MSB 'D' |
Cheroukee | 12:1286b80c68f7 | 100 | #define AT_COMMAND_DIO4_LSB '4' |
Cheroukee | 12:1286b80c68f7 | 101 | #define AT_COMMAND_DIO_OUT_LOW 0x4 |
Cheroukee | 12:1286b80c68f7 | 102 | #define AT_COMMAND_DIO_OUT_HIGH 0x5 |
Cheroukee | 12:1286b80c68f7 | 103 | |
Cheroukee | 5:9e6a09a38785 | 104 | /* |
Cheroukee | 5:9e6a09a38785 | 105 | * Macro permettant de declarer une address 64-bit ou 16-bit reservee |
Cheroukee | 5:9e6a09a38785 | 106 | * Usage : |
Cheroukee | 5:9e6a09a38785 | 107 | * DECLARE_ADDR16_UNKNOWN_OR_BCAST // declaration de l'addresse |
Cheroukee | 5:9e6a09a38785 | 108 | * USE_ADDR16_UNKNOWN_OR_BCAST // usage de l'addresse |
Cheroukee | 5:9e6a09a38785 | 109 | */ |
Cheroukee | 2:a9bb12eefc08 | 110 | #define DECLARE_ADDR16_UNKNOWN_OR_BCAST zigbee_addr_16_t def_addr16_bcast = { 0xFF, 0xFE }; |
Cheroukee | 2:a9bb12eefc08 | 111 | #define USE_ADDR16_UNKNOWN_OR_BCAST def_addr16_bcast |
Cheroukee | 2:a9bb12eefc08 | 112 | #define DECLARE_ADDR64_COORD zigbee_addr_64_t def_addr64_coord = { 0, 0, 0, 0, 0, 0, 0, 0 }; |
Cheroukee | 2:a9bb12eefc08 | 113 | #define USE_ADDR64_COORD def_addr64_coord |
Cheroukee | 2:a9bb12eefc08 | 114 | #define DECLARE_ADDR64_BCAST zigbee_addr_64_t def_addr64_bcast = { 0, 0, 0, 0, 0, 0, 0xFF, 0xFE }; |
Cheroukee | 2:a9bb12eefc08 | 115 | #define USE_ADDR64_BCAST def_addr64_bcast |
Cheroukee | 2:a9bb12eefc08 | 116 | |
Cheroukee | 5:9e6a09a38785 | 117 | // Zigbee delimiter value |
Cheroukee | 2:a9bb12eefc08 | 118 | #define ZIGBEE_DELIMITER 0x7E |
Cheroukee | 2:a9bb12eefc08 | 119 | |
Cheroukee | 5:9e6a09a38785 | 120 | // Transmit/receive buffer space |
Cheroukee | 1:ea1b52d0a8a3 | 121 | extern char TransmitBuffer[2048]; |
Cheroukee | 1:ea1b52d0a8a3 | 122 | extern char ReceiveBuffer[2048]; |
Cheroukee | 1:ea1b52d0a8a3 | 123 | |
JayMcGee | 22:7edae38d0758 | 124 | // Compare if two 64bit addresses are equal |
JayMcGee | 22:7edae38d0758 | 125 | bool addr_64_equal(zigbee_addr_64_t addr1, zigbee_addr_64_t addr2); |
JayMcGee | 22:7edae38d0758 | 126 | |
Cheroukee | 5:9e6a09a38785 | 127 | // Init xbee communication |
Cheroukee | 1:ea1b52d0a8a3 | 128 | void xbee_init(); |
Cheroukee | 1:ea1b52d0a8a3 | 129 | |
Cheroukee | 5:9e6a09a38785 | 130 | // insere le api frame header dans le buffer |
Cheroukee | 2:a9bb12eefc08 | 131 | void build_api_frame_header(int frame_data_size); |
Cheroukee | 5:9e6a09a38785 | 132 | // insere le api frame cheksum dans le buffer |
Cheroukee | 2:a9bb12eefc08 | 133 | void build_api_frame_checksum(int frame_data_size); |
Cheroukee | 2:a9bb12eefc08 | 134 | |
Cheroukee | 5:9e6a09a38785 | 135 | // Set le type d'api frame |
Cheroukee | 2:a9bb12eefc08 | 136 | void set_api_frame_type(frame_type_t frame_type); |
Cheroukee | 5:9e6a09a38785 | 137 | // set le ID du frame |
Cheroukee | 2:a9bb12eefc08 | 138 | void set_api_frame_id(int id); |
Cheroukee | 2:a9bb12eefc08 | 139 | |
Cheroukee | 5:9e6a09a38785 | 140 | // Set at command not implemented |
Cheroukee | 2:a9bb12eefc08 | 141 | void set_at_command(int at_command); |
Cheroukee | 5:9e6a09a38785 | 142 | // Set l'address 64 bit |
Cheroukee | 5:9e6a09a38785 | 143 | void set_64_addr(zigbee_addr_64_t address); |
Cheroukee | 6:9ed8153f1328 | 144 | // Set l'address 16 bit |
Cheroukee | 5:9e6a09a38785 | 145 | void set_16_addr(zigbee_addr_16_t address); |
Cheroukee | 2:a9bb12eefc08 | 146 | |
Cheroukee | 6:9ed8153f1328 | 147 | // Set le radius |
Cheroukee | 2:a9bb12eefc08 | 148 | void set_broadcast_radius(int position, char radius); |
Cheroukee | 6:9ed8153f1328 | 149 | // Set les options a la position indiquée |
Cheroukee | 2:a9bb12eefc08 | 150 | void set_transmit_request_options(int position, char options); |
Cheroukee | 6:9ed8153f1328 | 151 | // Set le data du transmit request |
Cheroukee | 12:1286b80c68f7 | 152 | void set_transmit_data(int start_pos, char* data, int data_length); |
Cheroukee | 6:9ed8153f1328 | 153 | // Fonctions de transmission variées pour les différentes situations |
Cheroukee | 2:a9bb12eefc08 | 154 | bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination); |
Cheroukee | 2:a9bb12eefc08 | 155 | bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination); |
Cheroukee | 2:a9bb12eefc08 | 156 | bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16); |
Cheroukee | 1:ea1b52d0a8a3 | 157 | |
Cheroukee | 14:cd488eba8bba | 158 | void at_command_query(char msb, char lsb); |
Cheroukee | 14:cd488eba8bba | 159 | void at_command_set(char msb, char lsb, char* parameter, int parameter_length); |
Cheroukee | 14:cd488eba8bba | 160 | |
Cheroukee | 14:cd488eba8bba | 161 | // Envoie d'un remote at command (set ou query) en broadcast |
Cheroukee | 25:7b808fb9e025 | 162 | void remote_at_command_query(char msb, char lsb, char options, zigbee_addr_64_t destination); |
Cheroukee | 25:7b808fb9e025 | 163 | void remote_at_command_set(char msb, char lsb, char parameter, char options, zigbee_addr_64_t destination); |
Cheroukee | 12:1286b80c68f7 | 164 | |
Cheroukee | 2:a9bb12eefc08 | 165 | void transmit(int packet_length); |
Cheroukee | 27:3baf4701a047 | 166 | bool receive(frame_t* buffer); |
Cheroukee | 12:1286b80c68f7 | 167 |