Feng Hong / Mbed OS Nucleo_rtos_basic
Revision:
19:0356e54240cc
Parent:
18:e6ed582f7022
Child:
20:ec9d4f6a16ac
--- a/payload.cpp	Sat Jul 20 03:57:26 2019 +0000
+++ b/payload.cpp	Tue Sep 24 14:05:58 2019 +0000
@@ -1,11 +1,12 @@
 #include "mbed.h"
 #include "yoda2.h"
-
+#if 1
 extern unsigned char rx_buffer[8], tx_buffer[8];
 extern unsigned char rx_length, tx_length;
 extern uint8_t can_tx_data[8];
 extern uint8_t can_rx_data[8];
 extern int current_weight;
+extern bool can_register_success;
 
 typedef struct can_id_d {
     int dest_id;
@@ -13,13 +14,6 @@
     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;
 data_field_d can_txdata_frame;
@@ -31,6 +25,7 @@
 extern int device_address;  // last 8 bits of address
 extern int device_type; // first 3 bits of adddress
 
+
 void handleCupTrackCommand(data_field_d data_pack)
 {   
 }
@@ -46,6 +41,9 @@
 void handleTeaCommand(data_field_d data_pack)
 {   
     int can_id;
+    int init_weight;
+    int needed_weight;
+    int loop;
     switch (data_pack.cmd)
     {
             case COMMAND_INIT:
@@ -53,18 +51,21 @@
                 can_txdata_frame.value1 = current_weight;
                 can_txdata_frame.value2 = 0;
                 can_txdata_frame.value3 = 0;
-                can_txdata_frame.value4 = 0;
-                can_tx_data[0] = can_txdata_frame.cmd;
-                can_tx_data[1] = (can_txdata_frame.value1 & 0x00FF);
-                can_tx_data[2] = ((can_txdata_frame.value1 >> 8) & 0x00FF);
-                can_tx_data[3] = (can_txdata_frame.value2 & 0x00FF);
-                can_tx_data[4] = ((can_txdata_frame.value2 >> 8) & 0x00FF);   
-                can_tx_data[5] = (can_txdata_frame.value3 & 0x00FF);
-                can_tx_data[6] = ((can_txdata_frame.value3 >> 8) & 0x00FF);  
-                can_tx_data[7] = can_txdata_frame.value4;  
+                memcpy(can_tx_data, (unsigned char *)&can_txdata_frame, sizeof(can_tx_data));
+//                printf("cmd=0x%08x value1=0x%08x size=%d %d\r\n", can_txdata_frame.cmd, can_txdata_frame.value1, sizeof(can_tx_data), sizeof(can_txdata_frame));
+//                printf("data 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x \r\n", can_tx_data[0], can_tx_data[1], can_tx_data[2], can_tx_data[3], can_tx_data[4], can_tx_data[5], can_tx_data[6], can_tx_data[7]);  
                 can_id = (can_id_s.source_id << 18) | (can_id_s.dest_id << 7) | can_id_s.message_id | 0x80000000;
                 can_sendData(can_id, can_tx_data, 8);
                 break;
+            case COMMAND_PLUS:
+                init_weight = current_weight;
+                needed_weight = data_pack.value1;
+                printf("init_weight:%dg needed_weight:%dg\r\n", init_weight, needed_weight);
+                while ((current_weight - init_weight) <= needed_weight)
+                {
+                    printf("still need to plus weight %dg \r\n", (current_weight - init_weight));
+                }
+                break;
             default:
                 break;
     }
@@ -72,7 +73,9 @@
 void handleShakerCommand(data_field_d command)
 {   
 }
-
+void handleIceMakerCommand(data_field_d command)
+{   
+}
 void analyzePayload()
 {
     int can_id;
@@ -100,46 +103,57 @@
             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));            
+            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);                             
+//            can_rxdata_frame.cmd = (can_rx_data[1] << 8 ) | can_rx_data[0];
+//            can_rxdata_frame.value1 = (can_rx_data[3] << 8 ) | can_rx_data[2];
+//            can_rxdata_frame.value2 = (can_rx_data[5] << 8 ) | can_rx_data[4];
+//            can_rxdata_frame.value3 = (can_rx_data[7] << 8 ) | can_rx_data[6];
+            printf("cmd=%d, value1=0x%04x, value2=0x%04x, value3=0x%04x\r\n", can_rxdata_frame.cmd, can_rxdata_frame.value1, can_rxdata_frame.value2, can_rxdata_frame.value3);                             
             device_type_v = (Device_Type_d)device_type;
-            switch (device_type_v)
+            if (can_rxdata_frame.cmd == COMMAND_REGISTER)
+            {
+                can_register_success = true;
+                printf("device register SUCCESS\r\n");
+            }
+            else
             {
-                case CupTrack:
-                    printf("CupTrack command: %d \r\n", can_rxdata_frame.cmd);
-                    handleCupTrackCommand(can_rxdata_frame);
-                    break;
-                case JamTrack:
-                    printf("JamTrack command: %d \r\n", can_rxdata_frame.cmd);
-                    handleJamTrackCommand(can_rxdata_frame);
-                    break;
-                case TeaTrack:
-                    printf("TeaTrack command: %d \r\n", can_rxdata_frame.cmd);                
-                    handleTeaTrackCommand(can_rxdata_frame);
-                    break;
-                case Tea:
-                    printf("Tea command: %d \r\n", can_rxdata_frame.cmd); 
-                    handleTeaCommand(can_rxdata_frame);
-                    break;
-                case Jam:
-                    printf("Jam command: %d \r\n", can_rxdata_frame.cmd); 
-                    handleJamCommand(can_rxdata_frame);
-                    break;
-                case Shaker:
-                    printf("Shaker command: %d \r\n", can_rxdata_frame.cmd);
-                    handleShakerCommand(can_rxdata_frame);
-                    break;
+                switch (device_type_v)
+                {
+                    case CupTrack:
+                        printf("CupTrack command: %d \r\n", can_rxdata_frame.cmd);
+                        handleCupTrackCommand(can_rxdata_frame);
+                        break;
+                    case JamTrack:
+                        printf("JamTrack command: %d \r\n", can_rxdata_frame.cmd);
+                        handleJamTrackCommand(can_rxdata_frame);
+                        break;
+                    case TeaTrack:
+                        printf("TeaTrack command: %d \r\n", can_rxdata_frame.cmd);                
+                        handleTeaTrackCommand(can_rxdata_frame);
+                        break;
+                    case Tea:
+                        printf("Tea command: %d \r\n", can_rxdata_frame.cmd); 
+                        handleTeaCommand(can_rxdata_frame);
+                        break;
+                    case Jam:
+                        printf("Jam command: %d \r\n", can_rxdata_frame.cmd); 
+                        handleJamCommand(can_rxdata_frame);
+                        break;
+                    case Shaker:
+                        printf("Shaker command: %d \r\n", can_rxdata_frame.cmd);
+                        handleShakerCommand(can_rxdata_frame);
+                        break;
+                    case IceMaker:
+                        printf("IceMaker command: %d \r\n", can_rxdata_frame.cmd);
+                        handleIceMakerCommand(can_rxdata_frame);
+                        break;                        
+                }
             }
-
         }
     }   
         
     
-}
\ No newline at end of file
+}
+#endif
\ No newline at end of file