xfdump: report to the host that a dump is available
As suggested by @3d-gussner, announce to the host that a dump is available for retrieval using an action "dump_available". Any kind of dump is announced (even if manually triggered). To avoid reading from xflash twice, remove some duplication and return the crash reason directly in xfdump_check_state().
This commit is contained in:
parent
31f416fd5e
commit
3187b96ca4
@ -108,7 +108,7 @@
|
|||||||
#include "optiboot_xflash.h"
|
#include "optiboot_xflash.h"
|
||||||
#endif //XFLASH
|
#endif //XFLASH
|
||||||
|
|
||||||
#ifdef EMERGENCY_DUMP
|
#ifdef XFLASH_DUMP
|
||||||
#include "xflash_dump.h"
|
#include "xflash_dump.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1610,15 +1610,27 @@ void setup()
|
|||||||
if (tmc2130_home_enabled == 0xff) tmc2130_home_enabled = 0;
|
if (tmc2130_home_enabled == 0xff) tmc2130_home_enabled = 0;
|
||||||
#endif //TMC2130
|
#endif //TMC2130
|
||||||
|
|
||||||
#ifdef EMERGENCY_DUMP
|
#ifdef XFLASH_DUMP
|
||||||
if(xfdump_check_crash() && eeprom_read_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED) != 1)
|
|
||||||
{
|
{
|
||||||
// prevent the prompt to reappear once acknowledged
|
dump_crash_reason crash_reason;
|
||||||
eeprom_update_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED, 1);
|
if(xfdump_check_state(&crash_reason))
|
||||||
lcd_show_fullscreen_message_and_wait_P(
|
{
|
||||||
_i("!!!FIRMWARE CRASH!!!\n"
|
// always signal to the host that a dump is available for retrieval
|
||||||
"Debug data available for analysis. "
|
puts_P(_N("// action:dump_available"));
|
||||||
"Contact support to submit details."));
|
|
||||||
|
#ifdef EMERGENCY_DUMP
|
||||||
|
if(crash_reason != dump_crash_reason::manual &&
|
||||||
|
eeprom_read_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED) != 1)
|
||||||
|
{
|
||||||
|
// prevent the prompt to reappear once acknowledged
|
||||||
|
eeprom_update_byte((uint8_t*)EEPROM_CRASH_ACKNOWLEDGED, 1);
|
||||||
|
lcd_show_fullscreen_message_and_wait_P(
|
||||||
|
_i("!!!FIRMWARE CRASH!!!\n"
|
||||||
|
"Debug data available for analysis. "
|
||||||
|
"Contact support to submit details."));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -8,28 +8,22 @@
|
|||||||
#include "xflash.h"
|
#include "xflash.h"
|
||||||
#include "Marlin.h" // for softReset
|
#include "Marlin.h" // for softReset
|
||||||
|
|
||||||
bool xfdump_check_state()
|
bool xfdump_check_state(dump_crash_reason* reason)
|
||||||
{
|
{
|
||||||
uint32_t magic;
|
uint32_t magic;
|
||||||
|
|
||||||
XFLASH_SPI_ENTER();
|
XFLASH_SPI_ENTER();
|
||||||
xflash_rd_data(DUMP_OFFSET + offsetof(dump_t, header.magic),
|
xflash_rd_data(DUMP_OFFSET + offsetof(dump_t, header.magic),
|
||||||
(uint8_t*)&magic, sizeof(magic));
|
(uint8_t*)&magic, sizeof(magic));
|
||||||
|
if (magic != DUMP_MAGIC)
|
||||||
return magic == DUMP_MAGIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool xfdump_check_crash()
|
|
||||||
{
|
|
||||||
// check_state will call SPI_ENTER for us
|
|
||||||
if(!xfdump_check_state())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
dump_crash_reason reason;
|
if (reason)
|
||||||
xflash_rd_data(DUMP_OFFSET + offsetof(dump_t, header.crash_reason),
|
{
|
||||||
(uint8_t*)&reason, sizeof(reason));
|
xflash_rd_data(DUMP_OFFSET + offsetof(dump_t, header.crash_reason),
|
||||||
return (reason != dump_crash_reason::manual);
|
(uint8_t*)reason, sizeof(*reason));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
#ifdef XFLASH_DUMP
|
#ifdef XFLASH_DUMP
|
||||||
|
|
||||||
void xfdump_reset(); // reset XFLASH dump state
|
void xfdump_reset(); // reset XFLASH dump state
|
||||||
bool xfdump_check_state(); // return true if a dump is present
|
|
||||||
bool xfdump_check_crash(); // return true if a dump is present and is a crash dump
|
|
||||||
void xfdump_dump(); // create a new SRAM memory dump
|
void xfdump_dump(); // create a new SRAM memory dump
|
||||||
|
|
||||||
enum class dump_crash_reason : uint8_t
|
enum class dump_crash_reason : uint8_t
|
||||||
@ -15,6 +13,9 @@ enum class dump_crash_reason : uint8_t
|
|||||||
watchdog,
|
watchdog,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// return true if a dump is present, save type in "reason" if provided
|
||||||
|
bool xfdump_check_state(dump_crash_reason* reason = NULL);
|
||||||
|
|
||||||
// create a new dump containing registers and SRAM, then reset
|
// create a new dump containing registers and SRAM, then reset
|
||||||
void xfdump_full_dump_and_reset(dump_crash_reason crash = dump_crash_reason::manual);
|
void xfdump_full_dump_and_reset(dump_crash_reason crash = dump_crash_reason::manual);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user