1. 增加传感器状态上报协议解析

This commit is contained in:
HuangXin 2023-08-14 21:47:13 +08:00
parent e4270b51b8
commit ea70b9416e
3 changed files with 90 additions and 0 deletions

View File

@ -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<SensorStatusAck> msgCtx = MessageContent.<SensorStatusAck>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.<SensorStatusAck>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);
}

View File

@ -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<SensorStatusInfo> sensorStatus;
}

View File

@ -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;
}