Merge remote-tracking branch 'origin/dev_robotaxi-d_230912_6.1.0' into dev_robotaxi-d_230912_6.1.0

This commit is contained in:
wangmingjun
2023-09-15 11:56:27 +08:00
32 changed files with 1447 additions and 756 deletions

View File

@@ -11,7 +11,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsList
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.och.common.module.callback.OchAdasStartFailureCallback;
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
@@ -25,7 +25,7 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
private static final String TAG = OCHAdasAbilityManager.class.getSimpleName();
private boolean isAutopilotAbility;
private ArrayList<UnableAutopilotReason> unableAutopilotReasons;
private ArrayList<UnableLaunchReason> unableAutopilotReasons;
private String startFailedCode = "";
private String startFailedMessage = "";
@@ -93,7 +93,7 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo
}
@Override
public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons) {
public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons) {
this.isAutopilotAbility = isAutopilotAbility;
this.unableAutopilotReasons = unableAutopilotReasons;
Logger.d(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + (unableAutopilotReasons == null ? null : unableAutopilotReasons.toString()));

View File

@@ -158,5 +158,6 @@ class RightRearCamView : ConstraintLayout , IMoGoBackCameraVideoListener,
actv_cam_position_group?.visibility = VISIBLE
}
v_video_right_rear?.setImageBitmap(mBitmap)
v_video_right_rear?.scaleX = -1f
}
}

View File

@@ -158,5 +158,6 @@ class RightRearCamView : ConstraintLayout , IMoGoBackCameraVideoListener,
actv_cam_position_group?.visibility = VISIBLE
}
v_video_right_rear?.setImageBitmap(mBitmap)
v_video_right_rear?.scaleX = -1f
}
}

View File

@@ -58,7 +58,7 @@ import com.zhjt.mogo.adas.data.bean.AdasParam
import com.zhidao.support.adas.high.common.ProtocolStatus
import com.zhjt.mogo.adas.data.AiCloudTask
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
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.s_r.SweeperTaskSuspendResume
@@ -885,7 +885,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
*/
override fun onAutopilotAbility(
isAutopilotAbility: Boolean,
unableAutopilotReasons: ArrayList<UnableAutopilotReason>?
unableAutopilotReasons: ArrayList<UnableLaunchReason>?
) {
if (unableAutopilotReasons != null && unableAutopilotReasons.size > 0) {
autopilotAbilityCheck(isAutopilotAbility, unableAutopilotReasons.toString())
@@ -893,6 +893,16 @@ class MoGoAdasListenerImpl : OnAdasListener {
invokeAutopilotAbility(isAutopilotAbility, unableAutopilotReasons)
}
override fun onParallelDrivingAbility(
isParallelDrivingAbility: Boolean,
unableParallelDrivingReasons: java.util.ArrayList<UnableLaunchReason>?
) {
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(
isParallelDrivingAbility,
unableParallelDrivingReasons
)
}
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,

View File

@@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
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.CallerAutopilotActionsListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingActionsListenerManager
import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -39,10 +40,12 @@ class MoGoAdasMsgConnectStatusListenerImpl :
init {
CallerCloudListenerManager.addListener(TAG, this)
CallerAutopilotActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED)
CallerParallelDrivingActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED)
}
override fun onConnectionIPCStatus(ipcConnectionStatus: Int, reason: String?) {
CallerAutopilotActionsListenerManager.setConnected(ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED)
CallerParallelDrivingActionsListenerManager.setConnected(ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED)
AppConfigInfo.connectStatusDescribe = reason
when (ipcConnectionStatus) {
Constants.IPC_CONNECTION_STATUS.CONNECTED -> {

View File

@@ -4,7 +4,7 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.*
import android.widget.Toast
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig
@@ -21,18 +21,18 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher
import com.mogo.eagle.core.function.call.devatools.*
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.data.bean.AdasParam
import kotlinx.android.synthetic.main.view_sop_setting.view.*
import kotlinx.android.synthetic.main.view_sop_setting.view.tbRouteDynamicEffect
import mogo.telematics.pad.MessagePad
/**
@@ -57,47 +57,30 @@ internal class SOPSettingView @JvmOverloads constructor(
private fun initView() {
sopLayout.setOnClickListener { }
tbObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring
tbObstacleAvoidance.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 绕障类功能开关",isChecked)
CallerAutoPilotControlManager.sendDetouring(isChecked)
FunctionBuildConfig.isDetouring = isChecked
//V2X消息设置
v2xSetting()
//地图效果类设置
mapSetting()
//与车相关类设置
vehicleSetting()
//其他类别开关设置
otherSetting()
}
/**
* V2X消息设置
*/
private fun v2xSetting(){
//V2N新链路
scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData
scNewV2NData.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked)
FunctionBuildConfig.isNewV2NData = isChecked
}
tbMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning
tbMarkingObstacles.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 危险障碍物颜色标记开关",isChecked)
FunctionBuildConfig.isPNCWarning = isChecked
}
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
tbMarkingObstacles.visibility = View.GONE
}
tbRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy
tbRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 引导线动态效果",isChecked)
HmiBuildConfig.isShowRouteStrategy = isChecked
}
//默认开启
tbObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView
tbObuWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obu弱势交通控制, ",isChecked)
HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked
}
/**
* 默认关闭
*/
tbCloudWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowCloudWeaknessTrafficView
tbCloudWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 云端弱势交通控制, ",isChecked)
HmiBuildConfig.isShowCloudWeaknessTrafficView = isChecked
}
tbV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc
tbV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
//V2N场景进PNC
scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc
scV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -106,53 +89,9 @@ internal class SOPSettingView @JvmOverloads constructor(
FunctionBuildConfig.isV2NPnc = isChecked
}
tbV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc
tbV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
hmiAction("SOP V2I场景进PNC, ",isChecked)
CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked)
FunctionBuildConfig.isV2IPnc = isChecked
}
/**
* 默认打开
*/
tbObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView
tbObuV2vView.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obuV2V开关, ",isChecked)
HmiBuildConfig.isShowObuV2vView = isChecked
}
/**
* 默认打开
*/
tbObuV2iView.isChecked = HmiBuildConfig.isShowObuV2iView
tbObuV2iView.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obuV2i开关, ",isChecked)
HmiBuildConfig.isShowObuV2iView = isChecked
}
/**
* 默认关闭
*/
tbRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView
tbRunRedLightSop.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obu闯红灯预警, ",isChecked)
HmiBuildConfig.isShowRunRedLightView = isChecked
if (HmiBuildConfig.isShowRunRedLightView) {
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray())
} else {
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray())
}
}
/**
* 默认关闭
*/
tbGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView
tbGreenWaveSop.setOnCheckedChangeListener { _, isChecked ->
//绿波通行(默认关闭)
scGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView
scGreenWaveSop.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obu绿波通行, ",isChecked)
HmiBuildConfig.isShowGreenWaveView = isChecked
if (HmiBuildConfig.isShowGreenWaveView) {
@@ -162,30 +101,111 @@ internal class SOPSettingView @JvmOverloads constructor(
}
}
tbTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView
tbTrafficLight.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 红绿灯标识开关, ",isChecked)
if (isChecked) {
CallerHmiManager.showTrafficLightView()
//V2I场景进PNC
scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc
scV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
hmiAction("SOP V2I场景进PNC, ",isChecked)
CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked)
FunctionBuildConfig.isV2IPnc = isChecked
}
//闯红灯预警(默认关闭)
scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView
scRunRedLightSop.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obu闯红灯预警, ",isChecked)
HmiBuildConfig.isShowRunRedLightView = isChecked
if (HmiBuildConfig.isShowRunRedLightView) {
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray())
} else {
CallerHmiManager.hideTrafficLightView()
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray())
}
}
tbSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView
tbSpeedLimit.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 限速标识开关, ",isChecked)
//路侧弱势交通参与者(默认开启)
scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView
scObuWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obu弱势交通控制, ",isChecked)
HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked
}
//V2V总开关(默认关闭)
scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView
scObuV2vView.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP obuV2V开关, ",isChecked)
HmiBuildConfig.isShowObuV2vView = isChecked
}
//obu总开关
scObu.isChecked = CallerObuApiManager.isConnected()
scObu.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP OBU控制总开关, ",isChecked)
if (isChecked) {
HmiBuildConfig.isShowLimitingVelocityView = true
CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP)
} else {
HmiBuildConfig.isShowLimitingVelocityView = false
CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE)
//断开链接
CallerObuApiManager.disConnectObu()
}
}
}
/**
* 地图效果类设置
*/
private fun mapSetting(){
//危险障碍物颜色标记开关
scMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning
scMarkingObstacles.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 危险障碍物颜色标记开关",isChecked)
FunctionBuildConfig.isPNCWarning = isChecked
}
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
scMarkingObstacles.isEnabled = false
}
//引导线动态效果
scRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy
scRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 引导线动态效果",isChecked)
HmiBuildConfig.isShowRouteStrategy = isChecked
}
//点云效果
//初始化点云数据渲染情况
scDrawPointCloudData.isChecked = FunctionBuildConfig.isDrawPointCloudData
//是否渲染点云数据
scDrawPointCloudData.setOnCheckedChangeListener { _, isChecked ->
CallerAutoPilotControlManager.setIsDrawPointCloud(isChecked)
FunctionBuildConfig.isDrawPointCloudData = isChecked
CallerMapUIServiceManager.getMapUIController()?.setIsDrawPointCloud(isChecked)
}
//自车光圈
scCarAperture.isChecked = FunctionBuildConfig.isDisplayAnimEnable
scCarAperture.setOnCheckedChangeListener { _, isChecked ->
CallerMapUIServiceManager.getMapUIController()?.setDisplayAnimEnable(isChecked)
FunctionBuildConfig.isDisplayAnimEnable = isChecked
}
}
/**
* 与车相关类设置
*/
private fun vehicleSetting(){
//绕障类功能
scObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring
scObstacleAvoidance.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 绕障类功能开关",isChecked)
CallerAutoPilotControlManager.sendDetouring(isChecked)
FunctionBuildConfig.isDetouring = isChecked
}
// 演示模式,上一次勾选的数据
tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode
tbDemoMode.setOnCheckedChangeListener { compoundButton, _ ->
scDemoMode.isChecked = FunctionBuildConfig.isDemoMode
scDemoMode.setOnCheckedChangeListener { compoundButton, _ ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -200,12 +220,12 @@ internal class SOPSettingView @JvmOverloads constructor(
}
//只在司机端设置美化模式开关功能
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
tbDemoMode.visibility = View.GONE
scDemoMode.isEnabled = false
}
// 雨天模式,上一次勾选的数据
tbRainMode.isChecked = FunctionBuildConfig.isRainMode
tbRainMode.setOnCheckedChangeListener { compoundButton, isChecked ->
scRainMode.isChecked = FunctionBuildConfig.isRainMode
scRainMode.setOnCheckedChangeListener { compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -216,72 +236,24 @@ internal class SOPSettingView @JvmOverloads constructor(
}
//雨天模式按钮只在司机屏生效,乘客屏不显示
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
tbRainMode.visibility = View.GONE
}
tbObu.isChecked = CallerObuApiManager.isConnected()
tbObu.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP OBU控制总开关, ",isChecked)
if (isChecked) {
CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP)
} else {
//断开链接
CallerObuApiManager.disConnectObu()
}
}
tbIPCReport.isChecked = FunctionBuildConfig.isReportWarning
tbIPCReport.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 是否开启异常上报, ",isChecked)
FunctionBuildConfig.isReportWarning = isChecked
}
tbNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData
tbNewV2NData.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked)
FunctionBuildConfig.isNewV2NData = isChecked
}
// M1 360度环视
tbNew360LookAround?.also {
if (!AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
it.isEnabled = false
} else {
it.isEnabled = true
it.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
CallerHmiManager.showM1360LookAround()
} else {
CallerHmiManager.hidM1360LookAround()
}
}
it.isChecked = CallerHmiManager.isM1360LookAroundShowing()
}
scRainMode.visibility = View.GONE
}
//弱网减速停车
tbWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown
tbWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked ->
scWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown
scWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked ->
FunctionBuildConfig.isWeakNetSlowDown = isChecked
CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked)
hmiAction("SOP 弱网减速停车, ",isChecked)
}
//故障减速停车
tbFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown
tbFaultSlowDown.setOnCheckedChangeListener{_, isChecked ->
scFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown
scFaultSlowDown.setOnCheckedChangeListener{_, isChecked ->
FunctionBuildConfig.isFaultSlowDown = isChecked
CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked)
hmiAction("SOP 故障减速停车, ",isChecked)
}
//是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包)
tbShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow
tbShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked ->
FunctionBuildConfig.isShowBagRecordWindow = isChecked
hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked)
}
//融合模式
rgFusionMode.setOnCheckedChangeListener { _, p1 ->
when(p1){
@@ -308,7 +280,65 @@ internal class SOPSettingView @JvmOverloads constructor(
}
CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode)
}
}
/**
* 其他类别开关设置
*/
private fun otherSetting(){
//红绿灯标识开关
scTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView
scTrafficLight.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 红绿灯标识开关, ",isChecked)
if (isChecked) {
CallerHmiManager.showTrafficLightView()
} else {
CallerHmiManager.hideTrafficLightView()
}
}
//限速标识
scSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView
scSpeedLimit.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 限速标识开关, ",isChecked)
if (isChecked) {
HmiBuildConfig.isShowLimitingVelocityView = true
} else {
HmiBuildConfig.isShowLimitingVelocityView = false
CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE)
}
}
//异常上报提示
scIPCReport.isChecked = FunctionBuildConfig.isReportWarning
scIPCReport.setOnCheckedChangeListener { _, isChecked ->
hmiAction("SOP 是否开启异常上报, ",isChecked)
FunctionBuildConfig.isReportWarning = isChecked
}
// M1 360度环视
scNew360LookAround?.also {
if (!AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
it.isEnabled = false
} else {
it.isEnabled = true
it.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
CallerHmiManager.showM1360LookAround()
} else {
CallerHmiManager.hidM1360LookAround()
}
}
it.isChecked = CallerHmiManager.isM1360LookAroundShowing()
}
}
//是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包)
scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow
scShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked ->
FunctionBuildConfig.isShowBagRecordWindow = isChecked
hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked)
}
//变道绕障的目标障碍物速度阈值
tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s"
@@ -393,8 +423,11 @@ internal class SOPSettingView @JvmOverloads constructor(
mfStatusLayout.setClickEnabled(false)
mfTest.isEnabled = false
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
//添加 业务配置监听
@@ -410,10 +443,10 @@ internal class SOPSettingView @JvmOverloads constructor(
override fun updateFuncMode(tag: String, boolean: Boolean) {
super.updateFuncMode(tag, boolean)
if(tag == FUNC_MODE_DEMO){
tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode
scDemoMode.isChecked = FunctionBuildConfig.isDemoMode
}
if(tag == FUNC_MODE_RAIN){
tbRainMode.isChecked = FunctionBuildConfig.isRainMode
scRainMode.isChecked = FunctionBuildConfig.isRainMode
}
}
@@ -426,40 +459,34 @@ internal class SOPSettingView @JvmOverloads constructor(
CallerDevaToolsManager.mofang()?.unRegisterMoFangStatusListener(this)
}
// private val timerTaskRefresh = object : TimerTask(){
// override fun run() {
// UiThreadHandler.post{
// tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode
// tbRainMode.isChecked = FunctionBuildConfig.isRainMode
// }
// }
//
// }
override fun updateBizView(type: String, lock: Boolean) {
when (type) {
//美化模式
FuncBizConfig.BIZ_BEAUTY_MODE -> {
tbDemoMode.isClickable = !lock
scDemoMode.isClickable = !lock
if(lock){
tbDemoMode.visibility = View.INVISIBLE
scDemoMode.visibility = View.INVISIBLE
}else{
tbDemoMode.visibility = View.VISIBLE
scDemoMode.visibility = View.VISIBLE
}
}
//雨天模式
FuncBizConfig.BIZ_RAIN_MODE -> {
tbRainMode.isClickable = !lock
scRainMode.isClickable = !lock
if (lock) {
tbRainMode.visibility = View.INVISIBLE
scRainMode.visibility = View.INVISIBLE
} else {
tbRainMode.visibility = View.VISIBLE
scRainMode.visibility = View.VISIBLE
}
}
//危险障碍物颜色标记
FuncBizConfig.BIZ_PNC_WARNING -> {
tbMarkingObstacles.isClickable = !lock
scMarkingObstacles.isClickable = !lock
if (lock) {
tbMarkingObstacles.visibility = View.INVISIBLE
scMarkingObstacles.visibility = View.INVISIBLE
} else {
tbMarkingObstacles.visibility = View.VISIBLE
scMarkingObstacles.visibility = View.VISIBLE
}
}
}

View File

@@ -21,8 +21,8 @@ import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingListener
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason.SourceType
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason.SourceType
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest.ParallelRequest
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass
@@ -121,7 +121,7 @@ class ParallelDriveView @JvmOverloads constructor(
override fun onAutopilotAbility(
isAutopilotAbility: Boolean,
unableAutopilotReasons: ArrayList<UnableAutopilotReason>?
unableAutopilotReasons: ArrayList<UnableLaunchReason>?
) {
// 是否可平行驾驶
val isAvailable = isAvailable(unableAutopilotReasons)
@@ -173,7 +173,7 @@ class ParallelDriveView @JvmOverloads constructor(
}
}
private fun isAvailable(unableAutopilotReasons: ArrayList<UnableAutopilotReason>?): Boolean {
private fun isAvailable(unableAutopilotReasons: ArrayList<UnableLaunchReason>?): Boolean {
var unavailable = false
unableAutopilotReasons?.forEach {
if (it.source.ordinal == SourceType.CHASSIS.ordinal) {

View File

@@ -168,7 +168,16 @@ object FunctionBuildConfig {
*/
@Volatile
@JvmField
var isDrawPointCloudData = true
var isDrawPointCloudData = false
/**
* 自车是否展示光圈
* true - 展示
* false - 不展示
*/
@Volatile
@JvmField
var isDisplayAnimEnable = false
/**
* 地图是否忽略判断条件直接绘制工控机引导线数据&全局路径规划

View File

@@ -54,7 +54,7 @@ object HmiBuildConfig {
*/
@JvmField
@Volatile
var isShowObuV2vView = true
var isShowObuV2vView = false
/**
* 是否展示obu的v2i

View File

@@ -1,6 +1,6 @@
package com.mogo.eagle.core.function.api.autopilot
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
/**
@@ -11,5 +11,5 @@ interface IMoGoAutopilotActionsListener {
/**
* pnc actions 决策 驾驶的意图
*/
fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableAutopilotReason>?)
fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?)
}

View File

@@ -0,0 +1,13 @@
package com.mogo.eagle.core.function.api.autopilot
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
/**
* 平行驾驶能力 能否启动平行驾驶
*/
interface IMoGoParallelDrivingActionsListener {
fun onParallelDrivingAbility(isParallelDrivingAbility: Boolean, unableParallelDrivingReasons: ArrayList<UnableLaunchReason>?)
}

View File

@@ -2,7 +2,7 @@ package com.mogo.eagle.core.function.call.autopilot
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotActionsListener
import com.mogo.eagle.core.function.call.base.CallerBase
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
/**
@@ -12,7 +12,7 @@ object CallerAutopilotActionsListenerManager : CallerBase<IMoGoAutopilotActionsL
@Volatile
private var isConnected = false
private var isAutopilotAbility: Boolean = false
private var unableAutopilotReasons: ArrayList<UnableAutopilotReason>? = null
private var unableAutopilotReasons: ArrayList<UnableLaunchReason>? = null
init {
isAutopilotAbility = false
@@ -20,9 +20,14 @@ object CallerAutopilotActionsListenerManager : CallerBase<IMoGoAutopilotActionsL
// printLog("初始化")
}
private fun disconnectedReason(): ArrayList<UnableAutopilotReason> {
val list = ArrayList<UnableAutopilotReason>()
list.add(UnableAutopilotReason(UnableAutopilotReason.SourceType.LIB, "未连接自动驾驶系统"))
private fun disconnectedReason(): ArrayList<UnableLaunchReason> {
val list = ArrayList<UnableLaunchReason>()
list.add(
UnableLaunchReason(
UnableLaunchReason.SourceType.LIB,
"未连接自动驾驶系统"
)
)
return list
}
@@ -37,7 +42,7 @@ object CallerAutopilotActionsListenerManager : CallerBase<IMoGoAutopilotActionsL
* 获取不能启动自驾的原因
* null表示没有任何原因证证明isAutopilotAbility为true
*/
fun getUnableAutopilotReasons(): ArrayList<UnableAutopilotReason>? {
fun getUnableAutopilotReasons(): ArrayList<UnableLaunchReason>? {
return unableAutopilotReasons
}
@@ -53,15 +58,15 @@ object CallerAutopilotActionsListenerManager : CallerBase<IMoGoAutopilotActionsL
@Synchronized
fun invokeAutopilotAbility(
isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableAutopilotReason>?
isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?
) {
if (isConnected) {
var isEquals: Boolean = true
if (unableAutopilotReasons != null && this.unableAutopilotReasons != null) {
unableAutopilotReasons.let { onw ->
onw.sortWith(compareBy(UnableAutopilotReason::hashCode));
onw.sortWith(compareBy(UnableLaunchReason::hashCode));
this.unableAutopilotReasons?.let { old ->
old.sortWith(compareBy(UnableAutopilotReason::hashCode));
old.sortWith(compareBy(UnableLaunchReason::hashCode));
isEquals = onw.toTypedArray() contentEquals old.toTypedArray()
// Log.i(
// "ddd",

View File

@@ -0,0 +1,99 @@
package com.mogo.eagle.core.function.call.autopilot
import android.util.Log
import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingActionsListener
import com.mogo.eagle.core.function.call.base.CallerBase
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
/**
* 是否可以启动平行驾驶管理
*/
object CallerParallelDrivingActionsListenerManager :
CallerBase<IMoGoParallelDrivingActionsListener>() {
@Volatile
private var isConnected = false
private var isParallelDrivingAbility: Boolean = false
private var unableParallelDrivingReasons: ArrayList<UnableLaunchReason>? = null
init {
isParallelDrivingAbility = false
unableParallelDrivingReasons = disconnectedReason()
}
private fun disconnectedReason(): ArrayList<UnableLaunchReason> {
val list = ArrayList<UnableLaunchReason>()
list.add(
UnableLaunchReason(
UnableLaunchReason.SourceType.LIB,
"未连接自动驾驶系统"
)
)
return list
}
/**
* 能否启动平行驾驶
*/
fun isParallelDrivingAbility(): Boolean {
return isParallelDrivingAbility
}
/**
* 获取不能启动平行驾驶的原因
* null表示没有任何原因证证明isParallelDrivingAbility为true
*/
fun getUnableParallelDrivingReasons(): ArrayList<UnableLaunchReason>? {
return unableParallelDrivingReasons
}
fun setConnected(isConnected: Boolean) {
if (this.isConnected != isConnected) {
this.isConnected = isConnected
this.isParallelDrivingAbility = isConnected
unableParallelDrivingReasons = if (isConnected) null else disconnectedReason()
notification()
}
}
@Synchronized
fun invokeParallelDrivingAbility(
isAutopilotAbility: Boolean, unableAutopilotReasons: ArrayList<UnableLaunchReason>?
) {
if (isConnected) {
var isEquals: Boolean = true
if (unableAutopilotReasons != null && this.unableParallelDrivingReasons != null) {
unableAutopilotReasons.let { onw ->
onw.sortWith(compareBy(UnableLaunchReason::hashCode));
this.unableParallelDrivingReasons?.let { old ->
old.sortWith(compareBy(UnableLaunchReason::hashCode));
isEquals = onw.toTypedArray() contentEquals old.toTypedArray()
}
}
} else isEquals =
!(unableAutopilotReasons != null || this.unableParallelDrivingReasons != null)
if (this.isParallelDrivingAbility != isAutopilotAbility || !isEquals) {
this.isParallelDrivingAbility = isAutopilotAbility
this.unableParallelDrivingReasons = unableAutopilotReasons
notification()
}
}
}
private fun notification() {
Log.i(
"xfk",
"是否可以启动平行驾驶=" + isParallelDrivingAbility + if (unableParallelDrivingReasons == null) "" else unableParallelDrivingReasons.toString()
)
M_LISTENERS.forEach {
val listener = it.value
listener.onParallelDrivingAbility(
isParallelDrivingAbility,
unableParallelDrivingReasons
)
}
}
}

View File

@@ -5,9 +5,9 @@ import android.text.TextUtils;
import java.util.Objects;
/**
* 自动驾驶能力 能否启动自动驾驶
* 不能启动自动驾驶或不能启动平行驾驶的原因
*/
public class UnableAutopilotReason {
public class UnableLaunchReason {
public enum SourceType {
LIB,//ADAS庫
@@ -26,7 +26,7 @@ public class UnableAutopilotReason {
public final String unableAutopilotReason;
public UnableAutopilotReason(SourceType source, String unableAutopilotReason) {
public UnableLaunchReason(SourceType source, String unableAutopilotReason) {
this.source = source;
this.unableAutopilotReason = unableAutopilotReason;
}
@@ -35,7 +35,7 @@ public class UnableAutopilotReason {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UnableAutopilotReason that = (UnableAutopilotReason) o;
UnableLaunchReason that = (UnableLaunchReason) o;
return source == that.source && TextUtils.equals(unableAutopilotReason, that.unableAutopilotReason);
}

View File

@@ -29,6 +29,7 @@ import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.common.Define;
import com.zhidao.support.adas.high.common.IPCFixationIPHelper;
import com.zhidao.support.adas.high.common.MessageType;
import com.zhidao.support.adas.high.common.ParallelDrivingManager;
import com.zhidao.support.adas.high.common.ProtocolStatus;
import com.zhidao.support.adas.high.common.ReceiveTimeoutManager;
import com.zhidao.support.adas.high.common.RegexUtils;
@@ -667,9 +668,11 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
ipcConnectionStatus.set(status);
if (status == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
AutopilotAbilityManager.getInstance().start();
ParallelDrivingManager.getInstance().start();
startCheckCompatibility();
} else {
AutopilotAbilityManager.getInstance().stop();
ParallelDrivingManager.getInstance().stop();
stopCheckCompatibility();
stopCarConfigReq();
}
@@ -771,6 +774,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
void setOnAdasListener(OnAdasListener adasListener) {
mAdasListener = adasListener;
AutopilotAbilityManager.getInstance().setOnAdasListener(adasListener);
ParallelDrivingManager.getInstance().setOnAdasListener(adasListener);
}
@Override

View File

@@ -1,5 +1,6 @@
package com.zhidao.support.adas.high;
import com.zhidao.support.adas.high.common.ParallelDrivingManager;
import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions;
@@ -202,5 +203,6 @@ public class AdasOptions {
public void setUnableLaunchAutopilotGear(Set<Chassis.GearPosition> unableLaunchAutopilotGear) {
AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear);
ParallelDrivingManager.getInstance().setUnableLaunchParallelDrivingGear(unableLaunchAutopilotGear);
}
}

View File

@@ -10,7 +10,7 @@ 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.UnableAutopilotReason;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
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.big.SweeperBigTaskStatus;
@@ -200,7 +200,8 @@ public interface OnAdasListener {
* @param header 头
* @param statusInfo 数据
*/
@Deprecated//HQ、M1 MAP350开始弃用其他车型MAP360开始弃用
@Deprecated
//HQ、M1 MAP350开始弃用其他车型MAP360开始弃用
void onStatusQueryResp(MessagePad.Header header, SystemStatusInfo.StatusInfo statusInfo);
/**
@@ -470,9 +471,17 @@ public interface OnAdasListener {
* @param isAutopilotAbility 是否能启动自动驾驶
* @param unableAutopilotReasons 不能启动自动驾驶原因
*/
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons);
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);
/**
* 是否有能力启动平行驾驶
*
* @param isParallelDrivingAbility 是否能启动平行驾驶
* @param unableParallelDrivingReasons 不能启动平行驾驶原因
*/
void onParallelDrivingAbility(boolean isParallelDrivingAbility, @Nullable ArrayList<UnableLaunchReason> unableParallelDrivingReasons);
/**
* 启动自动驾驶失败回调
* 根据MAP 系统监控状态返回过滤

View File

@@ -0,0 +1,211 @@
package com.zhidao.support.adas.high.common;
import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import chassis.Chassis;
import chassis.ChassisStatesOuterClass;
import chassis.VehicleStateOuterClass;
import mogo.telematics.pad.MessagePad;
/**
* 是否可以启动平行驾驶能力检测
*/
public class ParallelDrivingManager {
private static final String TAG = ParallelDrivingManager.class.getSimpleName();
private static volatile ParallelDrivingManager INSTANCE;
private volatile Timer callbackTimer;
private volatile Timer bootTimer;
private OnAdasListener listener;
private ChassisStatesOuterClass.ChassisStates chassisStates;
private VehicleStateOuterClass.VehicleState vehicleState;
/**
* 不能启动平行驾驶的档位
*/
private Set<Chassis.GearPosition> unableLaunchParallelDrivingGear;
private int mapVersion = -1;//工控机版本
private boolean isHQ = false;//是否是HQ
private boolean isDF = false;//是否是DF
private ParallelDrivingManager() {
}
public static ParallelDrivingManager getInstance() {
if (INSTANCE == null) {
synchronized (ParallelDrivingManager.class) {
if (INSTANCE == null) {
INSTANCE = new ParallelDrivingManager();
}
}
}
return INSTANCE;
}
public void setCarConfig(MessagePad.CarConfigResp carConfig) {
mapVersion = carConfig.getMapVersion();
isHQ = carConfig.getIsHQ();
isDF = carConfig.getIsDF();
if (mapVersion != -1) {
stopBootTimer();
startCallback();
}
}
public void setOnAdasListener(OnAdasListener listener) {
this.listener = listener;
}
public void setChassisStates(ChassisStatesOuterClass.ChassisStates chassisStates) {
this.chassisStates = chassisStates;
}
public void setVehicleState(VehicleStateOuterClass.VehicleState vehicleState) {
this.vehicleState = vehicleState;
}
public void setUnableLaunchParallelDrivingGear(Set<Chassis.GearPosition> unableLaunchParallelDrivingGear) {
if (unableLaunchParallelDrivingGear != null) {
this.unableLaunchParallelDrivingGear = new HashSet<>(unableLaunchParallelDrivingGear);
}
}
/**
* 获取当前档位是否能启动自动驾驶 如果不传递默认可以启动
* 不能启动自驾档位规则app/README.md/不能启动自动驾驶的档位
*
* @param currentGear 当前档位
* @return 是否能启动自驾
*/
private boolean isLaunchAutopilot(Chassis.GearPosition currentGear) {
if (unableLaunchParallelDrivingGear != null && !unableLaunchParallelDrivingGear.isEmpty()) {
return !unableLaunchParallelDrivingGear.contains(currentGear);
}
return true;
}
/**
* 添加不能启动平行驾驶的原因
*
* @param unableParallelDrivingReasons 原因列表
* @param source 来源
* @param unableParallelDrivingReason 云隐
* @return 原因列表
*/
public static ArrayList<UnableLaunchReason> addUnableParallelDrivingReason(ArrayList<UnableLaunchReason> unableParallelDrivingReasons, UnableLaunchReason.SourceType source, String unableParallelDrivingReason) {
if (unableParallelDrivingReasons == null) {
unableParallelDrivingReasons = new ArrayList<>();
}
unableParallelDrivingReasons.add(new UnableLaunchReason(source, unableParallelDrivingReason));
return unableParallelDrivingReasons;
}
private void onCallback() {
boolean isParallelDrivingAbility = true;//是否能启动平行驾驶
ArrayList<UnableLaunchReason> unableParallelDrivingReasons = null;//不能启动平行驾驶原因
//检测底盘相关
if (chassisStates != null) {
if (chassisStates.hasBrakeSystemStates()) {
float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition();
if (brake > 0) {
isParallelDrivingAbility = false;
unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, "制动踏板被踩下");
}
}
if (chassisStates.hasGearSystemStates()) {
Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition();
if (!isLaunchAutopilot(gear)) {
isParallelDrivingAbility = false;
unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, "档位异常");
}
}
}
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isParallelDrivingAbility = false;
unableParallelDrivingReasons = addUnableParallelDrivingReason(unableParallelDrivingReasons, UnableLaunchReason.SourceType.CHASSIS, "施加驻车");
}
}
}
callListener(isParallelDrivingAbility, unableParallelDrivingReasons);
}
private void callListener(boolean isParallelDrivingAbility, ArrayList<UnableLaunchReason> unableParallelDrivingReasons) {
if (listener != null) {
listener.onParallelDrivingAbility(isParallelDrivingAbility, unableParallelDrivingReasons);
}
}
/**
* 底盘数据回调20Hz检测太频繁没有意义
* Taxi 无人化时才会使用 MAP360开始上线此功能
*/
protected synchronized void startCallback() {
if (mapVersion >= 30600 && (isDF || isHQ)) {
if (callbackTimer == null) {
callbackTimer = new Timer();
callbackTimer.schedule(new TimerTask() {
@Override
public void run() {
onCallback();
}
}, 2000L, 1000L);//延迟执行,避免刚连接成功后底盘信息无法及时同步
}
} else {
callListener(false, addUnableParallelDrivingReason(null, UnableLaunchReason.SourceType.LIB, "当前域控版本无法通过鹰眼启动平行驾驶"));
}
}
/**
* 连接工控机成功调用此函数如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测
* 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑
*/
public synchronized void start() {
if (bootTimer == null) {
bootTimer = new Timer();
bootTimer.schedule(new TimerTask() {
@Override
public void run() {
if (mapVersion == -1 && AdasManager.getInstance().getIpcConnectionStatus() == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
mapVersion = 30600;//获取 CarConfig获取失败就认为是Taxi版本大于等于360
isDF = true;
startCallback();
}
}
}, 8000L);//8秒原因需要后去CarConfig 对象两个地方调用initAutopilotAbility(); 初始化 一个在这另一个在setCarConfig(),如果setCarConfig() 证明获取版本还未成功获取版本会重试3次每次间隔两秒
}
}
private void stopBootTimer() {
if (bootTimer != null) {
bootTimer.cancel();
bootTimer = null;
}
}
public synchronized void stop() {
stopBootTimer();
if (callbackTimer != null) {
callbackTimer.cancel();
callbackTimer = null;
}
this.chassisStates = null;
this.vehicleState = null;
}
}

View File

@@ -2,7 +2,7 @@ package com.zhidao.support.adas.high.common.autopilot.ability;
import androidx.annotation.Nullable;
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
import java.util.Timer;
@@ -25,7 +25,7 @@ public class AutopilotAbility230 {
private OnAutopilotAbilityListener listener;
protected interface OnAutopilotAbilityListener {
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons);
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);
}
protected AutopilotAbility230() {
@@ -39,21 +39,21 @@ public class AutopilotAbility230 {
private void onCallback() {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
ArrayList<UnableLaunchReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
//检测底盘相关
if (chassisStates != null) {
if (chassisStates.hasBrakeSystemStates()) {
float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition();
if (brake > 0) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "制动踏板被踩下");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.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, "档位异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.CHASSIS, "档位异常");
}
}
//TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段

View File

@@ -4,7 +4,7 @@ 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 com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
import java.util.List;
@@ -30,10 +30,12 @@ public class AutopilotAbility250 {
private VehicleStateOuterClass.VehicleState vehicleState;
private int mapVersion = -1;//MAP版本
private int masterVersion = -1;//Master版本
private boolean isHQ = false;//是否是HQ
private boolean isDF = false;//是否是DF
private OnAutopilotAbilityListener listener;
protected interface OnAutopilotAbilityListener {
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons);
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);
void onStatusQuery();
@@ -42,8 +44,10 @@ public class AutopilotAbility250 {
void onRemoveTimeoutMessages();
}
protected AutopilotAbility250(int mapVersion) {
protected AutopilotAbility250(int mapVersion, boolean isHQ, boolean isDF) {
this.mapVersion = mapVersion;
this.isHQ = isHQ;
this.isDF = isDF;
this.masterVersion = -1;
}
@@ -65,7 +69,7 @@ public class AutopilotAbility250 {
private void onCallback(SystemStatusInfo.StatusInfo statusInfo) {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
ArrayList<UnableLaunchReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
//检测节点状态相关
if (statusInfo != null) {
if (masterVersion == -1 && statusInfo.hasMasterVersion()) {
@@ -77,7 +81,7 @@ public class AutopilotAbility250 {
if (mapVersion >= 30400 && masterVersion > 2 && statusInfo.hasAutoPilotReady() && statusInfo.hasAutoPilotUnreadyReason()) {
isAutopilotAbility = statusInfo.getAutoPilotReady();
if (!isAutopilotAbility) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
}
} else if (mapVersion >= 21000 && masterVersion > 1 && statusInfo.hasAutoPilotReady()) {//如果 maser version 大于1还需要判断AutoPilotReady字段是否存在以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行
isAutopilotAbility = statusInfo.getAutoPilotReady();
@@ -89,13 +93,13 @@ public class AutopilotAbility250 {
String nodeName = info.getNodeName();
int state = info.getState();
if (state < AutopilotAbilityManager.NODE_INFO_STATE.length) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE[state]);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE[state]);
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + "未知异常");
}
}
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, "未知异常节点");
}
}
} else {
@@ -126,13 +130,13 @@ public class AutopilotAbility250 {
unableAutopilotReason = "未知系统状态";
}
if (!isAutopilotAbility) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, unableAutopilotReason);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, unableAutopilotReason);
}
}
}
} else {
isAutopilotAbility = false;//是否能启动自动驾驶
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "SSM状态查询超时无响应");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.LIB, "SSM状态查询超时无响应");
}
//检测底盘相关
if (chassisStates != null) {
@@ -140,29 +144,30 @@ public class AutopilotAbility250 {
float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition();
if (brake > 0) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "制动踏板被踩下");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.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, "档位异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.CHASSIS, "档位异常");
}
}
}
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车");
if ((!isHQ && !isDF) || mapVersion < 30600) {
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.CHASSIS, "施加驻车");
}
}
}
}
if (listener != null) {
listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
}

View File

@@ -6,7 +6,7 @@ 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 com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
import java.util.List;
@@ -34,7 +34,7 @@ public class AutopilotAbility330 {
private OnAutopilotAbilityListener listener;
protected interface OnAutopilotAbilityListener {
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons);
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);
void onStatusQuery();
@@ -62,7 +62,7 @@ public class AutopilotAbility330 {
private void onCallback(SystemStatusInfo.StatusInfo statusInfo) {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
ArrayList<UnableLaunchReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
//检测节点状态相关
if (statusInfo != null) {
if (masterVersion == -1 && statusInfo.hasMasterVersion()) {
@@ -74,7 +74,7 @@ public class AutopilotAbility330 {
if (mapVersion >= 30400 && masterVersion > 2 && statusInfo.hasAutoPilotReady() && statusInfo.hasAutoPilotUnreadyReason()) {
isAutopilotAbility = statusInfo.getAutoPilotReady();
if (!isAutopilotAbility) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
}
} else if (mapVersion >= 21000 && masterVersion > 1 && statusInfo.hasAutoPilotReady()) {//如果 maser version 大于1还需要判断AutoPilotReady字段是否存在以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行
isAutopilotAbility = statusInfo.getAutoPilotReady();
@@ -86,13 +86,13 @@ public class AutopilotAbility330 {
String nodeName = info.getNodeName();
int state = info.getState();
if (state < AutopilotAbilityManager.NODE_INFO_STATE.length) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE[state]);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE[state]);
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + "未知异常");
}
}
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, "未知异常节点");
}
}
} else {
@@ -123,13 +123,13 @@ public class AutopilotAbility330 {
unableAutopilotReason = "未知系统状态";
}
if (!isAutopilotAbility) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, unableAutopilotReason);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, unableAutopilotReason);
}
}
}
} else {
isAutopilotAbility = false;//是否能启动自动驾驶
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "SSM状态查询超时无响应");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.LIB, "SSM状态查询超时无响应");
}
if (fsmStatusReasonRespond != null) {
int count = fsmStatusReasonRespond.getFsmStatusReasonRespondCount();
@@ -138,11 +138,11 @@ public class AutopilotAbility330 {
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);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.FSM, respond);
}
}
if (unableAutopilotReasons == null || unableAutopilotReasons.isEmpty()) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "FSM数据异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.LIB, "FSM数据异常");
}
}
}

View File

@@ -4,7 +4,7 @@ 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 com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
@@ -23,15 +23,21 @@ public class AutopilotAbility350And360 {
private static final String TAG = AutopilotAbility250.class.getSimpleName();
private ChassisStatesOuterClass.ChassisStates chassisStates;
private VehicleStateOuterClass.VehicleState vehicleState;
private int mapVersion = -1;//MAP版本
private int masterVersion = -1;//Master版本
private boolean isHQ = false;//是否是HQ
private boolean isDF = false;//是否是DF
private OnAutopilotAbilityListener listener;
protected interface OnAutopilotAbilityListener {
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons);
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);
}
protected AutopilotAbility350And360() {
protected AutopilotAbility350And360(int mapVersion, boolean isHQ, boolean isDF) {
this.mapVersion = mapVersion;
this.isHQ = isHQ;
this.isDF = isDF;
this.masterVersion = -1;
}
@@ -51,7 +57,7 @@ public class AutopilotAbility350And360 {
private void onCallback(SsmInfo.SsmStatusInf statusInfo) {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
ArrayList<UnableLaunchReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
//检测节点状态相关
if (statusInfo != null) {
if (masterVersion == -1 && statusInfo.hasMasterVersion()) {
@@ -63,7 +69,7 @@ public class AutopilotAbility350And360 {
if (masterVersion > 2 && statusInfo.hasAutoPilotReady() && statusInfo.hasAutoPilotUnreadyReason()) {
isAutopilotAbility = statusInfo.getAutoPilotReady();
if (!isAutopilotAbility) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
}
} else if (masterVersion > 1 && statusInfo.hasAutoPilotReady()) {//如果 maser version 大于1还需要判断AutoPilotReady字段是否存在以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行
isAutopilotAbility = statusInfo.getAutoPilotReady();
@@ -75,13 +81,13 @@ public class AutopilotAbility350And360 {
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]);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE_FIXED_FREQUENCY[state]);
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + "未知异常");
}
}
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, "未知异常节点");
}
}
} else {
@@ -100,12 +106,12 @@ public class AutopilotAbility350And360 {
} else {
unableAutopilotReason = "未知系统模式";
}
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, unableAutopilotReason);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, unableAutopilotReason);
}
}
} else {
isAutopilotAbility = false;//是否能启动自动驾驶
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "SSM数据异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.LIB, "SSM数据异常");
}
//检测底盘相关
if (chassisStates != null) {
@@ -113,29 +119,30 @@ public class AutopilotAbility350And360 {
float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition();
if (brake > 0) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "制动踏板被踩下");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.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, "档位异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.CHASSIS, "档位异常");
}
}
}
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车");
if ((!isHQ && !isDF) || mapVersion < 30600) {
if (vehicleState != null) {
//TODO 关于手刹目前只有老底盘中存在这个字段df360开始其他车型未知
//电子驻车制动系统
if (vehicleState.hasParkingBrake()) {
boolean isBrake = vehicleState.getParkingBrake();
if (isBrake) {
isAutopilotAbility = false;
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.CHASSIS, "施加驻车");
}
}
}
}
if (listener != null) {
listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
}

View File

@@ -6,7 +6,7 @@ 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 com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
@@ -27,7 +27,7 @@ public class AutopilotAbility360 {
private OnAutopilotAbilityListener listener;
protected interface OnAutopilotAbilityListener {
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons);
void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons);
}
@@ -47,7 +47,7 @@ public class AutopilotAbility360 {
private void onCallback(SsmInfo.SsmStatusInf statusInfo) {
boolean isAutopilotAbility = true;//是否能启动自动驾驶
ArrayList<UnableAutopilotReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
ArrayList<UnableLaunchReason> unableAutopilotReasons = null;//不能启动自动驾驶原因
//检测节点状态相关
if (statusInfo != null) {
if (masterVersion == -1 && statusInfo.hasMasterVersion()) {
@@ -59,7 +59,7 @@ public class AutopilotAbility360 {
if (masterVersion > 2 && statusInfo.hasAutoPilotReady() && statusInfo.hasAutoPilotUnreadyReason()) {
isAutopilotAbility = statusInfo.getAutoPilotReady();
if (!isAutopilotAbility) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, statusInfo.getAutoPilotUnreadyReason());
}
} else if (masterVersion > 1 && statusInfo.hasAutoPilotReady()) {//如果 maser version 大于1还需要判断AutoPilotReady字段是否存在以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行
isAutopilotAbility = statusInfo.getAutoPilotReady();
@@ -71,13 +71,13 @@ public class AutopilotAbility360 {
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]);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + AutopilotAbilityManager.NODE_INFO_STATE_FIXED_FREQUENCY[state]);
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, nodeName + "未知异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, nodeName + "未知异常");
}
}
} else {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, "未知异常节点");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, "未知异常节点");
}
}
} else {
@@ -96,12 +96,12 @@ public class AutopilotAbility360 {
} else {
unableAutopilotReason = "未知系统模式";
}
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.SSM, unableAutopilotReason);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.SSM, unableAutopilotReason);
}
}
} else {
isAutopilotAbility = false;//是否能启动自动驾驶
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "SSM数据异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.LIB, "SSM数据异常");
}
if (fsmStatusReasonRespond != null) {
int count = fsmStatusReasonRespond.getFsmStatusReasonRespondCount();
@@ -110,11 +110,11 @@ public class AutopilotAbility360 {
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);
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.FSM, respond);
}
}
if (unableAutopilotReasons == null || unableAutopilotReasons.isEmpty()) {
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.LIB, "FSM数据异常");
unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableLaunchReason.SourceType.LIB, "FSM数据异常");
}
}
}

View File

@@ -10,9 +10,10 @@ import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.Constants;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason;
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
@@ -47,6 +48,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
private boolean isFutianSweeper = false;//是否是福田清扫车
private boolean isJinlvM1 = false;//是否是M1
private boolean isHQ = false;//是否是HQ
private boolean isDF = false;//是否是DF
private AutopilotAbility230 autopilotAbility230;
private AutopilotAbility250 autopilotAbility250;
private AutopilotAbility330 autopilotAbility330;
@@ -78,7 +80,10 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
}
public void setUnableLaunchAutopilotGear(Set<Chassis.GearPosition> unableLaunchAutopilotGear) {
this.unableLaunchAutopilotGear = unableLaunchAutopilotGear;
if (unableLaunchAutopilotGear != null) {
this.unableLaunchAutopilotGear = new HashSet<>(unableLaunchAutopilotGear);
taxiUnmanned();
}
}
/**
@@ -103,19 +108,32 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
* @param unableAutopilotReason 云隐
* @return 原因列表
*/
protected ArrayList<UnableAutopilotReason> addUnableAutopilotReason(ArrayList<UnableAutopilotReason> unableAutopilotReasons, UnableAutopilotReason.SourceType source, String unableAutopilotReason) {
protected ArrayList<UnableLaunchReason> addUnableAutopilotReason(ArrayList<UnableLaunchReason> unableAutopilotReasons, UnableLaunchReason.SourceType source, String unableAutopilotReason) {
if (unableAutopilotReasons == null) {
unableAutopilotReasons = new ArrayList<>();
}
unableAutopilotReasons.add(new UnableAutopilotReason(source, unableAutopilotReason));
unableAutopilotReasons.add(new UnableLaunchReason(source, unableAutopilotReason));
return unableAutopilotReasons;
}
/**
* Taxi无人化相关从MAP360开始去掉P档限制和手刹限制
*/
private void taxiUnmanned() {
if ((isHQ || isDF) && mapVersion >= 30600) {
if (unableLaunchAutopilotGear != null) {
unableLaunchAutopilotGear.remove(Chassis.GearPosition.GEAR_P);
}
}
}
public void setCarConfig(MessagePad.CarConfigResp carConfig) {
mapVersion = carConfig.getMapVersion();
isFutianSweeper = carConfig.getIsFutianSweeper();
isJinlvM1 = carConfig.getIsJinlvM1();
isHQ = carConfig.getIsHQ();
isDF = carConfig.getIsDF();
taxiUnmanned();
if (mapVersion != -1) {
stopTimer();
CupidLogUtils.i(TAG, "工控机版本=" + mapVersion);
@@ -128,7 +146,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
}
@Override
public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableAutopilotReason> unableAutopilotReasons) {
public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable ArrayList<UnableLaunchReason> unableAutopilotReasons) {
if (listener != null) {
listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons);
}
@@ -265,7 +283,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
stop330();
stop360();
if (autopilotAbility350And360 == null) {
autopilotAbility350And360 = new AutopilotAbility350And360();
autopilotAbility350And360 = new AutopilotAbility350And360(mapVersion, isHQ, isDF);
autopilotAbility350And360.start(this);
}
@@ -286,7 +304,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA
stop350And360();
stop360();
if (autopilotAbility250 == null) {
autopilotAbility250 = new AutopilotAbility250(mapVersion);
autopilotAbility250 = new AutopilotAbility250(mapVersion, isHQ, isDF);
autopilotAbility250.start(this);
}
} else {

View File

@@ -8,6 +8,7 @@ import com.zhidao.support.adas.high.AdasChannel;
import com.zhidao.support.adas.high.AdasManager;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.common.ParallelDrivingManager;
import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
import com.zhidao.support.adas.high.protocol.RawData;
@@ -24,6 +25,7 @@ public class CarConfigRespMessage extends MyAbstractMessageHandler {
carConfigResp = addPersonalParameter(carConfigResp);
AdasChannel.calculateTimeConsumingOnDispatchRaw("车机基础信息应答", raw.receiveTime);
AutopilotAbilityManager.getInstance().setCarConfig(carConfigResp);
ParallelDrivingManager.getInstance().setCarConfig(carConfigResp);
AdasManager.getInstance().setCarConfig(carConfigResp);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())

View File

@@ -2,6 +2,7 @@ package com.zhidao.support.adas.high.msg;
import com.google.protobuf.InvalidProtocolBufferException;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.ParallelDrivingManager;
import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
import com.zhidao.support.adas.high.protocol.RawData;
@@ -16,6 +17,7 @@ public class ChassisStatesMessage extends MyAbstractMessageHandler {
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
ChassisStatesOuterClass.ChassisStates chassisStates = ChassisStatesOuterClass.ChassisStates.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AutopilotAbilityManager.getInstance().setChassisStates(chassisStates);
ParallelDrivingManager.getInstance().setChassisStates(chassisStates);
if (adasListener != null) {
adasListener.onChassisStates(raw.getHeader(), chassisStates);
}

View File

@@ -5,6 +5,7 @@ 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.ParallelDrivingManager;
import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.protocol.RawData;
@@ -27,6 +28,7 @@ public class VehicleStateMessage extends MyAbstractMessageHandler {
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
AutopilotAbilityManager.getInstance().setVehicleState(vehicleState);
ParallelDrivingManager.getInstance().setVehicleState(vehicleState);
ChassisStatesOuterClass.ChassisStates chassisStates = compatibility(adasListener, raw, vehicleState);
if (adasListener != null) {
//TODO 暂时关闭老底盘转发 后期 会删除 onVehicleState
@@ -113,6 +115,7 @@ public class VehicleStateMessage extends MyAbstractMessageHandler {
}
ChassisStatesOuterClass.ChassisStates chassisStates = builder.build();
AutopilotAbilityManager.getInstance().setChassisStates(chassisStates);
ParallelDrivingManager.getInstance().setChassisStates(chassisStates);
return chassisStates;
}

View File

@@ -45,6 +45,12 @@ public interface IMogoMapUIController {
*/
void setDebugMode(Boolean debugMode);
/**
* 设置地图是否展示自车光圈
* @param displayAnimEnable 是否展示自车光圈
*/
void setDisplayAnimEnable(Boolean displayAnimEnable);
/**
* 进入VR 模式
*

View File

@@ -337,6 +337,19 @@ public class AMapViewWrapper implements IMogoMapView,
MapAutoApi.INSTANCE.setDebugMode(debugMode);
}
/**
* 自车光圈
* @param displayAnimEnable 是否展示自车光圈
*/
@Override
public void setDisplayAnimEnable(Boolean displayAnimEnable) {
if (checkAMapView()){
MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle();
style.setDisplayAnimEnable(displayAnimEnable);
mMapView.getMapAutoViewHelper().setMyLocationStyle(style);
}
}
@Override
public void changeMapVisualAngle(VisualAngleMode angelMode, MogoLatLng mogoLatLng) {
if(visualLock){

View File

@@ -83,6 +83,18 @@ public class MogoMapUIController implements IMogoMapUIController {
}
}
/**
* 自车光圈
* @param displayAnimEnable 是否展示自车光圈
*/
@Override
public void setDisplayAnimEnable(Boolean displayAnimEnable) {
initDelegate();
if(mDelegate != null){
mDelegate. setDisplayAnimEnable(displayAnimEnable);
}
}
@Override
public void changeMapVisualAngle(VisualAngleMode angelMode, MogoLatLng mogoLatLng) {
initDelegate();

View File

@@ -70,6 +70,17 @@ public class AMapUIController implements IMogoMapUIController {
}
}
/**
* 自车光圈
* @param displayAnimEnable 是否展示自车光圈
*/
@Override
public void setDisplayAnimEnable(Boolean displayAnimEnable) {
if(mClient != null){
mClient.setDisplayAnimEnable(displayAnimEnable);
}
}
@Override
public void changeMapVisualAngle(VisualAngleMode angelMode, MogoLatLng mogoLatLng) {
if (mClient != null) {