856 lines
37 KiB
Kotlin
856 lines
37 KiB
Kotlin
|
|
package com.aros.apron.activity
|
|||
|
|
import android.annotation.SuppressLint
|
|||
|
|
import android.graphics.Color
|
|||
|
|
import android.graphics.drawable.ColorDrawable
|
|||
|
|
import android.os.Build
|
|||
|
|
import android.os.Bundle
|
|||
|
|
import android.os.Handler
|
|||
|
|
import android.os.Looper
|
|||
|
|
import android.os.Message
|
|||
|
|
import android.text.TextUtils
|
|||
|
|
import android.view.View
|
|||
|
|
import android.view.Window
|
|||
|
|
import android.view.WindowManager
|
|||
|
|
import android.widget.Button
|
|||
|
|
import android.widget.TextView
|
|||
|
|
import androidx.annotation.RequiresApi
|
|||
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|||
|
|
import androidx.core.view.GravityCompat
|
|||
|
|
import androidx.drawerlayout.widget.DrawerLayout
|
|||
|
|
import com.aros.apron.BuildConfig
|
|||
|
|
import com.aros.apron.R
|
|||
|
|
import com.aros.apron.base.BaseActivity
|
|||
|
|
import com.aros.apron.callback.MqttCallBack
|
|||
|
|
import com.aros.apron.entity.MQMessage
|
|||
|
|
import com.aros.apron.entity.Movement
|
|||
|
|
import com.aros.apron.manager.AlternateLandingManager
|
|||
|
|
import com.aros.apron.manager.BatteryManager
|
|||
|
|
import com.aros.apron.manager.CameraManager
|
|||
|
|
import com.aros.apron.manager.FlightManager
|
|||
|
|
import com.aros.apron.manager.FlightManager.FLAG_DOWN_LAND
|
|||
|
|
import com.aros.apron.manager.FlightManager.FLAG_START_DETECT_ARUCO_ALTERNATE
|
|||
|
|
import com.aros.apron.manager.FlightManager.FLAG_START_DETECT_ARUCO_APRON
|
|||
|
|
import com.aros.apron.manager.FlightManager.FLAG_STOP_ARUCO
|
|||
|
|
import com.aros.apron.manager.GimbalManager
|
|||
|
|
import com.aros.apron.manager.LEDsSettingsManager
|
|||
|
|
import com.aros.apron.manager.MLTEManager
|
|||
|
|
import com.aros.apron.manager.MediaManager
|
|||
|
|
import com.aros.apron.manager.MegaphoneManager
|
|||
|
|
import com.aros.apron.manager.MissionManager
|
|||
|
|
import com.aros.apron.manager.NavigationSatelliteSystemManager
|
|||
|
|
import com.aros.apron.manager.OffSiteLandingManager
|
|||
|
|
import com.aros.apron.manager.PayloadWidgetManager
|
|||
|
|
import com.aros.apron.manager.PerceptionManager
|
|||
|
|
import com.aros.apron.manager.RTKManager
|
|||
|
|
import com.aros.apron.manager.RemoteManager
|
|||
|
|
import com.aros.apron.manager.StickManager
|
|||
|
|
import com.aros.apron.manager.StreamManager
|
|||
|
|
import com.aros.apron.manager.WayLineExecutingInterruptManager
|
|||
|
|
import com.aros.apron.tools.AlternateArucoDetect
|
|||
|
|
import com.aros.apron.tools.ApronArucoDetect
|
|||
|
|
import com.aros.apron.tools.DroneHelper
|
|||
|
|
import com.aros.apron.tools.LogUtil
|
|||
|
|
import com.aros.apron.tools.MqttManager
|
|||
|
|
import com.aros.apron.tools.PreferenceUtils
|
|||
|
|
import com.dji.wpmzsdk.manager.WPMZManager
|
|||
|
|
import com.google.gson.Gson
|
|||
|
|
import dji.sdk.keyvalue.key.CameraKey
|
|||
|
|
import dji.sdk.keyvalue.key.DJIKey
|
|||
|
|
import dji.sdk.keyvalue.key.FlightControllerKey
|
|||
|
|
import dji.sdk.keyvalue.key.KeyTools
|
|||
|
|
import dji.sdk.keyvalue.key.ProductKey
|
|||
|
|
import dji.sdk.keyvalue.value.common.CameraLensType
|
|||
|
|
import dji.sdk.keyvalue.value.common.ComponentIndexType
|
|||
|
|
import dji.sdk.keyvalue.value.common.EmptyMsg
|
|||
|
|
import dji.v5.common.callback.CommonCallbacks
|
|||
|
|
import dji.v5.common.error.IDJIError
|
|||
|
|
import dji.v5.common.utils.GeoidManager
|
|||
|
|
import dji.v5.manager.KeyManager
|
|||
|
|
import dji.v5.manager.datacenter.MediaDataCenter
|
|||
|
|
import dji.v5.manager.interfaces.ICameraStreamManager
|
|||
|
|
import dji.v5.manager.interfaces.ICameraStreamManager.AvailableCameraUpdatedListener
|
|||
|
|
import dji.v5.network.DJINetworkManager
|
|||
|
|
import dji.v5.network.IDJINetworkStatusListener
|
|||
|
|
import dji.v5.utils.common.JsonUtil
|
|||
|
|
import dji.v5.utils.common.LogPath
|
|||
|
|
import dji.v5.utils.common.LogUtils
|
|||
|
|
import dji.v5.ux.accessory.RTKStartServiceHelper.startRtkService
|
|||
|
|
import dji.v5.ux.cameracore.widget.autoexposurelock.AutoExposureLockWidget
|
|||
|
|
import dji.v5.ux.cameracore.widget.cameracontrols.CameraControlsWidget
|
|||
|
|
import dji.v5.ux.cameracore.widget.cameracontrols.lenscontrol.LensControlWidget
|
|||
|
|
import dji.v5.ux.cameracore.widget.focusexposureswitch.FocusExposureSwitchWidget
|
|||
|
|
import dji.v5.ux.cameracore.widget.focusmode.FocusModeWidget
|
|||
|
|
import dji.v5.ux.cameracore.widget.fpvinteraction.FPVInteractionWidget
|
|||
|
|
import dji.v5.ux.core.base.SchedulerProvider.io
|
|||
|
|
import dji.v5.ux.core.base.SchedulerProvider.ui
|
|||
|
|
import dji.v5.ux.core.communication.BroadcastValues
|
|||
|
|
import dji.v5.ux.core.communication.GlobalPreferenceKeys
|
|||
|
|
import dji.v5.ux.core.communication.ObservableInMemoryKeyedStore
|
|||
|
|
import dji.v5.ux.core.communication.UXKeys
|
|||
|
|
import dji.v5.ux.core.extension.hide
|
|||
|
|
import dji.v5.ux.core.extension.toggleVisibility
|
|||
|
|
import dji.v5.ux.core.panel.systemstatus.SystemStatusListPanelWidget
|
|||
|
|
import dji.v5.ux.core.panel.topbar.TopBarPanelWidget
|
|||
|
|
import dji.v5.ux.core.util.CameraUtil
|
|||
|
|
import dji.v5.ux.core.util.DataProcessor
|
|||
|
|
import dji.v5.ux.core.util.ViewUtil
|
|||
|
|
import dji.v5.ux.core.widget.fpv.FPVStreamSourceListener
|
|||
|
|
import dji.v5.ux.core.widget.fpv.FPVWidget
|
|||
|
|
import dji.v5.ux.core.widget.hsi.HorizontalSituationIndicatorWidget
|
|||
|
|
import dji.v5.ux.core.widget.hsi.PrimaryFlightDisplayWidget
|
|||
|
|
import dji.v5.ux.core.widget.setting.SettingWidget
|
|||
|
|
import dji.v5.ux.gimbal.GimbalFineTuneWidget
|
|||
|
|
import dji.v5.ux.training.simulatorcontrol.SimulatorControlWidget
|
|||
|
|
import dji.v5.ux.training.simulatorcontrol.SimulatorControlWidget.UIState.VisibilityUpdated
|
|||
|
|
import dji.v5.ux.visualcamera.CameraNDVIPanelWidget
|
|||
|
|
import dji.v5.ux.visualcamera.CameraVisiblePanelWidget
|
|||
|
|
import dji.v5.ux.visualcamera.zoom.FocalZoomWidget
|
|||
|
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|||
|
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
|||
|
|
import io.reactivex.rxjava3.functions.Consumer
|
|||
|
|
import org.eclipse.paho.client.mqttv3.MqttException
|
|||
|
|
import org.greenrobot.eventbus.Subscribe
|
|||
|
|
import org.greenrobot.eventbus.ThreadMode
|
|||
|
|
|
|||
|
|
|
|||
|
|
import org.opencv.objdetect.Dictionary
|
|||
|
|
import org.opencv.objdetect.Objdetect
|
|||
|
|
import java.util.concurrent.TimeUnit
|
|||
|
|
|
|||
|
|
|
|||
|
|
open class MainActivity : BaseActivity() {
|
|||
|
|
|
|||
|
|
|
|||
|
|
companion object {
|
|||
|
|
// 如果不需要改变 isAppStarted 的值,可以直接这样声明
|
|||
|
|
var isAppStarted: Boolean = false
|
|||
|
|
var streamReceive: Boolean = false
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected var primaryFpvWidget: FPVWidget? = null
|
|||
|
|
protected var fpvInteractionWidget: FPVInteractionWidget? = null
|
|||
|
|
protected var secondaryFPVWidget: FPVWidget? = null
|
|||
|
|
protected var systemStatusListPanelWidget: SystemStatusListPanelWidget? = null
|
|||
|
|
protected var simulatorControlWidget: SimulatorControlWidget? = null
|
|||
|
|
protected var lensControlWidget: LensControlWidget? = null
|
|||
|
|
protected var autoExposureLockWidget: AutoExposureLockWidget? = null
|
|||
|
|
protected var focusModeWidget: FocusModeWidget? = null
|
|||
|
|
protected var focusExposureSwitchWidget: FocusExposureSwitchWidget? = null
|
|||
|
|
protected var cameraControlsWidget: CameraControlsWidget? = null
|
|||
|
|
protected var horizontalSituationIndicatorWidget: HorizontalSituationIndicatorWidget? = null
|
|||
|
|
protected var pfvFlightDisplayWidget: PrimaryFlightDisplayWidget? = null
|
|||
|
|
protected var ndviCameraPanel: CameraNDVIPanelWidget? = null
|
|||
|
|
protected var visualCameraPanel: CameraVisiblePanelWidget? = null
|
|||
|
|
protected var focalZoomWidget: FocalZoomWidget? = null
|
|||
|
|
protected var settingWidget: SettingWidget? = null
|
|||
|
|
protected var topBarPanel: TopBarPanelWidget? = null
|
|||
|
|
protected var fpvParentView: ConstraintLayout? = null
|
|||
|
|
private var mDrawerLayout: DrawerLayout? = null
|
|||
|
|
private var gimbalAdjustDone: TextView? = null
|
|||
|
|
private var btn_test: Button? = null
|
|||
|
|
private var btn_test1: Button? = null
|
|||
|
|
|
|||
|
|
private var gimbalFineTuneWidget: GimbalFineTuneWidget? = null
|
|||
|
|
private var lastDevicePosition = ComponentIndexType.UNKNOWN
|
|||
|
|
private var lastLensType = CameraLensType.UNKNOWN
|
|||
|
|
|
|||
|
|
private var compositeDisposable: CompositeDisposable? = null
|
|||
|
|
private val cameraSourceProcessor = DataProcessor.create(
|
|||
|
|
CameraSource(
|
|||
|
|
ComponentIndexType.UNKNOWN,
|
|||
|
|
CameraLensType.UNKNOWN
|
|||
|
|
)
|
|||
|
|
)
|
|||
|
|
private val networkStatusListener =
|
|||
|
|
IDJINetworkStatusListener { isNetworkAvailable: Boolean ->
|
|||
|
|
if (isNetworkAvailable) {
|
|||
|
|
LogUtils.d(TAG, "isNetworkAvailable=" + true)
|
|||
|
|
startRtkService(false)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private val availableCameraUpdatedListener: AvailableCameraUpdatedListener =
|
|||
|
|
object : AvailableCameraUpdatedListener {
|
|||
|
|
override fun onAvailableCameraUpdated(availableCameraList: List<ComponentIndexType>) {
|
|||
|
|
runOnUiThread { updateFPVWidgetSource(availableCameraList) }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override fun onCameraStreamEnableUpdate(cameraStreamEnableMap: Map<ComponentIndexType, Boolean>) {
|
|||
|
|
//
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private var cameraManager: ICameraStreamManager = MediaDataCenter.getInstance().cameraStreamManager
|
|||
|
|
|
|||
|
|
private var startArucoType = 0 //1执行机库二维码识别 2执行备降点二维码识别
|
|||
|
|
private var dictionary: Dictionary? = null
|
|||
|
|
private var mqMessage: MQMessage? = null
|
|||
|
|
|
|||
|
|
override fun useEventBus(): Boolean {
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override fun onResume() {
|
|||
|
|
super.onResume()
|
|||
|
|
|
|||
|
|
dictionary = Objdetect.getPredefinedDictionary(Objdetect.DICT_6X6_250)
|
|||
|
|
compositeDisposable = CompositeDisposable()
|
|||
|
|
compositeDisposable!!.add(
|
|||
|
|
systemStatusListPanelWidget!!.closeButtonPressed()
|
|||
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|||
|
|
.subscribe { pressed: Boolean ->
|
|||
|
|
if (pressed) {
|
|||
|
|
systemStatusListPanelWidget!!.hide()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
compositeDisposable!!.add(
|
|||
|
|
simulatorControlWidget!!.getUIStateUpdates()
|
|||
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|||
|
|
.subscribe { simulatorControlWidgetState: SimulatorControlWidget.UIState? ->
|
|||
|
|
if (simulatorControlWidgetState is VisibilityUpdated) {
|
|||
|
|
if ((simulatorControlWidgetState as VisibilityUpdated).isVisible) {
|
|||
|
|
hideOtherPanels(simulatorControlWidget!!)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
compositeDisposable!!.add(
|
|||
|
|
cameraSourceProcessor.toFlowable()
|
|||
|
|
.observeOn(io())
|
|||
|
|
.throttleLast(500, TimeUnit.MILLISECONDS)
|
|||
|
|
.subscribeOn(io())
|
|||
|
|
.subscribe(Consumer { result: CameraSource ->
|
|||
|
|
runOnUiThread { onCameraSourceUpdated(result.devicePosition, result.lensType) }
|
|||
|
|
})
|
|||
|
|
)
|
|||
|
|
compositeDisposable!!.add(ObservableInMemoryKeyedStore.getInstance()
|
|||
|
|
.addObserver(UXKeys.create(GlobalPreferenceKeys.GIMBAL_ADJUST_CLICKED))
|
|||
|
|
.observeOn(ui())
|
|||
|
|
.subscribe { broadcastValues: BroadcastValues? ->
|
|||
|
|
isGimableAdjustClicked(
|
|||
|
|
broadcastValues!!
|
|||
|
|
)
|
|||
|
|
})
|
|||
|
|
ViewUtil.setKeepScreen(this, true)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override fun onPause() {
|
|||
|
|
if (compositeDisposable != null) {
|
|||
|
|
compositeDisposable!!.dispose()
|
|||
|
|
compositeDisposable = null
|
|||
|
|
}
|
|||
|
|
super.onPause()
|
|||
|
|
ViewUtil.setKeepScreen(this, false)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//endregion
|
|||
|
|
private fun hideOtherPanels(widget: View?) {
|
|||
|
|
val panels = arrayOf<View>(
|
|||
|
|
simulatorControlWidget!!
|
|||
|
|
)
|
|||
|
|
for (panel in panels) {
|
|||
|
|
if (widget !== panel) {
|
|||
|
|
panel.visibility = View.GONE
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun updateFPVWidgetSource(availableCameraList: List<ComponentIndexType>?) {
|
|||
|
|
LogUtils.i(TAG, JsonUtil.toJson(availableCameraList))
|
|||
|
|
if (availableCameraList == null) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
val cameraList = java.util.ArrayList(availableCameraList)
|
|||
|
|
|
|||
|
|
//没有数据
|
|||
|
|
if (cameraList.isEmpty()) {
|
|||
|
|
secondaryFPVWidget!!.visibility = View.GONE
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//仅一路数据
|
|||
|
|
if (cameraList.size == 1) {
|
|||
|
|
primaryFpvWidget!!.updateVideoSource(availableCameraList[0])
|
|||
|
|
secondaryFPVWidget!!.visibility = View.GONE
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//大于两路数据
|
|||
|
|
val primarySource = getSuitableSource(cameraList, ComponentIndexType.LEFT_OR_MAIN)
|
|||
|
|
primaryFpvWidget!!.updateVideoSource(primarySource!!)
|
|||
|
|
cameraList.remove(primarySource)
|
|||
|
|
|
|||
|
|
val secondarySource = getSuitableSource(cameraList, ComponentIndexType.FPV)
|
|||
|
|
secondaryFPVWidget!!.updateVideoSource(secondarySource!!)
|
|||
|
|
|
|||
|
|
secondaryFPVWidget!!.visibility = View.VISIBLE
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun getSuitableSource(
|
|||
|
|
cameraList: List<ComponentIndexType>,
|
|||
|
|
defaultSource: ComponentIndexType
|
|||
|
|
): ComponentIndexType? {
|
|||
|
|
if (cameraList.contains(ComponentIndexType.LEFT_OR_MAIN)) {
|
|||
|
|
return ComponentIndexType.LEFT_OR_MAIN
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.RIGHT)) {
|
|||
|
|
return ComponentIndexType.RIGHT
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.UP)) {
|
|||
|
|
return ComponentIndexType.UP
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.PORT_1)) {
|
|||
|
|
return ComponentIndexType.PORT_1
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.PORT_2)) {
|
|||
|
|
return ComponentIndexType.PORT_2
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.PORT_3)) {
|
|||
|
|
return ComponentIndexType.PORT_3
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.PORT_4)) {
|
|||
|
|
return ComponentIndexType.PORT_4
|
|||
|
|
} else if (cameraList.contains(ComponentIndexType.VISION_ASSIST)) {
|
|||
|
|
return ComponentIndexType.VISION_ASSIST
|
|||
|
|
}
|
|||
|
|
return defaultSource
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun onCameraSourceUpdated(
|
|||
|
|
devicePosition: ComponentIndexType,
|
|||
|
|
lensType: CameraLensType
|
|||
|
|
) {
|
|||
|
|
LogUtils.i(LogPath.SAMPLE, "onCameraSourceUpdated", devicePosition, lensType)
|
|||
|
|
if (devicePosition == lastDevicePosition && lensType == lastLensType) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
lastDevicePosition = devicePosition
|
|||
|
|
lastLensType = lensType
|
|||
|
|
updateViewVisibility(devicePosition, lensType)
|
|||
|
|
updateInteractionEnabled()
|
|||
|
|
//如果无需使能或者显示的,也就没有必要切换了。
|
|||
|
|
if (fpvInteractionWidget!!.isInteractionEnabled) {
|
|||
|
|
fpvInteractionWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (lensControlWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
lensControlWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (ndviCameraPanel!!.visibility == View.VISIBLE) {
|
|||
|
|
ndviCameraPanel!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (visualCameraPanel!!.visibility == View.VISIBLE) {
|
|||
|
|
visualCameraPanel!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (autoExposureLockWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
autoExposureLockWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (focusModeWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
focusModeWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (focusExposureSwitchWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
focusExposureSwitchWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (cameraControlsWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
cameraControlsWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (focalZoomWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
focalZoomWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
if (horizontalSituationIndicatorWidget!!.visibility == View.VISIBLE) {
|
|||
|
|
horizontalSituationIndicatorWidget!!.updateCameraSource(devicePosition, lensType)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun updateViewVisibility(
|
|||
|
|
devicePosition: ComponentIndexType,
|
|||
|
|
lensType: CameraLensType
|
|||
|
|
) {
|
|||
|
|
//只在fpv下显示
|
|||
|
|
pfvFlightDisplayWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.VISIBLE else View.INVISIBLE
|
|||
|
|
|
|||
|
|
//fpv下不显示
|
|||
|
|
lensControlWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
ndviCameraPanel!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
visualCameraPanel!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
autoExposureLockWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
focusModeWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
focusExposureSwitchWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
cameraControlsWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
focalZoomWidget!!.visibility =
|
|||
|
|
if (CameraUtil.isFPVTypeView(devicePosition)) View.INVISIBLE else View.VISIBLE
|
|||
|
|
horizontalSituationIndicatorWidget!!.setSimpleModeEnable(
|
|||
|
|
CameraUtil.isFPVTypeView(
|
|||
|
|
devicePosition
|
|||
|
|
)
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
//只在部分len下显示
|
|||
|
|
ndviCameraPanel!!.visibility =
|
|||
|
|
if (CameraUtil.isSupportForNDVI(lensType)) View.VISIBLE else View.INVISIBLE
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Swap the video sources of the FPV and secondary FPV widgets.
|
|||
|
|
*/
|
|||
|
|
private fun swapVideoSource() {
|
|||
|
|
val primarySource = primaryFpvWidget!!.widgetModel.getCameraIndex()
|
|||
|
|
val secondarySource = secondaryFPVWidget!!.widgetModel.getCameraIndex()
|
|||
|
|
//两个source都存在的情况下才进行切换
|
|||
|
|
if (primarySource != ComponentIndexType.UNKNOWN && secondarySource != ComponentIndexType.UNKNOWN) {
|
|||
|
|
primaryFpvWidget!!.updateVideoSource(secondarySource)
|
|||
|
|
secondaryFPVWidget!!.updateVideoSource(primarySource)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun updateInteractionEnabled() {
|
|||
|
|
fpvInteractionWidget!!.isInteractionEnabled = !CameraUtil.isFPVTypeView(
|
|||
|
|
primaryFpvWidget!!.widgetModel.getCameraIndex()
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private data class CameraSource(
|
|||
|
|
val devicePosition: ComponentIndexType,
|
|||
|
|
val lensType: CameraLensType
|
|||
|
|
)
|
|||
|
|
override fun onBackPressed() {
|
|||
|
|
if (mDrawerLayout!!.isDrawerOpen(GravityCompat.END)) {
|
|||
|
|
mDrawerLayout!!.closeDrawers()
|
|||
|
|
} else {
|
|||
|
|
super.onBackPressed()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@RequiresApi(Build.VERSION_CODES.O)
|
|||
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|||
|
|
super.onCreate(savedInstanceState)
|
|||
|
|
requestWindowFeature(Window.FEATURE_NO_TITLE)
|
|||
|
|
// window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|||
|
|
window.setFlags(
|
|||
|
|
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
|||
|
|
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
|||
|
|
)
|
|||
|
|
setContentView(R.layout.activity_main)
|
|||
|
|
isAppStarted = true
|
|||
|
|
|
|||
|
|
|
|||
|
|
// mapWidget = findViewById<MapWidget>(R.id.widget_map)
|
|||
|
|
// mapWidget?.initMapLibreMap(applicationContext, OnMapReadyListener { map: DJIMap ->
|
|||
|
|
// val uiSetting = map.uiSettings
|
|||
|
|
// uiSetting?.setZoomControlsEnabled(false)
|
|||
|
|
// })
|
|||
|
|
// mapWidget?.onCreate(savedInstanceState)
|
|||
|
|
GeoidManager.getInstance().init(this)
|
|||
|
|
WPMZManager.getInstance().init(this)
|
|||
|
|
MqttManager.getInstance().needConnect()
|
|||
|
|
|
|||
|
|
initDJIManager()
|
|||
|
|
initCameraManager()
|
|||
|
|
initCameraStream()
|
|||
|
|
initView()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun initView() {
|
|||
|
|
fpvParentView = findViewById( R.id.fpv_holder)
|
|||
|
|
mDrawerLayout = findViewById( R.id.root_view)
|
|||
|
|
topBarPanel = findViewById( R.id.panel_top_bar)
|
|||
|
|
settingWidget = topBarPanel?.settingWidget
|
|||
|
|
primaryFpvWidget = findViewById( R.id.widget_primary_fpv)
|
|||
|
|
fpvInteractionWidget = findViewById( R.id.widget_fpv_interaction)
|
|||
|
|
secondaryFPVWidget = findViewById( R.id.widget_secondary_fpv)
|
|||
|
|
systemStatusListPanelWidget = findViewById( R.id.widget_panel_system_status_list)
|
|||
|
|
simulatorControlWidget = findViewById( R.id.widget_simulator_control)
|
|||
|
|
lensControlWidget = findViewById<LensControlWidget>( R.id.widget_lens_control)
|
|||
|
|
ndviCameraPanel = findViewById( R.id.panel_ndvi_camera)
|
|||
|
|
visualCameraPanel = findViewById( R.id.panel_visual_camera)
|
|||
|
|
autoExposureLockWidget = findViewById( R.id.widget_auto_exposure_lock)
|
|||
|
|
focusModeWidget = findViewById( R.id.widget_focus_mode)
|
|||
|
|
focusExposureSwitchWidget = findViewById( R.id.widget_focus_exposure_switch)
|
|||
|
|
pfvFlightDisplayWidget = findViewById( R.id.widget_fpv_flight_display_widget)
|
|||
|
|
focalZoomWidget = findViewById( R.id.widget_focal_zoom)
|
|||
|
|
cameraControlsWidget = findViewById( R.id.widget_camera_controls)
|
|||
|
|
horizontalSituationIndicatorWidget =
|
|||
|
|
findViewById(R.id.widget_horizontal_situation_indicator)
|
|||
|
|
// gimbalAdjustDone = findViewById<TextView>( R.id.fpv_gimbal_ok_btn)
|
|||
|
|
gimbalFineTuneWidget = findViewById( R.id.setting_menu_gimbal_fine_tune)
|
|||
|
|
btn_test = findViewById( R.id.btn_test)
|
|||
|
|
btn_test1 = findViewById( R.id.btn_test1)
|
|||
|
|
btn_test?.setOnClickListener {
|
|||
|
|
// MissionManager.getInstance().test()
|
|||
|
|
val message = MQMessage().apply {
|
|||
|
|
megaphonePlayMode = 1
|
|||
|
|
msg_type = 60110
|
|||
|
|
megaphoneVolume=100
|
|||
|
|
megaphoneWord="阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1阿罗斯信息技术公司1"
|
|||
|
|
}
|
|||
|
|
MegaphoneManager.getInstance().startMegaphonePlay(message)
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
btn_test1?.setOnClickListener {
|
|||
|
|
// FlightManager.getInstance().stopPropellerRotation(null)
|
|||
|
|
MegaphoneManager.getInstance().stopPlay(null)
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
initClickListener()
|
|||
|
|
MediaDataCenter.getInstance().cameraStreamManager.addAvailableCameraUpdatedListener(
|
|||
|
|
availableCameraUpdatedListener
|
|||
|
|
)
|
|||
|
|
primaryFpvWidget?.setOnFPVStreamSourceListener(object : FPVStreamSourceListener {
|
|||
|
|
override fun onStreamSourceUpdated(
|
|||
|
|
devicePosition: ComponentIndexType,
|
|||
|
|
lensType: CameraLensType
|
|||
|
|
) {
|
|||
|
|
cameraSourceProcessor.onNext(
|
|||
|
|
CameraSource(devicePosition, lensType)
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
//小surfaceView放置在顶部,避免被大的遮挡
|
|||
|
|
secondaryFPVWidget?.setSurfaceViewZOrderOnTop(true)
|
|||
|
|
secondaryFPVWidget?.setSurfaceViewZOrderMediaOverlay(true)
|
|||
|
|
|
|||
|
|
|
|||
|
|
window.setBackgroundDrawable(ColorDrawable(Color.BLACK))
|
|||
|
|
|
|||
|
|
//实现RTK监测网络,并自动重连机制
|
|||
|
|
DJINetworkManager.getInstance().addNetworkStatusListener(networkStatusListener)
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun isGimableAdjustClicked(broadcastValues: BroadcastValues) {
|
|||
|
|
if (mDrawerLayout!!.isDrawerOpen(GravityCompat.END)) {
|
|||
|
|
mDrawerLayout!!.closeDrawers()
|
|||
|
|
}
|
|||
|
|
horizontalSituationIndicatorWidget!!.visibility = View.GONE
|
|||
|
|
if (gimbalFineTuneWidget != null) {
|
|||
|
|
gimbalFineTuneWidget!!.visibility = View.VISIBLE
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun initClickListener() {
|
|||
|
|
secondaryFPVWidget!!.setOnClickListener { v: View? -> swapVideoSource() }
|
|||
|
|
if (settingWidget != null) {
|
|||
|
|
settingWidget!!.setOnClickListener { v: View? -> toggleRightDrawer() }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Setup top bar state callbacks
|
|||
|
|
val systemStatusWidget = topBarPanel!!.systemStatusWidget
|
|||
|
|
systemStatusWidget?.setOnClickListener { v: View? -> systemStatusListPanelWidget!!.toggleVisibility() }
|
|||
|
|
val simulatorIndicatorWidget = topBarPanel!!.simulatorIndicatorWidget
|
|||
|
|
simulatorIndicatorWidget?.setOnClickListener { v: View? -> simulatorControlWidget!!.toggleVisibility() }
|
|||
|
|
// gimbalAdjustDone!!.setOnClickListener { view: View? ->
|
|||
|
|
// horizontalSituationIndicatorWidget!!.visibility = View.VISIBLE
|
|||
|
|
// if (gimbalFineTuneWidget != null) {
|
|||
|
|
// gimbalFineTuneWidget!!.visibility = View.GONE
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private fun toggleRightDrawer() {
|
|||
|
|
mDrawerLayout!!.openDrawer(GravityCompat.END)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
override fun onDestroy() {
|
|||
|
|
super.onDestroy()
|
|||
|
|
isAppStarted = false
|
|||
|
|
try {
|
|||
|
|
if (MqttManager.getInstance().mqttAndroidClient != null && MqttManager.getInstance().mqttAndroidClient.isConnected) {
|
|||
|
|
MqttManager.getInstance().mqttAndroidClient.unregisterResources()
|
|||
|
|
MqttManager.getInstance().mqttAndroidClient.disconnect() //断开连接
|
|||
|
|
}
|
|||
|
|
} catch (e: MqttException) {
|
|||
|
|
e.printStackTrace()
|
|||
|
|
}
|
|||
|
|
MediaDataCenter.getInstance().cameraStreamManager.removeAvailableCameraUpdatedListener(
|
|||
|
|
availableCameraUpdatedListener
|
|||
|
|
)
|
|||
|
|
DJINetworkManager.getInstance().removeNetworkStatusListener(networkStatusListener)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private val handler: Handler = Handler(Looper.getMainLooper())
|
|||
|
|
private var initTimes=0
|
|||
|
|
private fun initDJIManager() {
|
|||
|
|
val isFlightControllerConnect =
|
|||
|
|
KeyManager.getInstance().getValue(DJIKey.create(FlightControllerKey.KeyConnection))
|
|||
|
|
if (isFlightControllerConnect == null || !isFlightControllerConnect) {
|
|||
|
|
handler.postDelayed({
|
|||
|
|
initDJIManager()
|
|||
|
|
}, 1000)
|
|||
|
|
} else {
|
|||
|
|
initTimes++
|
|||
|
|
LogUtil.log(TAG, "初始化$initTimes")
|
|||
|
|
RTKManager.getInstance().initRTKInfo()
|
|||
|
|
StreamManager.getInstance().initStreamManager()
|
|||
|
|
FlightManager.getInstance().initFlightInfo()
|
|||
|
|
MissionManager.getInstance().initMissionManager()
|
|||
|
|
BatteryManager.getInstance().initBatteryInfo()
|
|||
|
|
MediaManager.getInstance().init()
|
|||
|
|
LEDsSettingsManager.getInstance().initLEDsInfo()
|
|||
|
|
AlternateLandingManager.getInstance().initAlterLandingInfo()
|
|||
|
|
WayLineExecutingInterruptManager.getInstance().initWayLineExecutingInterruptInfo()
|
|||
|
|
CameraManager.getInstance().initCameraInfo()
|
|||
|
|
StickManager.getInstance().initStickInfo()
|
|||
|
|
GimbalManager.getInstance().initGimbalInfo()
|
|||
|
|
OffSiteLandingManager.getInstance().initOffSiteLandingInfo()
|
|||
|
|
RemoteManager.getInstance().initRemoteInfo()
|
|||
|
|
PayloadWidgetManager.getInstance().initPayloadInfo()
|
|||
|
|
NavigationSatelliteSystemManager.getInstance().initNavigationSatelliteSystem()
|
|||
|
|
NavigationSatelliteSystemManager.getInstance().setNavigationSatelliteSystem()
|
|||
|
|
PerceptionManager.getInstance().init()
|
|||
|
|
|
|||
|
|
//ApronArucoDetect.getInstance().init()
|
|||
|
|
|
|||
|
|
if (PreferenceUtils.getInstance().lteEnable){
|
|||
|
|
MLTEManager.getInstance().initLTEManager()
|
|||
|
|
Handler().postDelayed(Runnable { MLTEManager.getInstance().setLTEEnhancedTransmissionType()},3000)
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//这里修改推流逻辑
|
|||
|
|
if (PreferenceUtils.getInstance().customStreamType!=3) {
|
|||
|
|
Handler().postDelayed(Runnable {
|
|||
|
|
if (PreferenceUtils.getInstance().customStreamType==1){
|
|||
|
|
StreamManager.getInstance()
|
|||
|
|
.startLiveWithRTSP()
|
|||
|
|
}else if (PreferenceUtils.getInstance().customStreamType==2){
|
|||
|
|
StreamManager.getInstance()
|
|||
|
|
.startLiveWithCustom()
|
|||
|
|
}else{
|
|||
|
|
LogUtil.log(TAG,"推流方式配置有误")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}, 5000)
|
|||
|
|
}else if(!TextUtils.isEmpty(PreferenceUtils.getInstance().customStreamUrl)){
|
|||
|
|
Handler().postDelayed(Runnable {
|
|||
|
|
StreamManager.getInstance()
|
|||
|
|
.startLiveWithCustom()
|
|||
|
|
}, 5000)
|
|||
|
|
}
|
|||
|
|
val productType =
|
|||
|
|
KeyManager.getInstance().getValue(KeyTools.createKey(ProductKey.KeyProductType))
|
|||
|
|
val cameraType = KeyManager.getInstance().getValue(
|
|||
|
|
KeyTools.createKey(
|
|||
|
|
CameraKey.KeyCameraType,
|
|||
|
|
ComponentIndexType.PORT_1
|
|||
|
|
)
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if (cameraType != null && productType != null) {
|
|||
|
|
LogUtil.log(TAG, "设备类型:" + productType.name + "相机类型:" + cameraType.name)
|
|||
|
|
} else {
|
|||
|
|
LogUtil.log(TAG, "设备类型:" + (productType?.name ?: "未知") + "相机类型:" + (cameraType?.name ?: "未知"))
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private val cameraHandler: Handler = Handler(Looper.getMainLooper())
|
|||
|
|
private var initCameraTimes=0
|
|||
|
|
private fun initCameraManager() {
|
|||
|
|
val isConnect = KeyManager.getInstance()
|
|||
|
|
.getValue(KeyTools.createKey(CameraKey.KeyConnection, ComponentIndexType.PORT_1))
|
|||
|
|
|
|||
|
|
if (isConnect == null || !isConnect) {
|
|||
|
|
cameraHandler.postDelayed({
|
|||
|
|
initDJIManager()
|
|||
|
|
}, 1000)
|
|||
|
|
} else {
|
|||
|
|
initCameraTimes++
|
|||
|
|
LogUtil.log(TAG, "初始化相机$initCameraTimes")
|
|||
|
|
|
|||
|
|
CameraManager.getInstance().initCameraInfo()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// var shouldExecute = true
|
|||
|
|
|
|||
|
|
@SuppressLint("SuspiciousIndentation")
|
|||
|
|
private fun initCameraStream() {
|
|||
|
|
// mainBinding?.svCameraStream?.holder?.addCallback(object : SurfaceHolder.Callback {
|
|||
|
|
// override fun surfaceCreated(holder: SurfaceHolder) {}
|
|||
|
|
// override fun surfaceChanged(
|
|||
|
|
// holder: SurfaceHolder,
|
|||
|
|
// format: Int,
|
|||
|
|
// width: Int,
|
|||
|
|
// height: Int
|
|||
|
|
// ) {
|
|||
|
|
// cameraManager.putCameraStreamSurface(
|
|||
|
|
// ComponentIndexType.PORT_1,
|
|||
|
|
// holder.surface,
|
|||
|
|
// width,
|
|||
|
|
// height,
|
|||
|
|
// ICameraStreamManager.ScaleType.FIX_XY
|
|||
|
|
// )
|
|||
|
|
// }
|
|||
|
|
//
|
|||
|
|
// override fun surfaceDestroyed(holder: SurfaceHolder) {
|
|||
|
|
// cameraManager.removeCameraStreamSurface(holder.surface)
|
|||
|
|
// }
|
|||
|
|
// })
|
|||
|
|
|
|||
|
|
cameraManager.addFrameListener(
|
|||
|
|
ComponentIndexType.PORT_1,
|
|||
|
|
ICameraStreamManager.FrameFormat.YUV420_888
|
|||
|
|
) { frameData, _, _, width, height, _ ->
|
|||
|
|
Movement.getInstance().isVtx=true
|
|||
|
|
//检测到图传
|
|||
|
|
streamReceive=true
|
|||
|
|
// if (shouldExecute) {
|
|||
|
|
|
|||
|
|
if (startArucoType == 1) {
|
|||
|
|
ApronArucoDetect.getInstance()?.detectArucoTags(
|
|||
|
|
height,
|
|||
|
|
width,
|
|||
|
|
frameData,
|
|||
|
|
dictionary,
|
|||
|
|
)
|
|||
|
|
} else if (startArucoType == 2) {
|
|||
|
|
AlternateArucoDetect.getInstance()?.detectArucoTags(
|
|||
|
|
height,
|
|||
|
|
width,
|
|||
|
|
frameData,
|
|||
|
|
dictionary,
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
// }
|
|||
|
|
// shouldExecute = !shouldExecute
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
|||
|
|
fun onEvent(message: String?) {
|
|||
|
|
when (message) {
|
|||
|
|
FLAG_START_DETECT_ARUCO_APRON ->
|
|||
|
|
KeyManager.getInstance().performAction<EmptyMsg>(
|
|||
|
|
KeyTools.createKey<EmptyMsg, EmptyMsg>(FlightControllerKey.KeyStopAutoLanding),
|
|||
|
|
object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
|
|||
|
|
override fun onSuccess(emptyMsg: EmptyMsg?) {
|
|||
|
|
LogUtil.log(TAG, "取消降落,识别机库二维码")
|
|||
|
|
Handler().postDelayed(Runnable {
|
|||
|
|
if (!ApronArucoDetect.getInstance().isTriggerSuccess) {
|
|||
|
|
LogUtil.log(TAG, "图传异常:飞往备降点")
|
|||
|
|
//测试图传丢失
|
|||
|
|
AlternateLandingManager.getInstance().startTaskProcess(null)
|
|||
|
|
}
|
|||
|
|
}, 6000)
|
|||
|
|
if (startArucoType == 1) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
startArucoType = 1
|
|||
|
|
ApronArucoDetect.getInstance().setDetectedBigMarkers()
|
|||
|
|
DroneHelper.getInstance().setGimbalPitchDegree()
|
|||
|
|
//每次触发识别二维码时,为避免获取控制权失败,使多次获取控制权
|
|||
|
|
DroneHelper.getInstance().isVirtualStickEnable = false
|
|||
|
|
DroneHelper.getInstance().setVerticalModeToVelocity()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override fun onFailure(error: IDJIError) {
|
|||
|
|
if (startArucoType == 1) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
startArucoType = 1
|
|||
|
|
LogUtil.log(TAG, "取消降落,识别机库二维码失败:" + Gson().toJson(error))
|
|||
|
|
ApronArucoDetect.getInstance().setDetectedBigMarkers()
|
|||
|
|
DroneHelper.getInstance().setGimbalPitchDegree()
|
|||
|
|
//每次触发识别二维码时,为避免获取控制权失败,使多次获取控制权
|
|||
|
|
DroneHelper.getInstance().isVirtualStickEnable=false
|
|||
|
|
DroneHelper.getInstance().setVerticalModeToVelocity()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
FLAG_START_DETECT_ARUCO_ALTERNATE ->
|
|||
|
|
KeyManager.getInstance().performAction<EmptyMsg>(
|
|||
|
|
KeyTools.createKey<EmptyMsg, EmptyMsg>(FlightControllerKey.KeyStopAutoLanding),
|
|||
|
|
object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
|
|||
|
|
override fun onSuccess(emptyMsg: EmptyMsg?) {
|
|||
|
|
LogUtil.log(TAG, "取消降落,识别备降点二维码")
|
|||
|
|
Handler().postDelayed(Runnable {
|
|||
|
|
if (!AlternateArucoDetect.getInstance().isTriggerSuccess) {
|
|||
|
|
LogUtil.log(TAG, "图传异常:备降点直接降落")
|
|||
|
|
//测试图传丢失
|
|||
|
|
FlightManager.getInstance().startAutoLanding(null)
|
|||
|
|
}
|
|||
|
|
}, 4000)
|
|||
|
|
if (startArucoType == 2) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
startArucoType = 2
|
|||
|
|
DroneHelper.getInstance().setGimbalPitchDegree()
|
|||
|
|
//每次触发识别二维码时,为避免获取控制权失败,使多次获取控制权
|
|||
|
|
DroneHelper.getInstance().isVirtualStickEnable = false
|
|||
|
|
DroneHelper.getInstance().setVerticalModeToVelocity()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override fun onFailure(error: IDJIError) {
|
|||
|
|
if (startArucoType == 2) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
startArucoType = 2
|
|||
|
|
LogUtil.log(
|
|||
|
|
TAG,
|
|||
|
|
"取消降落,识别备降点二维码失败:" + Gson().toJson(error)
|
|||
|
|
)
|
|||
|
|
DroneHelper.getInstance().setGimbalPitchDegree()
|
|||
|
|
//每次触发识别二维码时,为避免获取控制权失败,使多次获取控制权
|
|||
|
|
DroneHelper.getInstance().isVirtualStickEnable=false
|
|||
|
|
DroneHelper.getInstance().setVerticalModeToVelocity()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
FLAG_DOWN_LAND ->
|
|||
|
|
KeyManager.getInstance().performAction<EmptyMsg>(
|
|||
|
|
KeyTools.createKey<EmptyMsg, EmptyMsg>(FlightControllerKey.KeyStartAutoLanding),
|
|||
|
|
object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
|
|||
|
|
override fun onSuccess(emptyMsg: EmptyMsg?) {
|
|||
|
|
startArucoType = 0
|
|||
|
|
LogUtil.log(TAG, "自动降落调用成功")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override fun onFailure(error: IDJIError) {
|
|||
|
|
LogUtil.log(TAG, "自动降落调用失败${error.description()}")
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
FLAG_STOP_ARUCO ->
|
|||
|
|
startArucoType = 0
|
|||
|
|
|
|||
|
|
MqttCallBack.FLAG_RESET_CLEAN_MODE ->
|
|||
|
|
setViewVisibilityWithCleanMode()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
private fun setViewVisibilityWithCleanMode() {
|
|||
|
|
if (PreferenceUtils.getInstance().isCleanMode) {
|
|||
|
|
fpvInteractionWidget?.visibility = View.GONE
|
|||
|
|
horizontalSituationIndicatorWidget?.visibility = View.GONE
|
|||
|
|
gimbalFineTuneWidget?.visibility = View.GONE
|
|||
|
|
ndviCameraPanel?.visibility = View.GONE
|
|||
|
|
visualCameraPanel?.visibility = View.GONE
|
|||
|
|
autoExposureLockWidget?.visibility = View.GONE
|
|||
|
|
focusModeWidget?.visibility = View.GONE
|
|||
|
|
focusExposureSwitchWidget?.visibility = View.GONE
|
|||
|
|
cameraControlsWidget?.visibility = View.GONE
|
|||
|
|
focalZoomWidget?.visibility = View.GONE
|
|||
|
|
// returnHomeWidget?.visibility = View.GONE
|
|||
|
|
// takeOffWidget?.visibility = View.GONE
|
|||
|
|
// lensControlWidget?.visibility = View.GONE
|
|||
|
|
simulatorControlWidget?.visibility = View.GONE
|
|||
|
|
pfvFlightDisplayWidget?.visibility = View.GONE
|
|||
|
|
systemStatusListPanelWidget?.visibility = View.GONE
|
|||
|
|
topBarPanel?.visibility = View.GONE
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|