From b9f46001860bf194601b4bdf848545bfc72eefa5 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 26 Oct 2024 16:59:35 +0800
Subject: [PATCH] 增加:返航
---
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java | 237 +++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 174 insertions(+), 63 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index 66dacea..1525c4d 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -8,14 +8,16 @@
import com.ard.tianyu.model.dto.BoxHistoryDTO;
import com.ard.tianyu.model.dto.BoxPhotosDTO;
import com.ard.tianyu.model.dto.BoxSettingsDTO;
-import com.ard.tianyu.model.dto.camera.CapturePicDto;
-import com.ard.tianyu.model.dto.camera.RecordDto;
-import com.ard.tianyu.model.dto.control.AbsAngleControlDto;
-import com.ard.tianyu.model.dto.control.AngleControlDto;
-import com.ard.tianyu.model.dto.control.SpeedControlDto;
+import com.ard.tianyu.model.dto.camera.*;
+import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
+import com.ard.tianyu.model.dto.control.AngleControlDTO;
+import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.converter.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.UavStateConverter;
import com.ard.tianyu.model.dto.converter.UavTelemetryDataConverter;
+import com.ard.tianyu.model.dto.manual.ReturnHomeDTO;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -23,18 +25,21 @@
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.manual.*;
+import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd;
+import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
+import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
+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;
import io.netty.channel.ChannelFuture;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.hssf.record.Record;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@@ -135,15 +140,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();
@@ -165,8 +169,8 @@
* 云台控制基于角度
*/
@Override
- public void angleControl(AngleControlDto angleControlDto) {
- AngleControlCommand controlAngleCommand = new AngleControlCommand(angleControlDto);
+ public void angleControl(AngleControlDTO angleControlDto) {
+ AngleControlCmd controlAngleCommand = new AngleControlCmd(angleControlDto);
this.sendMessage(tyConfiguration.getIpPort(), controlAngleCommand);
}
@@ -174,8 +178,8 @@
* 云台绝对值控制(基于角度)
*/
@Override
- public void absAngleControl(AbsAngleControlDto absAngleControlDto) {
- AbsAngleControlCommand absAngleControlCommand = new AbsAngleControlCommand(absAngleControlDto);
+ public void absAngleControl(AbsAngleControlDTO absAngleControlDto) {
+ AbsAngleControlCmd absAngleControlCommand = new AbsAngleControlCmd(absAngleControlDto);
this.sendMessage(tyConfiguration.getIpPort(), absAngleControlCommand);
}
@@ -183,17 +187,27 @@
* 云台转动(基于速度)
*/
@Override
- public void speedControl(SpeedControlDto speedControlDto) {
- SpeedControlCommand speedControlCommand = new SpeedControlCommand(speedControlDto);
+ public void speedControl(SpeedControlDTO speedControlDto) {
+ SpeedControlCmd speedControlCommand = new SpeedControlCmd(speedControlDto);
this.sendMessage(tyConfiguration.getIpPort(), speedControlCommand);
+ }
+
+ /**
+ * 设置相机模式
+ */
+ @Override
+ public void updateCameraMode(CameraModeDTO cameraModeDTO) {
+ CameraModeCmd cameraModeCommand = new CameraModeCmd(cameraModeDTO);
+ this.sendMessage(tyConfiguration.getIpPort(), cameraModeCommand);
}
/**
* 拍照
*/
@Override
- public void capturePic(CapturePicDto capturePicDto) {
- CapturePicCommand capturePicCommand = new CapturePicCommand(capturePicDto);
+ public void capturePic(CapturePicDTO capturePicDto) {
+ updateCameraMode(CameraModeDTO.builder().boxSn(capturePicDto.getBoxSn()).actionParam((byte) 0x01).build());
+ CapturePicCmd capturePicCommand = new CapturePicCmd(capturePicDto);
this.sendMessage(tyConfiguration.getIpPort(), capturePicCommand);
}
@@ -201,14 +215,87 @@
* 录像
*/
@Override
- public void record(RecordDto recordDto) {
- BaseCommand baseCommand;
+ public void record(RecordDTO recordDto) {
+ BaseCmd baseCmd;
if (recordDto.getIsRecord()) {
- 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);
+ }
+
+ /**
+ * 切换无人机控制权
+ */
+ @Override
+ public void switchUavControl(SwitchUavControlDTO switchUavControlDTO) {
+ SwitchUavControlCmd switchUavControlCmd = new SwitchUavControlCmd(switchUavControlDTO);
+ this.sendMessage(tyConfiguration.getIpPort(), switchUavControlCmd);
+ }
+
+ /**
+ * 起飞
+ */
+ @Override
+ public void takeOff(TakeOffDTO takeOffDTO) {
+ TakeOffCmd takeOffCmd = new TakeOffCmd(takeOffDTO);
+ this.sendMessage(tyConfiguration.getIpPort(), takeOffCmd);
+ }
+
+ /**
+ * 返航
+ */
+ @Override
+ public void returnHome(ReturnHomeDTO returnHomeDTO) {
+ ReturnHomeCmd returnHomeCmd=new ReturnHomeCmd(returnHomeDTO);
+ this.sendMessage(tyConfiguration.getIpPort(), returnHomeCmd);
}
/**
@@ -235,14 +322,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("注册失败,重新注册");
@@ -251,8 +341,8 @@
break;
case 0x02:
// 处理注册消息
- HeartbeatReplyCommand heartbeatReplyCommand = (HeartbeatReplyCommand) tyCommand;
- log.debug("收到心跳消息-->处理心跳消息{}", heartbeatReplyCommand.getTimestamp());
+ HeartbeatReplyCmd heartbeatReplyCmd = (HeartbeatReplyCmd) tyCommand;
+ log.debug("收到心跳消息-->处理心跳消息:{}", heartbeatReplyCmd.getTimestamp());
break;
case 0x03:
// 处理订阅消息
@@ -260,55 +350,73 @@
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 CapturePicReplyCommand) {
- CapturePicReplyCommand capturePicReplyCommand = (CapturePicReplyCommand) tyCommand;
- if (capturePicReplyCommand.getActionCode() == (byte) 0x23) {
- log.info("收到无人机拍照回复:{} 错误码:{}", String.format("0x%02X", capturePicReplyCommand.getResult() & 0xFF), capturePicReplyCommand.getErrorCode());
- }
+ if (tyCommand instanceof UavReadyReplyCmd) {
+ UavReadyReplyCmd uavReadyReplyCmd = (UavReadyReplyCmd) tyCommand;
+ log.info("收到无人机准备完成通知,电池电量{} 经度{} 纬度{} 海拔{}", uavReadyReplyCmd.getBatteryPower(), uavReadyReplyCmd.getLongitude(), uavReadyReplyCmd.getLatitude(), uavReadyReplyCmd.getAltitude());
}
-
- 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 CameraModeReplyCmd) {
+ CameraModeReplyCmd cameraModeReplyCommand = (CameraModeReplyCmd) tyCommand;
+ log.info("收到无人机设置相机模式回复:{} 错误码:{}", String.format("0x%02X", cameraModeReplyCommand.getResult() & 0xFF), cameraModeReplyCommand.getErrorCode());
}
- 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 FlyWayEndReplyCmd) {
+ FlyWayEndReplyCmd flyWayEndReplyCmd = (FlyWayEndReplyCmd) tyCommand;
+ log.info("收到无人机飞行结束通知:状态:{}", flyWayEndReplyCmd.getResult());
+ }
+ 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());
+ }
+ //起飞回复
+ if (tyCommand instanceof TakeOffReplyCmd) {
+ TakeOffReplyCmd takeOffReplyCommand = (TakeOffReplyCmd) tyCommand;
+ log.info("收到无人机起飞回复:{} 错误码:{}", String.format("0x%02X", takeOffReplyCommand.getResult() & 0xFF), takeOffReplyCommand.getErrorCode());
+ }
+ //返航回复
+ if (tyCommand instanceof ReturnHomeReplyCmd) {
+ ReturnHomeReplyCmd returnHomeReplyCmd = (ReturnHomeReplyCmd) tyCommand;
+ log.info("收到无人机返航回复:{} 错误码:{}", String.format("0x%02X", returnHomeReplyCmd.getResult() & 0xFF), returnHomeReplyCmd.getErrorCode());
}
break;
default:
@@ -317,11 +425,14 @@
}
}
+ /**
+ * 定时3秒发送心跳指令
+ */
@Scheduled(fixedRate = 3000)
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