add review changes

This commit is contained in:
Brian Ignacio 2022-11-22 12:35:34 +08:00
parent 3679e3b4d2
commit 3154aa9439
14 changed files with 95 additions and 107 deletions

View File

@ -13,7 +13,7 @@ jobs:
node-version: '14.x'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies and build 🔧
run: npm install && npm run build
run: npm ci && npm run build
- name: Run tests
run: npm run test
- name: Package .vsix

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -17,7 +17,7 @@ const table = document.getElementById('fileTable');
const alertDiv = document.getElementById('alertDiv');
// import { Transport } from './cp210x-webusb.js'
import esptooljs from "./bundle.js";
import * as esptooljs from "./bundle.js";
const ESPLoader = esptooljs.ESPLoader;
const Transport = esptooljs.Transport;
@ -78,16 +78,16 @@ function _sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function terminalClearFn() {
term.clear();
}
function terminalWrite(data) {
term.write(data);
}
function terminalWriteLn(data) {
term.writeln(data);
let espLoaderTerminal = {
clean() {
term.clear();
},
writeLine(data) {
term.writeln(data);
},
write(data) {
term.write(data)
}
}
connectButton.onclick = async () => {
@ -101,7 +101,7 @@ connectButton.onclick = async () => {
}
try {
esploader = new ESPLoader(transport, baudrates.value, terminalClearFn, terminalWriteLn, terminalWrite);
esploader = new ESPLoader(transport, baudrates.value, espLoaderTerminal);
connected = true;
chip = await esploader.main_fn();

29
package-lock.json generated
View File

@ -10,6 +10,7 @@
"dependencies": {
"crypto-js": "^4.0.0",
"pako": "^2.1.0",
"tslib": "^2.4.1",
"xterm": "^4.13.0"
},
"devDependencies": {
@ -3333,10 +3334,9 @@
}
},
"node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
},
"node_modules/tsutils": {
"version": "3.21.0",
@ -3353,6 +3353,12 @@
"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
}
},
"node_modules/tsutils/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
},
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@ -5982,10 +5988,9 @@
}
},
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
},
"tsutils": {
"version": "3.21.0",
@ -5994,6 +5999,14 @@
"dev": true,
"requires": {
"tslib": "^1.8.1"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"type-check": {

View File

@ -29,6 +29,7 @@
"dependencies": {
"crypto-js": "^4.0.0",
"pako": "^2.1.0",
"tslib": "^2.4.1",
"xterm": "^4.13.0"
},
"devDependencies": {

View File

@ -17,12 +17,18 @@ const MAGIC_TO_CHIP: { [key: number]: ROM } = {
0xfff0c101: new ESP8266ROM(),
};
interface ESPBinFile {
export interface ESPBinFile {
data: string;
address: number;
}
class ESPLoader {
export interface IEspLoaderTerminal {
clean: () => void;
writeLine: (data: string) => void;
write: (data: string) => void;
}
export class ESPLoader {
ESP_RAM_BLOCK = 0x1800;
ESP_FLASH_BEGIN = 0x02;
ESP_FLASH_DATA = 0x03;
@ -76,17 +82,14 @@ class ESPLoader {
constructor(
public transport: Transport,
private baudrate: number,
private terminalCleanFn: () => void,
private terminalWriteLineFn: (data: string) => void,
private terminalWriteFn: (data: string) => void,
private terminal: IEspLoaderTerminal,
private rom_baudrate = 115200,
) {
this.IS_STUB = false;
this.chip = new ESP32ROM();
this.chip = null;
this.FLASH_WRITE_SIZE = 0x4000;
if (this.terminalCleanFn) {
this.terminalCleanFn();
if (this.terminal) {
this.terminal.clean();
}
this.log("esptool.js v0.1-dev");
@ -98,16 +101,16 @@ class ESPLoader {
}
log(str: string) {
if (this.terminalWriteLineFn) {
this.terminalWriteLineFn(str);
if (this.terminal) {
this.terminal.writeLine(str);
} else {
// eslint-disable-next-line no-console
console.log(str);
}
}
write_char(str: string) {
if (this.terminalWriteFn) {
this.terminalWriteFn(str);
if (this.terminal) {
this.terminal.write(str);
} else {
// eslint-disable-next-line no-console
console.log(str);
@ -1004,5 +1007,3 @@ class ESPLoader {
}
}
}
export default ESPLoader;

View File

@ -1,4 +1,2 @@
import ESPLoader from "./espLoader";
import { Transport } from "./webserial";
export default { ESPLoader, Transport };
export { IEspLoaderTerminal, ESPLoader } from "./esploader";
export { Transport } from "./webserial";

View File

@ -1,4 +1,4 @@
import ESPLoader from "../espLoader";
import { ESPLoader } from "../esploader";
import { ROM } from "./rom";
export default class ESP32ROM extends ROM {
@ -96,20 +96,20 @@ export default class ESP32ROM extends ROM {
"YjiDW+mNANzr1LUT2ElJKyOShBjc24Bubh7Lmjp/Eifg5awjAiP9ZbJfx620qNfq" +
"wqvdldrZOj9LCYJ8mer+L0DR4a0UDQAA";
public read_efuse = async (loader: ESPLoader, offset: number) => {
public async read_efuse(loader: ESPLoader, offset: number) {
const addr = this.EFUSE_RD_REG_BASE + 4 * offset;
loader.log("Read efuse " + addr);
return await loader.read_reg(addr);
};
public get_pkg_version = async (loader: ESPLoader) => {
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 get_chip_revision = async (loader: ESPLoader) => {
public async get_chip_revision(loader: ESPLoader) {
const word3 = await this.read_efuse(loader, 3);
const word5 = await this.read_efuse(loader, 5);
const apb_ctl_date = await loader.read_reg(this.DR_REG_SYSCON_BASE + 0x7c);
@ -131,7 +131,7 @@ export default class ESP32ROM extends ROM {
return 0;
};
public get_chip_description = async (loader: ESPLoader) => {
public async get_chip_description(loader: ESPLoader) {
const chip_desc = [
"ESP32-D0WDQ6",
"ESP32-D0WD",
@ -166,7 +166,7 @@ export default class ESP32ROM extends ROM {
return chip_name + " (revision " + chip_revision + ")";
};
public get_chip_features = async (loader: ESPLoader) => {
public async get_chip_features(loader: ESPLoader) {
const features = ["Wi-Fi"];
const word3 = await this.read_efuse(loader, 3);
@ -220,7 +220,7 @@ export default class ESP32ROM extends ROM {
return features;
};
public get_crystal_freq = async (loader: ESPLoader) => {
public async get_crystal_freq(loader: ESPLoader) {
const uart_div = (await loader.read_reg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK;
const ets_xtal = (loader.transport.baudrate * uart_div) / 1000000 / this.XTAL_CLK_DIVIDER;
let norm_xtal;
@ -240,7 +240,7 @@ export default class ESP32ROM extends ROM {
return h.length === 1 ? "0" + h : h;
}
public read_mac = async (loader: ESPLoader) => {
public async read_mac(loader: ESPLoader) {
let mac0 = await this.read_efuse(loader, 1);
mac0 = mac0 >>> 0;
let mac1 = await this.read_efuse(loader, 2);

View File

@ -1,4 +1,4 @@
import ESPLoader from "../espLoader";
import { ESPLoader } from "../esploader";
import { ROM } from "./rom";
export default class ESP32C3ROM extends ROM {
@ -94,7 +94,7 @@ export default class ESP32C3ROM extends ROM {
"pnltVv+9jvHXkU4sXKfxG0NqhL7U68N6/PpKeyfjl0o+XMA5N/wc9+g6UfWl9s83" +
"J279YCuxbUpfYBg26DI+z0jM/CCTyLqft1P4h/4HprTSLAwNAAA=";
public get_pkg_version = async (loader: ESPLoader) => {
public async get_pkg_version(loader: ESPLoader) {
const num_word = 3;
const block1_addr = this.EFUSE_BASE + 0x044;
const addr = block1_addr + 4 * num_word;
@ -103,7 +103,7 @@ export default class ESP32C3ROM extends ROM {
return pkg_version;
};
public get_chip_revision = async (loader: ESPLoader) => {
public async get_chip_revision(loader: ESPLoader) {
const block1_addr = this.EFUSE_BASE + 0x044;
const num_word = 3;
const pos = 18;
@ -112,7 +112,7 @@ export default class ESP32C3ROM extends ROM {
return ret;
};
public get_chip_description = async (loader: ESPLoader) => {
public async get_chip_description(loader: ESPLoader) {
let desc;
const pkg_ver = await this.get_pkg_version(loader);
if (pkg_ver === 0) {
@ -125,11 +125,11 @@ export default class ESP32C3ROM extends ROM {
return desc;
};
public get_chip_features = async (loader: ESPLoader) => {
public async get_chip_features(loader: ESPLoader) {
return ["Wi-Fi"];
};
public get_crystal_freq = async (loader: ESPLoader) => {
public async get_crystal_freq(loader: ESPLoader) {
return 40;
};
@ -138,7 +138,7 @@ export default class ESP32C3ROM extends ROM {
return h.length === 1 ? "0" + h : h;
}
public read_mac = async (loader: ESPLoader) => {
public async read_mac(loader: ESPLoader) {
let mac0 = await loader.read_reg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.read_reg(this.MAC_EFUSE_REG + 4);
@ -166,7 +166,7 @@ export default class ESP32C3ROM extends ROM {
);
};
public get_erase_size = function (offset: number, size: number) {
public get_erase_size(offset: number, size: number) {
return size;
};
}

View File

@ -1,4 +1,4 @@
import ESPLoader from "../espLoader";
import { ESPLoader } from "../esploader";
import { ROM } from "./rom";
export default class ESP32S2ROM extends ROM {
@ -104,7 +104,7 @@ export default class ESP32S2ROM extends ROM {
"5lUGBV+inIf/Am8w8EfhMoci6RMleHnQiuD71XzwevARlL/cmi84gg9/L+TC1aFI" +
"PhaAOeuxgvFPCyIcXl5oXscBJKBdOTgbirB0QdA+obr/HyfMWQisDwAA";
public get_pkg_version = async (loader: ESPLoader) => {
public async get_pkg_version(loader: ESPLoader) {
const num_word = 3;
const block1_addr = this.EFUSE_BASE + 0x044;
const addr = block1_addr + 4 * num_word;
@ -113,7 +113,7 @@ export default class ESP32S2ROM extends ROM {
return pkg_version;
};
public get_chip_description = async (loader: ESPLoader) => {
public async get_chip_description(loader: ESPLoader) {
const chip_desc = ["ESP32-S2", "ESP32-S2FH16", "ESP32-S2FH32"];
const pkg_ver = await this.get_pkg_version(loader);
if (pkg_ver >= 0 && pkg_ver <= 2) {
@ -123,7 +123,7 @@ export default class ESP32S2ROM extends ROM {
}
};
public get_chip_features = async (loader: ESPLoader) => {
public async get_chip_features(loader: ESPLoader) {
const features = ["Wi-Fi"];
const pkg_ver = await this.get_pkg_version(loader);
if (pkg_ver == 1) {
@ -143,14 +143,14 @@ export default class ESP32S2ROM extends ROM {
return features;
};
public get_crystal_freq = async (loader: ESPLoader) => {
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;
}
public read_mac = async (loader: ESPLoader) => {
public async read_mac(loader: ESPLoader) {
let mac0 = await loader.read_reg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.read_reg(this.MAC_EFUSE_REG + 4);
@ -178,7 +178,7 @@ export default class ESP32S2ROM extends ROM {
);
};
public override get_erase_size(offset: number, size: number) {
public get_erase_size(offset: number, size: number) {
return size;
}
}

View File

@ -1,4 +1,4 @@
import ESPLoader from "../espLoader";
import { ESPLoader } from "../esploader";
import { ROM } from "./rom";
export default class ESP32S3ROM extends ROM {
@ -119,13 +119,13 @@ export default class ESP32S3ROM extends ROM {
"A6EOOkSXLzPI/0905+E35NsMZL5N2dQx7VQhTldrENTvyi1fQDWenT4lm8tQK+l3" +
"KW+3NnXYMAdbYwkNHP1ZTgd8RtiVeVq1Sv50vbRlrKlDTZc48SKV/f8Zky2A";
public get_chip_description = async (loader: ESPLoader) => {
public async get_chip_description(loader: ESPLoader) {
return "ESP32-S3";
};
public get_chip_features = async (loader: ESPLoader) => {
public async get_chip_features(loader: ESPLoader) {
return ["Wi-Fi", "BLE"];
};
public get_crystal_freq = async (loader: ESPLoader) => {
public async get_crystal_freq(loader: ESPLoader) {
return 40;
};
public _d2h(d: number) {
@ -133,7 +133,7 @@ export default class ESP32S3ROM extends ROM {
return h.length === 1 ? "0" + h : h;
}
public _post_connect = async (loader: ESPLoader) => {
public async _post_connect(loader: ESPLoader) {
const buf_no = (await loader.read_reg(this.UARTDEV_BUF_NO)) & 0xff;
console.log("In _post_connect " + buf_no);
if (buf_no == this.UARTDEV_BUF_NO_USB) {
@ -141,7 +141,7 @@ export default class ESP32S3ROM extends ROM {
}
};
public read_mac = async (loader: ESPLoader) => {
public async read_mac(loader: ESPLoader) {
let mac0 = await loader.read_reg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.read_reg(this.MAC_EFUSE_REG + 4);
@ -169,7 +169,7 @@ export default class ESP32S3ROM extends ROM {
);
};
public get_erase_size = function (offset: number, size: number) {
public get_erase_size(offset: number, size: number) {
return size;
};
}

View File

@ -1,4 +1,4 @@
import ESPLoader from "../espLoader";
import { ESPLoader } from "../esploader";
import { ROM } from "./rom";
export default class ESP8266ROM extends ROM {
@ -185,13 +185,13 @@ export default class ESP8266ROM extends ROM {
"J4beSjfPH4hJ+tFtSdkibccBEOH+kJSrSew2MdSz8C5GWch459cfjuMcT0Pvo0yI" +
"bcqT/wWthFLmqB8AAA==";
public read_efuse = async (loader: ESPLoader, offset: number) => {
public async read_efuse(loader: ESPLoader, offset: number) {
const addr = this.EFUSE_RD_REG_BASE + 4 * offset;
console.log("Read efuse " + addr);
return await loader.read_reg(addr);
};
public get_chip_description = async (loader: ESPLoader) => {
public async get_chip_description(loader: ESPLoader) {
const efuse3 = await this.read_efuse(loader, 2);
const efuse0 = await this.read_efuse(loader, 0);
@ -205,7 +205,7 @@ export default class ESP8266ROM extends ROM {
return features;
};
public get_crystal_freq = async (loader: ESPLoader) => {
public async get_crystal_freq(loader: ESPLoader) {
const uart_div = (await loader.read_reg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK;
const ets_xtal = (loader.transport.baudrate * uart_div) / 1000000 / this.XTAL_CLK_DIVIDER;
let norm_xtal;
@ -231,7 +231,7 @@ export default class ESP8266ROM extends ROM {
return h.length === 1 ? "0" + h : h;
}
public read_mac = async (loader: ESPLoader) => {
public async read_mac(loader: ESPLoader) {
let mac0 = await this.read_efuse(loader, 0);
mac0 = mac0 >>> 0;
let mac1 = await this.read_efuse(loader, 1);
@ -275,7 +275,7 @@ export default class ESP8266ROM extends ROM {
);
};
public get_erase_size = function (offset: number, size: number) {
public get_erase_size(offset: number, size: number) {
return size;
};
}

View File

@ -1,24 +1,4 @@
import ESPLoader from "../espLoader";
export enum FLASH_SIZES {
"1MB" = 0x00,
"2MB" = 0x10,
"4MB" = 0x20,
"8MB" = 0x30,
"16MB" = 0x40,
}
export enum ESP8266_FLASH_SIZES {
"512KB" = 0x00,
"256KB" = 0x10,
"1MB" = 0x20,
"2MB" = 0x30,
"4MB" = 0x40,
"2MB-c1" = 0x50,
"4MB-c1" = 0x60,
"8MB" = 0x80,
"16MB" = 0x90,
}
import { ESPLoader } from "../esploader";
export abstract class ROM {
// abstract read_efuse(loader: ESPLoader, offset: number): Promise<number>; //esp32
@ -43,13 +23,7 @@ export abstract class ROM {
return size;
}
FLASH_SIZES: { [key: string]: number } = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
abstract FLASH_SIZES: { [key: string]: number };
abstract BOOTLOADER_FLASH_OFFSET: number;
abstract CHIP_NAME: string;

View File

@ -1,12 +1,13 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "ES5",
"module": "ES2020",
"target": "ES2019",
"declaration": true,
"allowSyntheticDefaultImports": true,
"outDir": "./lib",
"moduleResolution": "node",
"lib": ["ES2020", "DOM"]
"lib": ["ES2020", "DOM"],
"importHelpers": true
},
"include": ["src/**/*"]
}