test can console

Dependencies:   mbed

Fork of CAN by Carlos Almeida

Revision:
1:c022a879e21c
Parent:
0:cea062e60f85
Child:
2:be902ab7d787
--- a/main.cpp	Thu Mar 23 15:57:59 2017 +0000
+++ b/main.cpp	Tue Feb 06 07:22:11 2018 +0000
@@ -1,35 +1,902 @@
+//Terminal CAN projet bts sn Enzo
+
 #include "mbed.h"
  
+#define BIG_ENDIAN          0
+#define LITTLE_ENDIAN       1
+
+#define MENU_DISPLAY            0
+#define MENU_CHOOSE             1
+#define MENU_SENDING_DISPLAY    2
+#define MENU_SENDING            3
+#define SET_ID                  4
+ 
 Ticker ticker;
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-CAN can1(p9 , p10);
+
+Serial pc(USBTX, USBRX);
+CAN can1(p9, p10);
 CAN can2(p30, p29);
-char counter = 0;
- 
-void send() {
-    printf("send()\r\n");
-    if(can1.write(CANMessage(1100, &counter, 1))) {
-        printf("loop send()\r\n");
-        counter++;
-        printf("Message sent: %d\r\n", counter);
-        led1 = !led1;
-    }
+
+char value = 0;
+uint8_t state = 0;
+uint16_t identifier = 0x0539;
+
+
+void send(char counter) {
+    //pc.printf("send()\n");
+    if(can1.write(CANMessage(identifier, &counter, 8,))) {
+        //pc.printf("wloop()\n");
+        //counter++;
+        pc.printf("Message sent: %d\r\n", counter);
+    } 
+    led1 = !led1;
 }
  
 int main() {
-    ticker.attach(&send, 2);
+    
+    //ticker.attach(&send, 1);
     CANMessage msg;
+    char c;
+    uint16_t instruction;
+    uint16_t instruction_2;
+    uint8_t bytes;
+    int8_t state_val;
+    uint8_t data_report[100];
+    uint8_t data_rc;
+    uint8_t endianness = 0;
     while(1) {
-        printf("loop wait()\r\n");
+       
+       
+       
+       
+    switch(state){
+       
+       case MENU_DISPLAY://menu affichage
+       pc.printf("\r\n\n\n");
+       pc.printf("CAN BUS - TERMINAL \r\n");
+       pc.printf("1 - Set the value to be sent\r\n");
+       pc.printf("2 - Set Endianness \r\n");
+       pc.printf("3 - Set Identifier \r\n");
+       pc.printf("4 - Send the value \r\n");
+       state = 1;       
+       break;
+       
+       case MENU_CHOOSE://choix menu
+       
+       c = pc.getc();
+       
+       
+       if(c == '1'){//attribution valeur a envoyer
+        instruction = 0;
+        state_val = 0;
+        pc.printf("1 \r\n\n");
+        wait(1.0);
+        state = MENU_SENDING_DISPLAY;
+        }
+        
+        
+        if(c == '2'){
+            pc.printf("2 \r\n\n");
+        wait(1.0);
+            
+            pc.printf("Endianness Configuration \r\n");
+            pc.printf("1 - Big Endian \r\n");
+            pc.printf("2 - Little Endian \r\n");
+            
+            c = pc.getc();
+            
+            if(c == '1'){
+                endianness = BIG_ENDIAN;
+                pc.printf("\r\n1\r\n");
+                }
+                
+                if(c == '2'){
+                endianness = LITTLE_ENDIAN;
+                pc.printf("\r\n2\r\n");
+                }
+            state = MENU_DISPLAY;
+            wait(1.0);
+            
+            }
+        
+
+    if(c == '3'){
+        
+        pc.printf("3 \r\n\n");
+        wait(1.0);
+        
+        pc.printf("Set the identifier(hexa) : 0x");
+        state = SET_ID;
+         
+    }        
+
+
+        if(c == '4'){//envoie valeur
+        pc.printf("4 \r\n\n");
+        wait(1.0);
+        
+        switch(bytes){//calcul nombre octet présent
+            
+            case 1://si 1 octet present envoie 1 octet 
+        send(instruction);
+            break;
+            
+            case 2://si 2 octets present envoie 2 octets 1 par 1
+            if(endianness == BIG_ENDIAN){
+            send(instruction_2);
+            send(instruction);}
+            
+            if(endianness == LITTLE_ENDIAN){
+            send(instruction);
+            send(instruction_2);}
+            break;
+            
+            }//switch
+            
+        state = MENU_DISPLAY; //on revient au menu de départ apres la capture de données
+        
+        //sequence de capture de données de retour
+    for(int i = 0; i <= 500; i++){
+            if(!can1.read(msg)) {
+            pc.printf("awaiting data\r\n");}
+            
+            if(can1.read(msg)) {
+            pc.printf("Message received: %d \r\n", msg.data[0]);
+            data_report[data_rc] = msg.data[0];
+            data_rc++;
+            led2 = !led2;
+             wait(0.1);
+        } 
+
+        }//for int i  
+        pc.printf("\r\nDone\r\n\n");
+        //capture de données terminées, on fait un rapport des données collectées        
+        for(int i = 0; i < data_rc; i++){
+            pc.printf("Message captured: %d \r\n", data_report[i]);
+            }
+            data_rc = 0;
+        
+            }//if c == '2'
+       
+       break;//
+       
+       case MENU_SENDING_DISPLAY://choix de la valeur a envoyer
+       pc.printf("Set the value to be sent(hex value) : 0x");
+       state = 3;       
+       break;
+       
+       case MENU_SENDING://demande de valeur a envoyer
+       
+       c = pc.getc();
+       
+       
+       //state_val correspond a la premiere valeur, si la premiere valeur n'est pas encore entrée, elle attribué a la variable instruction 
+       //dans l'autre cas, on décale de 4 rang les 4 bits de l'ancienne valeur pour l'ajouter à la nouvelle
+       switch(c){
+           
+           
+                
+           case '0':
+           pc.printf("0");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0000;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b0000;
+               state_val++;
+               }
+            
+           break;
+           
+           case '1':
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0001;
+                }
+                
+           pc.printf("1");
+           if(state_val == 0){
+               instruction = 0b0001;
+               state_val++;
+               }
+            
+           break;
+           
+           case '2':
+           
+            if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0010;
+                }
+                
+           pc.printf("2");
+           if(state_val == 0){
+               instruction = 0b0010;
+               state_val++;
+               }
+           
+           break;
+           
+           case '3':
+           pc.printf("3");
+          
+          if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0011;
+                }
+          
+           if(state_val == 0){
+               instruction = 0b0011;
+               state_val++;
+               }
+            
+           break;
+           
+           case '4':
+           
+            if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0100;
+                }           
+           
+           pc.printf("4");
+           if(state_val == 0){
+               instruction = 0b0100;
+               state_val++;
+               }
+
+           break;
+           
+           case '5':
+           pc.printf("5");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0101;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b0101;
+               state_val++;
+               }
+            
+           break;
+           
+           case '6':
+           pc.printf("6");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0110;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b0110;
+               state_val++;
+               }
+            
+           break;
+           
+           case '7':
+           pc.printf("7");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b0111;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b0111;
+               state_val++;
+               }
+            
+           break;
+           
+           case '8':
+           pc.printf("8");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1000;
+                }
+           
+           
+           if(state_val == 0){
+               instruction = 0b1000;
+               state_val++;
+               }
+            
+           break;
+           
+           case '9':
+           pc.printf("9");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1001;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1001;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'a':
+           pc.printf("a");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1010;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1010;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'b':
+           pc.printf("b");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1011;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1011;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'c':
+           pc.printf("c");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1100;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1100;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'd':
+           pc.printf("d");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1101;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1101;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'e':
+           pc.printf("e");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1110;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1110;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'f':
+           pc.printf("f");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1111;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1111;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'A':
+           pc.printf("a");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1010;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1010;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'B':
+           pc.printf("b");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1011;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1011;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'C':
+           pc.printf("c");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1100;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1100;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'D':
+           pc.printf("d");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1101;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1101;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'E':
+           pc.printf("e");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1110;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1110;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'F':
+           pc.printf("f");
+           
+           if(state_val > 0){
+                instruction = instruction << 4;
+                instruction |= 0b1111;
+                }
+           
+           if(state_val == 0){
+               instruction = 0b1111;
+               state_val++;
+               }
+            
+           break;
+           
+           case '\r': //si au sérial nous avons le retour de ligne
+           pc.printf("\r\n0x%x \r\n", instruction);
+           wait(1.0);
+           state_val = 0;
+           state = MENU_DISPLAY;
+           //calcul du nombre d'octet en fonction de la valeur finale
+           if(instruction <= 255){
+               bytes = 1;
+               }
+               if(instruction > 255){
+               bytes = 2;
+               instruction_2 = instruction;
+               instruction_2 = instruction_2 >> 8;
+               instruction = instruction & 0b0000000011111111;
+               }
+           break;
+           
+           
+           }
+       
+       break;
+       
+       case SET_ID:
+       
+       c = pc.getc();
+         
+         switch(c){
+           
+           
+                
+           case '0':
+           pc.printf("0");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0000;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b0000;
+               state_val++;
+               }
+            
+           break;
+           
+           case '1':
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0001;
+                }
+                
+           pc.printf("1");
+           if(state_val == 0){
+               identifier = 0b0001;
+               state_val++;
+               }
+            
+           break;
+           
+           case '2':
+           
+            if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0010;
+                }
+                
+           pc.printf("2");
+           if(state_val == 0){
+               identifier = 0b0010;
+               state_val++;
+               }
+           
+           break;
+           
+           case '3':
+           pc.printf("3");
+          
+          if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0011;
+                }
+          
+           if(state_val == 0){
+               identifier = 0b0011;
+               state_val++;
+               }
+            
+           break;
+           
+           case '4':
+           
+            if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0100;
+                }           
+           
+           pc.printf("4");
+           if(state_val == 0){
+               identifier = 0b0100;
+               state_val++;
+               }
+
+           break;
+           
+           case '5':
+           pc.printf("5");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0101;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b0101;
+               state_val++;
+               }
+            
+           break;
+           
+           case '6':
+           pc.printf("6");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0110;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b0110;
+               state_val++;
+               }
+            
+           break;
+           
+           case '7':
+           pc.printf("7");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b0111;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b0111;
+               state_val++;
+               }
+            
+           break;
+           
+           case '8':
+           pc.printf("8");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1000;
+                }
+           
+           
+           if(state_val == 0){
+               identifier = 0b1000;
+               state_val++;
+               }
+            
+           break;
+           
+           case '9':
+           pc.printf("9");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1001;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1001;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'a':
+           pc.printf("a");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1010;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1010;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'b':
+           pc.printf("b");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1011;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1011;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'c':
+           pc.printf("c");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1100;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1100;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'd':
+           pc.printf("d");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1101;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1101;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'e':
+           pc.printf("e");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1110;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1110;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'f':
+           pc.printf("f");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1111;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1111;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'A':
+           pc.printf("a");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1010;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1010;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'B':
+           pc.printf("b");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1011;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1011;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'C':
+           pc.printf("c");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1100;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1100;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'D':
+           pc.printf("d");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1101;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1101;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'E':
+           pc.printf("e");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1110;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1110;
+               state_val++;
+               }
+            
+           break;
+           
+           case 'F':
+           pc.printf("f");
+           
+           if(state_val > 0){
+                identifier = identifier << 4;
+                identifier |= 0b1111;
+                }
+           
+           if(state_val == 0){
+               identifier = 0b1111;
+               state_val++;
+               }
+            
+           break;
+           
+           case '\r': //si au sérial nous avons le retour de ligne
+           pc.printf("\r\n0x%x \r\n", identifier);
+           wait(1.0);
+           state = MENU_DISPLAY;
+           state_val = 0;
+           break;
+           
+           
+           }
+       
+       
+       break;
+       
+       
+       
+       
+       }   
+       
+       
+       
+        
+        //wait(0.2);
+    }
+}
+
+ /*printf("loop()\n");
         if(can2.read(msg)) {
-            printf("Message received: %d, from %d\r\n", msg.data[0], msg.id);
-            if(msg.id==1100)
-                led2 = !led2;
-            if(msg.id==1102)
-                led3 = !led3;     
-        }
-        wait(0.5);
-    }
-}
\ No newline at end of file
+            printf("Message received: %d\n", msg.data[0]);
+            led2 = !led2;
+        } */
\ No newline at end of file