BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Revision:
10:488877f7f56c
Parent:
9:f6f79f136101
Child:
11:205ddd5406af
--- a/main.cpp	Mon Feb 13 02:20:15 2017 +0000
+++ b/main.cpp	Mon Feb 13 04:17:28 2017 +0000
@@ -10,18 +10,14 @@
 Serial xbee(p13, p14);   // tx, rx
 Serial pc(USBTX, USBRX); // tx, rx
 TCPSocketConnection sock;
-Thread *t1;
-Thread *t2;
 
+uint64_t routerAddress;
 uint16_t portNumber = 0;
 uint16_t panId = 0;
-
 char serverAddress[32];
 char panIdChar[5];
 char portNbr[5];
-
 bool boolLED = false; 
-uint64_t routerAddr;
 
 void printBuffer(uint8_t bufferSize, uint8_t* buffer) {
     for(uint8_t k = 0; k <= bufferSize; k++) {
@@ -47,24 +43,12 @@
         portNumber = (uint16_t)strtol(portNbr, NULL, 10);
         panId = (uint16_t)strtol(panIdChar, NULL, 10);
         
-        printf("The server address is %s\n", serverAddress);
-        printf("The port number is %i\n", portNumber);
-        printf("The PAN ID is %i\n", panId);
+        // printf("The server address is %s\n", serverAddress);
+        // printf("The port number is %i\n", portNumber);
+        // printf("The PAN ID is %i\n", panId);
     }
 }
 
-uint16_t convert8bitsTo16bits(uint8_t value1, uint8_t value2) {
-    union {
-        uint16_t u16_value;
-        uint8_t  u8_value[2];
-    } length;
-
-    length.u8_value[1] = value1;
-    length.u8_value[0] = value2;
-
-    return length.u16_value;
-}
-
 void toogleLED() {
     // Addresse 64 bits = 00 13 A2 00 40 8B 41 6E
     uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3C};
@@ -121,77 +105,80 @@
     }
 }
 
-void checksum(uint8_t frameSize, uint8_t* buffer) {
+bool checksumIsValid(uint8_t bufferSize, uint8_t* buffer) {
     uint32_t checkSum = 0;
     
-    for (int i = 0; i < frameSize; i++) {
+    for (int i = 0; i < bufferSize; i++) {
         checkSum += buffer[i];
     }    
-    if ((0xFF - (checkSum & 0xFF)) != buffer[frameSize]) {
-        pc.printf("Erreur dans le checksum. \n");
+    if ((0xFF - (checkSum & 0xFF)) != buffer[bufferSize]) {
+        pc.printf("Erreur dans la transmission de la trame. \n");
+        return false;
     }
-    
-    //checkForError(buffer);
+    return true;
 }
 
-//We are keeping the 64 bits address of the router.
+// We are storing the 64 bits address of the router.
 void readRouterAddress(uint8_t* buffer) {    
     union {
         uint64_t u64_value;
-        uint8_t  u8_value[8];
-    } addr;
+        uint8_t u8_value[8];
+    } address;
     
-    for(int i= 0; i < 8; i++) {
-        addr.u8_value[i] = buffer[i + 2];
+    for(int i=0; i < 8; i++) {
+        address.u8_value[i] = buffer[i + 2];
     }
-
-    routerAddr = addr.u64_value;
+    routerAddress = address.u64_value;
+    
+    //routerAddress = buffer[2] << 56 | buffer[3] << 48 | buffer[4] << 40 | buffer[5] << 32 | buffer[6] << 24 | buffer[7] << 16 | buffer[8] << 8 | buffer[9];
+    pc.printf("The router address is %X\n", routerAddress);
 }
 
-void readDateFromRouter(){
-    uint8_t bufferSize = 0;
-    uint8_t sizeBytes[2] = { 0 };
-    uint8_t buffer[104] = { 0 };
-    uint16_t data[3] = {0};
+void readRouterData(uint8_t bufferSize, uint8_t* buffer) {
+    uint16_t acc[3] = {0};
 
-    if (xbee.readable() && xbee.getc() == 0x7E) {
-        for (uint8_t i = 0; i < 2;) {
-            sizeBytes[i] = xbee.getc();
-            i++;
+    if (buffer[0] == 0x90 && bufferSize == 18) { // Accelerations (X,Y,Z)
+        for (uint8_t i = 12; i < bufferSize; i += 2) {
+            acc[(i/2)-6] = (buffer[i+1] << 8 ) | (buffer[i] & 0xff);
         }
-        bufferSize = convert8bitsTo16bits(sizeBytes[0], sizeBytes[1]);
-         
-        for (uint8_t i = 0; i <= bufferSize;) {
-            if (xbee.readable()) {
-                buffer[i] = xbee.getc();
-                i++;
+        // pc.printf("Acceleration X: %d\n", acc[0]);
+        // pc.printf("Acceleration Y: %d\n", acc[1]);
+        // pc.printf("Acceleration Z: %d\n", acc[2]);
+                
+        initSocket(acc[0]);
+                
+    } else if (buffer[0] == 0x90 && bufferSize == 13) { // Dry contact
+        // acc[0] = buffer[12];
+    }
+}
+
+void readDataFromRouter(){
+    while(1) {
+        uint8_t bufferSize = 0;
+        uint8_t buffer[104] = { 0 };
+    
+        if (xbee.readable() && xbee.getc() == 0x7E) {
+            bufferSize = (xbee.getc() << 8 ) | (xbee.getc() & 0xff);
+                        
+            for (uint8_t i = 0; i <= bufferSize;) {
+                if (xbee.readable()) {
+                    buffer[i] = xbee.getc();
+                    i++;
+                }
             }
-        }
-        
-        checksum(bufferSize, buffer);
-        printBuffer(bufferSize, buffer);
-        readRouterAddress(buffer);
-        
-        if (buffer[0] == 0x90 && bufferSize == 18) {
-            for(uint8_t i = 12; i < bufferSize; i += 2) {
-                data[(i/2)-6] = (buffer[i+1] << 8 ) | (buffer[i] & 0xff);
+            
+            printBuffer(bufferSize, buffer);
+            if (checksumIsValid(bufferSize, buffer)) {
+                readRouterAddress(buffer);
+                readRouterData(bufferSize, buffer);
             }
-            // pc.printf("Acceleration X: %d\n", data[0]);
-            // pc.printf("Acceleration Y: %d\n", data[1]);
-            // pc.printf("Acceleration Z: %d\n", data[2]);
-            
-            initSocket(data[0]);
-            
-        } else if (buffer[0] == 0x90 && bufferSize == 13) {
-            //data[0] = buffer[12];
         }
     }
 }
 
 int main() {
     pc.printf("Starting a coordinator... \n");
-    pc.printf("IP: %s\n", eth.getIPAddress());
-       
+    
     reset = 0;
     wait_ms(1);
     reset = 1;
@@ -210,10 +197,13 @@
     if (eth.connect() != 0) {
         pc.printf("Erreur de connection du RJ45\n"); 
     }
+    pc.printf("IP Address is %s\n", eth.getIPAddress());
     
-    while(1) {
-        readDateFromRouter();
-    }
+    // Démarrage des tâches:
+    Thread _readDataFromRouter(readDataFromRouter);
+    //Thread _toggleRouterLed(toggleLed);
+    
+    while(1) {}
 }