From ab00467914a8b2377754e86c89862652f7f144fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Tue, 21 Mar 2017 20:00:48 +0100 Subject: [PATCH] blinking indication of BOOT held down; added info to the help page --- html_orig/help.html | 9 ++++--- html_orig/wifi.html | 4 +-- user/ansi_parser_callbacks.c | 18 +++++++++++--- user/io.c | 48 ++++++++++++++++++++++++++++++++++-- user/user_main.h | 2 +- 5 files changed, 70 insertions(+), 11 deletions(-) diff --git a/html_orig/help.html b/html_orig/help.html index 6f880c0..9cece09 100644 --- a/html_orig/help.html +++ b/html_orig/help.html @@ -18,9 +18,12 @@ @@ -32,6 +35,7 @@
  • The max screen size is 2000 characters (eg. 25x80), default is 10x26. Set using \e]W<rows>;<cols>\a.
  • The screen will automatically scroll, can be used for log output.
  • Display update is sent after 20 ms of inactivity.
  • +
  • At most 4 clients can be connected at the same time.
  • The browser display needs WebSockets for the real-time updating. It may not work on really old phones / browsers.
  • @@ -104,7 +108,6 @@

    Mouse input (click/tap) is sent as \e[<y>;<x>M. You can use this for on-screen buttons, menu navigation etc. - Please note this is a custom escape sequence, not supported by PuTTY or other terminals.

    diff --git a/html_orig/wifi.html b/html_orig/wifi.html index bc98d63..32ee1a8 100644 --- a/html_orig/wifi.html +++ b/html_orig/wifi.html @@ -50,8 +50,8 @@

    Some changes require a reboot, dropping connection. It can take a while to re-connect.

    - If you lose access, connect GPIO0 to GND for 5 seconds to enter Client+AP mode. - If that fails, try the UART factory reset command "\e]FR\a". + If you lose access, hold the BOOT button for 2 seconds (the Tx LED starts blinking) to re-enable AP mode. + If that fails, hold the BOOT button for over 5 seconds (rapid Tx LED flashing) to perform a factory reset.

    diff --git a/user/ansi_parser_callbacks.c b/user/ansi_parser_callbacks.c index 5d0a3bd..93622dc 100644 --- a/user/ansi_parser_callbacks.c +++ b/user/ansi_parser_callbacks.c @@ -232,7 +232,9 @@ apars_handle_RESET_cmd(void) void ICACHE_FLASH_ATTR apars_handle_OSC_FactoryReset(void) { - info("OSC: Factory reset"); + warn("-------- Factory reset --------"); + + dbg("Switching to Client+AP mode"); // Send acknowledgement message to UART0 // User is performing this manually, so we can just print it as string @@ -248,10 +250,12 @@ apars_handle_OSC_FactoryReset(void) wifi_set_opmode(STATIONAP_MODE); // --- AP config --- + dbg("AP WiFi channel: 6"); + struct softap_config apconf; wifi_softap_get_config(&apconf); apconf.authmode=AUTH_OPEN; // Disable access protection - apconf.channel=1; // Reset channel; user may have set bad channel in the UI + apconf.channel=6; // Reset channel; user may have set bad channel in the UI // generate unique AP name u8 mac[6]; @@ -259,7 +263,11 @@ apars_handle_OSC_FactoryReset(void) sprintf((char*)apconf.ssid, "TERM-%02X%02X%02X", mac[3], mac[4], mac[5]); apconf.ssid_len = (u8)strlen((char*)apconf.ssid); + info("New AP name: %s", (char*)apconf.ssid); + // --- Station --- + dbg("Erasing stored WiFi credentials..."); + struct station_config staconf; wifi_station_get_config(&staconf); @@ -268,12 +276,16 @@ apars_handle_OSC_FactoryReset(void) staconf.bssid_set=0; staconf.password[0]=0; + dbg("Commiting changes..."); wifi_softap_set_config(&apconf); wifi_station_set_config(&staconf); UART_WriteString(UART0, "Factory Reset complete, device reset.\r\n\r\n", UART_TIMEOUT_US); - // Reboot to clean STA+AP mode with Channel 1 & reset AP SSID. + info("*** FACTORY RESET COMPLETE ***"); + dbg("Device reset..."); + + // Reboot to clean STA+AP mode with Channel X & reset AP SSID. system_restart(); } diff --git a/user/io.c b/user/io.c index f6f7b67..3516762 100644 --- a/user/io.c +++ b/user/io.c @@ -10,6 +10,7 @@ #include +#include "ansi_parser_callbacks.h" #define BTNGPIO 0 @@ -17,16 +18,59 @@ static bool enable_ap_button = false; static ETSTimer resetBtntimer; +static ETSTimer blinkyTimer; + +static void ICACHE_FLASH_ATTR bootHoldIndicatorTimerCb(void *arg) { + static bool state = true; + + if (GPIO_INPUT_GET(BTNGPIO)) { + // if user released, shut up + state = 1; + } + + if (state) { + GPIO_OUTPUT_SET(1, 1); + } else { + GPIO_OUTPUT_SET(1, 0); + } + + state = !state; +} static void ICACHE_FLASH_ATTR resetBtnTimerCb(void *arg) { static int resetCnt=0; if (enable_ap_button && !GPIO_INPUT_GET(BTNGPIO)) { resetCnt++; + + // indicating AP reset + if (resetCnt == 2) { + PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1); + GPIO_OUTPUT_SET(1, 0); // GPIO 1 OFF + + os_timer_disarm(&blinkyTimer); + os_timer_setfn(&blinkyTimer, bootHoldIndicatorTimerCb, NULL); + os_timer_arm(&blinkyTimer, 500, 1); + } + + // indicating we'll perform a factory reset + if (resetCnt == 10) { + os_timer_disarm(&blinkyTimer); + os_timer_setfn(&blinkyTimer, bootHoldIndicatorTimerCb, NULL); + os_timer_arm(&blinkyTimer, 100, 1); + } } else { - if (resetCnt>=6) { //3 sec pressed + // Switch Tx back to UART pin, so we can print our farewells + PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD); + + if (resetCnt>=10) { //5 secs pressed - FR + info("BOOT-button triggered FACTORY RESET!"); + apars_handle_OSC_FactoryReset(); + } + else if (resetCnt>=2) { //1 sec pressed wifi_station_disconnect(); wifi_set_opmode(STATIONAP_MODE); //reset to AP+STA mode - info("Reset to AP mode from GPIO0, Restarting system..."); + info("BOOT-button triggered reset to AP mode, restarting..."); + system_restart(); } resetCnt=0; diff --git a/user/user_main.h b/user/user_main.h index dc5b50d..2105906 100644 --- a/user/user_main.h +++ b/user/user_main.h @@ -1,7 +1,7 @@ #ifndef USER_MAIN_H_H #define USER_MAIN_H_H -#define FIRMWARE_VERSION "0.5.4" +#define FIRMWARE_VERSION "0.5.5" #define TERMINAL_GITHUB_REPO "https://github.com/MightyPork/esp-vt100-firmware" #endif //USER_MAIN_H_H