HAHA

Dependencies:   WebSocketClient mbed

Committer:
RufflesAllD
Date:
Mon Apr 07 15:43:16 2014 +0000
Revision:
6:f1e9dc6b24c7
Parent:
5:daf08fff7abb
mn

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RufflesAllD 5:daf08fff7abb 1 #include "coordinateur.hpp"
RufflesAllD 5:daf08fff7abb 2
RufflesAllD 5:daf08fff7abb 3 Coordinateur::Coordinateur(PinName _tx, PinName _rx) :
RufflesAllD 5:daf08fff7abb 4 trame(_tx, _rx), xbee(_tx, _rx), etat(Start)
RufflesAllD 5:daf08fff7abb 5 {
RufflesAllD 5:daf08fff7abb 6 // Reset le xbee
RufflesAllD 5:daf08fff7abb 7 DigitalOut reset(p8);
RufflesAllD 5:daf08fff7abb 8
RufflesAllD 5:daf08fff7abb 9 reset = 0;
RufflesAllD 5:daf08fff7abb 10 wait(0.4);
RufflesAllD 5:daf08fff7abb 11 reset = 1;
RufflesAllD 5:daf08fff7abb 12 }
RufflesAllD 5:daf08fff7abb 13
RufflesAllD 5:daf08fff7abb 14 Coordinateur::~Coordinateur()
RufflesAllD 5:daf08fff7abb 15 {
RufflesAllD 5:daf08fff7abb 16 delete data;
RufflesAllD 5:daf08fff7abb 17 }
RufflesAllD 5:daf08fff7abb 18
RufflesAllD 5:daf08fff7abb 19 void Coordinateur::setPanID(string _pan)
RufflesAllD 5:daf08fff7abb 20 {
RufflesAllD 5:daf08fff7abb 21 pan = _pan;
RufflesAllD 5:daf08fff7abb 22 trame.sendATCommand("ID", pan.c_str(), pan.length()); // Set le PANID selon le fichier de config
RufflesAllD 5:daf08fff7abb 23 trame.sendATCommand("WR", 0, 0); // Écrit la valeur du PANID en mémoire
RufflesAllD 5:daf08fff7abb 24 trame.sendATCommand("AC", 0, 0); // Applique les changements effectués
RufflesAllD 5:daf08fff7abb 25 }
RufflesAllD 5:daf08fff7abb 26
RufflesAllD 5:daf08fff7abb 27 void Coordinateur::setURL(string _url)
RufflesAllD 5:daf08fff7abb 28 {
RufflesAllD 5:daf08fff7abb 29 url = _url;
RufflesAllD 5:daf08fff7abb 30
RufflesAllD 5:daf08fff7abb 31 eth = new EthernetInterface();
RufflesAllD 5:daf08fff7abb 32 eth->init();
RufflesAllD 5:daf08fff7abb 33 eth->connect();
RufflesAllD 5:daf08fff7abb 34
RufflesAllD 5:daf08fff7abb 35 ws = new Websocket(const_cast<char*>(url.c_str()));
RufflesAllD 5:daf08fff7abb 36 ws->connect();
RufflesAllD 5:daf08fff7abb 37 }
RufflesAllD 5:daf08fff7abb 38
RufflesAllD 5:daf08fff7abb 39 void Coordinateur::getBytes()
RufflesAllD 5:daf08fff7abb 40 {
RufflesAllD 5:daf08fff7abb 41 if (xbee.readable())
RufflesAllD 5:daf08fff7abb 42 {
RufflesAllD 5:daf08fff7abb 43 etatTrame(xbee.getc());
RufflesAllD 5:daf08fff7abb 44 }
RufflesAllD 5:daf08fff7abb 45 }
RufflesAllD 5:daf08fff7abb 46
RufflesAllD 5:daf08fff7abb 47 void Coordinateur::etatTrame(char c)
RufflesAllD 5:daf08fff7abb 48 {
RufflesAllD 5:daf08fff7abb 49 switch (etat)
RufflesAllD 5:daf08fff7abb 50 {
RufflesAllD 5:daf08fff7abb 51 // Trouve les delimiter pour partir la trame
RufflesAllD 5:daf08fff7abb 52 case Start:
RufflesAllD 5:daf08fff7abb 53 if (c == 0x7E)
RufflesAllD 5:daf08fff7abb 54 etat = Length;
RufflesAllD 5:daf08fff7abb 55 break;
RufflesAllD 5:daf08fff7abb 56
RufflesAllD 5:daf08fff7abb 57 // Prend les MSB de length
RufflesAllD 5:daf08fff7abb 58 case Length:
RufflesAllD 5:daf08fff7abb 59 length[0] = c;
RufflesAllD 5:daf08fff7abb 60 etat = Length2;
RufflesAllD 5:daf08fff7abb 61 break;
RufflesAllD 5:daf08fff7abb 62
RufflesAllD 5:daf08fff7abb 63 // Prend les LSB de length et calcul le length
RufflesAllD 5:daf08fff7abb 64 case Length2:
RufflesAllD 5:daf08fff7abb 65 length[1] = c;
RufflesAllD 5:daf08fff7abb 66 length_int = (length[0] << 8) | length[1];
RufflesAllD 5:daf08fff7abb 67 if (length_int == 18 || length_int == 13)
RufflesAllD 5:daf08fff7abb 68 etat = Data;
RufflesAllD 5:daf08fff7abb 69 else
RufflesAllD 5:daf08fff7abb 70 etat = Start;
RufflesAllD 5:daf08fff7abb 71 counter = 0;
RufflesAllD 5:daf08fff7abb 72 data = new char[length_int];
RufflesAllD 5:daf08fff7abb 73 break;
RufflesAllD 5:daf08fff7abb 74
RufflesAllD 5:daf08fff7abb 75 // Prend les datas
RufflesAllD 5:daf08fff7abb 76 case Data:
RufflesAllD 5:daf08fff7abb 77 if (c == 0x7E)
RufflesAllD 5:daf08fff7abb 78 etat = Length;
RufflesAllD 5:daf08fff7abb 79 else if (counter < length_int)
RufflesAllD 5:daf08fff7abb 80 {
RufflesAllD 5:daf08fff7abb 81 data[counter] = c;
RufflesAllD 5:daf08fff7abb 82 counter++;
RufflesAllD 5:daf08fff7abb 83 }
RufflesAllD 5:daf08fff7abb 84 else
RufflesAllD 5:daf08fff7abb 85 {
RufflesAllD 5:daf08fff7abb 86 //trame.checkTrame(data, c, length_int);
RufflesAllD 5:daf08fff7abb 87 sendDataToWeb(data, length_int);
RufflesAllD 5:daf08fff7abb 88 etat = Start;
RufflesAllD 5:daf08fff7abb 89 }
RufflesAllD 5:daf08fff7abb 90 break;
RufflesAllD 5:daf08fff7abb 91 }
RufflesAllD 5:daf08fff7abb 92 }
RufflesAllD 5:daf08fff7abb 93
RufflesAllD 5:daf08fff7abb 94 void Coordinateur::sendDataToWeb(char *data, int length)
RufflesAllD 5:daf08fff7abb 95 {
RufflesAllD 5:daf08fff7abb 96 if (length == 13)
RufflesAllD 5:daf08fff7abb 97 {
RufflesAllD 5:daf08fff7abb 98 if (data[length - 1] == 0x0)
RufflesAllD 5:daf08fff7abb 99 {
RufflesAllD 5:daf08fff7abb 100 ws->send("Le circuit du capteur a contact sec est ouvert.");
RufflesAllD 5:daf08fff7abb 101 }
RufflesAllD 5:daf08fff7abb 102 else
RufflesAllD 5:daf08fff7abb 103 {
RufflesAllD 5:daf08fff7abb 104 ws->send("Le circuit du capteur a contact sec est ferme.");
RufflesAllD 5:daf08fff7abb 105 }
RufflesAllD 5:daf08fff7abb 106 }
RufflesAllD 5:daf08fff7abb 107 else
RufflesAllD 5:daf08fff7abb 108 {
RufflesAllD 5:daf08fff7abb 109 int results[3] = {0};
RufflesAllD 5:daf08fff7abb 110
RufflesAllD 5:daf08fff7abb 111 // Reconstruit la valeur sur 12 bits
RufflesAllD 5:daf08fff7abb 112 for (int i = 0; i < 3; i++)
RufflesAllD 5:daf08fff7abb 113 {
RufflesAllD 5:daf08fff7abb 114 results[i] = (data[i*2 + 12] << 4) | (data[2*i + 13] >> 4);
RufflesAllD 5:daf08fff7abb 115 }
RufflesAllD 5:daf08fff7abb 116
RufflesAllD 5:daf08fff7abb 117 string temp = "Valeur de l'accelerometre: X:";
RufflesAllD 5:daf08fff7abb 118 temp += intToString(results[0]);
RufflesAllD 5:daf08fff7abb 119 temp += " Y:";
RufflesAllD 5:daf08fff7abb 120 temp += intToString(results[1]);
RufflesAllD 5:daf08fff7abb 121 temp += " Z:";
RufflesAllD 5:daf08fff7abb 122 temp += intToString(results[2]);
RufflesAllD 5:daf08fff7abb 123
RufflesAllD 5:daf08fff7abb 124 ws->send(const_cast<char*>(temp.c_str()));
RufflesAllD 5:daf08fff7abb 125 }
RufflesAllD 5:daf08fff7abb 126 }
RufflesAllD 5:daf08fff7abb 127
RufflesAllD 5:daf08fff7abb 128 string Coordinateur::intToString(int value)
RufflesAllD 5:daf08fff7abb 129 {
RufflesAllD 5:daf08fff7abb 130 stringstream ss;
RufflesAllD 5:daf08fff7abb 131 ss << value;
RufflesAllD 5:daf08fff7abb 132 return ss.str();
RufflesAllD 5:daf08fff7abb 133 }