Dcodes: add D20/D21/D22 to generate/read/clear dumps

This commit is contained in:
Yuri D'Elia 2021-06-08 15:34:39 +02:00
parent 8417083b13
commit 30402e0404
3 changed files with 96 additions and 2 deletions

View file

@ -924,5 +924,45 @@ void dcode_9125()
}
#endif //PAT9125
#endif //DEBUG_DCODES
#ifdef XFLASH_DUMP
#include "xflash_dump.h"
void dcode_20()
{
if(code_seen('E'))
xfdump_full_dump_and_reset();
else
{
unsigned long ts = millis();
xfdump_dump();
ts = millis() - ts;
DBG(_N("dump completed in %lums\n"), ts);
}
}
void dcode_21()
{
if(!xfdump_check_state())
DBG(_N("no dump available\n"));
else
{
KEEPALIVE_STATE(NOT_BUSY);
DBG(_N("D21 - read crash dump\n"));
print_mem(DUMP_OFFSET + offsetof(dump_t, data),
DUMP_SIZE, dcode_mem_t::xflash);
}
}
void dcode_22()
{
if(!xfdump_check_state())
DBG(_N("no dump available\n"));
else
{
xfdump_reset();
DBG(_N("dump cleared\n"));
}
}
#endif

View file

@ -29,6 +29,12 @@ extern void dcode_9(); //D9 - Read/Write ADC (Write=enable simulated, Read=disab
extern void dcode_10(); //D10 - XYZ calibration = OK
extern void dcode_12(); //D12 - Log time. Writes the current time in the log file.
#ifdef XFLASH_DUMP
extern void dcode_20(); //D20 - Generate an offline crash dump
extern void dcode_21(); //D21 - Print crash dump to serial
extern void dcode_22(); //D22 - Clear crash dump state
#endif
#ifdef HEATBED_ANALYSIS
extern void dcode_80(); //D80 - Bed check. This command will log data to SD card file "mesh.txt".
extern void dcode_81(); //D81 - Bed analysis. This command will log data to SD card file "wldsd.txt".

View file

@ -9205,8 +9205,56 @@ Sigma_Exit:
### D12 - Time <a href="https://reprap.org/wiki/G-code#D12:_Time">D12: Time</a>
Writes the current time in the log file.
*/
#endif //DEBUG_DCODES
#ifdef XFLASH_DUMP
/*!
### D20 - Generate an offline crash dump
Generate a crash dump for later retrival.
#### Usage
D20 [E]
### Parameters
- `E` - Perform an emergency crash dump (resets the printer).
### Notes
- A crash dump can be later recovered with D21, or cleared with D22.
- An emergency crash dump includes register data, but will cause the printer to reset after the dump
is completed.
*/
case 20: {
dcode_20();
break;
};
/*!
### D21 - Print crash dump to serial
Output the complete crash dump (if present) to the serial.
#### Usage
D21
### Notes
- The starting address can vary between builds, but it's always at the beginning of the data section.
*/
case 21: {
dcode_21();
break;
};
/*!
### D22 - Clear crash dump state
Clear an existing internal crash dump.
#### Usage
D22
*/
case 22: {
dcode_22();
break;
};
#endif
#ifdef HEATBED_ANALYSIS
/*!