@@ -305,7 +305,7 @@ void GcodeSuite::M43() {
305
305
306
306
// 'P' Get the range of pins to test or watch
307
307
uint8_t first_pin = PARSED_PIN_INDEX (' P' , 0 ),
308
- last_pin = parser.seenval (' L' ) ? PARSED_PIN_INDEX (' L' , 0 ) : parser.seenval (' P' ) ? first_pin : (NUMBER_PINS_TOTAL) - 1 ;
308
+ last_pin = parser.seenval (' L' ) ? PARSED_PIN_INDEX (' L' , 0 ) : ( parser.seenval (' P' ) ? first_pin : (NUMBER_PINS_TOTAL) - 1 ) ;
309
309
310
310
NOMORE (first_pin, (NUMBER_PINS_TOTAL) - 1 );
311
311
NOMORE (last_pin, (NUMBER_PINS_TOTAL) - 1 );
@@ -321,15 +321,18 @@ void GcodeSuite::M43() {
321
321
322
322
// 'W' Watch until click, M108, or reset
323
323
if (parser.boolval (' W' )) {
324
- SERIAL_ECHOLNPGM (" Watching pins" );
325
324
#ifdef ARDUINO_ARCH_SAM
326
325
NOLESS (first_pin, 2 ); // Don't hijack the UART pins
327
326
#endif
328
- uint8_t pin_state[last_pin - first_pin + 1 ];
327
+
328
+ const uint8_t pin_count = last_pin - first_pin + 1 ;
329
+ uint8_t pin_state[pin_count];
330
+ bool can_watch = false ;
329
331
LOOP_S_LE_N (i, first_pin, last_pin) {
330
332
pin_t pin = GET_PIN_MAP_PIN_M43 (i);
331
333
if (!VALID_PIN (pin)) continue ;
332
334
if (M43_NEVER_TOUCH (i) || (!ignore_protection && pin_is_protected (pin))) continue ;
335
+ can_watch = true ;
333
336
pinMode (pin, INPUT_PULLUP);
334
337
delay (1 );
335
338
/*
@@ -340,11 +343,31 @@ void GcodeSuite::M43() {
340
343
pin_state[i - first_pin] = extDigitalRead (pin);
341
344
}
342
345
346
+ const bool multipin = (pin_count > 1 );
347
+
348
+ if (!can_watch) {
349
+ SERIAL_ECHOPGM (" Specified pin" );
350
+ SERIAL_ECHOPGM_P (multipin ? PSTR (" s are" ) : PSTR (" is" ));
351
+ SERIAL_ECHOLNPGM (" protected. Use 'I' to override." );
352
+ return ;
353
+ }
354
+
355
+ // "Watching pin(s) # - #"
356
+ SERIAL_ECHOPGM (" Watching pin" );
357
+ if (multipin) SERIAL_CHAR (' s' );
358
+ SERIAL_CHAR (' ' ); SERIAL_ECHO (first_pin);
359
+ if (multipin) SERIAL_ECHOPGM (" - " , last_pin);
360
+ SERIAL_EOL ();
361
+
343
362
#if HAS_RESUME_CONTINUE
344
363
KEEPALIVE_STATE (PAUSED_FOR_USER);
345
364
wait_for_user = true ;
346
- TERN_ (HOST_PROMPT_SUPPORT, hostui.prompt_do (PROMPT_USER_CONTINUE, F (" M43 Wait Called" ), FPSTR (CONTINUE_STR)));
347
- TERN_ (EXTENSIBLE_UI, ExtUI::onUserConfirmRequired (F (" M43 Wait Called" )));
365
+ TERN_ (HOST_PROMPT_SUPPORT, hostui.prompt_do (PROMPT_USER_CONTINUE, F (" M43 Waiting..." ), FPSTR (CONTINUE_STR)));
366
+ #if ENABLED(EXTENSIBLE_UI)
367
+ ExtUI::onUserConfirmRequired (F (" M43 Waiting..." ));
368
+ #else
369
+ LCD_MESSAGE (MSG_USERWAIT);
370
+ #endif
348
371
#endif
349
372
350
373
for (;;) {
@@ -372,6 +395,8 @@ void GcodeSuite::M43() {
372
395
373
396
safe_delay (200 );
374
397
}
398
+
399
+ TERN_ (HAS_RESUME_CONTINUE, ui.reset_status ());
375
400
}
376
401
else {
377
402
// Report current state of selected pin(s)
0 commit comments