Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Revision:
2:a9bb12eefc08
Parent:
1:ea1b52d0a8a3
Child:
5:9e6a09a38785
--- a/xbee.h	Wed Sep 27 19:58:38 2017 +0000
+++ b/xbee.h	Sat Sep 30 18:02:41 2017 +0000
@@ -9,17 +9,80 @@
 extern Serial xbee;
 
 typedef enum {
+    ATCommand = 0x08,
+    ATCommandQueue = 0x09,
     TransmitRequest = 0x10,
-    ATCommand = 0x08    
+    ExplicitAddressing = 0x11,
+    RemoteCommandRequest = 0x17,
+    CreateSourceRoute = 0x21,
+    ATCommandResponse = 0x88,
+    ModemStatus = 0x8A,
+    ZigBeeTransmitStatus = 0x8B,
+    ZigBeeReceivePacket = 0x90,
+    ZigBeeExplicitRxIndicator = 0x91,
+    ZigBeeIODataSampleRxIndicator = 0x92,
+    XBeeSensorReadIndicator = 0x94,
+    NodeIndentificationIndicator = 0x95,
+    RemoteCommandResponse = 0x97,
+    OverTheAirFirmwareUpdateStatus = 0xA0,
+    RouteRecordIndicator = 0xA1,
+    ManyToOneRouteRequestIndicator = 0xA3
 } frame_type_t;
 
 typedef struct {
+    char addr_0;    // MSB
+    char addr_1;
+    char addr_2;
+    char addr_3;
+
+    char addr_4;
+    char addr_5;
+    char addr_6;
+    char addr_7;    // LSB
+} zigbee_addr_64_t;
+
+typedef struct {
+    char addr_msb;
+    char addr_lsb;
+} zigbee_addr_16_t;
+
+typedef enum {
+    // INSERT AT COMMAND LIST
+} at_command_t;
+
+typedef struct {
     unsigned short length;
     frame_type_t frame_type;
-    char frame_id;
-    
+    char frame_id;    
 } frame_t;
 
+
+#define FRAME_DELIMITER_POS 0
+#define FRAME_LEN_MSB_POS 1
+#define FRAME_LEN_LSB_POS 2
+
+#define FRAME_CHEKSUM_POS 3 + frame_data_size
+
+#define API_FRAME_TYPE_POS 3
+#define API_FRAME_ID_POS 4
+
+#define TRANSMIT_REQ_ADDR64_MSB_POS 5
+#define TRANSMIT_REQ_ADDR16_MSB_POS 13
+#define TRANSMIT_REQ_RADIUS_POS 15
+
+#define TRANSMIT_REQ_DATA_START 17
+#define TRANSMIT_REQ_OVERHEAD_LENGTH 14
+
+#define DECLARE_ADDR16_UNKNOWN_OR_BCAST zigbee_addr_16_t def_addr16_bcast = { 0xFF, 0xFE };
+#define USE_ADDR16_UNKNOWN_OR_BCAST def_addr16_bcast
+#define DECLARE_ADDR64_COORD zigbee_addr_64_t def_addr64_coord = { 0, 0, 0, 0, 0, 0, 0, 0 };
+#define USE_ADDR64_COORD def_addr64_coord
+#define DECLARE_ADDR64_BCAST zigbee_addr_64_t def_addr64_bcast = { 0, 0, 0, 0, 0, 0, 0xFF, 0xFE };
+#define USE_ADDR64_BCAST def_addr64_bcast
+
+#define ZIGBEE_DELIMITER 0x7E
+
+
 extern char TransmitBuffer[2048];
 extern char ReceiveBuffer[2048];
 
@@ -28,10 +91,26 @@
 bool set_pan_id(long pan_id);
 long get_pan_id();
 
-bool transmit_request(char* buffer, int length);
 int receive_buffer(char* buffer, int max_length);
 
-//bool set(char command, char* buffer, int length);
+void build_api_frame_header(int frame_data_size);
+void build_api_frame_checksum(int frame_data_size);
+
+void set_api_frame_type(frame_type_t frame_type);
+void set_api_frame_id(int id);
+
+void set_at_command(int at_command);
+void set_64_addr(long address);
+void set_16_addr(int address);
+
+void set_broadcast_radius(int position, char radius);
+void set_transmit_request_options(int position, char options);
+
+void set_transmit_request_data(char* data, int data_length);
+
+bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination);
+bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination);
+bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16);
 
 
-
+void transmit(int packet_length);