Release 1.01

Dependents:   mbed_escm2000

Committer:
foxbrianr
Date:
Thu Sep 12 11:27:50 2019 +0000
Revision:
4:7226c43320b5
Parent:
3:8395f7ab6d3e
Child:
5:9f4d4f8ffc00
beta1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pyeh9 0:577f0ec71f4c 1 #include "mbed.h"
pyeh9 0:577f0ec71f4c 2 #include "Menu.h"
foxbrianr 4:7226c43320b5 3 #include "ESCMControlApp.h"
foxbrianr 4:7226c43320b5 4
foxbrianr 4:7226c43320b5 5 Menu* Menu::currentMenu = NULL;
foxbrianr 4:7226c43320b5 6
foxbrianr 4:7226c43320b5 7
foxbrianr 4:7226c43320b5 8 Menu * Menu::getCurrentMenu ()
foxbrianr 4:7226c43320b5 9 {
foxbrianr 4:7226c43320b5 10 return currentMenu;
foxbrianr 4:7226c43320b5 11 }
foxbrianr 4:7226c43320b5 12
foxbrianr 4:7226c43320b5 13 Menu * Menu::setCurrentMenu (Menu * value)
foxbrianr 4:7226c43320b5 14 {
foxbrianr 4:7226c43320b5 15
foxbrianr 4:7226c43320b5 16 printf("\n Goto Menu :%s ", value->getText() );
foxbrianr 4:7226c43320b5 17 currentMenu = value;
foxbrianr 4:7226c43320b5 18 currentMenu->init();
foxbrianr 4:7226c43320b5 19 return currentMenu;
foxbrianr 4:7226c43320b5 20 }
foxbrianr 4:7226c43320b5 21
pyeh9 0:577f0ec71f4c 22
foxbrianr 3:8395f7ab6d3e 23 Menu::Menu(char *id) : menuID(id), parent(NULL),update_needed(1)
foxbrianr 3:8395f7ab6d3e 24 {
foxbrianr 4:7226c43320b5 25 children.clear();
foxbrianr 4:7226c43320b5 26
foxbrianr 4:7226c43320b5 27 selectedMenu = 0; // default menu
foxbrianr 4:7226c43320b5 28 update_needed = 1;
foxbrianr 3:8395f7ab6d3e 29 }
foxbrianr 3:8395f7ab6d3e 30
foxbrianr 4:7226c43320b5 31 void Menu::add(Menu *submenu)
pyeh9 0:577f0ec71f4c 32 {
foxbrianr 4:7226c43320b5 33 submenu->parent = this;
foxbrianr 4:7226c43320b5 34 children.push_back(submenu);
pyeh9 0:577f0ec71f4c 35 }
pyeh9 0:577f0ec71f4c 36
foxbrianr 4:7226c43320b5 37
foxbrianr 4:7226c43320b5 38 void Menu::init()
pyeh9 0:577f0ec71f4c 39 {
foxbrianr 4:7226c43320b5 40 update_needed=1;
foxbrianr 4:7226c43320b5 41 }
foxbrianr 4:7226c43320b5 42
foxbrianr 4:7226c43320b5 43 void Menu::select(void)
foxbrianr 4:7226c43320b5 44 {
foxbrianr 4:7226c43320b5 45 Menu::setCurrentMenu ( children[selectedMenu]) ;
pyeh9 0:577f0ec71f4c 46 }
pyeh9 0:577f0ec71f4c 47
pyeh9 0:577f0ec71f4c 48
foxbrianr 4:7226c43320b5 49 void Menu::back()
foxbrianr 4:7226c43320b5 50 {
foxbrianr 4:7226c43320b5 51 if (parent != NULL )
foxbrianr 4:7226c43320b5 52 {
foxbrianr 4:7226c43320b5 53 Menu::setCurrentMenu (parent);
foxbrianr 4:7226c43320b5 54 }
foxbrianr 4:7226c43320b5 55 else
foxbrianr 4:7226c43320b5 56 {
foxbrianr 4:7226c43320b5 57 printf("ERROR: missing parent ");
foxbrianr 4:7226c43320b5 58 }
foxbrianr 4:7226c43320b5 59 }
foxbrianr 4:7226c43320b5 60 void Menu::DrawDisplay(LCD * lcd)
foxbrianr 3:8395f7ab6d3e 61 {
foxbrianr 4:7226c43320b5 62 this->lcd = lcd;
foxbrianr 4:7226c43320b5 63
foxbrianr 4:7226c43320b5 64 static unsigned long time_max = 0 ;
foxbrianr 4:7226c43320b5 65 unsigned long time_delta = 0;
foxbrianr 4:7226c43320b5 66 unsigned long time_ms1 = us_ticker_read() / 1000L;
foxbrianr 4:7226c43320b5 67
foxbrianr 4:7226c43320b5 68
foxbrianr 4:7226c43320b5 69 lock();
foxbrianr 4:7226c43320b5 70 display(lcd);
foxbrianr 4:7226c43320b5 71 unlock();
foxbrianr 4:7226c43320b5 72
foxbrianr 4:7226c43320b5 73 unsigned long time_ms2 = us_ticker_read() / 1000L;
foxbrianr 4:7226c43320b5 74
foxbrianr 4:7226c43320b5 75 time_delta = time_ms2-time_ms1;
foxbrianr 4:7226c43320b5 76 if (time_max < time_delta )
foxbrianr 4:7226c43320b5 77 {
foxbrianr 4:7226c43320b5 78 time_max = time_delta;
foxbrianr 4:7226c43320b5 79 printf("Tmax=%d\n\r", time_max);
foxbrianr 4:7226c43320b5 80 }
foxbrianr 4:7226c43320b5 81
foxbrianr 3:8395f7ab6d3e 82 }
foxbrianr 3:8395f7ab6d3e 83
foxbrianr 3:8395f7ab6d3e 84 void Menu::display(LCD * lcd)
foxbrianr 4:7226c43320b5 85 {
foxbrianr 4:7226c43320b5 86 static int top = 1;
foxbrianr 4:7226c43320b5 87 static int bottom = 3;
foxbrianr 4:7226c43320b5 88 static int size = children.size();
foxbrianr 4:7226c43320b5 89
foxbrianr 4:7226c43320b5 90 // paging
foxbrianr 4:7226c43320b5 91 if (selectedMenu < top )
foxbrianr 4:7226c43320b5 92 {
foxbrianr 4:7226c43320b5 93 top = selectedMenu ;
foxbrianr 4:7226c43320b5 94 bottom = selectedMenu + 2;
foxbrianr 4:7226c43320b5 95 update_needed=1;
foxbrianr 4:7226c43320b5 96 }
foxbrianr 4:7226c43320b5 97 else if (selectedMenu > bottom)
foxbrianr 4:7226c43320b5 98 {
foxbrianr 4:7226c43320b5 99 top = selectedMenu - 2;
foxbrianr 4:7226c43320b5 100 bottom = selectedMenu;
foxbrianr 4:7226c43320b5 101 update_needed=1;
foxbrianr 4:7226c43320b5 102 }
foxbrianr 4:7226c43320b5 103 else
foxbrianr 4:7226c43320b5 104 {
foxbrianr 4:7226c43320b5 105
foxbrianr 4:7226c43320b5 106 }
foxbrianr 4:7226c43320b5 107
foxbrianr 4:7226c43320b5 108 if (update_needed) {
foxbrianr 4:7226c43320b5 109
foxbrianr 4:7226c43320b5 110 lcd->cls();
foxbrianr 4:7226c43320b5 111 lcd->locate(0,0);
foxbrianr 4:7226c43320b5 112 #if 1
foxbrianr 4:7226c43320b5 113 lcd->printf("ESCM Controller");
foxbrianr 4:7226c43320b5 114 #else
foxbrianr 4:7226c43320b5 115
foxbrianr 4:7226c43320b5 116 lcd->printf("(%d,%d,%d)", top,selectedMenu,size);
foxbrianr 4:7226c43320b5 117 #endif
foxbrianr 4:7226c43320b5 118 displayVersion(lcd);
foxbrianr 4:7226c43320b5 119
foxbrianr 4:7226c43320b5 120 for ( int i=0; i< 3;i++)
foxbrianr 4:7226c43320b5 121 {
foxbrianr 4:7226c43320b5 122 int index = top + i;
foxbrianr 4:7226c43320b5 123 int line = (1+i);
foxbrianr 4:7226c43320b5 124 int selected = (selectedMenu == index);
foxbrianr 4:7226c43320b5 125
foxbrianr 4:7226c43320b5 126 lcd->locate(line,0);
foxbrianr 4:7226c43320b5 127
foxbrianr 4:7226c43320b5 128 if (selected)
foxbrianr 4:7226c43320b5 129 lcd->printf(">%s",children[index]->getText());
foxbrianr 4:7226c43320b5 130 else
foxbrianr 4:7226c43320b5 131 lcd->printf(" %s",children[index]->getText());
foxbrianr 4:7226c43320b5 132
foxbrianr 3:8395f7ab6d3e 133 }
foxbrianr 4:7226c43320b5 134
foxbrianr 4:7226c43320b5 135 update_needed = 0;
foxbrianr 3:8395f7ab6d3e 136 }
foxbrianr 4:7226c43320b5 137
foxbrianr 4:7226c43320b5 138 displayCurrentTime(lcd);
foxbrianr 4:7226c43320b5 139
foxbrianr 3:8395f7ab6d3e 140 }
foxbrianr 3:8395f7ab6d3e 141
foxbrianr 3:8395f7ab6d3e 142
foxbrianr 3:8395f7ab6d3e 143 void Menu::moveUp()
foxbrianr 3:8395f7ab6d3e 144 {
foxbrianr 4:7226c43320b5 145
foxbrianr 3:8395f7ab6d3e 146 cursorLine--;
foxbrianr 4:7226c43320b5 147 selectedMenu--;
foxbrianr 4:7226c43320b5 148
foxbrianr 4:7226c43320b5 149 if(selectedMenu < 0)
foxbrianr 3:8395f7ab6d3e 150 {
foxbrianr 4:7226c43320b5 151 selectedMenu = children.size()-1;
foxbrianr 4:7226c43320b5 152 }
foxbrianr 3:8395f7ab6d3e 153
foxbrianr 4:7226c43320b5 154 if (cursorLine < 1 )
foxbrianr 4:7226c43320b5 155 cursorLine = 1;
foxbrianr 4:7226c43320b5 156
foxbrianr 4:7226c43320b5 157
foxbrianr 4:7226c43320b5 158 update_needed = 1;
foxbrianr 3:8395f7ab6d3e 159 }
foxbrianr 3:8395f7ab6d3e 160
foxbrianr 3:8395f7ab6d3e 161 void Menu::moveDown()
foxbrianr 3:8395f7ab6d3e 162 {
foxbrianr 4:7226c43320b5 163 cursorLine++;
foxbrianr 4:7226c43320b5 164 selectedMenu++;
foxbrianr 3:8395f7ab6d3e 165
foxbrianr 4:7226c43320b5 166 if(selectedMenu >= children.size())
foxbrianr 4:7226c43320b5 167 {
foxbrianr 4:7226c43320b5 168 selectedMenu=0;
foxbrianr 3:8395f7ab6d3e 169 }
foxbrianr 3:8395f7ab6d3e 170
foxbrianr 4:7226c43320b5 171 if (cursorLine > 3 )
foxbrianr 4:7226c43320b5 172 cursorLine = 3;
foxbrianr 4:7226c43320b5 173
foxbrianr 4:7226c43320b5 174 update_needed = 1;
foxbrianr 3:8395f7ab6d3e 175
foxbrianr 3:8395f7ab6d3e 176 }
foxbrianr 3:8395f7ab6d3e 177
foxbrianr 3:8395f7ab6d3e 178 void Menu::pressMode()
foxbrianr 3:8395f7ab6d3e 179 {
foxbrianr 4:7226c43320b5 180 select();
foxbrianr 3:8395f7ab6d3e 181 }
foxbrianr 3:8395f7ab6d3e 182
foxbrianr 3:8395f7ab6d3e 183 void Menu::pressSet()
foxbrianr 3:8395f7ab6d3e 184 {
foxbrianr 4:7226c43320b5 185 select();
foxbrianr 3:8395f7ab6d3e 186 }
foxbrianr 3:8395f7ab6d3e 187
foxbrianr 3:8395f7ab6d3e 188 void Menu::pressUp()
foxbrianr 3:8395f7ab6d3e 189 {
foxbrianr 4:7226c43320b5 190 moveUp();
foxbrianr 3:8395f7ab6d3e 191 }
foxbrianr 3:8395f7ab6d3e 192
foxbrianr 3:8395f7ab6d3e 193 void Menu::pressDown()
foxbrianr 3:8395f7ab6d3e 194 {
foxbrianr 4:7226c43320b5 195 moveDown();
foxbrianr 3:8395f7ab6d3e 196 }
foxbrianr 3:8395f7ab6d3e 197
foxbrianr 3:8395f7ab6d3e 198 void Menu::pressClear()
foxbrianr 3:8395f7ab6d3e 199 {
foxbrianr 4:7226c43320b5 200 back();
foxbrianr 3:8395f7ab6d3e 201 }
foxbrianr 3:8395f7ab6d3e 202
foxbrianr 4:7226c43320b5 203 void Menu::displayVersion (LCD * lcd)
foxbrianr 4:7226c43320b5 204 {
foxbrianr 3:8395f7ab6d3e 205
foxbrianr 4:7226c43320b5 206
foxbrianr 4:7226c43320b5 207 lcd->locate(3,35);
foxbrianr 4:7226c43320b5 208 lcd->printf("v0.01");
foxbrianr 3:8395f7ab6d3e 209 }
foxbrianr 4:7226c43320b5 210 void Menu::displayCurrentTime (LCD * lcd)
foxbrianr 4:7226c43320b5 211 {
foxbrianr 4:7226c43320b5 212
foxbrianr 4:7226c43320b5 213 time_t rawtime;
foxbrianr 4:7226c43320b5 214 struct tm * timeinfo;
foxbrianr 4:7226c43320b5 215
foxbrianr 4:7226c43320b5 216 int cur_hours,cur_mins,cur_secs,cur_year,cur_month,cur_day;
foxbrianr 4:7226c43320b5 217
foxbrianr 4:7226c43320b5 218 time ( &rawtime );
foxbrianr 4:7226c43320b5 219 timeinfo = localtime ( &rawtime ); timeinfo = localtime (&rawtime);
foxbrianr 3:8395f7ab6d3e 220
foxbrianr 4:7226c43320b5 221 cur_hours = timeinfo->tm_hour;
foxbrianr 4:7226c43320b5 222 cur_mins = timeinfo->tm_min;
foxbrianr 4:7226c43320b5 223 cur_secs = timeinfo->tm_sec;
foxbrianr 4:7226c43320b5 224 cur_year = timeinfo->tm_year+1900;
foxbrianr 4:7226c43320b5 225 cur_month = timeinfo->tm_mon + 1;
foxbrianr 4:7226c43320b5 226 cur_day = timeinfo->tm_mday;
foxbrianr 4:7226c43320b5 227
foxbrianr 4:7226c43320b5 228 lcd->locate(0,20);
foxbrianr 4:7226c43320b5 229 lcd->printf(" %02d:%02d:%02d %02d/%02d/%04d", cur_hours, cur_mins, cur_secs, cur_month, cur_day, cur_year);
foxbrianr 4:7226c43320b5 230
foxbrianr 4:7226c43320b5 231 lcd->locate(1,33);
foxbrianr 4:7226c43320b5 232 lcd->printf("Addr=%02d",escmController.cur_address);
foxbrianr 3:8395f7ab6d3e 233
foxbrianr 3:8395f7ab6d3e 234 }