Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Committer:
Cheroukee
Date:
Sat Sep 30 18:02:41 2017 +0000
Revision:
2:a9bb12eefc08
Parent:
1:ea1b52d0a8a3
Child:
5:9e6a09a38785
EHHH XBEER IS GOOD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Cheroukee 1:ea1b52d0a8a3 1
Cheroukee 1:ea1b52d0a8a3 2 /***
Cheroukee 1:ea1b52d0a8a3 3 * xbee.cpp - en-tete de lib xbee - fouj1807 - mcgj2701
Cheroukee 1:ea1b52d0a8a3 4 */
Cheroukee 1:ea1b52d0a8a3 5
Cheroukee 1:ea1b52d0a8a3 6 #include "xbee.h"
Cheroukee 1:ea1b52d0a8a3 7
Cheroukee 2:a9bb12eefc08 8 DigitalOut xbee_transmit_led(LED1);
Cheroukee 2:a9bb12eefc08 9 DigitalOut xbee_receive_led(LED2);
Cheroukee 1:ea1b52d0a8a3 10 DigitalOut xbee_reset(p8);
Cheroukee 1:ea1b52d0a8a3 11
Cheroukee 1:ea1b52d0a8a3 12 Serial xbee(p13, p14); // tx, rx
Cheroukee 1:ea1b52d0a8a3 13
Cheroukee 1:ea1b52d0a8a3 14 char TransmitBuffer[2048] = {0};
Cheroukee 1:ea1b52d0a8a3 15 char ReceiveBuffer[2048] = {0};
Cheroukee 1:ea1b52d0a8a3 16
Cheroukee 1:ea1b52d0a8a3 17 void xbee_init()
Cheroukee 1:ea1b52d0a8a3 18 {
Cheroukee 2:a9bb12eefc08 19 xbee_receive_led = 0;
Cheroukee 1:ea1b52d0a8a3 20
Cheroukee 1:ea1b52d0a8a3 21 wait_ms(400);
Cheroukee 1:ea1b52d0a8a3 22
Cheroukee 1:ea1b52d0a8a3 23 xbee_reset = 1;
Cheroukee 1:ea1b52d0a8a3 24
Cheroukee 1:ea1b52d0a8a3 25 wait_ms(5000);
Cheroukee 1:ea1b52d0a8a3 26
Cheroukee 2:a9bb12eefc08 27 xbee_receive_led = 1;
Cheroukee 1:ea1b52d0a8a3 28 }
Cheroukee 1:ea1b52d0a8a3 29
Cheroukee 1:ea1b52d0a8a3 30
Cheroukee 1:ea1b52d0a8a3 31 bool set_pan_id(long pan_id)
Cheroukee 1:ea1b52d0a8a3 32 {
Cheroukee 1:ea1b52d0a8a3 33 return false;
Cheroukee 1:ea1b52d0a8a3 34 }
Cheroukee 1:ea1b52d0a8a3 35
Cheroukee 1:ea1b52d0a8a3 36 long get_pan_id()
Cheroukee 1:ea1b52d0a8a3 37 {
Cheroukee 1:ea1b52d0a8a3 38 return 0L;
Cheroukee 1:ea1b52d0a8a3 39 }
Cheroukee 1:ea1b52d0a8a3 40
Cheroukee 1:ea1b52d0a8a3 41 bool transmit_request(char* buffer, int length)
Cheroukee 1:ea1b52d0a8a3 42 {
Cheroukee 1:ea1b52d0a8a3 43 // Frame Type
Cheroukee 2:a9bb12eefc08 44 /*TransmitBuffer[3] = 0x10;
Cheroukee 1:ea1b52d0a8a3 45
Cheroukee 1:ea1b52d0a8a3 46 // Frame ID
Cheroukee 1:ea1b52d0a8a3 47 TransmitBuffer[4] = 0x01;
Cheroukee 1:ea1b52d0a8a3 48
Cheroukee 1:ea1b52d0a8a3 49 // Should set address if different from coordinator
Cheroukee 1:ea1b52d0a8a3 50 //TransmitBuffer[5] =
Cheroukee 1:ea1b52d0a8a3 51
Cheroukee 1:ea1b52d0a8a3 52 // 16-bit address, broadcast address
Cheroukee 1:ea1b52d0a8a3 53 TransmitBuffer[13] = 0xFF;
Cheroukee 1:ea1b52d0a8a3 54 TransmitBuffer[14] = 0xFE;
Cheroukee 1:ea1b52d0a8a3 55
Cheroukee 1:ea1b52d0a8a3 56 // Max hops, 0 = max
Cheroukee 1:ea1b52d0a8a3 57 TransmitBuffer[15] = 0x00;
Cheroukee 1:ea1b52d0a8a3 58
Cheroukee 1:ea1b52d0a8a3 59 // Transmit options
Cheroukee 1:ea1b52d0a8a3 60 TransmitBuffer[16] = 0x00;
Cheroukee 1:ea1b52d0a8a3 61
Cheroukee 1:ea1b52d0a8a3 62 // Insert buffer data
Cheroukee 1:ea1b52d0a8a3 63 for (int i = 0; i < length; i++)
Cheroukee 1:ea1b52d0a8a3 64 {
Cheroukee 1:ea1b52d0a8a3 65 TransmitBuffer[17 + i] = buffer[i];
Cheroukee 1:ea1b52d0a8a3 66 }
Cheroukee 2:a9bb12eefc08 67
Cheroukee 2:a9bb12eefc08 68 for (int i = 0; i < 17 + length + 1; i++)
Cheroukee 2:a9bb12eefc08 69 {
Cheroukee 2:a9bb12eefc08 70 xbee_transmit_led = !xbee_transmit_led;
Cheroukee 2:a9bb12eefc08 71 xbee.putc(TransmitBuffer[i]);
Cheroukee 2:a9bb12eefc08 72 }*/
Cheroukee 1:ea1b52d0a8a3 73
Cheroukee 2:a9bb12eefc08 74 return false;
Cheroukee 2:a9bb12eefc08 75 }
Cheroukee 2:a9bb12eefc08 76
Cheroukee 2:a9bb12eefc08 77
Cheroukee 2:a9bb12eefc08 78 int receive_buffer(char* buffer, int max_length)
Cheroukee 2:a9bb12eefc08 79 {
Cheroukee 2:a9bb12eefc08 80 int length = 0;
Cheroukee 2:a9bb12eefc08 81
Cheroukee 2:a9bb12eefc08 82 while(xbee.readable() && length < max_length)
Cheroukee 2:a9bb12eefc08 83 {
Cheroukee 2:a9bb12eefc08 84 xbee_receive_led = !xbee_receive_led;
Cheroukee 2:a9bb12eefc08 85 buffer[length++] = xbee.getc();
Cheroukee 2:a9bb12eefc08 86 }
Cheroukee 2:a9bb12eefc08 87
Cheroukee 2:a9bb12eefc08 88 for (int i = 17; i < length - 1; i++)
Cheroukee 2:a9bb12eefc08 89 {
Cheroukee 2:a9bb12eefc08 90 // pc.putc(ReceiveBuffer[i]);
Cheroukee 2:a9bb12eefc08 91 }
Cheroukee 2:a9bb12eefc08 92 return length;
Cheroukee 2:a9bb12eefc08 93 }
Cheroukee 2:a9bb12eefc08 94
Cheroukee 2:a9bb12eefc08 95 void build_api_frame_header(int frame_data_size)
Cheroukee 2:a9bb12eefc08 96 {
Cheroukee 2:a9bb12eefc08 97 // Delimiter
Cheroukee 2:a9bb12eefc08 98 TransmitBuffer[FRAME_DELIMITER_POS] = ZIGBEE_DELIMITER;
Cheroukee 2:a9bb12eefc08 99 TransmitBuffer[FRAME_LEN_MSB_POS] = frame_data_size >> 8;
Cheroukee 2:a9bb12eefc08 100 TransmitBuffer[FRAME_LEN_LSB_POS] = frame_data_size & 0xFF;
Cheroukee 2:a9bb12eefc08 101 }
Cheroukee 2:a9bb12eefc08 102
Cheroukee 2:a9bb12eefc08 103 void build_api_frame_checksum(int frame_data_size)
Cheroukee 2:a9bb12eefc08 104 {
Cheroukee 1:ea1b52d0a8a3 105 // Calculate checksum
Cheroukee 2:a9bb12eefc08 106 char checksum = 0xFF;
Cheroukee 2:a9bb12eefc08 107 for (int i = 3; i < FRAME_CHEKSUM_POS; i++)
Cheroukee 1:ea1b52d0a8a3 108 {
Cheroukee 1:ea1b52d0a8a3 109 checksum -= TransmitBuffer[i];
Cheroukee 1:ea1b52d0a8a3 110 }
Cheroukee 1:ea1b52d0a8a3 111
Cheroukee 1:ea1b52d0a8a3 112 // Insert checksum into buffer
Cheroukee 2:a9bb12eefc08 113 TransmitBuffer[FRAME_CHEKSUM_POS] = checksum;
Cheroukee 2:a9bb12eefc08 114 }
Cheroukee 2:a9bb12eefc08 115
Cheroukee 2:a9bb12eefc08 116 void set_api_frame_type(frame_type_t frame_type)
Cheroukee 2:a9bb12eefc08 117 {
Cheroukee 2:a9bb12eefc08 118 TransmitBuffer[API_FRAME_TYPE_POS] = frame_type;
Cheroukee 2:a9bb12eefc08 119 }
Cheroukee 2:a9bb12eefc08 120
Cheroukee 2:a9bb12eefc08 121 void set_api_frame_id(int id)
Cheroukee 2:a9bb12eefc08 122 {
Cheroukee 2:a9bb12eefc08 123 TransmitBuffer[API_FRAME_ID_POS] = id;
Cheroukee 2:a9bb12eefc08 124 }
Cheroukee 2:a9bb12eefc08 125
Cheroukee 2:a9bb12eefc08 126 void set_at_command(int at_command)
Cheroukee 2:a9bb12eefc08 127 {
Cheroukee 2:a9bb12eefc08 128 // NOT IMPLEMENTED
Cheroukee 2:a9bb12eefc08 129 }
Cheroukee 2:a9bb12eefc08 130
Cheroukee 2:a9bb12eefc08 131 void set_64_addr(zigbee_addr_64_t address)
Cheroukee 2:a9bb12eefc08 132 {
Cheroukee 2:a9bb12eefc08 133 int i = 0;
Cheroukee 2:a9bb12eefc08 134 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_0;
Cheroukee 2:a9bb12eefc08 135 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_1;
Cheroukee 2:a9bb12eefc08 136 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_2;
Cheroukee 2:a9bb12eefc08 137 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_3;
Cheroukee 2:a9bb12eefc08 138
Cheroukee 2:a9bb12eefc08 139 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_4;
Cheroukee 2:a9bb12eefc08 140 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_5;
Cheroukee 2:a9bb12eefc08 141 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_6;
Cheroukee 2:a9bb12eefc08 142 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_7;
Cheroukee 2:a9bb12eefc08 143 }
Cheroukee 2:a9bb12eefc08 144
Cheroukee 2:a9bb12eefc08 145 void set_16_addr(zigbee_addr_16_t address)
Cheroukee 2:a9bb12eefc08 146 {
Cheroukee 2:a9bb12eefc08 147 TransmitBuffer[TRANSMIT_REQ_ADDR16_MSB_POS] = address.addr_msb;
Cheroukee 2:a9bb12eefc08 148 TransmitBuffer[TRANSMIT_REQ_ADDR16_MSB_POS + 1] = address.addr_lsb;
Cheroukee 2:a9bb12eefc08 149 }
Cheroukee 2:a9bb12eefc08 150
Cheroukee 2:a9bb12eefc08 151 void set_broadcast_radius(int position, char radius)
Cheroukee 2:a9bb12eefc08 152 {
Cheroukee 2:a9bb12eefc08 153 TransmitBuffer[position] = radius;
Cheroukee 2:a9bb12eefc08 154 }
Cheroukee 2:a9bb12eefc08 155
Cheroukee 2:a9bb12eefc08 156 void set_transmit_request_options(int position, char options)
Cheroukee 2:a9bb12eefc08 157 {
Cheroukee 2:a9bb12eefc08 158 TransmitBuffer[position] = options;
Cheroukee 2:a9bb12eefc08 159 }
Cheroukee 2:a9bb12eefc08 160
Cheroukee 2:a9bb12eefc08 161 void set_transmit_request_data(char* data, int data_length)
Cheroukee 2:a9bb12eefc08 162 {
Cheroukee 2:a9bb12eefc08 163 for (int i = 0; i < data_length; i++)
Cheroukee 1:ea1b52d0a8a3 164 {
Cheroukee 2:a9bb12eefc08 165 TransmitBuffer[TRANSMIT_REQ_DATA_START + i] = data[i];
Cheroukee 1:ea1b52d0a8a3 166 }
Cheroukee 2:a9bb12eefc08 167 }
Cheroukee 2:a9bb12eefc08 168
Cheroukee 2:a9bb12eefc08 169 bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination)
Cheroukee 2:a9bb12eefc08 170 {
Cheroukee 2:a9bb12eefc08 171 build_api_frame_header(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 172
Cheroukee 2:a9bb12eefc08 173 set_api_frame_type(TransmitRequest);
Cheroukee 2:a9bb12eefc08 174 set_api_frame_id(0x01);
Cheroukee 2:a9bb12eefc08 175
Cheroukee 2:a9bb12eefc08 176 set_64_addr(destination);
Cheroukee 2:a9bb12eefc08 177 DECLARE_ADDR16_UNKNOWN_OR_BCAST
Cheroukee 2:a9bb12eefc08 178 set_16_addr(USE_ADDR16_UNKNOWN_OR_BCAST);
Cheroukee 2:a9bb12eefc08 179
Cheroukee 2:a9bb12eefc08 180 set_broadcast_radius(15, 0);
Cheroukee 2:a9bb12eefc08 181 set_transmit_request_options(15, 0);
Cheroukee 2:a9bb12eefc08 182
Cheroukee 2:a9bb12eefc08 183 set_transmit_request_data(buffer, data_length);
Cheroukee 2:a9bb12eefc08 184
Cheroukee 2:a9bb12eefc08 185 build_api_frame_checksum(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 186
Cheroukee 2:a9bb12eefc08 187 transmit(data_length);
Cheroukee 1:ea1b52d0a8a3 188
Cheroukee 1:ea1b52d0a8a3 189 return false;
Cheroukee 1:ea1b52d0a8a3 190 }
Cheroukee 1:ea1b52d0a8a3 191
Cheroukee 2:a9bb12eefc08 192 bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination)
Cheroukee 2:a9bb12eefc08 193 {
Cheroukee 2:a9bb12eefc08 194 build_api_frame_header(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 195
Cheroukee 2:a9bb12eefc08 196 set_api_frame_type(TransmitRequest);
Cheroukee 2:a9bb12eefc08 197 set_api_frame_id(0x01);
Cheroukee 2:a9bb12eefc08 198
Cheroukee 2:a9bb12eefc08 199 DECLARE_ADDR64_BCAST
Cheroukee 2:a9bb12eefc08 200 set_64_addr(USE_ADDR64_BCAST);
Cheroukee 2:a9bb12eefc08 201 set_16_addr(destination);
Cheroukee 2:a9bb12eefc08 202
Cheroukee 2:a9bb12eefc08 203 set_broadcast_radius(15, 0);
Cheroukee 2:a9bb12eefc08 204 set_transmit_request_options(15, 0);
Cheroukee 2:a9bb12eefc08 205
Cheroukee 2:a9bb12eefc08 206 set_transmit_request_data(buffer, data_length);
Cheroukee 2:a9bb12eefc08 207
Cheroukee 2:a9bb12eefc08 208 build_api_frame_checksum(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 209
Cheroukee 2:a9bb12eefc08 210 transmit(data_length);
Cheroukee 2:a9bb12eefc08 211
Cheroukee 2:a9bb12eefc08 212 return false;
Cheroukee 2:a9bb12eefc08 213 }
Cheroukee 2:a9bb12eefc08 214
Cheroukee 2:a9bb12eefc08 215 bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16)
Cheroukee 1:ea1b52d0a8a3 216 {
Cheroukee 2:a9bb12eefc08 217 build_api_frame_header(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 218
Cheroukee 2:a9bb12eefc08 219 set_api_frame_type(TransmitRequest);
Cheroukee 2:a9bb12eefc08 220 set_api_frame_id(0x01);
Cheroukee 2:a9bb12eefc08 221
Cheroukee 2:a9bb12eefc08 222 set_64_addr(destination64);
Cheroukee 2:a9bb12eefc08 223 set_16_addr(destination16);
Cheroukee 2:a9bb12eefc08 224
Cheroukee 2:a9bb12eefc08 225 set_broadcast_radius(15, 0);
Cheroukee 2:a9bb12eefc08 226 set_transmit_request_options(15, 0);
Cheroukee 2:a9bb12eefc08 227
Cheroukee 2:a9bb12eefc08 228 set_transmit_request_data(buffer, data_length);
Cheroukee 2:a9bb12eefc08 229
Cheroukee 2:a9bb12eefc08 230 build_api_frame_checksum(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 231
Cheroukee 2:a9bb12eefc08 232 transmit(data_length);
Cheroukee 2:a9bb12eefc08 233
Cheroukee 2:a9bb12eefc08 234 return false;
Cheroukee 2:a9bb12eefc08 235 }
Cheroukee 2:a9bb12eefc08 236
Cheroukee 2:a9bb12eefc08 237 void transmit(int packet_length)
Cheroukee 2:a9bb12eefc08 238 {
Cheroukee 2:a9bb12eefc08 239 for (int i = 0; i < 18 + packet_length; i++)
Cheroukee 2:a9bb12eefc08 240 {
Cheroukee 2:a9bb12eefc08 241 xbee_transmit_led = !xbee_transmit_led;
Cheroukee 2:a9bb12eefc08 242 xbee.putc(TransmitBuffer[i]);
Cheroukee 2:a9bb12eefc08 243 }
Cheroukee 1:ea1b52d0a8a3 244 }