makcar/app/src/main/java/com/aros/apron/manager/CameraManager.java

1870 lines
95 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.amazonaws.services.kms.model.KeyState;
import com.aros.apron.base.BaseManager;
import com.aros.apron.entity.MessageDown;
import com.aros.apron.entity.Movement;
import com.aros.apron.tools.LogUtil;
import com.aros.apron.tools.PreferenceUtils;
import com.google.gson.Gson;
import dji.sdk.keyvalue.key.CameraKey;
import dji.sdk.keyvalue.key.FlightControllerKey;
import dji.sdk.keyvalue.key.KeyTools;
import dji.sdk.keyvalue.key.ProductKey;
import dji.sdk.keyvalue.value.camera.CameraExposureCompensation;
import dji.sdk.keyvalue.value.camera.CameraExposureMode;
import dji.sdk.keyvalue.value.camera.CameraFocusMode;
import dji.sdk.keyvalue.value.camera.CameraFocusState;
import dji.sdk.keyvalue.value.camera.CameraISO;
import dji.sdk.keyvalue.value.camera.CameraMode;
import dji.sdk.keyvalue.value.camera.CameraShootPhotoMode;
import dji.sdk.keyvalue.value.camera.CameraShutterSpeed;
import dji.sdk.keyvalue.value.camera.CameraStorageInfo;
import dji.sdk.keyvalue.value.camera.CameraStorageInfos;
import dji.sdk.keyvalue.value.camera.CameraStorageLocation;
import dji.sdk.keyvalue.value.camera.CameraThermalPalette;
import dji.sdk.keyvalue.value.camera.CameraType;
import dji.sdk.keyvalue.value.camera.CameraVideoStreamSourceType;
import dji.sdk.keyvalue.value.camera.LaserMeasureInformation;
import dji.sdk.keyvalue.value.camera.PanoramaExitStatus;
import dji.sdk.keyvalue.value.camera.PhotoPanoStichingState;
import dji.sdk.keyvalue.value.camera.PhotoState;
import dji.sdk.keyvalue.value.camera.RecordingState;
import dji.sdk.keyvalue.value.camera.TapZoomMode;
import dji.sdk.keyvalue.value.camera.ThermalDigitalZoomFactor;
import dji.sdk.keyvalue.value.camera.ThermalDisplayMode;
import dji.sdk.keyvalue.value.camera.ThermalGainMode;
import dji.sdk.keyvalue.value.camera.ThermalTemperatureMeasureMode;
import dji.sdk.keyvalue.value.camera.VideoRecordingStatus;
import dji.sdk.keyvalue.value.camera.VisionPhotoPanoramaMissionState;
import dji.sdk.keyvalue.value.camera.ZoomTargetPointInfo;
import dji.sdk.keyvalue.value.common.CameraLensType;
import dji.sdk.keyvalue.value.common.ComponentIndexType;
import dji.sdk.keyvalue.value.common.DoublePoint2D;
import dji.sdk.keyvalue.value.common.EmptyMsg;
import dji.sdk.keyvalue.value.product.ProductType;
import dji.v5.common.callback.CommonCallbacks;
import dji.v5.common.error.IDJIError;
import dji.v5.manager.KeyManager;
import dji.v5.manager.SDKManager;
import dji.v5.manager.aircraft.waypoint3.WaypointMissionManager;
import dji.v5.manager.interfaces.IWaypointMissionManager;
public class CameraManager extends BaseManager {
private Handler panoHandler = new Handler(Looper.getMainLooper());
private Runnable panoRunnable;
private boolean isPanoRunning = false;
private static final long INTERVAL = 1000; // 1秒
private void startReport() {
if (isPanoRunning) return; // 已开启则忽略
isPanoRunning = true;
panoRunnable = new Runnable() {
@Override
public void run() {
if (!isPanoRunning) return;
sendCameraPhotoTakeProgress2Server(); // 你的方法
panoHandler.postDelayed(this, INTERVAL); // 1秒后循环
}
};
panoHandler.post(panoRunnable); // 立即执行
}
private void stopReport() {
if (!isPanoRunning) return;
isPanoRunning = false;
panoHandler.removeCallbacks(panoRunnable);
sendCameraPhotoTakeProgress2Server(); // 最后报一次
Movement.getInstance().setMode_code(3);
}
private CameraManager() {
}
private static class CameraHolder {
private static final CameraManager INSTANCE = new CameraManager();
}
public static CameraManager getInstance() {
return CameraHolder.INSTANCE;
}
public void initCameraInfo() {
Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
LogUtil.log(TAG, "isConnect" + isConnect);
if (isConnect != null && isConnect) {
//全局画面中测量的最高温度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalGlobalMinTemperature,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Double>() {
@Override
public void onValueChange(@Nullable Double aDouble, @Nullable Double t1) {
if (t1 != null) {
Movement.getInstance().setThermal_global_temperature_min(t1);
}
}
});
//全景任务状态
KeyManager.getInstance().listen(createKey(CameraKey.KeyVisionPhotoPanoramaMissionState, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<VisionPhotoPanoramaMissionState>() {
@Override
public void onValueChange(@Nullable VisionPhotoPanoramaMissionState visionPhotoPanoramaMissionState, @Nullable VisionPhotoPanoramaMissionState t1) {
if (t1 != null) {
if (t1 == VisionPhotoPanoramaMissionState.IDLE) {
Movement.getInstance().setPhoto_current_step(3000);
} else if (t1 == VisionPhotoPanoramaMissionState.RELEASE) {
// Movement.getInstance().setPhoto_result(0);
// Movement.getInstance().setPhoto_status("ok");
// Movement.getInstance().setCameraMode(3);
// stopReport();
} else if (t1 == VisionPhotoPanoramaMissionState.RUNNING) {
Movement.getInstance().setPhoto_status("in_progress");
Movement.getInstance().setPhoto_current_step(3002);
} else if (t1 == VisionPhotoPanoramaMissionState.UNKNOWN) {
// Movement.getInstance().setPhoto_result(1);
// Movement.getInstance().setPhoto_current_step(3000);
// Movement.getInstance().setPhoto_status("fail");
} else if (t1 == VisionPhotoPanoramaMissionState.PROCESSING) {
Movement.getInstance().setPhoto_current_step(3005);
}
// else if (t1 == VisionPhotoPanoramaMissionState.FORBIDDEN) {
// Movement.getInstance().setPhoto_result(1);
// Movement.getInstance().setPhoto_current_step(3000);
// Movement.getInstance().setPhoto_status("fail");
// }
}
}
});
//全景退出
KeyManager.getInstance().listen(createKey(CameraKey.KeyPanoramaExitStatus, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<PanoramaExitStatus>() {
@Override
public void onValueChange(@Nullable PanoramaExitStatus panoramaExitStatus, @Nullable PanoramaExitStatus t1) {
if (t1 != null) {
LogUtil.log(TAG, "全景退出状态:" + t1.toString());
// 处理 SUCCESSFUL 和 CAMERA_TOPMODE_RESET 两种完成状态
if (t1 == PanoramaExitStatus.SUCCESSFUL) {
Movement.getInstance().setPhoto_current_step(3000);
Movement.getInstance().setPhoto_result(0);
Movement.getInstance().setPhoto_status("ok");
Movement.getInstance().setMode_code(3);
stopReport();
} else if (t1 == PanoramaExitStatus.CAMERA_TOPMODE_RESET) {
Movement.getInstance().setPhoto_current_step(3000);
Movement.getInstance().setPhoto_result(0);
Movement.getInstance().setPhoto_status("fail");
Movement.getInstance().setMode_code(3);
stopReport();
}
}
}
});
KeyManager.getInstance().listen(createKey(CameraKey.KeyPanoramaProgressInPercent, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setPhoto_percent(t1);
if (t1 == 100) {
Movement.getInstance().setPhoto_current_step(3000);
Movement.getInstance().setPhoto_result(0);
Movement.getInstance().setPhoto_status("ok");
Movement.getInstance().setCameraMode(3);
Movement.getInstance().setMode_code(3);
stopReport();
}
}
}
});
//是否正在拍全景
KeyManager.getInstance().listen(createKey(CameraKey.KeyIsShootingPhotoPanorama, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<Boolean>() {
@Override
public void onValueChange(@Nullable Boolean aBoolean, @Nullable Boolean t1) {
if (t1 != null) {
if (t1 == true) {
startReport();
} else {
stopReport();
}
}
}
});
//激光测距信息
KeyManager.getInstance().listen(createKey(CameraKey.KeyLaserMeasureInformation, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<LaserMeasureInformation>() {
@Override
public void onValueChange(@Nullable LaserMeasureInformation laserMeasureInformation, @Nullable LaserMeasureInformation t1) {
if (t1 != null) {
if (t1.getLocation3D() != null) {
Movement.getInstance().setMeasure_target_altitude(t1.getLocation3D().getAltitude());
Movement.getInstance().setMeasure_target_latitude(t1.getLocation3D().getLatitude());
Movement.getInstance().setMeasure_target_longitude(t1.getLocation3D().getLongitude());
Movement.getInstance().setMeasure_target_distance(t1.getDistance().intValue());
Movement.getInstance().setMeasure_target_error_state(t1.getLaserMeasureState().value());
Movement.getInstance().setPayload_index("53-0-0");
}
}
}
});
//调色盘样式。{"0":"白热","1":"黑热","2":"描红","3":"医疗","5":"彩虹 1","6":"铁红","8":"北极","11":"熔岩","12":"热铁","13":"彩虹 2"}
KeyManager.getInstance().listen(createKey(CameraKey.KeyThermalPalette, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<CameraThermalPalette>() {
@Override
public void onValueChange(@Nullable CameraThermalPalette cameraThermalPalette, @Nullable CameraThermalPalette t1) {
if (t1 != null) {
Movement.getInstance().setThermal_current_palette_style(t1.value());
}
}
});
//增益模式。{"0":"自动","1":"低增益, 测温范围0°C-500°C","2":"高增益, 测温范围-20°C-150°C"}
KeyManager.getInstance().listen(createKey(CameraKey.KeyThermalGainMode, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<ThermalGainMode>() {
@Override
public void onValueChange(@Nullable ThermalGainMode thermalGainMode, @Nullable ThermalGainMode t1) {
if (t1 != null) {
Movement.getInstance().setThermal_gain_mode(t1.value());
}
}
});
//全局画面中测量的最高温度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalGlobalMaxTemperature,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Double>() {
@Override
public void onValueChange(@Nullable Double aDouble, @Nullable Double t1) {
if (t1 != null) {
Movement.getInstance().setThermal_global_temperature_max(t1);
}
}
});
//等温线最高值。较低和中等等温线阈值之间的温度值将以调色板中的128-175色显示。
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalIsothermUpperValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setThermal_isotherm_upper_limit(t1);
}
}
});
//等温线最低值。较低和中等等温线阈值之间的温度值将以调色板中的128-175色显示。
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalIsothermLowerValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setThermal_isotherm_lower_limit(t1);
}
}
});
//是否开启等温线
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalIsothermEnabled,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Boolean>() {
@Override
public void onValueChange(@Nullable Boolean aBoolean, @Nullable Boolean t1) {
if (t1 != null) {
Movement.getInstance().setThermal_isotherm_state(t1 ? 1 : 0);
}
}
});
//相机模式
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.
KeyCameraMode, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<CameraMode>() {
@Override
public void onValueChange(@Nullable CameraMode oldValue, @Nullable CameraMode newValue) {
if (newValue != null) {
//Movement.getInstance().setCamera_mode(newValue.value());
// LogUtil.log(TAG, "相机模式:" + newValue + "old" + oldValue);
}
}
});
//当前测温模式
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalTemperatureMeasureMode,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<ThermalTemperatureMeasureMode>() {
@Override
public void onValueChange(@Nullable ThermalTemperatureMeasureMode thermalTemperatureMeasureMode, @Nullable ThermalTemperatureMeasureMode t1) {
if (t1 != null && thermalTemperatureMeasureMode != null) {
Movement.getInstance().setIr_metering_mode(thermalTemperatureMeasureMode.value());
}
}
});
//当前测温的点的位置
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalSpotMetersurePoint,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<DoublePoint2D>() {
@Override
public void onValueChange(@Nullable DoublePoint2D doublePoint2D, @Nullable DoublePoint2D t1) {
if (t1 != null) {
Movement.getInstance().setX(t1.getX());
Movement.getInstance().setX(t1.getY());
}
}
});
//当前测温的点的温度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalSpotMetersureTemperature,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Double>() {
@Override
public void onValueChange(@Nullable Double aDouble, @Nullable Double t1) {
if (t1 != null) {
Movement.getInstance().setTemperature(t1.intValue());
}
}
});
//当前红外变焦倍率
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalZoomRatios,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<Double>() {
@Override
public void onValueChange(@Nullable Double aDouble, @Nullable Double t1) {
if (t1 != null) {
Movement.getInstance().setIr_zoom_factor(t1.intValue());
}
}
});
//拍照状态
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.KeyPhotoState,
ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<PhotoState>() {
@Override
public void onValueChange(@Nullable PhotoState photoState, @Nullable PhotoState t1) {
if (t1 != null) {
Movement.getInstance().setPhoto_state(t1.value());
}
}
});
//视频录制时长
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.
KeyRecordingTime, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
if (newValue != null) {
Movement.getInstance().setRecord_time(newValue);
}
}
});
//视频录制状态
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.
KeyRecordingState, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<RecordingState>() {
@Override
public void onValueChange(@Nullable RecordingState recordingState, @Nullable RecordingState t1) {
if (t1 != null) {
Movement.getInstance().setRecording_state(t1.value() == 0 ? 0 : 1);
}
}
});
//剩余照片数
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.
KeySDCardAvailablePhotoCount, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
//LogUtil.log(TAG, "剩余拍照数setRemain_photo_num" + t1 + "old" + integer);
if (t1 != 0) {
Movement.getInstance().setRemain_photo_num(t1);
}
}
}
});
//视频录制时长
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.KeyRecordingTime, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setRecord_time(t1);
}
}
});
//是否在录像
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.KeyVideoRecordingStatus, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<VideoRecordingStatus>() {
@Override
public void onValueChange(@Nullable VideoRecordingStatus videoRecordingStatus, @Nullable VideoRecordingStatus t1) {
if (t1 != null) {
Boolean recording = t1.getIsRecording();
if (recording != null && recording) {
Movement.getInstance().setRecording_state(1); // 正在录
} else {
Movement.getInstance().setRecording_state(0); // 未录或未知
}
}
}
});
//分屏是否使能
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalDisplayMode,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), this, new CommonCallbacks.KeyListener<ThermalDisplayMode>() {
@Override
public void onValueChange(@Nullable ThermalDisplayMode thermalDisplayMode, @Nullable ThermalDisplayMode t1) {
if (t1 != null) {
Movement.getInstance().setScreen_split_enable(t1.value() == 2 ? true : false);
}
}
});
//广角镜头曝光模式
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyExposureMode,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_WIDE), this, new CommonCallbacks.KeyListener<CameraExposureMode>() {
@Override
public void onValueChange(@Nullable CameraExposureMode cameraExposureMode, @Nullable CameraExposureMode t1) {
if (t1 != null) {
//LogUtil.log(TAG, "监听曝光模式:" + t1.name());
Movement.getInstance().setWide_exposure_mode(t1.value());
}
}
});
//广角镜头曝光值
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyExposureCompensation,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_WIDE), this, new CommonCallbacks.KeyListener<CameraExposureCompensation>() {
@Override
public void onValueChange(@Nullable CameraExposureCompensation cameraExposureCompensation, @Nullable CameraExposureCompensation t1) {
if (t1 != null) {
LogUtil.log(TAG, "监听曝光范围:" + t1.value());
Movement.getInstance().setWide_exposure_value(t1.value());
}
}
});
//广角镜头感光度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyISO,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_WIDE), this, new CommonCallbacks.KeyListener<CameraISO>() {
@Override
public void onValueChange(@Nullable CameraISO cameraISO, @Nullable CameraISO t1) {
if (t1 != null) {
Movement.getInstance().setWide_iso(t1.value());
}
}
});
//广角镜头快门速度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyShutterSpeed,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_WIDE), this, new CommonCallbacks.KeyListener<CameraShutterSpeed>() {
@Override
public void onValueChange(@Nullable CameraShutterSpeed cameraShutterSpeed, @Nullable CameraShutterSpeed t1) {
if (t1 != null) {
Movement.getInstance().setWide_shutter_speed(t1.value());
}
}
});
//变焦镜头标定的最远对焦值
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusRingMaxValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setZoom_calibrate_farthest_focus_value(t1);
}
}
});
//变焦镜头标定的最近对焦值
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusRingMinValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setZoom_calibrate_farthest_focus_value(t1);
}
}
});
//变焦镜头曝光模式
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyExposureMode,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraExposureMode>() {
@Override
public void onValueChange(@Nullable CameraExposureMode cameraExposureMode, @Nullable CameraExposureMode t1) {
if (t1 != null) {
Movement.getInstance().setZoom_exposure_mode(t1.value());
}
}
});
//变焦镜头感光度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyExposureCompensation,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraExposureCompensation>() {
@Override
public void onValueChange(@Nullable CameraExposureCompensation cameraExposureCompensation, @Nullable CameraExposureCompensation t1) {
if (t1 != null) {
Movement.getInstance().setZoom_exposure_value(t1.value());
}
}
});
//变焦镜头感光度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyExposureCompensation,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraExposureCompensation>() {
@Override
public void onValueChange(@Nullable CameraExposureCompensation cameraExposureCompensation, @Nullable CameraExposureCompensation t1) {
if (t1 != null) {
Movement.getInstance().setZoom_exposure_value(t1.value());
}
}
});
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyThermalZoomRatios,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Double>() {
@Override
public void onValueChange(@Nullable Double aDouble, @Nullable Double t1) {
if (t1 != null) {
Movement.getInstance().setZoom_factor(t1);
}
}
});
//变焦倍数
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraZoomRatios,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Double>() {
@Override
public void onValueChange(@Nullable Double aDouble, @Nullable Double t1) {
if (t1 != null) {
Movement.getInstance().setZoom_factor(t1);
}
}
});
//变焦镜头对焦模式
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusMode,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraFocusMode>() {
@Override
public void onValueChange(@Nullable CameraFocusMode cameraFocusMode, @Nullable CameraFocusMode t1) {
if (t1 != null) {
Movement.getInstance().setZoom_focus_mode(t1.value());
}
}
});
//变焦镜头对焦状态
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusState,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraFocusState>() {
@Override
public void onValueChange(@Nullable CameraFocusState cameraFocusState, @Nullable CameraFocusState t1) {
if (t1 != null) {
Movement.getInstance().setZoom_focus_state(t1.value());
}
}
});
//变焦镜头对焦值
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusRingValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setZoom_focus_value(t1);
}
}
});
//变焦镜头感光度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyISO,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraISO>() {
@Override
public void onValueChange(@Nullable CameraISO cameraISO, @Nullable CameraISO t1) {
if (t1 != null) {
Movement.getInstance().setZoom_iso(t1.value());
}
}
});
//变焦镜头最大对焦值
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusRingMaxValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setZoom_max_focus_value(t1);
}
}
});
//变焦镜头最小对焦值
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyCameraFocusRingMinValue,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<Integer>() {
@Override
public void onValueChange(@Nullable Integer integer, @Nullable Integer t1) {
if (t1 != null) {
Movement.getInstance().setZoom_min_focus_value(t1);
}
}
});
//变焦镜头快门速度
KeyManager.getInstance().listen(KeyTools.createCameraKey(CameraKey.KeyShutterSpeed,
ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM), this, new CommonCallbacks.KeyListener<CameraShutterSpeed>() {
@Override
public void onValueChange(@Nullable CameraShutterSpeed cameraShutterSpeed, @Nullable CameraShutterSpeed t1) {
if (t1 != null) {
Movement.getInstance().setZoom_shutter_speed(t1.value());
}
}
});
KeyManager.getInstance().listen(
KeyTools.createKey(CameraKey.KeyConnection, ComponentIndexType.PORT_1),
this,
new CommonCallbacks.KeyListener<Boolean>() {
@Override
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
if (Boolean.TRUE.equals(newValue)) {
CameraStorageInfos cameraStorageInfos =
KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.KeyCameraStorageInfos, ComponentIndexType.PORT_1));
if (cameraStorageInfos == null || cameraStorageInfos.getCameraStorageInfoList() ==
null || cameraStorageInfos.getCameraStorageInfoList().isEmpty()) {
//LogUtil.log(TAG, "相机存储信息为空,相机可能未连接");
return;
}
CameraStorageInfo CameraStorageInfo =
cameraStorageInfos.getCameraStorageInfoList().get(0);
if(CameraStorageInfo.getAvailableVideoDuration()!=0){
Movement.getInstance().setRemain_record_duration(CameraStorageInfo.getAvailableVideoDuration());
LogUtil.log(TAG, "剩余时间" + CameraStorageInfo.getAvailableVideoDuration());
}
// LogUtil.log(TAG, "剩余时间" + CameraStorageInfo.getAvailableVideoDuration());
}
}
});
//SD卡容量
KeyManager.getInstance().listen(KeyTools.createKey(CameraKey.KeyCameraStorageInfos, ComponentIndexType.PORT_1), this, new CommonCallbacks.KeyListener<CameraStorageInfos>() {
@Override
public void onValueChange(@Nullable CameraStorageInfos cameraStorageInfos, @Nullable CameraStorageInfos t1) {
if (t1 != null) {
// LogUtil.log(TAG,"剩余时间"+t1.getCurrentCameraStorageInfo().getAvailableVideoDuration());
//剩余录像时间
if(t1.getCurrentCameraStorageInfo().getAvailableVideoDuration()!=0){
Movement.getInstance().setRemain_record_duration(t1.getCurrentCameraStorageInfo().getAvailableVideoDuration());
}
CameraStorageInfo cameraStorageInfoByLocation = t1.getCameraStorageInfoByLocation(CameraStorageLocation.SDCARD);
if (cameraStorageInfoByLocation != null) {
// //剩余可以拍照张数
// int pitcurenum = cameraStorageInfoByLocation.getAvailablePhotoCount();
// Movement.getInstance().setRemain_photo_num(pitcurenum);
// LogUtil.log(TAG, "//剩余可以拍照张数" + pitcurenum);
Movement.getInstance().setTotal(cameraStorageInfoByLocation.getStorageCapacity() * 1024);
Movement.getInstance().setUsed((cameraStorageInfoByLocation.getStorageCapacity() * 1024)
- (cameraStorageInfoByLocation.getStorageLeftCapacity()));
}
}
}
});
}
}
//切换相机拍照录像模式
public void setCameraMode(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
if (message != null) {
int cameraMode = message.getData().getCamera_mode();
// 新增:如果当前已经是该模式,直接返回成功
if (cameraMode == Movement.getInstance().getCamera_mode()) {
LogUtil.log(TAG, "相机模式已是" + cameraMode + ",无需切换");
sendMsg2Server(message);
return;
}
// if (cameraMode == 3) {
// // 全景模式DJI MSDK v5 中全景是 PHOTO_NORMAL 下的子模式 PANO_APP
// // 不能用 CameraMode.find(12),需先确保处于 PHOTO_NORMAL再设置拍照子模式
// KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
// CameraMode.PHOTO_NORMAL,
// new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// KeyManager.getInstance().setValue(
// KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
// CameraMode.PHOTO_PANORAMA,
// new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// Movement.getInstance().setCamera_mode(cameraMode);
// LogUtil.log(TAG, "切换全景模式成功");
// OSDManager.getInstance().pushFlightAttitude();
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// sendFailMsg2Server(message, "全景子模式设置失败:" + getIDJIErrorMsg(error));
// }
// });
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// sendFailMsg2Server(message, "相机模式切换失败:" + getIDJIErrorMsg(error));
// }
// });
// return;
// }
int cameraModevalue = 0;
if (cameraMode == 1) {
cameraModevalue = 1;
} else if (cameraMode == 2) {
cameraModevalue = 11;
} else if (cameraMode == 3) {
cameraModevalue = 12;
}
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
CameraMode.find(cameraModevalue),
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
//设置相机模式
Movement.getInstance().setCamera_mode(cameraMode);
LogUtil.log(TAG, "切换成功" + Movement.getInstance().getCamera_mode());
OSDManager.getInstance().pushFlightAttitude();
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "相机模式切换失败:" + getIDJIErrorMsg(error));
}
});
}
} else {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
}
//框选变焦
public void camera_frame_zoom(MessageDown message) {
//这个locked参数没有处理
//使用aim转过去
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(
CameraKey.KeyConnection, ComponentIndexType.PORT_1));
if (isConnect == null || !isConnect || !getGimbalAndCameraEnabled()) {
LogUtil.log(TAG, "指点对焦失败:相机未连接或禁止操作");
return;
}
CameraLensType type = parseLensType1(message.getData().getCamera_type());
if (type == null) {
sendFailMsg2Server(message, "不支持的相机类型");
return;
}
KeyManager.getInstance().setValue(
KeyTools.createCameraKey(CameraKey.KeyTapZoomEnable,
ComponentIndexType.PORT_1, type),
true,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "设置使能指点成功");
//使用aim 加变焦
camera_frame_zoom_and_bianjiao(message, type);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "设置使能指点失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "设置使能指点失败:" + getIDJIErrorMsg(error));
}
});
}
private CameraLensType parseLensType1(String cameraType) {
if (cameraType == null) return null;
if ("ir".equals(cameraType)) {
return CameraLensType.CAMERA_LENS_THERMAL;
} else if ("wide".equals(cameraType)) {
return CameraLensType.CAMERA_LENS_ZOOM;
} else if ("zoom".equals(cameraType)) {
return CameraLensType.CAMERA_LENS_ZOOM;
}
return null;
}
private void camera_frame_zoom_and_bianjiao(MessageDown message, CameraLensType type) {
ZoomTargetPointInfo info = new ZoomTargetPointInfo();
info.setX(Double.valueOf(message.getData().getX()));
info.setY(Double.valueOf(message.getData().getY()));
info.setTapZoomModeEnable(true);
double width = message.getData().getWidth();
double height = message.getData().getHeight();
double zoomRatio = calculateZoomRatio(width, height);
//没有对lock判断
info.setMode(TapZoomMode.GIMBAL_FOLLOW); // 或 TAP_ZOOM模式看需求
KeyManager.getInstance().performAction(
KeyTools.createCameraKey(CameraKey.KeyTapZoomAtTarget,
ComponentIndexType.PORT_1, type),
info,
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
//开始变焦
KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyCameraZoomRatios,
ComponentIndexType.PORT_1, type),
Double.valueOf(zoomRatio), new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "变焦成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
sendFailMsg2Server(message, "变焦失败:" + getIDJIErrorMsg(idjiError));
}
});
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "aim操作失败:" + getIDJIErrorMsg(error));
}
});
}
//设置变焦倍率
public static double calculateZoomRatio(double width, double height) {
// 防呆:如果传入 0 或负数,返回 1 倍(不 zoom
if (width <= 0 || height <= 0) {
return 1.0;
}
// 取宽高中的大值(保证框能装下)
double maxDimension = Math.max(width, height);
// 反比计算框越小zoom 越大
// 例max=1.0(全画面)→ zoom=1.0
// max=0.5(半屏) → zoom=2.0
// max=0.005(很小) → zoom=200.0
double zoom = 1.0 / maxDimension;
// 限制在你的相机范围内 1x ~ 200x
return Math.max(1.0, Math.min(200.0, zoom));
}
//开始拍照
public void startShootPhoto(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// 判断当前是否是全景模式 (mode 3)
if (Movement.getInstance().getCamera_mode() == 3) {
String missionExecuteState = Movement.getInstance().getWaypointMissionExecuteState();
LogUtil.log(TAG, "全景拍照前检查航线状态:" + missionExecuteState);
if ("EXECUTING".equals(missionExecuteState) || "INTERRUPTED".equals(missionExecuteState)) {
LogUtil.log(TAG, "航线正在执行或暂停,先退出航线");
IWaypointMissionManager missionManager = WaypointMissionManager.getInstance();
missionManager.stopMission(PreferenceUtils.getInstance().getWaylinename(), new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "航线退出成功,等待 2 秒让相机控制权释放");
// 等待航线退出后,延迟 2 秒再设置全景模式并拍照
new Handler().postDelayed(() -> {
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
CameraMode.find(12),
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
Movement.getInstance().setCamera_mode(3);
LogUtil.log(TAG, "切换全景模式成功,等待 500ms 后拍照");
// 再等待 500ms 让相机模式稳定
new Handler().postDelayed(() -> {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStartShootPhoto,
ComponentIndexType.PORT_1),
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "拍照成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "拍照失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "拍照失败:" + getIDJIErrorMsg(error));
}
});
}, 500);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "切换全景模式失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "切换全景模式失败:" + getIDJIErrorMsg(error));
}
});
}, 2000);
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "退出航线失败:" + new Gson().toJson(idjiError));
// 退出失败也直接设置全景模式拍照
new Handler().postDelayed(() -> {
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
CameraMode.find(12),
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
Movement.getInstance().setCamera_mode(3);
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStartShootPhoto,
ComponentIndexType.PORT_1),
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "拍照成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "拍照失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "拍照失败:" + getIDJIErrorMsg(error));
}
});
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "退出拍照失败");
}
});
}, 2000);
}
});
} else {
// 没有航线执行,先读取相机实际模式
CameraMode currentMode = KeyManager.getInstance().getValue(
KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1));
LogUtil.log(TAG, "当前相机模式:" + currentMode);
if (currentMode == CameraMode.PHOTO_PANORAMA) {
// 已经是全景模式,等待 500ms 让相机稳定后拍照
LogUtil.log(TAG, "已是全景模式,等待 500ms 后拍照");
new Handler().postDelayed(() -> {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStartShootPhoto,
ComponentIndexType.PORT_1),
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "拍照成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "拍照失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "拍照失败:" + getIDJIErrorMsg(error));
}
});
}, 500);
} else {
// 不是全景模式,先切换
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
CameraMode.PHOTO_PANORAMA,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
Movement.getInstance().setCamera_mode(3);
LogUtil.log(TAG, "切换成功" + Movement.getInstance().getCamera_mode());
// 切换成功后等待 500ms 再拍照
new Handler().postDelayed(() -> {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStartShootPhoto,
ComponentIndexType.PORT_1),
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "拍照成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "拍照失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "拍照失败:" + getIDJIErrorMsg(error));
}
});
}, 500);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "切换全景模式失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "切换全景模式失败:" + getIDJIErrorMsg(error));
}
});
}
}
} else {
// 普通拍照模式:使用 KeyStartShootPhoto
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStartShootPhoto,
ComponentIndexType.PORT_1),
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "拍照成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "拍照失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "拍照失败:" + getIDJIErrorMsg(error));
}
});
}
} else {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
}
//结束拍照
public void stopShootPhoto(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStopShootPhoto,
ComponentIndexType.PORT_1), new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "停止拍照失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "停止拍照失败:" + getIDJIErrorMsg(error));
}
});
} else {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
}
//开始录像
public void startRecordVideo(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// 检查当前相机模式,确保在录像模式
CameraMode currentCameraMode = KeyManager.getInstance().getValue(
KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1));
// new Handler().postDelayed(() -> {
// KeyManager.getInstance().setValue(
// KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
// CameraMode.VIDEO_NORMAL, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// }
// @Override
// public void onFailure(@NonNull IDJIError idjiError) {
// }
// });
// },500);
if (currentCameraMode != CameraMode.VIDEO_NORMAL) {
// 不在录像模式,先切换到录像模式
LogUtil.log(TAG, "相机模式不在录像模式,先切换模式");
KeyManager.getInstance().setValue(
KeyTools.createKey(CameraKey.KeyCameraMode, ComponentIndexType.PORT_1),
CameraMode.VIDEO_NORMAL,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "切换到录像模式成功,开始录像");
new Handler().postDelayed(() -> {
doStartRecord(message);
}, 500);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "切换到录像模式失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "切换录像模式失败:" + getIDJIErrorMsg(error));
}
});
} else {
// 已经在录像模式,直接录像
doStartRecord(message);
}
} else {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
}
// 执行录像的私有方法
private void doStartRecord(MessageDown message) {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStartRecord,
ComponentIndexType.PORT_1), new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "开始录像成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "开始录像失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "开始录像失败:" + getIDJIErrorMsg(error));
}
});
}
//停止录像
public void stopRecordVideo(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect) {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyStopRecord,
ComponentIndexType.PORT_1), new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "停止录像成功");
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "停止录像失败:" + getIDJIErrorMsg(error));
}
});
} else {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
}
// 设置变焦倍率
public void setCameraZoomRatios(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect == null || !isConnect || !getGimbalAndCameraEnabled()) {
sendFailMsg2Server(message, "当前状态相机禁止操作");
return;
}
if (message == null) return;
String cameraType = message.getData().getCamera_type();
double zoomFactor = message.getData().getZoom_factor();
// 检查是否有红外H30T
CameraType cameraTypeEnum = KeyManager.getInstance().getValue(
KeyTools.createKey(CameraKey.KeyCameraType, ComponentIndexType.PORT_1));
boolean hasThermal = (cameraTypeEnum == CameraType.ZENMUSE_H30T);
// 1. 映射视频流类型和镜头类型
CameraVideoStreamSourceType streamSource;
CameraLensType lensType;
double minZoom, maxZoom;
final boolean isWide;
final boolean isIr;
switch (cameraType) {
case "ir":
if (!hasThermal) {
sendFailMsg2Server(message, "当前负载无红外功能仅H30T支持");
return;
}
streamSource = CameraVideoStreamSourceType.INFRARED_CAMERA;
lensType = CameraLensType.CAMERA_LENS_THERMAL;
minZoom = 2;
maxZoom = 20; // 红外 2-20倍
isWide = false;
isIr = true;
break;
case "wide":
streamSource = CameraVideoStreamSourceType.WIDE_CAMERA;
lensType = CameraLensType.CAMERA_LENS_WIDE;
minZoom = 1;
maxZoom = 1;
isWide = true;
isIr = false;
break;
case "zoom":
streamSource = CameraVideoStreamSourceType.ZOOM_CAMERA;
lensType = CameraLensType.CAMERA_LENS_ZOOM;
minZoom = 2;
maxZoom = 200;
isWide = false;
isIr = false;
break;
default:
streamSource = CameraVideoStreamSourceType.DEFAULT_CAMERA;
lensType = CameraLensType.CAMERA_LENS_ZOOM;
minZoom = 2;
maxZoom = 200;
isWide = false;
isIr = false;
break;
}
// 2. 切换视频流
final double finalMinZoom = minZoom;
final double finalMaxZoom = maxZoom;
KeyManager.getInstance().setValue(
KeyTools.createKey(CameraKey.KeyCameraVideoStreamSource, ComponentIndexType.PORT_1),
streamSource,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
// 广角不设置变焦
if (isWide) {
LogUtil.log(TAG, "广角切换成功,无需设置变焦");
Movement.getInstance().setZoom_factor(1);
sendMsg2Server(message);
return;
}
// 强制截断变焦范围
final double validZoom = Math.max(finalMinZoom, Math.min(finalMaxZoom, zoomFactor));
new Handler(Looper.getMainLooper()).postDelayed(() -> {
if (isIr) {
KeyManager.getInstance().setValue(
KeyTools.createCameraKey(CameraKey.KeyThermalZoomRatios,
ComponentIndexType.PORT_1, lensType),
validZoom,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "红外变焦成功: " + validZoom);
Movement.getInstance().setZoom_factor((int) validZoom);
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "红外变焦失败:" + getIDJIErrorMsg(error));
}
}
);
} else {
// 可见光变焦
KeyManager.getInstance().setValue(
KeyTools.createCameraKey(CameraKey.KeyCameraZoomRatios,
ComponentIndexType.PORT_1, lensType),
validZoom,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "变焦成功: " + cameraType + "=" + validZoom);
Movement.getInstance().setZoom_factor((int) validZoom);
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "设置变焦倍率失败:" + getIDJIErrorMsg(error));
}
}
);
}
}, 200);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "切换相机视频流失败:" + getIDJIErrorMsg(error));
}
}
);
}
// private void setstepThermalZoomRatios(){
// KeyManager.getInstance().setValue(
// KeyTools.createKey(CameraKey.KeyThermalDigitalZoomFactor, ComponentIndexType.PORT_1),
// ThermalDigitalZoomFactor.FACTOR_X2,
// new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// //
// LogUtil.log(TAG,"设置红外步长为2x");
// }
//
// @Override
// public void onFailure(@NonNull IDJIError idjiError) {
// LogUtil.log(TAG,"设置红外步长为1x失败"+idjiError);
//
// }
// }
// );
// }
// //设置红外变焦倍率(支持1x、2x、4x、8x变焦倍率)
// public void setThermalZoomRatios(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// if (message != null) {
// int type = message.getThermalZoomRatios();
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalZoomRatios,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), Double.valueOf(type),
// new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"设置红外变焦倍率失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "设置红外变焦倍率失败:" + getIDJIErrorMsg(error));
// }
// });
// }
// } else {
// sendMsg2Server(message, "当前状态相机禁止操作");
// }
// }
//切换广角变焦红外
public void setCameraVideoStreamSource(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
if (message != null) {
int type = 1;
switch (message.getData().getVideo_type()) {
case "ir":
type = 3;
break;
case "normal":
type = 0;
break;
case "wide":
type = 1;
break;
case "zoom":
type = 2;
break;
}
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraVideoStreamSource,
ComponentIndexType.PORT_1)
, CameraVideoStreamSourceType.find(type),
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "切换相机视频流失败:" + getIDJIErrorMsg(error));
}
});
// if (type == 3) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalDisplayMode,
// ComponentIndexType.PORT_1,
// CameraLensType.CAMERA_LENS_THERMAL),
// ThermalDisplayMode.THERMAL_ONLY, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
//// setThermalPIPPosition(mqttAndroidClient, message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"红外镜头的显示模式设置失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "红外镜头的显示模式设置失败:" + getIDJIErrorMsg(error));
// }
// });
// }
}
} else {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
}
// //设置红外镜头的显示模式
// public void setThermalDisplayMode(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalDisplayMode,
// ComponentIndexType.PORT_1,
// CameraLensType.CAMERA_LENS_THERMAL),
// ThermalDisplayMode.PIP, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// setThermalPIPPosition(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"红外镜头的显示模式设置失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "红外镜头的显示模式设置失败:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// sendMsg2Server(message, "当前状态相机禁止操作");
// }
// }
//
// //设置红外镜头分屏显示位置
// public void setThermalPIPPosition(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalPIPPosition,
// ComponentIndexType.PORT_1,
// CameraLensType.CAMERA_LENS_THERMAL),
// ThermalPIPPosition.SIDE_BY_SIDE,
// new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"分屏的显示位置设置失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "分屏的显示位置设置失败:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// sendMsg2Server(message, "当前状态相机禁止操作");
// }
// }
//
//
/// /设置对焦模式
//public void setCameraFocusMode(MQMessage message) {
// Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// if (message != null) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyCameraFocusMode,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM),
// CameraFocusMode.find(message.getCameraFocusMode()), new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"设置对焦模式失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "设置对焦模式失败:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// sendMsg2Server(message, "设置对焦模式失败:参数有误");
// }
// } else {
// sendMsg2Server(message, "当前状态相机禁止操作");
// }
//}
//
//格式化SD卡
public void formatStorage(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyFormatStorage, ComponentIndexType.PORT_1), CameraStorageLocation.SDCARD, new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
if (message != null) {
sendMsg2Server(message);
}
LogUtil.log(TAG, "sd卡已格式化");
}
@Override
public void onFailure(@NonNull IDJIError error) {
if (message != null) {
sendFailMsg2Server(message, "SD卡格式化失败:" + getIDJIErrorMsg(error));
}
LogUtil.log(TAG, "sd卡格式化失败:" + new Gson().toJson(error));
}
});
} else {
if (message != null) {
sendFailMsg2Server(message, "当前状态相机禁止操作");
}
LogUtil.log(TAG, "当前状态相机禁止操作");
}
//
// }
////
//
// //设置曝光模式
// public void setExposureMode(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyExposureMode,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM),
// CameraExposureMode.find(message.getCameraExposureMode()), new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// LogUtil.log(TAG, "曝光模式切换成功");
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"切换曝光模式失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "切换曝光模式失败:" + getIDJIErrorMsg(error));
// }
// });
//
// } else {
// LogUtil.log(TAG, "切换曝光失败:当前状态相机禁止操作");
// }
//
// }
//
// //设置曝光补偿数值
// public void setExposureCompensation(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyExposureCompensation,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_ZOOM),
// CameraExposureCompensation.find(message.getCameraExposureCompensation()), new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"设置曝光补偿数值失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "设置曝光补偿数值失败:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// LogUtil.log(TAG, "设置曝光补偿数值失败:当前状态相机禁止操作");
// }
// }
////重置相机参数
//public void resetCameraSetting(MQMessage message) {
// Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// KeyManager.getInstance().performAction(KeyTools.createKey(CameraKey.KeyResetCameraSetting,
// ComponentIndexType.PORT_1), new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
// @Override
// public void onSuccess(EmptyMsg emptyMsg) {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"重置相机参数失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "重置相机参数失败:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// sendMsg2Server(message, "当前状态相机禁止操作");
// }
//}
//
}
//指点对焦
public void tapZoomAtTarget(MessageDown message) {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(
CameraKey.KeyConnection, ComponentIndexType.PORT_1));
//
LogUtil.log(TAG, "双击回中" + message.toString());
if (isConnect == null || !isConnect || !getGimbalAndCameraEnabled()) {
LogUtil.log(TAG, "指点对焦失败:相机未连接或禁止操作");
return;
}
CameraLensType type = parseLensType(message.getData().getCamera_type());
if (type == null) {
sendFailMsg2Server(message, "不支持的相机类型");
return;
}
KeyManager.getInstance().setValue(
KeyTools.createCameraKey(CameraKey.KeyTapZoomEnable,
ComponentIndexType.PORT_1, type),
true,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "设置使能指点成功");
performTapZoom(message, type);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "设置使能指点失败:" + new Gson().toJson(error));
sendFailMsg2Server(message, "设置使能指点失败:" + getIDJIErrorMsg(error));
}
});
}
private void performTapZoom(MessageDown message, CameraLensType type) {
ZoomTargetPointInfo info = new ZoomTargetPointInfo();
info.setX(Double.valueOf(message.getData().getX()));
info.setY(Double.valueOf(message.getData().getY()));
// info.setTapZoomModeEnable(true);
// //没有对lock判断
// info.setMode(TapZoomMode.GIMBAL_FOLLOW); // 或 TAP_ZOOM模式看需求
KeyManager.getInstance().performAction(
KeyTools.createCameraKey(CameraKey.KeyTapZoomAtTarget,
ComponentIndexType.PORT_1, type),
info,
new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
sendMsg2Server(message);
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "aim失败:" + getIDJIErrorMsg(error));
}
});
}
private CameraLensType parseLensType(String cameraType) {
if (cameraType == null) return null;
if ("ir".equals(cameraType)) {
return CameraLensType.CAMERA_LENS_THERMAL;
} else if ("wide".equals(cameraType)) {
return CameraLensType.CAMERA_LENS_ZOOM;
} else if ("zoom".equals(cameraType)) {
return CameraLensType.CAMERA_LENS_ZOOM;
}
return null;
}
//切换为广角镜头,降低曝光率
public void resumeLensToWideISOManual() {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect) {
//切换成广角镜头
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraVideoStreamSource,
ComponentIndexType.PORT_1), CameraVideoStreamSourceType.WIDE_CAMERA, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "返航时将镜头切为广角");
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "返航切换广角失败:" + new Gson().toJson(error));
}
});
} else {
LogUtil.log(TAG, "降落切换广角失败:当前状态相机禁止操作");
}
}
// //设置自定义文件后缀
// public void setCustomExpandNameSetting() {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect) {
// CustomExpandNameSettings customExpandNameSettings = new CustomExpandNameSettings();
// customExpandNameSettings.setEncodingType(EnCodingType.UTF8);
// customExpandNameSettings.setForceCreateFolder(false);
// customExpandNameSettings.setRelativePosition(RelativePosition.POSITION_END);
// customExpandNameSettings.setPriority(0);
// customExpandNameSettings.setCustomContent("flightId111" + PreferenceUtils.getInstance().getFlightId());
// KeyManager.getInstance().setValue(DJIKey.create(CameraKey.KeyCustomExpandFileNameSettings), customExpandNameSettings, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// LogUtil.log(TAG, "设置文件后缀success");
// }
//
// @Override
// public void onFailure(@NonNull IDJIError idjiError) {
// LogUtil.log(TAG, "设置自定义文件后缀失败:" + new Gson().toJson(idjiError));
// }
// });
// } else {
// LogUtil.log(TAG, "设置自定义文件后缀失败:当前状态相机禁止操作");
// }
// }
// //切换为广角镜头,恢复曝光
// public void resumeLensToWideISOProgram() {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect) {
//
// KeyManager.getInstance().setValue(DJIKey.create(CameraKey.KeyExposureMode),
// CameraExposureMode.PROGRAM, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// LogUtil.log(TAG, "降落后切换曝光模式为自动成功");
//
// KeyManager.getInstance().setValue(DJIKey.create(CameraKey.KeyExposureCompensation),
// CameraExposureCompensation.POS_1P0EV, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// LogUtil.log(TAG, "降落后设置曝光补偿数值成功");
// }
// @Override
// public void onFailure(@NonNull IDJIError idjiError) {
// LogUtil.log(TAG, "降落后设置曝光补偿数值失败");
// }
// });
// }
//
// @Override
// public void onFailure(@NonNull IDJIError idjiError) {
// LogUtil.log(TAG, "降落后切换曝光模式为自动失败:" + new Gson().toJson(idjiError));
// }
// });
// } else {
// LogUtil.log(TAG, "降落后降落完成切换曝光失败:当前状态相机禁止操作");
// }
// }
// //设置测温模式
// public void setThermalTemperatureMeasureMode(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalTemperatureMeasureMode,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL),
// ThermalTemperatureMeasureMode.find(message.getThermalTemperatureMeasureMode()), new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"设置测温模式:"+new Gson().toJson(error));
// sendMsg2Server(message, "设置测温模式:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// LogUtil.log(TAG, "设置测温模式失败:当前状态相机禁止操作");
// }
// }
//
// //设置需要测温的点的位置
// public void setThermalSpotMetersurePoint(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect && getGimbalAndCameraEnabled()) {
// DoublePoint2D doublePoint2D = new DoublePoint2D();
// doublePoint2D.setX(Double.parseDouble(message.getMetersurePointX()));
// doublePoint2D.setY(Double.parseDouble(message.getMetersurePointY()));
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalSpotMetersurePoint,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), doublePoint2D, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"设置点测温失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "设置点测温失败:" + getIDJIErrorMsg(error));
//
// }
// });
//
// } else {
// LogUtil.log(TAG, "测温点设置失败:当前状态相机禁止操作");
// }
// }
//
// //设置需要测温的区域位置
// public void setThermalRegionMetersureArea(MQMessage message) {
// Boolean isConnect =KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
// KeyConnection,ComponentIndexType.PORT_1));
// if (isConnect != null && isConnect) {
// DoubleRect doubleRect = new DoubleRect();
// doubleRect.setX(Double.parseDouble(message.getMetersureAreaX()));
// doubleRect.setY(Double.parseDouble(message.getMetersureAreaY()));
// doubleRect.setHeight(Double.parseDouble(message.getMetersureAreaHeight()));
// doubleRect.setWidth(Double.parseDouble(message.getMetersureAreaWidth()));
// KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyThermalRegionMetersureArea,
// ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_THERMAL), doubleRect, new CommonCallbacks.CompletionCallback() {
// @Override
// public void onSuccess() {
// sendMsg2Server(message);
// }
//
// @Override
// public void onFailure(@NonNull IDJIError error) {
// LogUtil.log(TAG,"设置区域测温失败:"+new Gson().toJson(error));
// sendMsg2Server(message, "设置区域测温失败:" + getIDJIErrorMsg(error));
// }
// });
// } else {
// LogUtil.log(TAG, "测温区域设置失败:当前状态相机禁止操作");
// }
// }
}