feat(core): 优化在线版下ampy和kflash的进度显示
This commit is contained in:
@@ -100,7 +100,7 @@ class MAIXLoader {
|
||||
|
||||
#port_ = null;
|
||||
#readedBuffer_ = [];
|
||||
#events_ = new Events('message');
|
||||
#events_ = new Events(['message', 'replaceMessage']);
|
||||
|
||||
constructor(port) {
|
||||
this.#port_ = port;
|
||||
@@ -117,6 +117,10 @@ class MAIXLoader {
|
||||
this.#events_.run('message', message);
|
||||
}
|
||||
|
||||
replaceMessage(lineNumber, message) {
|
||||
this.#events_.run('replaceMessage', lineNumber, message);
|
||||
}
|
||||
|
||||
async write(packet) {
|
||||
let handlePacket = [];
|
||||
|
||||
@@ -251,9 +255,9 @@ class MAIXLoader {
|
||||
|
||||
getProgressMessage(name, percent) {
|
||||
const sended = parseInt(percent * 45);
|
||||
const left = Array(sended).fill('=').join('');
|
||||
const right = Array(45 - sended).fill('-').join('');
|
||||
return `${name}: |${left}${right}| ${(percent * 100).toFixed(1)}%\n\n`;
|
||||
const left = percent === 0 ? '' : Array(sended).fill('=').join('');
|
||||
const right = percent === 100 ? '' : Array(45 - sended).fill('-').join('');
|
||||
return `${name}: |${left}${right}| ${(percent * 100).toFixed(1)}%`;
|
||||
}
|
||||
|
||||
async flashDataFrame(data, address = 0x80000000) {
|
||||
@@ -261,6 +265,7 @@ class MAIXLoader {
|
||||
const dataLength = data.length;
|
||||
let sendedLength = 0;
|
||||
const len = Math.ceil(dataLength / this.DATAFRAME_SIZE);
|
||||
this.message('\n');
|
||||
for (let i = 0; i < len; i++) {
|
||||
let start = i * this.DATAFRAME_SIZE;
|
||||
let end = Math.min(start + this.DATAFRAME_SIZE, dataLength);
|
||||
@@ -286,12 +291,18 @@ class MAIXLoader {
|
||||
await this.write(packet);
|
||||
if (await this.recvDebug()) {
|
||||
sendedLength += chunk.length;
|
||||
this.message(this.getProgressMessage('Downloading ISP', sendedLength / dataLength));
|
||||
const message = this.getProgressMessage('Downloading ISP', sendedLength / dataLength);
|
||||
if (i > 0) {
|
||||
this.replaceMessage(-1, message);
|
||||
} else {
|
||||
this.message(message);
|
||||
}
|
||||
address += this.DATAFRAME_SIZE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.message('\n\n');
|
||||
}
|
||||
|
||||
async installFlashBootloader(data) {
|
||||
@@ -390,7 +401,7 @@ class MAIXLoader {
|
||||
}
|
||||
|
||||
async flashFirmware(firmware, aesKey = null, address = 0, sha256Prefix = true, filename = '') {
|
||||
this.message(`[INFO] Writing ${filename} into ${this.formatHex(address)}\n\n`);
|
||||
this.message(`[INFO] Writing ${filename} into ${this.formatHex(address)}\n`);
|
||||
let firmwareBin = Array.from(new Uint8Array(firmware));
|
||||
if (sha256Prefix) {
|
||||
const aesCipherFlag = 0x00;
|
||||
@@ -432,18 +443,25 @@ class MAIXLoader {
|
||||
await this.write(packet);
|
||||
if (await this.recvDebug()) {
|
||||
sendedLength += chunkLength;
|
||||
this.message(this.getProgressMessage('Programming BIN', sendedLength / dataLength));
|
||||
const message = this.getProgressMessage('Programming BIN', sendedLength / dataLength);
|
||||
if (i > 0) {
|
||||
this.replaceMessage(-1, message);
|
||||
} else {
|
||||
this.message(`\n${message}`);
|
||||
}
|
||||
address += this.ISP_FLASH_DATA_FRAME_SIZE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.message('\n\n');
|
||||
}
|
||||
|
||||
dispose() {
|
||||
this.#port_ = null;
|
||||
this.#events_.reset();
|
||||
this.#events_ = null;
|
||||
this.#readedBuffer_ = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,10 +469,13 @@ class KFlash {
|
||||
#port_ = null;
|
||||
#loader_ = null;
|
||||
|
||||
constructor(port, messageCallback) {
|
||||
constructor(port) {
|
||||
this.#port_ = port;
|
||||
this.#loader_ = new MAIXLoader(port);
|
||||
this.#loader_.bind('message', messageCallback);
|
||||
}
|
||||
|
||||
bind(...args) {
|
||||
return this.#loader_.bind(...args);
|
||||
}
|
||||
|
||||
async enter() {
|
||||
@@ -462,7 +483,7 @@ class KFlash {
|
||||
}
|
||||
|
||||
async write(firmware, address = 0x0, sha256Prefix = true, filename = '') {
|
||||
this.#loader_.message('[INFO] Trying to Enter the ISP Mode...\n');
|
||||
this.#loader_.message('[INFO] Trying to Enter the ISP Mode...');
|
||||
let retryCount = 0;
|
||||
while (true) {
|
||||
try {
|
||||
@@ -500,6 +521,7 @@ class KFlash {
|
||||
|
||||
dispose() {
|
||||
this.#loader_.dispose();
|
||||
this.#loader_ = null;
|
||||
this.#port_ = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user