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); } }