makcar/app/src/main/java/com/aros/apron/base/BaseManager.java

562 lines
28 KiB
Java
Raw Normal View History

2026-01-30 11:47:32 +08:00
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;
2026-02-10 20:46:40 +08:00
import android.util.Log;
2026-01-30 11:47:32 +08:00
import androidx.annotation.NonNull;
import com.aros.apron.constant.AMSConfig;
import com.aros.apron.constant.Constant;
2026-02-10 20:46:40 +08:00
import com.aros.apron.entity.CameraPhotoTakeProgress;
2026-01-30 11:47:32 +08:00
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;
2026-02-10 20:46:40 +08:00
import com.aros.apron.entity.TakeoffToPointProgress;
2026-01-30 11:47:32 +08:00
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;
2026-02-10 20:46:40 +08:00
import java.util.Locale;
2026-01-30 11:47:32 +08:00
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(0);
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_SERVICES_REPLY, mqttMessage);
} else {
LogUtil.log(TAG, "回复失败mqtt 未连接");
}
} catch (Exception e) {
e.printStackTrace();
LogUtil.log(TAG, "回复异常:" + e.toString());
}
}
final Handler mainHandler = new Handler(Looper.getMainLooper());
/**
* 响应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) {
2026-02-10 20:46:40 +08:00
//LogUtil.log(TAG,"发送常规事件:"+"run_log -"+msg);
2026-01-30 11:47:32 +08:00
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());
}
}
/**
* 发送媒体文件上传事件
*/
public void sendMediaUpload2Server(String fileName,int uploaded_file_count,int expected_file_count) {
2026-02-10 20:46:40 +08:00
//LogUtil.log(TAG,"发送媒体上传完成事件:"+fileName);
2026-01-30 11:47:32 +08:00
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() {
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());
2026-02-10 20:46:40 +08:00
//媒体文件数量
2026-01-30 11:47:32 +08:00
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();
2026-02-10 20:46:40 +08:00
// LogUtil.log(TAG,"CurrentWayline"+CurrentWayline.getInstance().getWaypoints()+"size"+CurrentWayline.getInstance().getWaypoints().size()
// +"getTask_wayline_mission_state"+Movement.getInstance().getTask_wayline_mission_state());
2026-01-30 11:47:32 +08:00
if (CurrentWayline.getInstance().getWaypoints() != null
&& CurrentWayline.getInstance().getWaypoints().size() > 0
&& Movement.getInstance().getTask_wayline_mission_state() == 6) {
2026-02-10 20:46:40 +08:00
//这个没执行到
2026-01-30 11:47:32 +08:00
progress.setPercent((100 * (Movement.getInstance().getCurrentWaypointIndex() + 1)
/ CurrentWayline.getInstance().getWaypoints().size()));
2026-02-10 20:46:40 +08:00
2026-01-30 11:47:32 +08:00
}
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());
2026-02-10 20:46:40 +08:00
2026-01-30 11:47:32 +08:00
breakPoint.setProgress(Movement.getInstance().getTask_progress());
breakPoint.setState(Movement.getInstance().getState());
breakPoint.setWayline_id(Movement.getInstance().getTask_wayline_id());
ext.setBreak_point(breakPoint);
output.setStatus("partially_done");
} else {
output.setStatus("ok");
LogUtil.log(TAG, "未查询到断点信息");
}
// 发送逻辑放在这里
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);
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();
output.setStatus("ok");
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);
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);
2026-02-10 20:46:40 +08:00
//LogUtil.log(TAG, "发送任务进度事件(正常状态):" + new Gson().toJson(flightTaskProgress));
2026-01-30 11:47:32 +08:00
}
} 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());
2026-02-10 20:46:40 +08:00
2026-01-30 11:47:32 +08:00
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());
}
}
2026-02-10 20:46:40 +08:00
/**
* 上报一键起飞任务进度
*/
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());
}
}
2026-01-30 11:47:32 +08:00
public boolean getGimbalAndCameraEnabled() {
if (!PreferenceUtils.getInstance().getNeedTriggerApronArucoLand() && !PreferenceUtils.getInstance().getNeedTriggerAlterArucoLand() && Movement.getInstance().getGoHomeState() != 1 && Movement.getInstance().getGoHomeState() != 2) {
return true;
} else {
LogUtil.log(TAG, "降落时不允许操作云台/相机/虚拟摇杆");
return false;
}
}
}