This is the coordinator node.

Dependencies:   mbed-rtos mbed Zigbee_communication EthernetInterface WebSocketClient

main.cpp

Committer:
ShaolinPoutine
Date:
2017-02-14
Revision:
7:4b85a9051b3a
Parent:
5:7019f4f6b538
Parent:
6:bd6001a78537

File content as of revision 7:4b85a9051b3a:

// Emile Arseneault : arse1503
// Raphael Drouin   : dror2204

// Coordinator Node

#include "mbed.h"
#define FRAMEDELIMITER 0x7E
#include "rtos.h"
#include "xbee.h"

#include "EthernetInterface.h"
#include "Websocket.h"

// 4269
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);

Mail<char, 250> mymail;
Mail<char[256], 16> webmail;
XBee xbee(p8, p13, p14, &mymail, &webmail);
Websocket* ws;

void ReadSerial()
{
    // 00 13 A2 00 
    // 40 3E 09 63
    xbee.SendATCommand('S', 'H');
    xbee.SendATCommand('S', 'L');
}

void InitialisePANID(char PANIDMSB, char PANIDLSB)
{
    char PanID[2] = {PANIDMSB, PANIDLSB};
    
    xbee.SendATCommand('I', 'D', &PanID[0], 2);
    wait(5);
    xbee.SendATCommand('M','Y');
    xbee.SendATCommand('O','P');
}

void BroadcastHelloWorld()
{
    char hello[5] = {'H', 'e', 'l', 'l', 'o'};
    char world[5] = {'w', 'o', 'r', 'l', 'd'};
    
    while (1)
    {
        xbee.ZigBeeTransmit(0xFFFE, 0x00000000, 0x0000FFFF, &hello[0], 5);
        xbee.ZigBeeTransmit(0xFFFE, 0x00000000, 0x0000FFFF, &world[0], 5);
        wait(2);
    }
}

void xbee_reader()
{
    while(1)
    {
        xbee.InterpretMessage();
        wait(0.001);   
    }
}

void tick()
{
    myled = !myled;   
}

void msg_reader()
{
    while (true) {
        osEvent evt = mymail.get();
        if (evt.status == osEventMail) 
        {
            char *c = (char*)evt.value.p;
            pc.putc(*c);
            mymail.free(c);
        }
    }
}

int main() {
    pc.printf("\r\nI am coordinator\r\n");
    EthernetInterface eth;
    eth.init(); //Use DHCP
    eth.connect();
    printf("IP Address is %s\n\r", eth.getIPAddress());
 
    ws = new Websocket("ws://192.168.137.1:4242");
    ws->connect();
    
    
    Ticker ticker;
    ticker.attach(&tick, 1);
    
    Thread thread(xbee_reader);
    Thread thread_reader(msg_reader);
    
    wait(3);
    ReadSerial();
    InitialisePANID(0x42, 0x69);
    
    while(1) {
        osEvent evt = webmail.get();
        if (evt.status == osEventMail) 
        {
            char *c = (char(*))evt.value.p;
            // Send email
            ws->send("sending");
            ws->send(c);
            wait(1);
            mymail.free(c);
        }
    }
}