BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Revision:
8:9c34eb3cb3ef
Parent:
7:ea6d3c6ac200
Child:
9:f6f79f136101
--- a/main.cpp	Sun Feb 12 03:59:00 2017 +0000
+++ b/main.cpp	Sun Feb 12 19:38:26 2017 +0000
@@ -4,18 +4,21 @@
 #include "mbed.h"
 
 DigitalOut reset(p8);
-Serial xbee(p13, p14);  // tx, rx
+Serial xbee(p13, p14);   // tx, rx
 Serial pc(USBTX, USBRX); // tx, rx
 
 uint16_t portNumber = 0;
 uint16_t panId = 0;
+
 char serverAddress[32];
+char panIdChar[5];
 char portNbr[4];
-char panIdChar[5];
+
 bool boolLED = false; 
+uint64_t routerAddr;
 
 void printBuffer(uint8_t bufferSize, uint8_t* buffer) {
-    for(int k = 0; k <= bufferSize; k++) {
+    for(uint8_t k = 0; k <= bufferSize; k++) {
         pc.printf("%X-", buffer[k]);
     }
     printf("\n");
@@ -44,7 +47,7 @@
     }
 }
 
-uint16_t getFrameSize(uint8_t value1, uint8_t value2) {
+uint16_t convert8bitsTo16bits(uint8_t value1, uint8_t value2) {
     union {
         uint16_t u16_value;
         uint8_t  u8_value[2];
@@ -58,12 +61,10 @@
 
 void toogleLED() {
     // Addresse 64 bits = 00 13 A2 00 40 8B 41 6E
-    //uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x00, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3D};
-    //uint8_t low[20]  = {0x7E, 0x00, 0x10, 0x17, 0x00, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x04, 0x3E};
     uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3C};
     uint8_t low[20]  = {0x7E, 0x00, 0x10, 0x17, 0x02, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x04, 0x3C};
 
-    for (int i = 0; i < 20;) {
+    for (uint8_t i = 0; i < 20;) {
         if (xbee.writeable()) {
             if (boolLED) {
                 xbee.putc(high[i]);
@@ -111,7 +112,7 @@
     }
 }
 
-void checksum(uint16_t frameSize, uint8_t* buffer) {
+void checksum(uint8_t frameSize, uint8_t* buffer) {
     uint32_t checkSum = 0;
     
     for (int i = 0; i < frameSize; i++) {
@@ -124,26 +125,66 @@
     //checkForError(buffer);
 }
 
+//We are keeping the 64 bits address of the router.
+void readRouterAddress(uint8_t* buffer) {    
+    union {
+        uint64_t u64_value;
+        uint8_t  u8_value[8];
+    } addr;
+    
+    for(int i= 0; i < 8; i++) {
+        addr.u8_value[i] = buffer[i + 2];
+    }
+
+    routerAddr = addr.u64_value;
+}
+
 void readFrame(){
+
+    uint8_t bufferSize = 0;
     uint8_t sizeBytes[2] = { 0 };
     uint8_t buffer[104] = { 0 };
-        
+    uint8_t data[3] = {0};
+
     if (xbee.readable() && xbee.getc() == 0x7E) {
-        for (int i = 0; i < 2;) {
+        for (uint8_t i = 0; i < 2;) {
             sizeBytes[i] = xbee.getc();
             i++;
         }
-        uint16_t bufferSize = getFrameSize(sizeBytes[0], sizeBytes[1]);
+        bufferSize = convert8bitsTo16bits(sizeBytes[0], sizeBytes[1]);
          
-        for (int j = 0; j <= bufferSize;) {
+        for (uint8_t i = 0; i <= bufferSize;) {
             if (xbee.readable()) {
-                buffer[j] = xbee.getc();
-                j++;
+                buffer[i] = xbee.getc();
+                i++;
             }
         }
         
         checksum(bufferSize, buffer);
         printBuffer(bufferSize, buffer);
+        readRouterAddress(buffer);
+        
+        pc.printf("12: %X\n", buffer[12]);
+        pc.printf("13: %X\n", buffer[13]);
+        
+        pc.printf("14: %X\n", buffer[14]);
+        pc.printf("15: %X\n", buffer[15]);
+        
+        pc.printf("16: %X\n", buffer[16]);
+        pc.printf("17: %X\n", buffer[17]);
+        
+        if(buffer[0] == 0x90 && bufferSize == 18) {
+            uint8_t j = 0;
+            for(uint8_t i = 12; i < bufferSize; i += 2) {
+                data[j++] = convert8bitsTo16bits(buffer[i], buffer[i + 1]);
+            }
+            pc.printf("Data 1: %d\n", data[0]);
+            pc.printf("Data 2: %d\n", data[1]);
+            pc.printf("Data 3: %d\n", data[2]);
+        }
+        else if(buffer[0] == 0x90 && bufferSize == 13) {
+            data[0] = buffer[12];
+        }
     }
 }