Coordinator code

Dependencies:   EthernetInterface WebSocketClient mbed-rtos mbed

Coordinator.cpp

Committer:
vinbel93
Date:
2016-02-18
Revision:
0:4cb87eb1f914

File content as of revision 0:4cb87eb1f914:

#include "mbed.h"
#include "Websocket.h"
#include "Xbee.h"
#include "EthernetInterface.h"
#include <string>

// Entrées-sorties
Serial xbee(p13, p14);
Serial pc(USBTX, USBRX);
DigitalOut reset(p8);

// FileSystem (pour lire fichier de config)
LocalFileSystem local("local");

// Fonction de lecture du fichier de config
void readConfig(unsigned long long* panID, string* url)
{    
    FILE *file = fopen("/local/coord.cfg", "r");
    char* token;
    char* delimiter = "=";

    if (file != NULL)
    {
        char line[128];
        
        // Lire ligne par ligne
        while (fgets(line, sizeof(line), file) != NULL)
        {
            // token = nom du paramètre
            token = strtok(line, delimiter);
            
            if (strcmp(token, "PAN_ID") == 0)
            {
                // token = valeur du paramètre
                token = strtok(NULL, delimiter);
                
                // conversion en entier 64 bit
                *panID = strtoull(token, NULL, 16);
            }
            else if(strcmp(token, "URL") == 0)
            {
                // token = valeur du paramètre
                token = strtok(NULL, delimiter);
                *url = token;
            }
        }
        
        fclose(file);
    }
}

// Fonction principale
int main()
{
    unsigned long long panID;
    string url;

    // Paramètres réseau statiques
    EthernetInterface eth;
    char* ip = "10.0.0.10";
    char* mask = "255.255.255.0";
    char* gateway = "10.0.0.1";
    eth.init(ip, mask, gateway);
    eth.connect();
    printf("IP Address is %s\n", eth.getIPAddress());

    // Reset du Xbee
    reset = 0;
    wait(0.4);
    reset = 1;
    wait(1);

    // Vidage du buffer de lecture du Xbee
    while (xbee.readable())
    {
        char dump = xbee.getc();
    }

    // Lire la config et assigner le PAN ID
    readConfig(&panID, &url);    
    setPanId(&xbee, panID);

    // Convertir l'URL du serveur Websockets de std::string à un char[]
    char* urlString = new char[url.size() + 1];
    std::copy(url.begin(), url.end(), urlString);
    urlString[url.size()] = '\0';

    // Connexion au serveur Websockets
    Websocket socket(urlString);
    socket.connect();

    while (true)
    {
        char bufferToSend[128];

        // Lecture des données reçues par le Xbee, si true -> un message complet a été reçu
        if (readPacket(&pc, &xbee, bufferToSend))
        {
            // Envoi au serveur
            socket.send(bufferToSend);
            pc.printf("Envoi de %s\r\n", bufferToSend);
        }
    }
}