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