list = nodeFaultList.getNodeList();
- StringBuilder builder = new StringBuilder();
for (SystemStatusInfo.NodeInfo info : list) {
- builder.append(info.getNodeName());
+ String nodeName = info.getNodeName();
int state = info.getState();
if (state < AutopilotAbilityManager.NODE_INFO_STATE.length) {
- builder.append(AutopilotAbilityManager.NODE_INFO_STATE[state]);
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE[state]);
} else {
- builder.append("未知异常 ");
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
}
- unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, builder.toString());
- builder.setLength(0);
}
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
@@ -145,7 +142,7 @@ public class AutopilotAbility330 {
}
}
if (unableAutopilotReasons == null || unableAutopilotReasons.isEmpty()) {
- unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "FSM未给出原因");
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "FSM数据异常");
}
}
}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java
new file mode 100644
index 0000000000..0b94ccc7b7
--- /dev/null
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java
@@ -0,0 +1,147 @@
+package com.zhidao.support.adas.high.common.autopilot.ability;
+
+import androidx.annotation.Nullable;
+
+import com.zhidao.support.adas.high.AdasManager;
+import com.zhidao.support.adas.high.common.CupidLogUtils;
+import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
+
+import java.util.ArrayList;
+
+import chassis.Chassis;
+import chassis.ChassisStatesOuterClass;
+import system_master.SsmInfo;
+
+/**
+ * 是否可以启动自动驾驶能力检测 工控机版本>=350&&(isHQ||isJinlvM1) || 工控机版本>=360&&!isFutianSweeper 使用此类
+ * 目前监控了定频SSM的数据和FSM状态原因查询
+ * 没有使用监控事件报告的原因是因为,部分异常没进行正常恢复通知,例如收到了异常监控数据,但是异常恢复之后没有恢复的通知
+ *
+ */
+public class AutopilotAbility350And360 {
+ private static final String TAG = AutopilotAbility250.class.getSimpleName();
+ private ChassisStatesOuterClass.ChassisStates chassisStates;
+ private int masterVersion = -1;//Master版本
+ private OnAutopilotAbilityListener listener;
+
+ protected interface OnAutopilotAbilityListener {
+ void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList unableAutopilotReasons);
+
+ }
+
+ protected AutopilotAbility350And360() {
+ this.masterVersion = -1;
+ }
+
+
+ protected void setStatusInfo(SsmInfo.SsmStatusInf statusInfo) {
+
+ onCallback(statusInfo);
+ }
+
+ protected void setChassisStates(ChassisStatesOuterClass.ChassisStates chassisStates) {
+ this.chassisStates = chassisStates;
+ }
+
+ private void onCallback(SsmInfo.SsmStatusInf statusInfo) {
+ boolean isAutopilotAbility = true;//是否能启动自动驾驶
+ ArrayList unableAutopilotReasons = null;//不能启动自动驾驶原因
+ //检测节点状态相关
+ if (statusInfo != null) {
+ if (masterVersion == -1 && statusInfo.hasMasterVersion()) {
+ //截取Master Version
+ masterVersion = AdasManager.getInstance().parseVersion(false, statusInfo.getMasterVersion());
+ }
+ CupidLogUtils.i(TAG, "MasterVersion=" + masterVersion);
+ //SSM 3版本兼容
+ if (masterVersion > 2 && statusInfo.hasAutoPilotReady() && statusInfo.hasAutoPilotUnreadyReason()) {
+ isAutopilotAbility = statusInfo.getAutoPilotReady();
+ if (!isAutopilotAbility) {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
+ }
+ } else if (masterVersion > 1 && statusInfo.hasAutoPilotReady()) {//如果 maser version 大于1,还需要判断AutoPilotReady字段是否存在,以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行
+ isAutopilotAbility = statusInfo.getAutoPilotReady();
+ if (!isAutopilotAbility) {
+ int count = statusInfo.getAutoPilotUnreadyListCount();
+ if (count > 0) {
+ for (int i = 0; i < count; i++) {
+ SsmInfo.NodeInf info = statusInfo.getAutoPilotUnreadyList(i);
+ String nodeName = info.getNodeName();
+ int state = info.getState().getNumber();
+ if (state < AutopilotAbilityManager.NODE_INFO_STATE_FIXED_FREQUENCY.length) {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE_FIXED_FREQUENCY[state]);
+ } else {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
+ }
+ }
+ } else {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
+ }
+ }
+ } else {
+ SsmInfo.ModeState modeState = statusInfo.getModeState();
+ if (modeState != SsmInfo.ModeState.MODE_RUN_UNREADY && modeState != SsmInfo.ModeState.MODE_RUN_READY) {
+ isAutopilotAbility = false;
+ String unableAutopilotReason = null;
+ if (modeState == SsmInfo.ModeState.MODE_STOP_UNREADY) {
+ unableAutopilotReason = "系统处于停止模式(未就绪)";
+ } else if (modeState == SsmInfo.ModeState.MODE_STOP_READY) {
+ unableAutopilotReason = "系统处于停止模式";
+ } else if (modeState == SsmInfo.ModeState.MODE_IDLE_UNREADY) {
+ unableAutopilotReason = "系统处于空闲模式(未就绪)";
+ } else if (modeState == SsmInfo.ModeState.MODE_IDLE_READY) {
+ unableAutopilotReason = "系统处于空闲模式";
+ } else {
+ unableAutopilotReason = "未知系统模式";
+ }
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, unableAutopilotReason);
+ }
+ }
+ } else {
+ isAutopilotAbility = false;//是否能启动自动驾驶
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "SSM数据异常");
+ }
+ //检测底盘相关
+ if (chassisStates != null) {
+ if (chassisStates.hasBrakeSystemStates()) {
+ float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition();
+ if (brake > 0) {
+ isAutopilotAbility = false;
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "制动踏板被踩下");
+ }
+ }
+ if (chassisStates.hasGearSystemStates()) {
+ Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition();
+ if (!AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear)) {
+ isAutopilotAbility = false;
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "档位异常");
+ }
+ }
+ //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段
+
+// //电子驻车制动系统
+// if (chassisStates.hasEpbSystemStates()) {
+// ChassisStatesOuterClass.EPBSystemStates epb = chassisStates.getEpbSystemStates();
+// if (epb.hasEpbEnableState()){
+// epb.getEpbWorkState();
+// }
+// }
+
+ }
+ if (listener != null) {
+ listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
+ }
+ }
+
+ protected void start(OnAutopilotAbilityListener listener) {
+ this.listener = listener;
+ }
+
+ protected void stop() {
+ this.chassisStates = null;
+ this.masterVersion = -1;
+ this.listener = null;
+ }
+
+
+}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility360.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility360.java
new file mode 100644
index 0000000000..37ea146528
--- /dev/null
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility360.java
@@ -0,0 +1,134 @@
+package com.zhidao.support.adas.high.common.autopilot.ability;
+
+import android.text.TextUtils;
+
+import androidx.annotation.Nullable;
+
+import com.zhidao.support.adas.high.AdasManager;
+import com.zhidao.support.adas.high.common.CupidLogUtils;
+import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
+
+import java.util.ArrayList;
+
+import function_state_management.FSMStatusReasonQueryOuterClass;
+import system_master.SsmInfo;
+
+/**
+ * 是否可以启动自动驾驶能力检测 工控机版本>=360&&isFutianSweeper 使用此类
+ * TODO 目前只用于清扫车,其他车型需要MAP支持 FSM的相关功能
+ * 目前监控了定频SSM的数据和FSM状态原因查询
+ * 没有使用监控事件报告的原因是因为,部分异常没进行正常恢复通知,例如收到了异常监控数据,但是异常恢复之后没有恢复的通知
+ */
+public class AutopilotAbility360 {
+ private static final String TAG = AutopilotAbility360.class.getSimpleName();
+
+ private volatile FSMStatusReasonQueryOuterClass.FSMStatusReasonRespond fsmStatusReasonRespond;//自动驾驶状态为OFF的原因
+ private int masterVersion = -1;//Master版本
+ private OnAutopilotAbilityListener listener;
+
+ protected interface OnAutopilotAbilityListener {
+ void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList unableAutopilotReasons);
+
+
+ }
+
+ protected AutopilotAbility360() {
+ this.masterVersion = -1;
+ }
+
+ protected synchronized void setFsmStatusReasonRespond(FSMStatusReasonQueryOuterClass.FSMStatusReasonRespond fsmStatusReasonRespond) {
+ this.fsmStatusReasonRespond = fsmStatusReasonRespond;
+ }
+
+ protected void setStatusInfo(SsmInfo.SsmStatusInf statusInfo) {
+ onCallback(statusInfo);
+ }
+
+
+ private void onCallback(SsmInfo.SsmStatusInf statusInfo) {
+ boolean isAutopilotAbility = true;//是否能启动自动驾驶
+ ArrayList unableAutopilotReasons = null;//不能启动自动驾驶原因
+ //检测节点状态相关
+ if (statusInfo != null) {
+ if (masterVersion == -1 && statusInfo.hasMasterVersion()) {
+ //截取Master Version
+ masterVersion = AdasManager.getInstance().parseVersion(false, statusInfo.getMasterVersion());
+ }
+ CupidLogUtils.i(TAG, "MasterVersion=" + masterVersion);
+ //SSM 3版本兼容
+ if (masterVersion > 2 && statusInfo.hasAutoPilotReady() && statusInfo.hasAutoPilotUnreadyReason()) {
+ isAutopilotAbility = statusInfo.getAutoPilotReady();
+ if (!isAutopilotAbility) {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
+ }
+ } else if (masterVersion > 1 && statusInfo.hasAutoPilotReady()) {//如果 maser version 大于1,还需要判断AutoPilotReady字段是否存在,以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行
+ isAutopilotAbility = statusInfo.getAutoPilotReady();
+ if (!isAutopilotAbility) {
+ int count = statusInfo.getAutoPilotUnreadyListCount();
+ if (count > 0) {
+ for (int i = 0; i < count; i++) {
+ SsmInfo.NodeInf info = statusInfo.getAutoPilotUnreadyList(i);
+ String nodeName = info.getNodeName();
+ int state = info.getState().getNumber();
+ if (state < AutopilotAbilityManager.NODE_INFO_STATE_FIXED_FREQUENCY.length) {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE_FIXED_FREQUENCY[state]);
+ } else {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
+ }
+ }
+ } else {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
+ }
+ }
+ } else {
+ SsmInfo.ModeState modeState = statusInfo.getModeState();
+ if (modeState != SsmInfo.ModeState.MODE_RUN_UNREADY && modeState != SsmInfo.ModeState.MODE_RUN_READY) {
+ isAutopilotAbility = false;
+ String unableAutopilotReason = null;
+ if (modeState == SsmInfo.ModeState.MODE_STOP_UNREADY) {
+ unableAutopilotReason = "系统处于停止模式(未就绪)";
+ } else if (modeState == SsmInfo.ModeState.MODE_STOP_READY) {
+ unableAutopilotReason = "系统处于停止模式";
+ } else if (modeState == SsmInfo.ModeState.MODE_IDLE_UNREADY) {
+ unableAutopilotReason = "系统处于空闲模式(未就绪)";
+ } else if (modeState == SsmInfo.ModeState.MODE_IDLE_READY) {
+ unableAutopilotReason = "系统处于空闲模式";
+ } else {
+ unableAutopilotReason = "未知系统模式";
+ }
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, unableAutopilotReason);
+ }
+ }
+ } else {
+ isAutopilotAbility = false;//是否能启动自动驾驶
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "SSM数据异常");
+ }
+ if (fsmStatusReasonRespond != null) {
+ int count = fsmStatusReasonRespond.getFsmStatusReasonRespondCount();
+ if (count > 0) {
+ isAutopilotAbility = false;
+ for (int i = 0; i < count; i++) {
+ String respond = fsmStatusReasonRespond.getFsmStatusReasonRespond(i);
+ if (!TextUtils.isEmpty(respond)) {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.FSM, respond);
+ }
+ }
+ if (unableAutopilotReasons == null || unableAutopilotReasons.isEmpty()) {
+ unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "FSM数据异常");
+ }
+ }
+ }
+ if (listener != null) {
+ listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
+ }
+ }
+
+ protected void start(OnAutopilotAbilityListener listener) {
+ this.listener = listener;
+ }
+
+ protected void stop() {
+ this.masterVersion = -1;
+ this.listener = null;
+ }
+}
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 14e567760e..08b2f45622 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
@@ -2,6 +2,7 @@ package com.zhidao.support.adas.high.common.autopilot.ability;
import android.os.Handler;
import android.os.Message;
+import android.util.Log;
import androidx.annotation.Nullable;
@@ -20,6 +21,7 @@ import chassis.Chassis;
import chassis.ChassisStatesOuterClass;
import function_state_management.FSMStatusReasonQueryOuterClass;
import mogo.telematics.pad.MessagePad;
+import system_master.SsmInfo;
import system_master.SystemStatusInfo;
/**
@@ -29,21 +31,26 @@ import system_master.SystemStatusInfo;
*
* 此定时器不能停止 鹰眼中存在UI更新依赖循环查询系统状态
*/
-public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotAbilityListener, AutopilotAbility250.OnAutopilotAbilityListener, AutopilotAbility330.OnAutopilotAbilityListener {
+public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotAbilityListener, AutopilotAbility250.OnAutopilotAbilityListener, AutopilotAbility330.OnAutopilotAbilityListener, AutopilotAbility350And360.OnAutopilotAbilityListener, AutopilotAbility360.OnAutopilotAbilityListener {
private static final String TAG = AutopilotAbilityManager.class.getSimpleName();
protected static final int WHAT_TIMEOUT = 0;
protected static final int DEFAULT_TIMEOUT = 2500;
protected static final long DEFAULT_DETECTION_TIME = 3 * 1000L;//默认检测周期
- protected static final String[] NODE_INFO_STATE = {"未知状态 ", "依赖未就绪 ", "启动中 ", "运行 ", "停止 ", "无法启动状态 ", "人为启动状态 ", "人为关闭状态 "};
+ protected static final String[] NODE_INFO_STATE = {"未知状态", "依赖未就绪", "启动中", "运行", "停止", "无法启动状态", "人为启动状态", "人为关闭状态"};
+ protected static final String[] NODE_INFO_STATE_FIXED_FREQUENCY = {"未知状态", "依赖未就绪", "启动中", "运行", "停止", "无法启动状态", "非自动启动状态", "非自动关闭状态"};
private static volatile AutopilotAbilityManager INSTANCE;
private OnAdasListener listener;
private Handler handler;
private OnAutopilotAbilityListener onAutopilotAbilityListener;
private int mapVersion = -1;//工控机版本
private boolean isFutianSweeper = false;//是否是福田清扫车
+ private boolean isJinlvM1 = false;//是否是M1
+ private boolean isHQ = false;//是否是HQ
private AutopilotAbility230 autopilotAbility230;
private AutopilotAbility250 autopilotAbility250;
private AutopilotAbility330 autopilotAbility330;
+ private AutopilotAbility350And360 autopilotAbility350And360;
+ private AutopilotAbility360 autopilotAbility360;
private Timer startTimer;
/**
* 不能启动自动驾驶的档位
@@ -106,6 +113,8 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
public void setCarConfig(MessagePad.CarConfigResp carConfig) {
mapVersion = carConfig.getMapVersion();
isFutianSweeper = carConfig.getIsFutianSweeper();
+ isJinlvM1 = carConfig.getIsJinlvM1();
+ isHQ = carConfig.getIsHQ();
if (mapVersion != -1) {
stopTimer();
CupidLogUtils.i(TAG, "工控机版本=" + mapVersion);
@@ -171,6 +180,15 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
}
}
+ public void setStatusInfo(SsmInfo.SsmStatusInf statusInfo) {
+ if (autopilotAbility350And360 != null) {
+ autopilotAbility350And360.setStatusInfo(statusInfo);
+ }
+ if (autopilotAbility360 != null) {
+ autopilotAbility360.setStatusInfo(statusInfo);
+ }
+ }
+
/**
* 底盘状态更新
*
@@ -183,6 +201,9 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
if (autopilotAbility250 != null) {
autopilotAbility250.setChassisStates(chassisStates);
}
+ if (autopilotAbility350And360 != null) {
+ autopilotAbility350And360.setChassisStates(chassisStates);
+ }
}
/**
@@ -194,6 +215,9 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
if (autopilotAbility330 != null) {
autopilotAbility330.setFsmStatusReasonRespond(fsmStatusReasonRespond);
}
+ if (autopilotAbility360 != null) {
+ autopilotAbility360.setFsmStatusReasonRespond(fsmStatusReasonRespond);
+ }
}
public void onHandleMessage(Message msg) {
@@ -208,27 +232,54 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
}
private void initAutopilotAbility() {
- //目前只有MAP330的清扫车用的新的FSM状态原因查询
- if (mapVersion >= 30300 && isFutianSweeper) {
- CupidLogUtils.i(TAG, "是否可以启动自动驾驶能力检测使用330版本");
+ if (mapVersion >= 30600 && isFutianSweeper) {
+ Log.i(TAG, "能否启动自驾能力检测使用版本:360清扫车专用");
stop230();
stop250();
+ stop330();
+ stop350And360();
+ if (autopilotAbility360 == null) {
+ autopilotAbility360 = new AutopilotAbility360();
+ autopilotAbility360.start(this);
+ }
+
+ } else if ((mapVersion >= 30500 && (isJinlvM1 || isHQ)) || mapVersion >= 30600) {
+ Log.i(TAG, "能否启动自驾能力检测使用版本:350和360共用");
+ stop230();
+ stop250();
+ stop330();
+ stop360();
+ if (autopilotAbility350And360 == null) {
+ autopilotAbility350And360 = new AutopilotAbility350And360();
+ autopilotAbility350And360.start(this);
+ }
+
+ } else if (mapVersion >= 30300 && isFutianSweeper) {//目前只有MAP330的清扫车用的新的FSM状态原因查询
+ Log.i(TAG, "能否启动自驾能力检测使用版本:330清扫车专用");
+ stop230();
+ stop250();
+ stop350And360();
+ stop360();
if (autopilotAbility330 == null) {
autopilotAbility330 = new AutopilotAbility330(mapVersion);
autopilotAbility330.start(this);
}
} else if (mapVersion >= 20500) {
- CupidLogUtils.i(TAG, "是否可以启动自动驾驶能力检测使用250版本");
+ Log.i(TAG, "能否启动自驾能力检测使用版本:250");
stop230();
stop330();
+ stop350And360();
+ stop360();
if (autopilotAbility250 == null) {
autopilotAbility250 = new AutopilotAbility250(mapVersion);
autopilotAbility250.start(this);
}
} else {
- CupidLogUtils.i(TAG, "是否可以启动自动驾驶能力检测使用230版本");
+ Log.i(TAG, "能否启动自驾能力检测使用版本:230");
stop250();
stop330();
+ stop350And360();
+ stop360();
if (autopilotAbility230 == null) {
autopilotAbility230 = new AutopilotAbility230();
autopilotAbility230.start(this);
@@ -258,6 +309,20 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
}
}
+ private void stop350And360() {
+ if (autopilotAbility350And360 != null) {
+ autopilotAbility350And360.stop();
+ autopilotAbility350And360 = null;
+ }
+ }
+
+ private void stop360() {
+ if (autopilotAbility360 != null) {
+ autopilotAbility360.stop();
+ autopilotAbility360 = null;
+ }
+ }
+
private void stopTimer() {
if (startTimer != null) {
startTimer.cancel();
@@ -280,7 +345,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
initAutopilotAbility();
}
}
- }, 8000L);//延迟执行,避免刚连接成功后底盘信息无法及时同步
+ }, 8000L);//8秒原因:需要后去CarConfig 对象,两个地方调用initAutopilotAbility(); 初始化 一个在这,另一个在setCarConfig(),如果setCarConfig() 证明获取版本还未成功,获取版本会重试3次每次间隔两秒
}
}
@@ -290,9 +355,13 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
stop230();
stop250();
stop330();
+ stop350And360();
+ stop360();
handler = null;
mapVersion = -1;
isFutianSweeper = false;
+ isHQ = false;
+ isJinlvM1 = false;
}
}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java
index 796296c390..c3195b3de7 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java
@@ -30,6 +30,7 @@ public class MyMessageFactory implements IMyMessageFactory {
private IMsg warnMessage;//预警数据
private IMsg arrivalNotificationMessage;//到站提醒
private IMsg statusQueryRespMessage;//状态查询应答
+ private IMsg systemStatusMessage;//定频SSM
private IMsg recordDataConfigRespMessage;//数据采集配置应答
private IMsg planningDecisionStateMessage;//planning决策状态
private IMsg obuWarningDataMessage;//工控机透传OBU V2I数据
@@ -161,6 +162,12 @@ public class MyMessageFactory implements IMyMessageFactory {
statusQueryRespMessage = new StatusQueryRespMessage();
}
return statusQueryRespMessage;
+ } else if (messageType == MessageType.TYPE_RECEIVE_SSM.typeCode) {
+ //定频SSM
+ if (systemStatusMessage == null) {
+ systemStatusMessage = new SystemStatusMessage();
+ }
+ return systemStatusMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_RECORD_DATA_CONFIG_RESP.typeCode) {
//数据采集配置应答
if (recordDataConfigRespMessage == null) {
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java
index 2d37f3ced7..987f41b13e 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java
@@ -14,6 +14,7 @@ import system_master.SystemStatusInfo;
/**
* 状态查询应答
*/
+@Deprecated//HQ、M1 MAP350开始弃用,其他车型MAP360开始弃用
public class StatusQueryRespMessage extends MyAbstractMessageHandler {
@Override
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SystemStatusMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SystemStatusMessage.java
new file mode 100644
index 0000000000..863ad996d5
--- /dev/null
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SystemStatusMessage.java
@@ -0,0 +1,33 @@
+package com.zhidao.support.adas.high.msg;
+
+import android.os.SystemClock;
+
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.zhidao.support.adas.high.AdasChannel;
+import com.zhidao.support.adas.high.OnAdasListener;
+import com.zhidao.support.adas.high.common.CupidLogUtils;
+import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
+import com.zhidao.support.adas.high.protocol.RawData;
+
+import system_master.SsmInfo;
+
+/**
+ * 定频SSM 接口
+ */
+public class SystemStatusMessage extends MyAbstractMessageHandler {
+
+ @Override
+ public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
+ SsmInfo.SsmStatusInf statusInfo = SsmInfo.SsmStatusInf.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
+ AdasChannel.calculateTimeConsumingOnDispatchRaw("定频SSM", raw.receiveTime);
+ AutopilotAbilityManager.getInstance().setStatusInfo(statusInfo);
+ long nowTime = 0;
+ if (CupidLogUtils.isEnableLog())
+ nowTime = SystemClock.elapsedRealtime();
+ if (adasListener != null) {
+ adasListener.onSystemStatus(raw.getHeader(), statusInfo);
+ }
+ AdasChannel.calculateTimeConsumingBusiness("定频SSM", nowTime);
+ }
+
+}