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 e584d5a332..ce3332b6d2 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 @@ -64,14 +64,6 @@ public interface IOchAutopilotStatusListener { default void onAutopilotIpcConnectStatusChanged(AdasConstants.IpcConnectionStatus status, String reason) { } - /** - * 域控SSM接口接收超时 - * 状态变动时才会回调,默认SSM状态正常 - * - * @param isTimeout true:SSM接口接收超时 false:SSM接口恢复正常 - */ - default void onSsmReceiveTimeout(boolean isTimeout) { - } /** * 工控机主动查询 AdasManager#sendStatusQueryReq(),后会收到如下回调 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 8c31b6a6e9..798d53da68 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 @@ -148,14 +148,6 @@ object OchAutoPilotStatusListenerManager : CallerBase public void onAutopilotDockerInfo(@NonNull String dockerVersion) { } - @Override - public void onSsmReceiveTimeout(boolean isTimeout) { - - } - @Override public void onAutopilotTrajectoryDownloadReq(@NonNull AutopilotControlParameters.AutoPilotLine autoPilotLine, int downloadType) { } - - @Override - public void onFsmReceiveTimeout(boolean isTimeout) { - - } } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index 58990f959e..8308db68b2 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -68,6 +68,7 @@ import com.zhjt.mogo.adas.common.MessageType import com.zhjt.mogo.adas.data.Adas import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.MogoReport +import com.zhjt.mogo.adas.data.bean.NodeStateInfo import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume @@ -1376,7 +1377,7 @@ class MoGoAutopilotControlProvider : return AdasManager.getInstance().sendSeatPressure(driver, copilot, backRow) > -1 } - override fun getNodeStateInfo(name: AdasConstants.NodeName): Adas.NodeStateInfo { + override fun getNodeStateInfo(name: AdasConstants.NodeName): NodeStateInfo { return AdasManager.getInstance().getNodeStateInfo(name) } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 4185d7aa13..7bfb320121 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -29,6 +29,9 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SO import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_TRAJECTORY import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_VEHICLE import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.SSMMsg import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeArriveAtStation import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotGuardian @@ -70,6 +73,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskL import com.mogo.eagle.core.function.call.autopilot.CallerNodeStateListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerV2XListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerV2nNioEventListenerManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuMapMathListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsiListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsmListenerManager @@ -83,11 +87,12 @@ import com.zhidao.support.adas.high.chain.AdasChain import com.zhjt.mogo.adas.data.bean.AdasParam import com.zhidao.support.adas.high.common.ProtocolStatus import com.zhjt.mogo.adas.common.MessageType -import com.zhjt.mogo.adas.data.Adas import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.AdasConstants.NodeExistState import com.zhjt.mogo.adas.data.AiCloudTask import com.zhjt.mogo.adas.data.bean.AutopilotStatistics import com.zhjt.mogo.adas.data.bean.LaunchConditionData +import com.zhjt.mogo.adas.data.bean.NodeStateInfo import com.zhjt.mogo.adas.data.bean.ReceivedAck import com.zhjt.mogo.adas.data.bean.UnableLaunchReason import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable @@ -1007,32 +1012,29 @@ class MoGoAdasListenerImpl : OnAdasListener { * 目前包含状态 节点是否存在;节点是否超时; * SSM 只判断超时状态 * FSM 是否存在;是否超时; + *

+ * 状态变动时才会回调 + * 主动获取状态:{@link AdasManager#getNodeStateInfo(AdasConstants.NodeName)} * - * @param name 节点名称 - * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 + * @param stateInfo 节点状态 + * {@link NodeStateInfo#getNodeState()}包含:未知;存在;不存在; + * {@link NodeStateInfo#getExistState()}包含:正常;超时; */ - override fun onNodeStateInfo(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) { - CallerNodeStateListenerManager.invokeNodeState(name, stateInfo) - } - - /** - * 域控SSM接口接收超时 - * 状态变动时才会回调,默认SSM状态正常 - * - * @param isTimeout true:SSM接口接收超时 false:SSM接口恢复正常 - */ - override fun onSsmReceiveTimeout(isTimeout: Boolean) { - CallerAutoPilotStatusListenerManager.invokeSsmReceiveTimeout(isTimeout) - } - - /** - * 域控FSM接口接收超时 - * 状态变动时才会回调,默认FSM状态正常 前提是存在FSM接口 - * - * @param isTimeout true:FSM接口接收超时 false:FSM接口恢复正常 - */ - override fun onFsm2024ReceiveTimeout(isTimeout: Boolean) { - CallerAutoPilotStatusListenerManager.invokeFsmReceiveTimeout(isTimeout) + override fun onNodeStateInfo(stateInfo: NodeStateInfo) { + CallerNodeStateListenerManager.invokeNodeState(stateInfo) + if (stateInfo.existState != null) { + if (stateInfo.nodeName == AdasConstants.NodeName.SSM) { + //域控SSM接口接收是否超时 + if (stateInfo.existState == NodeExistState.NODE_EXIST_TIMEOUT) { + CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.SSMINFO, SSMMsg(0, "连接超时", "SSM超时无响应", System.currentTimeMillis()))) + } else { + CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.SSMINFO, SSMMsg(0, "连接恢复", "SSM连接恢复", System.currentTimeMillis()))) + } + } else if (stateInfo.nodeName == AdasConstants.NodeName.FSM2024) { + //域控FSM接口接收是否超时 +// (stateInfo.existState == NodeExistState.NODE_EXIST_TIMEOUT) + } + } } /** diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/fsm/FSMImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/fsm/FSMImpl.kt index e325783462..7c25ea9791 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/fsm/FSMImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/fsm/FSMImpl.kt @@ -12,8 +12,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.DateTimeUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.zhjt.mogo.adas.data.Adas import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.bean.NodeStateInfo import com.zhjt.mogo_core_function_devatools.status.entity.FSMStateCode import com.zhjt.mogo_core_function_devatools.status.entity.FSMStatus import com.zhjt.mogo_core_function_devatools.status.flow.IFlow @@ -129,10 +129,10 @@ internal class FSMImpl(ctx: Context) : IFlow(ctx), IMoGoAutopilotStat * @param name 节点名称 * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 */ - override fun onNodeStateInfo(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) { + override fun onNodeStateInfo(stateInfo: NodeStateInfo) { CallerLogger.d( "$M_DEVA$TAG", - "-- onNodeStateInfo[nodeName=$name, stateName=${stateInfo.nodeState.name}] --" + "-- onNodeStateInfo[stateName=${stateInfo.nodeState.name}] --" ) val fsmStatusCode = getStateCodeByNodeStateInfo(stateInfo.nodeState) val fsmStatusDesc = getStateDescByNodeStateInfo(stateInfo.nodeState) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt index 7c598f7dd6..e4240d6ef6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt @@ -32,9 +32,9 @@ import com.mogo.eagle.core.function.msgbox.MsgBoxConfig import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.util.SoundPoolUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.zhjt.mogo.adas.data.Adas import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.AdasConstants.NodeState +import com.zhjt.mogo.adas.data.bean.NodeStateInfo import kotlinx.android.synthetic.main.layout_driver_msg_box_bubble.view.* import java.util.concurrent.atomic.AtomicReference @@ -221,8 +221,8 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor( * @param name 节点名称 * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 */ - override fun onNodeStateInfo(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) { - if (AdasConstants.NodeName.FSM2024 == name) { + override fun onNodeStateInfo(stateInfo: NodeStateInfo) { + if (AdasConstants.NodeName.FSM2024 == stateInfo.nodeName) { fsmNodeState.set(stateInfo.nodeState) } } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt index 9d888f2e26..5eb3f9e5e6 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt @@ -7,6 +7,7 @@ import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider import com.zhjt.mogo.adas.data.Adas import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.bean.NodeStateInfo import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable.IsBootable import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.GetTaskReq import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.StartTaskResp @@ -612,6 +613,6 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { * @param name 节点名称 目前只有SSM和FSM2024 * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; */ - fun getNodeStateInfo(name: AdasConstants.NodeName): Adas.NodeStateInfo + fun getNodeStateInfo(name: AdasConstants.NodeName): NodeStateInfo } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt index b51a0ad17e..770ce62be2 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt @@ -49,21 +49,6 @@ interface IMoGoAutopilotStatusListener { */ fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) {} - /** - * 域控SSM接口接收超时 - * 状态变动时才会回调,默认SSM状态正常 - * @param isTimeout true:SSM接口接收超时 false:SSM接口恢复正常 - */ - fun onSsmReceiveTimeout(isTimeout: Boolean) {} - - /** - * 域控FSM接口接收超时 - * 状态变动时才会回调,默认FSM状态正常 前提是存在FSM接口 - * - * @param isTimeout true:FSM接口接收超时 false:FSM接口恢复正常 - */ - fun onFsmReceiveTimeout(isTimeout: Boolean) {} - /** * 工控机主动查询 AdasManager#sendStatusQueryReq(),后会收到如下回调 */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoNodeStateListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoNodeStateListener.kt index 95b0354766..970541740f 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoNodeStateListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoNodeStateListener.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.api.autopilot -import com.zhjt.mogo.adas.data.Adas -import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.bean.NodeStateInfo /** *节点状态 @@ -17,8 +16,7 @@ interface IMoGoNodeStateListener { * @param name 节点名称 * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 */ - fun onNodeStateInfo(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) - + fun onNodeStateInfo(stateInfo: NodeStateInfo) } \ 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 ec409961da..2577de8509 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 @@ -30,6 +30,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume.Suspend import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirmResp import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.bean.NodeStateInfo import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionResp import com.zhjt.service.chain.ChainLog import com.zhjt.service_biz.BizConfig @@ -927,7 +928,7 @@ object CallerAutoPilotControlManager { * @param name 节点名称 目前只有SSM和FSM2024 * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; */ - fun getNodeStateInfo(name: AdasConstants.NodeName): Adas.NodeStateInfo? { + fun getNodeStateInfo(name: AdasConstants.NodeName): NodeStateInfo? { return providerApi?.getNodeStateInfo(name) } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt index e12e2240ac..4c0895ec04 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt @@ -224,35 +224,6 @@ object CallerAutoPilotStatusListenerManager : CallerBase() { private val mutableMap = mutableMapOf>() + /** + * nodeName传入要监听的节点状态名称,如果传递注册的时候将返回所有节点的状态 + */ fun addNodeStateListener( tag: String, nodeName: Set?, @@ -29,15 +32,15 @@ object CallerNodeStateListenerManager : CallerBase() { super.removeListener(tag) } - fun invokeNodeState(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) { + fun invokeNodeState(stateInfo: NodeStateInfo) { M_LISTENERS.forEach { val names = mutableMap[it.key] val listener = it.value if (names.isNullOrEmpty()) { - listener.onNodeStateInfo(name, stateInfo) + listener.onNodeStateInfo(stateInfo) } else { - if (names.contains(name)) { - listener.onNodeStateInfo(name, stateInfo) + if (names.contains(stateInfo.nodeName)) { + listener.onNodeStateInfo(stateInfo) } } } @@ -47,11 +50,11 @@ object CallerNodeStateListenerManager : CallerBase() { super.doSomeAfterAddListener(tag, listener) mutableMap.forEach { it -> if (it.key == tag) { - val value = it.value - value.forEach { name -> + val names = it.value + names.forEach { name -> val state = CallerAutoPilotControlManager.getNodeStateInfo(name) state?.let { - listener.onNodeStateInfo(name, state) + listener.onNodeStateInfo(state) } } } diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/NodeStateInfo.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/NodeStateInfo.java new file mode 100644 index 0000000000..ef8b6ea660 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/NodeStateInfo.java @@ -0,0 +1,65 @@ +package com.zhjt.mogo.adas.data.bean; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.zhjt.mogo.adas.data.AdasConstants; + +import java.util.Objects; + +public class NodeStateInfo { + private final AdasConstants.NodeName nodeName; //节点名称 + @NonNull + private AdasConstants.NodeState nodeState;//节点主状态 包含:未知;存在;不存在; + @Nullable + private AdasConstants.NodeExistState existState;//节点存在时的状态 null表示未知 + + public NodeStateInfo(AdasConstants.NodeName nodeName, @NonNull AdasConstants.NodeState nodeState) { + this.nodeName = nodeName; + this.nodeState = nodeState; + } + + public AdasConstants.NodeName getNodeName() { + return nodeName; + } + + @NonNull + public AdasConstants.NodeState getNodeState() { + return nodeState; + } + + public void setNodeState(@NonNull AdasConstants.NodeState nodeState) { + this.nodeState = nodeState; + } + + @Nullable + public AdasConstants.NodeExistState getExistState() { + return existState; + } + + public void setExistState(@Nullable AdasConstants.NodeExistState existState) { + this.existState = existState; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NodeStateInfo that = (NodeStateInfo) o; + return nodeName == that.nodeName && nodeState == that.nodeState && existState == that.existState; + } + + @Override + public int hashCode() { + return Objects.hash(nodeName, nodeState, existState); + } + + @Override + public String toString() { + return "NodeStateInfo{" + + "nodeName=" + nodeName + + ", nodeState=" + nodeState + + ", existState=" + existState + + '}'; + } +} diff --git a/libraries/mogo-adas-data/src/main/proto/personal/adas.proto b/libraries/mogo-adas-data/src/main/proto/personal/adas.proto index dd89094207..63d5a4191c 100644 --- a/libraries/mogo-adas-data/src/main/proto/personal/adas.proto +++ b/libraries/mogo-adas-data/src/main/proto/personal/adas.proto @@ -3,7 +3,6 @@ package mogo.telematics.pad; option java_package = "com.zhjt.mogo.adas.data"; import "message_pad.proto"; -import "personal/adas_constants.proto"; //发送的数据ID持久化,只保留最后一条的消息id,每天重新累计 message LastMessage{ @@ -16,10 +15,3 @@ message LastMessage{ message MessageIdInfo{ map lastMessages = 1;// key:data(日期) value:数据 } - -//节点状态信息 -message NodeStateInfo{ - com.zhjt.mogo.adas.data.NodeName nodeName = 1;//节点名称 - com.zhjt.mogo.adas.data.NodeState nodeState = 2;//节点主状态 包含:未知;存在;不存在; - com.zhjt.mogo.adas.data.NodeExistState existState = 3;//节点存在时的状态 -} diff --git a/libraries/mogo-adas-data/src/main/proto/personal/adas_constants.proto b/libraries/mogo-adas-data/src/main/proto/personal/adas_constants.proto index 6489d6853b..65f4d85b09 100644 --- a/libraries/mogo-adas-data/src/main/proto/personal/adas_constants.proto +++ b/libraries/mogo-adas-data/src/main/proto/personal/adas_constants.proto @@ -110,9 +110,8 @@ enum SubscribeType { * 节点名称 */ enum NodeName{ - DEFAULT_NAME = 0;//无用 - SSM = 1;//SSM默认存在 - FSM2024 = 2;//FSM 2024版本的Topic名称 + SSM = 0;//SSM默认存在 + FSM2024 = 1;//FSM 2024版本的Topic名称 } /** diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index 15345036b0..ea5dea5bda 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -19,6 +19,7 @@ import com.zhjt.mogo.adas.common.MessageType; import com.zhjt.mogo.adas.data.Adas; import com.zhjt.mogo.adas.data.AdasConstants; import com.zhjt.mogo.adas.data.bean.AdasParam; +import com.zhjt.mogo.adas.data.bean.NodeStateInfo; import com.zhjt.mogo.adas.data.bean.ReceivedAck; import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable; import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask; @@ -1721,7 +1722,7 @@ public class AdasManager implements IAdasNetCommApi { * @param name 节点名称 目前只有SSM和FSM2024 * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; */ - public Adas.NodeStateInfo getNodeStateInfo(AdasConstants.NodeName name) { + public NodeStateInfo getNodeStateInfo(@NonNull AdasConstants.NodeName name) { return AutopilotAbilityManager.getInstance().getNodeStateInfo(name); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index db5c1f16c5..250bc34d58 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -7,12 +7,12 @@ import com.google.protobuf.ByteString; import com.mogo.support.obu.ObuScene; import com.zhidao.support.adas.high.common.ProtocolStatus; import com.zhjt.mogo.adas.common.MessageType; -import com.zhjt.mogo.adas.data.Adas; import com.zhjt.mogo.adas.data.AdasConstants; import com.zhjt.mogo.adas.data.AiCloudTask; import com.zhjt.mogo.adas.data.bean.AdasParam; import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; import com.zhjt.mogo.adas.data.bean.LaunchConditionData; +import com.zhjt.mogo.adas.data.bean.NodeStateInfo; import com.zhjt.mogo.adas.data.bean.ReceivedAck; import com.zhjt.mogo.adas.data.bean.UnableLaunchReason; import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable; @@ -538,27 +538,15 @@ public interface OnAdasListener { * 目前包含状态 节点是否存在;节点是否超时; * SSM 只判断超时状态 * FSM 是否存在;是否超时; + *

+ * 状态变动时才会回调 + * 主动获取状态:{@link AdasManager#getNodeStateInfo(AdasConstants.NodeName)} * - * @param name 节点名称 - * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 + * @param stateInfo 节点状态 + * {@link NodeStateInfo#getNodeState()}包含:未知;存在;不存在; + * {@link NodeStateInfo#getExistState()}包含:正常;超时; */ - void onNodeStateInfo(@NonNull AdasConstants.NodeName name, @NonNull Adas.NodeStateInfo stateInfo); - - /** - * 域控SSM接口接收超时 - * 状态变动时才会回调,默认SSM状态正常 - * - * @param isTimeout true:SSM接口接收超时 false:SSM接口恢复正常 - */ - void onSsmReceiveTimeout(boolean isTimeout); - - /** - * 域控FSM接口接收超时 - * 状态变动时才会回调,默认FSM状态正常 前提是存在FSM接口 - * - * @param isTimeout true:FSM接口接收超时 false:FSM接口恢复正常 - */ - void onFsm2024ReceiveTimeout(boolean isTimeout); + void onNodeStateInfo(@NonNull NodeStateInfo stateInfo); /** * 是否有能力启动自动驾驶 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility440.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityFSM.java similarity index 95% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility440.java rename to libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityFSM.java index b3de145659..9f9640393c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility440.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityFSM.java @@ -13,7 +13,7 @@ import fsm.Fsm2024; * 是否可以启动自动驾驶能力检测 工控机版本>=4400&&(isJinlv||isJinlvM1||isJinlvM) 使用此类 * 目前监控了FSM2024状态 */ -public class AutopilotAbility440 { +public class AutopilotAbilityFSM { private final String TAG = this.getClass().getSimpleName(); @NonNull @@ -21,7 +21,7 @@ public class AutopilotAbility440 { private OnAutopilotAbilityListener listener; - public AutopilotAbility440(@NonNull AutopilotAbilityManager manager) { + public AutopilotAbilityFSM(@NonNull AutopilotAbilityManager manager) { this.manager = manager; } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java index d2eda2522b..2d6d4c23e2 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java @@ -1,6 +1,8 @@ package com.zhidao.support.adas.high.common.autopilot.ability; +import android.text.TextUtils; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -9,18 +11,20 @@ import com.zhidao.support.adas.high.AdasOptions; import com.zhidao.support.adas.high.BuildConfig; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.CupidLogUtils; -import com.zhjt.mogo.adas.data.Adas; import com.zhjt.mogo.adas.data.AdasConstants; import com.zhjt.mogo.adas.data.bean.LaunchConditionData; +import com.zhjt.mogo.adas.data.bean.NodeStateInfo; import com.zhjt.mogo.adas.data.bean.UnableLaunchReason; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import chassis.Chassis; import chassis.ChassisStatesOuterClass; @@ -59,17 +63,19 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { private AutopilotAbility330 autopilotAbility330; private AutopilotAbility350And360 autopilotAbility350And360; private AutopilotAbility360 autopilotAbility360; - private AutopilotAbility440 autopilotAbility440; + private AutopilotAbilityFSM autopilotAbilityFsm; private Timer startTimer; private Timer timeoutTimer;//SSM和FSM超时计时器 private long ssmReceiveTime;//SSM接收时间 private long fsmReceiveTime;//FSM接收时间 + private final AtomicBoolean isInitAutopilotAbility = new AtomicBoolean(false);//是否初始化完成 private final AtomicBoolean isOldSsmTimeout = new AtomicBoolean(false);//SSM是否超时 老状态 private final AtomicBoolean isOldFsmTimeout = new AtomicBoolean(false);//FSM是否超时 老状态 private final AtomicBoolean isInitCarConfig = new AtomicBoolean(false);//车辆信息是否初始化 - private final Map nodeStateInfos = new HashMap<>(); - private boolean isSupportFSM2024 = false; + private final AtomicInteger isSupportFSM2024 = new AtomicInteger(-1);//-1:未初始化 0:不支持 1:通过SSM V2判断支持 2:通过FSM数据源判断支持 + private final Map nodeStateInfos = new ConcurrentHashMap<>(); + private AutopilotAbilityManager() { } @@ -85,6 +91,20 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { return INSTANCE; } + private void initStartData() { + nodeStateInfos.clear(); + NodeStateInfo ssmInfo = new NodeStateInfo(AdasConstants.NodeName.SSM, AdasConstants.NodeState.NODE_EXIST); + ssmInfo.setExistState(AdasConstants.NodeExistState.NODE_EXIST_NORMAL); + nodeStateInfos.put(AdasConstants.NodeName.SSM, ssmInfo); + nodeStateInfos.put(AdasConstants.NodeName.FSM2024, new NodeStateInfo(AdasConstants.NodeName.FSM2024, AdasConstants.NodeState.NODE_UNKNOWN)); + } + + private void initStopData() { + nodeStateInfos.clear(); + nodeStateInfos.put(AdasConstants.NodeName.SSM, new NodeStateInfo(AdasConstants.NodeName.SSM, AdasConstants.NodeState.NODE_UNKNOWN)); + nodeStateInfos.put(AdasConstants.NodeName.FSM2024, new NodeStateInfo(AdasConstants.NodeName.FSM2024, AdasConstants.NodeState.NODE_UNKNOWN)); + } + public void setLaunchAutopilotGear(Set launchAutopilotGear) { if (autopilotAbility230 != null) { autopilotAbility230.setLaunchAutopilotGear(launchAutopilotGear); @@ -156,7 +176,7 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { */ public void setStatusInfo(SystemStatusInfo.StatusInfo statusInfo) { ssmReceiveTime = System.currentTimeMillis(); - onCallSSMTimeout(false); + onCallSSMTimeout(AdasConstants.SsmSource.SSM_VER1, false); if (autopilotAbility250 != null) { autopilotAbility250.setStatusInfo(statusInfo); } @@ -167,7 +187,8 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { public void setStatusInfo(SsmInfo.SsmStatusInf statusInfo) { ssmReceiveTime = System.currentTimeMillis(); - onCallSSMTimeout(false); + onCallSSMTimeout(AdasConstants.SsmSource.SSM_VER2, false); + detectionTopicExistence(statusInfo); if (autopilotAbility350And360 != null) { autopilotAbility350And360.setStatusInfo(statusInfo); } @@ -177,10 +198,10 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { } public void setFSM2024State(Fsm2024.FSMStateMsg fsmState) { - fsmReceiveTime = System.currentTimeMillis(); + updateFSMNormalStateFromFSM(); onCallFSMTimeout(false); - if (autopilotAbility440 != null) { - autopilotAbility440.setFSMState(fsmState); + if (autopilotAbilityFsm != null) { + autopilotAbilityFsm.setFSMState(fsmState); } } @@ -219,67 +240,85 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { * @param name 节点名称 目前只有SSM和FSM2024 * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; */ - public Adas.NodeStateInfo getNodeStateInfo(AdasConstants.NodeName name) { - Adas.NodeStateInfo state = nodeStateInfos.get(name); + public NodeStateInfo getNodeStateInfo(@NonNull AdasConstants.NodeName name) { + NodeStateInfo state = nodeStateInfos.get(name); if (state == null) { - state = Adas.NodeStateInfo.newBuilder().setNodeState(AdasConstants.NodeState.NODE_UNKNOWN).build(); - nodeStateInfos.put(name, state); + return new NodeStateInfo(name, AdasConstants.NodeState.NODE_UNKNOWN); } return state; } - //检测节点是否存在 - private void detectionTopicExistence() { - + /** + * 检测节点是否存在 + * 判断条件:SSM消息中冷启动完成(statusInfo.getAutoPilotReady()==ture) + * 后查询自动驾驶关键节点列表中是否有包含fsm节点名称 + */ + private void detectionTopicExistence(SsmInfo.SsmStatusInf statusInfo) { + if (isSupportFSM2024.get() == -1) { + if (statusInfo.getAutoPilotReady()) { + List list = statusInfo.getAutoPilotUnreadyListList(); + boolean isSupport = false; + for (SsmInfo.NodeInf info : list) { + String name = info.getNodeName(); + if (!TextUtils.isEmpty(name) && name.toLowerCase().contains("fsm")) { + //支持FSM + isSupport = true; + break; + } + } + updateFSMStateFromSSM(isSupport ? 1 : 0); + } + } } private void initAutopilotAbility() { - stopAllTimer(); - isSupportFSM2024 = false; - if (mapVersion >= 40400 && (isJinlv || isJinlvM1 || isJinlvM2)) { - isSupportFSM2024 = true; - CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:440"); - if (autopilotAbility440 == null) { - autopilotAbility440 = new AutopilotAbility440(this); - autopilotAbility440.start(this); - } - } else if (mapVersion >= 30600 && isFutianSweeper) { - CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:360清扫车专用"); - if (autopilotAbility360 == null) { - autopilotAbility360 = new AutopilotAbility360(this); - autopilotAbility360.start(this); - } - } else if ((mapVersion >= 30500 && (isJinlvM1 || isHQ)) || mapVersion >= 30600) { - CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:350和360共用"); - if (autopilotAbility350And360 == null) { - autopilotAbility350And360 = new AutopilotAbility350And360(this); - autopilotAbility350And360.start(this); - } + if (!isInitAutopilotAbility.get()) { + isInitAutopilotAbility.set(true); + stopAllTimer(); + if (isSupportFSM2024.get() > 0) { + CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:FSM版本"); + if (autopilotAbilityFsm == null) { + autopilotAbilityFsm = new AutopilotAbilityFSM(this); + autopilotAbilityFsm.start(this); + } + } else if (mapVersion >= 30600 && isFutianSweeper) { + CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:360清扫车专用"); + if (autopilotAbility360 == null) { + autopilotAbility360 = new AutopilotAbility360(this); + autopilotAbility360.start(this); + } + } else if ((mapVersion >= 30500 && (isJinlvM1 || isHQ)) || mapVersion >= 30600) { + CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:350和360共用"); + if (autopilotAbility350And360 == null) { + autopilotAbility350And360 = new AutopilotAbility350And360(this); + autopilotAbility350And360.start(this); + } - } else if (mapVersion >= 30300 && isFutianSweeper) {//目前只有MAP330的清扫车用的新的FSM状态原因查询 - CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:330清扫车专用"); - if (autopilotAbility330 == null) { - autopilotAbility330 = new AutopilotAbility330(this, mapVersion); - autopilotAbility330.start(this); + } else if (mapVersion >= 30300 && isFutianSweeper) {//目前只有MAP330的清扫车用的新的FSM状态原因查询 + CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:330清扫车专用"); + if (autopilotAbility330 == null) { + autopilotAbility330 = new AutopilotAbility330(this, mapVersion); + autopilotAbility330.start(this); + } + } else if (mapVersion >= 20500) { + CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:250"); + if (autopilotAbility250 == null) { + autopilotAbility250 = new AutopilotAbility250(this); + autopilotAbility250.start(this); + } + } else { + CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:230"); + if (autopilotAbility230 == null) { + autopilotAbility230 = new AutopilotAbility230(this); + autopilotAbility230.start(this); + } } - } else if (mapVersion >= 20500) { - CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:250"); - if (autopilotAbility250 == null) { - autopilotAbility250 = new AutopilotAbility250(this); - autopilotAbility250.start(this); - } - } else { - CupidLogUtils.log(TAG, "能否启动自驾能力检测使用版本:230"); if (autopilotAbility230 == null) { - autopilotAbility230 = new AutopilotAbility230(this); - autopilotAbility230.start(this); + startTimeoutTimer();//MAP230及以下没有SSM和FSM所以不需要超时 } + Set launchAutopilotGear = getGearPositions(); + setLaunchAutopilotGear(launchAutopilotGear); } - if (autopilotAbility230 == null) { - startTimeoutTimer();//MAP230及以下没有SSM和FSM所以不需要超时 - } - Set launchAutopilotGear = getGearPositions(); - setLaunchAutopilotGear(launchAutopilotGear); } private @Nullable Set getGearPositions() { @@ -307,6 +346,130 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { return launchAutopilotGear; } + + /** + * 连接工控机成功调用此函数,如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测 + * 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑 + */ + public synchronized void start() { + isInitAutopilotAbility.set(false); + initStartData(); + if (startTimer == null) { + startTimer = new Timer(); + startTimer.schedule(new TimerTask() { + @Override + public void run() { + if (!isInitCarConfig.get() && AdasManager.getInstance().getIpcConnectionStatus() == AdasConstants.IpcConnectionStatus.CONNECTED) { + mapVersion = 20300; + isSupportFSM2024.set(-1); + initAutopilotAbility(); + isInitAutopilotAbility.set(false); + } + } + }, 15000L);//15秒原因:需要后去CarConfig 对象,两个地方调用initAutopilotAbility(); 初始化 一个在这,另一个在setCarConfig(),如果setCarConfig() 证明获取版本还未成功,获取版本会重试3次每次间隔四秒 + } + } + + /** + * 连接工控机成功调用此函数,如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测 + * 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑 + */ + public synchronized void startTimeoutTimer() { + if (timeoutTimer == null) { + ssmReceiveTime = System.currentTimeMillis(); + fsmReceiveTime = System.currentTimeMillis(); + timeoutTimer = new Timer(); + timeoutTimer.schedule(new TimerTask() { + @Override + public void run() { + //SSM超时检测 + long timeDifference = System.currentTimeMillis() - ssmReceiveTime; + if (timeDifference >= DEFAULT_TIMEOUT) { + onCallSSMTimeout(AdasConstants.SsmSource.SSM_UNKNOWN, true); + //超时 + if (autopilotAbility250 != null) { + autopilotAbility250.onCallTimeout(); + } + if (autopilotAbility330 != null) { + autopilotAbility330.onCallTimeout(); + } + if (autopilotAbility350And360 != null) { + autopilotAbility350And360.onCallTimeout(); + } + if (autopilotAbility360 != null) { + autopilotAbility360.onCallTimeout(); + } + } + //FSM超时检测 + if (isSupportFSM2024.get() > 0) { + timeDifference = System.currentTimeMillis() - fsmReceiveTime; + if (timeDifference >= DEFAULT_TIMEOUT) { + onCallFSMTimeout(true); + if (autopilotAbilityFsm != null) { + autopilotAbilityFsm.onCallFsmTimeout(); + } + } + } + } + }, 1000L, DEFAULT_TIMEOUT); + } + } + + + private void updateFSMNormalStateFromFSM() { + fsmReceiveTime = System.currentTimeMillis(); + if (isSupportFSM2024.get() != 2) { + updateFSMSupportState(2, AdasConstants.NodeExistState.NODE_EXIST_NORMAL); + } + } + + private void updateFSMStateFromSSM(int isSupport) { + if (isSupportFSM2024.get() == -1) { + updateFSMSupportState(isSupport, null); + } + } + + private void updateFSMSupportState(int isSupport, AdasConstants.NodeExistState existState) { + isSupportFSM2024.set(isSupport); + CupidLogUtils.i(TAG, "是否支持FSM=" + isSupport); + if (isSupport > 0) { + isInitAutopilotAbility.set(false); + initAutopilotAbility(); + } + NodeStateInfo info = getNodeStateInfo(AdasConstants.NodeName.FSM2024); + info.setNodeState(isSupport > 0 ? AdasConstants.NodeState.NODE_EXIST : AdasConstants.NodeState.NODE_NOT_EXIST); + info.setExistState(existState); + listener.onNodeStateInfo(info); + } + + private synchronized void onCallSSMTimeout(AdasConstants.SsmSource source, boolean isTimeout) { + if (isTimeout != isOldSsmTimeout.get()) { + isOldSsmTimeout.set(isTimeout); + if (!isTimeout) { + if (source == AdasConstants.SsmSource.SSM_VER1) { + //SSM 1版本时 不支持FSM + CupidLogUtils.i(TAG, "SSM版本1不支持FSM"); + updateFSMStateFromSSM(0); + } + } + NodeStateInfo info = getNodeStateInfo(AdasConstants.NodeName.SSM); + info.setNodeState(AdasConstants.NodeState.NODE_EXIST); + info.setExistState(isTimeout ? AdasConstants.NodeExistState.NODE_EXIST_TIMEOUT : AdasConstants.NodeExistState.NODE_EXIST_NORMAL); + listener.onNodeStateInfo(info); + } + } + + private synchronized void onCallFSMTimeout(boolean isTimeout) { + if (isTimeout != isOldFsmTimeout.get()) { + isOldFsmTimeout.set(isTimeout); + NodeStateInfo info = getNodeStateInfo(AdasConstants.NodeName.FSM2024); + info.setNodeState(AdasConstants.NodeState.NODE_EXIST); + info.setExistState(isTimeout ? AdasConstants.NodeExistState.NODE_EXIST_TIMEOUT : AdasConstants.NodeExistState.NODE_EXIST_NORMAL); + listener.onNodeStateInfo(info); + } + } + + private void stop230() { if (autopilotAbility230 != null) { autopilotAbility230.stop(); @@ -343,9 +506,9 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { } private void stop440() { - if (autopilotAbility440 != null) { - autopilotAbility440.stop(); - autopilotAbility440 = null; + if (autopilotAbilityFsm != null) { + autopilotAbilityFsm.stop(); + autopilotAbilityFsm = null; } } @@ -356,97 +519,13 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { } } - /** - * 连接工控机成功调用此函数,如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测 - * 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑 - */ - public synchronized void start() { - if (startTimer == null) { - startTimer = new Timer(); - startTimer.schedule(new TimerTask() { - @Override - public void run() { - if (!isInitCarConfig.get() && AdasManager.getInstance().getIpcConnectionStatus() == AdasConstants.IpcConnectionStatus.CONNECTED) { - mapVersion = 20300; - initAutopilotAbility(); - } - } - }, 15000L);//15秒原因:需要后去CarConfig 对象,两个地方调用initAutopilotAbility(); 初始化 一个在这,另一个在setCarConfig(),如果setCarConfig() 证明获取版本还未成功,获取版本会重试3次每次间隔四秒 - } - - } - - private void stopTimeoutTimer() { if (timeoutTimer != null) { - isOldSsmTimeout.set(false); - isOldFsmTimeout.set(false); - ssmReceiveTime = 0; - fsmReceiveTime = 0; timeoutTimer.cancel(); timeoutTimer = null; } } - /** - * 连接工控机成功调用此函数,如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测 - * 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑 - */ - public synchronized void startTimeoutTimer() { - if (timeoutTimer == null) { - ssmReceiveTime = System.currentTimeMillis(); - fsmReceiveTime = System.currentTimeMillis(); - timeoutTimer = new Timer(); - timeoutTimer.schedule(new TimerTask() { - @Override - public void run() { - //SSM超时检测 - long timeDifference = System.currentTimeMillis() - ssmReceiveTime; - if (timeDifference >= DEFAULT_TIMEOUT) { - onCallSSMTimeout(true); - //超时 - if (autopilotAbility250 != null) { - autopilotAbility250.onCallTimeout(); - } - if (autopilotAbility330 != null) { - autopilotAbility330.onCallTimeout(); - } - if (autopilotAbility350And360 != null) { - autopilotAbility350And360.onCallTimeout(); - } - if (autopilotAbility360 != null) { - autopilotAbility360.onCallTimeout(); - } - } - //FSM超时检测 - if (isSupportFSM2024) { - timeDifference = System.currentTimeMillis() - fsmReceiveTime; - if (timeDifference >= DEFAULT_TIMEOUT) { - onCallFSMTimeout(true); - if (autopilotAbility440 != null) { - autopilotAbility440.onCallFsmTimeout(); - } - } - } - } - }, 1000L, DEFAULT_TIMEOUT); - } - } - - private synchronized void onCallSSMTimeout(boolean isTimeout) { - if (isTimeout != isOldSsmTimeout.get()) { - isOldSsmTimeout.set(isTimeout); - listener.onSsmReceiveTimeout(isTimeout); - } - } - - private synchronized void onCallFSMTimeout(boolean isTimeout) { - if (isTimeout != isOldFsmTimeout.get()) { - isOldFsmTimeout.set(isTimeout); - listener.onFsm2024ReceiveTimeout(isTimeout); - } - } - private void stopAllTimer() { stopTimeoutTimer(); stopTimer(); @@ -456,10 +535,17 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { stop350And360(); stop360(); stop440(); + isOldSsmTimeout.set(false); + isOldFsmTimeout.set(false); + ssmReceiveTime = 0; + fsmReceiveTime = 0; } public synchronized void stop() { stopAllTimer(); + initStopData(); + isInitAutopilotAbility.set(false); + isSupportFSM2024.set(-1); isInitCarConfig.set(false); mapVersion = -1; isFutianSweeper = false; @@ -469,7 +555,6 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { isJinlvM1 = false; isJinlvM2 = false; isKaiwo = false; - isSupportFSM2024 = false; } }