package org.yzh.protocol.commons.transform.passthrough; import io.netty.buffer.ByteBuf; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; import java.util.ArrayList; import java.util.List; /** * 状态查询 * 外设状态信息:外设工作状态、设备报警信息 * @author yezhihao * https://gitee.com/yezhihao/jt808-server */ @ToString @Data @Accessors(chain = true) public class PeripheralStatus { public static final Integer key = 0xF7; private List items; @ToString @Data @Accessors(chain = true) public static class Item { /** * 外设ID: * 100.高级驾驶辅助系统(ADAS) * 101.驾驶员状态监控系统(DSM) * 102.轮胎气压监测系统(TPMS) * 103.盲点监测系统(BSD) */ private byte id; /** 工作状态:1.正常工作 2.待机状态 3.升级维护 4.设备异常 16.断开连接 */ private byte workState; /** * 报警状态: * 按位设置:0.表示无 1.表示有 * [0]摄像头异常 * [1]主存储器异常 * [2]辅存储器异常 * [3]红外补光异常 * [4]扬声器异常 * [5]电池异常 * [6~9]预留 * [10]通讯模块异常 * [ll]定位模块异常 * [12~31]预留 */ private int alarmStatus; public Item() { } public Item(byte id, byte workState, int alarmStatus) { this.id = id; this.workState = workState; this.alarmStatus = alarmStatus; } } public static class Schema implements io.github.yezhihao.protostar.Schema { public static final Schema INSTANCE = new Schema(); private Schema() { } @Override public PeripheralStatus readFrom(ByteBuf input) { byte total = input.readByte(); List list = new ArrayList<>(total); for (int i = 0; i < total && input.isReadable(); i++) { Item item = new Item(); item.id = input.readByte(); int len = input.readUnsignedByte(); item.workState = input.readByte(); item.alarmStatus = input.readInt(); input.skipBytes(len - 5); list.add(item); } return new PeripheralStatus().setItems(list); } @Override public void writeTo(ByteBuf output, PeripheralStatus message) { List items = message.getItems(); output.writeByte(items.size()); for (Item item : items) { output.writeByte(item.id); output.writeByte(5); output.writeByte(item.workState); output.writeInt(item.alarmStatus); } } } }