Merge pull request #1743 from mkbel/no_kill_spi_flash_err
Do not kill printer if External SPI flash W25X20CL is not responding.
This commit is contained in:
commit
7f2d366ff0
3 changed files with 34 additions and 23 deletions
|
@ -977,6 +977,12 @@ void list_sec_lang_from_external_flash()
|
||||||
#endif //(LANG_MODE != 0)
|
#endif //(LANG_MODE != 0)
|
||||||
|
|
||||||
|
|
||||||
|
static void w25x20cl_err_msg()
|
||||||
|
{
|
||||||
|
lcd_puts_P(_n(ESC_2J ESC_H(0,0) "External SPI flash" ESC_H(0,1) "W25X20CL is not res-"
|
||||||
|
ESC_H(0,2) "ponding. Language" ESC_H(0,3) "switch unavailable."));
|
||||||
|
}
|
||||||
|
|
||||||
// "Setup" function is called by the Arduino framework on startup.
|
// "Setup" function is called by the Arduino framework on startup.
|
||||||
// Before startup, the Timers-functions (PWM)/Analog RW and HardwareSerial provided by the Arduino-code
|
// Before startup, the Timers-functions (PWM)/Analog RW and HardwareSerial provided by the Arduino-code
|
||||||
// are initialized by the main() routine provided by the Arduino framework.
|
// are initialized by the main() routine provided by the Arduino framework.
|
||||||
|
@ -993,21 +999,25 @@ void setup()
|
||||||
spi_init();
|
spi_init();
|
||||||
|
|
||||||
lcd_splash();
|
lcd_splash();
|
||||||
Sound_Init(); // also guarantee "SET_OUTPUT(BEEPER)"
|
Sound_Init(); // also guarantee "SET_OUTPUT(BEEPER)"
|
||||||
|
|
||||||
#ifdef W25X20CL
|
#ifdef W25X20CL
|
||||||
if (!w25x20cl_init())
|
bool w25x20cl_success = w25x20cl_init();
|
||||||
kill(_i("External SPI flash W25X20CL not responding."));
|
if (w25x20cl_success)
|
||||||
// Enter an STK500 compatible Optiboot boot loader waiting for flashing the languages to an external flash memory.
|
{
|
||||||
optiboot_w25x20cl_enter();
|
optiboot_w25x20cl_enter();
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (LANG_MODE != 0) //secondary language support
|
#if (LANG_MODE != 0) //secondary language support
|
||||||
#ifdef W25X20CL
|
update_sec_lang_from_external_flash();
|
||||||
if (w25x20cl_init())
|
|
||||||
update_sec_lang_from_external_flash();
|
|
||||||
#endif //W25X20CL
|
|
||||||
#endif //(LANG_MODE != 0)
|
#endif //(LANG_MODE != 0)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w25x20cl_err_msg();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
const bool w25x20cl_success = true;
|
||||||
|
#endif //W25X20CL
|
||||||
|
|
||||||
|
|
||||||
setup_killpin();
|
setup_killpin();
|
||||||
setup_powerhold();
|
setup_powerhold();
|
||||||
|
@ -1213,12 +1223,17 @@ void setup()
|
||||||
|
|
||||||
tp_init(); // Initialize temperature loop
|
tp_init(); // Initialize temperature loop
|
||||||
|
|
||||||
lcd_splash(); // we need to do this again, because tp_init() kills lcd
|
if (w25x20cl_success) lcd_splash(); // we need to do this again, because tp_init() kills lcd
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w25x20cl_err_msg();
|
||||||
|
printf_P(_n("W25X20CL not responding.\n"));
|
||||||
|
}
|
||||||
|
|
||||||
plan_init(); // Initialize planner;
|
plan_init(); // Initialize planner;
|
||||||
|
|
||||||
factory_reset();
|
factory_reset();
|
||||||
lcd_encoder_diff=0;
|
lcd_encoder_diff=0;
|
||||||
|
|
||||||
#ifdef TMC2130
|
#ifdef TMC2130
|
||||||
uint8_t silentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
|
uint8_t silentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
|
||||||
|
|
|
@ -64,23 +64,17 @@ extern void lcd_print(long, int = 10);
|
||||||
extern void lcd_print(unsigned long, int = 10);
|
extern void lcd_print(unsigned long, int = 10);
|
||||||
extern void lcd_print(double, int = 2);
|
extern void lcd_print(double, int = 2);
|
||||||
|
|
||||||
|
//! @brief Clear screen
|
||||||
#define ESC_2J "\x1b[2J"
|
#define ESC_2J "\x1b[2J"
|
||||||
#define ESC_25h "\x1b[?25h"
|
#define ESC_25h "\x1b[?25h"
|
||||||
#define ESC_25l "\x1b[?25l"
|
#define ESC_25l "\x1b[?25l"
|
||||||
|
//! @brief Set cursor to
|
||||||
|
//! @param c column
|
||||||
|
//! @param r row
|
||||||
#define ESC_H(c,r) "\x1b["#r";"#c"H"
|
#define ESC_H(c,r) "\x1b["#r";"#c"H"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define LCD_UPDATE_INTERVAL 100
|
#define LCD_UPDATE_INTERVAL 100
|
||||||
#define LCD_TIMEOUT_TO_STATUS 30000ul //!< Generic timeout to status screen in ms, when no user action.
|
#define LCD_TIMEOUT_TO_STATUS 30000ul //!< Generic timeout to status screen in ms, when no user action.
|
||||||
#define LCD_TIMEOUT_TO_STATUS_BABYSTEP_Z 90000ul //!< Specific timeout for lcd_babystep_z screen in ms.
|
#define LCD_TIMEOUT_TO_STATUS_BABYSTEP_Z 90000ul //!< Specific timeout for lcd_babystep_z screen in ms.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//! @file
|
||||||
// Based on the OptiBoot project
|
// Based on the OptiBoot project
|
||||||
// https://github.com/Optiboot/optiboot
|
// https://github.com/Optiboot/optiboot
|
||||||
// Licence GLP 2 or later.
|
// Licence GLP 2 or later.
|
||||||
|
@ -97,6 +98,7 @@ static const char entry_magic_cfm [] PROGMEM = "w25x20cl_cfm\n";
|
||||||
struct block_t;
|
struct block_t;
|
||||||
extern struct block_t *block_buffer;
|
extern struct block_t *block_buffer;
|
||||||
|
|
||||||
|
//! @brief Enter an STK500 compatible Optiboot boot loader waiting for flashing the languages to an external flash memory.
|
||||||
void optiboot_w25x20cl_enter()
|
void optiboot_w25x20cl_enter()
|
||||||
{
|
{
|
||||||
if (boot_app_flags & BOOT_APP_FLG_USER0) return;
|
if (boot_app_flags & BOOT_APP_FLG_USER0) return;
|
||||||
|
|
Loading…
Reference in a new issue