Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
xbee.h@6:9ed8153f1328, 2017-09-30 (annotated)
- Committer:
- Cheroukee
- Date:
- Sat Sep 30 19:09:52 2017 +0000
- Revision:
- 6:9ed8153f1328
- Parent:
- 5:9e6a09a38785
- Child:
- 8:5955af1ee445
Added parser Hex value decoded to int
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 | 2:a9bb12eefc08 | 53 | |
Cheroukee | 5:9e6a09a38785 | 54 | // Position du frame delimiter |
Cheroukee | 2:a9bb12eefc08 | 55 | #define FRAME_DELIMITER_POS 0 |
Cheroukee | 5:9e6a09a38785 | 56 | // Length position MSB |
Cheroukee | 2:a9bb12eefc08 | 57 | #define FRAME_LEN_MSB_POS 1 |
Cheroukee | 5:9e6a09a38785 | 58 | // Length position LSB |
Cheroukee | 2:a9bb12eefc08 | 59 | #define FRAME_LEN_LSB_POS 2 |
Cheroukee | 2:a9bb12eefc08 | 60 | |
Cheroukee | 5:9e6a09a38785 | 61 | // position Checksum |
Cheroukee | 2:a9bb12eefc08 | 62 | #define FRAME_CHEKSUM_POS 3 + frame_data_size |
Cheroukee | 2:a9bb12eefc08 | 63 | |
Cheroukee | 5:9e6a09a38785 | 64 | // position Frame type |
Cheroukee | 2:a9bb12eefc08 | 65 | #define API_FRAME_TYPE_POS 3 |
Cheroukee | 5:9e6a09a38785 | 66 | // position Frame ID |
Cheroukee | 2:a9bb12eefc08 | 67 | #define API_FRAME_ID_POS 4 |
Cheroukee | 2:a9bb12eefc08 | 68 | |
Cheroukee | 5:9e6a09a38785 | 69 | // position Transmit req 64-bit address |
Cheroukee | 2:a9bb12eefc08 | 70 | #define TRANSMIT_REQ_ADDR64_MSB_POS 5 |
Cheroukee | 5:9e6a09a38785 | 71 | // position Transmit req 16-bit address |
Cheroukee | 2:a9bb12eefc08 | 72 | #define TRANSMIT_REQ_ADDR16_MSB_POS 13 |
Cheroukee | 5:9e6a09a38785 | 73 | // position Transmit req radius |
Cheroukee | 2:a9bb12eefc08 | 74 | #define TRANSMIT_REQ_RADIUS_POS 15 |
Cheroukee | 2:a9bb12eefc08 | 75 | |
Cheroukee | 5:9e6a09a38785 | 76 | // position de depart du data dans un transmit request |
Cheroukee | 2:a9bb12eefc08 | 77 | #define TRANSMIT_REQ_DATA_START 17 |
Cheroukee | 5:9e6a09a38785 | 78 | // taille du header de transmit request |
Cheroukee | 2:a9bb12eefc08 | 79 | #define TRANSMIT_REQ_OVERHEAD_LENGTH 14 |
Cheroukee | 2:a9bb12eefc08 | 80 | |
Cheroukee | 5:9e6a09a38785 | 81 | /* |
Cheroukee | 5:9e6a09a38785 | 82 | * Macro permettant de declarer une address 64-bit ou 16-bit reservee |
Cheroukee | 5:9e6a09a38785 | 83 | * Usage : |
Cheroukee | 5:9e6a09a38785 | 84 | * DECLARE_ADDR16_UNKNOWN_OR_BCAST // declaration de l'addresse |
Cheroukee | 5:9e6a09a38785 | 85 | * USE_ADDR16_UNKNOWN_OR_BCAST // usage de l'addresse |
Cheroukee | 5:9e6a09a38785 | 86 | */ |
Cheroukee | 2:a9bb12eefc08 | 87 | #define DECLARE_ADDR16_UNKNOWN_OR_BCAST zigbee_addr_16_t def_addr16_bcast = { 0xFF, 0xFE }; |
Cheroukee | 2:a9bb12eefc08 | 88 | #define USE_ADDR16_UNKNOWN_OR_BCAST def_addr16_bcast |
Cheroukee | 2:a9bb12eefc08 | 89 | #define DECLARE_ADDR64_COORD zigbee_addr_64_t def_addr64_coord = { 0, 0, 0, 0, 0, 0, 0, 0 }; |
Cheroukee | 2:a9bb12eefc08 | 90 | #define USE_ADDR64_COORD def_addr64_coord |
Cheroukee | 2:a9bb12eefc08 | 91 | #define DECLARE_ADDR64_BCAST zigbee_addr_64_t def_addr64_bcast = { 0, 0, 0, 0, 0, 0, 0xFF, 0xFE }; |
Cheroukee | 2:a9bb12eefc08 | 92 | #define USE_ADDR64_BCAST def_addr64_bcast |
Cheroukee | 2:a9bb12eefc08 | 93 | |
Cheroukee | 5:9e6a09a38785 | 94 | // Zigbee delimiter value |
Cheroukee | 2:a9bb12eefc08 | 95 | #define ZIGBEE_DELIMITER 0x7E |
Cheroukee | 2:a9bb12eefc08 | 96 | |
Cheroukee | 5:9e6a09a38785 | 97 | // Transmit/receive buffer space |
Cheroukee | 1:ea1b52d0a8a3 | 98 | extern char TransmitBuffer[2048]; |
Cheroukee | 1:ea1b52d0a8a3 | 99 | extern char ReceiveBuffer[2048]; |
Cheroukee | 1:ea1b52d0a8a3 | 100 | |
Cheroukee | 5:9e6a09a38785 | 101 | // Init xbee communication |
Cheroukee | 1:ea1b52d0a8a3 | 102 | void xbee_init(); |
Cheroukee | 1:ea1b52d0a8a3 | 103 | |
Cheroukee | 5:9e6a09a38785 | 104 | // Set le PAN ID du Xbee |
Cheroukee | 1:ea1b52d0a8a3 | 105 | bool set_pan_id(long pan_id); |
Cheroukee | 5:9e6a09a38785 | 106 | // Recupere le PAN ID du Xbee |
Cheroukee | 1:ea1b52d0a8a3 | 107 | long get_pan_id(); |
Cheroukee | 1:ea1b52d0a8a3 | 108 | |
Cheroukee | 5:9e6a09a38785 | 109 | // insere le api frame header dans le buffer |
Cheroukee | 2:a9bb12eefc08 | 110 | void build_api_frame_header(int frame_data_size); |
Cheroukee | 5:9e6a09a38785 | 111 | // insere le api frame cheksum dans le buffer |
Cheroukee | 2:a9bb12eefc08 | 112 | void build_api_frame_checksum(int frame_data_size); |
Cheroukee | 2:a9bb12eefc08 | 113 | |
Cheroukee | 5:9e6a09a38785 | 114 | // Set le type d'api frame |
Cheroukee | 2:a9bb12eefc08 | 115 | void set_api_frame_type(frame_type_t frame_type); |
Cheroukee | 5:9e6a09a38785 | 116 | // set le ID du frame |
Cheroukee | 2:a9bb12eefc08 | 117 | void set_api_frame_id(int id); |
Cheroukee | 2:a9bb12eefc08 | 118 | |
Cheroukee | 5:9e6a09a38785 | 119 | // Set at command not implemented |
Cheroukee | 2:a9bb12eefc08 | 120 | void set_at_command(int at_command); |
Cheroukee | 5:9e6a09a38785 | 121 | // Set l'address 64 bit |
Cheroukee | 5:9e6a09a38785 | 122 | void set_64_addr(zigbee_addr_64_t address); |
Cheroukee | 6:9ed8153f1328 | 123 | // Set l'address 16 bit |
Cheroukee | 5:9e6a09a38785 | 124 | void set_16_addr(zigbee_addr_16_t address); |
Cheroukee | 2:a9bb12eefc08 | 125 | |
Cheroukee | 6:9ed8153f1328 | 126 | // Set le radius |
Cheroukee | 2:a9bb12eefc08 | 127 | void set_broadcast_radius(int position, char radius); |
Cheroukee | 6:9ed8153f1328 | 128 | // Set les options a la position indiquée |
Cheroukee | 2:a9bb12eefc08 | 129 | void set_transmit_request_options(int position, char options); |
Cheroukee | 6:9ed8153f1328 | 130 | // Set le data du transmit request |
Cheroukee | 2:a9bb12eefc08 | 131 | void set_transmit_request_data(char* data, int data_length); |
Cheroukee | 6:9ed8153f1328 | 132 | // Fonctions de transmission variées pour les différentes situations |
Cheroukee | 2:a9bb12eefc08 | 133 | bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination); |
Cheroukee | 2:a9bb12eefc08 | 134 | bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination); |
Cheroukee | 2:a9bb12eefc08 | 135 | bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16); |
Cheroukee | 1:ea1b52d0a8a3 | 136 | |
Cheroukee | 2:a9bb12eefc08 | 137 | void transmit(int packet_length); |
Cheroukee | 5:9e6a09a38785 | 138 | int receive(char* buffer, int max_length); |