diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/IOchAutopilotStatusListener.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/IOchAutopilotStatusListener.java index 719120e389..96a2161695 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/IOchAutopilotStatusListener.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/IOchAutopilotStatusListener.java @@ -96,4 +96,6 @@ public interface IOchAutopilotStatusListener { */ default void onAutopilotStatusResponseFromCan(int state) {} + default void onFsmCanStartAutopilot(boolean can){} + } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt index c24a241088..2c74531658 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt @@ -5,36 +5,24 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.msgbox.AutopilotMsg import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.function.api.autopilot.IMoGoFsm2024Listener -import com.mogo.eagle.core.function.api.autopilot.IMoGoReceiveReceivedAckListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager -import com.mogo.eagle.core.function.call.autopilot.CallerFsm2024ListenerManager -import com.mogo.eagle.core.function.call.autopilot.CallerReceiveReceivedAckListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.manager.autopilot.OCHAdasAbilityManager import com.mogo.och.common.module.manager.autopilot.autopilot.bean.SessionWithTime import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.manager.distance.TrajectoryAndDistanceManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager -import com.zhjt.mogo.adas.common.MessageType -import com.zhjt.mogo.adas.data.bean.ReceivedAck -import com.zhjt.mogo.adas.data.bean.ReceivedAck.Status -import fsm.Fsm2024 -import java.util.concurrent.atomic.AtomicLong import java.util.concurrent.atomic.AtomicReference -object OchAutoPilotManager : IMoGoReceiveReceivedAckListener, IMoGoFsm2024Listener { +object OchAutoPilotManager { const val TAG = "OchAutoPilotManager" private val globalSessionId = AtomicReference() - private val fsmBackSessionId = AtomicLong(-1L) init { - CallerReceiveReceivedAckListenerManager.addListener(TAG,this) - CallerFsm2024ListenerManager.addListener(TAG,this) + } @JvmStatic @@ -101,7 +89,7 @@ object OchAutoPilotManager : IMoGoReceiveReceivedAckListener, IMoGoFsm2024Listen } fun clearGlobalSessionId(log:String){ - OchChainLogManager.writeChainLogAutopilot("自驾流程","清理SessiongId${globalSessionId}_${fsmBackSessionId}_${log}") + OchChainLogManager.writeChainLogAutopilot("自驾流程","清理SessiongId${globalSessionId}_${OchAutoPilotStatusListenerManager.fsmBackSessionId}_${log}") globalSessionId.set(null) } @@ -109,36 +97,21 @@ object OchAutoPilotManager : IMoGoReceiveReceivedAckListener, IMoGoFsm2024Listen fun startAutoPilot(controlParameters: AutopilotControlParameters?): Long { val sessionId = CallerAutoPilotControlManager.startAutoPilot(controlParameters) globalSessionId.set(SessionWithTime(sessionId,System.currentTimeMillis())) - fsmBackSessionId.set(-1L) + OchAutoPilotStatusListenerManager.fsmBackSessionId.set(-1L) OchAutopilotAnalytics.triggerStartAutopilotParameters(controlParameters, sessionId) return sessionId } - // 启动自驾底盘反馈信息 - override fun onReceiveReceivedAck(receivedAck: ReceivedAck) { - if (receivedAck.messageType == MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ) { - OchAutopilotAnalytics.triggerStartAutopilotParametersAck(receivedAck.toString(),receivedAck.status == Status.NORMAL) - } - } - - /** - * - */ - override fun onFSM2024State(fsmState: Fsm2024.FSMStateMsg) { - fsmBackSessionId.set(fsmState.failToPilotSessionId) - CallerLogger.e(TAG,"收到FSM2024的SeesiongId:${fsmState.failToPilotSessionId}") - } - /** * 启动自驾失败切 FSM返回的Session和启动SessionId 不同 */ fun checkStartSessionAndFailSessionId(){ val sessionInfo = globalSessionId.get() if(sessionInfo!=null) { - if (sessionInfo.sessionId != fsmBackSessionId.get()) { + if (sessionInfo.sessionId != OchAutoPilotStatusListenerManager.fsmBackSessionId.get()) { OchAutopilotAnalytics.triggerStartAutopilotFailCheckSessionDiff( sessionInfo, - fsmBackSessionId.get() + OchAutoPilotStatusListenerManager.fsmBackSessionId.get() ) } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt index d6ff962296..18937f6391 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt @@ -3,9 +3,14 @@ package com.mogo.och.common.module.manager.autopilot.autopilot import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoFsm2024Listener +import com.mogo.eagle.core.function.api.autopilot.IMoGoReceiveReceivedAckListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerFsm2024ListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerReceiveReceivedAckListenerManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.StringUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.R @@ -14,20 +19,27 @@ import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.manager.autopilot.trajectory.TrajectoryManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.CallerBase +import com.zhjt.mogo.adas.common.MessageType import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.MogoReport +import com.zhjt.mogo.adas.data.bean.ReceivedAck +import com.zhjt.mogo.adas.data.bean.ReceivedAck.Status +import fsm.Fsm2024 import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg import system_master.SsmInfo import system_master.SystemStatusInfo import java.lang.Exception +import java.util.concurrent.atomic.AtomicLong import kotlin.properties.Delegates object OchAutoPilotStatusListenerManager : CallerBase(),IMoGoAutopilotStatusListener, - (Boolean) -> Unit { + (Boolean) -> Unit, IMoGoFsm2024Listener, IMoGoReceiveReceivedAckListener { const val TAG = "OCHAutoPilotStatusListenerManager" + val fsmBackSessionId = AtomicLong(-1L) + private var canStartAutopilot:Boolean? by Delegates.observable(null) { _, oldValue, newValue -> if (oldValue != newValue) { M_LISTENERS.forEach { @@ -36,6 +48,18 @@ object OchAutoPilotStatusListenerManager : CallerBase + if (oldValue != newValue) { + M_LISTENERS.forEach { + val listener = it.value + listener.onFsmCanStartAutopilot(newValue) + } + } + } + + val canStartAutopilotFromFSM:Boolean + get() = _canStartAutopilotFromFSM + private var _autopilotState: Int by Delegates.observable(0) { _, oldValue, newValue -> if (oldValue != newValue) { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { @@ -67,6 +91,8 @@ object OchAutoPilotStatusListenerManager : CallerBase { - if (!CallerAutoPilotControlManager.isCanStartAutopilot(false)) {// 不可用 + if (!CallerAutoPilotControlManager.isCanStartAutopilot(false) && !OchAutoPilotStatusListenerManager.canStartAutopilotFromFSM) {// 不可用 this.viewCallback?.autopilotDisable() } else {// 部分可用 this.viewCallback?.canStartAutopilot()