From f8a09d564aeba26eb9d729fee5e7fbcab3811de1 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 26 Oct 2024 14:14:49 +0800
Subject: [PATCH] 优化

---
 ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCmd.java                   |    4 
 ard-work/src/main/java/com/ard/tianyu/netty/command/notice/FlyWayEndReplyCmd.java      |   32 ++
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java        |   74 +++-
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartReplyCmd.java    |    6 
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java                  |  177 +++++++----
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java            |   27 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java          |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java          |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCmd.java     |    7 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicReplyCmd.java     |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopReplyCmd.java     |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/notice/UavReadyReplyCmd.java       |   36 ++
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java       |   21 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/notice/BoxPowerStatusReplyCmd.java |   27 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCmd.java    |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java      |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java   |   38 ++
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java        |   35 ++
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolEncoder.java        |    8 
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java       |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java          |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCmd.java       |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCmd.java          |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java                |   15 
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java            |   23 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java    |    6 
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java             |   28 +
 ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java                 |    6 
 ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java                    |   23 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCmd.java                       |    2 
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                          |   33 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCmd.java     |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitReplyCmd.java      |   10 
 ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java       |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCmd.java         |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java              |    6 
 ard-work/src/main/java/com/ard/tianyu/controller/UavController.java                    |   41 ++
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java        |   34 ++
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java         |    6 
 ard-admin/src/main/resources/application-dev.yml                                       |    9 
 ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java            |    6 
 ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java         |   37 ++
 42 files changed, 672 insertions(+), 183 deletions(-)

diff --git a/ard-admin/src/main/resources/application-dev.yml b/ard-admin/src/main/resources/application-dev.yml
index 2d9a8df..ea46f87 100644
--- a/ard-admin/src/main/resources/application-dev.yml
+++ b/ard-admin/src/main/resources/application-dev.yml
@@ -24,17 +24,12 @@
 # 天宇服务器配置
 tianyu:
   # 天宇http服务器地址
-  endpoint: 112.98.106.22:12000
+  endpoint: 112.98.106.22:22000
   accesskeyid: qmfmd3Ws7M4dMcylnrTU
   accesskeysecret: 5WBU2uEhHZaVefpZdaxpFh4LJW9fZZaa
   # 天宇tcp服务器地址
   tcpserver: 112.98.106.22
-  tcpport: 13002
-# netty配置
-netty:
-  tcp:
-    enabled: true
-    reConnectInterval: 30000
+  tcpport: 23002
 #流媒体配置
 mediamtx:
   # 流媒体服务器地址
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 3bc8b1b..0f619e3 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,8 +4,7 @@
 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.camera.*;
 import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
 import com.ard.tianyu.model.dto.control.AngleControlDTO;
 import com.ard.tianyu.model.dto.control.SpeedControlDTO;
@@ -121,6 +120,44 @@
         return AjaxResult.success();
     }
 
+    @ApiOperation(value = "变倍", notes = "actionCode值:10变倍加 | 11变倍减 | 15复位 | 255停止")
+    @ApiOperationSupport(order = 6)
+    @PostMapping("/zoom")
+    public AjaxResult zoom(@RequestBody ZoomDTO zoomDTO) {
+        tyService.zoom(zoomDTO);
+        return AjaxResult.success();
+    }
+    @ApiOperation("变倍指定倍数")
+    @ApiOperationSupport(order = 7)
+    @PostMapping("/zoomToLevel")
+    public AjaxResult zoomToLevel(@RequestBody ZoomToLevelDTO zoomToLevelDTO) {
+        tyService.zoomToLevel(zoomToLevelDTO);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation(value = "切换摄像头", notes = "actionParam值:0切换到FPV摄像头  | 1切换到载荷摄像头")
+    @ApiOperationSupport(order = 8)
+    @PostMapping("/switchCamera")
+    public AjaxResult switchCamera(@RequestBody SwitchCameraDTO switchCameraDTO) {
+        tyService.switchCamera(switchCameraDTO);
+        return AjaxResult.success();
+    }
+    @ApiOperation(value = "切换视频源", notes = "相机在主相机镜头时有效,FPV镜头时无效 actionParam值:0-可见 1-变焦 2-红外")
+    @ApiOperationSupport(order = 8)
+    @PostMapping("/switchSource")
+    public AjaxResult switchSource(@RequestBody SwitchSourceDTO switchSourceDTO) {
+        tyService.switchSource(switchSourceDTO);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation(value = "打开或关闭照片回传", notes = "actionParam值:0-关闭,1-打开")
+    @ApiOperationSupport(order = 8)
+    @PostMapping("/photoReturnToggle")
+    public AjaxResult photoReturnToggle(@RequestBody PhotoReturnToggleDTO photoReturnToggleDTO) {
+        tyService.photoReturnToggle(photoReturnToggleDTO);
+        return AjaxResult.success();
+    }
+
     @ApiOperation("获取无人机状态")
     @GetMapping("/getUavState")
     public AjaxResult getUavState(String boxSn) {
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java
new file mode 100644
index 0000000..6163717
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/PhotoReturnToggleDTO.java
@@ -0,0 +1,21 @@
+package com.ard.tianyu.model.dto.camera;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 照片回传实体对象
+ *
+ * @author liusuyi
+ * @date 2024年10月26日14:06
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class PhotoReturnToggleDTO {
+    private String boxSn;
+    private byte actionParam;
+}
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
new file mode 100644
index 0000000..ef53703
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchCameraDTO.java
@@ -0,0 +1,27 @@
+package com.ard.tianyu.model.dto.camera;
+
+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年10月26日9:02
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Validated
+public class SwitchCameraDTO {
+    private String boxSn;
+    //	0x00 FPV 0x01 载荷
+    private byte actionParam;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java
new file mode 100644
index 0000000..14420d5
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/SwitchSourceDTO.java
@@ -0,0 +1,23 @@
+package com.ard.tianyu.model.dto.camera;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * 切换视频源实体对象
+ *
+ * @author liusuyi
+ * @date 2024年10月26日9:02
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SwitchSourceDTO {
+    private String boxSn;
+    //	0x00-可见 0x01-变焦 0x02-红外
+    private byte actionParam;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java
new file mode 100644
index 0000000..1fed09e
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomDTO.java
@@ -0,0 +1,23 @@
+package com.ard.tianyu.model.dto.camera;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * 变倍实体对象
+ *
+ * @author liusuyi
+ * @date 2024年10月25日13:32
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ZoomDTO {
+    private String boxSn;
+    //0x0A变倍加 | 0x0B变倍减 | 0x0F复位|0xFF停止|
+    private byte ActionCode;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java
new file mode 100644
index 0000000..99214c7
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/camera/ZoomToLevelDTO.java
@@ -0,0 +1,28 @@
+package com.ard.tianyu.model.dto.camera;
+
+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年10月26日9:02
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Validated
+public class ZoomToLevelDTO {
+    private String boxSn;
+    @Min(value = 1, message = "范围level 最小值为 1")
+    @Max(value = 200, message = "范围level 最大值为 200")
+    private byte level;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCmd.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCmd.java
index 5061ed9..cbd9b37 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCmd.java
@@ -4,7 +4,7 @@
 import lombok.Data;
 
 @Data
-public abstract class BaseCommand {
+public abstract class BaseCmd {
     private short dataHeader; // 帧头
     private short dataLength; // 数据长度
     private byte[] boxSn;     // 云盒编号
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCmd.java
similarity index 86%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCmd.java
index 1509fd5..46be995 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCmd.java
@@ -1,13 +1,13 @@
 package com.ard.tianyu.netty.command;// PointFlyCommand.java
 import io.netty.buffer.ByteBuf;
 
-public class PointFlyCommand extends BaseCommand {
+public class PointFlyCmd extends BaseCmd {
     private double longitude;
     private double latitude;
     private float height;
     private float speed;
 
-    public PointFlyCommand(double longitude, double latitude, float height, float speed) {
+    public PointFlyCmd(double longitude, double latitude, float height, float speed) {
         this.longitude = longitude;
         this.latitude = latitude;
         this.height = height;
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/CameraModeCmd.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeCmd.java
index da22f62..19a657b 100644
--- 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/CameraModeCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.camera;
 
 import com.ard.tianyu.model.dto.camera.CameraModeDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -12,13 +12,13 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class CameraModeCommand extends BaseCommand {
+public class CameraModeCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode = 0x22;  // 动作编号
     private final byte actionParam; // 动作参数
 
 
-    public CameraModeCommand(CameraModeDTO cameraModeDTO) {
+    public CameraModeCmd(CameraModeDTO cameraModeDTO) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 19);
         setBoxSn(cameraModeDTO.getBoxSn().getBytes());
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/CameraModeReplyCmd.java
similarity index 74%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CameraModeReplyCmd.java
index 6311b4f..584fad3 100644
--- 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/CameraModeReplyCmd.java
@@ -1,7 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.model.dto.camera.CameraModeDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -12,13 +11,13 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class CameraModeReplyCommand extends BaseCommand {
+public class CameraModeReplyCmd extends BaseCmd {
     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) {
+    public CameraModeReplyCmd(String boxSn, Byte result, Integer errorCode) {
         setDataHeader((short) 0x6A77);
         //setDataLength((short) 18);
         setCmdCode((byte) 0xD1);
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/CapturePicCmd.java
similarity index 85%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicCmd.java
index fb475fc..094d5db 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/CapturePicCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.camera;
 
 import com.ard.tianyu.model.dto.camera.CapturePicDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -12,12 +12,12 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class CapturePicCommand extends BaseCommand {
+public class CapturePicCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode=0x23;  // 动作编号
 
 
-    public CapturePicCommand(CapturePicDTO captureDto) {
+    public CapturePicCmd(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/CapturePicReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicReplyCmd.java
similarity index 78%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicReplyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicReplyCmd.java
index aa3b550..11f5b9e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/CapturePicReplyCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -11,13 +11,13 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class CapturePicReplyCommand extends BaseCommand {
+public class CapturePicReplyCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode = 0x23;  // 动作编号
     private final byte result;             // 执行结果
     private final Integer errorCode;       // 错误码
 
-    public CapturePicReplyCommand(String boxSn,Byte result,Integer errorCode) {
+    public CapturePicReplyCmd(String boxSn, Byte result, Integer errorCode) {
         setDataHeader((short) 0x6A77);
         //setDataLength((short) 18);
         setCmdCode((byte) 0xD1);
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java
new file mode 100644
index 0000000..5b30fc8
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/PhotoReturnToggleCmd.java
@@ -0,0 +1,38 @@
+package com.ard.tianyu.netty.command.camera;
+
+import com.ard.tianyu.model.dto.camera.PhotoReturnToggleDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 打开或关闭照片回传指令
+ *
+ * @author liusuyi
+ * @date 2024年10月25日14:44
+ **/
+@Data
+public class PhotoReturnToggleCmd extends BaseCmd {
+    private final byte encryptFlag = 0x00;      // 加密标志
+    private final byte actionCode = 0x43;       // 动作编号
+    private final byte actionParam;
+
+
+    public PhotoReturnToggleCmd(PhotoReturnToggleDTO photoReturnToggleDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 19);
+        setBoxSn(photoReturnToggleDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        this.actionParam = photoReturnToggleDTO.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/RecordStartCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java
similarity index 85%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartCmd.java
index 61ad79d..713233a 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/RecordStartCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.camera;
 
 import com.ard.tianyu.model.dto.camera.RecordDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -12,12 +12,12 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class RecordStartCommand extends BaseCommand {
+public class RecordStartCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode=0x24;    // 动作编号
 
 
-    public RecordStartCommand(RecordDTO recordDto) {
+    public RecordStartCmd(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/RecordStartReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartReplyCmd.java
similarity index 78%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartReplyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartReplyCmd.java
index 6c12116..8434826 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStartReplyCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -11,13 +11,13 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class RecordStartReplyCommand extends BaseCommand {
+public class RecordStartReplyCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode = 0x24;  // 动作编号
     private final byte result;             // 执行结果
     private final Integer errorCode;       // 错误码
 
-    public RecordStartReplyCommand(String boxSn, Byte result, Integer errorCode) {
+    public RecordStartReplyCmd(String boxSn, Byte result, Integer errorCode) {
         setDataHeader((short) 0x6A77);
         //setDataLength((short) 18);
         setCmdCode((byte) 0xD1);
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/RecordStopCmd.java
similarity index 85%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCmd.java
index e30d328..1ac8be2 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/RecordStopCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.camera;
 
 import com.ard.tianyu.model.dto.camera.RecordDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -12,12 +12,12 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class RecordStopCommand extends BaseCommand {
+public class RecordStopCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode = 0x25;    // 动作编号
 
 
-    public RecordStopCommand(RecordDTO recordDto) {
+    public RecordStopCmd(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/RecordStopReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopReplyCmd.java
similarity index 78%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopReplyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopReplyCmd.java
index b11bee7..1b5e749 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopReplyCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -11,13 +11,13 @@
  * @date 2024年10月25日14:44
  **/
 @Data
-public class RecordStopReplyCommand extends BaseCommand {
+public class RecordStopReplyCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode = 0x25;  // 动作编号
     private final byte result;             // 执行结果
     private final Integer errorCode;       // 错误码
 
-    public RecordStopReplyCommand(String boxSn, Byte result, Integer errorCode) {
+    public RecordStopReplyCmd(String boxSn, Byte result, Integer errorCode) {
         setDataHeader((short) 0x6A77);
         //setDataLength((short) 18);
         setCmdCode((byte) 0xD1);
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java
new file mode 100644
index 0000000..43191aa
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchCameraCmd.java
@@ -0,0 +1,34 @@
+package com.ard.tianyu.netty.command.camera;
+
+import com.ard.tianyu.model.dto.camera.SwitchCameraDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * 切换摄像机指令
+ *
+ * @author liusuyi
+ * @date 2024年10月26日11:18
+ **/
+public class SwitchCameraCmd extends BaseCmd {
+
+    private final byte actionParam;        // 动作参数
+
+    public SwitchCameraCmd(SwitchCameraDTO switchCameraDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 19);
+        setBoxSn(switchCameraDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        this.actionParam = switchCameraDTO.getActionParam();
+    }
+
+    public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeBytes(getBoxSn());         // 写入盒子SN
+        out.writeByte(getCmdCode());        // 写入命令码
+        out.writeByte(0x00);          // 写入加密标志
+        out.writeByte(0x27);          // 写入动作编号
+        out.writeByte(actionParam);         // 写入动作参数
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java
new file mode 100644
index 0000000..255453c
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/SwitchSourceCmd.java
@@ -0,0 +1,35 @@
+package com.ard.tianyu.netty.command.camera;
+
+import com.ard.tianyu.model.dto.camera.SwitchCameraDTO;
+import com.ard.tianyu.model.dto.camera.SwitchSourceDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * 切换摄像机指令
+ *
+ * @author liusuyi
+ * @date 2024年10月26日11:18
+ **/
+public class SwitchSourceCmd extends BaseCmd {
+
+    private final byte actionParam;        // 动作参数
+
+    public SwitchSourceCmd(SwitchSourceDTO switchSourceDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 19);
+        setBoxSn(switchSourceDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        this.actionParam = switchSourceDTO.getActionParam();
+    }
+
+    public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeBytes(getBoxSn());         // 写入盒子SN
+        out.writeByte(getCmdCode());        // 写入命令码
+        out.writeByte(0x00);          // 写入加密标志
+        out.writeByte(0x26);          // 写入动作编号
+        out.writeByte(actionParam);         // 写入动作参数
+    }
+}
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/ZoomCmd.java
similarity index 69%
copy from ard-work/src/main/java/com/ard/tianyu/netty/command/camera/RecordStopCommand.java
copy to ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomCmd.java
index e30d328..9dbfef5 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/ZoomCmd.java
@@ -1,27 +1,28 @@
 package com.ard.tianyu.netty.command.camera;
 
-import com.ard.tianyu.model.dto.camera.RecordDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.model.dto.camera.ZoomDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
 /**
- * 停止录像指令
+ * 变倍指令
  *
  * @author liusuyi
  * @date 2024年10月25日14:44
  **/
 @Data
-public class RecordStopCommand extends BaseCommand {
+public class ZoomCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
-    private final byte actionCode = 0x25;    // 动作编号
+    private final byte actionCode;  // 动作编号
 
 
-    public RecordStopCommand(RecordDTO recordDto) {
+    public ZoomCmd(ZoomDTO zoomDTO) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 18);
-        setBoxSn(recordDto.getBoxSn().getBytes());
+        setBoxSn(zoomDTO.getBoxSn().getBytes());
         setCmdCode((byte) 0xD1);
+        this.actionCode=zoomDTO.getActionCode();
     }
 
     public void encode(ByteBuf out) {
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java
new file mode 100644
index 0000000..da41e1c
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/camera/ZoomToLevelCmd.java
@@ -0,0 +1,37 @@
+package com.ard.tianyu.netty.command.camera;
+
+import com.ard.tianyu.model.dto.camera.ZoomToLevelDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 变倍到指定倍数指令
+ *
+ * @author liusuyi
+ * @date 2024年10月25日14:44
+ **/
+@Data
+public class ZoomToLevelCmd extends BaseCmd {
+    private final byte encryptFlag = 0x00; // 加密标志
+    private final byte actionCode = 0x0D;  // 动作编号
+    private final byte level;              // 倍数
+
+    public ZoomToLevelCmd(ZoomToLevelDTO zoomToLevelDTO) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 19);
+        setBoxSn(zoomToLevelDTO.getBoxSn().getBytes());
+        setCmdCode((byte) 0xD1);
+        this.level = zoomToLevelDTO.getLevel();
+    }
+
+    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(level);               // 写入变倍数值
+    }
+}
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/AbsAngleControlCmd.java
similarity index 88%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/control/AbsAngleControlCmd.java
index 865b780..28f18de 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/AbsAngleControlCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.control;
 
 import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -13,14 +13,14 @@
  */
 
 @Data
-public class AbsAngleControlCommand extends BaseCommand {
+public class AbsAngleControlCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode = 0x09;  // 动作编号
     private final float pitch;             // 俯仰
     private final float yaw;               // 平移
     private final float roll;              // 横滚
 
-    public AbsAngleControlCommand(AbsAngleControlDTO absAngleControlDto) {
+    public AbsAngleControlCmd(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/AngleControlCmd.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/control/AngleControlCmd.java
index 69b61ce..f029444 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/AngleControlCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.control;
 
 import com.ard.tianyu.model.dto.control.AngleControlDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -13,12 +13,12 @@
  */
 
 @Data
-public class AngleControlCommand extends BaseCommand {
+public class AngleControlCmd extends BaseCmd {
     private final byte encryptFlag = 0x00; // 加密标志
     private final byte actionCode; // 动作编号
     private final byte rotationAngle; // 转动角度
 
-    public AngleControlCommand(AngleControlDTO angleControlDto) {
+    public AngleControlCmd(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/SpeedControlCmd.java
similarity index 90%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/control/SpeedControlCmd.java
index f250e43..cc65839 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/SpeedControlCmd.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.command.control;
 
 import com.ard.tianyu.model.dto.control.SpeedControlDTO;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -13,7 +13,7 @@
  */
 
 @Data
-public class SpeedControlCommand extends BaseCommand {
+public class SpeedControlCmd extends BaseCmd {
     private final byte encryptFlag = 0x00;          // 加密标志
     private final byte actionCode = (byte) 0xF4;    // 动作编号
     private final float pitchSpeed;                 // 俯仰转速
@@ -22,7 +22,7 @@
     private final short execTime = 200;             // 执行时间
 
 
-    public SpeedControlCommand(SpeedControlDTO speedControlDto) {
+    public SpeedControlCmd(SpeedControlDTO speedControlDto) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 32);
         setBoxSn(speedControlDto.getBoxSn().getBytes());
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/BoxPowerStatusReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/BoxPowerStatusReplyCmd.java
new file mode 100644
index 0000000..8e3cf7c
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/BoxPowerStatusReplyCmd.java
@@ -0,0 +1,27 @@
+package com.ard.tianyu.netty.command.notice;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 云盒开关机通知回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月26日11:54
+ **/
+@Data
+public class BoxPowerStatusReplyCmd extends BaseCmd {
+    private final byte status; // 时间戳
+
+    public BoxPowerStatusReplyCmd(byte status) {
+        setDataHeader((short) 0x6A77);  // 设置帧头
+        setCmdCode((byte) 0x0A);        // 设置指令编号
+        setDataLength((short) 17);      // 数据长度
+        this.status = status;
+    }
+
+    public void encode(ByteBuf out) {
+
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/FlyWayEndReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/FlyWayEndReplyCmd.java
new file mode 100644
index 0000000..79b875d
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/FlyWayEndReplyCmd.java
@@ -0,0 +1,32 @@
+package com.ard.tianyu.netty.command.notice;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 航线结束通知回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月26日11:54
+ **/
+@Data
+public class FlyWayEndReplyCmd extends BaseCmd {
+    private final byte encryptFlag = 0x00;  // 加密标志
+    private final byte actionCode = 0x2E;   // 动作编号
+    private final byte result;              // 执行结果
+    private final int errorCode;            // 错误码
+
+    public FlyWayEndReplyCmd(String boxSn, byte result, int errorCode) {
+        setDataHeader((short) 0x6A77);      // 设置帧头
+        setCmdCode((byte) 0x3D);            // 设置指令编号
+        setDataLength((short) 23);          // 数据长度
+        this.result = result;
+        this.errorCode = errorCode;
+        setBoxSn(boxSn.getBytes());
+    }
+
+    public void encode(ByteBuf out) {
+
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/UavReadyReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/UavReadyReplyCmd.java
new file mode 100644
index 0000000..6ec47f5
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/notice/UavReadyReplyCmd.java
@@ -0,0 +1,36 @@
+package com.ard.tianyu.netty.command.notice;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 无人机准备完成通知回复指令
+ *
+ * @author liusuyi
+ * @date 2024年10月26日11:54
+ **/
+@Data
+public class UavReadyReplyCmd extends BaseCmd {
+    private final byte encryptFlag = 0x00;  // 加密标志
+    private final byte actionCode = 0x3D;   // 动作编号
+    private final byte batteryPower;        // 电池电量
+    private final double longitude;         // 经度
+    private final double latitude;          // 纬度
+    private final int altitude;             // 海拔高度
+    public UavReadyReplyCmd(String boxSn,byte batteryPower,double longitude,double latitude,int altitude) {
+        setDataHeader((short) 0x6A77);      // 设置帧头
+        setCmdCode((byte) 0x3D);            // 设置指令编号
+        setDataLength((short) 39);          // 数据长度
+
+        this.batteryPower = batteryPower;
+        this.longitude = longitude;
+        this.latitude = latitude;
+        this.altitude = altitude;
+        setBoxSn(boxSn.getBytes());
+    }
+
+    public void encode(ByteBuf out) {
+
+    }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
similarity index 78%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
index 751ffe9..ed767cf 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/SignalInfoCmd.java
@@ -1,17 +1,17 @@
 package com.ard.tianyu.netty.command.real;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+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 SignalInfoCommand extends BaseCommand {
+public class SignalInfoCmd extends BaseCmd {
     private int delayTime;
     private TelemetryDataPB.SignalInfo signalInfo;
 
     // 构造函数
-    public SignalInfoCommand(TelemetryDataPB.SignalInfo signalInfo) {
+    public SignalInfoCmd(TelemetryDataPB.SignalInfo signalInfo) {
         setDataHeader((short) 0x6A77); // 设置帧头
        // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
         setCmdCode((byte) 0x0C); // 设置命令编号
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
similarity index 81%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
index 7df96fb..ae78dbe 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavStateCmd.java
@@ -1,14 +1,14 @@
 package com.ard.tianyu.netty.command.real;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
 import io.netty.buffer.ByteBuf;
 
-public class UavStateCommand extends BaseCommand {
+public class UavStateCmd extends BaseCmd {
     private TelemetryDataPB.UavState uavState;  // ProtoBuf 数据类
 
     // 构造函数
-    public UavStateCommand(TelemetryDataPB.UavState uavState) {
+    public UavStateCmd(TelemetryDataPB.UavState uavState) {
         setDataHeader((short) 0x6A77); // 设置帧头
        // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
         setCmdCode((byte) 0xA8); // 设置命令编号
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
similarity index 80%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
index c520cd3..e2a8189 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/real/UavTelemetryDataCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.real;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
 import io.netty.buffer.ByteBuf;
 
@@ -10,10 +10,10 @@
  * @author liusuyi
  * @date 2024年10月23日9:33
  **/
-public class UavTelemetryDataCommand extends BaseCommand {
+public class UavTelemetryDataCmd extends BaseCmd {
     private TelemetryDataPB.TelemetryData telemetryData;
     // 构造函数
-    public UavTelemetryDataCommand(TelemetryDataPB.TelemetryData telemetryData) {
+    public UavTelemetryDataCmd(TelemetryDataPB.TelemetryData telemetryData) {
         setDataHeader((short) 0x6A77); // 设置帧头
         // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
         setCmdCode((byte) 0xA9); // 设置命令编号
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCmd.java
similarity index 80%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCmd.java
index bca0ea3..25ebf06 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.register;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 
 /**
@@ -9,11 +9,11 @@
  * @author 刘苏义
  * @date 2024/10/22 16:36
  */
-public class HeartbeatCommand extends BaseCommand {
+public class HeartbeatCmd extends BaseCmd {
 
     private final long timestamp;
 
-    public HeartbeatCommand(long timestamp) {
+    public HeartbeatCmd(long timestamp) {
         setDataHeader((short)0x7479);
         setDataLength((short)0x09);
         setCmdCode((byte)0x02);
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCmd.java
similarity index 83%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCmd.java
index 19dfa4d..cb29a9e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/HeartbeatReplyCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.register;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -13,11 +13,11 @@
  */
 @Data
 @NoArgsConstructor
-public class HeartbeatReplyCommand extends BaseCommand {
+public class HeartbeatReplyCmd extends BaseCmd {
 
     private long timestamp; // 时间戳
 
-    public HeartbeatReplyCommand(long timestamp) {
+    public HeartbeatReplyCmd(long timestamp) {
         setDataHeader((short) 0x6A77); // 设置帧头
         setCmdCode((byte) 0x02); // 设置指令编号
         setDataLength((short) (13)); // 数据长度 (指令编号 + 时间戳)
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCmd.java
similarity index 84%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCmd.java
index dfebbfb..f6a8f9d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.register;// RegisterMessage.java
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 
 /**
@@ -9,11 +9,11 @@
  * @author 刘苏义
  * @date 2024/10/22 16:36
  */
-public class RegisterCommand extends BaseCommand {
+public class RegisterCmd extends BaseCmd {
     private int userId;
     private byte[] accessToken;
 
-    public RegisterCommand(int userId, byte[] accessToken) {
+    public RegisterCmd(int userId, byte[] accessToken) {
         setDataHeader((short) 0x7479); // 设置帧头
         setDataLength((short) (5 + accessToken.length)); // 数据长度
         setCmdCode((byte) 0x01); // 设置命令编号
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCmd.java
similarity index 82%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCmd.java
index 159b2da..e81692b 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/RegisterReplyCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.register;// RegisterMessage.java
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -11,10 +11,10 @@
  * @date 2024/10/22 16:36
  */
 @Data
-public class RegisterReplyCommand extends BaseCommand {
+public class RegisterReplyCmd extends BaseCmd {
     private byte success;
 
-    public RegisterReplyCommand(byte success) {
+    public RegisterReplyCmd(byte success) {
         setDataHeader((short) 0x6A77); // 设置帧头
         setDataLength((short) (6)); // 数据长度
         setCmdCode((byte) 0x01); // 设置命令编号
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCmd.java
similarity index 87%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCmd.java
index ec2b494..cf0fabf 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitInfoCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.register;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
 
@@ -12,13 +12,13 @@
  */
 
 @Data
-public class UavInitInfoCommand extends BaseCommand {
+public class UavInitInfoCmd extends BaseCmd {
 
     private final byte encryptFlag; // 加密标志
     private final byte actionCode; // 动作编号
     private final byte result; // 执行结果
 
-    public UavInitInfoCommand(byte[] boxSn) {
+    public UavInitInfoCmd(byte[] boxSn) {
         setDataHeader((short) 0x7479);
         setDataLength((short) 19);
         setCmdCode((byte) 0xD1);
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavReadyNotificationCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitReplyCmd.java
similarity index 68%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavReadyNotificationCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitReplyCmd.java
index 25de8fb..938370e 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavReadyNotificationCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/register/UavInitReplyCmd.java
@@ -1,6 +1,6 @@
 package com.ard.tianyu.netty.command.register;
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import com.ard.tianyu.netty.protobuf.TelemetryDataPB;
 import io.netty.buffer.ByteBuf;
 import lombok.Data;
@@ -12,19 +12,17 @@
  * @date 2024/10/24 17:18
  */
 @Data
-public class UavReadyNotificationCommand extends BaseCommand {
+public class UavInitReplyCmd extends BaseCmd {
 
-    private byte actionCode;
+    private byte actionCode = 0x42;
     private TelemetryDataPB.UavInitInfo uavInitInfo;
 
-    public UavReadyNotificationCommand(String boxSn, TelemetryDataPB.UavInitInfo uavInitInfo, byte actionCode) {
+    public UavInitReplyCmd(String boxSn, TelemetryDataPB.UavInitInfo uavInitInfo) {
         setDataHeader((short) 0x6A77); // 设置帧头
         // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
         setBoxSn(boxSn.getBytes());
         setCmdCode((byte) 0xD1); // 设置命令编号
-
         this.uavInitInfo = uavInitInfo;
-        this.actionCode = actionCode;
     }
 
     @Override
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
index f4b544a..1bef005 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
@@ -1,7 +1,7 @@
 package com.ard.tianyu.netty.handler;
 
 import com.ard.tianyu.netty.TyNettyTcpClient;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import com.ard.tianyu.service.ITyService;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
@@ -18,7 +18,7 @@
 @Component
 @Slf4j
 @ChannelHandler.Sharable
-public class ClientHandler extends SimpleChannelInboundHandler<BaseCommand> {
+public class ClientHandler extends SimpleChannelInboundHandler<BaseCmd> {
 
     @Resource
     private ITyService tyService;
@@ -27,7 +27,7 @@
     private TyNettyTcpClient tyNettyTcpClient;
 
     @Override
-    public void channelRead0(ChannelHandlerContext ctx, BaseCommand command) {
+    public void channelRead0(ChannelHandlerContext ctx, BaseCmd command) {
         InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
         String host = ipSocket.getHostString();
         int port = ipSocket.getPort();
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 689ccc8..db9c7d1 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,16 +1,19 @@
 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;
-import com.ard.tianyu.netty.command.real.SignalInfoCommand;
-import com.ard.tianyu.netty.command.real.UavStateCommand;
-import com.ard.tianyu.netty.command.real.UavTelemetryDataCommand;
-import com.ard.tianyu.netty.command.register.HeartbeatReplyCommand;
-import com.ard.tianyu.netty.command.register.RegisterReplyCommand;
-import com.ard.tianyu.netty.command.register.UavReadyNotificationCommand;
+import com.ard.tianyu.netty.command.camera.CameraModeReplyCmd;
+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.notice.BoxPowerStatusReplyCmd;
+import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
+import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
+import com.ard.tianyu.netty.command.real.SignalInfoCmd;
+import com.ard.tianyu.netty.command.real.UavStateCmd;
+import com.ard.tianyu.netty.command.real.UavTelemetryDataCmd;
+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.protobuf.TelemetryDataPB;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
@@ -40,33 +43,38 @@
             return;
         }
         byte cmdCode = in.readByte();
-        BaseCommand baseCommand = null;
+        BaseCmd baseCmd = null;
         switch (cmdCode) {
             case 0x01:
                 byte success = in.readByte(); // 读取是否成功
                 log.warn("注册回复: {}", success == 0x01 ? "成功" : "失败");
-                baseCommand = new RegisterReplyCommand(success);
+                baseCmd = new RegisterReplyCmd(success);
                 break;
             case 0x02:
                 long timestamp = in.readLong(); // 读取时间戳
-                baseCommand = new HeartbeatReplyCommand(timestamp);
+                baseCmd = new HeartbeatReplyCmd(timestamp);
                 log.debug("心跳回复: 时间戳 {}", timestamp);
                 break;
             case 0x03:
             case 0x04:
                 break;
+            case 0x0A:
+                byte status = in.readByte();
+                baseCmd = new BoxPowerStatusReplyCmd(status);
+                log.debug("云盒开机/关机通知回复: 状态 {}", String.format("0x%02X", status & 0xFF));
+                break;
             case (byte) 0xA8:
                 byte[] uavStatus = new byte[dataLength - 1];
                 in.readBytes(uavStatus);  // 读取 ProtoBuf 数据
                 TelemetryDataPB.UavState uavState = TelemetryDataPB.UavState.parseFrom(uavStatus);
-                baseCommand = new UavStateCommand(uavState);
+                baseCmd = new UavStateCmd(uavState);
                 log.debug("无人机状态数据: {}", uavState.getBoxSn());
                 break;
             case (byte) 0xA9:
                 byte[] uavData = new byte[dataLength - 1];
                 in.readBytes(uavData);
                 TelemetryDataPB.TelemetryData telemetryData = TelemetryDataPB.TelemetryData.parseFrom(uavData);
-                baseCommand = new UavTelemetryDataCommand(telemetryData);
+                baseCmd = new UavTelemetryDataCmd(telemetryData);
                 log.debug("遥测数据: {}", telemetryData.getBoxSn());
                 break;
             case (byte) 0x0C:
@@ -77,7 +85,7 @@
                 uavData = new byte[dataLength - 20];
                 in.readBytes(uavData);
                 TelemetryDataPB.SignalInfo signalInfo = TelemetryDataPB.SignalInfo.parseFrom(uavData);
-                baseCommand = new SignalInfoCommand(signalInfo);
+                baseCmd = new SignalInfoCmd(signalInfo);
                 log.debug("信道质量数据: {}", delayTime);
                 break;
             case (byte) 0xD1:
@@ -90,7 +98,7 @@
                         uavData = new byte[15];
                         in.readBytes(uavData);
                         String boxSn = new String(uavData);
-                        baseCommand = new CameraModeReplyCommand(boxSn, result, errorCode);
+                        baseCmd = new CameraModeReplyCmd(boxSn, result, errorCode);
                         log.debug("设置相机模式回复: {}", boxSn);
                         break;
                     case 0x23:
@@ -99,7 +107,7 @@
                         uavData = new byte[15];
                         in.readBytes(uavData);
                         boxSn = new String(uavData);
-                        baseCommand = new CapturePicReplyCommand(boxSn, result, errorCode);
+                        baseCmd = new CapturePicReplyCmd(boxSn, result, errorCode);
                         log.debug("拍照回复: {}", boxSn);
                         break;
                     case 0x24:
@@ -108,7 +116,7 @@
                         uavData = new byte[15];
                         in.readBytes(uavData);
                         boxSn = new String(uavData);
-                        baseCommand = new RecordStartReplyCommand(boxSn, result, errorCode);
+                        baseCmd = new RecordStartReplyCmd(boxSn, result, errorCode);
                         log.debug("开始录像回复: {}", boxSn);
                         break;
                     case 0x25:
@@ -117,8 +125,28 @@
                         uavData = new byte[15];
                         in.readBytes(uavData);
                         boxSn = new String(uavData);
-                        baseCommand = new RecordStopReplyCommand(boxSn, result, errorCode);
+                        baseCmd = new RecordStopReplyCmd(boxSn, result, errorCode);
                         log.debug("停止录像回复: {}", boxSn);
+                        break;
+                    case 0x2E:
+                        result = in.readByte();
+                        errorCode = in.readInt();
+                        uavData = new byte[15];
+                        in.readBytes(uavData);
+                        boxSn = new String(uavData);
+                        baseCmd = new FlyWayEndReplyCmd(boxSn, result, errorCode);
+                        log.debug("航线结束通知回复: {}", boxSn);
+                        break;
+                    case 0x3D:
+                        byte batteryPower = in.readByte();
+                        double longitude = in.readDouble();
+                        double latitude = in.readDouble();
+                        int altitude = in.readInt();
+                        uavData = new byte[dataLength - 24];
+                        in.readBytes(uavData);
+                        boxSn = new String(uavData);
+                        baseCmd = new UavReadyReplyCmd(boxSn, batteryPower, longitude, latitude, altitude);
+                        log.debug("无人机准备完成通知回复: 电池电量 {}", String.format("0x%02X", batteryPower & 0xFF));
                         break;
                     case 0x42:
                         byte[] uavData1 = new byte[dataLength - 18];
@@ -127,7 +155,7 @@
                         in.readBytes(uavData2);
                         boxSn = new String(uavData2);
                         TelemetryDataPB.UavInitInfo uavInitInfo = TelemetryDataPB.UavInitInfo.parseFrom(uavData1);
-                        baseCommand = new UavReadyNotificationCommand(boxSn, uavInitInfo, actionCode);
+                        baseCmd = new UavInitReplyCmd(boxSn, uavInitInfo);
                         log.debug("无人机初始化数据: {}", boxSn);
                         break;
                     default:
@@ -144,8 +172,8 @@
                         String.format("0x%02X", actionCode & 0xFF));//String.format("0x%02X", cmdCode & 0xFF)
 
         }
-        if (baseCommand != null) {
-            out.add(baseCommand);
+        if (baseCmd != null) {
+            out.add(baseCmd);
         }
     }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolEncoder.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolEncoder.java
index e75d256..c4dca37 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolEncoder.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolEncoder.java
@@ -1,17 +1,15 @@
 package com.ard.tianyu.netty.handler;// MessageProtocolEncoder.java
 
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToByteEncoder;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.Arrays;
-
 @Slf4j
-public class MessageProtocolEncoder extends MessageToByteEncoder<BaseCommand> {
+public class MessageProtocolEncoder extends MessageToByteEncoder<BaseCmd> {
     @Override
-    protected void encode(ChannelHandlerContext ctx, BaseCommand command, ByteBuf out) throws Exception {
+    protected void encode(ChannelHandlerContext ctx, BaseCmd command, ByteBuf out) throws Exception {
 
         command.encode(out); // 编码具体负载
         // 打印
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 471f873..d909b47 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,9 +3,7 @@
 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.CameraModeDTO;
-import com.ard.tianyu.model.dto.camera.CapturePicDTO;
-import com.ard.tianyu.model.dto.camera.RecordDTO;
+import com.ard.tianyu.model.dto.camera.*;
 import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
 import com.ard.tianyu.model.dto.control.AngleControlDTO;
 import com.ard.tianyu.model.dto.control.SpeedControlDTO;
@@ -13,7 +11,7 @@
 import com.ard.tianyu.model.dto.state.UavState;
 import com.ard.tianyu.model.dto.telemetry.TelemetryData;
 import com.ard.tianyu.model.receiver.*;
-import com.ard.tianyu.netty.command.BaseCommand;
+import com.ard.tianyu.netty.command.BaseCmd;
 import com.dtflys.forest.annotation.Var;
 
 import java.util.List;
@@ -99,6 +97,31 @@
     void record(RecordDTO recordDto);
 
     /**
+     * 变倍
+     */
+    void zoom(ZoomDTO zoomDTO);
+
+    /**
+     * 变倍到指定倍数
+     */
+    void zoomToLevel(ZoomToLevelDTO zoomToLevelDTO);
+
+    /**
+     * 切换摄像头
+     */
+    void switchCamera(SwitchCameraDTO switchCameraDTO);
+
+    /**
+     * 切换视频源
+     */
+    void switchSource(SwitchSourceDTO switchSourceDTO);
+
+    /**
+     * 打开或关闭照片回传
+     */
+    void photoReturnToggle(PhotoReturnToggleDTO photoReturnToggleDTO);
+
+    /**
      * 获取无人机状态
      */
     UavState getUavState(String boxSn);
@@ -116,5 +139,5 @@
     /**
      * 解析天宇服务端发来的消息
      */
-    void processMessage(String key, BaseCommand tyMessage);
+    void processMessage(String key, BaseCmd tyMessage);
 }
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 c056263..637d878 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,9 +8,7 @@
 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.CameraModeDTO;
-import com.ard.tianyu.model.dto.camera.CapturePicDTO;
-import com.ard.tianyu.model.dto.camera.RecordDTO;
+import com.ard.tianyu.model.dto.camera.*;
 import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
 import com.ard.tianyu.model.dto.control.AngleControlDTO;
 import com.ard.tianyu.model.dto.control.SpeedControlDTO;
@@ -24,12 +22,15 @@
 import com.ard.tianyu.netty.command.*;
 import com.ard.tianyu.netty.TyNettyTcpClient;
 import com.ard.tianyu.netty.command.camera.*;
-import com.ard.tianyu.netty.command.control.AbsAngleControlCommand;
-import com.ard.tianyu.netty.command.control.AngleControlCommand;
-import com.ard.tianyu.netty.command.control.SpeedControlCommand;
-import com.ard.tianyu.netty.command.real.SignalInfoCommand;
-import com.ard.tianyu.netty.command.real.UavStateCommand;
-import com.ard.tianyu.netty.command.real.UavTelemetryDataCommand;
+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.notice.BoxPowerStatusReplyCmd;
+import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
+import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
+import com.ard.tianyu.netty.command.real.SignalInfoCmd;
+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.service.ITyService;
 import io.netty.channel.Channel;
@@ -135,15 +136,14 @@
     @Override
     public void registerMessage() {
         AccessTokenReceiver tyToken = tyConfiguration.getAccessToken();
-        RegisterCommand registerMessage = new RegisterCommand(tyToken.getCompanyId(), tyToken.getAccessToken().getBytes());
+        RegisterCmd registerMessage = new RegisterCmd(tyToken.getCompanyId(), tyToken.getAccessToken().getBytes());
         this.sendMessage(tyConfiguration.getIpPort(), registerMessage);
     }
-
 
     /**
      * 发送消息
      */
-    public void sendMessage(String key, BaseCommand msg) {
+    public void sendMessage(String key, BaseCmd msg) {
         try {
             ChannelFuture future = TyNettyTcpClient.channels.get(key).getChannelFuture();
             Channel channel = future.channel();
@@ -166,7 +166,7 @@
      */
     @Override
     public void angleControl(AngleControlDTO angleControlDto) {
-        AngleControlCommand controlAngleCommand = new AngleControlCommand(angleControlDto);
+        AngleControlCmd controlAngleCommand = new AngleControlCmd(angleControlDto);
         this.sendMessage(tyConfiguration.getIpPort(), controlAngleCommand);
     }
 
@@ -175,7 +175,7 @@
      */
     @Override
     public void absAngleControl(AbsAngleControlDTO absAngleControlDto) {
-        AbsAngleControlCommand absAngleControlCommand = new AbsAngleControlCommand(absAngleControlDto);
+        AbsAngleControlCmd absAngleControlCommand = new AbsAngleControlCmd(absAngleControlDto);
         this.sendMessage(tyConfiguration.getIpPort(), absAngleControlCommand);
     }
 
@@ -184,7 +184,7 @@
      */
     @Override
     public void speedControl(SpeedControlDTO speedControlDto) {
-        SpeedControlCommand speedControlCommand = new SpeedControlCommand(speedControlDto);
+        SpeedControlCmd speedControlCommand = new SpeedControlCmd(speedControlDto);
         this.sendMessage(tyConfiguration.getIpPort(), speedControlCommand);
     }
 
@@ -193,7 +193,7 @@
      */
     @Override
     public void updateCameraMode(CameraModeDTO cameraModeDTO) {
-        CameraModeCommand cameraModeCommand = new CameraModeCommand(cameraModeDTO);
+        CameraModeCmd cameraModeCommand = new CameraModeCmd(cameraModeDTO);
         this.sendMessage(tyConfiguration.getIpPort(), cameraModeCommand);
     }
 
@@ -202,8 +202,8 @@
      */
     @Override
     public void capturePic(CapturePicDTO capturePicDto) {
-        updateCameraMode(CameraModeDTO.builder().boxSn(capturePicDto.getBoxSn()).actionParam((byte)0x01).build());
-        CapturePicCommand capturePicCommand = new CapturePicCommand(capturePicDto);
+        updateCameraMode(CameraModeDTO.builder().boxSn(capturePicDto.getBoxSn()).actionParam((byte) 0x01).build());
+        CapturePicCmd capturePicCommand = new CapturePicCmd(capturePicDto);
         this.sendMessage(tyConfiguration.getIpPort(), capturePicCommand);
     }
 
@@ -212,14 +212,59 @@
      */
     @Override
     public void record(RecordDTO recordDto) {
-        BaseCommand baseCommand;
+        BaseCmd baseCmd;
         if (recordDto.getIsRecord()) {
-            updateCameraMode(CameraModeDTO.builder().boxSn(recordDto.getBoxSn()).actionParam((byte)0x02).build());
-            baseCommand = new RecordStartCommand(recordDto);
+            updateCameraMode(CameraModeDTO.builder().boxSn(recordDto.getBoxSn()).actionParam((byte) 0x02).build());
+            baseCmd = new RecordStartCmd(recordDto);
         } else {
-            baseCommand = new RecordStopCommand(recordDto);
+            baseCmd = new RecordStopCmd(recordDto);
         }
-        this.sendMessage(tyConfiguration.getIpPort(), baseCommand);
+        this.sendMessage(tyConfiguration.getIpPort(), baseCmd);
+    }
+
+    /**
+     * 变倍
+     */
+    @Override
+    public void zoom(ZoomDTO zoomDTO) {
+        ZoomCmd zoomCommand = new ZoomCmd(zoomDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), zoomCommand);
+    }
+
+    /**
+     * 变倍到指定倍数
+     */
+    @Override
+    public void zoomToLevel(ZoomToLevelDTO zoomToLevelDTO) {
+        ZoomToLevelCmd zoomToLevelCommand = new ZoomToLevelCmd(zoomToLevelDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), zoomToLevelCommand);
+    }
+
+    /**
+     * 切换摄像头
+     */
+    @Override
+    public void switchCamera(SwitchCameraDTO switchCameraDTO) {
+        SwitchCameraCmd switchCameraCmd = new SwitchCameraCmd(switchCameraDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), switchCameraCmd);
+    }
+
+    /**
+     * 切换视频源
+     */
+    @Override
+    public void switchSource(SwitchSourceDTO switchSourceDTO) {
+        SwitchSourceCmd switchSourceCmd = new SwitchSourceCmd(switchSourceDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), switchSourceCmd);
+    }
+
+    /**
+     * 打开或关闭照片回传
+     */
+    @Override
+    public void photoReturnToggle(PhotoReturnToggleDTO photoReturnToggleDTO) {
+        PhotoReturnToggleCmd photoReturnToggleCmd = new PhotoReturnToggleCmd(photoReturnToggleDTO);
+        this.sendMessage(tyConfiguration.getIpPort(), photoReturnToggleCmd);
     }
 
     /**
@@ -246,14 +291,17 @@
         return UavSignalInfoCache.getUavSignalInfo(boxSn);
     }
 
+    /**
+     * 处理天宇服务器返回的消息
+     */
     @Override
-    public void processMessage(String key, BaseCommand tyCommand) {
+    public void processMessage(String key, BaseCmd tyCommand) {
         byte cmdCode = tyCommand.getCmdCode();
         switch (cmdCode) {
             case 0x01:
                 // 处理心跳消息
-                RegisterReplyCommand registerReplyCommand = (RegisterReplyCommand) tyCommand;
-                log.info("收到注册消息-->处理注册消息{}", registerReplyCommand.getSuccess());
+                RegisterReplyCmd registerReplyCommand = (RegisterReplyCmd) tyCommand;
+                log.debug("收到注册消息-->处理注册消息:{}", registerReplyCommand.getSuccess());
                 if (registerReplyCommand.getSuccess() != 1) {
                     // 注册失败,重新注册
                     log.info("注册失败,重新注册");
@@ -262,8 +310,8 @@
                 break;
             case 0x02:
                 // 处理注册消息
-                HeartbeatReplyCommand heartbeatReplyCommand = (HeartbeatReplyCommand) tyCommand;
-                log.debug("收到心跳消息-->处理心跳消息{}", heartbeatReplyCommand.getTimestamp());
+                HeartbeatReplyCmd heartbeatReplyCmd = (HeartbeatReplyCmd) tyCommand;
+                log.debug("收到心跳消息-->处理心跳消息:{}", heartbeatReplyCmd.getTimestamp());
                 break;
             case 0x03:
                 // 处理订阅消息
@@ -271,62 +319,63 @@
             case 0x04:
                 // 处理取消订阅消息
                 break;
+            case 0x0A:
+                // 处理云盒开关机通知消息
+                BoxPowerStatusReplyCmd boxPowerStatusReplyCmd = (BoxPowerStatusReplyCmd) tyCommand;
+                log.debug("收到云盒开关机通知消息-->状态:{}", boxPowerStatusReplyCmd.getStatus());
+                break;
             case (byte) 0xA8:
                 // 处理无人机状态消息
                 log.debug("收到无人机状态消息-->无人机状态消息");
-                UavStateCommand uavStateCommand = (UavStateCommand) tyCommand;
-                UavState uavState = UavStateConverter.convertProtoToEntity(uavStateCommand.getUavState());
+                UavStateCmd uavStateCmd = (UavStateCmd) tyCommand;
+                UavState uavState = UavStateConverter.convertProtoToEntity(uavStateCmd.getUavState());
                 UavStateCache.putUavState(uavState);
                 break;
             case (byte) 0xA9:
                 // 处理无人机遥测消息
                 log.debug("收到无人机遥测消息-->无人机遥测消息");
-                UavTelemetryDataCommand uavTelemetryDataCommand = (UavTelemetryDataCommand) tyCommand;
-                TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(uavTelemetryDataCommand.getTelemetryData());
+                UavTelemetryDataCmd uavTelemetryDataCmd = (UavTelemetryDataCmd) tyCommand;
+                TelemetryData telemetryData = UavTelemetryDataConverter.convertProtoToEntity(uavTelemetryDataCmd.getTelemetryData());
                 UavTelemetryDataCache.putUavTelemetryData(telemetryData);
                 break;
             case (byte) 0x0C:
                 // 处理无人机信道质量数据
                 log.debug("收到无人机信道质量数据消息-->无人机信道质量数据消息");
-                SignalInfoCommand signalInfoCommand = (SignalInfoCommand) tyCommand;
-                SignalInfo signalInfo = UavSignalInfoConverter.convertProtoToEntity(signalInfoCommand.getSignalInfo());
+                SignalInfoCmd signalInfoCmd = (SignalInfoCmd) tyCommand;
+                SignalInfo signalInfo = UavSignalInfoConverter.convertProtoToEntity(signalInfoCmd.getSignalInfo());
                 UavSignalInfoCache.putUavSignalInfoCache(signalInfo);
                 break;
             case (byte) 0xD1:
                 // 处理无人机
-                if (tyCommand instanceof UavReadyNotificationCommand) {
-                    UavReadyNotificationCommand droneReadyNotificationCommand = (UavReadyNotificationCommand) tyCommand;
-                    if (droneReadyNotificationCommand.getActionCode() == (byte) 0x42) {
-                        UavInitInfoCommand uavInitCommand = new UavInitInfoCommand(droneReadyNotificationCommand.getBoxSn());
-                        this.sendMessage(tyConfiguration.getIpPort(), uavInitCommand);
-                        log.info("收到无人机初始化详情-回复防止再次发送");
-                    }
+                if (tyCommand instanceof UavInitReplyCmd) {
+                    UavInitReplyCmd uavInitReplyCmd = (UavInitReplyCmd) tyCommand;
+                    UavInitInfoCmd uavInitCommand = new UavInitInfoCmd(uavInitReplyCmd.getBoxSn());
+                    this.sendMessage(tyConfiguration.getIpPort(), uavInitCommand);
+                    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 UavReadyReplyCmd) {
+                    UavReadyReplyCmd uavReadyReplyCmd = (UavReadyReplyCmd) tyCommand;
+                    log.info("收到无人机准备完成通知,电池电量{} 经度{} 纬度{} 海拔{}",uavReadyReplyCmd.getBatteryPower(),uavReadyReplyCmd.getLongitude(),uavReadyReplyCmd.getLatitude(),uavReadyReplyCmd.getAltitude());
                 }
-
-                if (tyCommand instanceof CapturePicReplyCommand) {
-                    CapturePicReplyCommand capturePicReplyCommand = (CapturePicReplyCommand) tyCommand;
-                    if (capturePicReplyCommand.getActionCode() == (byte) 0x23) {
-                        log.info("收到无人机拍照回复:{} 错误码:{}", String.format("0x%02X", capturePicReplyCommand.getResult() & 0xFF), capturePicReplyCommand.getErrorCode());
-                    }
+                if (tyCommand instanceof CameraModeReplyCmd) {
+                    CameraModeReplyCmd cameraModeReplyCommand = (CameraModeReplyCmd) tyCommand;
+                    log.info("收到无人机设置相机模式回复:{} 错误码:{}", String.format("0x%02X", cameraModeReplyCommand.getResult() & 0xFF), cameraModeReplyCommand.getErrorCode());
                 }
-
-                if (tyCommand instanceof RecordStartReplyCommand) {
-                    RecordStartReplyCommand recordStartReplyCommand = (RecordStartReplyCommand) tyCommand;
-                    if (recordStartReplyCommand.getActionCode() == (byte) 0x24) {
-                        log.info("收到无人机开始录像回复:{} 错误码:{}", String.format("0x%02X", recordStartReplyCommand.getResult() & 0xFF), recordStartReplyCommand.getErrorCode());
-                    }
+                if (tyCommand instanceof FlyWayEndReplyCmd) {
+                    FlyWayEndReplyCmd flyWayEndReplyCmd = (FlyWayEndReplyCmd) tyCommand;
+                    log.info("收到无人机飞行结束通知:状态:{}",flyWayEndReplyCmd.getResult());
                 }
-                if (tyCommand instanceof RecordStopReplyCommand) {
-                    RecordStopReplyCommand recordStopReplyCommand = (RecordStopReplyCommand) tyCommand;
-                    if (recordStopReplyCommand.getActionCode() == (byte) 0x25) {
-                        log.info("收到无人机停止录像回复:{} 错误码:{}", String.format("0x%02X", recordStopReplyCommand.getResult() & 0xFF), recordStopReplyCommand.getErrorCode());
-                    }
+                if (tyCommand instanceof CapturePicReplyCmd) {
+                    CapturePicReplyCmd capturePicReplyCommand = (CapturePicReplyCmd) tyCommand;
+                    log.info("收到无人机拍照回复:{} 错误码:{}", String.format("0x%02X", capturePicReplyCommand.getResult() & 0xFF), capturePicReplyCommand.getErrorCode());
+                }
+                if (tyCommand instanceof RecordStartReplyCmd) {
+                    RecordStartReplyCmd recordStartReplyCommand = (RecordStartReplyCmd) tyCommand;
+                    log.info("收到无人机开始录像回复:{} 错误码:{}", String.format("0x%02X", recordStartReplyCommand.getResult() & 0xFF), recordStartReplyCommand.getErrorCode());
+                }
+                if (tyCommand instanceof RecordStopReplyCmd) {
+                    RecordStopReplyCmd recordStopReplyCommand = (RecordStopReplyCmd) tyCommand;
+                    log.info("收到无人机停止录像回复:{} 错误码:{}", String.format("0x%02X", recordStopReplyCommand.getResult() & 0xFF), recordStopReplyCommand.getErrorCode());
                 }
                 break;
             default:
@@ -339,7 +388,7 @@
     public void sendHeartBeat() {
         long timestamp = System.currentTimeMillis();
         log.debug("定时向天宇发送⼼跳,时间戳{}", timestamp);
-        HeartbeatCommand heartbeatMessage = new HeartbeatCommand(timestamp);
+        HeartbeatCmd heartbeatMessage = new HeartbeatCmd(timestamp);
         this.sendMessage(tyConfiguration.getIpPort(), heartbeatMessage);
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3