From b9f46001860bf194601b4bdf848545bfc72eefa5 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 26 Oct 2024 16:59:35 +0800
Subject: [PATCH] 增加:返航

---
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java    |   10 +++
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java              |   19 +++++-
 ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java          |   25 ++++++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java      |   34 +++++++++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java    |    2 
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                      |    5 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java |   34 +++++++++++
 ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java       |    9 +++
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java         |    2 
 9 files changed, 135 insertions(+), 5 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
index 808295a..d90cab3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
+++ b/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();
+    }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java
new file mode 100644
index 0000000..fa22f5a
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/ReturnHomeDTO.java
@@ -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;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java
new file mode 100644
index 0000000..236b3e8
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCmd.java
@@ -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);          // 写入动作编号
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java
new file mode 100644
index 0000000..b9168da
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeReplyCmd.java
@@ -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) {
+
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
index 4dea279..02ffeff 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java
index bc4c221..02ceabe 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java
+++ b/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
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
index 0d20128..10b9d63 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
+++ b/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();
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java b/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
index b304b82..2308965 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
+++ b/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);
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index 1a3c1cd..1525c4d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
+++ b/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:
                 // 处理其他消息

--
Gitblit v1.9.3