webflasher serial passthrough, work in progress, turned off for now

This commit is contained in:
Nic Limper
2024-02-24 12:46:27 +01:00
parent 0dd3a8459b
commit c0e59dadb4
6 changed files with 57 additions and 19 deletions

View File

@@ -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

View File

@@ -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");

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -747,7 +747,7 @@ document.addEventListener("loadTab", function (event) {
loadOTA();
break;
case 'flashtab':
$('#flashconsole').innerHTML = '';
// $('#flashconsole').innerHTML = '';
loadFlash();
break;
}