Add D100 Watchdog Test (#19697)
This commit is contained in:
		| @@ -25,8 +25,10 @@ | |||||||
|  |  | ||||||
|   #include "gcode.h" |   #include "gcode.h" | ||||||
|   #include "../module/settings.h" |   #include "../module/settings.h" | ||||||
|  |   #include "../module/temperature.h" | ||||||
|   #include "../libs/hex_print.h" |   #include "../libs/hex_print.h" | ||||||
|   #include "../HAL/shared/eeprom_if.h" |   #include "../HAL/shared/eeprom_if.h" | ||||||
|  |   #include "../HAL/shared/Delay.h" | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * Dn: G-code for development and testing |    * Dn: G-code for development and testing | ||||||
| @@ -84,40 +86,23 @@ | |||||||
|         } |         } | ||||||
|       } break; |       } break; | ||||||
|  |  | ||||||
|       case 3: { // D3 Read / Write EEPROM |       #if ENABLED(EEPROM_SETTINGS) | ||||||
|         uint8_t *pointer = parser.hex_adr_val('A'); |         case 3: { // D3 Read / Write EEPROM | ||||||
|         uint16_t len = parser.ushortval('C', 1); |           uint8_t *pointer = parser.hex_adr_val('A'); | ||||||
|         uintptr_t addr = (uintptr_t)pointer; |           uint16_t len = parser.ushortval('C', 1); | ||||||
|         #ifndef MARLIN_EEPROM_SIZE |           uintptr_t addr = (uintptr_t)pointer; | ||||||
|           #define MARLIN_EEPROM_SIZE size_t(E2END + 1) |           #ifndef MARLIN_EEPROM_SIZE | ||||||
|         #endif |             #define MARLIN_EEPROM_SIZE size_t(E2END + 1) | ||||||
|         NOMORE(addr, (size_t)(MARLIN_EEPROM_SIZE - 1)); |  | ||||||
|         NOMORE(len, MARLIN_EEPROM_SIZE - addr); |  | ||||||
|         if (parser.seenval('X')) { |  | ||||||
|           uint16_t val = parser.hex_val('X'); |  | ||||||
|           #if ENABLED(EEPROM_SETTINGS) |  | ||||||
|             persistentStore.access_start(); |  | ||||||
|             while(len--) { |  | ||||||
|               int pos = 0; |  | ||||||
|               persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val)); |  | ||||||
|             } |  | ||||||
|             SERIAL_EOL(); |  | ||||||
|             persistentStore.access_finish(); |  | ||||||
|           #else |  | ||||||
|             SERIAL_ECHOLN("NO EEPROM"); |  | ||||||
|           #endif |           #endif | ||||||
|         } |           NOMORE(addr, (size_t)(MARLIN_EEPROM_SIZE - 1)); | ||||||
|         else { |           NOMORE(len, MARLIN_EEPROM_SIZE - addr); | ||||||
|           while (len--) { |           if (parser.seenval('X')) { | ||||||
|             // Read bytes from EEPROM |             uint16_t val = parser.hex_val('X'); | ||||||
|             #if ENABLED(EEPROM_SETTINGS) |             #if ENABLED(EEPROM_SETTINGS) | ||||||
|               persistentStore.access_start(); |               persistentStore.access_start(); | ||||||
|               uint8_t val; |  | ||||||
|               while(len--) { |               while(len--) { | ||||||
|                 int pos = 0; |                 int pos = 0; | ||||||
|                 if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) { |                 persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val)); | ||||||
|                   print_hex_byte(val); |  | ||||||
|                 } |  | ||||||
|               } |               } | ||||||
|               SERIAL_EOL(); |               SERIAL_EOL(); | ||||||
|               persistentStore.access_finish(); |               persistentStore.access_finish(); | ||||||
| @@ -125,9 +110,28 @@ | |||||||
|               SERIAL_ECHOLN("NO EEPROM"); |               SERIAL_ECHOLN("NO EEPROM"); | ||||||
|             #endif |             #endif | ||||||
|           } |           } | ||||||
|           SERIAL_EOL(); |           else { | ||||||
|         } |             while (len--) { | ||||||
|       } break; |               // Read bytes from EEPROM | ||||||
|  |               #if ENABLED(EEPROM_SETTINGS) | ||||||
|  |                 persistentStore.access_start(); | ||||||
|  |                 uint8_t val; | ||||||
|  |                 while(len--) { | ||||||
|  |                   int pos = 0; | ||||||
|  |                   if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) { | ||||||
|  |                     print_hex_byte(val); | ||||||
|  |                   } | ||||||
|  |                 } | ||||||
|  |                 SERIAL_EOL(); | ||||||
|  |                 persistentStore.access_finish(); | ||||||
|  |               #else | ||||||
|  |                 SERIAL_ECHOLN("NO EEPROM"); | ||||||
|  |               #endif | ||||||
|  |             } | ||||||
|  |             SERIAL_EOL(); | ||||||
|  |           } | ||||||
|  |         } break; | ||||||
|  |       #endif       | ||||||
|  |  | ||||||
|       case 4: { // D4 Read / Write PIN |       case 4: { // D4 Read / Write PIN | ||||||
|         // const uint8_t pin = parser.byteval('P'); |         // const uint8_t pin = parser.byteval('P'); | ||||||
| @@ -167,6 +171,20 @@ | |||||||
|           SERIAL_EOL(); |           SERIAL_EOL(); | ||||||
|         } |         } | ||||||
|       } break; |       } break; | ||||||
|  |  | ||||||
|  |       case 100: { // D100 Disable heaters and attempt a hard hang (Watchdog Test) | ||||||
|  |         SERIAL_ECHOLN("Disabling heaters and attempting to trigger Watchdog"); | ||||||
|  |         SERIAL_ECHOLN("(USE_WATCHDOG " TERN(USE_WATCHDOG, "ENABLED", "DISABLED") ")"); | ||||||
|  |         thermalManager.disable_all_heaters(); | ||||||
|  |         delay(1000); // Allow time to print | ||||||
|  |         DISABLE_ISRS(); | ||||||
|  |         // Use a low-level delay that does not rely on interrupts to function | ||||||
|  |         // Do not spin forever, to avoid thermal risks if heaters are enabled and | ||||||
|  |         // watchdog does not work. | ||||||
|  |         DELAY_US(10000000); | ||||||
|  |         ENABLE_ISRS(); | ||||||
|  |         SERIAL_ECHOLN("FAILURE: Watchdog did not trigger board reset."); | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user