version 1.0
Dependencies: CMSIS_DSP_401 GPS MPU9150_DMP PID QuaternionMath Servo mbed
Fork of SolarOnFoils_MainModule_20150518 by
menu.cpp
- Committer:
- Dannis_mbed
- Date:
- 2015-06-26
- Revision:
- 1:b4a0d63db637
- Parent:
- 0:81b21910454e
- Child:
- 2:f6d058931b17
File content as of revision 1:b4a0d63db637:
#include "menu.h" #include "string.h" #define DEVICE_ID 201 // Contructor Menu::Menu() : uiCounter(0), bMenu(1), bReadHeight(0), bError(0) { init(); }; Menu::~Menu() { }; extern Menu mLCDMenu; extern SystemVar svSoF; extern Serial debug; extern CAN CANbus; ////////////////////////////////////////////////////////////////////////////////////// // init // ////////////////////////////////////////////////////////////////////////////////////// void Menu::init(void) { memset (cTextLine1,' ',16); memset (cTextLine2,' ',16); } ////////////////////////////////////////////////////////////////////////////////////// // set's // ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// // get's // ////////////////////////////////////////////////////////////////////////////////////// char* Menu::getLine1(void) { static char* pLine1; pLine1 = cTextLine1; return pLine1; } char* Menu::getLine2(void) { static char* pLine2; pLine2 = cTextLine2; 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; int length = strlen(cTextLine2); 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::vShowScreen(SCREEN_t s) { screen = s; uiCounter = rand()% 100 + 1; switch(screen) { case _INIT: strcpy(cTextLine1," Solar on Foils "); strcpy(cTextLine2," Initialize "); 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," Solar on Foils "); strcpy(cTextLine2," system ACTIVE "); 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," Solar on Foils "); strcpy(cTextLine2," CAN INITIALIZE "); break; case _CANOK: strcpy(cTextLine2," System OK "); break; case _CANID101OK: strcpy(cTextLine1," PORT FOIL "); strcpy(cTextLine2," CAN OK "); break; case _CANID102OK: strcpy(cTextLine1," STARB FOIL "); strcpy(cTextLine2," CAN OK "); break; case _CANID201OK: strcpy(cTextLine1," PORT HEIGHT "); strcpy(cTextLine2," CAN OK "); break; case _CANID202OK: strcpy(cTextLine1," STARB HEIGHT "); strcpy(cTextLine2," CAN OK "); break; case _CANID205OK: strcpy(cTextLine1," GYRO/GPS "); strcpy(cTextLine2," CAN OK "); break; case _CANID1001OK: strcpy(cTextLine1," EXTERN UI "); strcpy(cTextLine2," CAN OK "); break; case _CANID101FAIL: strcpy(cTextLine1," PORT FOIL "); strcpy(cTextLine2," CAN FAIL "); break; case _CANID102FAIL: strcpy(cTextLine1," STARB FOIL "); strcpy(cTextLine2," CAN FAIL "); break; case _CANID201FAIL: strcpy(cTextLine1," PORT HEIGHT "); strcpy(cTextLine2," CAN FAIL "); break; case _CANID202FAIL: strcpy(cTextLine1," STARB HEIGHT "); strcpy(cTextLine2," CAN FAIL "); break; case _CANID205FAIL: strcpy(cTextLine1," GYRO/GPS "); strcpy(cTextLine2," CAN FAIL "); break; case _CANID1001FAIL: strcpy(cTextLine1," EXTERN UI "); strcpy(cTextLine2," CAN FAIL "); break; case _CANFAIL: strcpy(cTextLine2," System FAIL "); break; case _CANNORESPONSE: strcpy(cTextLine2," No CAN responce"); break; case _PULSE_IS: strcpy(cTextLine1,"Pulse is: "); // char *intStr = itoa(uiCounter); //string str = string(intStr); // strcpy(cTextLine2, intStr); // about to test break; case _IMUREADY: strcpy(cTextLine1,"MPU9150 is ready"); break; case _IMUFAIL: strcpy(cTextLine1,"MPU9150init fail"); break; case _ROLLTEST: svSoF.cShowValue(_ROLL); strcpy(cTextLine1," Confirm to end "); strcpy(cTextLine2,"Roll: "); if(svSoF.iGetRollPolarity()!= 0) strcat(cTextLine2,"+"); else strcat(cTextLine2,"-"); strcat(cTextLine2, svSoF.getValue()); strcat(cTextLine2,"\xDF"); vFillString2(); break; case _PITCHTEST: svSoF.cShowValue(_PITCH); strcpy(cTextLine1," Confirm to end "); strcpy(cTextLine2,"Pitch:"); if(svSoF.iGetPitchPolarity()!= 0) strcat(cTextLine2,"+"); else strcat(cTextLine2,"-"); strcat(cTextLine2, svSoF.getValue()); strcat(cTextLine2,"\xDF"); 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 }