Coordinator code
Dependencies: EthernetInterface WebSocketClient mbed-rtos mbed
Xbee.cpp
- Committer:
- vinbel93
- Date:
- 2016-02-18
- Revision:
- 0:4cb87eb1f914
File content as of revision 0:4cb87eb1f914:
#include "Xbee.h" static bool frameStarted = false; static char readBuffer[128]; static int buffer = 0; // Fonction d'assignation du PAN ID void setPanId(Serial* xbee, unsigned long long panId) { // Construction de la trame const int frameLength = 16; char frame[frameLength]; frame[0] = 0x7E; // Start delimiter frame[1] = 0x00; // Length (MSB) frame[2] = 0x0C; // Length (LSB) frame[3] = 0x08; // AT Command frame[4] = 0x00; // Frame ID frame[5] = 'I'; frame[6] = 'D'; frame[7] = (panId >> 56) & 0xFF; frame[8] = (panId >> 48) & 0xFF; frame[9] = (panId >> 40) & 0xFF; frame[10] = (panId >> 32) & 0xFF; frame[11] = (panId >> 24) & 0xFF; frame[12] = (panId >> 16) & 0xFF; frame[13] = (panId >> 8) & 0xFF; frame[14] = (panId >> 0) & 0xFF; frame[15] = checksum(frame, 3, 15); // Envoi sur le UART if (xbee->writeable()) { for (int i = 0; i < frameLength; i++) { xbee->putc(frame[i]); } } } // Fonction de calcul du checksum char checksum(char* frame, int begin, int end) { char sum = 0; // Addition des bits for (int i = begin; i < end; i++) { sum += frame[i]; } return 0xFF - sum; } // Fonction de lecture des données du Xbee bool readPacket(Serial* pc, Serial* xbee, char* output) { if(xbee->readable()) { int c = xbee->getc(); // Début d'une trame if (c == START_BYTE) { frameStarted = true; } // Ajout du caractère dans le buffer if (frameStarted) { readBuffer[buffer++] = c; } // Si la longueur de la trame a été lue if (buffer > 3) { int length = (readBuffer[1] << 8 ) | (readBuffer[2] & 0xFF); // Vérifier que la trame au complet a été reçue et que le checksum est valide if (buffer == length + 4 && checksum(readBuffer, 3, buffer) == readBuffer[buffer]) { // Fin de la trame frameStarted = false; parse(readBuffer, buffer, output); buffer = 0; return true; } } } return false; } void parse(char* buffer, int size, char* output) { if (size >= 17) { // Données utiles int button = buffer[15]; short accX = buffer[16] | buffer[17] << 8; // Formattage pour le serveur Websockets sprintf(output, "Button = %i, Acceleration X = %i\r\n", button, accX); } }