Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ConfigFile EthernetInterface mbed-rtos mbed
Fork of S05APP3 by
Diff: main.cpp
- Revision:
- 17:7ae8f91f46a2
- Parent:
- 16:cede55e5b075
- Child:
- 18:0c71241eab4f
--- a/main.cpp Tue Feb 14 02:35:07 2017 +0000 +++ b/main.cpp Tue Feb 14 03:51:26 2017 +0000 @@ -28,7 +28,7 @@ char strDryContact[15]; } mail_t; -Mail<mail_t, 100> mail_box; +Mail<mail_t, 200> mail_box; uint8_t routerAddress[8] = { 0 }; // Should be 00 13 A2 00 40 8B 41 6E uint16_t portNumber = 0; @@ -50,7 +50,16 @@ /* * Envoyer et recevoir des données via le protocole Xbee: */ -void readDataFromXbee(uint8_t bufferSize) {} +uint8_t* readDataFromXbee(uint8_t bufferSize) { + uint8_t buffer[104] = { 0 }; + for (uint8_t i = 0; i <= bufferSize;) { + if (xbee.readable()) { + buffer[i] = xbee.getc(); + i++; + } + } + return buffer; +} void sendDataToXbee(uint8_t bufferSize, uint8_t* buffer) { for (uint8_t i = 0; i < bufferSize;) { if (xbee.writeable()) { @@ -88,15 +97,12 @@ /* * Détection et gestion des erreurs (allumer une LED pendant 1 seconde lorsqu'une erreur est détectée): */ -void toggleErrorLed() { +void printError(char* buffer) { + pc.printf(buffer); errorLed.write(3.3); wait(1); errorLed.write(0); } -void printError(char* buffer) { - pc.printf(buffer); - toggleErrorLed(); -} void readATCommandResponse(uint8_t* buffer) { if (buffer[4] == 0x01) printError("AT Command Response: Error.\n"); @@ -171,7 +177,8 @@ checkSum += buffer[i]; } if ((0xFF - (checkSum & 0xFF)) != buffer[bufferSize]) { - pc.printf("Erreur dans la transmission de la trame... \n"); + pc.printf("Erreur dans la transmission de la trame --> "); + printBuffer(bufferSize, buffer); return false; } return true; @@ -186,7 +193,7 @@ bool led = false; uint8_t command[20] = {0}; - Thread::signal_wait(0x2); // Attendre que l'adresse du noeud rooter soit connue + Thread::signal_wait(0x2); // Attendre que l'adresse du noeud rooter soit connue command[0] = 0x7E; command[1] = 0x00; command[2] = 0x10; @@ -250,7 +257,7 @@ } /* -* Lire et décomposer les trames reçues: +* Lire et décomposer les trames reçues (adresse, données, status): */ void readRouterAddress(uint8_t* buffer) { routerAddress[0] = buffer[1]; @@ -271,7 +278,6 @@ for (uint8_t i = 12; i < bufferSize; i += 2) { acc[(i/2)-6] = (buffer[i+1] << 8 ) | (buffer[i] & 0xff); } - mail_t *mail = mail_box.alloc(); mail->type = 0; sprintf(mail->strAccelerationX, "Acc.: X: %i\0", acc[0]); @@ -289,17 +295,10 @@ void readDataFromRouter(){ while(1) { - uint8_t buffer[104] = { 0 }; - if (xbee.readable() && xbee.getc() == 0x7E) { - uint8_t bufferSize = (xbee.getc() << 8 ) | (xbee.getc() & 0xff); - - for (uint8_t i = 0; i <= bufferSize;) { - if (xbee.readable()) { - buffer[i] = xbee.getc(); - i++; - } - } + uint8_t buffer[104] = { 0 }; + uint8_t bufferSize = (xbee.getc() << 8 ) | (xbee.getc() & 0xff); + memcpy(buffer, readDataFromXbee(bufferSize), bufferSize + 1); if (checksumIsValid(bufferSize, buffer)) { if (buffer[0] == 0x90) { // Frame Type: @@ -308,15 +307,14 @@ readRouterData(bufferSize, buffer); } else if (buffer[0] == 0x8A) { // Frame Type: Modem Status readModemStatus(buffer); - } else if (buffer[0] == 0x8B) { // Frame Type: Transmit Status - + } else if (buffer[0] == 0x8B) { // Frame Type: Transmit Status } else if (buffer[0] == 0x97) { // Frame Type: Remote AT Command Response readRemoteATCommandResponse(buffer); } else if (buffer[0] == 0x09) { // Frame Type: AT Command Response - + readATCommandResponse(buffer); } } else { - printf("Erreur dans la tranmission de la trame...\n"); + // Erreur dans la tranmission de la trame... } } } @@ -367,8 +365,9 @@ } if (eth.connect() != 0) { pc.printf("Erreur de connection du RJ45\n"); + } else { + pc.printf("IP Address is %s\n", eth.getIPAddress()); } - pc.printf("IP Address is %s\n", eth.getIPAddress()); /*int numberOfRetries = 0; while (sock.connect(serverAddress, portNumber) != 0) { @@ -385,7 +384,6 @@ t1 = &_toggleRouterLed; ticker1.attach(&isr, 1); - while(1) {} }