diff --git a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java index 5e9287e..4c934a4 100644 --- a/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java +++ b/src/main/java/com/zjyr/beidouservice/adapter/impl/netty/decode/YuanRongProtocolDecode.java @@ -4,6 +4,7 @@ import com.zjyr.beidouservice.common.CommonEnumHandler; import com.zjyr.beidouservice.common.impl.BeidouStatusName; import com.zjyr.beidouservice.common.impl.ControlCommandName; import com.zjyr.beidouservice.common.impl.SendStatusName; +import com.zjyr.beidouservice.common.impl.SensorControlTunnelName; import com.zjyr.beidouservice.common.impl.SensorStatusName; import com.zjyr.beidouservice.common.impl.TelphoneStatusName; import com.zjyr.beidouservice.common.impl.WirelessStatusName; @@ -11,6 +12,8 @@ import com.zjyr.beidouservice.pojo.vo.binary.BaseBinaryProtocol; import com.zjyr.beidouservice.pojo.vo.binary.ControllerStatus; import com.zjyr.beidouservice.pojo.vo.binary.MessageContent; import com.zjyr.beidouservice.pojo.vo.binary.SensorCotrolAck; +import com.zjyr.beidouservice.pojo.vo.binary.SensorStatusAck; +import com.zjyr.beidouservice.pojo.vo.binary.SensorStatusInfo; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.channel.ChannelHandlerContext; @@ -19,6 +22,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; /** @@ -109,6 +113,59 @@ public class YuanRongProtocolDecode extends ByteToMessageDecoder { .build()); } case COMMAND_REPORT_QUERY_SENSOR -> { + int nItems = buf.readByte(); + SensorStatusAck sensorAck = SensorStatusAck.builder().sensorStatus(new ArrayList<>()).build(); + + MessageContent msgCtx = MessageContent.builder().msgType( + msgType).msgSize(msgSize).msgBody(sensorAck).build(); + + for (int i = 0; i < nItems; i++) { + short tmInfo = buf.readShort(); + SensorControlTunnelName tn = CommonEnumHandler.codeOf(SensorControlTunnelName.class, + buf.readByte()); + int cmdType = buf.readByte(); + short sa = buf.readShort(); + short sid = buf.readShort(); + int warrStatus = buf.readByte(); + byte[] emStatus = new byte[3]; + buf.readBytes(emStatus, 0, 3); + byte[] speakerStatus = new byte[3]; + buf.readBytes(speakerStatus, 0, 3); + int runStatus = buf.readByte(); + byte[] signale = new byte[5]; + buf.readBytes(signale, 0, 5); + byte[] id = new byte[3]; + buf.readBytes(id, 0, 3); + + SensorStatusInfo si = SensorStatusInfo.builder() + .dtInfo(tmInfo) + .tunnelName(tn) + .command(cmdType) + .startAddr(sa) + .sensorId(sid) + .warrningStatus(warrStatus) + .emgryStatus(emStatus) + .speakerStatus(speakerStatus) + .runStatus(runStatus) + .signalStrength(signale) + .beidouId(id) + .build(); + + sensorAck.getSensorStatus().add(si); + } + + list.add(BaseBinaryProtocol.builder() + .msgLength(msgLength) + .version(version) + .recvMajorId(recvMajorId) + .recvMinorId(recvMinorId) + .sendMajorId(sendMajorId) + .sendMinorId(sendMinorId) + .cryptoType(cryptCytp) + .timeStamp(timeStamp) + .statusCode(statusCode) + .msgContent(msgCtx) + .build()); } default -> log.error("Unsupport Command: {}({})", cmd, msgType); } diff --git a/src/main/java/com/zjyr/beidouservice/pojo/vo/binary/SensorStatusAck.java b/src/main/java/com/zjyr/beidouservice/pojo/vo/binary/SensorStatusAck.java new file mode 100644 index 0000000..34ce9c1 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/pojo/vo/binary/SensorStatusAck.java @@ -0,0 +1,12 @@ +package com.zjyr.beidouservice.pojo.vo.binary; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class SensorStatusAck { + private List sensorStatus; +} diff --git a/src/main/java/com/zjyr/beidouservice/pojo/vo/binary/SensorStatusInfo.java b/src/main/java/com/zjyr/beidouservice/pojo/vo/binary/SensorStatusInfo.java new file mode 100644 index 0000000..819707b --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/pojo/vo/binary/SensorStatusInfo.java @@ -0,0 +1,21 @@ +package com.zjyr.beidouservice.pojo.vo.binary; + +import com.zjyr.beidouservice.common.impl.SensorControlTunnelName; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class SensorStatusInfo { + private Short dtInfo; + private SensorControlTunnelName tunnelName; + private Integer command; + private Short startAddr; + private Short sensorId; + private Integer warrningStatus; + private byte[] emgryStatus; + private byte[] speakerStatus; + private Integer runStatus; + private byte[] signalStrength; + private byte[] beidouId; +}