From 8070e03496794d94930ce3a63a89da85624ef9bd Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Wed, 16 Jul 2025 16:23:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=BC=BA=E5=88=B6?= =?UTF-8?q?=E6=8D=95=E8=8E=B7=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LogicAnalyzer/LogicAnalyzerManager.ts | 48 ++++++++++++------- .../LogicAnalyzer/LogicalWaveFormDisplay.vue | 13 +++++ 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/components/LogicAnalyzer/LogicAnalyzerManager.ts b/src/components/LogicAnalyzer/LogicAnalyzerManager.ts index d353ff9..0d94d49 100644 --- a/src/components/LogicAnalyzer/LogicAnalyzerManager.ts +++ b/src/components/LogicAnalyzer/LogicAnalyzerManager.ts @@ -105,12 +105,14 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState( // 8个信号通道的配置 const signalConfigs = reactive( - Array.from({ length: 8 }, (_, index) => - new SignalTriggerConfig({ - signalIndex: index, - operator: SignalOperator.Equal, - value: SignalValue.Logic1, - }), + Array.from( + { length: 8 }, + (_, index) => + new SignalTriggerConfig({ + signalIndex: index, + operator: SignalOperator.Equal, + value: SignalValue.Logic1, + }), ), ); @@ -290,7 +292,7 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState( // 等待捕获完成 const captureCompleted = await pollCaptureStatus(); - + // 如果捕获被停止,不继续处理数据 if (!captureCompleted) { alert?.info("捕获已停止", 2000); @@ -312,7 +314,10 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState( const timeStepNs = SAMPLE_PERIOD_NS; // 每个采样点间隔200ns (1/5MHz) // 创建时间轴(转换为合适的单位) - const x = Array.from({ length: sampleCount }, (_, i) => i * timeStepNs / 1000); // 转换为微秒 + const x = Array.from( + { length: sampleCount }, + (_, i) => (i * timeStepNs) / 1000, + ); // 转换为微秒 // 创建8个通道的数据 const y: number[][] = Array.from( @@ -352,6 +357,19 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState( }; const stopCapture = async () => { + try { + await forceCapture(); // 尝试强制捕获来停止当前捕获 + + // 设置捕获状态为false,这会使轮询停止 + isCapturing.value = false; + + alert?.info("停止捕获...", 2000); + } catch (error) { + console.error("停止捕获失败:", error); + } + }; + + const forceCapture = async () => { // 检查是否正在捕获 if (!isCapturing.value) { alert.warn("当前没有正在进行的捕获操作", 2000); @@ -360,21 +378,16 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState( try { const client = AuthManager.createAuthenticatedLogicAnalyzerClient(); - + // 执行强制捕获来停止当前捕获 const forceSuccess = await client.setCaptureMode(false, true); if (!forceSuccess) { throw new Error("无法执行强制捕获"); } - - // 设置捕获状态为false,这会使轮询停止 - isCapturing.value = false; - - alert?.info("正在停止捕获...", 2000); } catch (error) { - console.error("停止捕获失败:", error); + console.error("捕获失败:", error); alert?.error( - `停止捕获失败: ${error instanceof Error ? error.message : "未知错误"}`, + `捕获失败: ${error instanceof Error ? error.message : "未知错误"}`, 3000, ); } @@ -485,7 +498,8 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState( resetConfiguration, setLogicData, startCapture, - stopCapture, // 添加停止捕获方法 + forceCapture, + stopCapture, generateTestData, }; }, diff --git a/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue b/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue index 0ab7e12..f527e88 100644 --- a/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue +++ b/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue @@ -66,6 +66,19 @@ + + +