The Code Repository for the REV0 Steering Wheel.
Dependencies: CANBuffer KS0108_fork mbed-rtos mbed CAN Addresses
Fork of REVO_Updated_Steering by
Diff: Steering.cpp
- 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(); }