Feng Hong / Mbed OS Nucleo_rtos_basic
Revision:
16:f4277e9b8612
Parent:
9:486f65124378
Child:
17:faa4d4976d22
--- a/payload.cpp	Sat Jun 08 09:19:05 2019 +0000
+++ b/payload.cpp	Sat Jun 29 09:53:19 2019 +0000
@@ -4,6 +4,22 @@
 extern unsigned char rx_length, tx_length;
 extern uint8_t can_tx_data[8];
 extern uint8_t can_rx_data[8];
+
+typedef struct can_id_d {
+    int dest_id;
+    int source_id;
+    int message_id;
+};
+
+typedef struct data_field_d {
+    uint8_t cmd;
+    uint16_t value1;
+    uint16_t value2;
+    uint16_t value3;
+    uint8_t value4;
+};
+can_id_d can_id_s;
+data_field_d can_rxdata_frame;
 CANMessage tx_message;
 extern MemoryPool<CANMessage, 16> can_mpool;
 extern Queue<CANMessage, 16> can_queue;
@@ -19,6 +35,7 @@
             memcpy((void *)&tx_message, (void *)message, sizeof(tx_message)); 
 
             printf("analyzePayload got message id=%d 0x%08x\r\n", tx_message.id, tx_message.id);
+
             for (loop = 0; loop < tx_message.len; loop++)
             {
                 can_rx_data[loop] = tx_message.data[loop];
@@ -29,7 +46,18 @@
             {
                 printf("data[%d]=%d\r\n", loop, can_rx_data[loop]);
             }  
-            can_mpool.free(message);                    
+            can_id_s.dest_id = (tx_message.id & 0x1FFC0000) >> 18;
+            can_id_s.source_id = (tx_message.id & 0x0003FF80) >> 7;
+            can_id_s.message_id = (tx_message.id & 0x0000007F) >> 0;
+//            memcpy((void*)&can_rxdata_frame, (void*)can_rx_data, sizeof(can_rx_data));            
+            can_mpool.free(message);   
+            printf("dest_id=%d source_id=%d message_id=%d \r\n", can_id_s.dest_id, can_id_s.source_id, can_id_s.message_id);
+            can_rxdata_frame.cmd = can_rx_data[0];
+            can_rxdata_frame.value1 = (can_rx_data[2] << 8 ) | can_rx_data[1];
+            can_rxdata_frame.value2 = (can_rx_data[4] << 8 ) | can_rx_data[3];
+            can_rxdata_frame.value3 = (can_rx_data[6] << 8 ) | can_rx_data[5];
+            can_rxdata_frame.value4 = can_rx_data[7];
+            printf("cmd=%d, value1=0x%04x, value2=0x%04x, value3=0x%04x, value4=0x%02x \r\n", can_rxdata_frame.cmd, can_rxdata_frame.value1, can_rxdata_frame.value2, can_rxdata_frame.value3, can_rxdata_frame.value4);                             
         }
     }