18045010223
2025-07-07 0d3a683a0c97154b1f2e6657398664537e4e3e82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package org.yzh.protocol.t808.T8900Lock;
 
import io.github.yezhihao.protostar.annotation.Field;
import lombok.Data;
//import org.yzh.commons.util.BytesUtils;
 
/**
 * 蝶阀锁协议数据结构
 * 格式: aa aa 02 cc bb
 */
@Data
public class ValveLockProtocol {
 
    public static final Integer key = 0x41;
 
    @Field(desc = "锁ID", length = 2)
    private byte[] lockId;
 
    @Field(desc = "固定值", length = 1)
    private final byte fixedValue = 0x02;
 
    @Field(desc = "锁芯状态", length = 1)
    private byte status;
 
    @Field(desc = "校验和", length = 1)
    private byte checksum;
 
    // 锁状态常量
    public static final byte STATUS_OPEN = 0x01;  // 开锁状态
    public static final byte STATUS_CLOSE = 0x02; // 关锁状态
 
    /**
     * 计算校验和:(aa + aa + 02 + cc) & 0xFF
     */
    public void calculateChecksum() {
        int sum = lockId[0] & 0xFF;
        sum += lockId[1] & 0xFF;
        sum += fixedValue & 0xFF;
        sum += status & 0xFF;
        this.checksum = (byte) (sum & 0xFF); // 取低8位
    }
 
    /**
     * 验证校验和
     */
    public boolean verifyChecksum() {
        int sum = lockId[0] & 0xFF;
        sum += lockId[1] & 0xFF;
        sum += fixedValue & 0xFF;
        sum += status & 0xFF;
        byte expected = (byte) (sum & 0xFF);
        return expected == checksum;
    }
 
//    /**
//     * 从16进制字符串创建锁ID
//     */
//    public static byte[] createLockId(String hexString) {
//        return BytesUtils.hex2bytes(hexString);
//    }
}