2026-01-30 11:47:32 +08:00
|
|
|
package com.aros.apron.manager;
|
|
|
|
|
|
|
|
|
|
import static com.aros.apron.tools.Utils.getIDJIErrorMsg;
|
|
|
|
|
import static dji.sdk.keyvalue.key.KeyTools.createKey;
|
|
|
|
|
|
|
|
|
|
import android.os.Handler;
|
|
|
|
|
import android.os.Looper;
|
|
|
|
|
import android.os.SystemClock;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
|
|
|
|
|
|
import com.aros.apron.base.BaseManager;
|
|
|
|
|
import com.aros.apron.constant.AMSConfig;
|
|
|
|
|
import com.aros.apron.entity.Movement;
|
|
|
|
|
import com.aros.apron.entity.Osd;
|
|
|
|
|
import com.aros.apron.tools.LogUtil;
|
|
|
|
|
import com.aros.apron.tools.MqttManager;
|
2026-03-12 14:57:34 +08:00
|
|
|
import com.aros.apron.tools.TakeoffProgressScheduler;
|
2026-01-30 11:47:32 +08:00
|
|
|
import com.google.gson.Gson;
|
|
|
|
|
import com.google.gson.GsonBuilder;
|
|
|
|
|
|
|
|
|
|
import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
|
|
|
|
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
import dji.sdk.keyvalue.key.FlightControllerKey;
|
|
|
|
|
import dji.v5.common.callback.CommonCallbacks;
|
|
|
|
|
import dji.v5.common.error.IDJIError;
|
|
|
|
|
import dji.v5.manager.KeyManager;
|
|
|
|
|
import dji.v5.manager.aircraft.waypoint3.WaypointMissionManager;
|
|
|
|
|
import dji.v5.manager.aircraft.waypoint3.model.BreakPointInfo;
|
|
|
|
|
|
|
|
|
|
public class OSDManager extends BaseManager {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final long INTERVAL = 1000L;
|
|
|
|
|
private final Handler handler = new Handler(Looper.getMainLooper());
|
|
|
|
|
Osd.Data._$5300 _5300 = new Osd.Data._$5300();
|
|
|
|
|
Osd.Data data = new Osd.Data();
|
|
|
|
|
Osd.Data.Battery battery = new Osd.Data.Battery();
|
|
|
|
|
List<Osd.Data.Battery.Batteries> batteries = new ArrayList<>();
|
|
|
|
|
Osd.Data.Battery.Batteries batterieA = new Osd.Data.Battery.Batteries();
|
|
|
|
|
Osd.Data.Battery.Batteries batterieB = new Osd.Data.Battery.Batteries();
|
|
|
|
|
List<Osd.Data.Cameras> cameras = new ArrayList<>();
|
|
|
|
|
Osd.Data.Cameras cameraA = new Osd.Data.Cameras();
|
|
|
|
|
Osd.Data.Cameras.IrMeteringPoint irMeteringPoint = new Osd.Data.Cameras.IrMeteringPoint();
|
|
|
|
|
Osd.Data.DistanceLimitStatus distanceLimitStatus = new Osd.Data.DistanceLimitStatus();
|
|
|
|
|
Osd.Data.ObstacleAvoidance obstacleAvoidance = new Osd.Data.ObstacleAvoidance();
|
|
|
|
|
Osd.Data.PositionState positionState = new Osd.Data.PositionState();
|
|
|
|
|
Osd.Data.Storage storage = new Osd.Data.Storage();
|
|
|
|
|
Osd osd = Osd.getInstance();
|
|
|
|
|
// 使用GsonBuilder配置Gson实例以允许序列化特殊浮点数值
|
|
|
|
|
Gson gson = new GsonBuilder()
|
|
|
|
|
.serializeSpecialFloatingPointValues() // 这是关键
|
|
|
|
|
.create();
|
|
|
|
|
private long lastExecuteTime = 0L;
|
|
|
|
|
private final Runnable runnable = new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
long now = SystemClock.elapsedRealtime();
|
|
|
|
|
|
|
|
|
|
if (now - lastExecuteTime < INTERVAL) {
|
|
|
|
|
handler.postDelayed(this, INTERVAL - (now - lastExecuteTime));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
lastExecuteTime = now;
|
2026-04-29 15:44:05 +08:00
|
|
|
Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyAirSenseSystemConnected));
|
2026-02-10 20:46:40 +08:00
|
|
|
if (!Movement.getInstance().isMissionFinish()) {
|
|
|
|
|
if (isConnect != null && isConnect) {
|
|
|
|
|
pushFlightAttitude();
|
|
|
|
|
} else {
|
2026-03-12 14:57:34 +08:00
|
|
|
LogUtil.log(TAG, "osd stop1:flight controller is null");
|
2026-02-10 20:46:40 +08:00
|
|
|
}
|
|
|
|
|
} else {
|
2026-03-12 14:57:34 +08:00
|
|
|
LogUtil.log(TAG, "osd stop2:flight controller is null");
|
2026-01-30 11:47:32 +08:00
|
|
|
}
|
|
|
|
|
// 始终基于“实际执行时间”来调度
|
|
|
|
|
handler.postDelayed(this, INTERVAL);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private OSDManager() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static OSDManager getInstance() {
|
|
|
|
|
return OSDHolder.INSTANCE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void initOsd() {
|
|
|
|
|
Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
|
|
|
|
|
if (isConnect != null && isConnect) {
|
|
|
|
|
handler.postDelayed(runnable, INTERVAL);
|
|
|
|
|
} else {
|
|
|
|
|
LogUtil.log(TAG, "初始化飞控osd失败" + "flight controller is null");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void pushFlightAttitude() {
|
|
|
|
|
try {
|
|
|
|
|
if (batteries != null && batteries.size() > 0) {
|
|
|
|
|
batteries.clear();
|
|
|
|
|
}
|
|
|
|
|
if (cameras != null && cameras.size() > 0) {
|
|
|
|
|
cameras.clear();
|
|
|
|
|
}
|
|
|
|
|
//相机固件?
|
|
|
|
|
_5300.setGimbal_yaw(Movement.getInstance().getGimbal_yaw());
|
|
|
|
|
_5300.setGimbal_roll(Movement.getInstance().getGimbal_roll());
|
|
|
|
|
_5300.setGimbal_pitch(Movement.getInstance().getGimbal_pitch());
|
|
|
|
|
_5300.setMeasure_target_altitude(Movement.getInstance().getMeasure_target_altitude());
|
|
|
|
|
_5300.setMeasure_target_distance(Movement.getInstance().getMeasure_target_distance());
|
|
|
|
|
_5300.setMeasure_target_error_state(Movement.getInstance().getMeasure_target_error_state());
|
|
|
|
|
|
|
|
|
|
_5300.setMeasure_target_latitude(Movement.getInstance().getMeasure_target_latitude());
|
|
|
|
|
_5300.setMeasure_target_longitude(Movement.getInstance().getMeasure_target_longitude());
|
|
|
|
|
_5300.setPayload_index("53-0-0");
|
|
|
|
|
_5300.setThermal_current_palette_style(Movement.getInstance().getThermal_current_palette_style());
|
|
|
|
|
_5300.setThermal_gain_mode(Movement.getInstance().getThermal_gain_mode());
|
|
|
|
|
_5300.setThermal_global_temperature_max(Movement.getInstance().getThermal_global_temperature_max());
|
|
|
|
|
_5300.setThermal_global_temperature_min(Movement.getInstance().getThermal_global_temperature_min());
|
|
|
|
|
_5300.setThermal_isotherm_lower_limit(Movement.getInstance().getThermal_isotherm_lower_limit());
|
|
|
|
|
_5300.setThermal_isotherm_state(Movement.getInstance().getThermal_isotherm_state());
|
|
|
|
|
_5300.setThermal_isotherm_upper_limit(Movement.getInstance().getThermal_isotherm_upper_limit());
|
|
|
|
|
_5300.setVersion(1);
|
|
|
|
|
data.set_$5300(_5300);
|
|
|
|
|
data.setActivation_time(1);
|
|
|
|
|
data.setAttitude_head(Movement.getInstance().getAttitude_head());
|
|
|
|
|
data.setAttitude_pitch(Movement.getInstance().getAttitude_pitch());
|
|
|
|
|
data.setAttitude_roll(Movement.getInstance().getAttitude_roll());
|
|
|
|
|
|
|
|
|
|
batterieA.setCapacity_percent(Movement.getInstance().getBattery_a_capacity_percent());
|
|
|
|
|
batterieA.setFirmware_version(Movement.getInstance().getBattery_a_battery_firmware_version());
|
|
|
|
|
batterieA.setHigh_voltage_storage_days(Movement.getInstance().getBattery_a_high_voltage_storage_days());
|
|
|
|
|
batterieA.setIndex(0);
|
|
|
|
|
batterieA.setLoop_times(Movement.getInstance().getBattery_a_loop_times());
|
|
|
|
|
batterieA.setSn(Movement.getInstance().getBattery_a_battery_sn());
|
|
|
|
|
batterieA.setSub_type(Movement.getInstance().getBattery_a_sub_type());
|
|
|
|
|
batterieA.setType(Movement.getInstance().getBattery_a_type());
|
|
|
|
|
batterieA.setTemperature(Movement.getInstance().getBattery_a_temperature());
|
|
|
|
|
batterieA.setSub_type(Movement.getInstance().getBattery_a_sub_type());
|
|
|
|
|
batterieA.setVoltage(Movement.getInstance().getBattery_a_voltage());
|
|
|
|
|
if (Movement.getInstance().getBattery_b_capacity_percent() == 0) {
|
|
|
|
|
batterieB.setCapacity_percent(Movement.getInstance().getBattery_a_capacity_percent());
|
|
|
|
|
batterieB.setFirmware_version(Movement.getInstance().getBattery_a_battery_firmware_version());
|
|
|
|
|
batterieB.setHigh_voltage_storage_days(Movement.getInstance().getBattery_a_high_voltage_storage_days());
|
|
|
|
|
batterieB.setIndex(1);
|
|
|
|
|
batterieB.setLoop_times(Movement.getInstance().getBattery_a_loop_times());
|
|
|
|
|
batterieB.setSn(Movement.getInstance().getBattery_a_battery_sn());
|
|
|
|
|
batterieB.setSub_type(Movement.getInstance().getBattery_a_sub_type());
|
|
|
|
|
batterieB.setType(Movement.getInstance().getBattery_a_type());
|
|
|
|
|
batterieB.setTemperature(Movement.getInstance().getBattery_a_temperature());
|
|
|
|
|
batterieB.setSub_type(Movement.getInstance().getBattery_a_sub_type());
|
|
|
|
|
batterieB.setVoltage(Movement.getInstance().getBattery_a_voltage());
|
|
|
|
|
} else {
|
|
|
|
|
batterieB.setCapacity_percent(Movement.getInstance().getBattery_b_capacity_percent());
|
|
|
|
|
batterieB.setFirmware_version(Movement.getInstance().getBattery_b_battery_firmware_version());
|
|
|
|
|
batterieB.setHigh_voltage_storage_days(Movement.getInstance().getBattery_b_high_voltage_storage_days());
|
|
|
|
|
batterieB.setIndex(1);
|
|
|
|
|
batterieB.setLoop_times(Movement.getInstance().getBattery_b_loop_times());
|
|
|
|
|
batterieB.setSn(Movement.getInstance().getBattery_b_battery_sn());
|
|
|
|
|
batterieB.setSub_type(Movement.getInstance().getBattery_b_sub_type());
|
|
|
|
|
batterieB.setType(Movement.getInstance().getBattery_b_type());
|
|
|
|
|
batterieB.setTemperature(Movement.getInstance().getBattery_b_temperature());
|
|
|
|
|
batterieB.setSub_type(Movement.getInstance().getBattery_b_sub_type());
|
|
|
|
|
batterieB.setVoltage(Movement.getInstance().getBattery_b_voltage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
batteries.add(batterieA);
|
|
|
|
|
batteries.add(batterieB);
|
|
|
|
|
battery.setBatteries(batteries);
|
|
|
|
|
battery.setCapacity_percent(Movement.getInstance().getCapacity_percent());
|
|
|
|
|
battery.setLanding_power(Movement.getInstance().getLanding_power());
|
|
|
|
|
battery.setRemain_flight_time(Movement.getInstance().getRemain_flight_time());
|
|
|
|
|
battery.setReturn_home_power(Movement.getInstance().getReturn_home_power());
|
|
|
|
|
data.setBattery(battery);
|
|
|
|
|
|
|
|
|
|
cameraA.setCamera_mode(Movement.getInstance().getCamera_mode());
|
|
|
|
|
cameraA.setIr_metering_mode(Movement.getInstance().getIr_metering_mode());
|
|
|
|
|
cameraA.setCamera_mode(Movement.getInstance().getCamera_mode());
|
|
|
|
|
irMeteringPoint.setTemperature(Movement.getInstance().getTemperature());
|
|
|
|
|
irMeteringPoint.setX(Movement.getInstance().getX());
|
|
|
|
|
irMeteringPoint.setY(Movement.getInstance().getY());
|
|
|
|
|
cameraA.setIr_metering_point(irMeteringPoint);
|
2026-05-20 10:15:41 +08:00
|
|
|
Osd.Data.Cameras.IrMeteringArea irMeteringArea = new Osd.Data.Cameras.IrMeteringArea();
|
|
|
|
|
irMeteringArea.setX(0);
|
|
|
|
|
irMeteringArea.setY(0);
|
|
|
|
|
irMeteringArea.setWidth(0);
|
|
|
|
|
irMeteringArea.setHeight(0);
|
|
|
|
|
irMeteringArea.setAver_temperature(0);
|
|
|
|
|
Osd.Data.Cameras.IrTemperaturePoint irMinTemp = new Osd.Data.Cameras.IrTemperaturePoint();
|
|
|
|
|
irMinTemp.setX(0);
|
|
|
|
|
irMinTemp.setY(0);
|
|
|
|
|
irMinTemp.setTemperature(0);
|
|
|
|
|
irMeteringArea.setMin_temperature_point(irMinTemp);
|
|
|
|
|
Osd.Data.Cameras.IrTemperaturePoint irMaxTemp = new Osd.Data.Cameras.IrTemperaturePoint();
|
|
|
|
|
irMaxTemp.setX(0);
|
|
|
|
|
irMaxTemp.setY(0);
|
|
|
|
|
irMaxTemp.setTemperature(0);
|
|
|
|
|
irMeteringArea.setMax_temperature_point(irMaxTemp);
|
|
|
|
|
cameraA.setIr_metering_area(irMeteringArea);
|
2026-01-30 11:47:32 +08:00
|
|
|
cameraA.setIr_zoom_factor(Movement.getInstance().getIr_zoom_factor());
|
|
|
|
|
cameraA.setPayload_index("53-0-0");
|
|
|
|
|
cameraA.setPhoto_state(Movement.getInstance().getPhoto_state());
|
|
|
|
|
cameraA.setPhoto_storage_settings(Movement.getInstance().getPhoto_storage_settings());
|
|
|
|
|
cameraA.setRecord_time(Movement.getInstance().getRecord_time());
|
|
|
|
|
cameraA.setRecording_state(Movement.getInstance().getRecording_state());
|
|
|
|
|
cameraA.setRemain_photo_num(Movement.getInstance().getRemain_photo_num());
|
|
|
|
|
cameraA.setRemain_record_duration(Movement.getInstance().getRemain_record_duration());
|
|
|
|
|
cameraA.setScreen_split_enable(Movement.getInstance().isScreen_split_enable());
|
|
|
|
|
cameraA.setWide_exposure_mode(Movement.getInstance().getWide_exposure_mode());
|
|
|
|
|
cameraA.setWide_exposure_value(Movement.getInstance().getWide_exposure_value());
|
|
|
|
|
cameraA.setWide_iso(Movement.getInstance().getWide_iso());
|
|
|
|
|
cameraA.setWide_shutter_speed(Movement.getInstance().getWide_shutter_speed());
|
|
|
|
|
cameraA.setZoom_calibrate_farthest_focus_value(Movement.getInstance().getZoom_calibrate_farthest_focus_value());
|
|
|
|
|
cameraA.setZoom_calibrate_nearest_focus_value(Movement.getInstance().getZoom_calibrate_nearest_focus_value());
|
|
|
|
|
cameraA.setZoom_exposure_mode(Movement.getInstance().getZoom_exposure_mode());
|
|
|
|
|
cameraA.setZoom_exposure_value(Movement.getInstance().getZoom_exposure_value());
|
|
|
|
|
cameraA.setZoom_factor(Movement.getInstance().getZoom_factor());
|
|
|
|
|
cameraA.setZoom_focus_mode(Movement.getInstance().getZoom_focus_mode());
|
|
|
|
|
cameraA.setZoom_focus_state(Movement.getInstance().getZoom_focus_state());
|
|
|
|
|
cameraA.setZoom_focus_value(Movement.getInstance().getZoom_focus_value());
|
|
|
|
|
cameraA.setZoom_iso(Movement.getInstance().getZoom_iso());
|
|
|
|
|
cameraA.setZoom_max_focus_value(Movement.getInstance().getZoom_max_focus_value());
|
|
|
|
|
cameraA.setZoom_min_focus_value(Movement.getInstance().getZoom_min_focus_value());
|
|
|
|
|
cameraA.setZoom_shutter_speed(Movement.getInstance().getZoom_shutter_speed());
|
|
|
|
|
cameras.add(cameraA);
|
|
|
|
|
data.setCameras(cameras);
|
|
|
|
|
|
|
|
|
|
data.setCountry("CN");
|
|
|
|
|
distanceLimitStatus.setDistance_limit(Movement.getInstance().getDistance_limit());
|
|
|
|
|
distanceLimitStatus.setIs_near_distance_limit(Movement.getInstance().getIs_near_distance_limit());
|
|
|
|
|
distanceLimitStatus.setState(Movement.getInstance().getState());
|
|
|
|
|
data.setDistance_limit_status(distanceLimitStatus);
|
|
|
|
|
|
|
|
|
|
data.setElevation(Movement.getInstance().getElevation());
|
|
|
|
|
data.setFirmware_version(Movement.getInstance().getFirmware_version());
|
|
|
|
|
data.setGear(Movement.getInstance().getGear());
|
|
|
|
|
data.setHeight(Movement.getInstance().getHeight());
|
|
|
|
|
data.setHeight_limit(Movement.getInstance().getHeight_limit());
|
|
|
|
|
data.setHome_distance(Movement.getInstance().getHome_distance());
|
|
|
|
|
data.setHorizontal_speed(Movement.getInstance().getHorizontal_speed());
|
|
|
|
|
data.setIs_near_area_limit(Movement.getInstance().getIs_near_area_limit());
|
|
|
|
|
data.setIs_near_height_limit(Movement.getInstance().getIs_near_height_limit());
|
|
|
|
|
data.setLatitude(Movement.getInstance().getLatitude());
|
|
|
|
|
data.setLongitude(Movement.getInstance().getLongitude());
|
|
|
|
|
data.setMode_code(Movement.getInstance().getMode_code());
|
|
|
|
|
data.setNight_lights_state(Movement.getInstance().getNight_lights_state());
|
|
|
|
|
|
|
|
|
|
obstacleAvoidance.setUpside(Movement.getInstance().getUpside());
|
|
|
|
|
obstacleAvoidance.setHorizon(Movement.getInstance().getHorizon());
|
|
|
|
|
obstacleAvoidance.setDownside(Movement.getInstance().getDownside());
|
|
|
|
|
data.setObstacle_avoidance(obstacleAvoidance);
|
|
|
|
|
|
|
|
|
|
positionState.setGps_number(Movement.getInstance().getGps_number());
|
|
|
|
|
positionState.setIs_fixed(Movement.getInstance().getIs_fixed());
|
|
|
|
|
positionState.setQuality(Movement.getInstance().getQuality());
|
|
|
|
|
positionState.setRtk_number(Movement.getInstance().getRtk_number());
|
|
|
|
|
data.setPosition_state(positionState);
|
|
|
|
|
|
|
|
|
|
data.setRc_lost_action(Movement.getInstance().getRc_lost_action());
|
|
|
|
|
data.setRid_state(Movement.getInstance().isRid_state());
|
|
|
|
|
data.setRth_altitude(Movement.getInstance().getRth_altitude());
|
|
|
|
|
|
|
|
|
|
storage.setUsed(Movement.getInstance().getUsed());
|
|
|
|
|
storage.setTotal(Movement.getInstance().getTotal());
|
|
|
|
|
data.setStorage(storage);
|
|
|
|
|
|
|
|
|
|
data.setTotal_flight_distance(Movement.getInstance().getTotal_flight_distance());
|
|
|
|
|
data.setTotal_flight_sorties(Movement.getInstance().getTotal_flight_sorties());
|
|
|
|
|
data.setTotal_flight_time(Movement.getInstance().getTotal_flight_time());
|
|
|
|
|
data.setTrack_id(Movement.getInstance().getTrack_id());
|
|
|
|
|
data.setVertical_speed(Movement.getInstance().getVertical_speed());
|
|
|
|
|
data.setWind_direction(Movement.getInstance().getWind_direction());
|
|
|
|
|
data.setWind_speed(Movement.getInstance().getWind_speed());
|
2026-03-12 14:57:34 +08:00
|
|
|
|
|
|
|
|
Osd.Data.MaintainStatus maintainStatus = new Osd.Data.MaintainStatus();
|
|
|
|
|
Osd.Data.MaintainStatus.MaintainStatusArray maintainItem = new Osd.Data.MaintainStatus.MaintainStatusArray();
|
|
|
|
|
// state: 保养状态, enum_int, 0:无保养, 1:有保养
|
|
|
|
|
maintainItem.setState(0);
|
|
|
|
|
// last_maintain_type: 上一次保养类型, enum_int, 1:基础, 2:常规, 3:深度
|
|
|
|
|
// 默认值给 0 表示未设置(无保养历史)
|
|
|
|
|
maintainItem.setLast_maintain_type(1);
|
|
|
|
|
// last_maintain_time: 上一次保养时间, date, 秒级时间戳
|
|
|
|
|
// 默认值 0 表示无记录
|
|
|
|
|
maintainItem.setLast_maintain_time(0);
|
|
|
|
|
// last_maintain_flight_time: 上一次保养时航时, int, 单位:小时
|
|
|
|
|
maintainItem.setLast_maintain_flight_time(0);
|
|
|
|
|
// last_maintain_flight_sorties: 上一次保养时架次, int
|
|
|
|
|
maintainItem.setLast_maintain_flight_sorties(0);
|
|
|
|
|
java.util.ArrayList<Osd.Data.MaintainStatus.MaintainStatusArray> maintainList = new java.util.ArrayList<>();
|
|
|
|
|
maintainList.add(maintainItem);
|
|
|
|
|
maintainStatus.setMaintain_status_array(maintainList);
|
|
|
|
|
data.setMaintain_status(maintainStatus);
|
|
|
|
|
|
|
|
|
|
|
2026-01-30 11:47:32 +08:00
|
|
|
data.setHomepoint_latitude(Movement.getInstance().getHomepoint_latitude());
|
|
|
|
|
data.setHomepoint_longitude(Movement.getInstance().getHomepoint_longitude());
|
|
|
|
|
data.setRtk_takeoff_altitude(Movement.getInstance().getRtk_takeoff_altitude());
|
|
|
|
|
|
|
|
|
|
osd.setTid(UUID.randomUUID().toString());
|
|
|
|
|
osd.setBid(UUID.randomUUID().toString());
|
|
|
|
|
osd.setTimestamp(System.currentTimeMillis());
|
|
|
|
|
osd.setGateway("gateway_sn");
|
|
|
|
|
osd.setMethod("osd");
|
|
|
|
|
|
|
|
|
|
osd.setData(data);
|
|
|
|
|
|
|
|
|
|
MqttMessage flightMessage =
|
|
|
|
|
new MqttMessage(gson.toJson(osd).getBytes(StandardCharsets.UTF_8));
|
|
|
|
|
flightMessage.setQos(0);
|
|
|
|
|
|
|
|
|
|
publish(
|
|
|
|
|
MqttManager.getInstance().mqttAndroidClient,
|
|
|
|
|
AMSConfig.UP_UAV_EVENT,
|
|
|
|
|
flightMessage
|
|
|
|
|
);
|
|
|
|
|
// Log.e(TAG,"推送osd:"+gson.toJson(osd));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
LogUtil.log(TAG, "推送osd异常: " + e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class OSDHolder {
|
|
|
|
|
private static final OSDManager INSTANCE = new OSDManager();
|
|
|
|
|
}
|
|
|
|
|
}
|