feat: 添加强制捕获按钮

This commit is contained in:
SikongJueluo 2025-07-16 16:23:40 +08:00
parent 43e3cce048
commit 8070e03496
No known key found for this signature in database
2 changed files with 44 additions and 17 deletions

View File

@ -105,12 +105,14 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
// 8个信号通道的配置 // 8个信号通道的配置
const signalConfigs = reactive<SignalTriggerConfig[]>( const signalConfigs = reactive<SignalTriggerConfig[]>(
Array.from({ length: 8 }, (_, index) => Array.from(
new SignalTriggerConfig({ { length: 8 },
signalIndex: index, (_, index) =>
operator: SignalOperator.Equal, new SignalTriggerConfig({
value: SignalValue.Logic1, signalIndex: index,
}), operator: SignalOperator.Equal,
value: SignalValue.Logic1,
}),
), ),
); );
@ -312,7 +314,10 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
const timeStepNs = SAMPLE_PERIOD_NS; // 每个采样点间隔200ns (1/5MHz) 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个通道的数据 // 创建8个通道的数据
const y: number[][] = Array.from( const y: number[][] = Array.from(
@ -352,6 +357,19 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
}; };
const stopCapture = async () => { const stopCapture = async () => {
try {
await forceCapture(); // 尝试强制捕获来停止当前捕获
// 设置捕获状态为false这会使轮询停止
isCapturing.value = false;
alert?.info("停止捕获...", 2000);
} catch (error) {
console.error("停止捕获失败:", error);
}
};
const forceCapture = async () => {
// 检查是否正在捕获 // 检查是否正在捕获
if (!isCapturing.value) { if (!isCapturing.value) {
alert.warn("当前没有正在进行的捕获操作", 2000); alert.warn("当前没有正在进行的捕获操作", 2000);
@ -366,15 +384,10 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
if (!forceSuccess) { if (!forceSuccess) {
throw new Error("无法执行强制捕获"); throw new Error("无法执行强制捕获");
} }
// 设置捕获状态为false这会使轮询停止
isCapturing.value = false;
alert?.info("正在停止捕获...", 2000);
} catch (error) { } catch (error) {
console.error("停止捕获失败:", error); console.error("捕获失败:", error);
alert?.error( alert?.error(
`停止捕获失败: ${error instanceof Error ? error.message : "未知错误"}`, `捕获失败: ${error instanceof Error ? error.message : "未知错误"}`,
3000, 3000,
); );
} }
@ -485,7 +498,8 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
resetConfiguration, resetConfiguration,
setLogicData, setLogicData,
startCapture, startCapture,
stopCapture, // 添加停止捕获方法 forceCapture,
stopCapture,
generateTestData, generateTestData,
}; };
}, },

View File

@ -66,6 +66,19 @@
</template> </template>
</span> </span>
</button> </button>
<!-- 强制捕获按钮 - 只在正在捕获时显示 -->
<button
v-if="analyzer.isCapturing.value"
class="group relative px-8 py-3 bg-gradient-to-r from-orange-500 to-orange-600 hover:from-orange-600 hover:to-orange-700 text-white font-medium rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 ease-in-out focus:outline-none focus:ring-4 focus:ring-orange-300 active:scale-95"
:disabled="analyzer.isOperationInProgress.value"
@click="analyzer.forceCapture()"
>
<span class="flex items-center gap-2">
<Square class="w-5 h-5" />
强制捕获
</span>
</button>
</div> </div>
</div> </div>
</template> </template>