diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 4bdf09e2fa..81c6695621 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -39,7 +39,6 @@ import com.tencent.matrix.trace.config.TraceConfig import com.zhjt.mogo_core_function_devatools.apm.* import com.mogo.eagle.core.function.api.upgrade.* import com.mogo.weak.network.SdtManager -import com.zhjt.mogo.adas.data.bean.ReceivedAck.Status import com.zhjt.mogo_core_function_devatools.adas.PowerOffManager import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig @@ -60,6 +59,7 @@ import com.zhjt.mogo_core_function_devatools.perf.MoGoCpuUsageProviderImpl import com.zhjt.mogo_core_function_devatools.report.IPCReportManager.Companion.iPCReportManager import com.zhjt.mogo_core_function_devatools.scene.SceneManager.Companion.sceneManager import com.zhjt.mogo_core_function_devatools.status.StatusManager +import com.zhjt.mogo_core_function_devatools.status.entity.IAutopilotPreLaunchStatus import com.zhjt.mogo_core_function_devatools.status.entity.RouteDownloadStatus import com.zhjt.mogo_core_function_devatools.status.ui.AutoPilotLaunchBeforeView import com.zhjt.mogo_core_function_devatools.strict.* @@ -71,7 +71,6 @@ import com.zhjt.mogo_core_function_devatools.weaknetwork.WeakNetworkStrategy import com.zhjt.service.chain.ChainLog import java.lang.ref.WeakReference import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.CopyOnWriteArrayList @Route(path = MogoServicePaths.PATH_DEVA_TOOLS) class DevaToolsProvider : IDevaToolsProvider { @@ -102,14 +101,28 @@ class DevaToolsProvider : IDevaToolsProvider { private var container: WeakReference? = null private val downloadCallbacks by lazy { ConcurrentHashMap Unit>>() } + private val startAutopilotCallbacks by lazy { ConcurrentHashMap Unit>>() } private val statusListener by lazy { object : StatusManager.IStatusListener { override fun onStatusChanged(data: List, hasException: Boolean) { - data.filterIsInstance(RouteDownloadStatus::class.java).forEach { s -> - downloadCallbacks.values.flatten().forEach { listener -> - listener.invoke(s.state.ordinal) + var hasExceptionForAutopilotBefore = false + data.forEach { s -> + if (s is RouteDownloadStatus) { + runCatching { + downloadCallbacks.values.flatten().forEach { listener -> + listener.invoke(s.state.ordinal) + } + } } + if (s is IAutopilotPreLaunchStatus && s.isException()) { + hasExceptionForAutopilotBefore = true + runCatching { startAutopilotCallbacks.values.flatten().forEach { it.invoke(false) } } + return@forEach + } + } + if (!hasExceptionForAutopilotBefore) { + runCatching { startAutopilotCallbacks.values.flatten().forEach { it.invoke(true) } } } } } @@ -518,4 +531,12 @@ class DevaToolsProvider : IDevaToolsProvider { override fun unRegisterRouteDownloadListener(tag: String) { downloadCallbacks.remove(tag) } + + override fun registerStartAutopilotStateListener(tag: String, block: (isCanStartAutopilot: Boolean) -> Unit) { + startAutopilotCallbacks.getOrPut(tag) { ArrayList() } += block + } + + override fun unRegisterStartAutopilotStateListener(tag: String) { + startAutopilotCallbacks.remove(tag) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt index 9029fbfd80..b30e8d8f4a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt @@ -1,5 +1,7 @@ package com.zhjt.mogo_core_function_devatools.status.entity +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.zhjt.mogo_core_function_devatools.status.entity.RouteState.RouteFailed import com.zhjt.mogo_core_function_devatools.status.entity.RouteState.RouteNone import com.zhjt.mogo_core_function_devatools.status.entity.RouteState.RouteStart @@ -311,7 +313,7 @@ data class SteerStatus(val angle: Float, var isError: Boolean = false): Status() override fun isException(): Boolean { - return isError + return isError && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING } override fun equals(other: Any?): Boolean { @@ -339,7 +341,7 @@ data class SteerStatus(val angle: Float, var isError: Boolean = false): Status() data class AcceleratorStatus(val angle: Float, var isError: Boolean = false): Status(), IAutopilotPreLaunchStatus { override fun isException(): Boolean { - return isError + return isError && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING } override fun equals(other: Any?): Boolean { @@ -369,7 +371,7 @@ data class AcceleratorStatus(val angle: Float, var isError: Boolean = false): St data class BrakeStatus(val angle: Float, var isError: Boolean = false): Status(), IAutopilotPreLaunchStatus { override fun isException(): Boolean { - return isError + return isError && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING } override fun equals(other: Any?): Boolean { @@ -398,7 +400,7 @@ data class BrakeStatus(val angle: Float, var isError: Boolean = false): Status() data class DoubleFlashStatus(val type: Int, var isError: Boolean = false): Status(), IAutopilotPreLaunchStatus { override fun isException(): Boolean { - return isError + return isError && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING } override fun equals(other: Any?): Boolean { @@ -426,7 +428,7 @@ data class DoubleFlashStatus(val type: Int, var isError: Boolean = false): Statu data class GearStatus(val value: Int, var isError: Boolean = false): Status(), IAutopilotPreLaunchStatus { override fun isException(): Boolean { - return isError + return isError && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING } override fun equals(other: Any?): Boolean { @@ -462,7 +464,7 @@ enum class RouteState { data class RouteDownloadStatus(val lineId: Long = -1, val state: RouteState = RouteNone): Status(), IAutopilotPreLaunchStatus { override fun isException(): Boolean { - return state == RouteStart || state == RouteFailed + return (state == RouteStart || state == RouteFailed) && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING } override fun equals(other: Any?): Boolean { diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index 2039e57d4c..6553a4f88b 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -299,4 +299,8 @@ interface IDevaToolsProvider : IProvider { fun registerRouteDownloadListener(tag: String, block:(state: Int) -> Unit) fun unRegisterRouteDownloadListener(tag: String) + + fun registerStartAutopilotStateListener(tag: String, block: (isCanStartAutopilot: Boolean) -> Unit) + + fun unRegisterStartAutopilotStateListener(tag: String) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index d1c91474d8..191186628b 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -70,6 +70,21 @@ object CallerAutoPilotControlManager { * @param controlParameters 开启自动驾驶的控制参数 */ fun startAutoPilot(controlParameters: AutopilotControlParameters?) { + if (controlParameters == null) { + //LogUtils.eTag(TAG, "自动驾驶控制参数异常,请检查参数信息") + return + } + providerApi?.startAutoPilot(controlParameters) + // 更新记录在全局的控制参数 + CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(controlParameters) + } + + /** + * 启自驾前,是否要拦截 + * @param isShowTip true: 展示Toast+语音提示; false:不展示Toast+语音提示 + * + */ + fun isCanStartAutopilot(isShowTip: Boolean): Boolean { /** * 方向盘: 1<<0 * 油门 : 1<<1 @@ -80,49 +95,52 @@ object CallerAutoPilotControlManager { */ val exceptionValue = CallerDevaToolsManager.getExceptionStatusBeforeLaunchAutopilot() if (exceptionValue != 0) { - val sb = StringBuilder("请检查车辆") - if ((exceptionValue and 1) != 0) { - sb.append("方向盘$") - } - if (((exceptionValue and (1 shl 1)) != 0)) { - sb.append("油门$") - } - if ((exceptionValue and (1 shl 2)) != 0) { - sb.append("刹车$") - } - if ((exceptionValue and (1 shl 3)) != 0) { - sb.append("双闪$") - } - if ((exceptionValue and (1 shl 4)) != 0) { - sb.append("档位$") - } - if ((exceptionValue and (1 shl 5)) != 0 || ((exceptionValue and (1 shl 6)) != 0)) { - sb.setLength(0) - sb.append("轨迹未就绪,请稍后重试") - } - val voiceText = sb.toString().let { str -> - val count = str.count { it == '$' } - if (count == 1) { - str.replace("$", "") - } else { - str.removeSuffix("$").replace("$", "、") + if (isShowTip) { + val sb = StringBuilder("请检查车辆") + if ((exceptionValue and 1) != 0) { + sb.append("方向盘$") + } + if (((exceptionValue and (1 shl 1)) != 0)) { + sb.append("油门$") + } + if ((exceptionValue and (1 shl 2)) != 0) { + sb.append("刹车$") + } + if ((exceptionValue and (1 shl 3)) != 0) { + sb.append("双闪$") + } + if ((exceptionValue and (1 shl 4)) != 0) { + sb.append("档位$") + } + if ((exceptionValue and (1 shl 5)) != 0 || ((exceptionValue and (1 shl 6)) != 0)) { + sb.setLength(0) + sb.append("轨迹未就绪,请稍后重试") + } + val voiceText = sb.toString().let { str -> + val count = str.count { it == '$' } + if (count == 1) { + str.replace("$", "") + } else { + str.removeSuffix("$").replace("$", "、") + } + } + Logger.d(TAG, "voiceText: $voiceText") + ToastUtils.showShort(voiceText) + AppStateManager.currentActivity()?.also { + AIAssist.getInstance(it).speakTTSVoice(voiceText) } } - Logger.d(TAG, "voiceText: $voiceText") - ToastUtils.showShort(voiceText) - AppStateManager.currentActivity()?.also { - AIAssist.getInstance(it).speakTTSVoice(voiceText) - } - return + return false } + return true + } - if (controlParameters == null) { - //LogUtils.eTag(TAG, "自动驾驶控制参数异常,请检查参数信息") - return - } - providerApi?.startAutoPilot(controlParameters) - // 更新记录在全局的控制参数 - CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(controlParameters) + fun addStartAutopilotStateListener(tag: String, listener: (Boolean) -> Unit) { + CallerDevaToolsManager.registerStartAutopilotStateListener(tag, listener) + } + + fun removeStartAutopilotStateListener(tag: String) { + CallerDevaToolsManager.unRegisterStartAutopilotStateListener(tag) } /** diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index 7167789343..6d82bdb6b6 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -367,4 +367,12 @@ object CallerDevaToolsManager { fun getExceptionStatusBeforeLaunchAutopilot(): Int { return devaToolsProviderApi?.getExceptionStatusBeforeLaunchAutopilot() ?: 0 } + + fun registerStartAutopilotStateListener(tag: String, block: (isCanStartAutopilot: Boolean) -> Unit) { + devaToolsProviderApi?.registerStartAutopilotStateListener(tag, block) + } + + fun unRegisterStartAutopilotStateListener(tag: String) { + devaToolsProviderApi?.unRegisterStartAutopilotStateListener(tag) + } } \ No newline at end of file