Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers xbee.h Source File

xbee.h

00001 /***
00002 *   xbee.h - en-tete de lib xbee - fouj1807 - mcgj2701
00003 */
00004 
00005 #pragma once
00006 
00007 #include "mbed.h"
00008 #include "BufferedSerial.h"
00009 
00010 // xbee serial port object
00011 extern BufferedSerial xbee;
00012 
00013 // Type de frames possible dans le mode API
00014 typedef enum {
00015     ATCommand = 0x08,           // Commande AT
00016     ATCommandQueue = 0x09,
00017     TransmitRequest = 0x10,     // Requete d'envoi de donnees
00018     ExplicitAddressing = 0x11,
00019     RemoteCommandRequest = 0x17,// Commande AT a distance
00020     CreateSourceRoute = 0x21,
00021     ATCommandResponse = 0x88,   
00022     ModemStatus = 0x8A,
00023     ZigBeeTransmitStatus = 0x8B,
00024     ZigBeeReceivePacket = 0x90,
00025     ZigBeeExplicitRxIndicator = 0x91,
00026     ZigBeeIODataSampleRxIndicator = 0x92,
00027     XBeeSensorReadIndicator = 0x94,
00028     NodeIndentificationIndicator = 0x95,
00029     RemoteCommandResponse = 0x97,
00030     OverTheAirFirmwareUpdateStatus = 0xA0,
00031     RouteRecordIndicator = 0xA1,
00032     ManyToOneRouteRequestIndicator = 0xA3
00033 } frame_type_t;
00034 
00035 // Structure d'addressage du zigbee (64-bit)
00036 typedef struct {
00037     char addr_0;    // MSB
00038     char addr_1;
00039     char addr_2;
00040     char addr_3;
00041 
00042     char addr_4;
00043     char addr_5;
00044     char addr_6;
00045     char addr_7;    // LSB
00046 } zigbee_addr_64_t;
00047 
00048 // Structure d'addressage du zigbee (16-bit)
00049 typedef struct {
00050     char addr_msb;
00051     char addr_lsb;
00052 } zigbee_addr_16_t;
00053 
00054 #define MAX_FRAME_SIZE 64
00055 
00056 typedef struct {
00057     int length;
00058     char buffer[MAX_FRAME_SIZE];
00059 } frame_t;
00060 
00061 typedef enum {
00062     wait_delimiter,
00063     read_length_msb,
00064     read_length_lsb,
00065     read_frame_specific,
00066     read_checksum
00067 } frame_recv_state_t;
00068 
00069 // Position du frame delimiter
00070 #define FRAME_DELIMITER_POS 0
00071 // Length position MSB
00072 #define FRAME_LEN_MSB_POS 1
00073 // Length position LSB
00074 #define FRAME_LEN_LSB_POS 2
00075 
00076 // position Checksum 
00077 #define FRAME_CHEKSUM_POS 3 + frame_data_size
00078 
00079 // position Frame type 
00080 #define API_FRAME_TYPE_POS 3
00081 // position Frame ID
00082 #define API_FRAME_ID_POS 4
00083 
00084 // position Transmit req 64-bit address 
00085 #define TRANSMIT_REQ_ADDR64_MSB_POS 5
00086 // position Transmit req 16-bit address
00087 #define TRANSMIT_REQ_ADDR16_MSB_POS 13
00088 // position Transmit req radius
00089 #define TRANSMIT_REQ_RADIUS_POS 15
00090 
00091 // position de depart du data dans un transmit request
00092 #define TRANSMIT_REQ_DATA_START 17
00093 // taille du header de transmit request
00094 #define TRANSMIT_REQ_OVERHEAD_LENGTH 14
00095 
00096 #define REMOTE_AT_OVERHEAD_LENGTH 13
00097 #define AT_COMMAND_OVERHEAD_LENGTH 4
00098 
00099 #define AT_COMMAND_DIO4_MSB 'D'
00100 #define AT_COMMAND_DIO4_LSB '4'
00101 #define AT_COMMAND_DIO_OUT_LOW 0x4
00102 #define AT_COMMAND_DIO_OUT_HIGH 0x5
00103 
00104 /*
00105 * Macro permettant de declarer une address 64-bit ou 16-bit reservee
00106 * Usage : 
00107 *               DECLARE_ADDR16_UNKNOWN_OR_BCAST // declaration de l'addresse
00108 *               USE_ADDR16_UNKNOWN_OR_BCAST // usage de l'addresse
00109 */
00110 #define DECLARE_ADDR16_UNKNOWN_OR_BCAST zigbee_addr_16_t def_addr16_bcast = { 0xFF, 0xFE };
00111 #define USE_ADDR16_UNKNOWN_OR_BCAST def_addr16_bcast
00112 #define DECLARE_ADDR64_COORD zigbee_addr_64_t def_addr64_coord = { 0, 0, 0, 0, 0, 0, 0, 0 };
00113 #define USE_ADDR64_COORD def_addr64_coord
00114 #define DECLARE_ADDR64_BCAST zigbee_addr_64_t def_addr64_bcast = { 0, 0, 0, 0, 0, 0, 0xFF, 0xFE };
00115 #define USE_ADDR64_BCAST def_addr64_bcast
00116 
00117 // Zigbee delimiter value
00118 #define ZIGBEE_DELIMITER 0x7E
00119 
00120 // Transmit/receive buffer space
00121 extern char TransmitBuffer[2048];
00122 extern char ReceiveBuffer[2048];
00123 
00124 // Compare if two 64bit addresses are equal
00125 bool addr_64_equal(zigbee_addr_64_t addr1, zigbee_addr_64_t addr2);
00126 
00127 // Init xbee communication
00128 void xbee_init();
00129 
00130 // insere le api frame header dans le buffer
00131 void build_api_frame_header(int frame_data_size);
00132 // insere le api frame cheksum dans le buffer
00133 void build_api_frame_checksum(int frame_data_size);
00134 
00135 // Set le type d'api frame
00136 void set_api_frame_type(frame_type_t frame_type);
00137 // set le ID du frame
00138 void set_api_frame_id(int id);
00139 
00140 // Set at command not implemented
00141 void set_at_command(int at_command);
00142 // Set l'address 64 bit 
00143 void set_64_addr(zigbee_addr_64_t address);
00144 // Set l'address 16 bit 
00145 void set_16_addr(zigbee_addr_16_t address);
00146 
00147 // Set le radius
00148 void set_broadcast_radius(int position, char radius);
00149 // Set les options a la position indiquée
00150 void set_transmit_request_options(int position, char options);
00151 // Set le data du transmit request
00152 void set_transmit_data(int start_pos, char* data, int data_length);
00153 // Fonctions de transmission variées pour les différentes situations
00154 bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination);
00155 bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination);
00156 bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16);
00157 
00158 void at_command_query(char msb, char lsb);
00159 void at_command_set(char msb, char lsb, char* parameter, int parameter_length);
00160 
00161 // Envoie d'un remote at command (set ou query) en broadcast
00162 void remote_at_command_query(char msb, char lsb, char options, zigbee_addr_64_t destination);
00163 void remote_at_command_set(char msb, char lsb, char parameter, char options, zigbee_addr_64_t destination);
00164 
00165 void transmit(int packet_length);
00166 bool receive(frame_t* buffer);
00167