Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
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
Generated on Sat Jul 30 2022 02:06:50 by 1.7.2