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