BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

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) {}
 }