Wifi State
+WiFi State
WiFi mode | |
Wifi channel | |
WiFi channel | |
Configured network | |
Wifi status | |
Wifi address | |
Wifi rssi | |
Wifi phy | |
Wifi MAC | |
WiFi status | |
WiFi address | |
WiFi rssi | |
WiFi phy | |
WiFi MAC | |
diff --git a/esp-link/cgi.c b/esp-link/cgi.c index da54997..081ef49 100644 --- a/esp-link/cgi.c +++ b/esp-link/cgi.c @@ -206,7 +206,7 @@ int ICACHE_FLASH_ATTR cgiMenu(HttpdConnData *connData) { "{ " "\"menu\": [ " "\"Home\", \"/home.html\", " - "\"Wifi\", \"/wifi/wifi.html\", " + "\"WiFI\", \"/wifi/wifi.html\", " "\"µC Console\", \"/console.html\", " "\"Services\", \"/services.html\", " #ifdef MQTT diff --git a/esp-link/cgiflash.c b/esp-link/cgiflash.c index d272465..8c39e36 100644 --- a/esp-link/cgiflash.c +++ b/esp-link/cgiflash.c @@ -27,16 +27,16 @@ Some flash handling cgi routines. Used for reading the existing flash and updati // Check that the header of the firmware blob looks like actual firmware... static char* ICACHE_FLASH_ATTR check_header(void *buf) { - uint8_t *cd = (uint8_t *)buf; + uint8_t *cd = (uint8_t *)buf; #ifdef CGIFLASH_DBG - uint32_t *buf32 = buf; - os_printf("%p: %08lX %08lX %08lX %08lX\n", buf, buf32[0], buf32[1], buf32[2], buf32[3]); + uint32_t *buf32 = buf; + os_printf("%p: %08lX %08lX %08lX %08lX\n", buf, buf32[0], buf32[1], buf32[2], buf32[3]); #endif - if (cd[0] != 0xEA) return "IROM magic missing"; - if (cd[1] != 4 || cd[2] > 3 || (cd[3]>>4) > 6) return "bad flash header"; - if (((uint16_t *)buf)[3] != 0x4010) return "Invalid entry addr"; - if (((uint32_t *)buf)[2] != 0) return "Invalid start offset"; - return NULL; + if (cd[0] != 0xEA) return "IROM magic missing"; + if (cd[1] != 4 || cd[2] > 3 || (cd[3]>>4) > 6) return "bad flash header"; + if (((uint16_t *)buf)[3] != 0x4010) return "Invalid entry addr"; + if (((uint32_t *)buf)[2] != 0) return "Invalid start offset"; + return NULL; } // check whether the flash map/size we have allows for OTA upgrade @@ -49,143 +49,143 @@ static char *flash_too_small = "Flash too small for OTA update"; //===== Cgi to query which firmware needs to be uploaded next int ICACHE_FLASH_ATTR cgiGetFirmwareNext(HttpdConnData *connData) { - if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. + if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. if (!canOTA()) { errorResponse(connData, 400, flash_too_small); return HTTPD_CGI_DONE; } - uint8 id = system_upgrade_userbin_check(); - httpdStartResponse(connData, 200); - httpdHeader(connData, "Content-Type", "text/plain"); - httpdHeader(connData, "Content-Length", "9"); - httpdEndHeaders(connData); - char *next = id == 1 ? "user1.bin" : "user2.bin"; - httpdSend(connData, next, -1); + uint8 id = system_upgrade_userbin_check(); + httpdStartResponse(connData, 200); + httpdHeader(connData, "Content-Type", "text/plain"); + httpdHeader(connData, "Content-Length", "9"); + httpdEndHeaders(connData); + char *next = id == 1 ? "user1.bin" : "user2.bin"; + httpdSend(connData, next, -1); DBG("Next firmware: %s (got %d)\n", next, id); - return HTTPD_CGI_DONE; + return HTTPD_CGI_DONE; } //===== Cgi that allows the firmware to be replaced via http POST int ICACHE_FLASH_ATTR cgiUploadFirmware(HttpdConnData *connData) { - if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. + if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. if (!canOTA()) { errorResponse(connData, 400, flash_too_small); return HTTPD_CGI_DONE; } - int offset = connData->post->received - connData->post->buffLen; - if (offset == 0) { - connData->cgiPrivData = NULL; - } else if (connData->cgiPrivData != NULL) { - // we have an error condition, do nothing - return HTTPD_CGI_DONE; - } - - // assume no error yet... - char *err = NULL; - int code = 400; - - // check overall size - //os_printf("FW: %d (max %d)\n", connData->post->len, FIRMWARE_SIZE); - if (connData->post->len > FIRMWARE_SIZE) err = "Firmware image too large"; - if (connData->post->buff == NULL || connData->requestType != HTTPD_METHOD_POST || - connData->post->len < 1024) err = "Invalid request"; - - // check that data starts with an appropriate header - if (err == NULL && offset == 0) err = check_header(connData->post->buff); - - // make sure we're buffering in 1024 byte chunks - if (err == NULL && offset % 1024 != 0) { - err = "Buffering problem"; - code = 500; - } - - // return an error if there is one - if (err != NULL) { + int offset = connData->post->received - connData->post->buffLen; + if (offset == 0) { + connData->cgiPrivData = NULL; + } else if (connData->cgiPrivData != NULL) { + // we have an error condition, do nothing + return HTTPD_CGI_DONE; + } + + // assume no error yet... + char *err = NULL; + int code = 400; + + // check overall size + //os_printf("FW: %d (max %d)\n", connData->post->len, FIRMWARE_SIZE); + if (connData->post->len > FIRMWARE_SIZE) err = "Firmware image too large"; + if (connData->post->buff == NULL || connData->requestType != HTTPD_METHOD_POST || + connData->post->len < 1024) err = "Invalid request"; + + // check that data starts with an appropriate header + if (err == NULL && offset == 0) err = check_header(connData->post->buff); + + // make sure we're buffering in 1024 byte chunks + if (err == NULL && offset % 1024 != 0) { + err = "Buffering problem"; + code = 500; + } + + // return an error if there is one + if (err != NULL) { DBG("Error %d: %s\n", code, err); - httpdStartResponse(connData, code); - httpdHeader(connData, "Content-Type", "text/plain"); - //httpdHeader(connData, "Content-Length", strlen(err)+2); - httpdEndHeaders(connData); - httpdSend(connData, err, -1); - httpdSend(connData, "\r\n", -1); - connData->cgiPrivData = (void *)1; - return HTTPD_CGI_DONE; - } - - // let's see which partition we need to flash and what flash address that puts us at - uint8 id = system_upgrade_userbin_check(); - int address = id == 1 ? 4*1024 // either start after 4KB boot partition - : 4*1024 + FIRMWARE_SIZE + 16*1024 + 4*1024; // 4KB boot, fw1, 16KB user param, 4KB reserved - address += offset; - - // erase next flash block if necessary - if (address % SPI_FLASH_SEC_SIZE == 0){ + httpdStartResponse(connData, code); + httpdHeader(connData, "Content-Type", "text/plain"); + //httpdHeader(connData, "Content-Length", strlen(err)+2); + httpdEndHeaders(connData); + httpdSend(connData, err, -1); + httpdSend(connData, "\r\n", -1); + connData->cgiPrivData = (void *)1; + return HTTPD_CGI_DONE; + } + + // let's see which partition we need to flash and what flash address that puts us at + uint8 id = system_upgrade_userbin_check(); + int address = id == 1 ? 4*1024 // either start after 4KB boot partition + : 4*1024 + FIRMWARE_SIZE + 16*1024 + 4*1024; // 4KB boot, fw1, 16KB user param, 4KB reserved + address += offset; + + // erase next flash block if necessary + if (address % SPI_FLASH_SEC_SIZE == 0){ DBG("Flashing 0x%05x (id=%d)\n", address, 2 - id); - spi_flash_erase_sector(address/SPI_FLASH_SEC_SIZE); - } - - // Write the data - //DBG("Writing %d bytes at 0x%05x (%d of %d)\n", connData->post->buffSize, address, - // connData->post->received, connData->post->len); - spi_flash_write(address, (uint32 *)connData->post->buff, connData->post->buffLen); - - if (connData->post->received == connData->post->len){ - httpdStartResponse(connData, 200); - httpdEndHeaders(connData); - return HTTPD_CGI_DONE; - } else { - return HTTPD_CGI_MORE; - } + spi_flash_erase_sector(address/SPI_FLASH_SEC_SIZE); + } + + // Write the data + //DBG("Writing %d bytes at 0x%05x (%d of %d)\n", connData->post->buffSize, address, + // connData->post->received, connData->post->len); + spi_flash_write(address, (uint32 *)connData->post->buff, connData->post->buffLen); + + if (connData->post->received == connData->post->len){ + httpdStartResponse(connData, 200); + httpdEndHeaders(connData); + return HTTPD_CGI_DONE; + } else { + return HTTPD_CGI_MORE; + } } static ETSTimer flash_reboot_timer; // Handle request to reboot into the new firmware int ICACHE_FLASH_ATTR cgiRebootFirmware(HttpdConnData *connData) { - if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. + if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. if (!canOTA()) { errorResponse(connData, 400, flash_too_small); return HTTPD_CGI_DONE; } - // sanity-check that the 'next' partition actually contains something that looks like - // valid firmware - uint8 id = system_upgrade_userbin_check(); - int address = id == 1 ? 4*1024 // either start after 4KB boot partition - : 4*1024 + FIRMWARE_SIZE + 16*1024 + 4*1024; // 4KB boot, fw1, 16KB user param, 4KB reserved - uint32 buf[8]; + // sanity-check that the 'next' partition actually contains something that looks like + // valid firmware + uint8 id = system_upgrade_userbin_check(); + int address = id == 1 ? 4*1024 // either start after 4KB boot partition + : 4*1024 + FIRMWARE_SIZE + 16*1024 + 4*1024; // 4KB boot, fw1, 16KB user param, 4KB reserved + uint32 buf[8]; DBG("Checking %p\n", (void *)address); - spi_flash_read(address, buf, sizeof(buf)); - char *err = check_header(buf); - if (err != NULL) { + spi_flash_read(address, buf, sizeof(buf)); + char *err = check_header(buf); + if (err != NULL) { DBG("Error %d: %s\n", 400, err); - httpdStartResponse(connData, 400); - httpdHeader(connData, "Content-Type", "text/plain"); - //httpdHeader(connData, "Content-Length", strlen(err)+2); - httpdEndHeaders(connData); - httpdSend(connData, err, -1); - httpdSend(connData, "\r\n", -1); - return HTTPD_CGI_DONE; - } - - httpdStartResponse(connData, 200); - httpdHeader(connData, "Content-Length", "0"); - httpdEndHeaders(connData); - - // Schedule a reboot - system_upgrade_flag_set(UPGRADE_FLAG_FINISH); - os_timer_disarm(&flash_reboot_timer); - os_timer_setfn(&flash_reboot_timer, (os_timer_func_t *)system_upgrade_reboot, NULL); - os_timer_arm(&flash_reboot_timer, 2000, 1); - return HTTPD_CGI_DONE; + httpdStartResponse(connData, 400); + httpdHeader(connData, "Content-Type", "text/plain"); + //httpdHeader(connData, "Content-Length", strlen(err)+2); + httpdEndHeaders(connData); + httpdSend(connData, err, -1); + httpdSend(connData, "\r\n", -1); + return HTTPD_CGI_DONE; + } + + httpdStartResponse(connData, 200); + httpdHeader(connData, "Content-Length", "0"); + httpdEndHeaders(connData); + + // Schedule a reboot + system_upgrade_flag_set(UPGRADE_FLAG_FINISH); + os_timer_disarm(&flash_reboot_timer); + os_timer_setfn(&flash_reboot_timer, (os_timer_func_t *)system_upgrade_reboot, NULL); + os_timer_arm(&flash_reboot_timer, 2000, 1); + return HTTPD_CGI_DONE; } -int ICACHE_FLASH_ATTR cgiReboot(HttpdConnData *connData) { +int ICACHE_FLASH_ATTR cgiReset(HttpdConnData *connData) { if (connData->conn == NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up. httpdStartResponse(connData, 200); @@ -193,9 +193,8 @@ int ICACHE_FLASH_ATTR cgiReboot(HttpdConnData *connData) { httpdEndHeaders(connData); // Schedule a reboot - system_upgrade_flag_set(UPGRADE_FLAG_FINISH); os_timer_disarm(&flash_reboot_timer); - os_timer_setfn(&flash_reboot_timer, (os_timer_func_t *)system_upgrade_reboot, NULL); + os_timer_setfn(&flash_reboot_timer, (os_timer_func_t *)system_restart, NULL); os_timer_arm(&flash_reboot_timer, 2000, 1); return HTTPD_CGI_DONE; } \ No newline at end of file diff --git a/esp-link/cgiflash.h b/esp-link/cgiflash.h index d8a239d..f03b8e0 100644 --- a/esp-link/cgiflash.h +++ b/esp-link/cgiflash.h @@ -7,6 +7,6 @@ int cgiReadFlash(HttpdConnData *connData); int cgiGetFirmwareNext(HttpdConnData *connData); int cgiUploadFirmware(HttpdConnData *connData); int cgiRebootFirmware(HttpdConnData *connData); -int cgiReboot(HttpdConnData *connData); +int cgiReset(HttpdConnData *connData); #endif diff --git a/esp-link/main.c b/esp-link/main.c index 8d10eef..09904e1 100644 --- a/esp-link/main.c +++ b/esp-link/main.c @@ -57,7 +57,7 @@ HttpdBuiltInUrl builtInUrls[] = { { "/pgm/upload", cgiOptibootData, NULL }, { "/log/text", ajaxLog, NULL }, { "/log/dbg", ajaxLogDbg, NULL }, - { "/log/reboot", cgiReboot, NULL }, + { "/log/reset", cgiReset, NULL }, { "/console/reset", ajaxConsoleReset, NULL }, { "/console/baud", ajaxConsoleBaud, NULL }, { "/console/text", ajaxConsole, NULL }, diff --git a/html/console.html b/html/console.html index 6f81aca..d84da72 100644 --- a/html/console.html +++ b/html/console.html @@ -6,8 +6,8 @@
Reset µC - Clear Log - Baud: + Clear Log + Baud: - Fmt: 8N1 + Fmt: 8N1
The JeeLabs esp-link firmware bridges the ESP8266 - serial port to Wifi and can + serial port to WiFI and can program microcontrollers over the serial port, in particular Arduinos, AVRs, and NXP's LPC800 and other ARM processors. Typical avrdude command line to program an Arduino:
@@ -109,8 +109,8 @@WiFi mode | |||||||||||||||||||||||||||||||
Wifi channel | |||||||||||||||||||||||||||||||
WiFI mode | |||||||||||||||||||||||||||||||
WiFI channel | |||||||||||||||||||||||||||||||
Flash chip ID |
diff --git a/html/log.html b/html/log.html
index ab5a6fe..884cf20 100644
--- a/html/log.html
+++ b/html/log.html
@@ -7,12 +7,11 @@
The debug log shows the most recent characters printed by the esp-link software itself to its own debug log.
-
diff --git a/html/wifi/wifi.html b/html/wifi/wifi.html
index afe7b2c..f6d6646 100644
--- a/html/wifi/wifi.html
+++ b/html/wifi/wifi.html
@@ -1,27 +1,27 @@
+ Refresh - Reboot esp-link - Clear Log + Reset esp-link -+ UART debug log: auto off @@ -36,22 +35,16 @@ fetchText(100, false); }); - $("#reboot-button").addEventListener("click", function (e) { + $("#reset-button").addEventListener("click", function (e) { e.preventDefault(); var co = $("#console"); co.innerHTML = ""; - ajaxSpin('POST', "/log/reboot", - function (resp) { showNotification("esp-link reset"); co.textEnd = 0; }, + ajaxSpin('POST', "/log/reset", + function (resp) { showNotification("Resetting esp-link"); co.textEnd = 0; fetchText(2000, false); }, function (s, st) { showWarning("Error resetting esp-link"); } ); }); - $("#clear-button").addEventListener("click", function (e) { - e.preventDefault(); - var co = $("#console"); - co.innerHTML = ""; - }); - ["auto", "off", "on0", "on1"].forEach(function(mode) { bnd($('#dbg-'+mode), "click", function(el) { ajaxJsonSpin('POST', "/log/dbg?mode="+mode, diff --git a/html/mqtt.html b/html/mqtt.html index 28d763c..5ccb97f 100644 --- a/html/mqtt.html +++ b/html/mqtt.html @@ -14,7 +14,7 @@ using parameters set below and stored in esp-link's flash settings. This allows esp-link to take care of connection parameters and disconnect/reconnect operations. The MQTT client also supports sending periodic status messages about esp-link itself, - including Wifi RSSI, and free heap memory. + including WiFI RSSI, and free heap memory.
diff --git a/html/services.html b/html/services.html
index 40ff3c0..3f8c548 100644
--- a/html/services.html
+++ b/html/services.html
@@ -48,7 +48,7 @@
Synology does a log rotate if timestamp is in the past so disable to prevent this
-
Wifi Configuration+WiFi Configuration
- Wifi State+WiFi State
- Wifi Association+WiFi Association |