From c0e59dadb497ed812c8f08c64ad01e2060e5ff2a Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Sat, 24 Feb 2024 12:46:27 +0100 Subject: [PATCH] webflasher serial passthrough, work in progress, turned off for now --- ESP32_AP-Flasher/platformio.ini | 4 ++-- ESP32_AP-Flasher/src/main.cpp | 2 +- ESP32_AP-Flasher/src/powermgt.cpp | 2 +- ESP32_AP-Flasher/src/usbflasher.cpp | 34 ++++++++++++++++++++++------- ESP32_AP-Flasher/src/webflasher.cpp | 32 ++++++++++++++++++++++----- ESP32_AP-Flasher/wwwroot/main.js | 2 +- 6 files changed, 57 insertions(+), 19 deletions(-) diff --git a/ESP32_AP-Flasher/platformio.ini b/ESP32_AP-Flasher/platformio.ini index fb362a10..1d2bf26a 100644 --- a/ESP32_AP-Flasher/platformio.ini +++ b/ESP32_AP-Flasher/platformio.ini @@ -404,8 +404,8 @@ build_flags = -D FLASHER_EXT_MISO=42 -D FLASHER_EXT_RESET=5 -D FLASHER_EXT_POWER={6} - -D FLASHER_EXT_TXD=39 - -D FLASHER_EXT_RXD=38 + -D FLASHER_EXT_TXD=38 + -D FLASHER_EXT_RXD=39 -D FLASHER_EXT_TEST=4 -D FLASHER_ALT_SS=-1 -D FLASHER_ALT_CLK=-1 diff --git a/ESP32_AP-Flasher/src/main.cpp b/ESP32_AP-Flasher/src/main.cpp index d48620e2..9960e7ed 100644 --- a/ESP32_AP-Flasher/src/main.cpp +++ b/ESP32_AP-Flasher/src/main.cpp @@ -47,7 +47,7 @@ void delayedStart(void* parameter) { void setup() { Serial.begin(115200); -#ifdef ARDUINO_USB_CDC_ON_BOOT +#if ARDUINO_USB_CDC_ON_BOOT == 1 Serial.setTxTimeoutMs(0); // workaround bug in USB CDC that slows down serial output when no usb connected #endif Serial.print(">\n"); diff --git a/ESP32_AP-Flasher/src/powermgt.cpp b/ESP32_AP-Flasher/src/powermgt.cpp index b6a50c1c..f408f992 100644 --- a/ESP32_AP-Flasher/src/powermgt.cpp +++ b/ESP32_AP-Flasher/src/powermgt.cpp @@ -81,7 +81,7 @@ void powerControl(bool powerState, uint8_t* pin, uint8_t pincount) { if (pin == nullptr) return; static bool currentState = false; - if (currentState == true && powerState == true) return; + if (currentState == powerState) return; currentState = powerState; #ifdef POWER_RAMPING diff --git a/ESP32_AP-Flasher/src/usbflasher.cpp b/ESP32_AP-Flasher/src/usbflasher.cpp index f1fbaac6..db4e755e 100644 --- a/ESP32_AP-Flasher/src/usbflasher.cpp +++ b/ESP32_AP-Flasher/src/usbflasher.cpp @@ -226,7 +226,7 @@ void flasherDataHandler(uint8_t* data, size_t len, uint8_t transportType) { void resetFlasherState() { if (serialPassthroughState) { - Serial0.end(); + Serial2.end(); } serialPassthroughState = false; } @@ -280,7 +280,7 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve uint8_t buf[data->rx.len]; size_t len = cmdSerial.read(buf, data->rx.len); if (serialPassthroughState) { - Serial0.write(buf, len); + Serial2.write(buf, len); } else { flasherDataHandler(buf, len, TRANSPORT_USB); } @@ -581,7 +581,13 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) { break; case CMD_PASS_THROUGH: wsSerial("> pass through"); - Serial0.begin(115200, SERIAL_8N1, FLASHER_EXT_RXD, FLASHER_EXT_TXD); + + extern bool rxSerialStopTask2; + rxSerialStopTask2 = true; + vTaskDelay(500 / portTICK_PERIOD_MS); + + if (Serial2) Serial2.end(); + Serial2.begin(115200, SERIAL_8N1, FLASHER_EXT_RXD, FLASHER_EXT_TXD); cmdSerial.println(">>>"); serialPassthroughState = true; break; @@ -616,16 +622,28 @@ void flasherCommandTimeout() { } void tagDebugPassthrough() { - uint16_t len = Serial0.available(); + // static String accumulatedData = ""; + // static unsigned long flushTimer = 0; + uint16_t len = Serial2.available(); + if (len > 0) { uint8_t* buf = (uint8_t*)malloc(len); - Serial0.read(buf, len); - Serial.write(buf, len); + Serial2.readBytes(buf, len); + cmdSerial.printf("%d bytes: ", len); cmdSerial.write(buf, len); - String dataString((char*)buf, len); - wsSerial(dataString, "cyan"); + cmdSerial.print("\n"); + //String dataString((char*)buf, len); + //wsSerial(dataString, "cyan"); + // accumulatedData += dataString; free(buf); } + /* + if (millis() - flushTimer > 500 && accumulatedData.length() > 0) { + // wsSerial("*", "cyan"); + flushTimer = millis(); + accumulatedData = ""; + } + */ } #ifdef HAS_USB diff --git a/ESP32_AP-Flasher/src/webflasher.cpp b/ESP32_AP-Flasher/src/webflasher.cpp index 451f9b25..035d1c7a 100644 --- a/ESP32_AP-Flasher/src/webflasher.cpp +++ b/ESP32_AP-Flasher/src/webflasher.cpp @@ -445,21 +445,23 @@ void webFlasherTask(void* parameter) { } case AUTOFLASH_USBFLASHER_RUNNING: { - vTaskDelay(500 / portTICK_PERIOD_MS); break; } case AUTOFLASH_END_USBFLASHER: { autoFlashStep = AUTOFLASH_STEP_FINISHED; + break; } } + /* work in progress if (serialPassthroughState) { tagDebugPassthrough(); vTaskDelay(1 / portTICK_PERIOD_MS); } else { + */ vTaskDelay(100 / portTICK_PERIOD_MS); - } + // } } } @@ -508,20 +510,38 @@ void handleWSdata(uint8_t* data, size_t len, AsyncWebSocketClient* client) { break; case WEBFLASH_POWER_ON: { wsSerial("Power up", "yellow"); + + extern bool rxSerialStopTask2; + if (rxSerialStopTask2 == false) { + rxSerialStopTask2 = true; + vTaskDelay(500 / portTICK_PERIOD_MS); + } + int8_t powerPins2[] = FLASHER_EXT_POWER; uint8_t numPowerPins = sizeof(powerPins2); powerControl(true, (uint8_t*)powerPins2, numPowerPins); - Serial0.begin(115200, SERIAL_8N1, FLASHER_EXT_RXD, FLASHER_EXT_TXD); + /* work in progress + if (Serial2) Serial2.end(); + Serial2.begin(115200, SERIAL_8N1, FLASHER_EXT_RXD, FLASHER_EXT_TXD); Serial.println(">>>"); serialPassthroughState = true; + */ break; } case WEBFLASH_POWER_OFF: { wsSerial("Power down", "yellow"); - serialPassthroughState = false; - vTaskDelay(50 / portTICK_PERIOD_MS); - if (Serial0) Serial0.end(); + if (serialPassthroughState) { + serialPassthroughState = false; + vTaskDelay(500 / portTICK_PERIOD_MS); + } + extern bool rxSerialStopTask2; + if (rxSerialStopTask2 == false) { + rxSerialStopTask2 = true; + vTaskDelay(500 / portTICK_PERIOD_MS); + } + + if (Serial2) Serial2.end(); pinMode(FLASHER_EXT_MISO, INPUT); pinMode(FLASHER_EXT_CLK, INPUT); pinMode(FLASHER_EXT_TEST, INPUT); diff --git a/ESP32_AP-Flasher/wwwroot/main.js b/ESP32_AP-Flasher/wwwroot/main.js index 8164dc5f..957f7da4 100644 --- a/ESP32_AP-Flasher/wwwroot/main.js +++ b/ESP32_AP-Flasher/wwwroot/main.js @@ -747,7 +747,7 @@ document.addEventListener("loadTab", function (event) { loadOTA(); break; case 'flashtab': - $('#flashconsole').innerHTML = ''; + // $('#flashconsole').innerHTML = ''; loadFlash(); break; }