Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Committer:
Cheroukee
Date:
Mon Oct 02 15:01:34 2017 +0000
Revision:
17:8abdbfa6019c
Parent:
16:0a5f3c449c95
Child:
19:75e600a40741
Biere;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Cheroukee 0:f468a460723d 1 #include "mbed.h"
Cheroukee 2:a9bb12eefc08 2
Cheroukee 17:8abdbfa6019c 3 #include "rtos.h"
Cheroukee 17:8abdbfa6019c 4
Cheroukee 1:ea1b52d0a8a3 5 #include "xbee.h"
Cheroukee 5:9e6a09a38785 6 #include "parser.h"
Cheroukee 9:3631d3685cfa 7 #include "sensors.h"
Cheroukee 2:a9bb12eefc08 8
Cheroukee 17:8abdbfa6019c 9 #define IS_COORDINATOR 1
Cheroukee 16:0a5f3c449c95 10
Cheroukee 1:ea1b52d0a8a3 11 #define PAN_ID 0xC0FFEE
Cheroukee 2:a9bb12eefc08 12
Cheroukee 15:c4d17caf0709 13 #define BUFFER_SIZE 64
Cheroukee 12:1286b80c68f7 14
Cheroukee 13:5f21dd134bd2 15 char recv_buff[BUFFER_SIZE] = {0};
Cheroukee 15:c4d17caf0709 16 DigitalOut loop_led(LED4);
Cheroukee 13:5f21dd134bd2 17
Cheroukee 13:5f21dd134bd2 18 void set_remote_xbee_dio4(bool set);
Cheroukee 0:f468a460723d 19
Cheroukee 14:cd488eba8bba 20 void set_pan_id(long pan_id);
Cheroukee 14:cd488eba8bba 21
Cheroukee 13:5f21dd134bd2 22 #if IS_COORDINATOR
Cheroukee 13:5f21dd134bd2 23 void coordinator();
Cheroukee 13:5f21dd134bd2 24 #else
Cheroukee 13:5f21dd134bd2 25 void routeur();
Cheroukee 13:5f21dd134bd2 26 #endif
Cheroukee 6:9ed8153f1328 27
Cheroukee 0:f468a460723d 28 int main() {
Cheroukee 2:a9bb12eefc08 29
Cheroukee 1:ea1b52d0a8a3 30 xbee_init();
Cheroukee 2:a9bb12eefc08 31
Cheroukee 13:5f21dd134bd2 32 #if IS_COORDINATOR
Cheroukee 13:5f21dd134bd2 33 coordinator();
Cheroukee 13:5f21dd134bd2 34 #else
Cheroukee 13:5f21dd134bd2 35 routeur();
Cheroukee 13:5f21dd134bd2 36 #endif
Cheroukee 13:5f21dd134bd2 37 }
Cheroukee 2:a9bb12eefc08 38
Cheroukee 13:5f21dd134bd2 39 void set_remote_xbee_dio4(bool set)
Cheroukee 13:5f21dd134bd2 40 {
Cheroukee 13:5f21dd134bd2 41 if (set)
Cheroukee 13:5f21dd134bd2 42 {
Cheroukee 13:5f21dd134bd2 43 remote_at_command_set(AT_COMMAND_DIO4_MSB, AT_COMMAND_DIO4_LSB,
Cheroukee 13:5f21dd134bd2 44 AT_COMMAND_DIO_OUT_LOW, 0x02);
Cheroukee 13:5f21dd134bd2 45 }
Cheroukee 13:5f21dd134bd2 46 else
Cheroukee 13:5f21dd134bd2 47 {
Cheroukee 13:5f21dd134bd2 48 remote_at_command_set(AT_COMMAND_DIO4_MSB, AT_COMMAND_DIO4_LSB,
Cheroukee 13:5f21dd134bd2 49 AT_COMMAND_DIO_OUT_HIGH, 0x02);
Cheroukee 13:5f21dd134bd2 50 }
Cheroukee 13:5f21dd134bd2 51 }
Cheroukee 9:3631d3685cfa 52
Cheroukee 2:a9bb12eefc08 53 #if IS_COORDINATOR
Cheroukee 13:5f21dd134bd2 54 void coordinator()
Cheroukee 16:0a5f3c449c95 55 {
Cheroukee 13:5f21dd134bd2 56 Serial pc(USBTX, USBRX); // tx, rx
Cheroukee 16:0a5f3c449c95 57
Cheroukee 13:5f21dd134bd2 58 coordinator_config_t config = read_coordinator_config();
Cheroukee 16:0a5f3c449c95 59
Cheroukee 14:cd488eba8bba 60 set_pan_id(config.pan_id);
Cheroukee 16:0a5f3c449c95 61
Cheroukee 12:1286b80c68f7 62 frame_t current_frame;
Cheroukee 16:0a5f3c449c95 63
Cheroukee 12:1286b80c68f7 64 bool toggle_led = false;
Cheroukee 13:5f21dd134bd2 65 while(1)
Cheroukee 13:5f21dd134bd2 66 {
Cheroukee 12:1286b80c68f7 67 bool finished_packet = receive(&current_frame, BUFFER_SIZE);
Cheroukee 13:5f21dd134bd2 68
Cheroukee 8:5955af1ee445 69 if (finished_packet)
Cheroukee 1:ea1b52d0a8a3 70 {
Cheroukee 11:ecf5776b950a 71 pc.printf("data start::: ");
Cheroukee 12:1286b80c68f7 72 for (int i = 0; i < current_frame.length && i < BUFFER_SIZE; i++)
Cheroukee 6:9ed8153f1328 73 {
Cheroukee 11:ecf5776b950a 74 pc.putc(current_frame.buffer[i]);
Cheroukee 6:9ed8153f1328 75 }
Cheroukee 11:ecf5776b950a 76 pc.printf(" :::end\n\r");
Cheroukee 16:0a5f3c449c95 77
Cheroukee 17:8abdbfa6019c 78 //remote_at_command_query('N', 'D', 0x02);
Cheroukee 6:9ed8153f1328 79 }
Cheroukee 12:1286b80c68f7 80
Cheroukee 13:5f21dd134bd2 81 set_remote_xbee_dio4(toggle_led);
Cheroukee 13:5f21dd134bd2 82 toggle_led = !toggle_led;
Cheroukee 13:5f21dd134bd2 83
Cheroukee 15:c4d17caf0709 84 loop_led = !loop_led;
Cheroukee 13:5f21dd134bd2 85 wait(1);
Cheroukee 13:5f21dd134bd2 86 }
Cheroukee 13:5f21dd134bd2 87 }
Cheroukee 12:1286b80c68f7 88 #else
Cheroukee 13:5f21dd134bd2 89 void routeur()
Cheroukee 13:5f21dd134bd2 90 {
Cheroukee 13:5f21dd134bd2 91 router_config_t config = read_router_config();
Cheroukee 14:cd488eba8bba 92 set_pan_id(config.pan_id);
Cheroukee 13:5f21dd134bd2 93 char sensor_buffer[64] = {};
Cheroukee 13:5f21dd134bd2 94 initialize_sensors();
Cheroukee 13:5f21dd134bd2 95 DECLARE_ADDR64_COORD
Cheroukee 13:5f21dd134bd2 96 DECLARE_ADDR16_UNKNOWN_OR_BCAST
Cheroukee 13:5f21dd134bd2 97
Cheroukee 13:5f21dd134bd2 98 while(1)
Cheroukee 13:5f21dd134bd2 99 {
Cheroukee 12:1286b80c68f7 100 SENSOR accel = (*p[0])();
Cheroukee 12:1286b80c68f7 101
Cheroukee 12:1286b80c68f7 102 sprintf(sensor_buffer, "%3.2f%3.2f%3.2f", accel.Accelerometre.x, accel.Accelerometre.y, accel.Accelerometre.z);
Cheroukee 12:1286b80c68f7 103
Cheroukee 12:1286b80c68f7 104 transmit_request(sensor_buffer, 15, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST);
Cheroukee 14:cd488eba8bba 105
Cheroukee 15:c4d17caf0709 106 loop_led = !loop_led;
Cheroukee 13:5f21dd134bd2 107 wait(config.refresh_freq);
Cheroukee 0:f468a460723d 108 }
Cheroukee 0:f468a460723d 109 }
Cheroukee 14:cd488eba8bba 110 #endif
Cheroukee 14:cd488eba8bba 111
Cheroukee 14:cd488eba8bba 112 void set_pan_id(long pan_id)
Cheroukee 14:cd488eba8bba 113 {
Cheroukee 14:cd488eba8bba 114 char pan_id_buffer[8] = {0};
Cheroukee 14:cd488eba8bba 115 for (int i = 0; i < 8; i++)
Cheroukee 14:cd488eba8bba 116 {
Cheroukee 14:cd488eba8bba 117 pan_id_buffer[i] = 0xFF & (pan_id >> 8 * (7 - i));
Cheroukee 14:cd488eba8bba 118 }
Cheroukee 14:cd488eba8bba 119 at_command_set('I', 'D', pan_id_buffer, 8);
Cheroukee 14:cd488eba8bba 120 }