gbgfa

Dependencies:   mbed-rtos mbed EthernetInterface WebSocketClient

Revision:
2:63e05b3b6938
Parent:
1:446da73e1118
Child:
3:889e47988154
--- a/main.cpp	Sun Feb 12 22:46:17 2017 +0000
+++ b/main.cpp	Mon Feb 13 18:38:48 2017 +0000
@@ -1,22 +1,28 @@
 #include "mbed.h"
 #include "rtos.h"
+#include "EthernetInterface.h"
 
 LocalFileSystem local("local");
 
 DigitalOut led1(LED1);
+DigitalOut led4(LED4);
+
 DigitalOut reset(p8);
 RawSerial xbee(p13, p14);
 
 RawSerial pc(USBTX, USBRX);
 
-Thread* thread1;
-Thread* thread2;
-Thread* thread3;
+Thread* receptionThread;
+Thread* processingThread;
+Thread* ledThread;
+Thread* ethernetReceptionThread;
+
+TCPSocketConnection sock;
 
 char LED_Toggle[] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x44, 0x30, 0x00, 0x25}; //Change index 13 & 14 & 18 & 19
      
-char AT_command[] = {0x7E, 0x00, 0x06, 0x09, 0x01, 0x49 , 0x44, 0x00, 0x00, 0x00}; // +DATA + CS (7 & 8)
+char AT_ID[] = {0x7E, 0x00, 0x06, 0x09, 0x01, 0x49 , 0x44, 0x00, 0x00, 0x00}; // +DATA + CS (7 & 8)
 const char AT_WR[] = {0x7E, 0x00, 0x04, 0x09, 0x01, 0x57, 0x52, 0x4C};
 const char AT_AC[] = {0x7E, 0x00, 0x04, 0x09, 0x01, 0x41, 0x43, 0x71};
 
@@ -43,7 +49,20 @@
     return 0xFF - cs;
 }
 
-void hotdog1(){
+int traitementAcc(char msb, char lsb){
+    int val = msb > 127 ? 0xFFFFF000 | (msb << 4) : msb << 4;
+        
+    // Ajout des LSB
+    val += lsb >> 4;
+    
+    val = val > 2047 ? 2048 - val : val;
+    val = val > 1024 ? 1024 : val;
+    val = val < -1024 ? -1024 : val;
+    
+    return val;
+}
+
+void reception(){
     while(1) {
         message* msg = mPool.alloc();
         
@@ -51,7 +70,7 @@
         
         if(msg->msg[0] == 0x7E){ 
             msg->msg[1] = xbee.getc();
-            msg->msg[2] = xbee.getc();            
+            msg->msg[2] = xbee.getc();
         
             for (int i = 3;i < msg->msg[2] + 4;i++){
                 msg->msg[i] = xbee.getc();            
@@ -63,7 +82,7 @@
     }
 }
 
-void traitement() {
+void processing() {
     while(1) {
         message* msg = (message*)queue.get().value.p;
         
@@ -83,13 +102,42 @@
                 pc.printf("New address: %02x %02x", addresses[addressCounter].ah, addresses[addressCounter].al);
                 addressCounter++;
             }
+            
+            char data[7];
+            //pc.printf("%02x ", msg->msg[15]);  
+            for(int i = 15; i < msg->msg[2] + 3;i++){
+                data[i - 15] = msg->msg[i];
+            }
+            
+            switch(data[0]){
+                case 0x00:
+                    char response[] = "Etat du bouton:  ";
+                    if (data[1] == 0x00){
+                        response[16] = '0';
+                    } else if (data[1] == 0x01){
+                        response[16] = '1';
+                    }
+                    sock.send_all(response, 17);
+                    pc.printf("Sending to server: %s\r\n", response);
+                    break;
+                case 0x01:
+                    int x = traitementAcc(data[1], data[2]);
+                    int y = traitementAcc(data[3], data[4]);
+                    int z = traitementAcc(data[5], data[6]);
+                    char out[128];
+                    sprintf(out, "Accelerometre [x: %d, y: %d, z: %d]", x,y,z);
+                
+                    sock.send_all(out, 128);
+                    pc.printf("Sending to server: %s\r\n", out);
+                    break;    
+            }
+            
             /*
-            pc.printf("%02x ", msg->msg[15]);  
-            for(int i = 15; i < msg->msg[2] + 3;i++){
+            for(int i = 0; i < msg->msg[2] + 4;i++){
                 pc.printf("%02x ", msg->msg[i]);                
             }
-            pc.printf("\r\n");
-            */
+            pc.printf("\r\n");*/
+            
         }            
         mPool.free(msg);
     }
@@ -105,18 +153,24 @@
             LED_Toggle[14] = addresses[i].al;
             LED_Toggle[18] = high ? 0x05 : 0x04;
             LED_Toggle[19] = checksum(LED_Toggle, sizeof(LED_Toggle));
-            high = !high;
-            led1 = !led1;
             
             for (int j = 0; j < sizeof(LED_Toggle);j++){               
                 xbee.putc(LED_Toggle[j]);
-            }            
+            }
         }
+        led1 = !led1;
+        high = !high;
     }
 }
 
 void LEDSignal(){    
-    thread3->signal_set(0x1);
+    ledThread->signal_set(0x1);
+}
+
+void receiveEthernet(){
+    char reception[256];
+    sock.receive_all(reception, 256);
+    //pc.printf("Received from server: %s", reception);
 }
 
 int main() {
@@ -139,18 +193,18 @@
     buff[0]=(pan>>8)&0xff;
     buff[1]=(pan)&0xff;
     
-    AT_command[7] = buff[0];
-    AT_command[8] = buff[1];
+    AT_ID[7] = buff[0];
+    AT_ID[8] = buff[1];
     
-    pc.printf("PAN: %02x%02x", AT_command[7],AT_command[8]);
+    pc.printf("PAN: %02x%02x", AT_ID[7],AT_ID[8]);
     
-    char cs = checksum(AT_command, sizeof(AT_command));
+    char cs = checksum(AT_ID, sizeof(AT_ID));
     pc.printf("CS: %02x", cs);
     
-    AT_command[9] = cs;
+    AT_ID[9] = cs;
     
-    for(char i = 0;i<sizeof(AT_command);i++){
-        xbee.putc(AT_command[i]);
+    for(char i = 0;i<sizeof(AT_ID);i++){
+        xbee.putc(AT_ID[i]);
     }
     
     for(char i = 0;i<sizeof(AT_WR);i++){
@@ -159,26 +213,41 @@
     
     for(char i = 0;i<sizeof(AT_AC);i++){
         xbee.putc(AT_AC[i]);
-    }    
+    }
+    
+        
     /*
-    Thread localThread1;
-    thread1 = &localThread1;
-    thread1->start(&hotdog1);*/
+    EthernetInterface eth;
+    eth.init(); //Use DHCP
+    eth.connect();
+    printf("IP Address is %s\r\n", eth.getIPAddress());
+    
+    while(sock.connect(url, 8000)){};
+    */
+    
+    Thread localReceptionThread;
+    receptionThread = &localReceptionThread;
+    receptionThread->start(&reception);
     
     addresses[0].ah = 0x8e;
     addresses[0].al = 0x69;
     addressCounter++;    
     
     Ticker horloge;
-    horloge.attach(&LEDSignal, 1.0);
-    /*
-    Thread localThread2;
-    thread2 = &localThread2;
-    thread2->start(&traitement);*/
+    horloge.attach(&LEDSignal, 0.5);
+    
+    Thread localProcessingThread;
+    processingThread = &localProcessingThread;
+    processingThread->start(&processing);
     
-    Thread localThread3;
-    thread3 = &localThread3;
-    thread3->start(&flashLED);
+    Thread localLedThread;
+    ledThread = &localLedThread;
+    ledThread->start(&flashLED);
+    
+    Thread localEthernetReceptionThread;
+    ethernetReceptionThread = &localEthernetReceptionThread;
+    ethernetReceptionThread->start(&receiveEthernet);
+    
     while(1) {
     }
 }