feat: 添加强制捕获按钮
This commit is contained in:
		@@ -105,12 +105,14 @@ const [useProvideLogicAnalyzer, useLogicAnalyzerState] = createInjectionState(
 | 
			
		||||
 | 
			
		||||
    // 8个信号通道的配置
 | 
			
		||||
    const signalConfigs = reactive<SignalTriggerConfig[]>(
 | 
			
		||||
      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,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,19 @@
 | 
			
		||||
          </template>
 | 
			
		||||
        </span>
 | 
			
		||||
      </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>
 | 
			
		||||
</template>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user