Update: Arduino下自动根据代码中设置的串口波特率配置串口监视器 (#IAWTZG)
This commit is contained in:
@@ -29,6 +29,10 @@ class Serial {
|
||||
rts: true,
|
||||
dtr: true
|
||||
};
|
||||
this.AVAILABEL_BAUDS = [
|
||||
300, 600, 750, 1200, 2400, 4800, 9600, 19200, 31250, 38400, 57600,
|
||||
74880, 115200, 230400, 250000, 460800, 500000, 921600, 1000000, 2000000,
|
||||
];
|
||||
|
||||
this.getSelectedPortName = function () {
|
||||
return Nav.getMain().getPortSelector().val();
|
||||
@@ -46,6 +50,10 @@ class Serial {
|
||||
};
|
||||
}
|
||||
|
||||
this.portIsLegal = function (port) {
|
||||
return this.portsName.includes(port);
|
||||
}
|
||||
|
||||
/**
|
||||
* @function 重新渲染串口下拉框
|
||||
* @param {array} 当前可用的所有串口
|
||||
@@ -186,6 +194,10 @@ class Serial {
|
||||
}
|
||||
}
|
||||
|
||||
baudRateIsLegal(baud) {
|
||||
return Serial.AVAILABEL_BAUDS.includes(baud);
|
||||
}
|
||||
|
||||
async setBaudRate(baud) {
|
||||
this.#baud_ = baud;
|
||||
}
|
||||
|
||||
@@ -333,18 +333,7 @@ class StatusBarSerial extends PageBase {
|
||||
const { id } = event.currentTarget.dataset;
|
||||
const { data } = event.params;
|
||||
if (id === 'baud') {
|
||||
const baud = data.id - 0;
|
||||
if (!this.isOpened()) {
|
||||
this.#config_.baud = baud;
|
||||
return;
|
||||
}
|
||||
this.#serial_.setBaudRate(baud)
|
||||
.then(() => {
|
||||
this.#config_.baud = baud;
|
||||
})
|
||||
.catch((error) => {
|
||||
this.#$settingMenu_.filter('[data-id="baud"]').val(data).trigger('change');
|
||||
});
|
||||
this.setBaudRate(data.id - 0).catch(Debug.error);
|
||||
} else if (id === 'send-with') {
|
||||
if (data.id === 'no') {
|
||||
this.#config_.sendWith = '';
|
||||
@@ -521,6 +510,23 @@ class StatusBarSerial extends PageBase {
|
||||
this.#chart_.setStatus(isOpened);
|
||||
}
|
||||
|
||||
async setBaudRate(baud) {
|
||||
if (!this.isOpened()) {
|
||||
this.#config_.baud = baud;
|
||||
return;
|
||||
}
|
||||
if (this.#serial_.baudRateIsLegal(baud)) {
|
||||
try {
|
||||
await this.#serial_.setBaudRate(baud);
|
||||
this.#config_.baud = baud;
|
||||
} catch (error) {
|
||||
Debug.error(error);
|
||||
}
|
||||
}
|
||||
this.#$settingMenu_.filter('[data-id="baud"]').val(this.#config_.baud).trigger('change');
|
||||
this.startRead();
|
||||
}
|
||||
|
||||
isOpened() {
|
||||
return this.#opened_;
|
||||
}
|
||||
|
||||
@@ -138,6 +138,9 @@ ArduShell.compile = (doFunc = () => {}) => {
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
statusBarTerminal.setValue('');
|
||||
mainStatusBarTabs.changeTo("output");
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const code = editor.getCode();
|
||||
ArduShell.compiling = true;
|
||||
ArduShell.uploading = false;
|
||||
const boardType = Boards.getSelectedBoardCommandParam();
|
||||
@@ -164,7 +167,6 @@ ArduShell.compile = (doFunc = () => {}) => {
|
||||
$("#mixly-loader-btn").css('display', 'inline-block');
|
||||
}
|
||||
});
|
||||
setTimeout(() => {
|
||||
statusBarTerminal.setValue(Msg.Lang['shell.compiling'] + "...\n");
|
||||
|
||||
let myLibPath = path.join(Env.boardDirPath, "/libraries/myLib/");
|
||||
@@ -200,8 +202,7 @@ ArduShell.compile = (doFunc = () => {}) => {
|
||||
+ '\" \"'
|
||||
+ codePath
|
||||
+ '\" --no-color';
|
||||
ArduShell.runCmd(layerNum, 'compile', cmdStr, doFunc);
|
||||
}, 100);
|
||||
ArduShell.runCmd(layerNum, 'compile', cmdStr, code, doFunc);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -252,6 +253,9 @@ ArduShell.upload = (boardType, port) => {
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
statusBarTerminal.setValue('');
|
||||
mainStatusBarTabs.changeTo('output');
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const code = editor.getCode();
|
||||
const layerNum = layer.open({
|
||||
type: 1,
|
||||
title: Msg.Lang['shell.uploading'] + "...",
|
||||
@@ -327,14 +331,24 @@ ArduShell.upload = (boardType, port) => {
|
||||
+ codePath
|
||||
+ '\" --no-color';
|
||||
}
|
||||
ArduShell.runCmd(layerNum, 'upload', cmdStr,
|
||||
function () {
|
||||
ArduShell.runCmd(layerNum, 'upload', cmdStr, code, () => {
|
||||
if (!Serial.portIsLegal(port)) {
|
||||
return;
|
||||
}
|
||||
mainStatusBarTabs.add('serial', port);
|
||||
mainStatusBarTabs.changeTo(port);
|
||||
const statusBarSerial = mainStatusBarTabs.getStatusBarById(port);
|
||||
statusBarSerial.open();
|
||||
statusBarSerial.open()
|
||||
.then(() => {
|
||||
const baudRates = code.match(/(?<=Serial.begin[\s]*\([\s]*)[0-9]*(?=[\s]*\))/g);
|
||||
if (!baudRates.length) {
|
||||
statusBarSerial.setBaudRate(9600);
|
||||
} else {
|
||||
statusBarSerial.setBaudRate(baudRates[0] - 0);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -466,12 +480,9 @@ ArduShell.writeLibFiles = (inPath) => {
|
||||
* @param cmd {String} 输入的cmd命令
|
||||
* @return void
|
||||
*/
|
||||
ArduShell.runCmd = (layerNum, type, cmd, sucFunc) => {
|
||||
ArduShell.runCmd = (layerNum, type, cmd, code, sucFunc) => {
|
||||
const { mainStatusBarTabs } = Mixly;
|
||||
const statusBarTerminal = mainStatusBarTabs.getStatusBarById('output');
|
||||
const mainWorkspace = Workspace.getMain();
|
||||
const editor = mainWorkspace.getEditorsManager().getActive();
|
||||
const code = editor.getCode();
|
||||
const testArduinoDirPath = path.join(Env.clientPath, 'testArduino');
|
||||
const codePath = path.join(testArduinoDirPath, 'testArduino.ino');
|
||||
const nowFilePath = Title.getFilePath();
|
||||
|
||||
@@ -177,17 +177,19 @@ class ElectronSerial extends Serial {
|
||||
|
||||
async setBaudRate(baud) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!this.isOpened() || this.getBaudRate() === baud) {
|
||||
if (!this.isOpened()
|
||||
|| this.getBaudRate() === baud
|
||||
|| !this.baudRateIsLegal(baud)) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
this.#serialport_.update({ baudRate: baud - 0 }, (error) => {
|
||||
this.#serialport_.update({ baudRate: baud }, (error) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
super.setBaudRate(baud);
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
super.setBaudRate(baud);
|
||||
this.setDTRAndRTS(this.getDTR(), this.getRTS()).finally(resolve);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -191,7 +191,9 @@ class WebSerial extends Serial {
|
||||
|
||||
async setBaudRate(baud) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!this.isOpened() || this.getBaudRate() === baud) {
|
||||
if (!this.isOpened()
|
||||
|| this.getBaudRate() === baud
|
||||
|| !this.baudRateIsLegal(baud)) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user