From 91f6e60919b92b7f99a41f2ddeb42df17cd0c487 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Fri, 25 Oct 2024 10:48:26 +0800
Subject: [PATCH] 优化

---
 ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java               |    1 
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java      |    4 +-
 ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java                |   13 ++++--
 ard-work/src/main/java/com/ard/tianyu/service/ITyService.java                        |    5 ++
 ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterReplyCommand.java        |    3 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/UavReadyNotificationCommand.java |    4 +-
 ard-work/src/main/java/com/ard/tianyu/netty/command/UavInitInfoCommand.java          |   20 ++++++----
 ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatCommand.java            |    3 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterCommand.java             |    3 +
 ard-work/src/main/java/com/ard/tianyu/controller/UavController.java                  |    2 
 ard-work/src/main/java/com/ard/tianyu/netty/command/BaseCommand.java                 |    1 
 ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolEncoder.java      |    8 +---
 ard-work/src/main/java/com/ard/tianyu/netty/command/PointFlyCommand.java             |    4 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatReplyCommand.java       |    3 +
 ard-work/src/main/java/com/ard/tianyu/netty/command/ControlAngleCommand.java         |    4 ++
 15 files changed, 51 insertions(+), 27 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 5ec8b27..3f620f7 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
@@ -77,7 +77,7 @@
     @ApiOperation("云台转动(基于角度)")
     @GetMapping("/controlAngle")
     public AjaxResult controlAngle(String boxSn,Integer actionId,Integer rotationAngle) {
-        tyService.controlAngle(boxSn,actionId,rotationAngle);
+        tyService.angleControl(boxSn,actionId,rotationAngle);
         return AjaxResult.success();
     }
 
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/BaseCommand.java
index 9e3fe46..5061ed9 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/BaseCommand.java
@@ -12,4 +12,5 @@
 
     // 编码方法,子类需要实现
     public abstract void encode(ByteBuf out);
+
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/ControlAngleCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/ControlAngleCommand.java
index 4e77ae1..694e9f4 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/ControlAngleCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/ControlAngleCommand.java
@@ -28,6 +28,10 @@
     }
 
     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(rotationAngle);       // 写入转动角度
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatCommand.java
index 2b5bfba..10d61a3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatCommand.java
@@ -19,6 +19,9 @@
         this.timestamp = timestamp;
     }
     public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeByte(getCmdCode());        // 写入命令码
         out.writeLong(timestamp); // 写入时间戳
     }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatReplyCommand.java
index 8685e8d..bbb9b6f 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/HeartbeatReplyCommand.java
@@ -24,6 +24,9 @@
     }
 
     public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeByte(getCmdCode());        // 写入命令码
         out.writeLong(timestamp); // 写入时间戳
     }
 }
\ No newline at end of file
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/PointFlyCommand.java
index 1009e54..1509fd5 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/PointFlyCommand.java
@@ -19,7 +19,9 @@
 
     @Override
     public void encode(ByteBuf out) {
-
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeByte(getCmdCode());        // 写入命令码
         out.writeDouble(longitude);         // 写入经度
         out.writeDouble(latitude);          // 写入纬度
         out.writeFloat(height);             // 写入高度
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterCommand.java
index e7e2719..2de1337 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterCommand.java
@@ -22,6 +22,9 @@
 
     @Override
     public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeByte(getCmdCode());        // 写入命令码
         out.writeInt(userId);               // 写入用户编号
         out.writeBytes(accessToken);        // 写入访问令牌
     }
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterReplyCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterReplyCommand.java
index 2445d51..0eff2c3 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterReplyCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/RegisterReplyCommand.java
@@ -22,6 +22,9 @@
 
     @Override
     public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeByte(getCmdCode());        // 写入命令码
         out.writeByte(success);             // 写入用户编号
     }
 }
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/UavInitInfoCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavInitInfoCommand.java
index 44ebc13..9944dd5 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/UavInitInfoCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavInitInfoCommand.java
@@ -11,25 +11,29 @@
  */
 
 @Data
-public class UavInitInfoCommand extends BaseCommand{
+public class UavInitInfoCommand extends BaseCommand {
 
     private final byte encryptFlag; // 加密标志
     private final byte actionCode; // 动作编号
     private final byte result; // 执行结果
 
-    public UavInitInfoCommand(String boxSn, byte actionCode) {
-        setDataHeader((short)0x7479);
-        setDataLength((short) 18);
-        setBoxSn(boxSn.getBytes());
-        setCmdCode((byte)0xD1);
+    public UavInitInfoCommand(byte[] boxSn) {
+        setDataHeader((short) 0x7479);
+        setDataLength((short) 19);
+        setCmdCode((byte) 0xD1);
         this.encryptFlag = 0x00;
-        this.actionCode = actionCode;
+        this.actionCode = 0x42;
         this.result = 0x01;
+        setBoxSn(boxSn);
     }
 
     public void encode(ByteBuf out) {
+        out.writeShort(getDataHeader());    // 写入数据头
+        out.writeShort(getDataLength());    // 写入数据长度
+        out.writeByte(getCmdCode());        // 写入命令码
         out.writeByte(encryptFlag);         // 写入加密标志
         out.writeByte(actionCode);          // 写入动作编号
         out.writeByte(result);              // 写入执行结果
+        out.writeBytes(getBoxSn());         // 写入云盒编号
     }
-}
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/DroneReadyNotificationCommand.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavReadyNotificationCommand.java
similarity index 79%
rename from ard-work/src/main/java/com/ard/tianyu/netty/command/DroneReadyNotificationCommand.java
rename to ard-work/src/main/java/com/ard/tianyu/netty/command/UavReadyNotificationCommand.java
index 95814c4..338e530 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/command/DroneReadyNotificationCommand.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/UavReadyNotificationCommand.java
@@ -11,12 +11,12 @@
  * @date 2024/10/24 17:18
  */
 @Data
-public class DroneReadyNotificationCommand extends BaseCommand {
+public class UavReadyNotificationCommand extends BaseCommand {
 
     private byte actionCode;
     private TelemetryDataPB.UavInitInfo uavInitInfo;
 
-    public DroneReadyNotificationCommand(String boxSn,TelemetryDataPB.UavInitInfo uavInitInfo, byte actionCode) {
+    public UavReadyNotificationCommand(String boxSn, TelemetryDataPB.UavInitInfo uavInitInfo, byte actionCode) {
         setDataHeader((short) 0x6A77); // 设置帧头
         // setDataLength((short) (1 + uavState.toByteArray().length)); // 数据长度
         setBoxSn(boxSn.getBytes());
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 a84e551..f4b544a 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
@@ -2,7 +2,6 @@
 
 import com.ard.tianyu.netty.TyNettyTcpClient;
 import com.ard.tianyu.netty.command.BaseCommand;
-import com.ard.tianyu.netty.command.HeartbeatCommand;
 import com.ard.tianyu.service.ITyService;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
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 eafc7b5..ac924b9 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
@@ -81,8 +81,8 @@
                         in.readBytes(uavData2);
                         String boxSn = new String(uavData2);
                         TelemetryDataPB.UavInitInfo uavInitInfo = TelemetryDataPB.UavInitInfo.parseFrom(uavData1);
-                        baseCommand = new DroneReadyNotificationCommand(boxSn, uavInitInfo, actionCode);
-                        log.info("无人机初始化数据: {}", uavInitInfo.getUavModel());
+                        baseCommand = new UavReadyNotificationCommand(boxSn, uavInitInfo, actionCode);
+                        log.debug("无人机初始化数据: {}", boxSn);
                         break;
                     default:
                         log.warn("无法识别的命令码动作编号:{}", String.format("0x%02X", actionCode & 0xFF));
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 2e86ed3..e75d256 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
@@ -12,18 +12,14 @@
 public class MessageProtocolEncoder extends MessageToByteEncoder<BaseCommand> {
     @Override
     protected void encode(ChannelHandlerContext ctx, BaseCommand command, ByteBuf out) throws Exception {
-        out.writeShort(command.getDataHeader()); // 写入帧头
-        out.writeShort(command.getDataLength()); // 写入数据长度
-        if(command.getBoxSn() != null) {
-            out.writeBytes(command.getBoxSn());
-        }// 写入指令编号
-        out.writeByte(command.getCmdCode()); // 写入指令编号
+
         command.encode(out); // 编码具体负载
         // 打印
         if(command.getCmdCode()!=0x02) {
             printHex(out);
         }
     }
+    // 打印编码后的字节数组
     private void printHex(ByteBuf 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 c3b3a7a..b5cd2e8 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
@@ -65,7 +65,9 @@
     /**
      * 云台转动(基于角度)
      */
-    void controlAngle(String boxSn,Integer actionId,Integer rotationAngle) ;
+    void angleControl(String boxSn, Integer actionId, Integer rotationAngle);
+
+    void absAngleControl(String boxSn, Integer actionId, float pitch, float yaw, float roll);
 
     /**
      * 获取无人机状态
@@ -81,6 +83,7 @@
      * 获取信道质量遥测
      */
     SignalInfo getSignalInfo(String boxSn);
+
     /**
      * 解析天宇服务端发来的消息
      */
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index 278e324..b9f8059 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
@@ -18,8 +18,6 @@
 import com.ard.tianyu.netty.command.*;
 import com.ard.tianyu.netty.TyNettyTcpClient;
 import com.ard.tianyu.service.ITyService;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
 import lombok.extern.slf4j.Slf4j;
@@ -153,9 +151,14 @@
      * 云台控制基于角度
      */
     @Override
-    public void controlAngle(String boxSn, Integer actionId, Integer rotationAngle) {
+    public void angleControl(String boxSn, Integer actionId, Integer rotationAngle) {
         ControlAngleCommand controlAngleCommand = new ControlAngleCommand(boxSn, actionId.byteValue(), rotationAngle.byteValue());
         this.sendMessage(tyConfiguration.getIpPort(), controlAngleCommand);
+    }
+
+    @Override
+    public void absAngleControl(String boxSn, Integer actionId, float pitch, float yaw, float roll) {
+
     }
 
     /**
@@ -230,9 +233,9 @@
                 break;
             case (byte) 0xD1:
                 // 处理无人机
-                DroneReadyNotificationCommand droneReadyNotificationCommand = (DroneReadyNotificationCommand) tyCommand;
+                UavReadyNotificationCommand droneReadyNotificationCommand = (UavReadyNotificationCommand) tyCommand;
                 if (droneReadyNotificationCommand.getActionCode() == (byte) 0x42) {
-                    UavInitInfoCommand uavInitCommand = new UavInitInfoCommand(new String(droneReadyNotificationCommand.getBoxSn()), (byte) 0x42);
+                    UavInitInfoCommand uavInitCommand = new UavInitInfoCommand(droneReadyNotificationCommand.getBoxSn());
                     this.sendMessage(tyConfiguration.getIpPort(), uavInitCommand);
                     log.info("收到无人机初始化详情-回复防止再次发送");
                 }

--
Gitblit v1.9.3