Update: 优化在线版serial模块
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user