Update: 优化在线版serial模块

This commit is contained in:
王立帮
2025-03-07 12:25:15 +08:00
parent ec7359c53e
commit 4bbd2dcc96
5 changed files with 46 additions and 48 deletions

View File

@@ -669,12 +669,6 @@ BU.uploadWithAmpy = (portName) => {
const mainWorkspace = Workspace.getMain(); const mainWorkspace = Workspace.getMain();
const editor = mainWorkspace.getEditorsManager().getActive(); const editor = mainWorkspace.getEditorsManager().getActive();
const port = Serial.getPort(portName); const port = Serial.getPort(portName);
let useBuffer = true, dataLength = 256;
if (port.constructor.name === 'USBDevice') {
dataLength = 64;
} else if (port.constructor.name === 'HIDDevice') {
dataLength = 31;
}
const layerNum = layer.open({ const layerNum = layer.open({
type: 1, type: 1,
title: Msg.Lang['shell.uploading'] + '...', title: Msg.Lang['shell.uploading'] + '...',
@@ -685,7 +679,7 @@ BU.uploadWithAmpy = (portName) => {
success: async function (layero, index) { success: async function (layero, index) {
$('#mixly-loader-btn').hide(); $('#mixly-loader-btn').hide();
const serial = new Serial(portName); const serial = new Serial(portName);
const ampy = new Ampy(serial, useBuffer, dataLength); const ampy = new Ampy(serial);
const code = editor.getCode(); const code = editor.getCode();
let closePromise = Promise.resolve(); let closePromise = Promise.resolve();
if (statusBarSerial) { if (statusBarSerial) {

View File

@@ -103,6 +103,7 @@ class WebHID extends Serial {
#reader_ = null; #reader_ = null;
#writer_ = null; #writer_ = null;
#stringTemp_ = ''; #stringTemp_ = '';
#dataLength_ = 31;
constructor(port) { constructor(port) {
super(port); super(port);
} }
@@ -133,7 +134,7 @@ class WebHID extends Serial {
const portsName = Serial.getCurrentPortsName(); const portsName = Serial.getCurrentPortsName();
const currentPortName = this.getPortName(); const currentPortName = this.getPortName();
if (!portsName.includes(currentPortName)) { if (!portsName.includes(currentPortName)) {
reject('无可用设备'); reject('no device available');
return; return;
} }
if (this.isOpened()) { if (this.isOpened()) {
@@ -176,20 +177,20 @@ class WebHID extends Serial {
} }
async sendBuffer(buffer) { async sendBuffer(buffer) {
return new Promise((resolve, reject) => { if (buffer.constructor.name !== 'Uint8Array') {
if (buffer instanceof Uint8Array) { buffer = new Uint8Array(buffer);
let temp = new Uint8Array(buffer.length + 1); }
temp[0] = buffer.length; const len = Math.ceil(buffer.length / this.#dataLength_);
temp.set(buffer, 1); for (let i = 0; i < len; i++) {
buffer = temp; const start = i * this.#dataLength_;
} else { const end = Math.min((i + 1) * this.#dataLength_, buffer.length);
buffer.unshift(buffer.length); const writeBuffer = buffer.slice(start, end);
buffer = new Uint8Array(buffer); let temp = new Uint8Array(end - start + 1);
} temp[0] = writeBuffer.length;
this.#device_.sendReport(0, buffer) temp.set(writeBuffer, 1);
.then(resolve) await this.#device_.sendReport(0, temp);
.catch(reject); await this.sleep(10);
}); }
} }
async setDTRAndRTS(dtr, rts) { async setDTRAndRTS(dtr, rts) {

View File

@@ -132,7 +132,7 @@ class WebSerialPort extends Serial {
const portsName = Serial.getCurrentPortsName(); const portsName = Serial.getCurrentPortsName();
const currentPortName = this.getPortName(); const currentPortName = this.getPortName();
if (!portsName.includes(currentPortName)) { if (!portsName.includes(currentPortName)) {
reject('无可用串口'); reject('no device available');
return; return;
} }
if (this.isOpened()) { if (this.isOpened()) {
@@ -200,22 +200,18 @@ class WebSerialPort extends Serial {
} }
async sendBuffer(buffer) { async sendBuffer(buffer) {
return new Promise((resolve, reject) => { const { writable } = this.#serialport_;
const { writable } = this.#serialport_; const writer = writable.getWriter();
const writer = writable.getWriter(); if (buffer.constructor.name !== 'Uint8Array') {
if (!(buffer instanceof Uint8Array)) { buffer = new Uint8Array(buffer);
buffer = new Uint8Array(buffer); }
} try {
writer.write(buffer) await writer.write(buffer);
.then(() => { writer.releaseLock();
writer.releaseLock(); } catch (error) {
resolve(); writer.releaseLock();
}) throw Error(error);
.catch(() => { }
writer.releaseLock();
reject();
});
});
} }
async setDTRAndRTS(dtr, rts) { async setDTRAndRTS(dtr, rts) {

View File

@@ -109,6 +109,7 @@ class USBMini extends Serial {
#endpointIn_ = null; #endpointIn_ = null;
#endpointOut_ = null; #endpointOut_ = null;
#interfaceNumber_ = 0; #interfaceNumber_ = 0;
#dataLength_ = 64;
constructor(port) { constructor(port) {
super(port); super(port);
} }
@@ -178,7 +179,7 @@ class USBMini extends Serial {
const portsName = Serial.getCurrentPortsName(); const portsName = Serial.getCurrentPortsName();
const currentPortName = this.getPortName(); const currentPortName = this.getPortName();
if (!portsName.includes(currentPortName)) { if (!portsName.includes(currentPortName)) {
throw new Error('无可用串口'); throw new Error('no device available');
} }
if (this.isOpened()) { if (this.isOpened()) {
return; return;
@@ -237,11 +238,17 @@ class USBMini extends Serial {
} }
async sendBuffer(buffer) { async sendBuffer(buffer) {
if (typeof buffer.unshift === 'function') { if (buffer.constructor.name !== 'Uint8Array') {
// buffer.unshift(buffer.length); buffer = new Uint8Array(buffer);
buffer = new Uint8Array(buffer).buffer; }
const len = Math.ceil(buffer.length / this.#dataLength_);
for (let i = 0; i < len; i++) {
const start = i * this.#dataLength_;
const end = Math.min((i + 1) * this.#dataLength_, buffer.length);
const writeBuffer = buffer.slice(start, end);
await this.#write_(writeBuffer)
await this.sleep(5);
} }
return this.#write_(buffer);
} }
async setDTRAndRTS(dtr, rts) { async setDTRAndRTS(dtr, rts) {

View File

@@ -145,7 +145,7 @@ class USB extends Serial {
const portsName = Serial.getCurrentPortsName(); const portsName = Serial.getCurrentPortsName();
const currentPortName = this.getPortName(); const currentPortName = this.getPortName();
if (!portsName.includes(currentPortName)) { if (!portsName.includes(currentPortName)) {
throw new Error('无可用串口'); throw new Error('no device available');
} }
if (this.isOpened()) { if (this.isOpened()) {
return; return;
@@ -192,11 +192,11 @@ class USB extends Serial {
} }
async sendBuffer(buffer) { async sendBuffer(buffer) {
if (typeof buffer.unshift === 'function') { if (buffer.constructor.name !== 'Uint8Array') {
buffer.unshift(buffer.length); buffer.unshift(buffer.length);
buffer = new Uint8Array(buffer).buffer; buffer = new Uint8Array(buffer);
} }
return this.#dapLink_.send(132, buffer); await this.#dapLink_.send(132, buffer);
} }
async setDTRAndRTS(dtr, rts) { async setDTRAndRTS(dtr, rts) {