Browse Source

Simplify emergency parser (only parse initial command)

Scott Lahteine 8 years ago
parent
commit
ea47803ae2
1 changed files with 39 additions and 103 deletions
  1. 39
    103
      Marlin/MarlinSerial.cpp

+ 39
- 103
Marlin/MarlinSerial.cpp View File

325
 
325
 
326
     enum e_parser_state {
326
     enum e_parser_state {
327
       state_RESET,
327
       state_RESET,
328
+      state_N,
328
       state_M,
329
       state_M,
329
       state_M1,
330
       state_M1,
330
       state_M10,
331
       state_M10,
331
       state_M11,
332
       state_M11,
332
-      state_M2,
333
-      state_M3,
334
       state_M4,
333
       state_M4,
335
       state_M41,
334
       state_M41,
336
       state_IGNORE // to '\n'
335
       state_IGNORE // to '\n'
338
 
337
 
339
     static e_parser_state state = state_RESET;
338
     static e_parser_state state = state_RESET;
340
 
339
 
340
+    if (c == '\n') state = state_IGNORE;
341
+
341
     switch (state) {
342
     switch (state) {
342
       case state_RESET:
343
       case state_RESET:
343
         switch (c) {
344
         switch (c) {
344
-          case 'M':
345
-            state = state_M;
346
-            break;
347
-          case ';':
348
-            state = state_IGNORE;
349
-            break;
350
-          default: state = state_RESET;
351
-        }
352
-      break;
353
-
354
-      case state_M:
355
-        switch (c) {
356
-          case '1':
357
-            state = state_M1;
358
-            break;
359
-          case '2':
360
-            state = state_M2;
361
-            break;
362
-          case '3':
363
-            state = state_M3;
364
-            break;
365
-          case '4':
366
-            state = state_M4;
367
-            break;
368
-          case ';':
369
-            state = state_IGNORE;
370
-            break;
371
-          default: state = state_RESET;
345
+          case ' ': break;
346
+          case 'N': state = state_N;      break;
347
+          case 'M': state = state_M;      break;
348
+          default: state = state_IGNORE;
372
         }
349
         }
373
-      break;
350
+        break;
374
 
351
 
375
-      case state_M1:
352
+      case state_N:
376
         switch (c) {
353
         switch (c) {
377
-          case '0':
378
-            state = state_M10;
379
-            break;
380
-          case '1':
381
-            state = state_M11;
382
-            break;
383
-          case ';':
384
-            state = state_IGNORE;
385
-            break;
386
-          default: state = state_RESET;
354
+          case '0': case '1': case '2':
355
+          case '3': case '4': case '5':
356
+          case '6': case '7': case '8':
357
+          case '9': case '-': case ' ':   break;
358
+          case 'M': state = state_M;      break;
359
+          default:  state = state_IGNORE;
387
         }
360
         }
388
-      break;
361
+        break;
389
 
362
 
390
-      case state_M2:
363
+      case state_M:
391
         switch (c) {
364
         switch (c) {
392
-          case '3': // M23
393
-          case '8': // M28
394
-          case ';':
395
-            state = state_IGNORE;
396
-            break;
397
-          default: state = state_RESET;
365
+          case ' ': break;
366
+          case '1': state = state_M1;     break;
367
+          case '4': state = state_M4;     break;
368
+          default: state = state_IGNORE;
398
         }
369
         }
399
-      break;
370
+        break;
400
 
371
 
401
-      case state_M3:
372
+      case state_M1:
402
         switch (c) {
373
         switch (c) {
403
-          case '0': // M30
404
-          case '2': // M32
405
-          case '3': // M33
406
-          case ';':
407
-            state = state_IGNORE;
408
-            break;
409
-          default: state = state_RESET;
374
+          case '0': state = state_M10;    break;
375
+          case '1': state = state_M11;    break;
376
+          default: state = state_IGNORE;
410
         }
377
         }
411
-      break;
378
+        break;
412
 
379
 
413
       case state_M10:
380
       case state_M10:
414
-        switch (c) {
415
-          case '8': // M108
416
-            { state = state_RESET; wait_for_heatup = false; }
417
-            break;
418
-          case ';':
419
-            state = state_IGNORE;
420
-            break;
421
-          default: state = state_RESET;
422
-        }
423
-      break;
381
+        if (c == '8') wait_for_heatup = false; // M108
382
+        state = state_IGNORE;
383
+        break;
424
 
384
 
425
       case state_M11:
385
       case state_M11:
426
-        switch (c) {
427
-          case '2': // M112
428
-            state = state_RESET; kill(PSTR(MSG_KILLED));
429
-            break;
430
-          case '7': // M117
431
-          case ';':
432
-            state = state_IGNORE;
433
-            break;
434
-          default: state = state_RESET;
435
-        }
436
-      break;
386
+        if (c == '2') kill(PSTR(MSG_KILLED));  // M112
387
+        state = state_IGNORE;
388
+        break;
437
 
389
 
438
       case state_M4:
390
       case state_M4:
439
-        switch (c) {
440
-          case '1':
441
-            state = state_M41;
442
-            break;
443
-          case ';':
444
-            state = state_IGNORE;
445
-            break;
446
-          default: state = state_RESET;
447
-        }
448
-      break;
391
+        state = (c == '1') ? state_M41 : state_IGNORE;
392
+        break;
449
 
393
 
450
       case state_M41:
394
       case state_M41:
451
-        switch (c) {
452
-          case '0':
453
-            state = state_RESET;
454
-            quickstop_stepper();
455
-            break;
456
-          case ';':
457
-            state = state_IGNORE;
458
-            break;
459
-          default: state = state_RESET;
460
-        }
461
-      break;
395
+        if (c == '0') quickstop_stepper();     // M410
396
+        state = state_IGNORE;
397
+        break;
462
 
398
 
463
       case state_IGNORE:
399
       case state_IGNORE:
464
         if (c == '\n') state = state_RESET;
400
         if (c == '\n') state = state_RESET;
465
-      break;
401
+        break;
466
 
402
 
467
       default:
403
       default:
468
         state = state_RESET;
404
         state = state_RESET;

Loading…
Cancel
Save