From 87cba28b3dc8389e1df61f3ba7d986b09fd89db0 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 02 Nov 2024 11:26:21 +0800
Subject: [PATCH] 增加:无人机设置接口

---
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java               |   31 +++
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java                     |    1 
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java                         |   48 ++++++
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java                   |    1 
 ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelReplyCmd.java      |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingReplyCmd.java  |   33 ++++
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                                 |   21 ++
 ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java          |   29 +++
 ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java           |   41 +++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingReplyCmd.java  |   33 ++++
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java                     |    1 
 ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java           |   26 +++
 ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java                   |   60 +++++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java       |   38 ++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingReplyCmd.java |   33 ++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java      |   35 ++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java       |   44 +++++
 17 files changed, 471 insertions(+), 6 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java
new file mode 100644
index 0000000..3755297
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavSettingsController.java
@@ -0,0 +1,60 @@
+package com.ard.tianyu.controller;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.tianyu.model.dto.BoxHistoryDTO;
+import com.ard.tianyu.model.dto.BoxPhotosDTO;
+import com.ard.tianyu.model.dto.BoxSettingsDTO;
+import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
+import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
+import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
+import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
+import com.ard.tianyu.model.receiver.BoxInfoReceiver;
+import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
+import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
+import com.ard.tianyu.service.ITyService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSort;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * UavBaseController
+ *
+ * @author liusuyi
+ * @date 2024年10月21日13:52
+ **/
+@Api(tags = "无人机设置接口")
+@ApiSort(value = 3)
+@RequestMapping("/uav/settings")
+@RestController
+public class UavSettingsController {
+
+    @Resource
+    private ITyService tyService;
+
+    @ApiOperation(value = "设置返航高度",notes = "高度【取值范围:20~1500,单位/米】")
+    @ApiOperationSupport(order = 1)
+    @PostMapping("/updateReturnHeight")
+    public AjaxResult updateReturnHeight(@RequestBody ReturnHeightSettingDTO returnHeightSettingDTO) {
+        tyService.updateReturnHeight(returnHeightSettingDTO);
+        return AjaxResult.success();
+    }
+    @ApiOperation("设置返航点")
+    @ApiOperationSupport(order = 2)
+    @PostMapping("/updateReturnPoint")
+    public AjaxResult updateReturnPoint(@RequestBody ReturnPointSettingDTO returnPointSettingDTO) {
+        tyService.updateReturnPoint(returnPointSettingDTO);
+        return AjaxResult.success();
+    }
+    @ApiOperation(value = "设置视频码流",notes = "帧率【建议值:25或30】 码率【不超过10000】")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/updateVideoStream")
+    public AjaxResult updateVideoStream(@RequestBody VideoStreamSettingDTO videoStreamSettingDTO) {
+        tyService.updateVideoStream(videoStreamSettingDTO);
+        return AjaxResult.success();
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
index 92f6a44..15eb4cf 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
@@ -16,7 +16,6 @@
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-@Validated
 public class CameraModeDTO {
     private String boxSn;
     private Byte actionParam;
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
index cd9c582..b309413 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
@@ -16,7 +16,6 @@
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-@Validated
 public class CapturePicDTO {
     private String boxSn;
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
index ef53703..e63c570 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
@@ -19,7 +19,6 @@
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-@Validated
 public class SwitchCameraDTO {
     private String boxSn;
     //	0x00 FPV 0x01 载荷
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java
new file mode 100644
index 0000000..34d7fcf
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnHeightSettingDTO.java
@@ -0,0 +1,29 @@
+package com.ard.tianyu.model.dto.settings;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+/**
+ * 返航高度实体对象
+ *
+ * @author liusuyi
+ * @date 2024年11月01日10:55
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Validated
+public class ReturnHeightSettingDTO {
+    private String boxSn;
+    //取值范围:20~1500,单位/米
+    @Min(value = 20, message = "返航高度 最小值为 20")
+    @Max(value = 1500, message = "返航高度 最大值为 1500")
+    private Short height;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java
new file mode 100644
index 0000000..be8aa9f
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/ReturnPointSettingDTO.java
@@ -0,0 +1,26 @@
+package com.ard.tianyu.model.dto.settings;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+/**
+ * 返航点实体对象
+ *
+ * @author liusuyi
+ * @date 2024年11月01日10:55
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ReturnPointSettingDTO {
+    private String boxSn;
+    private Double longitude;
+    private Double latitude;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java
new file mode 100644
index 0000000..1b8683f
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/settings/VideoStreamSettingDTO.java
@@ -0,0 +1,41 @@
+package com.ard.tianyu.model.dto.settings;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.Max;
+
+/**
+ * 返航点实体对象
+ *
+ * @author liusuyi
+ * @date 2024年11月01日10:55
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Validated
+public class VideoStreamSettingDTO {
+    private String boxSn;
+    /**
+     * 分辨率宽度
+     */
+    private Integer resolutionWidth;
+    /**
+     * 分辨率高度
+     */
+    private Integer resolutionHeight;
+    /**
+     *  帧率 (建议值:25或30)
+     */
+    private Byte frameRate;
+    /**
+     *  码率
+     */
+    @Max(value = 10000, message = "码率 最大值为 10000")
+    private Integer bitrate;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelReplyCmd.java
index 52e356a..e8b3f35 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelReplyCmd.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/ReturnHomeCancelReplyCmd.java
@@ -14,7 +14,7 @@
 public class ReturnHomeCancelReplyCmd extends BaseCmd {
 
     private final byte encryptFlag = 0x00; // 加密标志
-    private final byte actionCode = 0x13;  // 动作编号
+    private final byte actionCode = 0x21;  // 动作编号
     private final byte result;             // 执行结果
     private final Integer errorCode;       // 错误码
 
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java
new file mode 100644
index 0000000..1e6f379
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingCmd.java
@@ -0,0 +1,35 @@
+package com.ard.tianyu.netty.command.settings;
+
+import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 修改返航高度指令
+ *
+ * @author liusuyi
+ * @date 2024年10月30日16:20
+ **/
+public class ReturnHeightSettingCmd extends BaseCmd {
+
+    private final Short height;
+
+    public ReturnHeightSettingCmd(ReturnHeightSettingDTO returnHeightSettingDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 20);
+        setBoxSn(returnHeightSettingDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        this.height = returnHeightSettingDTO.getHeight();
+    }
+
+    public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeBytes(getBoxSn());         // 写入盒子SN
+        out.writeByte(getCmdCode());        // 写入命令码
+        out.writeByte(0x00);          // 写入加密标志
+        out.writeByte(0x21);          // 写入动作编号
+        out.writeShort(height);               // 写入返航高度
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingReplyCmd.java
new file mode 100644
index 0000000..29c9f3b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnHeightSettingReplyCmd.java
@@ -0,0 +1,33 @@
+package com.ard.tianyu.netty.command.settings;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 修改返航高度回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月30日16:20
+ **/
+@Data
+public class ReturnHeightSettingReplyCmd extends BaseCmd {
+
+    private final byte encryptFlag = 0x00; // 加密标志
+    private final byte actionCode = 0x21;  // 动作编号
+    private final byte result;             // 执行结果
+    private final Integer errorCode;       // 错误码
+
+    public ReturnHeightSettingReplyCmd(String boxSn, Byte result, Integer errorCode) {
+        setDataHeader((short) 0x6A77);
+        //setDataLength((short) 18);
+        setCmdCode((byte) 0xD1);
+        setBoxSn(boxSn.getBytes());
+        this.result = result;
+        this.errorCode = errorCode;
+    }
+
+    public void encode(ByteBuf out) {
+
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java
new file mode 100644
index 0000000..066875e
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingCmd.java
@@ -0,0 +1,38 @@
+package com.ard.tianyu.netty.command.settings;
+
+import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
+import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * 修改返航点指令
+ *
+ * @author liusuyi
+ * @date 2024年10月30日16:20
+ **/
+public class ReturnPointSettingCmd extends BaseCmd {
+
+    private final Double longitude;
+    private final Double latitude;
+
+    public ReturnPointSettingCmd(ReturnPointSettingDTO returnPointSettingDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 34);
+        setBoxSn(returnPointSettingDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        this.longitude= returnPointSettingDTO.getLongitude();
+        this.latitude= returnPointSettingDTO.getLatitude();
+    }
+
+    public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeBytes(getBoxSn());         // 写入盒子SN
+        out.writeByte(getCmdCode());        // 写入命令码
+        out.writeByte(0x00);          // 写入加密标志
+        out.writeByte(0x31);          // 写入动作编号
+        out.writeDouble(longitude);         // 写入经度
+        out.writeDouble(latitude);          // 写入纬度
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingReplyCmd.java
new file mode 100644
index 0000000..c4d0c0d
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/ReturnPointSettingReplyCmd.java
@@ -0,0 +1,33 @@
+package com.ard.tianyu.netty.command.settings;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 修改返航高度回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月30日16:20
+ **/
+@Data
+public class ReturnPointSettingReplyCmd extends BaseCmd {
+
+    private final byte encryptFlag = 0x00; // 加密标志
+    private final byte actionCode = 0x31;  // 动作编号
+    private final byte result;             // 执行结果
+    private final Integer errorCode;       // 错误码
+
+    public ReturnPointSettingReplyCmd(String boxSn, Byte result, Integer errorCode) {
+        setDataHeader((short) 0x6A77);
+        //setDataLength((short) 18);
+        setCmdCode((byte) 0xD1);
+        setBoxSn(boxSn.getBytes());
+        this.result = result;
+        this.errorCode = errorCode;
+    }
+
+    public void encode(ByteBuf out) {
+
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java
new file mode 100644
index 0000000..407349b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingCmd.java
@@ -0,0 +1,44 @@
+package com.ard.tianyu.netty.command.settings;
+
+import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
+import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * 设置视频码流指令
+ *
+ * @author liusuyi
+ * @date 2024年10月30日16:20
+ **/
+public class VideoStreamSettingCmd extends BaseCmd {
+
+    private final int resolutionWidth;  // 水平像素
+    private final int resolutionHeight; // 垂直像素
+    private final int bitrate;          // 码率
+    private final byte frameRate;       // 帧率
+
+    public VideoStreamSettingCmd(VideoStreamSettingDTO videoStreamSettingDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 27);
+        setBoxSn(videoStreamSettingDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD2);
+        this.bitrate = videoStreamSettingDTO.getBitrate();
+        this.resolutionWidth = videoStreamSettingDTO.getResolutionWidth();
+        this.resolutionHeight = videoStreamSettingDTO.getResolutionHeight();
+        this.frameRate = videoStreamSettingDTO.getFrameRate();
+    }
+
+    public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeBytes(getBoxSn());         // 写入盒子SN
+        out.writeByte(getCmdCode());        // 写入命令码
+        out.writeByte(0x00);          // 写入加密标志
+        out.writeByte(0x05);          // 写入动作编号
+        out.writeInt(resolutionWidth);      // 写入水平像素
+        out.writeInt(resolutionHeight);     // 写入垂直像素
+        out.writeByte(frameRate);           // 写入帧率
+        out.writeInt(bitrate);              // 写入码率
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingReplyCmd.java
new file mode 100644
index 0000000..4724c5b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/settings/VideoStreamSettingReplyCmd.java
@@ -0,0 +1,33 @@
+package com.ard.tianyu.netty.command.settings;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 设置视频码流回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月30日16:20
+ **/
+@Data
+public class VideoStreamSettingReplyCmd extends BaseCmd {
+
+    private final byte encryptFlag = 0x00; // 加密标志
+    private final byte actionCode = 0x05;  // 动作编号
+    private final byte result;             // 执行结果
+    private final Integer errorCode;       // 错误码
+
+    public VideoStreamSettingReplyCmd(String boxSn, Byte result, Integer errorCode) {
+        setDataHeader((short) 0x6A77);
+        //setDataLength((short) 18);
+        setCmdCode((byte) 0XD2);
+        setBoxSn(boxSn.getBytes());
+        this.result = result;
+        this.errorCode = errorCode;
+    }
+
+    public void encode(ByteBuf out) {
+
+    }
+}
\ No newline at end of file
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 ded0aa6..0675b91 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
@@ -16,6 +16,9 @@
 import com.ard.tianyu.netty.command.register.HeartbeatReplyCmd;
 import com.ard.tianyu.netty.command.register.RegisterReplyCmd;
 import com.ard.tianyu.netty.command.register.UavInitReplyCmd;
+import com.ard.tianyu.netty.command.settings.ReturnHeightSettingReplyCmd;
+import com.ard.tianyu.netty.command.settings.ReturnPointSettingReplyCmd;
+import com.ard.tianyu.netty.command.settings.VideoStreamSettingReplyCmd;
 import com.ard.tianyu.netty.command.wayline.*;
 import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
 import com.google.protobuf.InvalidProtocolBufferException;
@@ -93,6 +96,11 @@
                 actionCode = in.readByte();//动作编号
                 baseCmd = processD1ReplyCmd(in, actionCode);
                 break;
+            case (byte) 0xD2:
+                in.readByte();//加密标志
+                actionCode = in.readByte();//动作编号
+                baseCmd = processD2ReplyCmd(in, actionCode);
+                break;
             default:
                 in.readByte();//加密标志
                 actionCode = in.readByte();
@@ -134,8 +142,12 @@
                 return new WayLineResumeReplyCmd(boxSn, result, errorCode);
             case 0x20:
                 return new WayLineEndReplyCmd(boxSn, result, errorCode);
+            case 0x21:
+                return new ReturnHeightSettingReplyCmd(boxSn, result, errorCode);
             case 0x29:
                 return new LandForcedReplyCmd(boxSn, result, errorCode);
+            case 0x31:
+                return new ReturnPointSettingReplyCmd(boxSn, result, errorCode);
             case 0x32:
                 return new EmergencyBrakeReplyCmd(boxSn, result, errorCode);
             case 0x39:
@@ -156,11 +168,26 @@
                 return processSpecialD1ReplyCmd(in, actionCode, boxSn);
             // Add other cases...
             default:
-                log.warn("无法识别的动作编号:{}", ByteUtils.byteToHex(actionCode));
+                log.warn("无法识别D1的动作编号:{}", ByteUtils.byteToHex(actionCode));
         }
         return null;
     }
-
+    //处理D1指令回复
+    private BaseCmd processD2ReplyCmd(ByteBuf in, byte actionCode) {
+        byte result = in.readByte();
+        int errorCode = in.readInt();
+        byte[] uavData = new byte[15];
+        in.readBytes(uavData);
+        String boxSn = new String(uavData);
+        switch (actionCode) {
+            case 0x05:
+                return new VideoStreamSettingReplyCmd(boxSn, result, errorCode);
+            // Add other cases...
+            default:
+                log.warn("无法识别D2的动作编号:{}", ByteUtils.byteToHex(actionCode));
+        }
+        return null;
+    }
     //处理特殊D1指令回复
     private BaseCmd processSpecialD1ReplyCmd(ByteBuf in, byte actionCode, String boxSn) {
         switch (actionCode) {
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 afcbad5..0d13271 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
@@ -8,6 +8,9 @@
 import com.ard.tianyu.model.dto.control.AngleControlDTO;
 import com.ard.tianyu.model.dto.control.SpeedControlDTO;
 import com.ard.tianyu.model.dto.manual.*;
+import com.ard.tianyu.model.dto.settings.ReturnHeightSettingDTO;
+import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
+import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
 import com.ard.tianyu.model.dto.signal.SignalInfo;
 import com.ard.tianyu.model.dto.speaker.*;
 import com.ard.tianyu.model.dto.state.UavState;
@@ -65,6 +68,24 @@
     Boolean updateBoxSettings(BoxSettingsDTO boxSettingsDTO);
 
     /**
+     * 设置返航高度
+     * @return
+     */
+    void updateReturnHeight(ReturnHeightSettingDTO returnHeightSettingDTO);
+
+    /**
+     * 设置视频码流
+     * @return
+     */
+    void updateVideoStream(VideoStreamSettingDTO videoStreamSettingDTO);
+
+    /**
+     * 设置返航点
+     * @return
+     */
+    void updateReturnPoint(ReturnPointSettingDTO returnPointSettingDTO);
+
+    /**
      * 注册
      */
     void registerMessage();
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 f50c111..8c16ec9 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
@@ -19,6 +19,9 @@
 import com.ard.tianyu.model.dto.converter.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;
+import com.ard.tianyu.model.dto.settings.ReturnPointSettingDTO;
+import com.ard.tianyu.model.dto.settings.VideoStreamSettingDTO;
 import com.ard.tianyu.model.dto.signal.SignalInfo;
 import com.ard.tianyu.model.dto.speaker.*;
 import com.ard.tianyu.model.dto.state.UavState;
@@ -39,6 +42,7 @@
 import com.ard.tianyu.netty.command.real.UavStateCmd;
 import com.ard.tianyu.netty.command.real.UavTelemetryDataCmd;
 import com.ard.tianyu.netty.command.register.*;
+import com.ard.tianyu.netty.command.settings.*;
 import com.ard.tianyu.netty.command.speaker.*;
 import com.ard.tianyu.netty.command.wayline.*;
 import com.ard.tianyu.netty.handler.ErrorCodeEnum;
@@ -146,6 +150,33 @@
     public Boolean updateBoxSettings(BoxSettingsDTO boxSettingsDTO) {
         TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(boxSettingsDTO, tyConfiguration.getAccessToken().convertFromDTO());
         return result.getState() == 1;
+    }
+
+    /**
+     * 设置返航高度
+     */
+    @Override
+    public void updateReturnHeight(ReturnHeightSettingDTO returnHeightSettingDTO) {
+        ReturnHeightSettingCmd returnHeightSettingCmd = new ReturnHeightSettingCmd(returnHeightSettingDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), returnHeightSettingCmd);
+    }
+
+    /**
+     * 设置返航点
+     */
+    @Override
+    public void updateReturnPoint(ReturnPointSettingDTO returnPointSettingDTO) {
+        ReturnPointSettingCmd returnPointSettingCmd = new ReturnPointSettingCmd(returnPointSettingDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), returnPointSettingCmd);
+    }
+
+    /**
+     * 设置视频码流
+     */
+    @Override
+    public void updateVideoStream(VideoStreamSettingDTO videoStreamSettingDTO) {
+        VideoStreamSettingCmd videoStreamSettingCmd = new VideoStreamSettingCmd(videoStreamSettingDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), videoStreamSettingCmd);
     }
 
     /**
@@ -704,6 +735,23 @@
                     WayLineEndReplyCmd wayLineEndReplyCmd = (WayLineEndReplyCmd) tyCommand;
                     logPrint("结束航线", wayLineEndReplyCmd.getResult(), wayLineEndReplyCmd.getErrorCode());
                 }
+                //设置返航高度回复
+                if (tyCommand instanceof ReturnHeightSettingReplyCmd) {
+                    ReturnHeightSettingReplyCmd returnHeightSettingReplyCmd = (ReturnHeightSettingReplyCmd) tyCommand;
+                    logPrint("设置返航高度", returnHeightSettingReplyCmd.getResult(), returnHeightSettingReplyCmd.getErrorCode());
+                }
+                //设置返航点回复
+                if (tyCommand instanceof ReturnPointSettingReplyCmd) {
+                    ReturnPointSettingReplyCmd returnPointSettingReplyCmd = (ReturnPointSettingReplyCmd) tyCommand;
+                    logPrint("设置返航点", returnPointSettingReplyCmd.getResult(), returnPointSettingReplyCmd.getErrorCode());
+                }
+                break;
+            case (byte) 0xD2:
+                //设置视频码流回复
+                if (tyCommand instanceof VideoStreamSettingReplyCmd) {
+                    VideoStreamSettingReplyCmd videoStreamSettingReplyCmd = (VideoStreamSettingReplyCmd) tyCommand;
+                    logPrint("设置视频码流", videoStreamSettingReplyCmd.getResult(), videoStreamSettingReplyCmd.getErrorCode());
+                }
                 break;
             default:
                 // 处理其他消息

--
Gitblit v1.9.3