ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
@@ -1,6 +1,7 @@ package com.ard.tianyu.controller; import com.ard.common.core.domain.AjaxResult; import com.ard.tianyu.model.dto.manual.ReturnHomeDTO; import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO; import com.ard.tianyu.model.dto.manual.TakeOffDTO; import com.ard.tianyu.service.ITyService; @@ -39,4 +40,12 @@ tyService.takeOff(takeOffDTO); return AjaxResult.success(); } @ApiOperation("返航") @ApiOperationSupport(order = 3) @PostMapping("/returnHome") public AjaxResult returnHome(@RequestBody ReturnHomeDTO returnHomeDTO) { tyService.returnHome(returnHomeDTO); return AjaxResult.success(); } } ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java
New file @@ -0,0 +1,25 @@ package com.ard.tianyu.model.dto.manual; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.DecimalMax; import javax.validation.constraints.DecimalMin; /** * 返航实体对象 * * @author liusuyi * @date 2024年10月26日9:02 **/ @Data @Builder @AllArgsConstructor @NoArgsConstructor @Validated public class ReturnHomeDTO { private String boxSn; } ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java
New file @@ -0,0 +1,34 @@ package com.ard.tianyu.netty.command.manual; import com.ard.tianyu.model.dto.manual.ReturnHomeDTO; import com.ard.tianyu.model.dto.manual.TakeOffDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; import lombok.Data; /** * 返航指令 * * @author liusuyi * @date 2024年10月26日15:43 **/ public class ReturnHomeCmd extends BaseCmd { public ReturnHomeCmd(ReturnHomeDTO returnHomeDTO) { setDataHeader((short) 0x7479); setDataLength((short) 18); setBoxSn(returnHomeDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD1); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x12); // 写入动作编号 } } ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java
New file @@ -0,0 +1,34 @@ package com.ard.tianyu.netty.command.manual; import com.ard.tianyu.model.dto.manual.ReturnHomeDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; import lombok.Data; /** * 返航回复指令 * * @author liusuyi * @date 2024年10月26日15:43 **/ @Data public class ReturnHomeReplyCmd extends BaseCmd { private final byte encryptFlag = 0x00; // 加密标志 private final byte actionCode = 0x12; // 动作编号 private final byte result; // 执行结果 private final Integer errorCode; // 错误码 public ReturnHomeReplyCmd(String boxSn, Byte result, Integer errorCode) { setDataHeader((short) 0x6A77); setDataLength((short) 23); setBoxSn(boxSn.getBytes()); setCmdCode((byte) 0xD1); this.result = result; this.errorCode = errorCode; } public void encode(ByteBuf out) { } } ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
@@ -5,7 +5,7 @@ import io.netty.buffer.ByteBuf; /** * 起飞 * 起飞指令 * * @author liusuyi * @date 2024年10月26日15:43 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java
@@ -5,7 +5,7 @@ import lombok.Data; /** * 起飞 * 起飞回复指令 * * @author liusuyi * @date 2024年10月26日15:43 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -5,6 +5,7 @@ import com.ard.tianyu.netty.command.camera.CapturePicReplyCmd; import com.ard.tianyu.netty.command.camera.RecordStartReplyCmd; import com.ard.tianyu.netty.command.camera.RecordStopReplyCmd; import com.ard.tianyu.netty.command.manual.ReturnHomeReplyCmd; import com.ard.tianyu.netty.command.manual.TakeOffReplyCmd; import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd; import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd; @@ -102,6 +103,15 @@ baseCmd = new TakeOffReplyCmd(boxSn, result, errorCode); log.debug("起飞回复: {}", boxSn); break; case 0x12: result = in.readByte(); errorCode = in.readInt(); uavData = new byte[15]; in.readBytes(uavData); boxSn = new String(uavData); baseCmd = new ReturnHomeReplyCmd(boxSn, result, errorCode); log.debug("返航回复: {}", boxSn); break; case 0x22: result = in.readByte(); errorCode = in.readInt(); ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
@@ -7,6 +7,7 @@ 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.manual.ReturnHomeDTO; import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO; import com.ard.tianyu.model.dto.manual.TakeOffDTO; import com.ard.tianyu.model.dto.signal.SignalInfo; @@ -134,6 +135,10 @@ void takeOff(TakeOffDTO takeOffDTO); /** * 返航 */ void returnHome(ReturnHomeDTO returnHomeDTO); /** * 获取无人机状态 */ UavState getUavState(String boxSn); ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -15,6 +15,7 @@ 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.manual.ReturnHomeDTO; import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO; import com.ard.tianyu.model.dto.manual.TakeOffDTO; import com.ard.tianyu.model.dto.signal.SignalInfo; @@ -27,9 +28,7 @@ import com.ard.tianyu.netty.command.control.AbsAngleControlCmd; import com.ard.tianyu.netty.command.control.AngleControlCmd; import com.ard.tianyu.netty.command.control.SpeedControlCmd; import com.ard.tianyu.netty.command.manual.SwitchUavControlCmd; import com.ard.tianyu.netty.command.manual.TakeOffCmd; import com.ard.tianyu.netty.command.manual.TakeOffReplyCmd; import com.ard.tianyu.netty.command.manual.*; import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd; import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd; import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd; @@ -291,6 +290,15 @@ } /** * 返航 */ @Override public void returnHome(ReturnHomeDTO returnHomeDTO) { ReturnHomeCmd returnHomeCmd=new ReturnHomeCmd(returnHomeDTO); this.sendMessage(tyConfiguration.getIpPort(), returnHomeCmd); } /** * 获取无人机状态 */ @Override @@ -405,6 +413,11 @@ TakeOffReplyCmd takeOffReplyCommand = (TakeOffReplyCmd) tyCommand; log.info("收到无人机起飞回复:{} 错误码:{}", String.format("0x%02X", takeOffReplyCommand.getResult() & 0xFF), takeOffReplyCommand.getErrorCode()); } //返航回复 if (tyCommand instanceof ReturnHomeReplyCmd) { ReturnHomeReplyCmd returnHomeReplyCmd = (ReturnHomeReplyCmd) tyCommand; log.info("收到无人机返航回复:{} 错误码:{}", String.format("0x%02X", returnHomeReplyCmd.getResult() & 0xFF), returnHomeReplyCmd.getErrorCode()); } break; default: // 处理其他消息