|
@@ -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())
|
|
|
|
- kill(_i("External SPI flash W25X20CL not responding."));
|
|
|
|
- // Enter an STK500 compatible Optiboot boot loader waiting for flashing the languages to an external flash memory.
|
|
|
|
- optiboot_w25x20cl_enter();
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
|
|
+ bool w25x20cl_success = w25x20cl_init();
|
|
|
|
+ if (w25x20cl_success)
|
|
|
|
+ {
|
|
|
|
+ optiboot_w25x20cl_enter();
|
|
#if (LANG_MODE != 0) //secondary language support
|
|
#if (LANG_MODE != 0) //secondary language support
|
|
-#ifdef W25X20CL
|
|
|
|
- if (w25x20cl_init())
|
|
|
|
- update_sec_lang_from_external_flash();
|
|
|
|
-#endif //W25X20CL
|
|
|
|
|
|
+ update_sec_lang_from_external_flash();
|
|
#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);
|