This is the firmware for the LaOS - Laser Open Source project. You can use it to drive a laser cutter. For hardware and more information, look at our wiki: http://wiki.laoslaser.org

Dependencies:   EthernetNetIf mbed

Committer:
fablabtruck
Date:
Fri Jun 08 09:26:40 2012 +0000
Revision:
0:3852426a5068
svn revision 379

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fablabtruck 0:3852426a5068 1 /*
fablabtruck 0:3852426a5068 2 * LaosMenu.cpp
fablabtruck 0:3852426a5068 3 * Menu structure and user interface. Uses LaosDisplay
fablabtruck 0:3852426a5068 4 *
fablabtruck 0:3852426a5068 5 * Copyright (c) 2011 Peter Brier & Jaap Vermaas
fablabtruck 0:3852426a5068 6 *
fablabtruck 0:3852426a5068 7 * This file is part of the LaOS project (see: http://wiki.laoslaser.org/)
fablabtruck 0:3852426a5068 8 *
fablabtruck 0:3852426a5068 9 * LaOS is free software: you can redistribute it and/or modify
fablabtruck 0:3852426a5068 10 * it under the terms of the GNU General Public License as published by
fablabtruck 0:3852426a5068 11 * the Free Software Foundation, either version 3 of the License, or
fablabtruck 0:3852426a5068 12 * (at your option) any later version.
fablabtruck 0:3852426a5068 13 *
fablabtruck 0:3852426a5068 14 * LaOS is distributed in the hope that it will be useful,
fablabtruck 0:3852426a5068 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fablabtruck 0:3852426a5068 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fablabtruck 0:3852426a5068 17 * GNU General Public License for more details.
fablabtruck 0:3852426a5068 18 *
fablabtruck 0:3852426a5068 19 * You should have received a copy of the GNU General Public License
fablabtruck 0:3852426a5068 20 * along with LaOS. If not, see <http://www.gnu.org/licenses/>.
fablabtruck 0:3852426a5068 21 *
fablabtruck 0:3852426a5068 22 */
fablabtruck 0:3852426a5068 23 #include "LaosMenu.h"
fablabtruck 0:3852426a5068 24
fablabtruck 0:3852426a5068 25 static const char *menus[] = {
fablabtruck 0:3852426a5068 26 "STARTUP", //0
fablabtruck 0:3852426a5068 27 "MAIN", //1
fablabtruck 0:3852426a5068 28 "START JOB", //2
fablabtruck 0:3852426a5068 29 "DELETE JOB", //3
fablabtruck 0:3852426a5068 30 "HOME", //4
fablabtruck 0:3852426a5068 31 "MOVE", //5
fablabtruck 0:3852426a5068 32 "FOCUS", //6
fablabtruck 0:3852426a5068 33 "ORIGIN", //7
fablabtruck 0:3852426a5068 34 "REMOVE ALL JOBS", //8
fablabtruck 0:3852426a5068 35 "IP", //9
fablabtruck 0:3852426a5068 36 "REBOOT", //10
fablabtruck 0:3852426a5068 37 // "POWER / SPEED",//11
fablabtruck 0:3852426a5068 38 // "IO", //12
fablabtruck 0:3852426a5068 39 };
fablabtruck 0:3852426a5068 40
fablabtruck 0:3852426a5068 41 static const char *screens[] = {
fablabtruck 0:3852426a5068 42 //0: main, navigate to MOVE, FOCUS, HOME, ORIGIN, START JOB, IP,
fablabtruck 0:3852426a5068 43 // DELETE JOB, POWER
fablabtruck 0:3852426a5068 44 #define STARTUP (0)
fablabtruck 0:3852426a5068 45 "$$$$$$$$$$$$$$$$"
fablabtruck 0:3852426a5068 46 "$$$$$$$$$$$$$$$$",
fablabtruck 0:3852426a5068 47
fablabtruck 0:3852426a5068 48 #define MAIN (STARTUP+1)
fablabtruck 0:3852426a5068 49 "$$$$$$$$$$$$$$$$"
fablabtruck 0:3852426a5068 50 "<----- 10 ----->",
fablabtruck 0:3852426a5068 51
fablabtruck 0:3852426a5068 52 #define RUN (MAIN+1)
fablabtruck 0:3852426a5068 53 "RUN: "
fablabtruck 0:3852426a5068 54 "$$$$$$$$$$$$$$$$",
fablabtruck 0:3852426a5068 55
fablabtruck 0:3852426a5068 56 #define DELETE (RUN+1)
fablabtruck 0:3852426a5068 57 "DELETE: "
fablabtruck 0:3852426a5068 58 "$$$$$$$$$$$$$$$$",
fablabtruck 0:3852426a5068 59
fablabtruck 0:3852426a5068 60 #define HOME (DELETE+1)
fablabtruck 0:3852426a5068 61 "HOME? "
fablabtruck 0:3852426a5068 62 " [ok] ",
fablabtruck 0:3852426a5068 63
fablabtruck 0:3852426a5068 64 #define MOVE (HOME+1)
fablabtruck 0:3852426a5068 65 "X: +6543210 MOVE"
fablabtruck 0:3852426a5068 66 "Y: +6543210 ",
fablabtruck 0:3852426a5068 67
fablabtruck 0:3852426a5068 68 #define FOCUS (MOVE+1)
fablabtruck 0:3852426a5068 69 "Z: +543210 FOCUS"
fablabtruck 0:3852426a5068 70 " ",
fablabtruck 0:3852426a5068 71
fablabtruck 0:3852426a5068 72 #define ORIGIN (FOCUS+1)
fablabtruck 0:3852426a5068 73 " SET ORIGIN? "
fablabtruck 0:3852426a5068 74 " [ok] ",
fablabtruck 0:3852426a5068 75
fablabtruck 0:3852426a5068 76 #define DELETE_ALL (ORIGIN+1)
fablabtruck 0:3852426a5068 77 "DELETE ALL FILES"
fablabtruck 0:3852426a5068 78 " [ok] ",
fablabtruck 0:3852426a5068 79
fablabtruck 0:3852426a5068 80 #define IP (DELETE_ALL+1)
fablabtruck 0:3852426a5068 81 "210.210.210.210 "
fablabtruck 0:3852426a5068 82 "$$$$$$$$[ok] ",
fablabtruck 0:3852426a5068 83
fablabtruck 0:3852426a5068 84 #define REBOOT (IP+1)
fablabtruck 0:3852426a5068 85 "REBOOTING... "
fablabtruck 0:3852426a5068 86 "Please wait... ",
fablabtruck 0:3852426a5068 87
fablabtruck 0:3852426a5068 88 #define POWER (REBOOT+1)
fablabtruck 0:3852426a5068 89 "$$$$$$$: 6543210"
fablabtruck 0:3852426a5068 90 " [ok] ",
fablabtruck 0:3852426a5068 91
fablabtruck 0:3852426a5068 92 #define IO (POWER+1)
fablabtruck 0:3852426a5068 93 "$$$$$$$$$$$=0 IO"
fablabtruck 0:3852426a5068 94 " [ok] ",
fablabtruck 0:3852426a5068 95
fablabtruck 0:3852426a5068 96 // Intermediate screens
fablabtruck 0:3852426a5068 97 #define DELETE_OK (IO+1)
fablabtruck 0:3852426a5068 98 "DELETE 10? "
fablabtruck 0:3852426a5068 99 " [ok] ",
fablabtruck 0:3852426a5068 100
fablabtruck 0:3852426a5068 101 #define HOMING (DELETE_OK+1)
fablabtruck 0:3852426a5068 102 "HOMING... "
fablabtruck 0:3852426a5068 103 " ",
fablabtruck 0:3852426a5068 104
fablabtruck 0:3852426a5068 105 #define RUNNING (HOMING+1)
fablabtruck 0:3852426a5068 106 "RUNNING... 10%"
fablabtruck 0:3852426a5068 107 "[cancel] ",
fablabtruck 0:3852426a5068 108
fablabtruck 0:3852426a5068 109 #define BUSY (RUNNING+1)
fablabtruck 0:3852426a5068 110 "BUSY: $$$$$$$$$$"
fablabtruck 0:3852426a5068 111 "[cancel][ok] ",
fablabtruck 0:3852426a5068 112
fablabtruck 0:3852426a5068 113 #define PAUSE (BUSY+1)
fablabtruck 0:3852426a5068 114 "PAUSE: $$$$$$$$$"
fablabtruck 0:3852426a5068 115 "[cancel][ok] ",
fablabtruck 0:3852426a5068 116
fablabtruck 0:3852426a5068 117 };
fablabtruck 0:3852426a5068 118
fablabtruck 0:3852426a5068 119 static const char *ipfields[] = { "IP", "NETMASK", "GATEWAY", "DNS" };
fablabtruck 0:3852426a5068 120 //static const char *powerfields[] = { "Pmin %", "Pmax %", "Voff", "Von" };
fablabtruck 0:3852426a5068 121 //static const char *iofields[] = { "o1:PURGE", "o2:EXHAUST", "o3:PUMP", "i1:COVER", "i2:PUMPOK", "i3:LASEROK", "i4:PURGEOK" };
fablabtruck 0:3852426a5068 122
fablabtruck 0:3852426a5068 123
fablabtruck 0:3852426a5068 124 /**
fablabtruck 0:3852426a5068 125 *** Make new menu object
fablabtruck 0:3852426a5068 126 **/
fablabtruck 0:3852426a5068 127 LaosMenu::LaosMenu(LaosDisplay *display) {
fablabtruck 0:3852426a5068 128 waitup=timeout=iofield=ipfield=0;
fablabtruck 0:3852426a5068 129 sarg = NULL;
fablabtruck 0:3852426a5068 130 x=y=z=0;
fablabtruck 0:3852426a5068 131 xoff=yoff=zoff=0;
fablabtruck 0:3852426a5068 132 screen=prevscreen=lastscreen=speed=0;
fablabtruck 0:3852426a5068 133 menu=1;
fablabtruck 0:3852426a5068 134 strcpy(jobname, "");
fablabtruck 0:3852426a5068 135 dsp = display;
fablabtruck 0:3852426a5068 136 if ( dsp == NULL ) dsp = new LaosDisplay();
fablabtruck 0:3852426a5068 137 dsp->cls();
fablabtruck 0:3852426a5068 138 SetScreen(NULL);
fablabtruck 0:3852426a5068 139 runfile = NULL;
fablabtruck 0:3852426a5068 140 }
fablabtruck 0:3852426a5068 141
fablabtruck 0:3852426a5068 142 /**
fablabtruck 0:3852426a5068 143 *** Destroy menu object
fablabtruck 0:3852426a5068 144 **/
fablabtruck 0:3852426a5068 145 LaosMenu::~LaosMenu() {
fablabtruck 0:3852426a5068 146 }
fablabtruck 0:3852426a5068 147
fablabtruck 0:3852426a5068 148 /**
fablabtruck 0:3852426a5068 149 *** Goto specific screen
fablabtruck 0:3852426a5068 150 **/
fablabtruck 0:3852426a5068 151 void LaosMenu::SetScreen(int screen) {
fablabtruck 0:3852426a5068 152 sarg = NULL;
fablabtruck 0:3852426a5068 153 this->screen = screen;
fablabtruck 0:3852426a5068 154 Handle();
fablabtruck 0:3852426a5068 155 Handle();
fablabtruck 0:3852426a5068 156 Handle();
fablabtruck 0:3852426a5068 157 }
fablabtruck 0:3852426a5068 158
fablabtruck 0:3852426a5068 159 /**
fablabtruck 0:3852426a5068 160 *** Goto specific screen
fablabtruck 0:3852426a5068 161 **/
fablabtruck 0:3852426a5068 162 void LaosMenu::SetScreen(char *msg) {
fablabtruck 0:3852426a5068 163 if ( msg == NULL ) {
fablabtruck 0:3852426a5068 164 sarg = NULL;
fablabtruck 0:3852426a5068 165 screen = MAIN;
fablabtruck 0:3852426a5068 166 } else if ( msg[0] == 0 ) {
fablabtruck 0:3852426a5068 167 screen = MAIN;
fablabtruck 0:3852426a5068 168 } else {
fablabtruck 0:3852426a5068 169 sarg = msg;
fablabtruck 0:3852426a5068 170 screen = STARTUP;
fablabtruck 0:3852426a5068 171 }
fablabtruck 0:3852426a5068 172 prevscreen = -1; // force update
fablabtruck 0:3852426a5068 173 Handle();
fablabtruck 0:3852426a5068 174 Handle();
fablabtruck 0:3852426a5068 175 Handle();
fablabtruck 0:3852426a5068 176 }
fablabtruck 0:3852426a5068 177
fablabtruck 0:3852426a5068 178 /**
fablabtruck 0:3852426a5068 179 *** Handle menu system
fablabtruck 0:3852426a5068 180 *** Read keys, and plan next action on the screen, output screen if
fablabtruck 0:3852426a5068 181 *** something changed
fablabtruck 0:3852426a5068 182 **/
fablabtruck 0:3852426a5068 183 void LaosMenu::Handle() {
fablabtruck 0:3852426a5068 184 int xt, yt, zt, cnt=0, nodisplay = 0;
fablabtruck 0:3852426a5068 185 extern LaosFileSystem sd;
fablabtruck 0:3852426a5068 186 extern LaosMotion *mot;
fablabtruck 0:3852426a5068 187 static int count=0;
fablabtruck 0:3852426a5068 188
fablabtruck 0:3852426a5068 189 int c = dsp->read();
fablabtruck 0:3852426a5068 190 if ( count++ > 10) count = 0; // screen refresh counter (refresh once every 10 cycles(
fablabtruck 0:3852426a5068 191
fablabtruck 0:3852426a5068 192 if ( c ) timeout = 10; // keypress timeout counter
fablabtruck 0:3852426a5068 193 else if ( timeout ) timeout--;
fablabtruck 0:3852426a5068 194
fablabtruck 0:3852426a5068 195 if ( screen != prevscreen ) waitup = 1; // after a screen change: wait for a key release, mask current keypress
fablabtruck 0:3852426a5068 196 if ( waitup && timeout) // if we have to wait for key-up,
fablabtruck 0:3852426a5068 197 c = 0; // cancel the keypress
fablabtruck 0:3852426a5068 198 if ( waitup && !timeout ) waitup=0;
fablabtruck 0:3852426a5068 199
fablabtruck 0:3852426a5068 200 if ( !timeout ) // increase speed if we keep button pressed longer
fablabtruck 0:3852426a5068 201 speed = 5;
fablabtruck 0:3852426a5068 202 else {
fablabtruck 0:3852426a5068 203 speed *= 1.5;
fablabtruck 0:3852426a5068 204 if ( speed >= 100 ) speed = 100;
fablabtruck 0:3852426a5068 205 }
fablabtruck 0:3852426a5068 206
fablabtruck 0:3852426a5068 207 if ( c || screen != prevscreen || count >9 ) {
fablabtruck 0:3852426a5068 208
fablabtruck 0:3852426a5068 209 switch ( screen ) {
fablabtruck 0:3852426a5068 210 case STARTUP:
fablabtruck 0:3852426a5068 211 if ( sarg == NULL ) sarg = (char*) VERSION_STRING;
fablabtruck 0:3852426a5068 212 break;
fablabtruck 0:3852426a5068 213 case MAIN:
fablabtruck 0:3852426a5068 214 switch ( c ) {
fablabtruck 0:3852426a5068 215 case K_RIGHT: menu+=1; waitup=1; break;
fablabtruck 0:3852426a5068 216 case K_LEFT: menu-=1; waitup=1; break;
fablabtruck 0:3852426a5068 217 case K_UP: lastscreen=MAIN; screen=MOVE; menu=MAIN; break;
fablabtruck 0:3852426a5068 218 case K_DOWN: lastscreen=MAIN; screen=MOVE; menu=MAIN; break;
fablabtruck 0:3852426a5068 219 case K_OK: screen=menu; waitup=1; lastscreen=MAIN; break;
fablabtruck 0:3852426a5068 220 case K_CANCEL: menu=MAIN; break;
fablabtruck 0:3852426a5068 221 case K_FUP: lastscreen=MAIN; screen=FOCUS; menu=MAIN; break;
fablabtruck 0:3852426a5068 222 case K_FDOWN: lastscreen=MAIN; screen=FOCUS; menu=MAIN; break;
fablabtruck 0:3852426a5068 223 case K_ORIGIN: lastscreen=MAIN; screen=ORIGIN; waitup=1; break;
fablabtruck 0:3852426a5068 224 }
fablabtruck 0:3852426a5068 225 if (menu==0) menu = (sizeof(menus) / sizeof(menus[0])) -1;
fablabtruck 0:3852426a5068 226 if (menu==(sizeof(menus) / sizeof(menus[0]))) menu = 1;
fablabtruck 0:3852426a5068 227 sarg = (char*)menus[menu];
fablabtruck 0:3852426a5068 228 args[0] = menu;
fablabtruck 0:3852426a5068 229 break;
fablabtruck 0:3852426a5068 230
fablabtruck 0:3852426a5068 231 case RUN: // START JOB select job to run
fablabtruck 0:3852426a5068 232 if (strlen(jobname) == 0) getprevjob(jobname);
fablabtruck 0:3852426a5068 233 switch ( c ) {
fablabtruck 0:3852426a5068 234 case K_OK: screen=RUNNING; break;
fablabtruck 0:3852426a5068 235 case K_UP: case K_FUP: getprevjob(jobname); waitup = 1; break; // next job
fablabtruck 0:3852426a5068 236 case K_RIGHT: screen=DELETE; waitup=1; break;
fablabtruck 0:3852426a5068 237 case K_DOWN: case K_FDOWN: getnextjob(jobname); waitup = 1; break;// prev job
fablabtruck 0:3852426a5068 238 case K_CANCEL: screen=1; waitup = 1; break;
fablabtruck 0:3852426a5068 239 }
fablabtruck 0:3852426a5068 240 sarg = (char *)&jobname;
fablabtruck 0:3852426a5068 241 break;
fablabtruck 0:3852426a5068 242
fablabtruck 0:3852426a5068 243 case DELETE: // DELETE JOB select job to run
fablabtruck 0:3852426a5068 244 switch ( c ) {
fablabtruck 0:3852426a5068 245 case K_OK: removefile(jobname); screen=lastscreen; waitup = 1;
fablabtruck 0:3852426a5068 246 break; // INSERT: delete current job
fablabtruck 0:3852426a5068 247 case K_UP: case K_FUP: getprevjob(jobname); waitup = 1; break; // next job
fablabtruck 0:3852426a5068 248 case K_DOWN: case K_FDOWN: getnextjob(jobname); waitup = 1; break;// prev job
fablabtruck 0:3852426a5068 249 case K_LEFT: screen=RUN; waitup=1; break;
fablabtruck 0:3852426a5068 250 case K_CANCEL: screen=lastscreen; waitup = 1; break;
fablabtruck 0:3852426a5068 251 }
fablabtruck 0:3852426a5068 252 sarg = (char *)&jobname;
fablabtruck 0:3852426a5068 253 break;
fablabtruck 0:3852426a5068 254
fablabtruck 0:3852426a5068 255 case MOVE: // pos xy
fablabtruck 0:3852426a5068 256 mot->getPosition(&x, &y, &z);
fablabtruck 0:3852426a5068 257 xt = x; yt= y;
fablabtruck 0:3852426a5068 258 switch ( c ) {
fablabtruck 0:3852426a5068 259 case K_DOWN: y+=1000*speed; break;
fablabtruck 0:3852426a5068 260 case K_UP: y-=1000*speed; break;
fablabtruck 0:3852426a5068 261 case K_LEFT: x-=1000*speed; break;
fablabtruck 0:3852426a5068 262 case K_RIGHT: x+=1000*speed; break;
fablabtruck 0:3852426a5068 263 case K_OK: case K_CANCEL: screen=MAIN; waitup=1; break;
fablabtruck 0:3852426a5068 264 case K_FUP: screen=FOCUS; break;
fablabtruck 0:3852426a5068 265 case K_FDOWN: screen=FOCUS; break;
fablabtruck 0:3852426a5068 266 case K_ORIGIN: screen=ORIGIN; break;
fablabtruck 0:3852426a5068 267 }
fablabtruck 0:3852426a5068 268 if ((mot->ready()) && ( (x!=xt) || (y != yt) )) {
fablabtruck 0:3852426a5068 269 mot->moveTo(x, y, z, speed);
fablabtruck 0:3852426a5068 270 } else {
fablabtruck 0:3852426a5068 271 // if (! mot->ready())
fablabtruck 0:3852426a5068 272 // printf("Buffer vol\n");
fablabtruck 0:3852426a5068 273 }
fablabtruck 0:3852426a5068 274 args[0]=x-xoff;
fablabtruck 0:3852426a5068 275 args[1]=y-yoff;
fablabtruck 0:3852426a5068 276 break;
fablabtruck 0:3852426a5068 277
fablabtruck 0:3852426a5068 278 case FOCUS: // focus
fablabtruck 0:3852426a5068 279 mot->getPosition(&x, &y, &z);
fablabtruck 0:3852426a5068 280 switch ( c ) {
fablabtruck 0:3852426a5068 281 case K_FUP: z+=speed; if (z>cfg->zmax) z=cfg->zmax; break;
fablabtruck 0:3852426a5068 282 case K_FDOWN: z-=speed; if (z<0) z=0; break;
fablabtruck 0:3852426a5068 283 case K_LEFT: screen=MOVE; break;
fablabtruck 0:3852426a5068 284 case K_RIGHT: screen=MOVE; break;
fablabtruck 0:3852426a5068 285 case K_UP: screen=MOVE; break;
fablabtruck 0:3852426a5068 286 case K_DOWN: screen=MOVE; break;
fablabtruck 0:3852426a5068 287 case K_ORIGIN: screen=ORIGIN; break;
fablabtruck 0:3852426a5068 288 case K_OK: case K_CANCEL: screen=MAIN; waitup=1; break;
fablabtruck 0:3852426a5068 289 case 0: break;
fablabtruck 0:3852426a5068 290 default: screen=MAIN; waitup=1; break;
fablabtruck 0:3852426a5068 291 }
fablabtruck 0:3852426a5068 292 if ( mot->ready() && (z!=zt) )
fablabtruck 0:3852426a5068 293 mot->moveTo(x, y, z, speed);
fablabtruck 0:3852426a5068 294
fablabtruck 0:3852426a5068 295 args[0]=z-zoff;
fablabtruck 0:3852426a5068 296 break;
fablabtruck 0:3852426a5068 297
fablabtruck 0:3852426a5068 298 case HOME:// home
fablabtruck 0:3852426a5068 299 switch ( c ) {
fablabtruck 0:3852426a5068 300 case K_OK: screen=HOMING; break;
fablabtruck 0:3852426a5068 301 case K_CANCEL: screen=MAIN; menu=MAIN; waitup=1; break;
fablabtruck 0:3852426a5068 302 }
fablabtruck 0:3852426a5068 303 break;
fablabtruck 0:3852426a5068 304
fablabtruck 0:3852426a5068 305 case ORIGIN: // origin
fablabtruck 0:3852426a5068 306 switch ( c ) {
fablabtruck 0:3852426a5068 307 case K_CANCEL: screen=MAIN; menu=MAIN; waitup=1; break;
fablabtruck 0:3852426a5068 308 case K_OK:
fablabtruck 0:3852426a5068 309 case K_ORIGIN:
fablabtruck 0:3852426a5068 310 xoff = x;
fablabtruck 0:3852426a5068 311 yoff = y;
fablabtruck 0:3852426a5068 312 zoff = z;
fablabtruck 0:3852426a5068 313 mot->setOrigin(x,y,z);
fablabtruck 0:3852426a5068 314 screen = lastscreen;
fablabtruck 0:3852426a5068 315 waitup = 1;
fablabtruck 0:3852426a5068 316 break;
fablabtruck 0:3852426a5068 317 }
fablabtruck 0:3852426a5068 318 break;
fablabtruck 0:3852426a5068 319
fablabtruck 0:3852426a5068 320 case DELETE_ALL: // Delete all files
fablabtruck 0:3852426a5068 321 switch ( c ) {
fablabtruck 0:3852426a5068 322 case K_OK: // delete current job
fablabtruck 0:3852426a5068 323 cleandir();
fablabtruck 0:3852426a5068 324 screen=MAIN;
fablabtruck 0:3852426a5068 325 waitup = 1;
fablabtruck 0:3852426a5068 326 strcpy(jobname, "");
fablabtruck 0:3852426a5068 327 break;
fablabtruck 0:3852426a5068 328 case K_CANCEL: screen=MAIN; waitup = 1; break;
fablabtruck 0:3852426a5068 329 }
fablabtruck 0:3852426a5068 330 break;
fablabtruck 0:3852426a5068 331
fablabtruck 0:3852426a5068 332 case IP: // IP
fablabtruck 0:3852426a5068 333 switch ( c ) {
fablabtruck 0:3852426a5068 334 case K_RIGHT: ipfield++; waitup=1; break;
fablabtruck 0:3852426a5068 335 case K_LEFT: ipfield--; waitup=1; break;
fablabtruck 0:3852426a5068 336 case K_OK: screen=MAIN; menu=MAIN; break;
fablabtruck 0:3852426a5068 337 case K_CANCEL: screen=MAIN; menu=MAIN; break;
fablabtruck 0:3852426a5068 338 }
fablabtruck 0:3852426a5068 339 ipfield %= 4;
fablabtruck 0:3852426a5068 340 sarg = (char*)ipfields[ipfield];
fablabtruck 0:3852426a5068 341 switch (ipfield) {
fablabtruck 0:3852426a5068 342 case 0: memcpy(args, cfg->ip, 4*sizeof(int) ); break;
fablabtruck 0:3852426a5068 343 case 1: memcpy(args, cfg->nm, 4*sizeof(int) ); break;
fablabtruck 0:3852426a5068 344 case 2: memcpy(args, cfg->gw, 4*sizeof(int) ); break;
fablabtruck 0:3852426a5068 345 case 3: memcpy(args, cfg->dns, 4*sizeof(int) ); break;
fablabtruck 0:3852426a5068 346 default: memset(args,0,4*sizeof(int)); break;
fablabtruck 0:3852426a5068 347 }
fablabtruck 0:3852426a5068 348 break;
fablabtruck 0:3852426a5068 349
fablabtruck 0:3852426a5068 350 case REBOOT: // RESET MACHINE
fablabtruck 0:3852426a5068 351 mbed_reset();
fablabtruck 0:3852426a5068 352 break;
fablabtruck 0:3852426a5068 353
fablabtruck 0:3852426a5068 354 /*
fablabtruck 0:3852426a5068 355 case IO: // IO
fablabtruck 0:3852426a5068 356 switch ( c ) {
fablabtruck 0:3852426a5068 357 case K_RIGHT: iofield++; waitup=1; break;
fablabtruck 0:3852426a5068 358 case K_LEFT: iofield--; waitup=1; break;
fablabtruck 0:3852426a5068 359 case K_OK: screen=lastscreen; break;
fablabtruck 0:3852426a5068 360 case K_CANCEL: screen=lastscreen; break;
fablabtruck 0:3852426a5068 361 }
fablabtruck 0:3852426a5068 362 iofield %= sizeof(iofields)/sizeof(char*);
fablabtruck 0:3852426a5068 363 sarg = (char*)iofields[iofield];
fablabtruck 0:3852426a5068 364 args[0] = ipfield;
fablabtruck 0:3852426a5068 365 args[1] = ipfield;
fablabtruck 0:3852426a5068 366 break;
fablabtruck 0:3852426a5068 367
fablabtruck 0:3852426a5068 368 case POWER: // POWER
fablabtruck 0:3852426a5068 369 switch ( c ) {
fablabtruck 0:3852426a5068 370 case K_RIGHT: powerfield++; waitup=1; break;
fablabtruck 0:3852426a5068 371 case K_LEFT: powerfield--; waitup=1; break;
fablabtruck 0:3852426a5068 372 case K_UP: power[powerfield % 4] += speed; break;
fablabtruck 0:3852426a5068 373 case K_DOWN: power[powerfield % 4] -= speed; break;
fablabtruck 0:3852426a5068 374 case K_OK: screen=lastscreen; break;
fablabtruck 0:3852426a5068 375 case K_CANCEL: screen=lastscreen; break;
fablabtruck 0:3852426a5068 376 }
fablabtruck 0:3852426a5068 377 powerfield %= 4;
fablabtruck 0:3852426a5068 378 args[1] = powerfield;
fablabtruck 0:3852426a5068 379 sarg = (char*)powerfields[powerfield];
fablabtruck 0:3852426a5068 380 args[0] = power[powerfield];
fablabtruck 0:3852426a5068 381 break;
fablabtruck 0:3852426a5068 382 */
fablabtruck 0:3852426a5068 383 case HOMING: // Homing screen
fablabtruck 0:3852426a5068 384 x = cfg->xhome;
fablabtruck 0:3852426a5068 385 y = cfg->yhome;
fablabtruck 0:3852426a5068 386 while ( !mot->isStart() );
fablabtruck 0:3852426a5068 387 mot->home(cfg->xhome,cfg->yhome,cfg->zhome);
fablabtruck 0:3852426a5068 388 screen=lastscreen;
fablabtruck 0:3852426a5068 389 break;
fablabtruck 0:3852426a5068 390
fablabtruck 0:3852426a5068 391 case RUNNING: // Screen while running
fablabtruck 0:3852426a5068 392 switch ( c ) {
fablabtruck 0:3852426a5068 393 case K_CANCEL:
fablabtruck 0:3852426a5068 394 while (mot->queue());
fablabtruck 0:3852426a5068 395 mot->reset();
fablabtruck 0:3852426a5068 396 if (runfile != NULL) fclose(runfile);
fablabtruck 0:3852426a5068 397 runfile=NULL; screen=MAIN; menu=MAIN;
fablabtruck 0:3852426a5068 398 break;
fablabtruck 0:3852426a5068 399 default:
fablabtruck 0:3852426a5068 400 if (runfile == NULL) {
fablabtruck 0:3852426a5068 401 runfile = sd.openfile(jobname, "rb");
fablabtruck 0:3852426a5068 402 if (! runfile)
fablabtruck 0:3852426a5068 403 screen=MAIN;
fablabtruck 0:3852426a5068 404 else
fablabtruck 0:3852426a5068 405 mot->reset();
fablabtruck 0:3852426a5068 406 } else {
fablabtruck 0:3852426a5068 407 while ((!feof(runfile)) && mot->ready())
fablabtruck 0:3852426a5068 408 mot->write(readint(runfile));
fablabtruck 0:3852426a5068 409 if (feof(runfile) && mot->ready()) {
fablabtruck 0:3852426a5068 410 fclose(runfile);
fablabtruck 0:3852426a5068 411 runfile = NULL;
fablabtruck 0:3852426a5068 412 screen=MAIN;
fablabtruck 0:3852426a5068 413 } else {
fablabtruck 0:3852426a5068 414 nodisplay = 1;
fablabtruck 0:3852426a5068 415 }
fablabtruck 0:3852426a5068 416 }
fablabtruck 0:3852426a5068 417 }
fablabtruck 0:3852426a5068 418 break;
fablabtruck 0:3852426a5068 419
fablabtruck 0:3852426a5068 420 default:
fablabtruck 0:3852426a5068 421 screen = MAIN;
fablabtruck 0:3852426a5068 422 break;
fablabtruck 0:3852426a5068 423 }
fablabtruck 0:3852426a5068 424 //if (nodisplay == 0) {
fablabtruck 0:3852426a5068 425 dsp->ShowScreen(screens[screen], args, sarg);
fablabtruck 0:3852426a5068 426 //}
fablabtruck 0:3852426a5068 427 prevscreen = screen;
fablabtruck 0:3852426a5068 428 }
fablabtruck 0:3852426a5068 429
fablabtruck 0:3852426a5068 430 }
fablabtruck 0:3852426a5068 431
fablabtruck 0:3852426a5068 432 void LaosMenu::SetFileName(char * name) {
fablabtruck 0:3852426a5068 433 strcpy(jobname, name);
fablabtruck 0:3852426a5068 434 }