Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Diff: main.cpp
- Revision:
- 26:cbf539141bfe
- Parent:
- 25:7b808fb9e025
- Child:
- 27:3baf4701a047
diff -r 7b808fb9e025 -r cbf539141bfe main.cpp --- a/main.cpp Mon Oct 02 18:46:45 2017 +0000 +++ b/main.cpp Mon Oct 02 19:29:21 2017 +0000 @@ -23,6 +23,13 @@ void display_error(); DigitalOut error_led(LED3); +Thread ws_send; +void send_to_ws(); +typedef struct { + char buffer[64]; +} ws_message_t; +Mail<ws_message_t, 32> messages_box; + void set_remote_xbee_dio4(bool set, zigbee_addr_64_t addr); void set_pan_id(long pan_id); @@ -57,28 +64,21 @@ { coordinator_config_t config = read_coordinator_config(); - EthernetInterface eth; - eth.init("192.168.3.3", "255.255.255.0", "192.168.3.2"); //Use DHCP - eth.connect(); - - Websocket ws(config.server_url); - ws.connect(); - set_pan_id(config.pan_id); frame_t current_frame; + ws_send.start(callback(send_to_ws)); flipper.attach(&send_del_to_all, 1.0); while(1) { - ws.send("Allo"); bool finished_packet = receive(¤t_frame, BUFFER_SIZE); if (finished_packet) { - process_frame(¤t_frame); + process_frame(¤t_frame); } - wait_ms(1); + wait_ms(10); } } #else @@ -123,10 +123,7 @@ { return -1; } - /*for (int i = 0; i < frame->length; i++) - { - char current = frame->buffer[i]; - } */ + if (frame->buffer[0] == 0x8B) { if(frame->buffer[5] != 0x00) @@ -134,6 +131,7 @@ error_led = 1; error_ticker.attach(&display_error, 1.0); } + return 2; } else if (frame->buffer[0] == 0x90) { @@ -167,15 +165,54 @@ addr_64[last_addr_64_index] = temp_addr_64; } + ws_message_t* message = messages_box.alloc(); + //Data starts at 12 for (int i = 12; i < frame->length; i++) { + message->buffer[i - 12] = frame->buffer[i]; pc.putc(frame->buffer[i]); - } + } + message->buffer[frame->length - 12] = '\0'; + messages_box.put(message); + return 1; } return 0; } + +void send_to_ws() +{ + coordinator_config_t config = read_coordinator_config(); + + EthernetInterface eth; + eth.init("192.168.3.3", "255.255.255.0", "192.168.3.2"); //Use DHCP + eth.connect(); + + Websocket ws(config.server_url); + ws.connect(); + osEvent evt; + while(1) + { + if (!ws.is_connected()) + { + ws.connect(); + } + + evt = messages_box.get(); + if (evt.status == osEventMail) { + ws_message_t* mail = (ws_message_t*)evt.value.p; + //ws.send(mail->buffer); + Thread::wait(500); + messages_box.free(mail); + } + else + { + Thread::wait(100); + } + } +} + void send_del_to_all() { loop_led = !loop_led;