From 1157c58dc74805cbb7db57ab121bbb521f4c216b Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Fri, 25 Oct 2024 16:33:49 +0800
Subject: [PATCH] 增加 拍照 录像 相机模式设置

---
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java         |   18 +++-
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java               |    2 
 ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java            |    2 
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java                   |   40 +++++++--
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java                   |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCommand.java |    4 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCommand.java       |    4 
 ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java         |    2 
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                           |   26 ++++--
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCommand.java    |    4 
 ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java            |    6 -
 ard-work/src/main/java/com/ard/tianyu/controller/UavController.java                     |   22 ++---
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java       |    5 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCommand.java  |   33 ++++++++
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCommand.java    |    4 
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java               |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCommand.java      |    5 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCommand.java       |   38 +++++++++
 18 files changed, 160 insertions(+), 63 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java
index 27bbf9f..3bc8b1b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java
@@ -4,11 +4,11 @@
 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.camera.CapturePicDto;
-import com.ard.tianyu.model.dto.camera.RecordDto;
-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.camera.CapturePicDTO;
+import com.ard.tianyu.model.dto.camera.RecordDTO;
+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.signal.SignalInfo;
 import com.ard.tianyu.model.dto.state.UavState;
 import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -24,8 +24,6 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
 import java.util.List;
 
 /**
@@ -86,7 +84,7 @@
     @ApiOperation(value = "云台转动(基于角度)", notes = "actionCode值:0-回中,1-上,2-右上,3-右,4-右下,5-下,6-左下,7-左,8-左上,254-停止")
     @ApiOperationSupport(order = 1)
     @PostMapping("/angleControl")
-    public AjaxResult angleControl(@RequestBody AngleControlDto angleControlDto) {
+    public AjaxResult angleControl(@RequestBody AngleControlDTO angleControlDto) {
         tyService.angleControl(angleControlDto);
         return AjaxResult.success();
     }
@@ -94,7 +92,7 @@
     @ApiOperation(value = "云台绝对值控制(基于角度)", notes = "俯仰pitch范围:[-120°至+30°] 平移yaw范围:[-180°至+180°] 横滚roll范围:[-90°至+60°]")
     @ApiOperationSupport(order = 2)
     @PostMapping("/absAngleControl")
-    public AjaxResult absAngleControl(@RequestBody @Validated AbsAngleControlDto angleControlDto) {
+    public AjaxResult absAngleControl(@RequestBody @Validated AbsAngleControlDTO angleControlDto) {
         tyService.absAngleControl(angleControlDto);
         return AjaxResult.success();
     }
@@ -102,7 +100,7 @@
     @ApiOperation(value = "云台转动(基于速度)", notes = "俯仰转动速度:上正下负 平移转动速度:右正左负 横滚转动速度:顺时针正,逆时针负")
     @ApiOperationSupport(order = 3)
     @PostMapping("/speedControl")
-    public AjaxResult speedControl(@RequestBody @Validated SpeedControlDto speedControlDto) {
+    public AjaxResult speedControl(@RequestBody @Validated SpeedControlDTO speedControlDto) {
         tyService.speedControl(speedControlDto);
         return AjaxResult.success();
     }
@@ -110,7 +108,7 @@
     @ApiOperation("拍照")
     @ApiOperationSupport(order = 4)
     @PostMapping("/capturePicDto")
-    public AjaxResult capturePic(@RequestBody CapturePicDto capturePicDto) {
+    public AjaxResult capturePic(@RequestBody CapturePicDTO capturePicDto) {
         tyService.capturePic(capturePicDto);
         return AjaxResult.success();
     }
@@ -118,7 +116,7 @@
     @ApiOperation("录像")
     @ApiOperationSupport(order = 5)
     @PostMapping("/record")
-    public AjaxResult record(@RequestBody RecordDto recordDto) {
+    public AjaxResult record(@RequestBody RecordDTO recordDto) {
         tyService.record(recordDto);
         return AjaxResult.success();
     }
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDto.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
similarity index 79%
copy from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDto.java
copy to ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
index cee59f5..92f6a44 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDto.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CameraModeDTO.java
@@ -7,7 +7,7 @@
 import org.springframework.validation.annotation.Validated;
 
 /**
- * 录像实体对象
+ * 设置相机模式实体对象
  *
  * @author liusuyi
  * @date 2024年10月25日13:32
@@ -17,7 +17,7 @@
 @AllArgsConstructor
 @NoArgsConstructor
 @Validated
-public class RecordDto {
+public class CameraModeDTO {
     private String boxSn;
-    private Boolean isRecord;
+    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
similarity index 92%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDto.java
rename to ard-work/src/main/java/com/ard/tianyu/model/dto/camera/CapturePicDTO.java
index 3532beb..cd9c582 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
@@ -17,6 +17,6 @@
 @AllArgsConstructor
 @NoArgsConstructor
 @Validated
-public class CapturePicDto {
+public class CapturePicDTO {
     private String boxSn;
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDto.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java
similarity index 94%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDto.java
rename to ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java
index cee59f5..25088ff 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDto.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/RecordDTO.java
@@ -17,7 +17,7 @@
 @AllArgsConstructor
 @NoArgsConstructor
 @Validated
-public class RecordDto {
+public class RecordDTO {
     private String boxSn;
     private Boolean isRecord;
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDto.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java
similarity index 96%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDto.java
rename to ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java
index 978c561..2a68e80 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDto.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AbsAngleControlDTO.java
@@ -20,7 +20,7 @@
 @AllArgsConstructor
 @NoArgsConstructor
 @Validated
-public class AbsAngleControlDto {
+public class AbsAngleControlDTO {
     private String boxSn;
 
     @Min(value = -120, message = "俯仰角 (pitch) 最小值为 -120°")
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDto.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java
similarity index 95%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDto.java
rename to ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java
index 6a7cdcc..4a1cf40 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDto.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/control/AngleControlDTO.java
@@ -20,7 +20,7 @@
 @AllArgsConstructor
 @NoArgsConstructor
 @Validated
-public class AngleControlDto {
+public class AngleControlDTO {
     private String boxSn;
     private Byte actionCode;
     @Min(value = 0, message = "转动角度 最小值为 0")
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDto.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java
similarity index 75%
rename from ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDto.java
rename to ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java
index d673ae8..cecb79b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDto.java
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/control/SpeedControlDTO.java
@@ -4,10 +4,6 @@
 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;
 
 /**
  * AngleControlDto
@@ -19,7 +15,7 @@
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-public class SpeedControlDto {
+public class SpeedControlDTO {
     private String boxSn;
 
     /**
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCommand.java
new file mode 100644
index 0000000..da22f62
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCommand.java
@@ -0,0 +1,38 @@
+package com.ard.tianyu.netty.command.camera;
+
+import com.ard.tianyu.model.dto.camera.CameraModeDTO;
+import com.ard.tianyu.netty.command.BaseCommand;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 设置相机模式指令
+ *
+ * @author liusuyi
+ * @date 2024年10月25日14:44
+ **/
+@Data
+public class CameraModeCommand extends BaseCommand {
+    private final byte encryptFlag = 0x00; // 加密标志
+    private final byte actionCode = 0x22;  // 动作编号
+    private final byte actionParam; // 动作参数
+
+
+    public CameraModeCommand(CameraModeDTO cameraModeDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 19);
+        setBoxSn(cameraModeDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        actionParam = cameraModeDTO.getActionParam();
+    }
+
+    public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeBytes(getBoxSn());         // 写入盒子SN
+        out.writeByte(getCmdCode());        // 写入命令码
+        out.writeByte(encryptFlag);         // 写入加密标志
+        out.writeByte(actionCode);          // 写入动作编号
+        out.writeByte(actionParam);         // 写入动作参数
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCommand.java
new file mode 100644
index 0000000..6311b4f
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCommand.java
@@ -0,0 +1,33 @@
+package com.ard.tianyu.netty.command.camera;
+
+import com.ard.tianyu.model.dto.camera.CameraModeDTO;
+import com.ard.tianyu.netty.command.BaseCommand;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 设置相机模式回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月25日14:44
+ **/
+@Data
+public class CameraModeReplyCommand extends BaseCommand {
+    private final byte encryptFlag = 0x00; // 加密标志
+    private final byte actionCode = 0x22;  // 动作编号
+    private final byte result;             // 执行结果
+    private final Integer errorCode;       // 错误码
+
+    public CameraModeReplyCommand(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) {
+
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCommand.java
index 7aeabdb..fb475fc 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCommand.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.model.dto.camera.CapturePicDto;
+import com.ard.tianyu.model.dto.camera.CapturePicDTO;
 import com.ard.tianyu.netty.command.BaseCommand;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -17,7 +17,7 @@
     private final byte actionCode=0x23;  // 动作编号
 
 
-    public CapturePicCommand(CapturePicDto captureDto) {
+    public CapturePicCommand(CapturePicDTO captureDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 18);
         setBoxSn(captureDto.getBoxSn().getBytes());
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCommand.java
index f3ab32a..61ad79d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCommand.java
@@ -1,7 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.model.dto.camera.CapturePicDto;
-import com.ard.tianyu.model.dto.camera.RecordDto;
+import com.ard.tianyu.model.dto.camera.RecordDTO;
 import com.ard.tianyu.netty.command.BaseCommand;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -18,7 +17,7 @@
     private final byte actionCode=0x24;    // 动作编号
 
 
-    public RecordStartCommand(RecordDto recordDto) {
+    public RecordStartCommand(RecordDTO recordDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 18);
         setBoxSn(recordDto.getBoxSn().getBytes());
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java
index 91fc9a9..e30d328 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java
@@ -1,7 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.model.dto.camera.CapturePicDto;
-import com.ard.tianyu.model.dto.camera.RecordDto;
+import com.ard.tianyu.model.dto.camera.RecordDTO;
 import com.ard.tianyu.netty.command.BaseCommand;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -18,7 +17,7 @@
     private final byte actionCode = 0x25;    // 动作编号
 
 
-    public RecordStopCommand(RecordDto recordDto) {
+    public RecordStopCommand(RecordDTO recordDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 18);
         setBoxSn(recordDto.getBoxSn().getBytes());
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCommand.java
index 9e39ac3..865b780 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCommand.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.control;
 
-import com.ard.tianyu.model.dto.control.AbsAngleControlDto;
+import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
 import com.ard.tianyu.netty.command.BaseCommand;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -20,7 +20,7 @@
     private final float yaw;               // 平移
     private final float roll;              // 横滚
 
-    public AbsAngleControlCommand(AbsAngleControlDto absAngleControlDto) {
+    public AbsAngleControlCommand(AbsAngleControlDTO absAngleControlDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 30);
         setBoxSn(absAngleControlDto.getBoxSn().getBytes());
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCommand.java
index ddde4da..69b61ce 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCommand.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.control;
 
-import com.ard.tianyu.model.dto.control.AngleControlDto;
+import com.ard.tianyu.model.dto.control.AngleControlDTO;
 import com.ard.tianyu.netty.command.BaseCommand;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -18,7 +18,7 @@
     private final byte actionCode; // 动作编号
     private final byte rotationAngle; // 转动角度
 
-    public AngleControlCommand(AngleControlDto angleControlDto) {
+    public AngleControlCommand(AngleControlDTO angleControlDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 19);
         setBoxSn(angleControlDto.getBoxSn().getBytes());
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCommand.java
index d4fbabf..f250e43 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCommand.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.control;
 
-import com.ard.tianyu.model.dto.control.SpeedControlDto;
+import com.ard.tianyu.model.dto.control.SpeedControlDTO;
 import com.ard.tianyu.netty.command.BaseCommand;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -22,7 +22,7 @@
     private final short execTime = 200;             // 执行时间
 
 
-    public SpeedControlCommand(SpeedControlDto speedControlDto) {
+    public SpeedControlCommand(SpeedControlDTO speedControlDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 32);
         setBoxSn(speedControlDto.getBoxSn().getBytes());
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 4f88354..689ccc8 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
@@ -1,6 +1,7 @@
 package com.ard.tianyu.netty.handler;// MessageProtocolDecoder.java
 
 import com.ard.tianyu.netty.command.*;
+import com.ard.tianyu.netty.command.camera.CameraModeReplyCommand;
 import com.ard.tianyu.netty.command.camera.CapturePicReplyCommand;
 import com.ard.tianyu.netty.command.camera.RecordStartReplyCommand;
 import com.ard.tianyu.netty.command.camera.RecordStopReplyCommand;
@@ -83,21 +84,30 @@
                 byte encryptionFlag = in.readByte();
                 byte actionCode = in.readByte();
                 switch (actionCode) {
-                    case 0x23:
+                    case 0x22:
                         byte result = in.readByte();
                         int errorCode = in.readInt();
                         uavData = new byte[15];
                         in.readBytes(uavData);
                         String boxSn = new String(uavData);
+                        baseCommand = new CameraModeReplyCommand(boxSn, result, errorCode);
+                        log.debug("设置相机模式回复: {}", boxSn);
+                        break;
+                    case 0x23:
+                        result = in.readByte();
+                        errorCode = in.readInt();
+                        uavData = new byte[15];
+                        in.readBytes(uavData);
+                        boxSn = new String(uavData);
                         baseCommand = new CapturePicReplyCommand(boxSn, result, errorCode);
                         log.debug("拍照回复: {}", boxSn);
                         break;
                     case 0x24:
-                         result = in.readByte();
-                         errorCode = in.readInt();
+                        result = in.readByte();
+                        errorCode = in.readInt();
                         uavData = new byte[15];
                         in.readBytes(uavData);
-                         boxSn = new String(uavData);
+                        boxSn = new String(uavData);
                         baseCommand = new RecordStartReplyCommand(boxSn, result, errorCode);
                         log.debug("开始录像回复: {}", boxSn);
                         break;
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 3f50eb6..471f873 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
@@ -3,11 +3,12 @@
 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.camera.CapturePicDto;
-import com.ard.tianyu.model.dto.camera.RecordDto;
-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.camera.CameraModeDTO;
+import com.ard.tianyu.model.dto.camera.CapturePicDTO;
+import com.ard.tianyu.model.dto.camera.RecordDTO;
+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.signal.SignalInfo;
 import com.ard.tianyu.model.dto.state.UavState;
 import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -70,27 +71,32 @@
     /**
      * 云台转动(基于角度)
      */
-    void angleControl(AngleControlDto angleControlDto);
+    void angleControl(AngleControlDTO angleControlDto);
 
     /**
      * 云台绝对值控制(基于角度)
      */
-    void absAngleControl(AbsAngleControlDto absAngleControlDto);
+    void absAngleControl(AbsAngleControlDTO absAngleControlDto);
 
     /**
      * 云台转动(基于速度)
      */
-    void speedControl(SpeedControlDto speedControlDto);
+    void speedControl(SpeedControlDTO speedControlDto);
+
+    /**
+     * 设置相机模式
+     */
+    void updateCameraMode(CameraModeDTO cameraModeDTO);
 
     /**
      * 拍照
      */
-    void capturePic(CapturePicDto capturePicDto);
+    void capturePic(CapturePicDTO capturePicDto);
 
     /**
      * 录像
      */
-    void record(RecordDto recordDto);
+    void record(RecordDTO recordDto);
 
     /**
      * 获取无人机状态
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 66dacea..c056263 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
@@ -8,11 +8,12 @@
 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.camera.CapturePicDto;
-import com.ard.tianyu.model.dto.camera.RecordDto;
-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.camera.CameraModeDTO;
+import com.ard.tianyu.model.dto.camera.CapturePicDTO;
+import com.ard.tianyu.model.dto.camera.RecordDTO;
+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;
@@ -34,7 +35,6 @@
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.hssf.record.Record;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
@@ -165,7 +165,7 @@
      * 云台控制基于角度
      */
     @Override
-    public void angleControl(AngleControlDto angleControlDto) {
+    public void angleControl(AngleControlDTO angleControlDto) {
         AngleControlCommand controlAngleCommand = new AngleControlCommand(angleControlDto);
         this.sendMessage(tyConfiguration.getIpPort(), controlAngleCommand);
     }
@@ -174,7 +174,7 @@
      * 云台绝对值控制(基于角度)
      */
     @Override
-    public void absAngleControl(AbsAngleControlDto absAngleControlDto) {
+    public void absAngleControl(AbsAngleControlDTO absAngleControlDto) {
         AbsAngleControlCommand absAngleControlCommand = new AbsAngleControlCommand(absAngleControlDto);
         this.sendMessage(tyConfiguration.getIpPort(), absAngleControlCommand);
     }
@@ -183,16 +183,26 @@
      * 云台转动(基于速度)
      */
     @Override
-    public void speedControl(SpeedControlDto speedControlDto) {
+    public void speedControl(SpeedControlDTO speedControlDto) {
         SpeedControlCommand speedControlCommand = new SpeedControlCommand(speedControlDto);
         this.sendMessage(tyConfiguration.getIpPort(), speedControlCommand);
+    }
+
+    /**
+     * 设置相机模式
+     */
+    @Override
+    public void updateCameraMode(CameraModeDTO cameraModeDTO) {
+        CameraModeCommand cameraModeCommand = new CameraModeCommand(cameraModeDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), cameraModeCommand);
     }
 
     /**
      * 拍照
      */
     @Override
-    public void capturePic(CapturePicDto capturePicDto) {
+    public void capturePic(CapturePicDTO capturePicDto) {
+        updateCameraMode(CameraModeDTO.builder().boxSn(capturePicDto.getBoxSn()).actionParam((byte)0x01).build());
         CapturePicCommand capturePicCommand = new CapturePicCommand(capturePicDto);
         this.sendMessage(tyConfiguration.getIpPort(), capturePicCommand);
     }
@@ -201,9 +211,10 @@
      * 录像
      */
     @Override
-    public void record(RecordDto recordDto) {
+    public void record(RecordDTO recordDto) {
         BaseCommand baseCommand;
         if (recordDto.getIsRecord()) {
+            updateCameraMode(CameraModeDTO.builder().boxSn(recordDto.getBoxSn()).actionParam((byte)0x02).build());
             baseCommand = new RecordStartCommand(recordDto);
         } else {
             baseCommand = new RecordStopCommand(recordDto);
@@ -291,6 +302,13 @@
                         log.info("收到无人机初始化详情-回复防止再次发送");
                     }
                 }
+                if (tyCommand instanceof CameraModeReplyCommand) {
+                    CameraModeReplyCommand cameraModeReplyCommand = (CameraModeReplyCommand) tyCommand;
+                    if (cameraModeReplyCommand.getActionCode() == (byte) 0x22) {
+                        log.info("收到无人机设置相机模式回复:{} 错误码:{}", String.format("0x%02X", cameraModeReplyCommand.getResult() & 0xFF), cameraModeReplyCommand.getErrorCode());
+                    }
+                }
+
                 if (tyCommand instanceof CapturePicReplyCommand) {
                     CapturePicReplyCommand capturePicReplyCommand = (CapturePicReplyCommand) tyCommand;
                     if (capturePicReplyCommand.getActionCode() == (byte) 0x23) {

--
Gitblit v1.9.3