version 1.0
Dependencies: CMSIS_DSP_401 GPS MPU9150_DMP PID QuaternionMath Servo mbed
Fork of SolarOnFoils_MainModule_20150518 by
Diff: menu.cpp
- Revision:
- 1:b4a0d63db637
- Parent:
- 0:81b21910454e
- Child:
- 2:f6d058931b17
--- a/menu.cpp Tue Jun 23 13:55:28 2015 +0000 +++ b/menu.cpp Fri Jun 26 09:21:33 2015 +0000 @@ -1,10 +1,13 @@ #include "menu.h" #include "string.h" +#define DEVICE_ID 201 // Contructor Menu::Menu() : uiCounter(0), + bMenu(1), + bReadHeight(0), bError(0) { init(); @@ -14,8 +17,10 @@ { }; +extern Menu mLCDMenu; extern SystemVar svSoF; extern Serial debug; +extern CAN CANbus; ////////////////////////////////////////////////////////////////////////////////////// // init // ////////////////////////////////////////////////////////////////////////////////////// @@ -45,9 +50,45 @@ return pLine2; } +SCREEN_t Menu::getScreen(void) +{ + return screen; +} + +bool Menu::bGetReadHeight(void) +{ + return bReadHeight; +} ////////////////////////////////////////////////////////////////////////////////////// // other // ////////////////////////////////////////////////////////////////////////////////////// +void Menu::vRotaryUp(void) +{ + if(bMenu) vSelectMenu(nextMenu); + vCheckReadHeight(); + //debug.printf("rotary up %i\r\n", nextMenu); +} + +void Menu::vRotaryDown(void) +{ + if(bMenu) vSelectMenu(prevMenu); + vCheckReadHeight(); + //debug.printf("rotary down %i\r\n", prevMenu); +} + +void Menu::vRotaryConfirm(void) +{ + if(bMenu) vSelectMenu(confMenu); + //debug.printf("rotary confirm\r\n"); +} + +void Menu::vFillString1(void) +{ + int i; + int length = strlen(cTextLine1); + for (i=length; i < 16; i++) strcat(cTextLine1," "); +} + void Menu::vFillString2(void) { int i; @@ -55,11 +96,24 @@ for (i=length; i < 16; i++) strcat(cTextLine2," "); } +void Menu::vCheckReadHeight(void) +{ + if(bReadHeight) + { + cStatus = 0xff; + CANbus.write(CANMessage(DEVICE_ID, &cStatus, 1)); // send clearance true to port height + } + else + { + cStatus = 0x00; + CANbus.write(CANMessage(DEVICE_ID, &cStatus, 1)); // send clearance false to port height + } +} + ////////////////////////////////////////////////////////////////////////////////////// // show screens // ////////////////////////////////////////////////////////////////////////////////////// - -void Menu::cShowScreen(SCREEN_t s) +void Menu::vShowScreen(SCREEN_t s) { screen = s; uiCounter = rand()% 100 + 1; @@ -68,19 +122,37 @@ case _INIT: strcpy(cTextLine1," Solar on Foils "); strcpy(cTextLine2," Initialize "); break; - case _STANDBY: strcpy(cTextLine1,"STANDBY"); - strcpy(cTextLine2," Solar on Foils "); break; + case _STANDBY: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2," system STANDBY "); break; + + case _SETTINGS0: strcpy(cTextLine1,">Settings "); + strcpy(cTextLine2," View settings "); break; + + case _SETTINGS1: strcpy(cTextLine1," Settings "); + strcpy(cTextLine2,">View settings "); break; + + case _SETTINGS2: strcpy(cTextLine1," View settings "); + strcpy(cTextLine2,">Diagnosis "); break; - case _ACTIVE: strcpy(cTextLine1,"ACTIVE"); - strcpy(cTextLine2," Solar on Foils "); break; + case _ACTIVE: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2," system ACTIVE "); break; - case _FOILBORNE: strcpy(cTextLine1,"FOILBORNE"); - strcpy(cTextLine2," Solar on Foils "); break; + case _FOILBORNE: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2," FOILBORNE mode "); break; + + case _FOILASSIST: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2," FOILASSIST mode"); break; + + case _HOMESCREEN: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2,">HOME "); break; + + case _PROGRESS: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2,"work in progress"); break; - case _CANINIT: strcpy(cTextLine1,"CAN INITIALIZE"); - strcpy(cTextLine2," Solar on Foils "); break; + case _CANINIT: strcpy(cTextLine1," Solar on Foils "); + strcpy(cTextLine2," CAN INITIALIZE "); break; - case _CANOK: strcpy(cTextLine2,"System OK "); break; + case _CANOK: strcpy(cTextLine2," System OK "); break; case _CANID101OK: strcpy(cTextLine1," PORT FOIL "); strcpy(cTextLine2," CAN OK "); break; @@ -136,13 +208,63 @@ else strcat(cTextLine2,"-"); strcat(cTextLine2, svSoF.getValue()); strcat(cTextLine2,"\xDF"); - vFillString2(); break; + vFillString2(); break; + + case _HEIGHTTEST: svSoF.cShowValue(_PHEIGHT); + strcpy(cTextLine1," Confirm to end "); + strcpy(cTextLine2,"Port:"); + strcat(cTextLine2, svSoF.getValue()); + strcat(cTextLine2," cm."); + vFillString2(); break; + + + case _SHOWHEIGHTFB: svSoF.cShowValue(_HEIGHTFOILBORNE); + strcpy(cTextLine1," Confirm to end "); + strcpy(cTextLine2,"Height:"); + strcat(cTextLine2, svSoF.getValue()); + strcat(cTextLine2," cm."); + vFillString2(); break; } // End switch case //debug.printf("strlen %i\t", strlen(cTextLine2)); // debug stringlength if(strlen(cTextLine1) > 18) strcpy(cTextLine1," Line overflow "); if(strlen(cTextLine2) > 18) strcpy(cTextLine2," Line overflow "); // \xDF for degree sign. + // "\x18\x19\x1a\x1b" arrows } +////////////////////////////////////////////////////////////////////////////////////// +// select menu screens // +////////////////////////////////////////////////////////////////////////////////////// +void Menu::vSelectMenu(MENU_t m) +{ + menu = m; + switch(menu) + { + case _MENU0_0: mLCDMenu.vShowScreen(_INIT); nextMenu = _MENU0_1; break; + + case _MENU0_1: mLCDMenu.vShowScreen(_STANDBY); nextMenu = _MENU0_2; break; + + case _MENU0_2: mLCDMenu.vShowScreen(_SETTINGS0); nextMenu = _MENU0_3; prevMenu = _MENU0_4; confMenu = _MENU1_2; break; + + case _MENU0_3: mLCDMenu.vShowScreen(_SETTINGS1); nextMenu = _MENU0_4; prevMenu = _MENU0_2; confMenu = _MENU1_31; break; + + case _MENU0_4: mLCDMenu.vShowScreen(_SETTINGS2); nextMenu = _MENU0_2; prevMenu = _MENU0_3; confMenu = _MENU1_4; break; + + case _MENU1_2: mLCDMenu.vShowScreen(_PROGRESS); nextMenu = _MENU0_2; prevMenu = _MENU0_3; confMenu = _MENU1_2; break; + + case _MENU1_4: mLCDMenu.vShowScreen(_PROGRESS); nextMenu = _MENU0_2; prevMenu = _MENU0_3; confMenu = _MENU1_2; break; + + case _MENU1_31: mLCDMenu.vShowScreen(_ROLLTEST); nextMenu = _MENU1_32; prevMenu = _HOME; confMenu = _MENU1_31; break; + + case _MENU1_32: mLCDMenu.vShowScreen(_PITCHTEST); nextMenu = _MENU1_33; prevMenu = _MENU1_31; confMenu = _MENU1_32; break; + + case _MENU1_33: mLCDMenu.vShowScreen(_SHOWHEIGHTFB); bReadHeight = false; nextMenu = _MENU1_34; prevMenu = _MENU1_32; confMenu = _MENU1_33; break; + + case _MENU1_34: mLCDMenu.vShowScreen(_HEIGHTTEST); bReadHeight = true; nextMenu = _HOME; prevMenu = _MENU1_33; confMenu = _MENU1_34; break; + + case _HOME: mLCDMenu.vShowScreen(_HOMESCREEN); bReadHeight = false; nextMenu = _MENU1_31; prevMenu = _MENU1_34; confMenu = _MENU0_2; break; + + }//end switch +}