Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Committer:
JayMcGee
Date:
Mon Oct 02 21:54:52 2017 +0000
Revision:
29:56b6c15904e6
Parent:
27:3baf4701a047
Merge

Who changed what in which revision?

UserRevisionLine numberNew 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