Skip to content

Commit fe0a929

Browse files
committed
v2.1.2
1 parent b0c081b commit fe0a929

File tree

13 files changed

+138
-32
lines changed

13 files changed

+138
-32
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# [Web Serial Debugger](https://qdsang.github.io/web-serial-debug/)
22

3-
一个基于 Web Serial 的串口调试工具。 [https://qdsang.github.io/web-serial-debug/](https://qdsang.github.io/web-serial-debug/)
3+
基于 Web 的串口调试工具。 [https://qdsang.github.io/web-serial-debug/](https://qdsang.github.io/web-serial-debug/)
44

55
## Demo
66

docs/preview.png

100755100644
300 KB
Loading

public/sw.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
const CACHE_NAME = 'web-serial-debug-cache-v1';
2+
const CACHE_NAME = 'web-serial-debug-cache-v2';
33
const urlsToCache = [
44
'./',
55
'./index.html',

src/App.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ handleResize()
9292
<el-tab-pane label="姿态" lazy>
9393
<Chart3D />
9494
</el-tab-pane>
95-
<el-tab-pane label="数据表">
95+
<el-tab-pane label="数据表" lazy>
9696
<DataTable />
9797
</el-tab-pane>
9898
<el-tab-pane label="画板" lazy>
@@ -232,7 +232,6 @@ handleResize()
232232
}
233233
.lv-card :deep(.el-tab-pane) {
234234
height: 100%;
235-
overflow: auto;
236235
}
237236
238237
:deep(.splitpanes__splitter) {

src/components/CanvasPanel.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ const saveLayout = () => {
9999
:key="item.id"
100100
:x="item.x"
101101
:y="item.y"
102+
:w="item.width"
103+
:h="item.height"
102104
:width="item.width"
103105
:height="item.height"
104106
:draggable="true"

src/components/SerialConfig.vue

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ const handleConfigChange = async () => {
2828
if (isConnected.value) {
2929
try {
3030
await disconnectSerial()
31-
DeviceSerialPort.disconnect()
31+
// DeviceSerialPort.disconnect()
3232
}catch(error) {
3333
3434
}
3535
try {
3636
const device = authorizedDevices.value.find(d => d.id === selectedDeviceId.value)
3737
if (device) {
38-
await DeviceSerialPort.connectDevice(device)
38+
await connectDevice(device)
3939
}
40-
ElMessage.success('串口参数已更新')
40+
// ElMessage.success('串口参数已更新')
4141
} catch (error) {
4242
ElMessage.error('更新串口参数失败:' + error)
4343
}
@@ -133,7 +133,8 @@ const disconnectSerial = async () => {
133133
console.log(error)
134134
}
135135
isConnected.value = false
136-
selectedDeviceId.value = ''
136+
// selectedDeviceId.value = ''
137+
137138
try {
138139
await DeviceSerialPort.disconnect()
139140
await DeviceMockIMU.disconnect()
@@ -177,7 +178,7 @@ const handleSerialSend = async (data: Uint8Array) => {
177178
178179
try {
179180
await serialWriter.value.write(data)
180-
ElMessage.success({ message: '发送成功', grouping: true })
181+
ElMessage.success({ message: '发送成功', grouping: true, duration: 1800, showClose: true })
181182
} catch (error) {
182183
console.log(error)
183184
ElMessage.error('发送数据失败:' + error)

src/components/SerialQuickSend.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ const handleRenameGroup = () => {
169169
<style scoped>
170170
.quick-send {
171171
margin: 10px 10px;
172+
min-width: 200px;
172173
}
173174
174175
.quick-send-actions {
@@ -228,6 +229,7 @@ const handleRenameGroup = () => {
228229
.item-row {
229230
display: flex;
230231
align-items: center;
232+
white-space: nowrap;
231233
gap: 8px;
232234
}
233235

src/components/SerialScript.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { ref, onMounted, watch } from 'vue'
33
import { EditorState } from '@codemirror/state'
44
import { EditorView, keymap, lineNumbers } from '@codemirror/view'
5-
import { defaultKeymap } from '@codemirror/commands'
5+
import { defaultKeymap, indentWithTab } from '@codemirror/commands'
66
import { javascript } from '@codemirror/lang-javascript'
77
import { oneDark, oneDarkHighlightStyle } from '@codemirror/theme-one-dark'
88
import { syntaxHighlighting, defaultHighlightStyle } from '@codemirror/language'
@@ -69,6 +69,7 @@ const createEditor = () => {
6969
doc: currentScript.value.code,
7070
extensions: [
7171
keymap.of(defaultKeymap),
72+
keymap.of([indentWithTab]),
7273
syntaxHighlighting(isDark.value ? oneDarkHighlightStyle : defaultHighlightStyle),
7374
javascript(),
7475
isDark.value ? oneDark : [],
@@ -166,6 +167,7 @@ watch(scripts, () => {
166167
<style scoped>
167168
.serial-script {
168169
margin: 10px;
170+
min-width: 300px;
169171
}
170172
171173
.script-select {

src/components/SerialSend.vue

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
22
import { SerialHelper } from '../utils/SerialHelper'
33
import { ConfigManager } from '../utils/ConfigManager'
4+
import { ElMessage } from 'element-plus'
45
56
import { EventCenter, EventNames } from '../utils/EventCenter'
67
@@ -24,7 +25,7 @@ const sendData = () => {
2425
if (sendConfig.value.addChecksum) {
2526
data = serialHelper.appendChecksum(data)
2627
}
27-
28+
// console.log('发送数据:', data, serialHelper.uint8ArrayToString(data))
2829
eventCenter.emit(EventNames.SERIAL_SEND, data)
2930
3031
// 添加到历史记录
@@ -36,13 +37,24 @@ const sendData = () => {
3637
}
3738
} catch (error) {
3839
console.error('发送数据时出错:', error)
40+
ElMessage.error('发送数据时出错' + error)
3941
eventCenter.emit(EventNames.SERIAL_ERROR, { message: error instanceof Error ? error.message : '发送数据时出错' })
42+
return false
4043
}
44+
return true
4145
}
4246
4347
const toggleAutoSend = () => {
4448
if (sendConfig.value.autoSend) {
45-
autoSendTimer = window.setInterval(sendData, sendConfig.value.autoSendInterval)
49+
autoSendTimer = window.setInterval(() => {
50+
if (!sendData()) {
51+
if (autoSendTimer) {
52+
clearInterval(autoSendTimer)
53+
autoSendTimer = null
54+
}
55+
sendConfig.value.autoSend = false
56+
}
57+
}, sendConfig.value.autoSendInterval)
4658
} else if (autoSendTimer) {
4759
clearInterval(autoSendTimer)
4860
autoSendTimer = null
@@ -112,7 +124,7 @@ const handleKeyDown = (e: KeyboardEvent) => {
112124
<el-switch v-model="sendConfig.isHexSend" active-text="HEX" inactive-text="TEXT" class="me-2" />
113125
<div class="me-2" style="display: inline-block;">
114126
<el-checkbox v-model="sendConfig.addCRLF" label="" class="" style="vertical-align: middle;" />
115-
<el-select v-model="sendConfig.addCRLFType" size="small" style="width: 80px;">
127+
<el-select v-model="sendConfig.addCRLFType" size="small" style="width: 80px;" @change="sendConfig.addCRLF = true">
116128
<el-option :value="'\r\n'" label="CRLF(\r\n)" />
117129
<el-option :value="'\r'" label="CR(\r)" />
118130
<el-option :value="'\n'" label="LF(\n)" />
@@ -121,7 +133,7 @@ const handleKeyDown = (e: KeyboardEvent) => {
121133
</div>
122134
<el-checkbox v-model="sendConfig.addChecksum" label="校验和" class="me-2" />
123135
<el-checkbox v-model="sendConfig.autoSend" @change="toggleAutoSend" label="自动发送" class="me-2" />
124-
<el-input-number v-model="sendConfig.autoSendInterval" :min="100" :max="10000" :step="100" @change="handleIntervalChange" size="small" class="me-2" title="自动发送时间间隔">
136+
<el-input-number v-model="sendConfig.autoSendInterval" :step="100" @change="handleIntervalChange" size="small" class="me-2" title="自动发送时间间隔">
125137
<template #suffix>
126138
<span>ms</span>
127139
</template>
@@ -133,7 +145,7 @@ const handleKeyDown = (e: KeyboardEvent) => {
133145
v-model="sendConfig.content"
134146
type="textarea"
135147
:rows="5"
136-
:placeholder="sendConfig.isHexSend ? '请输入HEX格式数据,如:49 54 4C 44 47' : '请输入要发送的文本'"
148+
:placeholder="sendConfig.isHexSend ? '请输入HEX格式数据,如:AA BB CC 11 22' : '请输入要发送的文本'"
137149
@keydown="handleKeyDown"
138150
/>
139151
</div>

src/components/device/mock_imu.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ref } from 'vue'
22
import { authorizedDevices, type Device } from './device'
3+
import { TimerManager } from '../../utils/TimerManager'
34

45
export const getDeviceTitle = () => {
56
return 'mock'
@@ -20,7 +21,8 @@ export const makeDevice = (port: any) => {
2021
authorizedDevices.value.push(makeDevice(null))
2122

2223
const isSimulating = ref(false)
23-
let simulationTimer: number | null = null
24+
const timerManager = TimerManager.getInstance()
25+
const SIMULATION_TIMER_ID = 'mock_imu_simulation'
2426

2527
const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
2628

@@ -39,12 +41,10 @@ const startSimulation = async () => {
3941
let reader = readable.getReader()
4042

4143
let pitch = 0.0, roll = 0.0, yaw = 0.0
42-
if (simulationTimer) {
43-
clearInterval(simulationTimer)
44-
}
45-
46-
await sleep(50 - (Date.now() % 50))
47-
simulationTimer = window.setInterval(() => {
44+
await sleep(1000 - (Date.now() % 1000))
45+
// console.log('ts', Date.now())
46+
timerManager.startTimer(SIMULATION_TIMER_ID, () => {
47+
// console.log('ts2', Date.now())
4848
// 模拟数据
4949
pitch += Math.random()*0.4 - 0.2;
5050
roll += Math.random()*0.4 - 0.1;
@@ -60,10 +60,8 @@ const startSimulation = async () => {
6060
}
6161

6262
const stopSimulation = () => {
63-
if (simulationTimer) {
64-
clearInterval(simulationTimer)
65-
simulationTimer = null
66-
}
63+
timerManager.stopTimer(SIMULATION_TIMER_ID)
64+
isSimulating.value = false
6765
}
6866

6967
export const request = async () => {

0 commit comments

Comments
 (0)