Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

main.cpp

Committer:
Cheroukee
Date:
2017-10-01
Revision:
15:c4d17caf0709
Parent:
14:cd488eba8bba
Child:
16:0a5f3c449c95

File content as of revision 15:c4d17caf0709:

#include "mbed.h"

#include "xbee.h"
#include "parser.h"
#include "sensors.h"

#define IS_COORDINATOR 0
#define PAN_ID 0xC0FFEE

#define BUFFER_SIZE 64

char recv_buff[BUFFER_SIZE] = {0};
DigitalOut loop_led(LED4);

void set_remote_xbee_dio4(bool set);

void set_pan_id(long pan_id);

#if IS_COORDINATOR   
void coordinator();
#else
void routeur();
#endif

int main() {

    xbee_init();

#if IS_COORDINATOR    
    coordinator();
#else
    routeur();
#endif
}

void set_remote_xbee_dio4(bool set)
{
    if (set)
    {
        remote_at_command_set(AT_COMMAND_DIO4_MSB, AT_COMMAND_DIO4_LSB,
            AT_COMMAND_DIO_OUT_LOW, 0x02);
    }
    else
    {
        remote_at_command_set(AT_COMMAND_DIO4_MSB, AT_COMMAND_DIO4_LSB,
            AT_COMMAND_DIO_OUT_HIGH, 0x02);
    }
}

#if IS_COORDINATOR
void coordinator()
{
    
    Serial pc(USBTX, USBRX); // tx, rx
    coordinator_config_t config = read_coordinator_config();
    set_pan_id(config.pan_id);
    frame_t current_frame;
    bool toggle_led = false;

    while(1)
    {
        bool finished_packet = receive(&current_frame, BUFFER_SIZE);
        
        if (finished_packet)
        {
            pc.printf("data start::: ");
            for (int i = 0; i < current_frame.length && i < BUFFER_SIZE; i++)
            {
                pc.putc(current_frame.buffer[i]);            
            }
            pc.printf(" :::end\n\r");
        }
        
        set_remote_xbee_dio4(toggle_led);
        toggle_led = !toggle_led;

        loop_led = !loop_led;
        wait(1);
    }
}
#else
void routeur()
{    
    router_config_t config = read_router_config();
    set_pan_id(config.pan_id);
    char sensor_buffer[64] = {};
    initialize_sensors();
    DECLARE_ADDR64_COORD
    DECLARE_ADDR16_UNKNOWN_OR_BCAST

    while(1)
    {
        SENSOR accel = (*p[0])();
        
        sprintf(sensor_buffer, "%3.2f%3.2f%3.2f", accel.Accelerometre.x, accel.Accelerometre.y, accel.Accelerometre.z);

        transmit_request(sensor_buffer, 15, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST);
        
        loop_led = !loop_led;
        wait(config.refresh_freq);
    }
}
#endif

void set_pan_id(long pan_id)
{
    char pan_id_buffer[8] = {0};

    for (int i = 0; i < 8; i++)
    {
        pan_id_buffer[i] = 0xFF & (pan_id >> 8 * (7 - i));
        //pc.printf("0x%x", pan_id_buffer[i]);
    }
    at_command_set('I', 'D', pan_id_buffer, 8);
}