张世豪
昨天 ef78717c5b956a26b360de44f774fc2b804296c2
src/publicway/SerialProtocolParser.java
@@ -5,6 +5,7 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import chuankou.SerialPortService;
import publicway.ProtocolParser01.ParseResult;
public class SerialProtocolParser {
@@ -45,7 +46,7 @@
     */
    public void start() {
        if (isRunning) {
            System.out.println("串口协议解析器已经在运行中");
            //System.out.println("串口协议解析器已经在运行中");
            return;
        }
        
@@ -58,7 +59,7 @@
        processorThread.setDaemon(true);
        processorThread.start();
        
        System.out.println("串口协议解析器已启动");
        //System.out.println("串口协议解析器已启动");
    }
    
    /**
@@ -97,7 +98,7 @@
        batchQueue.clear();
        bufferPosition = 0;
        
        System.out.println("串口协议解析器已停止");
        //System.out.println("串口协议解析器已停止");
    }
    
    /**
@@ -112,7 +113,7 @@
     */
    public void receiveData(byte[] rawData) {       
        if (!isRunning) {
            System.out.println("警告: 串口协议解析器未启动,忽略接收的数据");
            //System.out.println("警告: 串口协议解析器未启动,忽略接收的数据");
            return;
        }
        
@@ -166,7 +167,7 @@
        long maxMem = runtime.maxMemory();
        
        if (usedMem > maxMem * 0.8) {
            System.out.println("内存使用率超过80%,当前使用: " + (usedMem / 1024 / 1024) + "MB");
            //System.out.println("内存使用率超过80%,当前使用: " + (usedMem / 1024 / 1024) + "MB");
        }
    }
    
@@ -249,14 +250,14 @@
     * 处理数据包的主方法
     */
    private void processPackets() {
        System.out.println("串口数据包处理线程开始运行");
        //System.out.println("串口数据包处理线程开始运行");
        
        while (isRunning && !Thread.currentThread().isInterrupted()) {
            try {
                byte[] packet = dataQueue.take(); // 阻塞直到有数据
                parsePacket(packet);
            } catch (InterruptedException e) {
                System.out.println("串口数据包处理线程被中断");
                //System.out.println("串口数据包处理线程被中断");
                Thread.currentThread().interrupt();
                break;
            } catch (Exception e) {
@@ -265,7 +266,7 @@
            }
        }
        
        System.out.println("串口数据包处理线程结束运行");
        //System.out.println("串口数据包处理线程结束运行");
    }
    
    /**
@@ -273,6 +274,7 @@
     */
    private void parsePacket(byte[] packet) {
        try {
           SerialPortService.getReceivedDataCount();
            // 解析基本字段
            byte hostAddress = packet[4];        // 主机地址
            byte slotAddress = packet[5];        // 卡槽地址
@@ -296,7 +298,7 @@
                        // 使用优化的字节数组解析方法,避免字符串转换
                        ParseResult rst = ProtocolParser01.parseDDCC01Data(packet);
                        rst.fuzhi();
                        rst.toString();
//                        rst.toString();
                    }
                    break;
                case FUNCTION_51:
@@ -304,25 +306,25 @@
                    String hexPacket = bytesToHex(packet);
                    int result = ProtocolParser51.parse(hexPacket);
                    if (result == 1) {
                        System.out.println("功能码 0x51 - 开门控制成功");
                        //System.out.println("功能码 0x51 - 开门控制成功");
                    } else {
                        System.out.println("功能码 0x51 - 开门控制失败或报文不合法");
                        //System.out.println("功能码 0x51 - 开门控制失败或报文不合法");
                    }
                    break;
                case FUNCTION_52:
                    System.out.println("功能码 0x52 - LED亮度控制");
                    //System.out.println("功能码 0x52 - LED亮度控制");
                    break;
                case FUNCTION_80:
                    System.out.println("功能码 0x80 - 工卡升级使能");
                    //System.out.println("功能码 0x80 - 工卡升级使能");
                    break;
                case FUNCTION_81:
                    System.out.println("功能码 0x81 - 工作卡升级数据包");
                    //System.out.println("功能码 0x81 - 工作卡升级数据包");
                    break;
                case FUNCTION_82:
                    System.out.println("功能码 0x82 - 单板升级使能");
                    //System.out.println("功能码 0x82 - 单板升级使能");
                    break;
                case FUNCTION_83:
                    System.out.println("功能码 0x83 - 单板升级数据包");
                    //System.out.println("功能码 0x83 - 单板升级数据包");
                    break;
                default:
                    System.err.println("未知功能码: 0x" + Integer.toHexString(functionCode & 0xFF));