BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Revision:
2:3fbf13ba290e
Parent:
1:ceb3f8ba8793
Child:
3:fbd4b164e8ad
--- a/main.cpp	Fri Feb 10 19:25:34 2017 +0000
+++ b/main.cpp	Fri Feb 10 21:58:27 2017 +0000
@@ -5,41 +5,53 @@
 //Serial avec le Xbee
 DigitalOut reset(p8);
 Serial uart(p13, p14);  // tx, rx
-uint8_t frameSize = 0;
+uint16_t frameSize = 0;
 
 //Serial avec le PC
 Serial pc(USBTX, USBRX); // tx, rx
 
 //Socket Buffer
-uint8_t buffer[104] = {0};
+TCPSocketConnection sock;
+uint8_t buffer[104] = { 0 };
 char serverAddrvalue[32];
-TCPSocketConnection sock;
+uint16_t portNo = 0;
+char portNbValue[4];
+
+//Union créée pour mettre deux 8 bits en un 16 bits.
+uint16_t getLength(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;
+}
+
 //Read the config file
 void readConfigFile()
 {
     LocalFileSystem local("local");
     ConfigFile cfg;
     char *serverAddr = "serverAddr";
-    if (!cfg.read("/local/input.cfg")) error("Failure to read a configuration file.\n");
-    else cfg.getValue(serverAddr, &serverAddrvalue[0], sizeof(serverAddrvalue));
-}
-
-//Init RJ45 and use DHCP
-void initRJ45()
-{
-    EthernetInterface eth;
-    eth.init(); 
-    eth.connect();
+    char *tempPortNo = "portNb";
+    if (!cfg.read("/local/input.cfg")) error("Erreur dans la lecture du fichier\n");
+    else
+    {
+        cfg.getValue(serverAddr, &serverAddrvalue[0], sizeof(serverAddrvalue));
+        cfg.getValue(tempPortNo, &portNbValue[0], sizeof(portNbValue));
+        portNo = (uint16_t)strtol(portNbValue, NULL, 10);
+        pc.printf("%i", portNo);
+    }
 }
 
 void initSocket()
 {
-    //Init Socket
-    //sock.connect(serverAddrvalue, 502);
-    sock.connect("192.168.0.103", 502);
-    sock.send_all(buffer, sizeof(buffer)-1);
+
     
-    int repSize;
+    //int repSize;
     //while (true) {
 
         //sprintf (buffer, (const char *)uart.getc());
@@ -56,36 +68,69 @@
     //}
 }
 
-void checkChecksum()
+void verifyChecksum()
 {
-    //On additionne tout les bytes sauf le API Frame et le Length et on fait FF - résultat = checksum
-    for(int i = 2; i < frameSize; i++)
-    {
-    int checkSum += buffer[i]
+    //Je valide le checksum pour voir si tout est correct.
+    uint32_t checkSum = 0;
+    for(int i = 0; i < frameSize; i++) {
+        checkSum += buffer[i];
     }
-    if((0xFF- checkSum) == buffer[frameSize])
-    {
-        //CheckSum ok
-    }
-    else 
-    {
-        //Error
+    if((0xFF - (checkSum & 0xFF)) != buffer[frameSize])
+        pc.printf("Erreur dans le checksum. \n");
+}
+
+void readFrame(){
+    
+    uint8_t temp[2] = { 0 };
+    if(uart.readable() && uart.getc() == 0x7E) {
+         
+        //On ramasse la taille de la trame
+        for(int i = 0; i < 2;) 
+        {
+            if(uart.readable()) {
+                temp[i] = uart.getc();
+                i++;
+            }
+        }
+        frameSize = getLength(temp[0], temp[1]);
+         
+        //Je lis le restant de la tramme et la met dans un buffer
+        for(int j = 0; j < frameSize + 1;) 
+        {
+            if(uart.readable()) {
+                buffer[j] = uart.getc();
+                j++;
+            }
+        }
+        verifyChecksum();
     }
 }
 
 int main() {
+    
     reset = 0;
     wait(0.4);
     reset = 1;
     
-    //readConfigFile();
-    initRJ45();
-    initSocket();
-  
+    readConfigFile();
+    
+    //Init RJ45 and use DHCP
+    EthernetInterface eth;
+    if(eth.init() != 0)
+        pc.prinf("Erreur d'initialisation du RJ45\n");
+    if(eth.connect() != 0)
+        pc.prinf("Erreur de connection du RJ45\n"); 
+
+    //Init Socket
+    if(sock.connect(serverAddrvalue, portNo) != 0)
+        pc.printf("Erreur de socket\n");
+
+    //sock.send_all(buffer, sizeof(buffer)-1);
+    
+    //initSocket();
     while(1) {
-        if(uart.readable()) {
-            pc.printf("%i", uart.getc());
-        }
+        readFrame();
     }
 }
 
+