From eb2328dfbe8df0332229d0ae5e2737908a340992 Mon Sep 17 00:00:00 2001 From: Brian Ignacio Date: Thu, 13 Mar 2025 16:31:32 +0800 Subject: [PATCH 1/2] update reset function for jtag monitor, reset on console start --- examples/typescript/src/index.ts | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/examples/typescript/src/index.ts b/examples/typescript/src/index.ts index 5c4b7738..b18c0d9d 100644 --- a/examples/typescript/src/index.ts +++ b/examples/typescript/src/index.ts @@ -25,7 +25,7 @@ const debugLogging = document.getElementById("debugLogging") as HTMLInputElement // This is a frontend example of Esptool-JS using local bundle file // To optimize use a CDN hosted version like // https://unpkg.com/esptool-js@0.5.0/bundle.js -import { ESPLoader, FlashOptions, LoaderOptions, Transport } from "../../../lib"; +import { ESPLoader, FlashOptions, LoaderOptions, Transport, UsbJtagSerialReset } from "../../../lib"; import { serial } from "web-serial-polyfill"; const serialLib = !navigator.serial && navigator.usb ? serial : navigator.serial; @@ -125,13 +125,31 @@ traceButton.onclick = async () => { } }; -resetButton.onclick = async () => { - if (transport) { +const resetFunction = async () => { + // if (transport) { + // await transport.setDTR(false); + // await new Promise((resolve) => setTimeout(resolve, 100)); + // await transport.setDTR(true); + // } + if (!transport) { + return; + } + if ((navigator as any).serial !== undefined) { // WebSerial await transport.setDTR(false); - await new Promise((resolve) => setTimeout(resolve, 100)); + await transport.sleep(100); await transport.setDTR(true); + } else { // WebUSB polyfill + new UsbJtagSerialReset(transport).reset(); + await transport.sleep(100); + // can also use SerialReset twice, but then the chip gets reset 1.5 times + await transport.setRTS(false); + await transport.setDTR(false); + await transport.sleep(100); + await transport.setDTR(true); + await transport.setRTS(false); } }; +resetButton.onclick = resetFunction eraseButton.onclick = async () => { eraseButton.disabled = true; @@ -247,7 +265,8 @@ consoleStartButton.onclick = async () => { await transport.connect(parseInt(consoleBaudrates.value)); isConsoleClosed = false; - + await transport.sleep(100); // Android JTAG needs some time to wake up + await resetFunction(); while (true && !isConsoleClosed) { const readLoop = transport.rawRead(); const { value, done } = await readLoop.next(); From f6982ea3bec7a52122056d0ffb1f730e85530bb3 Mon Sep 17 00:00:00 2001 From: Brian Ignacio Date: Thu, 13 Mar 2025 16:32:07 +0800 Subject: [PATCH 2/2] fix lint --- examples/typescript/src/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/typescript/src/index.ts b/examples/typescript/src/index.ts index b18c0d9d..4349eafa 100644 --- a/examples/typescript/src/index.ts +++ b/examples/typescript/src/index.ts @@ -134,11 +134,13 @@ const resetFunction = async () => { if (!transport) { return; } - if ((navigator as any).serial !== undefined) { // WebSerial + if ((navigator as any).serial !== undefined) { + // WebSerial await transport.setDTR(false); await transport.sleep(100); await transport.setDTR(true); - } else { // WebUSB polyfill + } else { + // WebUSB polyfill new UsbJtagSerialReset(transport).reset(); await transport.sleep(100); // can also use SerialReset twice, but then the chip gets reset 1.5 times @@ -149,7 +151,7 @@ const resetFunction = async () => { await transport.setRTS(false); } }; -resetButton.onclick = resetFunction +resetButton.onclick = resetFunction; eraseButton.onclick = async () => { eraseButton.disabled = true;