The Code Repository for the REV0 Steering Wheel.

Dependencies:   CANBuffer KS0108_fork mbed-rtos mbed CAN Addresses

Fork of REVO_Updated_Steering by Penn Electric

Revision:
35:b42afc973902
Parent:
32:535acb159709
Child:
36:8544a8900884
--- a/Steering.cpp	Sat Nov 15 19:10:34 2014 +0000
+++ b/Steering.cpp	Sat Nov 22 22:24:53 2014 +0000
@@ -4,45 +4,59 @@
 bool NOT_biSWTR_HELD;
 
 void update_display(void const *args){
-
-
+    
     while(true){
         
+        if(screen_flags[curr_screen] || should_redraw){
+        screen_flags[curr_screen] = 0;
+        should_redraw = false;
         switch(curr_screen){
     
-            case HOME_SCREEN:
-            
+            case HOME_SCREEN:{
+                
                 display.ClearScreen();
                 display.SelectFont(Arial10,BLACK,ReadData);
                 display.GotoXY(37,0);
-                display.PrintString("Home Screen");
+                display.PrintString(" Home Screen");
+              
+                display.GotoXY(22,30);
+                if(vars_list->get_value(PCM_STATE_ID) == 0){
+                    display.PutString(17, 30, "Drive Status: OFF");
+                }
+                else{
+                    display.PrintString("Drive Status: ON");
+                }
                 break;
+                }
             
             case BATTERY_SCREEN:
             
                 display.ClearScreen();
                 display.SelectFont(Arial10,BLACK,ReadData);
                 display.GotoXY(33,0);
-                display.PrintString("Battery Screen");
+                display.PrintString(" Battery Screen");
                 break;
         
             default:
                 break;    
         
+            }
         }
         wait(2);   
     }
 }
 
 void toggle_screen(){
-    curr_screen = (curr_screen+1) % 2; 
+    should_redraw = true;
+    curr_screen = (curr_screen+1) % NUM_SCREEN; 
 }
 
 void request_status_change(){
     
     char drive_status_request;
     ds_mutex.lock();
-    drive_status_request = !drive_status;
+    drive_status_request = !(vars_list->get_value(PCM_STATE_ID));
+
     ds_mutex.unlock();
     char * status_string;
 
@@ -58,11 +72,6 @@
         CAN_Steering_Buffer.txWrite(Txmsg_drive_status_request);
     }
 
-    display.ClearScreen();
-    display.SelectFont(Arial12,BLACK,ReadData);
-    display.GotoXY(26,16);
-    display.PrintString("DRIVE STATUS REQUEST");
-
     printf("%s\n\r", status_string);
     return;
 }
@@ -78,7 +87,6 @@
     display.ClearScreen();
     display.SelectFont(Arial12,BLACK,ReadData);
     display.GotoXY(16,16);
-    display.PrintString(" RESET INITIATED");
     printf("Reset Initiated\n\r");
 
     return;
@@ -86,6 +94,7 @@
 
 void Init()
 {
+    should_redraw = true;
     pc.baud(921600);
     curr_screen = HOME_SCREEN;
     drive_status = 0;
@@ -94,37 +103,32 @@
     ledstream.write(0);
     NOT_biSWBL_HELD = true;
     NOT_biSWTR_HELD = true;
+    
+    vars_list = new variables();
+    
+    vars_list->add(PCM_STATE_ID, HOME_SCREEN);
+    vars_list->add(BATTERY_VOLTAGE_ID, BATTERY_SCREEN);
+    vars_list->add(BATTERY_POWER_ID, BATTERY_SCREEN);
+    vars_list->add(BATTERY_CURRENT_ID, BATTERY_SCREEN);
+    
 }
 
 void read_messages(void const *args) {
     
     while (true) {
+        
         CANMessage Rxmsg;
-     
-        if(CAN_Steering_Buffer.rxRead(Rxmsg))
-            if(Rxmsg.id == PCM_STATE_ID){
-              
-                // Mutex to protex shared variables
-                ds_mutex.lock();
-                drive_status = Rxmsg.data[0];
-                ds_mutex.unlock();
-            }
-            
-            if(Rxmsg.id == BATTERY_POWER_ID)
-            {
-                float power_ratio;
-                ftc rcv;
-                rcv.FLOAT=0.0;
-                
-                for(int i=0; i<4; i++){
-                    rcv.C_FLOAT[i] = Rxmsg.data[i];
+        if(CAN_Steering_Buffer.rxRead(Rxmsg)){
+            id_node = vars_list->get_node(Rxmsg.id);
+            if(id_node != NULL){
+                if(id_node->value != Rxmsg.data[0]){
+                    screen_flags[id_node->screen] = 1;  
                 }
-                power_ratio=rcv.FLOAT/80000;
-                ledstream.write(power_ratio);
+                id_node->value = Rxmsg.data[0];
             }
         }
     }
-
+}
 
 int main(){
     // Initialize, set all variables.
@@ -163,7 +167,6 @@
         }
         
         if(biSWTR.read() && NOT_biSWTR_HELD){
-            printf("ff\r\n");
             toggle_screen();
             NOT_biSWTR_HELD = false;
         }
@@ -176,7 +179,6 @@
             // ignore BiSWTR.read()
         }
         
-        
         if(biSWBR.read()){ 
             reset();
         }