app4

Dependencies:   mbed-rtos mbed CRC16

Fork of S5info_APP2 by Éric Bisson

Revision:
20:ac8682cf923b
Parent:
19:e13ac9d940ab
Child:
22:7244c3391bac
--- a/main.cpp	Tue Mar 07 05:17:38 2017 +0000
+++ b/main.cpp	Tue Mar 07 05:39:28 2017 +0000
@@ -14,8 +14,9 @@
 bool transmit = false;      //faux pour le debut de demi-periode d'envoie d'un bit, vrai pour la 2ème demi-periode
 char trame_sent[80];        //tableau de la trame à envoyer
 uint8_t byte_sent_pos,      //position de l'octet dans le tableau d'envoi
-        bit_sent,           //position du bit de l'octet en cours d'envoi (du MSB au LSB) 7..0
         trame_length;       //longueur de la trame complete
+        
+signed char bit_sent;           //position du bit de l'octet en cours d'envoi (du MSB au LSB) 7..0
 
 void initTimers()
 {
@@ -110,18 +111,18 @@
 }
 
 //création de la trame
-void create_trame(char message[],int taille)
+void create_trame(char message[],unsigned char taille)
 {
-    CRC16 *myCRC = new CRC16();
-    unsigned short resultCRC = myCRC->calculateCRC16(message,taille); 
+    CRC16 myCRC;
+    unsigned short resultCRC = myCRC.calculateCRC16(message,taille); 
     
-    trame_sent[0] = 0x55;    //Preambule
-    trame_sent[1] = 0x7E;    //Start
+    trame_sent[0] = PREAMBULE;    //Preambule
+    trame_sent[1] = START;    //Start
     trame_sent[2] = 0x00;    //Type + Flag mis a 0x00
-    trame_sent[3] = (char)taille;     //Longueur du message (Max 33 caractères)
+    trame_sent[3] = taille;     //Longueur du message (Max 33 caractères)
     
     //message
-    for (int i=0;i<taille;i++)
+    for (char i=0;i<taille;i++)
     {
         trame_sent[taille + 4] = message[i];
     }
@@ -130,7 +131,7 @@
     trame_sent[taille + 4] = (resultCRC >> 8) & 0xFF;
     trame_sent[taille + 5] = resultCRC & 0xFF;
     
-    trame_sent[taille + 6] = 0x7E;    //End
+    trame_sent[taille + 6] = END;    //End
     trame_length = taille + 7;        //Longueur de la trame
 }
 
@@ -138,10 +139,10 @@
 void get_text()
 {
     pc.printf("\n\rYour text : ");
-    int count = 0;
+    unsigned char count = 0;
     char c = 0x00;
     char text[73];
-    while(c != 0x0D && count < 73) { //Tant que c'est different de '\r' et pour un maximum de 73 caractères 
+    while(c != '\r' && count < 73) {
         c = pc.getc();
         text[count] = c;
         pc.putc(c);
@@ -187,6 +188,15 @@
                 (bytes.size() == 2 && bytes[1] != START))
             {
                 bytes.clear();
+                
+                if (bytes.size() == 1)
+                {
+                    pc.printf("[DEBUG] - Invalid PREAMBULE : %x\n", bytes[0]);
+                }
+                else
+                {
+                    pc.printf("[DEBUG] - Invalid START : %x\n", bytes[1]);
+                }
             }
             if (bytes.size() == 4)
             {
@@ -206,6 +216,10 @@
                     // Affiche à l'écran le message valide
                     pc.printf(&charge_utile[0], charge_utile.size());
                 }
+                else
+                {
+                    pc.printf("[DEBUG] - Invalid CRC, dumping message\n");
+                }
                 bytes.clear();
             }
         }