diff --git a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt
index cf0640401d..e33aff3eed 100644
--- a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt
+++ b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt
@@ -162,7 +162,7 @@ object DebugDataDispatch {
newBuilder.src = "2"
newBuilder.level = ""
var autopilotStatistics =
- AutopilotStatistics(1, SystemClock.elapsedRealtime(), null, null ,newBuilder.build())
+ AutopilotStatistics(1, SystemClock.elapsedRealtime(), AutopilotStatistics.Source.LIB,null, null ,newBuilder.build())
CallerAutopilotStatisticsListenerManager.invokeAutopilotStatistics(autopilotStatistics)
}
stopSite -> {
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 5494a0ca96..ed326e701b 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
@@ -82,6 +82,7 @@ import com.zhjt.service.chain.ChainLog
import io.netty.channel.Channel
import mogo.telematics.pad.MessagePad
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest
+import system_master.SsmInfo
import java.util.*
import java.util.concurrent.TimeUnit
@@ -1480,4 +1481,36 @@ class MoGoAutopilotControlProvider :
return AdasManager.getInstance().sendSimulationWireFailure(isTrigger)>-1
}
+ /**
+ * SSM发送OTA升级提示请求响应
+ * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()}
+ * @param ifUpgrade {@link SsmInfo.IfUpgrade#IMMEDIATELY}:立即
+ * {@link SsmInfo.IfUpgrade#DELAY}:推迟
+ */
+ override fun sendSsmFuncOtaDownloadResponse(
+ token: String,
+ ifUpgrade: SsmInfo.IfUpgrade
+ ): Boolean {
+ return AdasManager.getInstance().sendSsmFuncOtaDownloadResponse(token, ifUpgrade)>-1
+ }
+
+ /**
+ * 查询OTA状态
+ * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()}
+ * 如果没有可以传null或""
+ */
+ override fun sendSsmFuncOtaStatusQuery(token: String): Boolean {
+ return AdasManager.getInstance().sendSsmFuncOtaStatusQuery(token)>-1
+ }
+
+ /**
+ * 人工接管时获取前方和后方摄像头数据
+ * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求
+ * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头
+ * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)}
+ */
+ override fun sendCaptureImgReqOnTakeOver(uuid: Int): Boolean {
+ return AdasManager.getInstance().sendCaptureImgReqOnTakeOver(uuid)>-1
+ }
+
}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt
index 87b6d7c4f9..e5824a8c58 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
@@ -83,6 +83,8 @@ import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskL
import com.mogo.eagle.core.function.call.autopilot.CallerTakeoverListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerV2XListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerV2nNioEventListenerManager
+import com.mogo.eagle.core.function.call.devatools.CallerCaptureImgManager
+import com.mogo.eagle.core.function.call.devatools.CallerOTAManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.call.obu.CallerObuMapMathListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsiListenerManager
@@ -439,7 +441,9 @@ class MoGoAdasListenerImpl : OnAdasListener {
timestamp: Long,
request: SsmInfo.OtaDownloadRequest?
) {
-
+ if(request != null){
+ CallerOTAManager.invokeOtaDownloadRequest(request)
+ }
}
/**
@@ -456,7 +460,9 @@ class MoGoAdasListenerImpl : OnAdasListener {
timestamp: Long,
progress: SsmInfo.OtaLoadingProgess?
) {
-
+ if(progress != null){
+ CallerOTAManager.invokeOtaLoadingProgress(progress)
+ }
}
/**
@@ -477,7 +483,9 @@ class MoGoAdasListenerImpl : OnAdasListener {
isQuery: Boolean,
status: SsmInfo.OtaStatus?
) {
-
+ if(status != null){
+ CallerOTAManager.invokeOtaStatus(status)
+ }
}
/**
@@ -1350,7 +1358,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
isFront: Boolean,
data: MessagePad.CaptureImgOnTakeOver
) {
-
+ CallerCaptureImgManager.invokeCaptureImgOnTakeOver(isFront, data)
}
/**
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt
index a728266da4..5401c0a2cf 100644
--- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt
@@ -73,6 +73,7 @@ import com.zhjt.mogo_core_function_devatools.mofang.MoGoMoFangProviderImpl
import com.zhjt.mogo_core_function_devatools.monitor.MonitorManager
import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb
import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb.Companion.getDb
+import com.zhjt.mogo_core_function_devatools.ota.OTAUpgradeManager
import com.zhjt.mogo_core_function_devatools.perf.MoGoCpuUsageProviderImpl
import com.zhjt.mogo_core_function_devatools.report.IPCReportManager.Companion.iPCReportManager
import com.zhjt.mogo_core_function_devatools.scene.SceneManager.Companion.sceneManager
@@ -204,6 +205,7 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
// apmEnvProvider.init(if(DebugConfig.isDebug()) "0" else "1", "${ DebugConfig.getNetMode() }", mDockerVersion ?: "")
BadCaseManager.init(mContext!!)
ColdStartManager.init(mContext!!)
+ OTAUpgradeManager.init(mContext!!)
if (DebugConfig.isDebug()) {
SdtManager.init(mContext!!, true, DetectResultImpl())
}
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAManager.kt
deleted file mode 100644
index 17315896cc..0000000000
--- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAManager.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.zhjt.mogo_core_function_devatools.ota
-
-/**
- * OTA升级管理类
- */
-class OTAManager {
-}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeConfig.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeConfig.kt
new file mode 100644
index 0000000000..1b096fc60a
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeConfig.kt
@@ -0,0 +1,11 @@
+package com.zhjt.mogo_core_function_devatools.ota
+
+/**
+ * OTA升级配置
+ */
+object OTAUpgradeConfig {
+
+ @JvmField
+ var otaToken: String = ""
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeManager.kt
new file mode 100644
index 0000000000..774bc35424
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeManager.kt
@@ -0,0 +1,82 @@
+package com.zhjt.mogo_core_function_devatools.ota
+
+import android.content.Context
+import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
+import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener
+import com.mogo.eagle.core.function.api.devatools.IOTAListener
+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.datacenter.CallerDataCenterBizListener
+import com.mogo.eagle.core.function.call.devatools.CallerOTAManager
+import system_master.SsmInfo
+
+/**
+ * OTA升级管理类
+ */
+object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener, IOTAListener {
+
+ const val TAG = "OTAUpgradeManager"
+
+ fun init(context: Context){
+ CallerAutoPilotStatusListenerManager.addListener(TAG, this)
+ CallerDataCenterBizListener.addListener(TAG,this)
+ CallerOTAManager.addListener(TAG,this)
+ //查询OTA状态
+ CallerAutoPilotControlManager.sendSsmFuncOtaStatusQuery(OTAUpgradeConfig.otaToken)
+ }
+
+ /**
+ * 自动驾驶状态信息
+ * @param state 状态信息
+ * 0-不可自动驾驶,adas与工控机没有链接,或工控机异常
+ * 1-可自动驾驶,目前处于人工干预状态
+ * 2-自动驾驶中
+ * 7-平行驾驶中
+ */
+ override fun onAutopilotStatusResponse(state: Int) {
+ super.onAutopilotStatusResponse(state)
+
+ }
+
+ /**
+ * 是否有订单
+ * @param inOrder true有订单 false没有订单
+ */
+ override fun invokeOrderStatus(inOrder: Boolean) {
+ super.invokeOrderStatus(inOrder)
+
+ }
+
+ /**
+ * SSM发送OTA升级提示请求
+ * @param request SSM发送OTA升级提示内容
+ */
+ override fun onOtaDownloadRequest(request: SsmInfo.OtaDownloadRequest) {
+ super.onOtaDownloadRequest(request)
+
+ }
+
+ /**
+ * SSM上报OTA下载进度, 开始升级后定频上报
+ * @param progress 下载进度
+ */
+ override fun onOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess) {
+ super.onOtaLoadingProgress(progress)
+
+
+ }
+
+ /**
+ * SSM上报OTA状态和查询OTA状态
+ * 冷启动状态变更上报以及查询状态
+ * 如果是查询到的结果,{@link SsmInfo.OtaStatus#getOtaInfo()}
+ * 中的{@link SsmInfo.OtaDownloadRequest#getOtaToken()}==""表示不存在升级任务
+ * @param status 冷启动状态变更上报以及查询状态
+ */
+ override fun onOtaStatus(status: SsmInfo.OtaStatus) {
+ super.onOtaStatus(status)
+ OTAUpgradeConfig.otaToken = status.otaInfo.otaToken
+ }
+
+
+}
\ 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/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt
index 19f3ce8003..8831e1c072 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt
@@ -58,6 +58,7 @@ import com.mogo.eagle.core.function.hmi.ui.setting.StatusView
import com.mogo.eagle.core.function.hmi.ui.setting.ToolsView.Companion.toolsView
import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog
import com.mogo.eagle.core.function.hmi.ui.tools.ModifyBindingCarDialog
+import com.mogo.eagle.core.function.hmi.ui.tools.OTAUpgradeDialog
import com.mogo.eagle.core.function.hmi.ui.tools.ToBindingCarDialog
import com.mogo.eagle.core.function.hmi.ui.tools.UpgradeAppDialog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
@@ -659,4 +660,15 @@ class MoGoHmiProvider : IMoGoHmiProvider {
CallerHmiViewControlListenerManager.invokeColdStartProcessView()
}
+ /**
+ * 展示OTA升级弹窗
+ */
+ override fun showOTAUpgradeDialog() {
+ ThreadUtils.runOnUiThread{
+ if (context != null){
+ OTAUpgradeDialog.show(context)
+ }
+ }
+ }
+
}
\ 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/tools/OTAUpgradeDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTAUpgradeDialog.kt
new file mode 100644
index 0000000000..3b916ba7fe
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTAUpgradeDialog.kt
@@ -0,0 +1,76 @@
+package com.mogo.eagle.core.function.hmi.ui.tools
+
+import android.content.Context
+import android.widget.TextView
+import androidx.lifecycle.LifecycleObserver
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
+import com.mogo.eagle.core.function.hmi.R
+import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
+import com.zhjt.mogo_core_function_devatools.ota.OTAUpgradeConfig
+import system_master.SsmInfo
+
+/**
+ * OTA升级对话框
+ */
+class OTAUpgradeDialog(context: Context) :
+ BaseFloatDialog(context,TAG), LifecycleObserver {
+
+ companion object {
+ private const val TAG = "OTAUpgradeDialog"
+ private var otaUpgradeDialog: OTAUpgradeDialog? = null
+
+ fun show(context: Context?) {
+ context?.let {
+ if (otaUpgradeDialog == null) {
+ otaUpgradeDialog = OTAUpgradeDialog(it)
+ }
+ otaUpgradeDialog?.let { dialog ->
+ if (dialog.isShowing) {
+ return
+ }
+ dialog.show()
+ }
+ }
+ }
+ }
+
+ private var clickListener: ClickListener? = null
+ private lateinit var tvUpgradeNow: TextView //立即升级
+ private lateinit var tvUpgradeLater: TextView //稍后升级
+
+ init{
+ setContentView(R.layout.dialog_ota_upgrade)
+ setCanceledOnTouchOutside(false)
+ initView()
+ }
+
+ private fun initView(){
+ tvUpgradeNow = findViewById(R.id.tv_upgrade_now)
+ tvUpgradeLater = findViewById(R.id.tv_upgrade_later)
+ //立即升级
+ tvUpgradeNow.setOnClickListener {
+ CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.IMMEDIATELY)
+ }
+ //稍后升级
+ tvUpgradeLater.setOnClickListener {
+ CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.DELAY)
+ }
+ }
+
+ override fun dismiss() {
+ super.dismiss()
+ otaUpgradeDialog = null
+ }
+
+ fun setClickListener(clickListener: ClickListener) {
+ this.clickListener = clickListener
+ }
+
+ interface ClickListener{
+ //立即升级
+ fun upgradeNow()
+ //稍后升级
+ fun upgradeLater()
+ }
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_upgrade.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_upgrade.xml
new file mode 100644
index 0000000000..970833aaa6
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_upgrade.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
index ab631a8ec0..b64d420f88 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
@@ -248,4 +248,8 @@
冷启动进度条
+
+ 立即升级
+ 稍后升级
+
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt
index c50de87886..fe977c21d8 100644
--- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt
@@ -17,6 +17,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume.Suspend
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp
import mogo.telematics.pad.MessagePad
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest
+import system_master.SsmInfo
/**
* @author xiaoyuzhou
@@ -706,4 +707,28 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
*/
fun sendSimulationWireFailure(isTrigger: Boolean): Boolean
+ /**
+ * SSM发送OTA升级提示请求响应
+ *
+ * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()}
+ * @param ifUpgrade {@link SsmInfo.IfUpgrade#IMMEDIATELY}:立即
+ * {@link SsmInfo.IfUpgrade#DELAY}:推迟
+ */
+ fun sendSsmFuncOtaDownloadResponse(token: String,ifUpgrade: SsmInfo.IfUpgrade): Boolean
+
+ /**
+ * 查询OTA状态
+ *
+ * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()}
+ * 如果没有可以传null或""
+ */
+ fun sendSsmFuncOtaStatusQuery(token: String): Boolean
+
+ /**
+ * 人工接管时获取前方和后方摄像头数据
+ * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求
+ * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头
+ * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)}
+ */
+ fun sendCaptureImgReqOnTakeOver(uuid: Int): Boolean
}
\ No newline at end of file
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/ICaptureImgListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/ICaptureImgListener.kt
new file mode 100644
index 0000000000..b55de08596
--- /dev/null
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/ICaptureImgListener.kt
@@ -0,0 +1,17 @@
+package com.mogo.eagle.core.function.api.devatools
+
+import mogo.telematics.pad.MessagePad
+
+/**
+ * 接管时前方和后方摄像头数据请求响应回调
+ */
+interface ICaptureImgListener {
+
+ /**
+ * 接管时前方和后方摄像头数据请求的响应
+ * @param isFront true:前方摄像头 false:后方摄像头
+ * @param data 数据
+ */
+ fun onCaptureImgOnTakeOver(isFront: Boolean, data: MessagePad.CaptureImgOnTakeOver){}
+
+}
\ No newline at end of file
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IOTAListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IOTAListener.kt
new file mode 100644
index 0000000000..d200779363
--- /dev/null
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IOTAListener.kt
@@ -0,0 +1,31 @@
+package com.mogo.eagle.core.function.api.devatools
+
+import system_master.SsmInfo
+
+/**
+ * OTA升级接口
+ */
+interface IOTAListener {
+
+ /**
+ * SSM发送OTA升级提示请求
+ * @param request SSM发送OTA升级提示内容
+ */
+ fun onOtaDownloadRequest(request: SsmInfo.OtaDownloadRequest){}
+
+ /**
+ * SSM上报OTA下载进度, 开始升级后定频上报
+ * @param progress 下载进度
+ */
+ fun onOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess){}
+
+ /**
+ * SSM上报OTA状态和查询OTA状态
+ * 冷启动状态变更上报以及查询状态
+ * 如果是查询到的结果,{@link SsmInfo.OtaStatus#getOtaInfo()}
+ * 中的{@link SsmInfo.OtaDownloadRequest#getOtaToken()}==""表示不存在升级任务
+ * @param status 冷启动状态变更上报以及查询状态
+ */
+ fun onOtaStatus(status: SsmInfo.OtaStatus){}
+
+}
\ No newline at end of file
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt
index a12e2d146d..0dd405c6db 100644
--- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt
@@ -322,4 +322,9 @@ interface IMoGoHmiProvider :IProvider{
* 展示冷启动进度条
*/
fun showColdStartProcessView()
+
+ /**
+ * 展示OTA升级弹窗
+ */
+ fun showOTAUpgradeDialog()
}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt
index 33fdcfc114..8a8aebc6f3 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt
@@ -38,6 +38,7 @@ import com.zhjt.service.chain.ChainLog
import com.zhjt.service_biz.BizConfig
import kotlinx.coroutines.launch
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest
+import system_master.SsmInfo
import java.lang.StringBuilder
import kotlin.random.Random
@@ -1063,4 +1064,33 @@ object CallerAutoPilotControlManager {
return providerApi?.sendSimulationWireFailure(isTrigger)?:false
}
+ /**
+ * SSM发送OTA升级提示请求响应
+ * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()}
+ * @param ifUpgrade {@link SsmInfo.IfUpgrade#IMMEDIATELY}:立即
+ * {@link SsmInfo.IfUpgrade#DELAY}:推迟
+ */
+ fun sendSsmFuncOtaDownloadResponse(token: String,ifUpgrade: SsmInfo.IfUpgrade): Boolean{
+ return providerApi?.sendSsmFuncOtaDownloadResponse(token,ifUpgrade)?:false
+ }
+
+ /**
+ * 查询OTA状态
+ * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()}
+ * 如果没有可以传null或""
+ */
+ fun sendSsmFuncOtaStatusQuery(token: String): Boolean{
+ return providerApi?.sendSsmFuncOtaStatusQuery(token)?:false
+ }
+
+ /**
+ * 人工接管时获取前方和后方摄像头数据
+ * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求
+ * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头
+ * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)}
+ */
+ fun sendCaptureImgReqOnTakeOver(uuid: Int): Boolean{
+ return providerApi?.sendCaptureImgReqOnTakeOver(uuid)?:false
+ }
+
}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerCaptureImgManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerCaptureImgManager.kt
new file mode 100644
index 0000000000..64260411c1
--- /dev/null
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerCaptureImgManager.kt
@@ -0,0 +1,22 @@
+package com.mogo.eagle.core.function.call.devatools
+
+import com.mogo.eagle.core.function.api.devatools.ICaptureImgListener
+import com.mogo.eagle.core.function.call.base.CallerBase
+import mogo.telematics.pad.MessagePad
+
+/**
+ * 接管时前方和后方摄像头数据请求响应回调管理
+ */
+object CallerCaptureImgManager: CallerBase() {
+
+ /**
+ * 接管时前方和后方摄像头数据请求的响应
+ */
+ fun invokeCaptureImgOnTakeOver(isFront: Boolean, data: MessagePad.CaptureImgOnTakeOver){
+ M_LISTENERS.forEach{
+ val listener = it.value
+ listener.onCaptureImgOnTakeOver(isFront, data)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerOTAManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerOTAManager.kt
new file mode 100644
index 0000000000..dcb60a0a47
--- /dev/null
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerOTAManager.kt
@@ -0,0 +1,48 @@
+package com.mogo.eagle.core.function.call.devatools
+
+import com.mogo.eagle.core.function.api.devatools.IOTAListener
+import com.mogo.eagle.core.function.call.base.CallerBase
+import system_master.SsmInfo
+
+/**
+ * OTA升级接口回调管理
+ */
+object CallerOTAManager: CallerBase() {
+
+ /**
+ * SSM发送OTA升级提示请求
+ * @param request SSM发送OTA升级提示内容
+ */
+ fun invokeOtaDownloadRequest(request: SsmInfo.OtaDownloadRequest){
+ M_LISTENERS.forEach {
+ val listener = it.value
+ listener.onOtaDownloadRequest(request)
+ }
+ }
+
+ /**
+ * SSM上报OTA下载进度, 开始升级后定频上报
+ * @param progress 下载进度
+ */
+ fun invokeOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess){
+ M_LISTENERS.forEach {
+ val listener = it.value
+ listener.onOtaLoadingProgress(progress)
+ }
+ }
+
+ /**
+ * SSM上报OTA状态和查询OTA状态
+ * 冷启动状态变更上报以及查询状态
+ * 如果是查询到的结果,{@link SsmInfo.OtaStatus#getOtaInfo()}
+ * 中的{@link SsmInfo.OtaDownloadRequest#getOtaToken()}==""表示不存在升级任务
+ * @param status 冷启动状态变更上报以及查询状态
+ */
+ fun invokeOtaStatus(status: SsmInfo.OtaStatus){
+ M_LISTENERS.forEach {
+ val listener = it.value
+ listener.onOtaStatus(status)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
index 6af31878c4..287775138d 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
@@ -469,4 +469,11 @@ object CallerHmiManager {
hmiProviderApi?.showColdStartProcessView()
}
+ /**
+ * 展示OTA升级弹窗
+ */
+ fun showOTAUpgradeDialog(){
+ hmiProviderApi?.showOTAUpgradeDialog()
+ }
+
}
\ No newline at end of file
diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/AutopilotStatistics.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/AutopilotStatistics.java
index 797d3079fe..8230204bf9 100644
--- a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/AutopilotStatistics.java
+++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/AutopilotStatistics.java
@@ -1,6 +1,7 @@
package com.zhjt.mogo.adas.data.bean;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import fsm.Fsm2024;
@@ -18,7 +19,7 @@ public class AutopilotStatistics {
/**
* 成功
*/
- int SUCCESSFUL = 0;
+ int SUCCEED = 0;
/**
* 失败
*/
@@ -29,6 +30,14 @@ public class AutopilotStatistics {
int CANCEL = 2;
}
+ public enum Source {
+ LIB,//ADAS库 [用在下取消]
+ REPORT,//系统监控 [用在失败]
+ FSM, //老版FSM [用在成功]
+ FSM2024, //新版FSM [用在成功和失败]
+ CHASSIS//底盘 [用在成功]
+ }
+
/**
* 启动自动驾驶后状态
* 0 成功
@@ -62,9 +71,16 @@ public class AutopilotStatistics {
@Nullable
public final MogoReportMsg.MogoReportMessage failedMessage;
- public AutopilotStatistics(int status, long usedTime, @Nullable MessagePad.SetAutopilotModeReq req, @Nullable Fsm2024.FSMStateMsg fsmState, @Nullable MogoReportMsg.MogoReportMessage failedMessage) {
+ /**
+ * 数据来源
+ */
+ @NonNull
+ public final Source source;
+
+ public AutopilotStatistics(int status, long usedTime, @NonNull Source source, @Nullable MessagePad.SetAutopilotModeReq req, @Nullable Fsm2024.FSMStateMsg fsmState, @Nullable MogoReportMsg.MogoReportMessage failedMessage) {
this.status = status;
this.usedTime = usedTime;
+ this.source = source;
this.req = req;
this.fsmState = fsmState;
this.failedMessage = failedMessage;
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java
index 598ff1aa2f..c658879c64 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java
@@ -41,10 +41,10 @@ public class AutopilotReview {
void onReview(AutopilotStatistics statistics);
}
- private void onCallback(@Define.AutopilotStartStatus int status) {
+ private void onCallback(@Define.AutopilotStartStatus int status, @NonNull AutopilotStatistics.Source source) {
long usedTime = SystemClock.elapsedRealtime() - startTime;
if (listener != null) {
- listener.onReview(new AutopilotStatistics(status, usedTime, startReq, fsmState, failedMessage));
+ listener.onReview(new AutopilotStatistics(status, usedTime, source, startReq, fsmState, failedMessage));
}
startTime = 0;
startReq = null;
@@ -68,7 +68,7 @@ public class AutopilotReview {
startReq = null;
failedMessage = null;
fsmState = null;
- onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.CANCEL);
+ onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.CANCEL, AutopilotStatistics.Source.LIB);
}
}
@@ -82,26 +82,38 @@ public class AutopilotReview {
if (AutopilotAbilityManager.getInstance().getFsm2024Version() >= 20) {
return;
}
- if (startReq != null && message != null) {
- failedMessage = message;
- onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED);
+ failedMessage = message;
+ if (message != null) {
+ if (startReq == null) {
+ this.failedMessage = null;
+ } else {
+ onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED, AutopilotStatistics.Source.REPORT);
+ }
}
}
- public void setFSM2024State(Fsm2024.FSMStateMsg fsmState) {
+ public void setFSM2024State(Fsm2024.FSMStateMsg fsmState, int autopilotState) {
this.fsmState = fsmState;
- if (startReq != null && fsmState != null) {
- if (fsmState.hasSession()) {
- Fsm2024.Session session = fsmState.getSession();
- if (session.hasSessionActiveMode() && session.hasSessionResult()) {
- if (session.getSessionActiveMode() == Fsm2024.ActiveMode.PILOT_ACTIVE &&
- session.getSessionResult() == Fsm2024.SessionResult.REQUEST_FAILED) {
- onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED);
+ if (fsmState != null) {
+ if (startReq == null) {
+ this.fsmState = null;
+ } else {
+ if (fsmState.hasSession()) {
+ Fsm2024.Session session = fsmState.getSession();
+ if (session.hasSessionActiveMode() && session.hasSessionResult()) {
+ if (session.getSessionActiveMode() == Fsm2024.ActiveMode.PILOT_ACTIVE) {
+ if (session.getSessionResult() == Fsm2024.SessionResult.REQUEST_SUCCEED) {
+ onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.SUCCEED, AutopilotStatistics.Source.FSM2024);
+ } else if (session.getSessionResult() == Fsm2024.SessionResult.REQUEST_FAILED) {
+ onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED, AutopilotStatistics.Source.FSM2024);
+ }
+ }
}
}
}
}
+ onAutopilotResult(autopilotState, AutopilotStatistics.Source.FSM2024);
}
/**
@@ -109,9 +121,13 @@ public class AutopilotReview {
*
* @param autopilotState
*/
- public void onAutopilotResult(int autopilotState) {
+ public void onAutopilotResult(int autopilotState, @NonNull AutopilotStatistics.Source source) {
+ //FSM2024版本大于等于2.0时使用FSM的数据进行判断是否失败
+ if (AutopilotAbilityManager.getInstance().getFsm2024Version() >= 20) {
+ return;
+ }
if (startReq != null && autopilotState == 2) {
- onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.SUCCESSFUL);
+ onCallback(AutopilotStatistics.AUTOPILOT_START_STATUS.SUCCEED, source);
}
}
}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java
index 82c904ec32..7010b1b136 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java
@@ -39,7 +39,7 @@ public final class Define {
public @interface SubscribeType {
}
- @IntDef(flag = true, value = {AutopilotStatistics.AUTOPILOT_START_STATUS.SUCCESSFUL,
+ @IntDef(flag = true, value = {AutopilotStatistics.AUTOPILOT_START_STATUS.SUCCEED,
AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED,
AutopilotStatistics.AUTOPILOT_START_STATUS.CANCEL})
@Retention(RetentionPolicy.SOURCE)
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java
index 5dd98f67d2..cc0a5ad238 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java
@@ -11,6 +11,7 @@ import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.common.ParallelDrivingManager;
import com.zhidao.support.adas.high.protocol.RawData;
import com.zhjt.mogo.adas.data.AdasConstants;
+import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import mogo.telematics.pad.MessagePad;
@@ -39,7 +40,7 @@ public class AutopilotStateMessage extends MyAbstractMessageHandler {
if (AdasManager.getInstance().getNodeStateInfo(AdasConstants.NodeName.FSM2024).getExistState() != AdasConstants.NodeExistState.NODE_EXIST_NORMAL) {
ParallelDrivingManager.getInstance().setAutopilotState(autopilotState.getState());
if (autopilotReview != null) {
- autopilotReview.onAutopilotResult(autopilotState.getState());
+ autopilotReview.onAutopilotResult(autopilotState.getState(), AutopilotStatistics.Source.CHASSIS);
}
}
AdasChannel.calculateTimeConsumingBusiness("自动驾驶状态", nowTime);
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FSM2024StateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FSM2024StateMessage.java
index 0d9ee918c7..302c2eecf2 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FSM2024StateMessage.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FSM2024StateMessage.java
@@ -35,8 +35,7 @@ public class FSM2024StateMessage extends MyAbstractMessageHandler {
nowTime = SystemClock.elapsedRealtime();
ParallelDrivingManager.getInstance().setAutopilotState(autopilotState);
if (autopilotReview != null) {
- autopilotReview.setFSM2024State(fsmState);
- autopilotReview.onAutopilotResult(autopilotState);
+ autopilotReview.setFSM2024State(fsmState, autopilotState);
}
if (adasListener != null) {
if (fsmState.getRepeatedPilotNotStandbyReasonCount() == 0) {
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FunctionStatesMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FunctionStatesMessage.java
index 41485d8854..028c144258 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FunctionStatesMessage.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/FunctionStatesMessage.java
@@ -11,6 +11,7 @@ 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;
+import com.zhjt.mogo.adas.data.bean.AutopilotStatistics;
import java.util.HashMap;
import java.util.Map;
@@ -107,7 +108,7 @@ public class FunctionStatesMessage extends MyAbstractMessageHandler {
adasListener.onAutopilotState(header.toBuilder().setMsgType(MessagePad.MessageType.MsgTypeAutopilotState).build(), autopilotState);
ParallelDrivingManager.getInstance().setAutopilotState(autopilotState.getState());
if (autopilotReview != null) {
- autopilotReview.onAutopilotResult(autopilotState.getState());
+ autopilotReview.onAutopilotResult(autopilotState.getState(), AutopilotStatistics.Source.FSM);
}
}