From f64c5d273de57608fdf5bfec01bdb5fdf4bad390 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 23 Jun 2025 14:57:21 +0800 Subject: [PATCH] =?UTF-8?q?[8.1.0=5Fnew=5Fota]OTA=202.0=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotControlProvider.kt | 8 +++ .../autopilot/adapter/MoGoAdasListenerImpl.kt | 3 + .../ota/OTAUpgradeConfig.kt | 19 ++++++ .../ota/OTAUpgradeManager.kt | 59 +++++++++++++++++++ .../function/hmi/bone/tab/CarInfoTabView.kt | 26 +++++--- .../IMoGoAutopilotControlProvider.kt | 6 ++ .../function/api/devatools/IOTAListener.kt | 8 +++ .../CallerAutoPilotControlManager.kt | 8 +++ .../call/devatools/CallerOTAManager.kt | 13 ++++ .../zhidao/support/adas/high/AdasChannel.java | 15 +++++ .../zhidao/support/adas/high/AdasManager.java | 10 ++++ .../support/adas/high/IAdasNetCommApi.java | 6 ++ 12 files changed, 173 insertions(+), 8 deletions(-) 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 3d07c2ff3b..5ae64d85ee 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 @@ -1556,6 +1556,14 @@ class MoGoAutopilotControlProvider : return AdasManager.getInstance().sendSsmFuncOtaStatusQuery(token)>-1 } + /** + * OTA2.0查询 + * @param queryStr {"cmd":"PAD_QUERY_UPGRADE_STATUS","token":"123"} JSON + */ + override fun sendOtaPadMsgQuery(queryStr: String): Boolean { + return AdasManager.getInstance().sendOtaPadMsgQuery(queryStr) > -1 + } + /** * 人工接管时获取前方和后方摄像头数据 * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 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 0b0315c04a..51ff1b22e0 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 @@ -622,6 +622,9 @@ class MoGoAdasListenerImpl : OnAdasListener { timestamp: Long, status: SsmInfo.PureStr? ) { + if(status != null){ + CallerOTAManager.invokeOtaPureStr(token,timestamp,status) + } } /** 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 index e3b480519d..7adf6454c9 100644 --- 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 @@ -28,4 +28,23 @@ object OTAUpgradeConfig { //已经提示过升级成功的列表 @JvmField var upgradeFinish: ArrayList = ArrayList() + + + + var token: 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 index 9176eb045e..6eb17d52dc 100644 --- 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 @@ -394,6 +394,65 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener, } + /** + * OTA 2.0 新接口 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param status OTA 2.0 数据 + */ + override fun onOtaPureStr(token: Long, timestamp: Long, status: SsmInfo.PureStr) { + super.onOtaPureStr(token, timestamp, status) + Log.i(TAG, "onOtaPureStr token=$token") + Log.i(TAG, "onOtaPureStr timestamp=$timestamp") + Log.i(TAG, "onOtaPureStr status=$status") + Log.i(TAG, "onOtaPureStr status.data=${status.data}") + val jsonObject = JSONObject(status.data) + val cmd = jsonObject.optString("cmd") + val otaToken = jsonObject.optString("token") + val otaStatus = jsonObject.optString("status") + val upgradeReason = jsonObject.optString("upgrade_reason") + val isDelay = jsonObject.optBoolean("is_delay") + val isCancel = jsonObject.optBoolean("is_cancel") + + Log.i(TAG, "cmd=$cmd") + Log.i(TAG, "otaToken=$otaToken") + Log.i(TAG, "otaStatus=$otaStatus") + Log.i(TAG, "upgradeReason=$upgradeReason") + Log.i(TAG, "isDelay=$isDelay") + Log.i(TAG, "isCancel=$isCancel") + + val products = jsonObject.optString("products") + val productsArray = JSONArray(products) + if(productsArray.length() > 0){ + for(index in 0 until productsArray.length()){ + val productInfo = productsArray[index] as JSONObject + val productStatus = productInfo.optString("status") + val failReason = productInfo.optString("fail_reason") + val speed = productInfo.optDouble("speed") + val leftTime = productInfo.optInt("left_time") + val name = productInfo.optString("name") + val curSize = productInfo.optInt("cur_size") + val totalSize = productInfo.optInt("total_size") + + Log.i(TAG, "productStatus=$productStatus") + Log.i(TAG, "failReason=$failReason") + Log.i(TAG, "speed=$speed") + Log.i(TAG, "leftTime=$leftTime") + Log.i(TAG, "name=$name") + Log.i(TAG, "curSize=$curSize") + Log.i(TAG, "totalSize=$totalSize") + + } + } + + if(otaToken.isNotEmpty()){ + CallerHmiManager.showOTAUpgradeDialog(true,upgradeReason) + } + + + } + + private val pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+") /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/CarInfoTabView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/CarInfoTabView.kt index 757fcef971..897ed3ca13 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/CarInfoTabView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/CarInfoTabView.kt @@ -154,14 +154,24 @@ class CarInfoTabView @JvmOverloads constructor( "${SceneConstant.M_HMI}${TAG}", "ad version view clicked" ) - if(OTAUpgradeConfig.supportOTA){ - //查询OTA状态 - OTAUpgradeConfig.isQuery = true - OTAUpgradeConfig.promptedUpgrade.remove(OTAUpgradeConfig.otaToken) - CallerAutoPilotControlManager.sendSsmFuncOtaStatusQuery(OTAUpgradeConfig.otaToken) - }else{ - ToastUtils.showLong("当前SSM节点未成功启动或当前版本不支持OTA升级") - } +// if(OTAUpgradeConfig.supportOTA){ +// //查询OTA状态 +// OTAUpgradeConfig.isQuery = true +// OTAUpgradeConfig.promptedUpgrade.remove(OTAUpgradeConfig.otaToken) +// CallerAutoPilotControlManager.sendSsmFuncOtaStatusQuery(OTAUpgradeConfig.otaToken) +// }else{ +// ToastUtils.showLong("当前SSM节点未成功启动或当前版本不支持OTA升级") +// } + + + //查询OTA升级 + val query: JSONObject = JSONObject() + query.put("cmd","PAD_QUERY_UPGRADE_STATUS") + query.put("token",OTAUpgradeConfig.token) + Log.i("xuxinchao",query.toString()) + CallerAutoPilotControlManager.sendOtaPadMsgQuery(query.toString()) + + } tvHDMapVersion.text = tvHDMapVersion.text.toString() + DebugConfig.getMapVersion() //高精地图 检查更新 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 f6ed32c610..8fbb433272 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 @@ -730,6 +730,12 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { */ fun sendSsmFuncOtaStatusQuery(token: String): Boolean + /** + * OTA2.0查询 + * @param queryStr {"cmd":"PAD_QUERY_UPGRADE_STATUS","token":"123"} JSON + */ + fun sendOtaPadMsgQuery(queryStr: String): Boolean + /** * 人工接管时获取前方和后方摄像头数据 * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 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 index 533a27c3a8..e28c012110 100644 --- 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 @@ -34,4 +34,12 @@ interface IOTAListener { */ fun onOtaDownloadStatus(status: Boolean){} + /** + * OTA 2.0 新接口 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param status OTA 2.0 数据 + */ + fun onOtaPureStr(token: Long,timestamp: Long,status: SsmInfo.PureStr){} + } \ 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 f62b6edbc5..ea6b23100b 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 @@ -1095,6 +1095,14 @@ object CallerAutoPilotControlManager { return providerApi?.sendSsmFuncOtaStatusQuery(token)?:false } + /** + * OTA2.0查询 + * @param queryStr {"cmd":"PAD_QUERY_UPGRADE_STATUS","token":"123"} JSON + */ + fun sendOtaPadMsgQuery(queryStr: String): Boolean{ + return providerApi?.sendOtaPadMsgQuery(queryStr)?:false + } + /** * 人工接管时获取前方和后方摄像头数据 * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 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 index 6474028f11..2b2230fa8b 100644 --- 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 @@ -56,4 +56,17 @@ object CallerOTAManager: CallerBase() { } } + /** + * OTA 2.0 新接口 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param status OTA 2.0 数据 + */ + fun invokeOtaPureStr(token: Long,timestamp: Long,status: SsmInfo.PureStr){ + M_LISTENERS.forEach { + val listener = it.value + listener.onOtaPureStr(token, timestamp, status) + } + } + } \ 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 f6db68ae6b..7529bc3dd8 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 @@ -3100,6 +3100,21 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return sendSsmFuncMsg(true, system_master.SsmInfo.MessageType.OTA_STATUS_QUERY, builder.build().toByteString()); } + /** + * 查询OTA2.0状态 + * @param queryStr 域控发送OTA升级请求中的 {"cmd":"PAD_QUERY_UPGRADE_STATUS","token":"123"} + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendOtaPadMsgQuery(@Nullable String queryStr) { + SsmInfo.PureStr.Builder builder = SsmInfo.PureStr.newBuilder(); + builder.setData(TextUtils.isEmpty(queryStr) ? "" : queryStr); + return sendSsmFuncMsg(true,system_master.SsmInfo.MessageType.OTA_PAD_MSG,builder.build().toByteString()); + } + /** * 查询冷启动状态 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index f25e5bdd2c..f22677c2a8 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -1861,6 +1861,16 @@ public class AdasManager implements IAdasNetCommApi { return mChannel == null ? -1L : mChannel.sendSsmFuncOtaStatusQuery(token); } + /** + * OTA2.0 请求命令下发 + * @param queryStr {"cmd":"PAD_QUERY_UPGRADE_STATUS","token":"123"} JSON + * @return + */ + @Override + public long sendOtaPadMsgQuery(@Nullable String queryStr) { + return mChannel == null ? -1L : mChannel.sendOtaPadMsgQuery(queryStr); + } + /** * 查询冷启动状态 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java index 19732731b1..ba4057d396 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java @@ -1348,6 +1348,12 @@ public interface IAdasNetCommApi { */ long sendSsmFuncOtaStatusQuery(@Nullable String token); + /** + * OTA2.0查询 + * @param queryStr {"cmd":"PAD_QUERY_UPGRADE_STATUS","token":"123"} JSON + */ + long sendOtaPadMsgQuery(@Nullable String queryStr); + /** * 查询冷启动状态 *