diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt
index fb5258738e..b8fbc960c6 100644
--- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt
+++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt
@@ -30,6 +30,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotControlProvider
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_RAIN
import com.mogo.eagle.core.function.api.map.collect.IMoGoMapDataCollectProvider
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager
+import com.mogo.eagle.core.function.call.cloud.CallerCloudCertManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager
@@ -125,6 +126,9 @@ class MoGoAutopilotControlProvider :
.setConnectionMode(AdasOptions.IPC_CONNECTION_MODE.PING)
.setPingAddressList(AdasManager.getInstance().pingAddressList)
.setPassenger(false)
+ .setEnableCertification(SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE))
+ .setRootCrt(CallerCloudCertManager.getRootCrtF())
+ .setDeviceCrt(CallerCloudCertManager.getDeviceCrtF())
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear)
// .setSubscribeInterfaceOptions(subscribeInterfaceOptions)//
.build()
@@ -253,6 +257,9 @@ class MoGoAutopilotControlProvider :
.setConnectionMode(AdasOptions.IPC_CONNECTION_MODE.PING)
.setPingAddressList(AdasManager.getInstance().pingAddressList)
.setPassenger(false)// 乘客端直连工控机改为false
+ .setEnableCertification(SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE))
+ .setRootCrt(CallerCloudCertManager.getRootCrtF())
+ .setDeviceCrt(CallerCloudCertManager.getDeviceCrtF())
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear)
.build()
AdasManager.getInstance().create(mContext, options, MoGoAdasMsgConnectStatusListenerImpl())
@@ -311,6 +318,9 @@ class MoGoAutopilotControlProvider :
// 设置IP地址
val options = AdasOptions.newBuilder()
.setPassenger(false)
+ .setEnableCertification(SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE))
+ .setRootCrt(CallerCloudCertManager.getRootCrtF())
+ .setDeviceCrt(CallerCloudCertManager.getDeviceCrtF())
.setConnectionMode(AdasOptions.IPC_CONNECTION_MODE.SPECIFIED)
.setSpecifiedAddress(autoPilotIp)
.build()
diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt
index de61dc577f..1b856b1ab8 100644
--- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt
+++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt
@@ -369,20 +369,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
invokeAutopilotSNRequest(basicInfoReq)
}
- /**
- * 域控证书认证状态
- * 启用认证需要配置 AdasOptions.setEnableCertification()
- * 连接时启用认证 后才会有证认结果
- * ROOT证书异常会影响校验域控证书
- * PAD证书异常会影响域控端校验的证书校验,域控端证书校验失败将会断开连接,且并不会给出断开原因,ADAS LIB会执行重连操作(如果配置启用重连)
- * 假如校验域控证书认证失败会主动断开连接,且不进行重连
- *
- * @param status 域控证书认证结果{@link AdasConstants.CertificationStatus}
- */
- override fun onCertification(status: AdasConstants.CertificationStatus) {
-
- }
-
//工控机基础配置信息
@ChainLog(
linkChainLog = CHAIN_TYPE_STATUS,
@@ -400,7 +386,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号
AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址
AppConfigInfo.protocolVersionNumber = carConfigResp.protocolVersionValue//工控机协议版本
- AppConfigInfo.isConnectAutopilot = true
invokeAutopilotCarConfigData(carConfigResp)
}
}
diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt
index c36c6cfd54..494f219b3e 100644
--- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt
+++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt
@@ -1,5 +1,6 @@
package com.mogo.eagle.core.function.datacenter.autopilot.adapter
+import android.text.TextUtils
import com.mogo.commons.debug.DebugConfig.NET_MODE_DEMO
import com.mogo.commons.debug.DebugConfig.NET_MODE_DEV
import com.mogo.commons.debug.DebugConfig.NET_MODE_QA
@@ -22,6 +23,7 @@ import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C
+import com.mogo.eagle.core.utilcode.util.AppUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.OnAdasConnectStatusListener
@@ -34,6 +36,7 @@ import com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.DRIVER
import com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.PASSENGER
import com.zhjt.mogo.adas.data.AdasConstants
import mogo.telematics.pad.MessagePad
+import java.util.concurrent.atomic.AtomicBoolean
/**
* ADAS-SDK与工控机连接状态回调
@@ -52,9 +55,15 @@ class MoGoAdasMsgConnectStatusListenerImpl :
@Volatile
private var isFirstDisconnected = false//只有连接成功后断开连接才加入消息盒子
+ private val isReceivedBasicInfoReq = AtomicBoolean(false)//是否接收到域控基础信息请求
+ private val isSentBasicInfoReq = AtomicBoolean(false)//是否已回复域控基础信息请求
+
+ @Volatile
+ private var certificationResult = ""
init {
CallerCloudListenerManager.addListener(TAG, this)
+ CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerAutopilotActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED)
CallerParallelDrivingActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED)
}
@@ -68,11 +77,11 @@ class MoGoAdasMsgConnectStatusListenerImpl :
AdasManager.getInstance().ipcConnectedIp
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort =
AdasManager.getInstance().ipcConnectedPort
- CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = false
- AppConfigInfo.isConnectAutopilot = false
//与工控机断开连接,需要重置自动驾驶状态(包括上传至云平台缓存信息),等待连接成功后同步状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state = 0
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().pilotmode = 0
+ isReceivedBasicInfoReq.set(false)
+ isSentBasicInfoReq.set(false)
}
/**
@@ -85,11 +94,16 @@ class MoGoAdasMsgConnectStatusListenerImpl :
* {@link AdasConstants.IpcConnectionStatus#SERVER_DISCONNECTED} 服务端断开(如果服务端关闭时发送了原因将存在,如果服务端关闭时未发送将为null)
*/
override fun onConnectionIPCStatus(status: AdasConstants.IpcConnectionStatus, reason: String?) {
- CallerAutopilotActionsListenerManager.setConnected(status == AdasConstants.IpcConnectionStatus.CONNECTED)
- CallerParallelDrivingActionsListenerManager.setConnected(status == AdasConstants.IpcConnectionStatus.CONNECTED)
- AppConfigInfo.connectStatusDescribe = reason
+ val isConnected = status == AdasConstants.IpcConnectionStatus.CONNECTED
+ CallerAutopilotActionsListenerManager.setConnected(isConnected)
+ CallerParallelDrivingActionsListenerManager.setConnected(isConnected)
+ CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = isConnected
+ AppConfigInfo.isConnectAutopilot = isConnected
+
+ var connectStatusDescribe = "未连接"
when (status) {
AdasConstants.IpcConnectionStatus.DISCONNECTED -> {
+ connectStatusDescribe = "主动断开连接"
CallerLogger.d(
"$M_D_C$TAG",
"未连接或主动断开连接(未连接:鹰眼首次启动时未调用连接函数【目前鹰眼默认启动就会调用连接函数】;主动断开连接:主动调用断开连接函数;)"
@@ -98,7 +112,8 @@ class MoGoAdasMsgConnectStatusListenerImpl :
}
AdasConstants.IpcConnectionStatus.CONNECTED -> {
- CallerLogger.d("$M_D_C$TAG", "已连接")
+ connectStatusDescribe = "已连接"
+ CallerLogger.d("$M_D_C$TAG", connectStatusDescribe)
// 初始化自动驾驶状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
AdasManager.getInstance().ipcConnectedIp
@@ -106,10 +121,6 @@ class MoGoAdasMsgConnectStatusListenerImpl :
AdasManager.getInstance().ipcConnectedPort
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().version =
AdasManager.getInstance().adasVersion
- CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = true
- AppConfigInfo.isConnectAutopilot = true
- // 同步SN给工控机
- syncBasicInfoToAutopilot()
//每次工控机连接成功后,需同步当前设置的美化模式状态
CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode)
//当连接状态是关闭美化模式时,同步给工控机
@@ -122,92 +133,157 @@ class MoGoAdasMsgConnectStatusListenerImpl :
}
AdasConstants.IpcConnectionStatus.CONNECTING -> {
- CallerLogger.d("$M_D_C$TAG", "域控连接中")
+ connectStatusDescribe = "连接中"
+ CallerLogger.d("$M_D_C$TAG", connectStatusDescribe)
connectToast("域控连接中")
}
AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER -> {
- CallerLogger.d("$M_D_C$TAG", "域控重连中(定时器)")
+ connectStatusDescribe = "重连中(定时器)"
+ CallerLogger.d("$M_D_C$TAG", connectStatusDescribe)
connectToast("域控重连中")
}
AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK -> {
- CallerLogger.d("$M_D_C$TAG", "域控重连中(网络监听)")
+ connectStatusDescribe = "重连中(网络监听)"
+ CallerLogger.d("$M_D_C$TAG", connectStatusDescribe)
connectToast("域控重连中")
}
AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION -> {
+ connectStatusDescribe =
+ "连接异常(鹰眼与域控连接失败、无法连接、非正常断开等),原因:$reason"
CallerLogger.d(
"$M_D_C$TAG",
- "连接异常(表示鹰眼与域控连接失败、无法连接、非正常断开等),原因:$reason"
+ connectStatusDescribe
)
resetArgs()
}
AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS -> {
+ connectStatusDescribe =
+ "非法地址(连接模式为指定地址时:表示当前鹰眼调用连接时传入的域控地址错误或不符合规则【不修改默认配置不会出现此问题】;连接模式为PING模式时:表示传入的PING地址列表存在问题)"
CallerLogger.d(
"$M_D_C$TAG",
- "非法地址(连接模式为指定地址时:表示当前鹰眼调用连接时传入的域控地址错误或不符合规则【不修改默认配置不会出现此问题】;连接模式为PING模式时:表示传入的PING地址列表存在问题)"
+ connectStatusDescribe
)
resetArgs()
connectToast("非法域控地址")
}
AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> {
+ connectStatusDescribe = "正在搜索域控地址"
CallerLogger.d(
"$M_D_C$TAG",
- "正在搜索域控地址(表示当前鹰眼正在查找是否有可用的域控地址)"
+ connectStatusDescribe
)
connectToast("正在搜索域控地址")
}
AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS -> {
+ connectStatusDescribe =
+ "找不到可用地址(域控地址列表中的全部地址均无法连通【不修改默认配置的情况下需要排查PAD是否连接车载路由器、工控机是否连接车载路由器、工控机是否开机等】)"
CallerLogger.d(
"$M_D_C$TAG",
- "找不到可用地址(当前鹰眼配置的域控地址列表中的全部地址均无法PING通【不修改默认配置的情况下需要排查PAD是否连接车载路由器、工控机是否连接车载路由器、工控机是否开机等】)"
+ connectStatusDescribe
)
resetArgs()
}
AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED -> {
+ connectStatusDescribe =
+ "域控证书认证异常(鹰眼端或鹰眼端和域控端启用认证后出现异常),原因$certificationResult"
CallerLogger.d(
"$M_D_C$TAG",
- "认证异常(表示鹰眼端或鹰眼端和域控端启用认证后,认证出现异常。具体认证异常状态详情见认证状态CertificationStatus【鹰眼端验证域控证书失败会断开连接不进行重连;域控端验证鹰眼端证书失败会断开连接,但是由于域控断开并没有发送断开的原因所以鹰眼会自动重连,重连次数可配置为:用不重连、无限重连、指定次数重连】)"
+ "域控证书认证异常(鹰眼端或鹰眼端和域控端启用认证后,认证出现异常。具体认证异常状态详情见认证状态CertificationStatus【鹰眼端验证域控证书失败会断开连接不进行重连;域控端验证鹰眼端证书失败会断开连接,但是由于域控断开并没有发送断开的原因所以鹰眼会自动重连,重连次数可配置为:用不重连、无限重连、指定次数重连】)"
)
resetArgs()
}
AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT -> {
+ connectStatusDescribe =
+ "心跳超时(连接域控成功后在一段时间内未收到域控任何数据),超时时间:${reason}秒"
CallerLogger.d(
"$M_D_C$TAG",
- "心跳超时(表示连接域控成功后在一段时间内未收到域控任何数据,默认4秒【可以配置】),超时时间:${reason}秒"
+ connectStatusDescribe
)
resetArgs()
}
AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH -> {
+ connectStatusDescribe = "協議不匹配(被连接的域控端非WebSocket协议【可能性非常低】)"
CallerLogger.d(
"$M_D_C$TAG",
- "協議不匹配(表示被连接的服务端非WebSocket协议【可能性非常低】)"
+ connectStatusDescribe
)
resetArgs()
}
AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED -> {
+ connectStatusDescribe =
+ "域控主动断开连接(域控主动发起断开WebSocket连接,目前主要原因有:1.证书认证失败;2.老版本MAP不支持多连接的情况下会踢掉客户端;),域控断开发送的消息:${reason}"
CallerLogger.d(
"$M_D_C$TAG",
- "域控主动断开连接(表示域控主动发起断开WebSocket连接,目前主要原因有:1.证书认证失败;2.老版本MAP不支持多连接的情况下会踢掉客户端;),域控断开发送的消息:${reason}"
+ connectStatusDescribe
)
resetArgs()
}
}
+ AppConfigInfo.connectStatusDescribe = connectStatusDescribe
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ipcConnStatus = status
- CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatusDescribe = reason
+ CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatusReason = reason
CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus()
CallerAutoPilotStatusListenerManager.invokeAutoPilotIPCStatusChanged(status, reason)
saveIntoMsgBox(status, reason)
}
+ /**
+ * 域控证书认证状态
+ * 启用认证需要配置 AdasOptions.setEnableCertification()
+ * 连接时启用认证 后才会有证认结果
+ * ROOT证书异常会影响校验域控证书
+ * PAD证书异常会影响域控端校验的证书校验,域控端证书校验失败将会断开连接,且并不会给出断开原因,ADAS LIB会执行重连操作(如果配置启用重连)
+ * 假如校验域控证书认证失败会主动断开连接,且不进行重连
+ *
+ * @param status 域控证书认证结果{@link AdasConstants.CertificationStatus}
+ */
+ override fun onCertification(status: AdasConstants.CertificationStatus) {
+ if (status == AdasConstants.CertificationStatus.TIMEOUT) {
+ certificationResult = ":认证超时";
+ CallerLogger.d(
+ "$M_D_C$TAG",
+ "域控证书认证超时(表示域控未发送BasicInfoReq接口的数据【这种情况可能是连接出现了问题】)"
+ )
+ } else {
+ if (status != AdasConstants.CertificationStatus.NOT_ENABLED) {
+ if (status == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_SUCCESS) {
+ CallerLogger.d(
+ "$M_D_C$TAG",
+ "域控证书链校验成功"
+ )
+ } else if (status == AdasConstants.CertificationStatus.ROOT_CRT_ERROR) {
+ certificationResult = ":ROOT证书异常";
+ CallerLogger.d(
+ "$M_D_C$TAG",
+ "ROOT证书异常(表示未传递证书,没有拿到ROOT证书)"
+ )
+ } else if (status == AdasConstants.CertificationStatus.IPC_CRT_ERROR) {
+ certificationResult = ":域控证书异常";
+ CallerLogger.d(
+ "$M_D_C$TAG",
+ "域控证书异常(表示域控发送了BasicInfoReq接口的数据但是未传递证书或证书解码失败【失败的可能性很低】)"
+ )
+ } else if (status == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_FAILED) {
+ certificationResult = ":证书链校验失败";
+ CallerLogger.d(
+ "$M_D_C$TAG",
+ "域控证书链校验失败(表示证书链未验证通过。证书不匹配、证书格式不正确)"
+ )
+ }
+ }
+ }
+ }
+
private fun saveIntoMsgBox(
status: AdasConstants.IpcConnectionStatus,
reason: String?
@@ -219,6 +295,7 @@ class MoGoAdasMsgConnectStatusListenerImpl :
isFirstException = true
isFirstDisconnected = true
}
+
AdasConstants.IpcConnectionStatus.DISCONNECTED -> {
if (isFirstDisconnected) {
title = "连接异常"
@@ -239,14 +316,22 @@ class MoGoAdasMsgConnectStatusListenerImpl :
isFirstException = false
}
}
+
+ AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED -> {
+ title = "连接异常"
+ content = "域控证书认证异常$certificationResult"
+ }
+
AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT -> {
title = "连接异常"
content = "域控心跳超时"
}
+
AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED -> {
title = "连接异常"
content = "域控主动断开连接"
}
+
else -> {}
}
if (title.isNotEmpty() && content.isNotEmpty()) {
@@ -267,7 +352,11 @@ class MoGoAdasMsgConnectStatusListenerImpl :
* 工控机获取SN
*/
override fun onAutopilotSNRequest(basicInfoReq: MessagePad.BasicInfoReq) {
- syncBasicInfoToAutopilot()
+ CallerLogger.d("$M_D_C$TAG", "收到域控基础信息请求");
+ isReceivedBasicInfoReq.set(true)
+ if (!TextUtils.isEmpty(SharedPrefsMgr.getInstance().sn)) {
+ syncBasicInfoToAutopilot()
+ }
}
/**
@@ -281,7 +370,9 @@ class MoGoAdasMsgConnectStatusListenerImpl :
.sendBasicInfoResp(
SharedPrefsMgr.getInstance().sn,
getEnvironment(),
- getTerminalRole()
+ getTerminalRole(),
+ AppUtils.getAppVersionCode(),
+ AppUtils.getAppVersionName()
)
} else {
// 乘客屏先不传sn
@@ -289,9 +380,12 @@ class MoGoAdasMsgConnectStatusListenerImpl :
.sendBasicInfoResp(
"",
getEnvironment(),
- getTerminalRole()
+ getTerminalRole(),
+ AppUtils.getAppVersionCode(),
+ AppUtils.getAppVersionName()
)
}
+ isSentBasicInfoReq.set(true)
}
private fun getEnvironment(): Int {
@@ -313,7 +407,10 @@ class MoGoAdasMsgConnectStatusListenerImpl :
}
override fun tokenGot(token: String, sn: String) {
- syncBasicInfoToAutopilot()
+ CallerLogger.d("$M_D_C$TAG", "SN获取成功=$sn");
+ if (isReceivedBasicInfoReq.get() && !isSentBasicInfoReq.get()) {//已收到域控基础信息请求,但是之前SN没有所以还未回复,现在获取到SN后再进行回复
+ syncBasicInfoToAutopilot()
+ }
}
}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
index 88c7e0146a..28b3b3734f 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
@@ -29,6 +29,7 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.constants.SharedPrefsConstants
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.module.status.MogoStatusManager
+import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig
@@ -49,6 +50,7 @@ import com.mogo.eagle.core.data.multidisplay.TelematicConstant
import com.mogo.eagle.core.data.obu.MogoObuConst
import com.mogo.eagle.core.data.obu.ObuStatusInfo
import com.mogo.eagle.core.function.api.autopilot.*
+import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuConnectListener
import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuInfoListener
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener
@@ -58,6 +60,8 @@ import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_RAIN
import com.mogo.eagle.core.function.api.setting.ISopSettingListener
import com.mogo.eagle.core.function.call.autopilot.*
+import com.mogo.eagle.core.function.call.cloud.CallerCloudCertManager
+import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
@@ -82,15 +86,12 @@ import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.permissions.BackgrounderPermission
-import com.mogo.commons.storage.SharedPrefsMgr
-import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
-import com.mogo.eagle.core.function.call.cloud.CallerCloudCertManager
-import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.map.MogoData.Companion.mogoMapData
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.*
+import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.service.chain.ChainLog
import kotlinx.android.synthetic.main.view_debug_setting.view.*
import kotlinx.coroutines.*
@@ -193,6 +194,8 @@ internal class DebugSettingView @JvmOverloads constructor(
// 高精地图是否已缓存
private var isHDCached = false
+ private var isClickCheckedCbSsl = false//是否已经点击且选中证书认证按钮
+ private var isFirstDownLoadCertHint = false
init {
LayoutInflater.from(context).inflate(R.layout.view_debug_setting, this, true)
@@ -724,8 +727,8 @@ internal class DebugSettingView @JvmOverloads constructor(
CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode)
CallerSopSettingManager.invokeDemoModeListener(isChecked)
CallerHmiViewControlListenerManager.invokeFuncMode(
- FUNC_MODE_DEMO,
- FunctionBuildConfig.isDemoMode
+ FUNC_MODE_DEMO,
+ FunctionBuildConfig.isDemoMode
)
if (!FunctionBuildConfig.isDemoMode) {
//关闭美化模式时,通知工控机
@@ -1058,8 +1061,16 @@ internal class DebugSettingView @JvmOverloads constructor(
ToastUtils.showLong("经纬度复制成功")
}
- val certTxt = if(CallerCloudCertManager.getRootCrtF().isNullOrEmpty()) "未下载证书" else "已下载证书"
- tvCertFile.text = "证书状态: $certTxt"
+ val certTxt =
+ if (CallerCloudCertManager.getRootCrtF()
+ .isNullOrEmpty()
+ ) "未下载证书" else "已下载证书"
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ tvCertFile.text = Html.fromHtml("证书状态: $certTxt", Html.FROM_HTML_MODE_LEGACY)
+ } else {
+ tvCertFile.text = Html.fromHtml("证书状态: $certTxt")
+ }
+
//状态中心-后台优化状态
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -1272,27 +1283,49 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
//是否启用证书认证
- cbSsl.isChecked = SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION,false)
+ cbSsl.isChecked =
+ SharedPrefsMgr.getInstance().getBoolean(
+ MoGoConfig.AUTOPILOT_CERTIFICATION,
+ MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE
+ )
cbSsl.setOnCheckedChangeListener { _, isChecked ->
- cbSsl.isChecked = isChecked
- SharedPrefsMgr.getInstance().putBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION,isChecked)
- //下载证书
- if(isChecked){
- if(CallerCloudCertManager.getRootCrtF().isNullOrEmpty()){
- CallerCloudCertManager.certFileDownLoad{ errorMsg ->
+ isClickCheckedCbSsl = isChecked
+// 下载证书
+ if (isChecked) {
+ if (CallerCloudCertManager.getRootCrtF().isNullOrEmpty()) {
+ if (!isFirstDownLoadCertHint) {
+ isFirstDownLoadCertHint = true
+ ToastUtils.showShort("证书文件不存在,正在下载")
+ }
+ cbSsl.isChecked = false
+ CallerCloudCertManager.certFileDownLoad { errorMsg ->
ThreadUtils.runOnUiThread {
ToastUtils.showShort(errorMsg)
}
}
}
}
+ SharedPrefsMgr.getInstance()
+ .putBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, cbSsl.isChecked)
}
}
override fun authCrtFile(device: String, root: String) {
super.authCrtFile(device, root)
ThreadUtils.runOnUiThread {
- tvCertFile.text = "证书状态: 已下载证书"
+ if (isClickCheckedCbSsl) {
+ cbSsl.isChecked = true
+ SharedPrefsMgr.getInstance()
+ .putBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, true)
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ tvCertFile.text = Html.fromHtml(
+ "证书状态: 已下载证书",
+ Html.FROM_HTML_MODE_LEGACY
+ )
+ } else {
+ tvCertFile.text = Html.fromHtml("证书状态: 已下载证书")
+ }
}
}
@@ -1426,10 +1459,10 @@ internal class DebugSettingView @JvmOverloads constructor(
/**
* 设置是否开启pre check, true-打开,false-关闭
*/
- tbTraceEnable.isChecked = SharedPrefsMgr.getInstance().getBoolean("TRACE_ENABLE",true)
+ tbTraceEnable.isChecked = SharedPrefsMgr.getInstance().getBoolean("TRACE_ENABLE", true)
tbTraceEnable.setOnCheckedChangeListener { _, isChecked ->
- HmiActionLog.hmiAction(TAG + "TRACE_ENABLE",isChecked)
- SharedPrefsMgr.getInstance().putBoolean("TRACE_ENABLE",isChecked)
+ HmiActionLog.hmiAction(TAG + "TRACE_ENABLE", isChecked)
+ SharedPrefsMgr.getInstance().putBoolean("TRACE_ENABLE", isChecked)
CallerDevaToolsManager.setTraceEnable(isChecked)
}
@@ -1924,55 +1957,47 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
- /**
- * 自动驾驶状态回调
- */
- override fun onAutopilotStatusResponse(state: Int) {
- setAutopilotConnectStatus()
+ override fun onAutopilotIpcConnectStatusChanged(
+ status: AdasConstants.IpcConnectionStatus,
+ reason: String?
+ ) {
+ setAutopilotConnectStatus(status)
}
/**
* 设置工控机连接状态
*/
- private fun setAutopilotConnectStatus() {
- ThreadUtils.runOnUiThread {
- tvAutopilotConnectStatus.text = Html.fromHtml(
- "工控机连接状态:${
- if (AppConfigInfo.isConnectAutopilot) {
- "正常"
- } else {
- "异常 原因:${
- if (AppConfigInfo.connectStatusDescribe.isNullOrEmpty()) {
- "主动断开连接"
- } else {
- AppConfigInfo.connectStatusDescribe
- }
- }"
- }
- }"
- )
+ private fun setAutopilotConnectStatus(status: AdasConstants.IpcConnectionStatus = AdasConstants.IpcConnectionStatus.DISCONNECTED) {
+ val color = when (status) {
+ AdasConstants.IpcConnectionStatus.CONNECTED -> {
+ ""
+ }
- if (AppConfigInfo.isConnectAutopilot) {
+ AdasConstants.IpcConnectionStatus.CONNECTING,
+ AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER,
+ AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK,
+ AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> {
+ ""
+ }
+
+ else -> {
+ ""
+ }
+ }
+ val msg = Html.fromHtml("工控机连接状态:${color}${AppConfigInfo.connectStatusDescribe}")
+ ThreadUtils.runOnUiThread {
+ tvAutopilotConnectStatus.text = msg
+ if (status == AdasConstants.IpcConnectionStatus.CONNECTED ||
+ status == AdasConstants.IpcConnectionStatus.CONNECTING ||
+ status == AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER ||
+ status == AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK ||
+ status == AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS
+ ) {
tvIpcConnectStatus.minLines = 1
} else {
tvIpcConnectStatus.minLines = 4
}
-
- tvIpcConnectStatus.text = Html.fromHtml(
- "工控机连接状态:${
- if (AppConfigInfo.isConnectAutopilot) {
- "正常"
- } else {
- "异常 原因:${
- if (AppConfigInfo.connectStatusDescribe.isNullOrEmpty()) {
- "主动断开连接"
- } else {
- AppConfigInfo.connectStatusDescribe
- }
- }"
- }
- }"
- )
+ tvIpcConnectStatus.text = msg
//如果是乘客端,则不显示工控机连接状态
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
tvIpcConnectStatus.visibility = View.GONE
diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt
index e97023a865..24755f3ee5 100644
--- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt
@@ -76,7 +76,7 @@ object AppConfigInfo {
var isConnectAutopilot: Boolean = false
//连接工控机状态文字描述
- var connectStatusDescribe: String? = null
+ var connectStatusDescribe: String = "未连接"
// 是否OBU
var isConnectObu: Boolean = false
diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotStatusInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotStatusInfo.kt
index 5029ff9526..3a3b6d3e5d 100644
--- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotStatusInfo.kt
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotStatusInfo.kt
@@ -23,9 +23,9 @@ open class AutopilotStatusInfo : Serializable, Cloneable {
var connectStatus = false
/**
- * 工控机连接状态文字描述
+ * 工控机连接状态返回的Reason
*/
- var connectStatusDescribe: String? = null
+ var connectStatusReason: String? = null
var version: String? = null
/**
@@ -78,11 +78,11 @@ open class AutopilotStatusInfo : Serializable, Cloneable {
var isArriveAtStation: Boolean = false
override fun toString(): String {
- return "connectIP=$connectIP, connectPort=$connectPort, " +
- "connectStatus=$connectStatus, connectDescribe=$connectStatusDescribe, version=$version, dockVersion=$dockVersion," +
+ return "IPCConnectIP=$connectIP, IPCConnectPort=$connectPort, " +
+ "IPCConnected=$connectStatus, IPCConnectStatus=$ipcConnStatus, IPCConnectDescribe=$connectStatusReason, version=$version, dockVersion=$dockVersion," +
" locationStatus=$locationStatus), locationLat=$locationLat, locationLon=$locationLon," +
" satelliteTime=$satelliteTime, state=$state, " +
- " pilotmode=$pilotmode, ipcConnStatus=$ipcConnStatus, autopilotControlParameters=$autopilotControlParameters"
+ " pilotmode=$pilotmode, autopilotControlParameters=$autopilotControlParameters"
}
public override fun clone(): AutopilotStatusInfo {
diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MoGoConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MoGoConfig.kt
index 5d877bf2a2..57ee41178b 100644
--- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MoGoConfig.kt
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MoGoConfig.kt
@@ -13,6 +13,7 @@ object MoGoConfig {
const val AUTOPILOT_IP = "AUTOPILOT_IP"
//调试窗控制连接域控时是否启用认证存储key
const val AUTOPILOT_CERTIFICATION = "AUTOPILOT_CERTIFICATION"
+ const val AUTOPILOT_CERTIFICATION_DEFAULT_VALUE = false
// CMD全量日志抓取
const val CATCH_LOG = "CATCH_LOG"
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudCertManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudCertManager.kt
index 0961d2c082..0209304d68 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudCertManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/cloud/CallerCloudCertManager.kt
@@ -1,10 +1,12 @@
package com.mogo.eagle.core.function.call.cloud
+import com.elegant.analytics.utils.Base64
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.function.api.cloud.IMoGoCertProvider
import com.mogo.eagle.core.function.call.base.CallerBase
import com.zhjt.service.chain.ChainLog
+import java.nio.charset.StandardCharsets
object CallerCloudCertManager {
@@ -25,10 +27,18 @@ object CallerCloudCertManager {
}
fun getDeviceCrtF(): String? {
- return certProviderApi.getDeviceCrtF()
+ var crt = certProviderApi.getDeviceCrtF()
+ if (!crt.isNullOrEmpty()) {
+ crt = String(Base64.decode(crt, Base64.NO_WRAP), StandardCharsets.UTF_8)
+ }
+ return crt
}
fun getRootCrtF(): String? {
- return certProviderApi.getRootCrtF()
+ var crt = certProviderApi.getRootCrtF()
+ if (!crt.isNullOrEmpty()) {
+ crt = String(Base64.decode(crt, Base64.NO_WRAP), StandardCharsets.UTF_8)
+ }
+ return crt
}
}
\ No newline at end of file
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java
index 76ad39b7f0..57ca479e82 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java
@@ -590,8 +590,8 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
}
}
}
- if (mAdasListener != null) {
- mAdasListener.onCertification(result);
+ if (adasConnectStatusListener != null) {
+ adasConnectStatusListener.onCertification(result);
}
CupidLogUtils.log(TAG, "证书验证状态=" + result);
if (result == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_SUCCESS) {
@@ -633,7 +633,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
}
String rootCrt = adasOptions.getRootCrt();
if (!TextUtils.isEmpty(rootCrt)) {
- certification(rootCrt, basicInfoReq.getCertification());
+ certification(false, rootCrt, basicInfoReq.getCertification());
}
} else {
IMsg iMsg = myMessageFactory.createMessage(messageType);
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java
index 049c670a63..12f2bcfb3e 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java
@@ -1,5 +1,6 @@
package com.zhidao.support.adas.high;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.zhidao.support.adas.high.bean.VersionCompatibility;
@@ -23,6 +24,18 @@ public interface OnAdasConnectStatusListener {
*/
void onConnectionIPCStatus(AdasConstants.IpcConnectionStatus status, @Nullable String reason);
+ /**
+ * 域控证书认证状态
+ * 启用认证需要配置 AdasOptions.setEnableCertification()
+ * 连接时启用认证 后才会有证认结果
+ * ROOT证书异常会影响校验域控证书
+ * PAD证书异常会影响域控端校验的证书校验,域控端证书校验失败将会断开连接,且并不会给出断开原因,ADAS LIB会执行重连操作(如果配置启用重连)
+ * 假如校验域控证书认证失败会主动断开连接,且不进行重连
+ *
+ * @param status 域控证书认证结果{@link AdasConstants.CertificationStatus}
+ */
+ void onCertification(@NonNull AdasConstants.CertificationStatus status);
+
/**
* 与工控机版本的兼容性
*
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
index 205c062c41..d50e61c691 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
@@ -155,18 +155,6 @@ public interface OnAdasListener {
*/
void onBasicInfoReq(MessagePad.Header header, @NonNull MessagePad.BasicInfoReq basicInfoReq);
- /**
- * 域控证书认证状态
- * 启用认证需要配置 AdasOptions.setEnableCertification()
- * 连接时启用认证 后才会有证认结果
- * ROOT证书异常会影响校验域控证书
- * PAD证书异常会影响域控端校验的证书校验,域控端证书校验失败将会断开连接,且并不会给出断开原因,ADAS LIB会执行重连操作(如果配置启用重连)
- * 假如校验域控证书认证失败会主动断开连接,且不进行重连
- *
- * @param status 域控证书认证结果{@link AdasConstants.CertificationStatus}
- */
- void onCertification(@NonNull AdasConstants.CertificationStatus status);
-
/**
* 车机基础信息应答
*