Coordinator code

Dependencies:   EthernetInterface WebSocketClient mbed-rtos mbed

Committer:
vinbel93
Date:
Thu Feb 18 13:21:58 2016 +0000
Revision:
0:4cb87eb1f914
Coordinator

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vinbel93 0:4cb87eb1f914 1 #include "mbed.h"
vinbel93 0:4cb87eb1f914 2 #include "Websocket.h"
vinbel93 0:4cb87eb1f914 3 #include "Xbee.h"
vinbel93 0:4cb87eb1f914 4 #include "EthernetInterface.h"
vinbel93 0:4cb87eb1f914 5 #include <string>
vinbel93 0:4cb87eb1f914 6
vinbel93 0:4cb87eb1f914 7 // Entrées-sorties
vinbel93 0:4cb87eb1f914 8 Serial xbee(p13, p14);
vinbel93 0:4cb87eb1f914 9 Serial pc(USBTX, USBRX);
vinbel93 0:4cb87eb1f914 10 DigitalOut reset(p8);
vinbel93 0:4cb87eb1f914 11
vinbel93 0:4cb87eb1f914 12 // FileSystem (pour lire fichier de config)
vinbel93 0:4cb87eb1f914 13 LocalFileSystem local("local");
vinbel93 0:4cb87eb1f914 14
vinbel93 0:4cb87eb1f914 15 // Fonction de lecture du fichier de config
vinbel93 0:4cb87eb1f914 16 void readConfig(unsigned long long* panID, string* url)
vinbel93 0:4cb87eb1f914 17 {
vinbel93 0:4cb87eb1f914 18 FILE *file = fopen("/local/coord.cfg", "r");
vinbel93 0:4cb87eb1f914 19 char* token;
vinbel93 0:4cb87eb1f914 20 char* delimiter = "=";
vinbel93 0:4cb87eb1f914 21
vinbel93 0:4cb87eb1f914 22 if (file != NULL)
vinbel93 0:4cb87eb1f914 23 {
vinbel93 0:4cb87eb1f914 24 char line[128];
vinbel93 0:4cb87eb1f914 25
vinbel93 0:4cb87eb1f914 26 // Lire ligne par ligne
vinbel93 0:4cb87eb1f914 27 while (fgets(line, sizeof(line), file) != NULL)
vinbel93 0:4cb87eb1f914 28 {
vinbel93 0:4cb87eb1f914 29 // token = nom du paramètre
vinbel93 0:4cb87eb1f914 30 token = strtok(line, delimiter);
vinbel93 0:4cb87eb1f914 31
vinbel93 0:4cb87eb1f914 32 if (strcmp(token, "PAN_ID") == 0)
vinbel93 0:4cb87eb1f914 33 {
vinbel93 0:4cb87eb1f914 34 // token = valeur du paramètre
vinbel93 0:4cb87eb1f914 35 token = strtok(NULL, delimiter);
vinbel93 0:4cb87eb1f914 36
vinbel93 0:4cb87eb1f914 37 // conversion en entier 64 bit
vinbel93 0:4cb87eb1f914 38 *panID = strtoull(token, NULL, 16);
vinbel93 0:4cb87eb1f914 39 }
vinbel93 0:4cb87eb1f914 40 else if(strcmp(token, "URL") == 0)
vinbel93 0:4cb87eb1f914 41 {
vinbel93 0:4cb87eb1f914 42 // token = valeur du paramètre
vinbel93 0:4cb87eb1f914 43 token = strtok(NULL, delimiter);
vinbel93 0:4cb87eb1f914 44 *url = token;
vinbel93 0:4cb87eb1f914 45 }
vinbel93 0:4cb87eb1f914 46 }
vinbel93 0:4cb87eb1f914 47
vinbel93 0:4cb87eb1f914 48 fclose(file);
vinbel93 0:4cb87eb1f914 49 }
vinbel93 0:4cb87eb1f914 50 }
vinbel93 0:4cb87eb1f914 51
vinbel93 0:4cb87eb1f914 52 // Fonction principale
vinbel93 0:4cb87eb1f914 53 int main()
vinbel93 0:4cb87eb1f914 54 {
vinbel93 0:4cb87eb1f914 55 unsigned long long panID;
vinbel93 0:4cb87eb1f914 56 string url;
vinbel93 0:4cb87eb1f914 57
vinbel93 0:4cb87eb1f914 58 // Paramètres réseau statiques
vinbel93 0:4cb87eb1f914 59 EthernetInterface eth;
vinbel93 0:4cb87eb1f914 60 char* ip = "10.0.0.10";
vinbel93 0:4cb87eb1f914 61 char* mask = "255.255.255.0";
vinbel93 0:4cb87eb1f914 62 char* gateway = "10.0.0.1";
vinbel93 0:4cb87eb1f914 63 eth.init(ip, mask, gateway);
vinbel93 0:4cb87eb1f914 64 eth.connect();
vinbel93 0:4cb87eb1f914 65 printf("IP Address is %s\n", eth.getIPAddress());
vinbel93 0:4cb87eb1f914 66
vinbel93 0:4cb87eb1f914 67 // Reset du Xbee
vinbel93 0:4cb87eb1f914 68 reset = 0;
vinbel93 0:4cb87eb1f914 69 wait(0.4);
vinbel93 0:4cb87eb1f914 70 reset = 1;
vinbel93 0:4cb87eb1f914 71 wait(1);
vinbel93 0:4cb87eb1f914 72
vinbel93 0:4cb87eb1f914 73 // Vidage du buffer de lecture du Xbee
vinbel93 0:4cb87eb1f914 74 while (xbee.readable())
vinbel93 0:4cb87eb1f914 75 {
vinbel93 0:4cb87eb1f914 76 char dump = xbee.getc();
vinbel93 0:4cb87eb1f914 77 }
vinbel93 0:4cb87eb1f914 78
vinbel93 0:4cb87eb1f914 79 // Lire la config et assigner le PAN ID
vinbel93 0:4cb87eb1f914 80 readConfig(&panID, &url);
vinbel93 0:4cb87eb1f914 81 setPanId(&xbee, panID);
vinbel93 0:4cb87eb1f914 82
vinbel93 0:4cb87eb1f914 83 // Convertir l'URL du serveur Websockets de std::string à un char[]
vinbel93 0:4cb87eb1f914 84 char* urlString = new char[url.size() + 1];
vinbel93 0:4cb87eb1f914 85 std::copy(url.begin(), url.end(), urlString);
vinbel93 0:4cb87eb1f914 86 urlString[url.size()] = '\0';
vinbel93 0:4cb87eb1f914 87
vinbel93 0:4cb87eb1f914 88 // Connexion au serveur Websockets
vinbel93 0:4cb87eb1f914 89 Websocket socket(urlString);
vinbel93 0:4cb87eb1f914 90 socket.connect();
vinbel93 0:4cb87eb1f914 91
vinbel93 0:4cb87eb1f914 92 while (true)
vinbel93 0:4cb87eb1f914 93 {
vinbel93 0:4cb87eb1f914 94 char bufferToSend[128];
vinbel93 0:4cb87eb1f914 95
vinbel93 0:4cb87eb1f914 96 // Lecture des données reçues par le Xbee, si true -> un message complet a été reçu
vinbel93 0:4cb87eb1f914 97 if (readPacket(&pc, &xbee, bufferToSend))
vinbel93 0:4cb87eb1f914 98 {
vinbel93 0:4cb87eb1f914 99 // Envoi au serveur
vinbel93 0:4cb87eb1f914 100 socket.send(bufferToSend);
vinbel93 0:4cb87eb1f914 101 pc.printf("Envoi de %s\r\n", bufferToSend);
vinbel93 0:4cb87eb1f914 102 }
vinbel93 0:4cb87eb1f914 103 }
vinbel93 0:4cb87eb1f914 104 }