Add D100 Watchdog Test (#19697)
This commit is contained in:
		
							parent
							
								
									9b1ed45b3e
								
							
						
					
					
						commit
						48a24202ef
					
				@ -25,8 +25,10 @@
 | 
			
		||||
 | 
			
		||||
  #include "gcode.h"
 | 
			
		||||
  #include "../module/settings.h"
 | 
			
		||||
  #include "../module/temperature.h"
 | 
			
		||||
  #include "../libs/hex_print.h"
 | 
			
		||||
  #include "../HAL/shared/eeprom_if.h"
 | 
			
		||||
  #include "../HAL/shared/Delay.h"
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Dn: G-code for development and testing
 | 
			
		||||
@ -84,40 +86,23 @@
 | 
			
		||||
        }
 | 
			
		||||
      } break;
 | 
			
		||||
 | 
			
		||||
      case 3: { // D3 Read / Write EEPROM
 | 
			
		||||
        uint8_t *pointer = parser.hex_adr_val('A');
 | 
			
		||||
        uint16_t len = parser.ushortval('C', 1);
 | 
			
		||||
        uintptr_t addr = (uintptr_t)pointer;
 | 
			
		||||
        #ifndef MARLIN_EEPROM_SIZE
 | 
			
		||||
          #define MARLIN_EEPROM_SIZE size_t(E2END + 1)
 | 
			
		||||
        #endif
 | 
			
		||||
        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");
 | 
			
		||||
      #if ENABLED(EEPROM_SETTINGS)
 | 
			
		||||
        case 3: { // D3 Read / Write EEPROM
 | 
			
		||||
          uint8_t *pointer = parser.hex_adr_val('A');
 | 
			
		||||
          uint16_t len = parser.ushortval('C', 1);
 | 
			
		||||
          uintptr_t addr = (uintptr_t)pointer;
 | 
			
		||||
          #ifndef MARLIN_EEPROM_SIZE
 | 
			
		||||
            #define MARLIN_EEPROM_SIZE size_t(E2END + 1)
 | 
			
		||||
          #endif
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          while (len--) {
 | 
			
		||||
            // Read bytes from EEPROM
 | 
			
		||||
          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();
 | 
			
		||||
              uint8_t val;
 | 
			
		||||
              while(len--) {
 | 
			
		||||
                int pos = 0;
 | 
			
		||||
                if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) {
 | 
			
		||||
                  print_hex_byte(val);
 | 
			
		||||
                }
 | 
			
		||||
                persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val));
 | 
			
		||||
              }
 | 
			
		||||
              SERIAL_EOL();
 | 
			
		||||
              persistentStore.access_finish();
 | 
			
		||||
@ -125,9 +110,28 @@
 | 
			
		||||
              SERIAL_ECHOLN("NO EEPROM");
 | 
			
		||||
            #endif
 | 
			
		||||
          }
 | 
			
		||||
          SERIAL_EOL();
 | 
			
		||||
        }
 | 
			
		||||
      } break;
 | 
			
		||||
          else {
 | 
			
		||||
            while (len--) {
 | 
			
		||||
              // 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
 | 
			
		||||
        // const uint8_t pin = parser.byteval('P');
 | 
			
		||||
@ -167,6 +171,20 @@
 | 
			
		||||
          SERIAL_EOL();
 | 
			
		||||
        }
 | 
			
		||||
      } 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.");
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user