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); // } }