HAHA
Dependencies: WebSocketClient mbed
coordinateur.cpp
- Committer:
- RufflesAllD
- Date:
- 2014-04-07
- Revision:
- 6:f1e9dc6b24c7
- Parent:
- 5:daf08fff7abb
File content as of revision 6:f1e9dc6b24c7:
#include "coordinateur.hpp" Coordinateur::Coordinateur(PinName _tx, PinName _rx) : trame(_tx, _rx), xbee(_tx, _rx), etat(Start) { // Reset le xbee DigitalOut reset(p8); reset = 0; wait(0.4); reset = 1; } Coordinateur::~Coordinateur() { delete data; } void Coordinateur::setPanID(string _pan) { pan = _pan; trame.sendATCommand("ID", pan.c_str(), pan.length()); // Set le PANID selon le fichier de config trame.sendATCommand("WR", 0, 0); // Écrit la valeur du PANID en mémoire trame.sendATCommand("AC", 0, 0); // Applique les changements effectués } void Coordinateur::setURL(string _url) { url = _url; eth = new EthernetInterface(); eth->init(); eth->connect(); ws = new Websocket(const_cast<char*>(url.c_str())); ws->connect(); } void Coordinateur::getBytes() { if (xbee.readable()) { etatTrame(xbee.getc()); } } void Coordinateur::etatTrame(char c) { switch (etat) { // Trouve les delimiter pour partir la trame case Start: if (c == 0x7E) etat = Length; break; // Prend les MSB de length case Length: length[0] = c; etat = Length2; break; // Prend les LSB de length et calcul le length case Length2: length[1] = c; length_int = (length[0] << 8) | length[1]; if (length_int == 18 || length_int == 13) etat = Data; else etat = Start; counter = 0; data = new char[length_int]; break; // Prend les datas case Data: if (c == 0x7E) etat = Length; else if (counter < length_int) { data[counter] = c; counter++; } else { //trame.checkTrame(data, c, length_int); sendDataToWeb(data, length_int); etat = Start; } break; } } void Coordinateur::sendDataToWeb(char *data, int length) { if (length == 13) { if (data[length - 1] == 0x0) { ws->send("Le circuit du capteur a contact sec est ouvert."); } else { ws->send("Le circuit du capteur a contact sec est ferme."); } } else { int results[3] = {0}; // Reconstruit la valeur sur 12 bits for (int i = 0; i < 3; i++) { results[i] = (data[i*2 + 12] << 4) | (data[2*i + 13] >> 4); } string temp = "Valeur de l'accelerometre: X:"; temp += intToString(results[0]); temp += " Y:"; temp += intToString(results[1]); temp += " Z:"; temp += intToString(results[2]); ws->send(const_cast<char*>(temp.c_str())); } } string Coordinateur::intToString(int value) { stringstream ss; ss << value; return ss.str(); }