From 6a2e916981923e7270b1439ad81fb78f8199c52d Mon Sep 17 00:00:00 2001 From: Guoguo Date: Mon, 15 Dec 2025 13:53:11 +0800 Subject: [PATCH 1/2] fix(desktop): custom baud rate bug Custom baud rates only take effect the second time they are set, and will not be used when the page is first loaded. --- .../components/device-modal/serial-port.tsx | 18 ++++++++++-------- .../src/components/menu/serial-port/index.tsx | 11 ++++++----- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/desktop/src/renderer/src/components/device-modal/serial-port.tsx b/desktop/src/renderer/src/components/device-modal/serial-port.tsx index 2f798292..10ee3906 100644 --- a/desktop/src/renderer/src/components/device-modal/serial-port.tsx +++ b/desktop/src/renderer/src/components/device-modal/serial-port.tsx @@ -41,7 +41,7 @@ export const SerialPort = ({ setMsg }: SerialPortProps): ReactElement => { useEffect(() => { const savedBaudRate = storage.getBaudRate() setBaudRate(savedBaudRate) - + getSerialPorts(true) const rmListener = window.electron.ipcRenderer.on(IpcEvents.OPEN_SERIAL_PORT_RSP, (_, err) => { @@ -68,18 +68,20 @@ export const SerialPort = ({ setMsg }: SerialPortProps): ReactElement => { if (autoOpen) { const port = storage.getSerialPort() if (port && serialPorts.includes(port)) { - await selectSerialPort(port) + const savedBaudRate = storage.getBaudRate() + await selectSerialPort(port, savedBaudRate) } } } - async function selectSerialPort(port: string): Promise { + async function selectSerialPort(port: string, customBaudRate?: number): Promise { if (serialPortState === 'connecting') return setSerialPortState('connecting') setIsFailed(false) setMsg('') - const success = await window.electron.ipcRenderer.invoke(IpcEvents.OPEN_SERIAL_PORT, port, baudRate) + const rate = customBaudRate ?? baudRate + const success = await window.electron.ipcRenderer.invoke(IpcEvents.OPEN_SERIAL_PORT, port, rate) if (success) { setSerialPort(port) @@ -99,12 +101,12 @@ export const SerialPort = ({ setMsg }: SerialPortProps): ReactElement => { async function handleBaudRateChange(newBaudRate: number): Promise { setBaudRate(newBaudRate) storage.setBaudRate(newBaudRate) - + if (serialPort && serialPortState === 'connected') { - const currentPort = serialPort + const currentPort = serialPort await closeSerialPort() setTimeout(() => { - selectSerialPort(currentPort) + selectSerialPort(currentPort, newBaudRate) }, 200) } } @@ -118,7 +120,7 @@ export const SerialPort = ({ setMsg }: SerialPortProps): ReactElement => { loading={serialPortState === 'connecting'} status={isFailed ? 'error' : undefined} placeholder={t('modal.selectSerial')} - onChange={selectSerialPort} + onChange={(serialPort) => selectSerialPort(serialPort)} onClick={() => getSerialPorts(false)} />