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
LaosMenu/LaosMenu.cpp@0:3852426a5068, 2012-06-08 (annotated)
- Committer:
- fablabtruck
- Date:
- Fri Jun 08 09:26:40 2012 +0000
- Revision:
- 0:3852426a5068
svn revision 379
Who changed what in which revision?
User | Revision | Line number | New 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 | } |