张世豪
6 小时以前 a6077217e25f5804027194a5c2848e773eda1abd
src/chuankou/SerialPortService.java
@@ -144,70 +144,83 @@
    * 启动数据接收线程
    */
   public void startCapture(Consumer<byte[]> onReceived) {
      this.dataReceivedCallback = onReceived;
      if (capturing || port == null || !port.isOpen()) return;
      capturing = true;
      paused = false;
       this.dataReceivedCallback = onReceived;
       if (capturing || port == null || !port.isOpen()) return;
       capturing = true;
       paused = false;
      readerThread = new Thread(() -> {
         buffer.reset();
         long lastReceivedTime = 0;
       readerThread = new Thread(() -> {
           buffer.reset();
           long lastReceivedTime = 0;
         while (capturing && port.isOpen()) {
            long currentTime = System.currentTimeMillis();
           while (capturing && port.isOpen()) {
               long currentTime = System.currentTimeMillis();
            if (buffer.size() > 0 && (currentTime - lastReceivedTime) >= 20) {
               byte[] data = buffer.toByteArray();
               SystemDebugDialog.appendHexData(data);
               if (buffer.size() > 0 && (currentTime - lastReceivedTime) >= 20) {
                   byte[] data = buffer.toByteArray();
                   SystemDebugDialog.appendHexData(data);
               // 新增:将数据传递给协议解析器
               if (protocolParser != null) {
                  protocolParser.receiveData(data);
               }
                   // 新增:将数据传递给协议解析器 - 确保始终执行
                   if (protocolParser != null) {
                       protocolParser.receiveData(data);
                   }
               if (!paused) {
                  onReceived.accept(data);
                  if (responseConsumer != null) {
                     responseConsumer.accept(data);
                  }
               }
               buffer.reset();
            }
                   // 确保数据回调始终执行,不受暂停状态影响
                   if (dataReceivedCallback != null && !paused) {
                       dataReceivedCallback.accept(data);
                   }
                   if (responseConsumer != null && !paused) {
                       responseConsumer.accept(data);
                   }
                   buffer.reset();
               }
            int len = port.readBytes(readBuffer, readBuffer.length);
            currentTime = System.currentTimeMillis();
               int len = port.readBytes(readBuffer, readBuffer.length);
               currentTime = System.currentTimeMillis();
            if (len > 0) {
               buffer.write(readBuffer, 0, len);
               lastReceivedTime = currentTime;
            }
               if (len > 0) {
                   buffer.write(readBuffer, 0, len);
                   lastReceivedTime = currentTime;
               }
            if (len <= 0 && buffer.size() == 0) {
               try { Thread.sleep(1); } catch (InterruptedException ignore) {}
            }
         }
               if (len <= 0 && buffer.size() == 0) {
                   try { Thread.sleep(1); } catch (InterruptedException ignore) {}
               }
           }
         if (buffer.size() > 0) {
            byte[] data = buffer.toByteArray();
            SystemDebugDialog.appendHexData(data);
           if (buffer.size() > 0) {
               byte[] data = buffer.toByteArray();
               SystemDebugDialog.appendHexData(data);
            // 新增:将数据传递给协议解析器
            if (protocolParser != null) {
               protocolParser.receiveData(data);
            }
               // 新增:将数据传递给协议解析器 - 确保始终执行
               if (protocolParser != null) {
                   protocolParser.receiveData(data);
               }
            if (!paused) {
               onReceived.accept(data);
               if (responseConsumer != null) {
                  responseConsumer.accept(data);
               }
            }
         }
      });
      readerThread.setDaemon(true);
      readerThread.start();
               // 确保数据回调始终执行,不受暂停状态影响
               if (dataReceivedCallback != null && !paused) {
                   dataReceivedCallback.accept(data);
               }
               if (responseConsumer != null && !paused) {
                   responseConsumer.accept(data);
               }
           }
       });
       readerThread.setDaemon(true);
       readerThread.start();
   }
   // 新增:设置暂停状态但不影响协议解析器
   public void setPaused(boolean paused) {
       this.paused = paused;
       // 注意:不停止协议解析器,只暂停UI回调
   }
   // 新增:单独停止数据捕获而不影响协议解析器
   public void stopDataCaptureOnly() {
       // 只停止数据回调,不影响协议解析器
       this.dataReceivedCallback = null;
       this.responseConsumer = null;
   }
   /**
    * 停止数据接收线程
    */
@@ -219,9 +232,6 @@
      }
   }
   public void setPaused(boolean paused) {
      this.paused = paused;
   }
   public boolean isPaused() {
      return paused;