@@ -313,7 +313,7 @@ void GcodeSuite::M43() {
313
313
314
314
// 'P' Get the range of pins to test or watch
315
315
uint8_t first_pin = PARSED_PIN_INDEX (' P' , 0 ),
316
- last_pin = parser.seenval (' L' ) ? PARSED_PIN_INDEX (' L' , 0 ) : parser.seenval (' P' ) ? first_pin : (NUMBER_PINS_TOTAL) - 1 ;
316
+ last_pin = parser.seenval (' L' ) ? PARSED_PIN_INDEX (' L' , 0 ) : ( parser.seenval (' P' ) ? first_pin : (NUMBER_PINS_TOTAL) - 1 ) ;
317
317
318
318
NOMORE (first_pin, (NUMBER_PINS_TOTAL) - 1 );
319
319
NOMORE (last_pin, (NUMBER_PINS_TOTAL) - 1 );
@@ -329,15 +329,18 @@ void GcodeSuite::M43() {
329
329
330
330
// 'W' Watch until click, M108, or reset
331
331
if (parser.boolval (' W' )) {
332
- SERIAL_ECHOLNPGM (" Watching pins" );
333
332
#ifdef ARDUINO_ARCH_SAM
334
333
NOLESS (first_pin, 2 ); // Don't hijack the UART pins
335
334
#endif
336
- uint8_t pin_state[last_pin - first_pin + 1 ];
335
+
336
+ const uint8_t pin_count = last_pin - first_pin + 1 ;
337
+ uint8_t pin_state[pin_count];
338
+ bool can_watch = false ;
337
339
LOOP_S_LE_N (i, first_pin, last_pin) {
338
340
pin_t pin = GET_PIN_MAP_PIN_M43 (i);
339
341
if (!VALID_PIN (pin)) continue ;
340
342
if (M43_NEVER_TOUCH (i) || (!ignore_protection && pin_is_protected (pin))) continue ;
343
+ can_watch = true ;
341
344
pinMode (pin, INPUT_PULLUP);
342
345
delay (1 );
343
346
/*
@@ -348,11 +351,31 @@ void GcodeSuite::M43() {
348
351
pin_state[i - first_pin] = extDigitalRead (pin);
349
352
}
350
353
354
+ const bool multipin = (pin_count > 1 );
355
+
356
+ if (!can_watch) {
357
+ SERIAL_ECHOPGM (" Specified pin" );
358
+ SERIAL_ECHOPGM_P (multipin ? PSTR (" s are" ) : PSTR (" is" ));
359
+ SERIAL_ECHOLNPGM (" protected. Use 'I' to override." );
360
+ return ;
361
+ }
362
+
363
+ // "Watching pin(s) # - #"
364
+ SERIAL_ECHOPGM (" Watching pin" );
365
+ if (multipin) SERIAL_CHAR (' s' );
366
+ SERIAL_CHAR (' ' ); SERIAL_ECHO (first_pin);
367
+ if (multipin) SERIAL_ECHOPGM (" - " , last_pin);
368
+ SERIAL_EOL ();
369
+
351
370
#if HAS_RESUME_CONTINUE
352
371
KEEPALIVE_STATE (PAUSED_FOR_USER);
353
372
wait_for_user = true ;
354
- TERN_ (HOST_PROMPT_SUPPORT, hostui.prompt_do (PROMPT_USER_CONTINUE, F (" M43 Wait Called" ), FPSTR (CONTINUE_STR)));
355
- TERN_ (EXTENSIBLE_UI, ExtUI::onUserConfirmRequired (F (" M43 Wait Called" )));
373
+ TERN_ (HOST_PROMPT_SUPPORT, hostui.prompt_do (PROMPT_USER_CONTINUE, F (" M43 Waiting..." ), FPSTR (CONTINUE_STR)));
374
+ #if ENABLED(EXTENSIBLE_UI)
375
+ ExtUI::onUserConfirmRequired (F (" M43 Waiting..." ));
376
+ #else
377
+ LCD_MESSAGE (MSG_USERWAIT);
378
+ #endif
356
379
#endif
357
380
358
381
for (;;) {
@@ -380,6 +403,8 @@ void GcodeSuite::M43() {
380
403
381
404
safe_delay (200 );
382
405
}
406
+
407
+ TERN_ (HAS_RESUME_CONTINUE, ui.reset_status ());
383
408
}
384
409
else {
385
410
// Report current state of selected pin(s)
0 commit comments