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 c1aa570cf7..58990f959e 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 @@ -65,6 +65,7 @@ import com.zhidao.support.adas.high.chain.AdasChain import com.zhidao.support.adas.high.common.Constants import com.zhidao.support.adas.high.common.CupidLogUtils 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.sweeper.bootable.SweeperBootable @@ -1375,4 +1376,8 @@ class MoGoAutopilotControlProvider : return AdasManager.getInstance().sendSeatPressure(driver, copilot, backRow) > -1 } + override fun getNodeStateInfo(name: AdasConstants.NodeName): Adas.NodeStateInfo { + return AdasManager.getInstance().getNodeStateInfo(name) + } + } \ No newline at end of file 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 6c3939a688..76a61886c1 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 @@ -14,7 +14,6 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_MAP_PARAM import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_PARALLEL -import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_ACTIONS import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_OBJECTS import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_RECORD import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ROUTE @@ -73,6 +72,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StitchedV import com.mogo.eagle.core.function.call.autopilot.CallerStartAutopilotFailedListenerManager.invokeStartAutopilotFailed import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskListenerManager +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.obu.CallerObuMapMathListenerManager @@ -88,6 +88,8 @@ 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.AiCloudTask import com.zhjt.mogo.adas.data.bean.AutopilotStatistics import com.zhjt.mogo.adas.data.bean.LaunchConditionData @@ -1022,6 +1024,19 @@ class MoGoAdasListenerImpl : OnAdasListener { CallerV2nNioEventListenerManager.invokeV2nNioCongestionEvent(congestion) } + /** + * 所连接的域控的节点状态信息 + * 目前包含状态 节点是否存在;节点是否超时; + * SSM 只判断超时状态 + * FSM 是否存在;是否超时; + * + * @param name 节点名称 + * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 + */ + override fun onNodeStateInfo(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) { + CallerNodeStateListenerManager.invokeNodeState(name, stateInfo) + } + /** * 域控SSM接口接收超时 * 状态变动时才会回调,默认SSM状态正常 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 e01d426054..9d888f2e26 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 @@ -5,14 +5,15 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult 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.sweeper.bootable.SweeperBootable.IsBootable import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.GetTaskReq import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.StartTaskResp -import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume.SuspendResumeTaskReq -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.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionResp +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirmResp +import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume.SuspendResumeTaskReq +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp import mogo.telematics.pad.MessagePad import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest @@ -604,4 +605,13 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { * @param backRow 后排是否有人 */ fun sendSeatPressure(driver: Boolean,copilot: Boolean,backRow: Boolean): Boolean + + /** + * 查询节点状态 + * + * @param name 节点名称 目前只有SSM和FSM2024 + * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; + */ + fun getNodeStateInfo(name: AdasConstants.NodeName): Adas.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/IMoGoNodeStateListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoNodeStateListener.kt new file mode 100644 index 0000000000..95b0354766 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoNodeStateListener.kt @@ -0,0 +1,24 @@ +package com.mogo.eagle.core.function.api.autopilot + +import com.zhjt.mogo.adas.data.Adas +import com.zhjt.mogo.adas.data.AdasConstants + +/** + *节点状态 + */ +interface IMoGoNodeStateListener { + + /** + * 所连接的域控的节点状态信息 + * 目前包含状态 节点是否存在;节点是否超时; + * SSM 只判断超时状态 + * FSM 是否存在;是否超时; + * + * @param name 节点名称 + * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 + */ + fun onNodeStateInfo(name: AdasConstants.NodeName, stateInfo: Adas.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 0b9082de1c..ec409961da 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 @@ -22,6 +22,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.util.AppStateManager import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.zhjt.mogo.adas.data.Adas 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 @@ -919,4 +920,14 @@ object CallerAutoPilotControlManager { fun sendSeatPressure(driver: Boolean,copilot: Boolean,backRow: Boolean): Boolean?{ return providerApi?.sendSeatPressure(driver, copilot, backRow) } + + /** + * 查询节点状态 + * + * @param name 节点名称 目前只有SSM和FSM2024 + * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; + */ + fun getNodeStateInfo(name: AdasConstants.NodeName): Adas.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/CallerNodeStateListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerNodeStateListenerManager.kt new file mode 100644 index 0000000000..cb25ac4f53 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerNodeStateListenerManager.kt @@ -0,0 +1,62 @@ +package com.mogo.eagle.core.function.call.autopilot + +import com.mogo.eagle.core.function.api.autopilot.IMoGoNodeStateListener +import com.mogo.eagle.core.function.call.base.CallerBase +import com.zhjt.mogo.adas.data.Adas +import com.zhjt.mogo.adas.data.AdasConstants + +/** + *节点状态 + */ +object CallerNodeStateListenerManager : CallerBase() { + private val mutableMap = mutableMapOf>() + + fun addNodeStateListener( + tag: String, + nodeName: Set?, + listener: IMoGoNodeStateListener + ) { + if (!nodeName.isNullOrEmpty()) { + mutableMap[tag] = nodeName + } + super.addListener(tag, listener) + } + + fun removeNodeStateListener(tag: String) { + if (mutableMap.containsKey(tag)) { + mutableMap.remove(tag) + } + super.removeListener(tag) + } + + fun invokeNodeState(name: AdasConstants.NodeName, stateInfo: Adas.NodeStateInfo) { + M_LISTENERS.forEach { + val names = mutableMap[it.key] + val listener = it.value + if (names.isNullOrEmpty()) { + listener.onNodeStateInfo(name, stateInfo) + } else { + if (names.contains(name)) { + listener.onNodeStateInfo(name, stateInfo) + } + } + } + } + + override fun doSomeAfterAddListener(tag: String, listener: IMoGoNodeStateListener) { + super.doSomeAfterAddListener(tag, listener) + mutableMap.forEach { it -> + if (it.key == tag) { + val value = it.value + value.forEach { name -> + val state = CallerAutoPilotControlManager.getNodeStateInfo(name) + state?.let { + listener.onNodeStateInfo(name, state) + } + } + } + } + } + + +} \ No newline at end of file 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 63d5a4191c..dd89094207 100644 --- a/libraries/mogo-adas-data/src/main/proto/personal/adas.proto +++ b/libraries/mogo-adas-data/src/main/proto/personal/adas.proto @@ -3,6 +3,7 @@ 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{ @@ -15,3 +16,10 @@ 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 3b62c37d9c..6489d6853b 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 @@ -22,7 +22,7 @@ enum MapSystemParamType{ SEAT_STATE = 15;//15: 座椅状态(int) 0:表示仅主驾位有人,1:表示仅副驾位有人,2:表示主驾和副驾同时有人,3:表示仅后排有人,4:表示主驾有人+后排有人,5:表示副驾有人+后排有人,6:表示主驾和副驾同时有人+后排有人,7: 所有座位都无人, 255:缺省 OVERTAKE_MAX_SPEED = 16;//16: 超车的最大速度阈值(double, m/s, 范围[3, 12.5]) FAULT_SIMULATION_CMD = 17;//17: 故障模拟指令(int) default:0(do nothing), 1:线控失效 - COLLISION_REPORTING = 18;//18: 碰撞上报(null) + COLLISION_REPORTING = 18;//18: 碰撞上报(null) TODO 废弃,使用:message CollisionReport PARK_VEH_CROSS = 19;//19: 会车开关(bool) 0: off 1:on 默认0 PARK_VEH_OVERTAKE = 20;//20: 超车开关(bool) 0: off 1:on 默认0 } @@ -106,3 +106,28 @@ enum SubscribeType { UNSUBSCRIBE = 2;//取消订阅 } +/** + * 节点名称 + */ +enum NodeName{ + DEFAULT_NAME = 0;//无用 + SSM = 1;//SSM默认存在 + FSM2024 = 2;//FSM 2024版本的Topic名称 +} + +/** + * 节点状态 + */ +enum NodeState{ + NODE_UNKNOWN = 0;//未知,未连接或SSM超时 + NODE_NOT_EXIST = 1;//节点不存在 + NODE_EXIST = 2;//节点存在 +} + +/** + * 节点存在时的状态 + */ +enum NodeExistState{ + NODE_EXIST_NORMAL = 0;//节点正常 仅表示数据接收正常 + NODE_EXIST_TIMEOUT = 1;//节点数据接收超时 +} \ No newline at end of file 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 e9981eb79d..15345036b0 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 @@ -1715,6 +1715,16 @@ public class AdasManager implements IAdasNetCommApi { return mChannel == null ? -1L : mChannel.sendParallelDrivingReq(reqNo, parallelRequest); } + /** + * 查询节点状态 + * + * @param name 节点名称 目前只有SSM和FSM2024 + * @return 状态 SSM只能查询到超时状态;FSM2024可以查询到节点是否存在状态以及超时状态; + */ + public Adas.NodeStateInfo getNodeStateInfo(AdasConstants.NodeName name) { + return AutopilotAbilityManager.getInstance().getNodeStateInfo(name); + } + /** * 获取域控PING 地址列表 * 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 d5f4941523..db5c1f16c5 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,6 +7,7 @@ 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; @@ -532,6 +533,17 @@ public interface OnAdasListener { */ void onV2nNioCongestionEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.V2nCongestion congestion); + /** + * 所连接的域控的节点状态信息 + * 目前包含状态 节点是否存在;节点是否超时; + * SSM 只判断超时状态 + * FSM 是否存在;是否超时; + * + * @param name 节点名称 + * @param stateInfo 节点状态信息 包含:未知;存在;不存在; 以及存在的一些状态 + */ + void onNodeStateInfo(@NonNull AdasConstants.NodeName name, @NonNull Adas.NodeStateInfo stateInfo); + /** * 域控SSM接口接收超时 * 状态变动时才会回调,默认SSM状态正常 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 09b5a83ce1..d2eda2522b 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 @@ -9,11 +9,14 @@ 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.UnableLaunchReason; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.Timer; import java.util.TimerTask; @@ -65,6 +68,7 @@ public class AutopilotAbilityManager implements OnAutopilotAbilityListener { 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 AutopilotAbilityManager() { @@ -209,6 +213,25 @@ 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); + if (state == null) { + state = Adas.NodeStateInfo.newBuilder().setNodeState(AdasConstants.NodeState.NODE_UNKNOWN).build(); + nodeStateInfos.put(name, state); + } + return state; + } + + //检测节点是否存在 + private void detectionTopicExistence() { + + } private void initAutopilotAbility() { stopAllTimer();