code pour recevoir des trames et mettre les char sur le port usb
Dependencies: mbed
Fork of APP4 by
coordinateur.cpp
- Committer:
- RufflesAllD
- Date:
- 2014-04-29
- Revision:
- 8:ecc7c75a37ee
- Parent:
- 7:a6f58e5d1188
File content as of revision 8:ecc7c75a37ee:
#include "coordinateur.hpp" Serial pc(USBTX, USBRX); 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) { 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::getBytes() { if (xbee.readable()) { etatTrame(xbee.getc()); // Envoie les char recu en sans-fil dans la machine à état } } // Machine à état qui reconstruit la trame 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 == 16) 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); pc.putc(0xFF); // delimiter pour l'application sur l'ordinateur wait(0.1); // pc.putc(data[12]); // wait(0.1); // pc.putc(data[13]); // envoie sur le port usb des 4 char déterminant le code du mouvement à exécuter wait(0.1); // pc.putc(data[14]); // wait(0.1); // pc.putc(data[15]); // etat = Start; } break; } }