624 lines
32 KiB
Java
624 lines
32 KiB
Java
package com.aros.apron.base;
|
||
|
||
import static com.aros.apron.tools.Utils.getIDJIErrorMsg;
|
||
|
||
import android.os.Handler;
|
||
import android.os.Looper;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
|
||
import androidx.annotation.NonNull;
|
||
|
||
import com.aros.apron.constant.AMSConfig;
|
||
import com.aros.apron.constant.Constant;
|
||
import com.aros.apron.entity.CameraPhotoTakeProgress;
|
||
import com.aros.apron.entity.CurrentWayline;
|
||
import com.aros.apron.entity.FlightTaskProgress;
|
||
import com.aros.apron.entity.MediaUpLoad;
|
||
import com.aros.apron.entity.MessageDown;
|
||
import com.aros.apron.entity.MessageEvent;
|
||
import com.aros.apron.entity.MessageReply;
|
||
import com.aros.apron.entity.Movement;
|
||
import com.aros.apron.entity.TakeoffToPointProgress;
|
||
import com.aros.apron.entity.TaskFailEvent;
|
||
import com.aros.apron.entity.WirelessLink;
|
||
import com.aros.apron.tools.LogUtil;
|
||
import com.aros.apron.tools.MqttManager;
|
||
import com.aros.apron.tools.PreferenceUtils;
|
||
import com.google.gson.Gson;
|
||
|
||
import org.eclipse.paho.android.service.MqttAndroidClient;
|
||
import org.eclipse.paho.client.mqttv3.MqttMessage;
|
||
|
||
import java.util.List;
|
||
import java.util.Locale;
|
||
import java.util.UUID;
|
||
|
||
import dji.v5.common.callback.CommonCallbacks;
|
||
import dji.v5.common.error.IDJIError;
|
||
import dji.v5.manager.aircraft.waypoint3.WaypointMissionManager;
|
||
import dji.v5.manager.aircraft.waypoint3.model.BreakPointInfo;
|
||
|
||
public abstract class BaseManager {
|
||
|
||
public String TAG = getClass().getSimpleName();
|
||
|
||
/**
|
||
* 响应reply
|
||
* @param entity
|
||
*/
|
||
public void sendMsg2Server(MessageDown entity) {
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
MessageReply messageReply = new MessageReply();
|
||
messageReply.setBid(entity.getBid());
|
||
messageReply.setTid(entity.getTid());
|
||
messageReply.setTimestamp(entity.getTimestamp());
|
||
messageReply.setMethod(entity.getMethod());
|
||
MessageReply.Data data = new MessageReply.Data();
|
||
data.setResult(0);
|
||
messageReply.setData(data);
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(messageReply).getBytes("UTF-8"));
|
||
mqttMessage.setQos(1);
|
||
org.eclipse.paho.client.mqttv3.IMqttDeliveryToken token =
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_SERVICES_REPLY, mqttMessage);
|
||
LogUtil.log(TAG, "回复已提交, tid=" + entity.getTid() + ", msgId=" + token.getMessageId() + ", method=" + entity.getMethod());
|
||
} else {
|
||
LogUtil.log(TAG, "回复失败:mqtt 未连接, tid=" + entity.getTid());
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "回复异常:" + e.toString() + ", tid=" + entity.getTid());
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 响应replay+event
|
||
* @param entity
|
||
* @param errorMsg
|
||
*/
|
||
public void sendFailMsg2Server(MessageDown entity,String errorMsg) {
|
||
LogUtil.log(TAG,entity.getMethod()+":"+errorMsg);
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
MessageReply messageReply = new MessageReply();
|
||
messageReply.setBid(entity.getBid());
|
||
messageReply.setTid(entity.getTid());
|
||
messageReply.setTimestamp(entity.getTimestamp());
|
||
messageReply.setMethod(entity.getMethod());
|
||
MessageReply.Data data=new MessageReply.Data();
|
||
data.setResult(-1);
|
||
data.setErrorMsg(errorMsg);
|
||
messageReply.setData(data);
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(messageReply).getBytes("UTF-8"));
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_SERVICES_REPLY, mqttMessage);
|
||
|
||
// if (!entity.getMethod().equals(Constant.AIRCRAFT_ON)){
|
||
// //这里通过event事件上报执行动作失败
|
||
// mainHandler.postDelayed(new Runnable() {
|
||
// @Override
|
||
// public void run() {
|
||
// try {
|
||
// MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
// } catch (MqttException e) {
|
||
// throw new RuntimeException(e);
|
||
// }
|
||
//
|
||
// }
|
||
// },500);
|
||
// }
|
||
|
||
} else {
|
||
LogUtil.log(TAG, "回复失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "回复异常:" + e.toString());
|
||
}
|
||
}
|
||
|
||
|
||
public void publish(MqttAndroidClient client, String topic, MqttMessage message) {
|
||
try {
|
||
if (client.isConnected()) {
|
||
client.publish(topic, message);
|
||
} else {
|
||
LogUtil.log(TAG, "推送飞机状态失败:mqtt未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "推送飞机状态失败异常:" + topic + e.toString());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发送常规event事件
|
||
*/
|
||
public void sendEvent2Server(String msg,int level) {
|
||
//LogUtil.log(TAG,"发送常规事件:"+"run_log -"+msg);
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
MessageEvent messageEvent = new MessageEvent();
|
||
messageEvent.setBid(UUID.randomUUID().toString());
|
||
messageEvent.setTid(UUID.randomUUID().toString());
|
||
messageEvent.setTimestamp(System.currentTimeMillis());
|
||
messageEvent.setMethod("run_log");
|
||
MessageEvent.Data data=new MessageEvent.Data();
|
||
data.setMsg(msg);
|
||
data.setLevel(level);
|
||
if (TextUtils.isEmpty(PreferenceUtils.getInstance().getFlightId())){
|
||
data.setFlight_id("null");
|
||
}else{
|
||
data.setFlight_id(PreferenceUtils.getInstance().getFlightId());
|
||
}
|
||
messageEvent.setData(data);
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(messageEvent).getBytes("UTF-8"));
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
} else {
|
||
LogUtil.log(TAG, "发送run_log event失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "回复event异常:" + e.toString());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发送飞往备降点event事件
|
||
*/
|
||
public void sendFlyToAlternateLandPointEvent() {
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
MessageEvent messageEvent = new MessageEvent();
|
||
messageEvent.setBid(UUID.randomUUID().toString());
|
||
messageEvent.setTid(UUID.randomUUID().toString());
|
||
messageEvent.setTimestamp(System.currentTimeMillis());
|
||
messageEvent.setMethod(Constant.FLY_TO_ALTERNATE_LAND_POINT);
|
||
MessageEvent.Data data = new MessageEvent.Data();
|
||
if (TextUtils.isEmpty(PreferenceUtils.getInstance().getFlightId())) {
|
||
data.setFlight_id("null");
|
||
} else {
|
||
data.setFlight_id(PreferenceUtils.getInstance().getFlightId());
|
||
}
|
||
messageEvent.setData(data);
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(messageEvent).getBytes("UTF-8"));
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
LogUtil.log(TAG, "发送fly_to_alternate_land_point event成功:" + new Gson().toJson(messageEvent));
|
||
} else {
|
||
LogUtil.log(TAG, "发送fly_to_alternate_land_point event失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "发送fly_to_alternate_land_point event异常:" + e.toString());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发送媒体文件上传事件
|
||
*/
|
||
public void sendMediaUpload2Server(String fileName,int uploaded_file_count,int expected_file_count) {
|
||
//LogUtil.log(TAG,"发送媒体上传完成事件:"+fileName);
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
MediaUpLoad mediaUpLoad = new MediaUpLoad();
|
||
mediaUpLoad.setBid(UUID.randomUUID().toString());
|
||
mediaUpLoad.setTid(UUID.randomUUID().toString());
|
||
mediaUpLoad.setTimestamp(System.currentTimeMillis());
|
||
mediaUpLoad.setMethod(Constant.FILE_UPLOAD_CALLBACK);
|
||
MediaUpLoad.Data data=new MediaUpLoad.Data();
|
||
data.setBucket_name(PreferenceUtils.getInstance().getBucketName());
|
||
data.setObject_key(PreferenceUtils.getInstance().getObjectKey());
|
||
data.setFlight_id(PreferenceUtils.getInstance().getFlightId());
|
||
data.setFile_name(fileName);
|
||
data.setUploaded_file_count(uploaded_file_count);
|
||
data.setExpected_file_count(expected_file_count);
|
||
mediaUpLoad.setData(data);
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(mediaUpLoad).getBytes("UTF-8"));
|
||
mqttMessage.setQos(2);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
} else {
|
||
LogUtil.log(TAG, "发送媒体event失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "回复event异常:" + e.toString());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 上报航线任务进度
|
||
*/
|
||
public void sendFlightTaskProgress2Server() {
|
||
|
||
if( Movement.getInstance().getTask_media_count()!=0){
|
||
LogUtil.log(TAG ,"getTask_media_count"+Movement.getInstance().getTask_media_count());
|
||
}
|
||
LogUtil.log(TAG ,"QWQsendFlightTaskProgress2Server");
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
// 必须加 final,否则内部类(回调)里访问不了
|
||
final FlightTaskProgress.Data.Output.Ext ext = new FlightTaskProgress.Data.Output.Ext();
|
||
ext.setCurrent_waypoint_index(Movement.getInstance().getTask_current_waypoint_index());
|
||
ext.setFlight_id(PreferenceUtils.getInstance().getFlightId());
|
||
//媒体文件数量
|
||
ext.setMedia_count(Movement.getInstance().getTask_media_count());
|
||
ext.setTrack_id(Movement.getInstance().getTrack_id());
|
||
ext.setWayline_id(Movement.getInstance().getTask_wayline_id());
|
||
ext.setWayline_mission_state(Movement.getInstance().getTask_wayline_mission_state());
|
||
|
||
final FlightTaskProgress.Data.Output.Progress progress = new FlightTaskProgress.Data.Output.Progress();
|
||
|
||
// LogUtil.log(TAG,"CurrentWayline"+CurrentWayline.getInstance().getWaypoints()+"size"+CurrentWayline.getInstance().getWaypoints().size()
|
||
// +"getTask_wayline_mission_state"+Movement.getInstance().getTask_wayline_mission_state()+"percent"+(100 * (Movement.getInstance().getTask_current_waypoint_index() + 1)
|
||
// / CurrentWayline.getInstance().getWaypoints().size()));
|
||
|
||
|
||
if (CurrentWayline.getInstance().getWaypoints() != null
|
||
&& CurrentWayline.getInstance().getWaypoints().size() > 0
|
||
) {
|
||
//这个没执行到
|
||
progress.setPercent((100 * (Movement.getInstance().getTask_current_waypoint_index() + 1)
|
||
/ CurrentWayline.getInstance().getWaypoints().size()));
|
||
}
|
||
|
||
progress.setCurrent_step(Movement.getInstance().getTask_current_step());
|
||
|
||
if (Movement.getInstance().isMissionFinish1()) {
|
||
// 是结束状态 → 查完断点再发
|
||
WaypointMissionManager.getInstance().queryBreakPointInfoFromAircraft(
|
||
"aros", new CommonCallbacks.CompletionCallbackWithParam<BreakPointInfo>() {
|
||
|
||
@Override
|
||
public void onSuccess(BreakPointInfo breakPointInfo) {
|
||
// 在回调里 new output,确保 status 不被覆盖
|
||
FlightTaskProgress.Data.Output output = new FlightTaskProgress.Data.Output();
|
||
|
||
if (breakPointInfo != null) {
|
||
LogUtil.log(TAG, "查询断点成功:" + new Gson().toJson(breakPointInfo));
|
||
FlightTaskProgress.Data.Output.Ext.BreakPoint breakPoint =
|
||
new FlightTaskProgress.Data.Output.Ext.BreakPoint();
|
||
|
||
// 【修复】Attitude_head 可能是 99.2 这种浮点字符串
|
||
if (!TextUtils.isEmpty(PreferenceUtils.getInstance().getAttitudeHead())) {
|
||
try {
|
||
float headFloat = Float.parseFloat(PreferenceUtils.getInstance().getAttitudeHead());
|
||
breakPoint.setAttitude_head((int) headFloat);
|
||
} catch (NumberFormatException e) {
|
||
breakPoint.setAttitude_head(Movement.getInstance().getAttitude_head());
|
||
LogUtil.log(TAG, "AttitudeHead 格式错误:" + PreferenceUtils.getInstance().getAttitudeHead() + ",使用当前姿态");
|
||
}
|
||
} else {
|
||
breakPoint.setAttitude_head(Movement.getInstance().getAttitude_head());
|
||
}
|
||
|
||
breakPoint.setBreak_reason(Movement.getInstance().getTask_break_reason());
|
||
breakPoint.setHeight(breakPointInfo.getLocation().getAltitude());
|
||
|
||
// 【修复】WaypointIndex 也可能是浮点字符串(如 "5.0")
|
||
if (!TextUtils.isEmpty(PreferenceUtils.getInstance().getWaypointIndex())) {
|
||
try {
|
||
float indexFloat = Float.parseFloat(PreferenceUtils.getInstance().getWaypointIndex());
|
||
breakPoint.setIndex((int) indexFloat);
|
||
} catch (NumberFormatException e) {
|
||
breakPoint.setIndex(0);
|
||
LogUtil.log(TAG, "WaypointIndex 格式错误:" + PreferenceUtils.getInstance().getWaypointIndex() + ",默认0");
|
||
}
|
||
} else {
|
||
breakPoint.setIndex(0);
|
||
}
|
||
|
||
breakPoint.setLatitude(breakPointInfo.getLocation().getLatitude());
|
||
breakPoint.setLongitude(breakPointInfo.getLocation().getLongitude());
|
||
|
||
breakPoint.setProgress(Movement.getInstance().getTask_progress());
|
||
breakPoint.setState(Movement.getInstance().getState());
|
||
breakPoint.setWayline_id(Movement.getInstance().getTask_wayline_id());
|
||
|
||
ext.setBreak_point(breakPoint);
|
||
|
||
|
||
//如果飞备降点了
|
||
if(Movement.getInstance().isAlternate()){
|
||
output.setStatus("failed");
|
||
}else{
|
||
output.setStatus("partially_done");
|
||
}
|
||
|
||
} else {
|
||
//如果飞备降点了
|
||
if(Movement.getInstance().isAlternate()){
|
||
output.setStatus("failed");
|
||
}else{
|
||
output.setStatus("ok");
|
||
}
|
||
|
||
LogUtil.log(TAG, "未查询到断点信息");
|
||
}
|
||
|
||
// 发送逻辑放在这里
|
||
output.setExt(ext);
|
||
output.setProgress(progress);
|
||
|
||
FlightTaskProgress.Data data = new FlightTaskProgress.Data();
|
||
data.setResult(Movement.getInstance().getResult());
|
||
data.setOutput(output);
|
||
|
||
FlightTaskProgress flightTaskProgress = new FlightTaskProgress();
|
||
flightTaskProgress.setTid(UUID.randomUUID().toString());
|
||
flightTaskProgress.setBid(UUID.randomUUID().toString());
|
||
flightTaskProgress.setTimestamp(System.currentTimeMillis());
|
||
flightTaskProgress.setMethod(Constant.FLIGHT_TASK_PROGRESS);
|
||
flightTaskProgress.setData(data);
|
||
|
||
try {
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(flightTaskProgress).getBytes("UTF-8"));
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
LogUtil.log(TAG, "发送任务进度事件(断点回调):" + new Gson().toJson(flightTaskProgress));
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "发送任务进度event异常(回调内):" + e.toString());
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onFailure(@NonNull IDJIError idjiError) {
|
||
// 查询失败也要发,status=ok
|
||
FlightTaskProgress.Data.Output output = new FlightTaskProgress.Data.Output();
|
||
//如果飞备降点了
|
||
if(Movement.getInstance().isAlternate()){
|
||
output.setStatus("failed");
|
||
}else{
|
||
output.setStatus("ok");
|
||
}
|
||
output.setExt(ext);
|
||
output.setProgress(progress);
|
||
|
||
FlightTaskProgress.Data data = new FlightTaskProgress.Data();
|
||
data.setResult(Movement.getInstance().getResult());
|
||
data.setOutput(output);
|
||
|
||
FlightTaskProgress flightTaskProgress = new FlightTaskProgress();
|
||
flightTaskProgress.setTid(UUID.randomUUID().toString());
|
||
flightTaskProgress.setBid(UUID.randomUUID().toString());
|
||
flightTaskProgress.setTimestamp(System.currentTimeMillis());
|
||
flightTaskProgress.setMethod(Constant.FLIGHT_TASK_PROGRESS);
|
||
flightTaskProgress.setData(data);
|
||
|
||
|
||
|
||
|
||
|
||
try {
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(flightTaskProgress).getBytes("UTF-8"));
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
LogUtil.log(TAG, "发送任务进度事件(断点查询失败):" + new Gson().toJson(flightTaskProgress));
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "发送任务进度event异常(onFailure):" + e.toString());
|
||
}
|
||
}
|
||
});
|
||
|
||
|
||
} else {
|
||
// 不是结束状态 → 立即发
|
||
FlightTaskProgress.Data.Output output = new FlightTaskProgress.Data.Output();
|
||
output.setStatus(Movement.getInstance().getTask_status());
|
||
output.setExt(ext);
|
||
output.setProgress(progress);
|
||
|
||
FlightTaskProgress.Data data = new FlightTaskProgress.Data();
|
||
data.setResult(0);
|
||
data.setOutput(output);
|
||
|
||
FlightTaskProgress flightTaskProgress = new FlightTaskProgress();
|
||
flightTaskProgress.setTid(UUID.randomUUID().toString());
|
||
flightTaskProgress.setBid(UUID.randomUUID().toString());
|
||
flightTaskProgress.setTimestamp(System.currentTimeMillis());
|
||
flightTaskProgress.setMethod(Constant.FLIGHT_TASK_PROGRESS);
|
||
flightTaskProgress.setData(data);
|
||
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(flightTaskProgress).getBytes("UTF-8"));
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
//LogUtil.log(TAG, "发送任务进度事件(正常状态):" + new Gson().toJson(flightTaskProgress));
|
||
}
|
||
} else {
|
||
LogUtil.log(TAG, "发送任务进度event失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "发送任务进度event异常:" + e.toString());
|
||
}
|
||
}
|
||
|
||
|
||
//计划在航线状态为finish时,查询断点并上报
|
||
public void queryBreakPoint() {
|
||
WaypointMissionManager.getInstance().queryBreakPointInfoFromAircraft("aros",
|
||
new CommonCallbacks.CompletionCallbackWithParam<BreakPointInfo>() {
|
||
@Override
|
||
public void onSuccess(BreakPointInfo breakPointInfo) {
|
||
if (breakPointInfo != null) {
|
||
LogUtil.log(TAG, "查询断点成功:" + new Gson().toJson(breakPointInfo));
|
||
Movement.getInstance().setTask_attitude_head(Movement.getInstance().getAttitude_head());
|
||
//Movement.getInstance().setTask_break_reason(2);
|
||
Movement.getInstance().setTask_index(Movement.getInstance().getTask_current_waypoint_index());
|
||
Movement.getInstance().setHeight(breakPointInfo.getLocation().getAltitude());
|
||
Movement.getInstance().setTask_latitude(breakPointInfo.getLocation().getLatitude());
|
||
Movement.getInstance().setTask_longitude(breakPointInfo.getLocation().getLongitude());
|
||
|
||
Movement.getInstance().setTask_progress(breakPointInfo.getSegmentProgress());
|
||
Movement.getInstance().setTask_state(0);
|
||
Movement.getInstance().setTask_wayline_id(breakPointInfo.getWaylineID());
|
||
} else {
|
||
LogUtil.log(TAG, "未查询到断点信息");
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onFailure(@NonNull IDJIError idjiError) {
|
||
LogUtil.log(TAG, "查询断点失败:" + getIDJIErrorMsg(idjiError));
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 上报sdr
|
||
*/
|
||
public void sendWireless2Server() {
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
WirelessLink wirelessLink=new WirelessLink();
|
||
WirelessLink.Data data=new WirelessLink.Data();
|
||
data.setDongle_number(Movement.getInstance().getDongle_number());
|
||
data.setLink_state_4g(Movement.getInstance().getLink_state_4g());
|
||
data.setSdr_link_state(Movement.getInstance().getSdr_link_state());
|
||
data.setLink_workmode(Movement.getInstance().getLink_workmode());
|
||
data.setSdr_quality(Movement.getInstance().getSdr_quality());
|
||
data.setQuality_4g(Movement.getInstance().getQuality_4g());
|
||
data.setUav_quality_4g(Movement.getInstance().getUav_quality_4g());
|
||
data.setGnd_quality_4g(Movement.getInstance().getGnd_quality_4g());
|
||
data.setSdr_freq_band(Movement.getInstance().getSdr_freq_band());
|
||
data.setFreq_band_4g(Movement.getInstance().getFreq_band_4g());
|
||
|
||
wirelessLink.setTid(UUID.randomUUID().toString());
|
||
wirelessLink.setBid(UUID.randomUUID().toString());
|
||
wirelessLink.setTimestamp(System.currentTimeMillis());
|
||
wirelessLink.setMethod(Constant.WIRELESS_LINK);
|
||
wirelessLink.setData(data);
|
||
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(wirelessLink).getBytes("UTF-8"));
|
||
|
||
mqttMessage.setQos(0);
|
||
|
||
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
// LogUtil.log(TAG,"发送sdr事件:"+new Gson().toJson(wirelessLink));
|
||
|
||
} else {
|
||
LogUtil.log(TAG, "发送sdr失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "发送sdr异常:" + e.toString());
|
||
}
|
||
}
|
||
// /**
|
||
// * 上报一键起飞任务进度
|
||
// */
|
||
// public void sendTakeoffToPointProgress2Server() {
|
||
// try {
|
||
// if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
// // 构建 data 数据
|
||
// TakeoffToPointProgress.Data data = new TakeoffToPointProgress.Data();
|
||
// data.setFlightId(PreferenceUtils.getInstance().getFlightId());
|
||
// data.setTrackId(PreferenceUtils.getInstance().getFlightId());
|
||
// data.setStatus(Movement.getInstance().getTakeoff_status());
|
||
// data.setResult(Movement.getInstance().getTakeoff_result());
|
||
// data.setWayPointIndex(Movement.getInstance().getCurrentWaypointIndex());
|
||
// data.setRemainingDistance(Movement.getInstance().getTakeoff_remaining_distance());
|
||
// data.setRemainingTime(Movement.getInstance().getTakeoff_remaining_time());
|
||
// data.setPlannedPathPoints(Movement.getInstance().getTakeoff_planned_path_points());
|
||
//
|
||
// // 构建事件对象
|
||
// TakeoffToPointProgress progress = new TakeoffToPointProgress();
|
||
// progress.setBid(UUID.randomUUID().toString());
|
||
// progress.setTid(UUID.randomUUID().toString());
|
||
// progress.setTimestamp(System.currentTimeMillis());
|
||
// progress.setMethod("takeoff_to_point_progress");
|
||
// progress.setNeedReply(1);
|
||
// progress.setData(data);
|
||
//
|
||
// // 发送
|
||
// MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(progress).getBytes("UTF-8"));
|
||
// mqttMessage.setQos(0);
|
||
// MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
|
||
//
|
||
// LogUtil.log(TAG, "发送一键起飞进度事件:" + new Gson().toJson(progress));
|
||
//
|
||
// } else {
|
||
// LogUtil.log(TAG, "发送一键起飞进度event失败:mqtt 未连接");
|
||
// }
|
||
// } catch (Exception e) {
|
||
// e.printStackTrace();
|
||
// LogUtil.log(TAG, "发送一键起飞进度event异常:" + e.toString());
|
||
// }
|
||
// }
|
||
|
||
/**
|
||
* 上报拍照进度(camera_photo_take_progress)
|
||
* 目前仅支持:全景拍照模式
|
||
* 数据先存 Movement,再组装发送
|
||
*/
|
||
public void sendCameraPhotoTakeProgress2Server() {
|
||
try {
|
||
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
|
||
|
||
// 构建 output.progress
|
||
CameraPhotoTakeProgress.Data.Output.Progress progress =
|
||
new CameraPhotoTakeProgress.Data.Output.Progress();
|
||
progress.setCurrent_step(Movement.getInstance().getPhoto_current_step());
|
||
progress.setPercent(Movement.getInstance().getPhoto_percent());
|
||
|
||
// 构建 output.ext
|
||
CameraPhotoTakeProgress.Data.Output.Ext ext =
|
||
new CameraPhotoTakeProgress.Data.Output.Ext();
|
||
ext.setCamera_mode(3);
|
||
|
||
// 构建 output
|
||
CameraPhotoTakeProgress.Data.Output output =
|
||
new CameraPhotoTakeProgress.Data.Output();
|
||
output.setStatus(Movement.getInstance().getPhoto_status());
|
||
output.setProgress(progress);
|
||
output.setExt(ext);
|
||
|
||
// 构建 data
|
||
CameraPhotoTakeProgress.Data data = new CameraPhotoTakeProgress.Data();
|
||
data.setResult(Movement.getInstance().getPhoto_result());
|
||
data.setOutput(output);
|
||
|
||
// 构建完整消息
|
||
CameraPhotoTakeProgress photoProgress = new CameraPhotoTakeProgress();
|
||
photoProgress.setBid(UUID.randomUUID().toString());
|
||
photoProgress.setTid(UUID.randomUUID().toString());
|
||
photoProgress.setTimestamp(System.currentTimeMillis());
|
||
photoProgress.setMethod("camera_photo_take_progress");
|
||
photoProgress.setData(data);
|
||
|
||
// 发送
|
||
MqttMessage mqttMessage = new MqttMessage(
|
||
new Gson().toJson(photoProgress).getBytes("UTF-8")
|
||
);
|
||
mqttMessage.setQos(0);
|
||
MqttManager.getInstance().mqttAndroidClient.publish(
|
||
AMSConfig.UP_UAV_EVENT,
|
||
mqttMessage
|
||
);
|
||
LogUtil.log(TAG, "发送拍照进度事件:" + new Gson().toJson(photoProgress));
|
||
} else {
|
||
LogUtil.log(TAG, "发送拍照进度失败:mqtt 未连接");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
LogUtil.log(TAG, "发送拍照进度异常:" + e.toString());
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
public boolean getGimbalAndCameraEnabled() {
|
||
if (!PreferenceUtils.getInstance().getNeedTriggerApronArucoLand() && !PreferenceUtils.getInstance().getNeedTriggerAlterArucoLand() && Movement.getInstance().getGoHomeState() != 2) {
|
||
return true;
|
||
} else {
|
||
LogUtil.log(TAG, "降落时不允许操作云台/相机/虚拟摇杆");
|
||
return false;
|
||
}
|
||
}
|
||
}
|