From 2ed745673ca4d2915e08fc25e18854b081ad1c22 Mon Sep 17 00:00:00 2001 From: Brian Ignacio Date: Tue, 22 Nov 2022 12:38:50 +0800 Subject: [PATCH] update esploader file name fix lint rm webserial js --- .github/workflows/publish.yml | 6 +- src/{espLoader.ts => esploader.ts} | 4 +- src/index.ts | 2 +- src/targets/esp32.ts | 14 +-- src/targets/esp32c3.ts | 16 +-- src/targets/esp32s2.ts | 10 +- src/targets/esp32s3.ts | 12 +- src/targets/esp8266.ts | 12 +- webserial.js | 194 ----------------------------- 9 files changed, 40 insertions(+), 230 deletions(-) rename src/{espLoader.ts => esploader.ts} (99%) delete mode 100644 webserial.js diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3689298..621dcbd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -14,14 +14,16 @@ jobs: registry-url: 'https://registry.npmjs.org' - name: Install dependencies and build 🔧 run: npm ci && npm run build + - name: Run lint + run: npm run lint - name: Run tests run: npm run test - - name: Package .vsix + - name: Package module run: npm pack - name: Determine version id: version run: "echo ::set-output name=version::${GITHUB_REF:11}" - - name: Upload .vsix File + - name: Upload npm package file uses: actions/upload-artifact@v1 with: name: esptool-js-${{ steps.version.outputs.version }}.tgz diff --git a/src/espLoader.ts b/src/esploader.ts similarity index 99% rename from src/espLoader.ts rename to src/esploader.ts index e2ddd0d..3822874 100644 --- a/src/espLoader.ts +++ b/src/esploader.ts @@ -307,6 +307,7 @@ export class ESPLoader { while (i--) { try { const resp = await this.sync(); + this.log(resp[0].toString(0)); return "success"; } catch (error) { this.log(error); @@ -727,6 +728,7 @@ export class ESPLoader { const second_arg = this.IS_STUB ? this.transport.baudrate : 0; const pkt = this._appendArray(this._int_to_bytearray(this.baudrate), this._int_to_bytearray(second_arg)); const resp = await this.command(this.ESP_CHANGE_BAUDRATE, pkt); + this.log(resp[0].toString()); this.log("Changed"); await this.transport.disconnect(); await this._sleep(50); @@ -893,7 +895,7 @@ export class ESPLoader { } let seq = 0; let bytes_sent = 0; - const bytes_written = 0; + // const bytes_written = 0; const totalBytes = image.length; if (reportProgress) reportProgress(i, 0, totalBytes); diff --git a/src/index.ts b/src/index.ts index 2f01753..227e0f8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,2 @@ -export { IEspLoaderTerminal, ESPLoader } from "./esploader"; +export { IEspLoaderTerminal, ESPLoader, ESPBinFile } from "./esploader"; export { Transport } from "./webserial"; diff --git a/src/targets/esp32.ts b/src/targets/esp32.ts index 5a314c4..b0c75f0 100644 --- a/src/targets/esp32.ts +++ b/src/targets/esp32.ts @@ -100,14 +100,14 @@ export default class ESP32ROM extends ROM { const addr = this.EFUSE_RD_REG_BASE + 4 * offset; loader.log("Read efuse " + addr); return await loader.read_reg(addr); - }; + } public async get_pkg_version(loader: ESPLoader) { const word3 = await this.read_efuse(loader, 3); let pkg_version = (word3 >> 9) & 0x07; pkg_version += ((word3 >> 2) & 0x1) << 3; return pkg_version; - }; + } public async get_chip_revision(loader: ESPLoader) { const word3 = await this.read_efuse(loader, 3); @@ -129,7 +129,7 @@ export default class ESP32ROM extends ROM { } } return 0; - }; + } public async get_chip_description(loader: ESPLoader) { const chip_desc = [ @@ -164,7 +164,7 @@ export default class ESP32ROM extends ROM { chip_name += "-V3"; } return chip_name + " (revision " + chip_revision + ")"; - }; + } public async get_chip_features(loader: ESPLoader) { const features = ["Wi-Fi"]; @@ -218,7 +218,7 @@ export default class ESP32ROM extends ROM { features.push(" Coding Scheme " + coding_scheme_arr[coding_scheme]); return features; - }; + } public async get_crystal_freq(loader: ESPLoader) { const uart_div = (await loader.read_reg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK; @@ -233,7 +233,7 @@ export default class ESP32ROM extends ROM { loader.log("WARNING: Unsupported crystal in use"); } return norm_xtal; - }; + } public _d2h(d: number) { const h = (+d).toString(16); @@ -266,5 +266,5 @@ export default class ESP32ROM extends ROM { ":" + this._d2h(mac[5]) ); - }; + } } diff --git a/src/targets/esp32c3.ts b/src/targets/esp32c3.ts index 9967e7f..77eefdf 100644 --- a/src/targets/esp32c3.ts +++ b/src/targets/esp32c3.ts @@ -101,7 +101,7 @@ export default class ESP32C3ROM extends ROM { const word3 = await loader.read_reg(addr); const pkg_version = (word3 >> 21) & 0x07; return pkg_version; - }; + } public async get_chip_revision(loader: ESPLoader) { const block1_addr = this.EFUSE_BASE + 0x044; @@ -110,10 +110,10 @@ export default class ESP32C3ROM extends ROM { const addr = block1_addr + 4 * num_word; const ret = ((await loader.read_reg(addr)) & (0x7 << pos)) >> pos; return ret; - }; + } public async get_chip_description(loader: ESPLoader) { - let desc; + let desc: string; const pkg_ver = await this.get_pkg_version(loader); if (pkg_ver === 0) { desc = "ESP32-C3"; @@ -123,15 +123,15 @@ export default class ESP32C3ROM extends ROM { const chip_rev = await this.get_chip_revision(loader); desc += " (revision " + chip_rev + ")"; return desc; - }; + } public async get_chip_features(loader: ESPLoader) { return ["Wi-Fi"]; - }; + } public async get_crystal_freq(loader: ESPLoader) { return 40; - }; + } public _d2h(d: number) { const h = (+d).toString(16); @@ -164,9 +164,9 @@ export default class ESP32C3ROM extends ROM { ":" + this._d2h(mac[5]) ); - }; + } public get_erase_size(offset: number, size: number) { return size; - }; + } } diff --git a/src/targets/esp32s2.ts b/src/targets/esp32s2.ts index 9812c58..814fdc7 100644 --- a/src/targets/esp32s2.ts +++ b/src/targets/esp32s2.ts @@ -111,7 +111,7 @@ export default class ESP32S2ROM extends ROM { const word3 = await loader.read_reg(addr); const pkg_version = (word3 >> 21) & 0x0f; return pkg_version; - }; + } public async get_chip_description(loader: ESPLoader) { const chip_desc = ["ESP32-S2", "ESP32-S2FH16", "ESP32-S2FH32"]; @@ -121,7 +121,7 @@ export default class ESP32S2ROM extends ROM { } else { return "unknown ESP32-S2"; } - }; + } public async get_chip_features(loader: ESPLoader) { const features = ["Wi-Fi"]; @@ -141,11 +141,11 @@ export default class ESP32S2ROM extends ROM { features.push("ADC and temperature sensor calibration in BLK2 of efuse"); } return features; - }; + } public async get_crystal_freq(loader: ESPLoader) { return 40; - }; + } public _d2h(d: number) { const h = (+d).toString(16); return h.length === 1 ? "0" + h : h; @@ -176,7 +176,7 @@ export default class ESP32S2ROM extends ROM { ":" + this._d2h(mac[5]) ); - }; + } public get_erase_size(offset: number, size: number) { return size; diff --git a/src/targets/esp32s3.ts b/src/targets/esp32s3.ts index fe38ea9..4274f3d 100644 --- a/src/targets/esp32s3.ts +++ b/src/targets/esp32s3.ts @@ -121,13 +121,13 @@ export default class ESP32S3ROM extends ROM { public async get_chip_description(loader: ESPLoader) { return "ESP32-S3"; - }; + } public async get_chip_features(loader: ESPLoader) { return ["Wi-Fi", "BLE"]; - }; + } public async get_crystal_freq(loader: ESPLoader) { return 40; - }; + } public _d2h(d: number) { const h = (+d).toString(16); return h.length === 1 ? "0" + h : h; @@ -139,7 +139,7 @@ export default class ESP32S3ROM extends ROM { if (buf_no == this.UARTDEV_BUF_NO_USB) { loader.ESP_RAM_BLOCK = this.USB_RAM_BLOCK; } - }; + } public async read_mac(loader: ESPLoader) { let mac0 = await loader.read_reg(this.MAC_EFUSE_REG); @@ -167,9 +167,9 @@ export default class ESP32S3ROM extends ROM { ":" + this._d2h(mac[5]) ); - }; + } public get_erase_size(offset: number, size: number) { return size; - }; + } } diff --git a/src/targets/esp8266.ts b/src/targets/esp8266.ts index 716af2f..f34a76a 100644 --- a/src/targets/esp8266.ts +++ b/src/targets/esp8266.ts @@ -187,9 +187,9 @@ export default class ESP8266ROM extends ROM { public async read_efuse(loader: ESPLoader, offset: number) { const addr = this.EFUSE_RD_REG_BASE + 4 * offset; - console.log("Read efuse " + addr); + loader.log("Read efuse " + addr); return await loader.read_reg(addr); - }; + } public async get_chip_description(loader: ESPLoader) { const efuse3 = await this.read_efuse(loader, 2); @@ -197,7 +197,7 @@ export default class ESP8266ROM extends ROM { const is_8285 = ((efuse0 & (1 << 4)) | (efuse3 & (1 << 16))) != 0; // One or the other efuse bit is set for ESP8285 return is_8285 ? "ESP8285" : "ESP8266EX"; - }; + } public get_chip_features = async (loader: ESPLoader) => { const features = ["WiFi"]; @@ -224,7 +224,7 @@ export default class ESP8266ROM extends ROM { ); } return norm_xtal; - }; + } public _d2h(d: number) { const h = (+d).toString(16); @@ -273,9 +273,9 @@ export default class ESP8266ROM extends ROM { ":" + this._d2h(mac[5]) ); - }; + } public get_erase_size(offset: number, size: number) { return size; - }; + } } diff --git a/webserial.js b/webserial.js deleted file mode 100644 index 46e0fa3..0000000 --- a/webserial.js +++ /dev/null @@ -1,194 +0,0 @@ -import { TimeoutError } from "./error.js"; - -class Transport { - constructor(device) { - this.device = device; - this.slip_reader_enabled = false; - this.left_over = new Uint8Array(0); - } - - get_info(){ - const info = this.device.getInfo(); - return "WebSerial VendorID 0x"+info.usbVendorId.toString(16)+ " ProductID 0x"+info.usbProductId.toString(16); - } - - slip_writer(data) { - var count_esc = 0; - var i = 0, j = 0; - - for (i = 0; i < data.length; i++) { - if (data[i] === 0xC0 || data[i] === 0xDB) { - count_esc++; - } - } - var out_data = new Uint8Array(2 + count_esc + data.length); - out_data[0] = 0xC0; - j = 1; - for (i = 0; i < data.length; i++, j++) { - if (data[i] === 0xC0) { - out_data[j++] = 0xDB; - out_data[j] = 0xDC; - continue; - } - if (data[i] === 0xDB) { - out_data[j++] = 0xDB; - out_data[j] = 0xDD; - continue; - } - - out_data[j] = data[i]; - } - out_data[j] = 0xC0; - return out_data; - } - - async write(data) { - const writer = this.device.writable.getWriter(); - var out_data = this.slip_writer(data); - - await writer.write(out_data.buffer); - writer.releaseLock(); - } - - _appendBuffer(buffer1, buffer2) { - var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength); - tmp.set(new Uint8Array(buffer1), 0); - tmp.set(new Uint8Array(buffer2), buffer1.byteLength); - return tmp.buffer; - } - - /* this function expects complete packet (hence reader reads for atleast 8 bytes. This function is - * stateless and returns the first wellformed packet only after replacing escape sequence */ - slip_reader(data) { - var i = 0; - var data_start = 0, data_end = 0; - var state = "init"; - var packet, temp_pkt; - while (i < data.length) { - if (state === "init" && data[i] == 0xC0) { - data_start = i + 1; - state = "valid_data"; - i++; - continue; - } - if (state === "valid_data" && data[i] == 0xC0) { - data_end = i - 1; - state = "packet_complete"; - break; - } - i++; - } - if (state !== "packet_complete") { - this.left_over = data; - return new Uint8Array(0); - } - - this.left_over = data.slice(data_end + 2); - var temp_pkt = new Uint8Array(data_end - data_start + 1); - var j = 0; - for (i = data_start; i <= data_end; i++, j++) { - if (data[i] === 0xDB && data[i+1] === 0xDC) { - temp_pkt[j] = 0xC0; - i++; - continue; - } - if (data[i] === 0xDB && data[i+1] === 0xDD) { - temp_pkt[j] = 0xDB; - i++; - continue; - } - temp_pkt[j] = data[i]; - } - packet = temp_pkt.slice(0, j); /* Remove unused bytes due to escape seq */ - return packet; - } - - async read({timeout=0, min_data=12} = {}) { - console.log("Read with timeout " + timeout); - let t; - let packet = this.left_over; - this.left_over = new Uint8Array(0); - if (this.slip_reader_enabled) { - const val_final = this.slip_reader(packet); - if (val_final.length > 0) { - return val_final; - } - packet = this.left_over; - this.left_over = new Uint8Array(0); - } - - const reader = this.device.readable.getReader(); - try { - if (timeout > 0) { - t = setTimeout(function() { - reader.cancel(); - }, timeout); - } - do { - const {value, done} = await reader.read(); - if (done) { - this.left_over = packet; - throw new TimeoutError("Timeout"); - } - var p = new Uint8Array(this._appendBuffer(packet.buffer, value.buffer)); - packet = p; - } while (packet.length < min_data); - } finally { - if (timeout > 0) { - clearTimeout(t); - } - reader.releaseLock(); - } - if (this.slip_reader_enabled) { - return this.slip_reader(packet); - } - return packet; - } - - async rawRead({timeout=0} = {}) { - if (this.left_over.length != 0) { - const p = this.left_over; - this.left_over = new Uint8Array(0); - return p; - } - const reader = this.device.readable.getReader(); - let t; - try { - if (timeout > 0) { - t = setTimeout(function() { - reader.cancel(); - }, timeout); - } - const {value, done} = await reader.read(); - if (done) { - throw new TimeoutError("Timeout"); - } - return value; - } finally { - if (timeout > 0) { - clearTimeout(t); - } - reader.releaseLock(); - } - } - - async setRTS(state) { - await this.device.setSignals({requestToSend:state}); - } - - async setDTR(state) { - await this.device.setSignals({dataTerminalReady:state}); - } - - async connect({baud=115200} = {}) { - await this.device.open({baudRate: baud}); - this.baudrate = baud; - this.left_over = new Uint8Array(0); - } - - async disconnect() { - await this.device.close(); - } -} - -export { Transport };