ard-work/pom.xml
@@ -46,7 +46,7 @@ <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> <version>1.18.28</version> </dependency> <!--protobuf的依赖--> @@ -61,35 +61,5 @@ <artifactId>spring-boot-starter-websocket</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.5.15</version> <configuration> <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 --> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.1.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <warName>${project.artifactId}</warName> </configuration> </plugin> </plugins> <finalName>${project.artifactId}</finalName> </build> </project> ard-work/src/main/java/com/ard/tianyu/config/TyConfiguration.java
@@ -9,7 +9,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.util.DigestUtils; import javax.annotation.Resource; import java.util.Date; @@ -45,11 +44,9 @@ private String encryptstr; public String getEncryptStr() { String sb = new StringBuilder() .append(accesskeyid) .append(accesskeysecret) .append(getTimeStamp()) .toString(); String sb = accesskeyid + accesskeysecret + getTimeStamp(); encryptstr = DigestUtils.md5DigestAsHex(sb.getBytes()); return encryptstr; } ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavSignalInfoConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/UavSignalInfoConverter.java @@ -1,4 +1,4 @@ package com.ard.tianyu.model.dto.converter; package com.ard.tianyu.model.dto.converter.realdata; import com.ard.tianyu.model.dto.signal.SignalInfo; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavStateConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/UavStateConverter.java @@ -1,4 +1,4 @@ package com.ard.tianyu.model.dto.converter; package com.ard.tianyu.model.dto.converter.realdata; import com.ard.tianyu.model.dto.state.*; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; ard-work/src/main/java/com/ard/tianyu/model/dto/converter/realdata/UavTelemetryDataConverter.java
File was renamed from ard-work/src/main/java/com/ard/tianyu/model/dto/converter/UavTelemetryDataConverter.java @@ -1,6 +1,5 @@ package com.ard.tianyu.model.dto.converter; package com.ard.tianyu.model.dto.converter.realdata; import com.ard.tianyu.model.dto.state.UavState; import com.ard.tianyu.model.dto.telemetry.TelemetryData; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import org.springframework.beans.BeanUtils; ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
@@ -1,5 +1,6 @@ package com.ard.tianyu.netty.command.real; import com.ard.tianyu.model.dto.signal.SignalInfo; import com.ard.tianyu.netty.command.BaseCmd; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import io.netty.buffer.ByteBuf; @@ -8,12 +9,13 @@ @Data public class SignalInfoCmd extends BaseCmd { private int delayTime; private TelemetryDataPB.SignalInfo signalInfo; private SignalInfo signalInfo; // 构造函数 public SignalInfoCmd(TelemetryDataPB.SignalInfo signalInfo) { public SignalInfoCmd(SignalInfo signalInfo) { setDataHeader((short) 0x6A77); // 设置帧头 // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度 setBoxSn(signalInfo.getBoxSn().getBytes()); setCmdCode((byte) 0x0C); // 设置命令编号 this.signalInfo = signalInfo; } ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
@@ -1,25 +1,23 @@ package com.ard.tianyu.netty.command.real; import com.ard.tianyu.model.dto.state.UavState; import com.ard.tianyu.netty.command.BaseCmd; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import io.netty.buffer.ByteBuf; import lombok.Data; @Data public class UavStateCmd extends BaseCmd { private TelemetryDataPB.UavState uavState; // ProtoBuf 数据类 private UavState uavState; // ProtoBuf 数据类 // 构造函数 public UavStateCmd(TelemetryDataPB.UavState uavState) { public UavStateCmd(UavState uavState) { setDataHeader((short) 0x6A77); // 设置帧头 setBoxSn(uavState.getBoxSn().getBytes()); // 设置云盒编号 // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度 setCmdCode((byte) 0xA8); // 设置命令编号 this.uavState = uavState; } // 获取无人机状态数据 public TelemetryDataPB.UavState getUavState() { return uavState; } // 实现 encode 方法,如果需要 @Override public void encode(ByteBuf out) { ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
@@ -1,8 +1,10 @@ package com.ard.tianyu.netty.command.real; import com.ard.tianyu.model.dto.telemetry.TelemetryData; import com.ard.tianyu.netty.command.BaseCmd; import com.ard.tianyu.netty.protobuf.TelemetryDataPB; import io.netty.buffer.ByteBuf; import lombok.Data; /** * UavDataCommand @@ -10,19 +12,16 @@ * @author liusuyi * @date 2024年10月23日9:33 **/ @Data public class UavTelemetryDataCmd extends BaseCmd { private TelemetryDataPB.TelemetryData telemetryData; private TelemetryData telemetryData; // 构造函数 public UavTelemetryDataCmd(TelemetryDataPB.TelemetryData telemetryData) { public UavTelemetryDataCmd(TelemetryData telemetryData) { setDataHeader((short) 0x6A77); // 设置帧头 // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度 setBoxSn(telemetryData.getBoxSn().getBytes()); setCmdCode((byte) 0xA9); // 设置命令编号 this.telemetryData = telemetryData; } // 获取无人机状态数据 public TelemetryDataPB.TelemetryData getTelemetryData() { return telemetryData; } // 实现 encode 方法,如果需要 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -1,6 +1,12 @@ package com.ard.tianyu.netty.handler;// MessageProtocolDecoder.java import com.ard.common.utils.ByteUtils; import com.ard.tianyu.model.dto.converter.realdata.UavSignalInfoConverter; import com.ard.tianyu.model.dto.converter.realdata.UavStateConverter; import com.ard.tianyu.model.dto.converter.realdata.UavTelemetryDataConverter; import com.ard.tianyu.model.dto.signal.SignalInfo; import com.ard.tianyu.model.dto.state.UavState; import com.ard.tianyu.model.dto.telemetry.TelemetryData; import com.ard.tianyu.netty.command.BaseCmd; import com.ard.tianyu.netty.command.camera.CameraModeReplyCmd; import com.ard.tianyu.netty.command.camera.CapturePicReplyCmd; @@ -70,15 +76,16 @@ case (byte) 0xA8: byte[] uavStatus = new byte[dataLength - 1]; in.readBytes(uavStatus); // 读取 ProtoBuf 数据 TelemetryDataPB.UavState uavState = TelemetryDataPB.UavState.parseFrom(uavStatus); TelemetryDataPB.UavState uavStatePB = TelemetryDataPB.UavState.parseFrom(uavStatus); UavState uavState = UavStateConverter.convertProtoToEntity(uavStatePB); baseCmd = new UavStateCmd(uavState); log.debug("无人机状态数据: {}", uavState.getBoxSn()); break; case (byte) 0xA9: byte[] telemetryDataBytes = new byte[dataLength - 1]; in.readBytes(telemetryDataBytes); TelemetryDataPB.TelemetryData telemetryData = TelemetryDataPB.TelemetryData.parseFrom(telemetryDataBytes); TelemetryDataPB.TelemetryData telemetryDataPB = TelemetryDataPB.TelemetryData.parseFrom(telemetryDataBytes); TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(telemetryDataPB); baseCmd = new UavTelemetryDataCmd(telemetryData); log.debug("遥测数据: {}", telemetryData.getBoxSn()); break; @@ -88,7 +95,8 @@ in.readBytes(signalInfoBytes); signalInfoBytes = new byte[dataLength - 20]; in.readBytes(signalInfoBytes); TelemetryDataPB.SignalInfo signalInfo = TelemetryDataPB.SignalInfo.parseFrom(signalInfoBytes); TelemetryDataPB.SignalInfo signalInfoPB = TelemetryDataPB.SignalInfo.parseFrom(signalInfoBytes); SignalInfo signalInfo =UavSignalInfoConverter.convertProtoToEntity(signalInfoPB); baseCmd = new SignalInfoCmd(signalInfo); log.debug("信道质量数据: {}", delayTime); break; ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -14,9 +14,9 @@ import com.ard.tianyu.model.dto.control.AbsAngleControlDTO; import com.ard.tianyu.model.dto.control.AngleControlDTO; import com.ard.tianyu.model.dto.control.SpeedControlDTO; import com.ard.tianyu.model.dto.converter.UavSignalInfoConverter; import com.ard.tianyu.model.dto.converter.UavStateConverter; import com.ard.tianyu.model.dto.converter.UavTelemetryDataConverter; import com.ard.tianyu.model.dto.converter.realdata.UavSignalInfoConverter; import com.ard.tianyu.model.dto.converter.realdata.UavStateConverter; import com.ard.tianyu.model.dto.converter.realdata.UavTelemetryDataConverter; import com.ard.tianyu.model.dto.converter.wayline.PlanLineDataConverter; import com.ard.tianyu.model.dto.manual.*; import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO; @@ -58,10 +58,7 @@ import javax.annotation.Resource; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * TyServiceImpl @@ -599,26 +596,23 @@ case (byte) 0xA8: // 处理无人机状态消息 UavStateCmd uavStateCmd = (UavStateCmd) tyCommand; UavState uavState = UavStateConverter.convertProtoToEntity(uavStateCmd.getUavState()); UavStateCache.putUavState(uavState); logPrint("无人机状态", uavState.getBoxSn()); // WebSocketUtil.sendMessageAll(uavState); UavStateCache.putUavState(uavStateCmd.getUavState()); logPrint("无人机状态", uavStateCmd.getUavState().getBoxSn()); WebSocketUtil.sendMessageAll(uavStateCmd.getUavState()); break; case (byte) 0xA9: // 处理无人机遥测消息 UavTelemetryDataCmd uavTelemetryDataCmd = (UavTelemetryDataCmd) tyCommand; TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(uavTelemetryDataCmd.getTelemetryData()); UavTelemetryDataCache.putUavTelemetryData(telemetryData); logPrint("无人机遥测", telemetryData.getBoxSn()); WebSocketUtil.sendMessageAll(telemetryData); UavTelemetryDataCache.putUavTelemetryData(uavTelemetryDataCmd.getTelemetryData()); logPrint("无人机遥测", uavTelemetryDataCmd.getTelemetryData().getBoxSn()); WebSocketUtil.sendMessageAll(uavTelemetryDataCmd.getTelemetryData()); break; case (byte) 0x0C: // 处理无人机信道质量数据 SignalInfoCmd signalInfoCmd = (SignalInfoCmd) tyCommand; SignalInfo signalInfo = UavSignalInfoConverter.convertProtoToEntity(signalInfoCmd.getSignalInfo()); UavSignalInfoCache.putUavSignalInfoCache(signalInfo); logPrint("无人机信道质量", signalInfo.getBoxSn()); UavSignalInfoCache.putUavSignalInfoCache(signalInfoCmd.getSignalInfo()); logPrint("无人机信道质量", signalInfoCmd.getSignalInfo().getBoxSn()); break; case (byte) 0xD1: // 处理无人机