HAHA
Dependencies: WebSocketClient mbed
coordinateur.cpp@5:daf08fff7abb, 2014-02-25 (annotated)
- Committer:
- RufflesAllD
- Date:
- Tue Feb 25 16:31:11 2014 +0000
- Revision:
- 5:daf08fff7abb
Final, valid?, comment?
Who changed what in which revision?
User | Revision | Line number | New 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 | } |