From 0389244bc0cd7331195eda08823ad9afbde7e15d Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 28 Nov 2024 14:56:40 +0800 Subject: [PATCH 01/15] =?UTF-8?q?[6.8.1=5Fdev]OTA=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhjt/mogo_core_function_devatools/ota/OTAManager.kt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAManager.kt 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 new file mode 100644 index 0000000000..17315896cc --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAManager.kt @@ -0,0 +1,7 @@ +package com.zhjt.mogo_core_function_devatools.ota + +/** + * OTA升级管理类 + */ +class OTAManager { +} \ No newline at end of file From 82dd240a6cde85be00cac5826d8053c71ff6038b Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 28 Nov 2024 15:07:54 +0800 Subject: [PATCH 02/15] =?UTF-8?q?[690][adas]=E5=9F=9F=E6=8E=A7OTA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=94=B6=E5=8F=91=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 55 +++++++++++++++++++ .../zhidao/support/adas/high/AdasChannel.java | 38 +++++++++++++ .../zhidao/support/adas/high/AdasManager.java | 32 +++++++++++ .../support/adas/high/IAdasNetCommApi.java | 26 +++++++++ .../support/adas/high/OnAdasListener.java | 42 ++++++++++++-- .../adas/high/msg/PadSsmFuncMsgMessage.java | 27 +++++++++ 6 files changed, 216 insertions(+), 4 deletions(-) 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 426052a342..99acee63a5 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 @@ -425,6 +425,61 @@ class MoGoAdasListenerImpl : OnAdasListener { override fun onWarn(header: MessagePad.Header, warn: MessagePad.Warn?) { } + /** + * SSM发送OTA升级提示请求 + * + * @param header 头 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param request 数据 null表示 PadSsmMsg中的消息体为null + */ + override fun onOtaDownloadRequest( + header: MessagePad.Header?, + token: Long, + timestamp: Long, + request: SsmInfo.OtaDownloadRequest? + ) { + + } + + /** + * SSM上报OTA下载进度, 开始升级后定频上报 + * + * @param header 头 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param progress 数据 null表示 PadSsmMsg中的消息体为null + */ + override fun onOtaLoadingProgress( + header: MessagePad.Header?, + token: Long, + timestamp: Long, + progress: SsmInfo.OtaLoadingProgess? + ) { + + } + + /** + * SSM上报OTA状态和查询OTA状态 + * 冷启动状态变更上报以及查询状态 + * 如果是查询到的结果,{@link SsmInfo.OtaStatus#getOtaInfo()}中的{@link SsmInfo.OtaDownloadRequest#getOtaToken()}==""表示不存在升级任务 + * + * @param header 头 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param isQuery 是否是查询 ture:查询响应的结果 false:表示状态变动域控主动推送 + * @param status 数据 null表示 PadSsmMsg中的消息体为null + */ + override fun onOtaStatus( + header: MessagePad.Header?, + token: Long, + timestamp: Long, + isQuery: Boolean, + status: SsmInfo.OtaStatus? + ) { + + } + /** * 冷启动状态变更上报以及查询状态 * 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 f0fe7c4cfd..05ac922192 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 @@ -2970,6 +2970,44 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return sendPBMessage(messageType, req.toByteArray(), messageId); } + /** + * SSM发送OTA升级提示请求响应 + * + * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()} + * @param ifUpgrade {@link SsmInfo.IfUpgrade#IMMEDIATELY}:立即 + * {@link SsmInfo.IfUpgrade#DELAY}:推迟 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendSsmFuncOtaDownloadResponse(@NonNull String token, @NonNull SsmInfo.IfUpgrade ifUpgrade) { + SsmInfo.OtaDownloadResponse.Builder builder = SsmInfo.OtaDownloadResponse.newBuilder(); + if (!TextUtils.isEmpty(token)) { + builder.setToken(token); + } + builder.setIfUpgrade(ifUpgrade); + return sendSsmFuncMsg(false, system_master.SsmInfo.MessageType.OTA_DOWNLOAD_RESPONSE, builder.build().toByteString()); + } + + /** + * 查询OTA状态 + * + * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()} + * 如果没有可以传null或"" + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendSsmFuncOtaStatusQuery(@Nullable String token) { + SsmInfo.OtaToken.Builder builder = SsmInfo.OtaToken.newBuilder(); + builder.setToken(TextUtils.isEmpty(token) ? String.valueOf(System.currentTimeMillis()) : token); + return sendSsmFuncMsg(true, system_master.SsmInfo.MessageType.OTA_STATUS_QUERY, 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 e5d2ee826e..8d965a7bc0 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 @@ -42,6 +42,7 @@ import chassis.Chassis; import chassis.SpecialVehicleTaskCmdOuterClass; import mogo.telematics.pad.MessagePad; import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest; +import system_master.SsmInfo; /** * @ProjectName: lib-adas-fpga @@ -1782,6 +1783,37 @@ public class AdasManager implements IAdasNetCommApi { return mChannel == null ? -1L : mChannel.sendPowerUnitReset(); } + /** + * SSM发送OTA升级提示请求响应 + * + * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()} + * @param ifUpgrade {@link SsmInfo.IfUpgrade#IMMEDIATELY}:立即 + * {@link SsmInfo.IfUpgrade#DELAY}:推迟 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendSsmFuncOtaDownloadResponse(@NonNull String token, @NonNull SsmInfo.IfUpgrade ifUpgrade) { + return mChannel == null ? -1L : mChannel.sendSsmFuncOtaDownloadResponse(token, ifUpgrade); + } + + /** + * 查询OTA状态 + * + * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()} + * 如果没有可以传null或"" + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendSsmFuncOtaStatusQuery(@Nullable String token) { + return mChannel == null ? -1L : mChannel.sendSsmFuncOtaStatusQuery(token); + } + /** * 查询冷启动状态 * 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 60fd358dee..8abb7a99a5 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 @@ -26,6 +26,7 @@ import bag_manager.BagManagerOuterClass; import chassis.SpecialVehicleTaskCmdOuterClass; import mogo.telematics.pad.MessagePad; import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest; +import system_master.SsmInfo; /** * @author nie yunlong @@ -1286,6 +1287,31 @@ public interface IAdasNetCommApi { */ long sendPowerUnitReset(); + /** + * SSM发送OTA升级提示请求响应 + * + * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()} + * @param ifUpgrade {@link SsmInfo.IfUpgrade#IMMEDIATELY}:立即 + * {@link SsmInfo.IfUpgrade#DELAY}:推迟 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + long sendSsmFuncOtaDownloadResponse(@NonNull String token, @NonNull SsmInfo.IfUpgrade ifUpgrade); + + /** + * 查询OTA状态 + * + * @param token 域控发送OTA升级请求中的Token {@link SsmInfo.OtaDownloadRequest#getOtaToken()} + * 如果没有可以传null或"" + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + long sendSsmFuncOtaStatusQuery(@Nullable String token); + /** * 查询冷启动状态 * 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 1efcf34dfc..d25862952e 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 @@ -207,13 +207,47 @@ public interface OnAdasListener { @Deprecated void onWarn(MessagePad.Header header, MessagePad.Warn warn); + /** + * SSM发送OTA升级提示请求 + * + * @param header 头 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param request 数据 null表示 PadSsmMsg中的消息体为null + */ + void onOtaDownloadRequest(MessagePad.Header header, long token, long timestamp, @Nullable SsmInfo.OtaDownloadRequest request); + + /** + * SSM上报OTA下载进度, 开始升级后定频上报 + * + * @param header 头 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param progress 数据 null表示 PadSsmMsg中的消息体为null + */ + void onOtaLoadingProgress(MessagePad.Header header, long token, long timestamp, @Nullable SsmInfo.OtaLoadingProgess progress); + + + /** + * SSM上报OTA状态和查询OTA状态 + * 冷启动状态变更上报以及查询状态 + * 如果是查询到的结果,{@link SsmInfo.OtaStatus#getOtaInfo()}中的{@link SsmInfo.OtaDownloadRequest#getOtaToken()}==""表示不存在升级任务 + * + * @param header 头 + * @param token PadSsmMsg唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param isQuery 是否是查询 ture:查询响应的结果 false:表示状态变动域控主动推送 + * @param status 数据 null表示 PadSsmMsg中的消息体为null + */ + void onOtaStatus(MessagePad.Header header, long token, long timestamp, boolean isQuery, @Nullable SsmInfo.OtaStatus status); + /** * 冷启动状态变更上报以及查询状态 * * @param header 头 - * @param token 唯一消息ID + * @param token PadSsmMsg唯一消息ID * @param timestamp 消息发送时间 单位:毫秒 - * @param isQuery 是否是查询 ture:查询相应的结果 false:表示状态变动域控主动推送 + * @param isQuery 是否是查询 ture:查询响应的结果 false:表示状态变动域控主动推送 * @param coldStartState 数据 null表示 PadSsmMsg中的消息体为null */ void onColdStartState(MessagePad.Header header, long token, long timestamp, boolean isQuery, @Nullable SsmInfo.ColdStartState coldStartState); @@ -223,7 +257,7 @@ public interface OnAdasListener { * 返回 是否首次进自驾、订单号、次数 * * @param header 头 - * @param token 唯一消息ID + * @param token PadSsmMsg唯一消息ID * @param timestamp 消息发送时间 单位:毫秒 * @param autoPilotInfo 数据 null表示 PadSsmMsg中的消息体为null */ @@ -233,7 +267,7 @@ public interface OnAdasListener { * 到站信息查询响应 * * @param header 头 - * @param token 唯一消息ID + * @param token PadSsmMsg唯一消息ID * @param timestamp 消息发送时间 单位:毫秒 * @param autoPilotStation 数据 null表示 PadSsmMsg中的消息体为null */ diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java index f9df0a5746..34d57d25e7 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java @@ -53,6 +53,33 @@ public class PadSsmFuncMsgMessage extends MyAbstractMessageHandler { if (adasListener != null) { adasListener.onAutoPilotStation(raw.getHeader(), padSsmMsg.getToken(), timestamp, autoPilotStation); } + } else if (type == SsmInfo.MessageType.OTA_DOWNLOAD_REQUEST) { + //SSM发送OTA升级提示请求 + SsmInfo.OtaDownloadRequest request = null; + if (!data.isEmpty()) { + request = SsmInfo.OtaDownloadRequest.parseFrom(data); + } + if (adasListener != null) { + adasListener.onOtaDownloadRequest(raw.getHeader(), padSsmMsg.getToken(), timestamp, request); + } + } else if (type == SsmInfo.MessageType.OTA_LOADING_PROGRESS) { + //SSM上报OTA下载进度, 开始升级后定频上报 + SsmInfo.OtaLoadingProgess progress = null; + if (!data.isEmpty()) { + progress = SsmInfo.OtaLoadingProgess.parseFrom(data); + } + if (adasListener != null) { + adasListener.onOtaLoadingProgress(raw.getHeader(), padSsmMsg.getToken(), timestamp, progress); + } + } else if (type == SsmInfo.MessageType.OTA_STATUS || type == SsmInfo.MessageType.OTA_STATUS_QUERY) { + //SSM上报OTA状态和查询OTA状态 + SsmInfo.OtaStatus status = null; + if (!data.isEmpty()) { + status = SsmInfo.OtaStatus.parseFrom(data); + } + if (adasListener != null) { + adasListener.onOtaStatus(raw.getHeader(), padSsmMsg.getToken(), timestamp, type == SsmInfo.MessageType.OTA_STATUS_QUERY, status); + } } AdasChannel.calculateTimeConsumingBusiness("SSM功能", nowTime); } From 99c36c6c6b5ca0173d335aad91acbc26f9b45b69 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 28 Nov 2024 15:17:38 +0800 Subject: [PATCH 03/15] =?UTF-8?q?[690][adas]=E6=96=B0=E5=A2=9E=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=E6=8E=A5=E7=AE=A1=E6=97=B6=E7=BB=99PAD=E5=8F=91?= =?UTF-8?q?=E5=90=8E=E6=91=84=E5=83=8F=E5=A4=B4=E6=95=B0=E6=8D=AE=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=B8=8E=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 15 +++++++++ .../zhjt/mogo/adas/common/MessageType.java | 7 ++++ .../src/main/proto/message_pad.proto | 10 ++++++ .../zhidao/support/adas/high/AdasChannel.java | 20 +++++++++++ .../zhidao/support/adas/high/AdasManager.java | 17 ++++++++++ .../support/adas/high/IAdasNetCommApi.java | 14 ++++++++ .../support/adas/high/OnAdasListener.java | 9 +++++ .../high/msg/CaptureImgOnTakeOverMessage.java | 33 +++++++++++++++++++ .../adas/high/msg/MyMessageFactory.java | 7 ++++ 9 files changed, 132 insertions(+) create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java 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 99acee63a5..87b6d7c4f9 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 @@ -1338,6 +1338,21 @@ class MoGoAdasListenerImpl : OnAdasListener { } } + /** + * 接管时前方和后方摄像头数据请求的响应 + * + * @param header 头 + * @param isFront true:前方摄像头 false:后方摄像头 + * @param data 数据 + */ + override fun onCaptureImgOnTakeOver( + header: MessagePad.Header, + isFront: Boolean, + data: MessagePad.CaptureImgOnTakeOver + ) { + + } + /** * 是否可以启动自动驾驶 * 使用方法查看:app_ipc_monitoring/uiMainActivity/onAutopilotAbility diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java index f0771035b6..31f37d973f 100644 --- a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java @@ -95,6 +95,8 @@ public enum MessageType { TYPE_RECEIVE_SSM_FUNC_MSG(MessagePad.MessageType.MsgTypeSSMFuncMsg, "SSM功能响应"), TYPE_SEND_SSM_FUNC_STATUS_QUERY(MessagePad.MessageType.MsgTypeSSMFuncStatusQuery, "SSM功能状态查询"), TYPE_RECEIVE_SSM_FUNC_STATUS_QUERY(MessagePad.MessageType.MsgTypeSSMFuncStatusQuery, "SSM功能状态响应"), + TYPE_SEND_CAPTURE_IMG_REQ_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureImgReqOnTakeOver, "接管时摄像头数据请求"), + //TODO 透传原始pb文件中不存在以下type。由于Java中无法强转,所以在mogo-adas-data/message_pad.proto中放开注释 TYPE_RECEIVE_PLANNING_DECISION_STATE(MessagePad.MessageType.MsgTypePlanningDecisionState, "Planning决策状态"), TYPE_RECEIVE_SWEEPER_TASK_INDEX_DATA(MessagePad.MessageType.MsgTypeSweeperTaskIndexData, "清扫车指标数据"), @@ -106,6 +108,11 @@ public enum MessageType { TYPE_RECEIVE_CAMERA_CALIB_CHECK_DATA120_BACK(MessagePad.MessageType.MsgTypeCameraCalibCheckData120Back, "相机标定检查视频120后"), TYPE_RECEIVE_CAMERA_CALIB_CHECK_DATA120_LEFT(MessagePad.MessageType.MsgTypeCameraCalibCheckData120Left, "相机标定检查视频120左"), TYPE_RECEIVE_CAMERA_CALIB_CHECK_DATA120_RIGHT(MessagePad.MessageType.MsgTypeCameraCalibCheckData120Right, "相机标定检查视频120右"), + + + TYPE_RECEIVE_CAPTURE_FRONT_IMG_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureFrontImgOnTakeOver, "人工接管时给PAD发前摄像头数据响应"), + TYPE_RECEIVE_CAPTURE_BACK_IMG_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureBackImgOnTakeOver, "人工接管时给PAD发后摄像头数据响应"), + ; diff --git a/libraries/mogo-adas-data/src/main/proto/message_pad.proto b/libraries/mogo-adas-data/src/main/proto/message_pad.proto index b9f77fc20f..7ee8c30228 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -24,6 +24,8 @@ enum MessageType MsgTypeCameraCalibCheckData120Back = 0x01004; //相机标定检查视频, 10hz, jpeg. image_raw_back MsgTypeCameraCalibCheckData120Left = 0x01005; //相机标定检查视频, 10hz, jpeg. image_raw_left MsgTypeCameraCalibCheckData120Right = 0x01006; //相机标定检查视频, 10hz, jpeg. image_raw_right + MsgTypeCaptureFrontImgOnTakeOver = 0x01007;//人工接管时给PAD发前摄像头数据响应 + MsgTypeCaptureBackImgOnTakeOver = 0x01008;//人工接管时给PAD发后摄像头数据响应 MsgTypeTrajectory = 0x10000; //局部轨迹,车前引导线 定频10hz MsgTypeTrackedObjects = 0x10001; //障碍物信息 定频10hz @@ -97,6 +99,7 @@ enum MessageType MsgTypePowerUnit = 0x1012e;//电源模块通信 MsgTypeSSMFuncMsg = 0x1012f;//SSM功能(上下行) MsgTypeSSMFuncStatusQuery = 0x10130;//SSM功能状态查询及返回(上下行) + MsgTypeCaptureImgReqOnTakeOver = 0x10132;//人工接管时PAD请求前后摄像头数据 } message Header @@ -940,4 +943,11 @@ message CollisionReport double longitude = 1; double latitude = 2; double timestamp = 3;//时间, 单位:秒 +} + +//message definition for MsgTypeCaptureImgReqOnTakeOver MsgTypeCaptureFrontImgOnTakeOver MsgTypeCaptureBackImgOnTakeOver +message CaptureImgOnTakeOver +{ + uint32 uuid = 1; + bytes data = 2; } \ 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 05ac922192..0f5fc2c190 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 @@ -3049,6 +3049,26 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return sendSsmFuncMsg(true, system_master.SsmInfo.MessageType.STATION_STATUS_QUERY, SsmInfo.OrderInfo.newBuilder().setOrderId(orderId).build().toByteString()); } + /** + * 人工接管时获取前方和后方摄像头数据 + * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 + * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 + * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} + * + * @param uuid 消息id,域控回调时会回复对应的值 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendCaptureImgReqOnTakeOver(int uuid) { + MessagePad.CaptureImgOnTakeOver.Builder builder = MessagePad.CaptureImgOnTakeOver.newBuilder() + .setUuid(uuid); + MessagePad.CaptureImgOnTakeOver req = builder.build(); + return sendPBMessage(MessageType.TYPE_SEND_CAPTURE_IMG_REQ_ON_TAKE_OVER, req.toByteArray()); + } + } 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 8d965a7bc0..fdb651860b 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 @@ -1855,6 +1855,23 @@ public class AdasManager implements IAdasNetCommApi { return mChannel == null ? -1L : mChannel.sendSsmFuncQueryAutoPilotStation(orderId); } + /** + * 人工接管时获取前方和后方摄像头数据 + * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 + * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 + * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} + * + * @param uuid 消息id,域控回调时会回复对应的值 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + @Override + public long sendCaptureImgReqOnTakeOver(int uuid) { + return mChannel == null ? -1L : mChannel.sendCaptureImgReqOnTakeOver(uuid); + } + /** * 查询节点状态 * 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 8abb7a99a5..c7f35baeb0 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 @@ -1344,6 +1344,20 @@ public interface IAdasNetCommApi { */ long sendSsmFuncQueryAutoPilotStation(@NonNull String orderId); + /** + * 人工接管时获取前方和后方摄像头数据 + * 一次请求域控回调次两次摄像头数据 根据{@link MessagePad.CaptureImgOnTakeOver#getUuid()}进行区分是否是哪次请求 + * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 + * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} + * + * @param uuid 消息id,域控回调时会回复对应的值 + * @return 消息是否添加到WS消息发送队列,返回值为非0的正整数时表示下发消息的消息ID + * * >=0:表示添加到WS发送消息队列 + * * =0:表示乘客屏模式添加到WS发送消息队列 + * * -1L:添加到WS发送消息队列失败 + */ + long sendCaptureImgReqOnTakeOver(int uuid); + // TODO 需求暂停 待讨论 // boolean getRoutes(); 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 d25862952e..2692687c37 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 @@ -638,6 +638,15 @@ public interface OnAdasListener { */ void onNodeStateInfo(@NonNull NodeStateInfo stateInfo); + /** + * 接管时前方和后方摄像头数据请求的响应 + * + * @param header 头 + * @param isFront true:前方摄像头 false:后方摄像头 + * @param data 数据 + */ + void onCaptureImgOnTakeOver(@NonNull MessagePad.Header header, boolean isFront, @NonNull MessagePad.CaptureImgOnTakeOver data); + /** * 是否有能力启动自动驾驶 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java new file mode 100644 index 0000000000..fa7a6b3fa9 --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CaptureImgOnTakeOverMessage.java @@ -0,0 +1,33 @@ +package com.zhidao.support.adas.high.msg; + +import android.os.SystemClock; + +import com.google.protobuf.InvalidProtocolBufferException; +import com.zhidao.support.adas.high.AdasChannel; +import com.zhidao.support.adas.high.OnAdasListener; +import com.zhidao.support.adas.high.common.CupidLogUtils; +import com.zhidao.support.adas.high.protocol.RawData; +import com.zhjt.mogo.adas.common.MessageType; + +import mogo.telematics.pad.MessagePad; + +/** + * 接管时前方和后方摄像头数据请求的响应 + */ +public class CaptureImgOnTakeOverMessage extends MyAbstractMessageHandler { + + @Override + public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { + MessagePad.CaptureImgOnTakeOver data = MessagePad.CaptureImgOnTakeOver.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); + AdasChannel.calculateTimeConsumingOnDispatchRaw("接管时前方和后方摄像头数据请求的响应", raw.receiveTime); + long nowTime = 0; + if (CupidLogUtils.isEnableLog()) + nowTime = SystemClock.elapsedRealtime(); + if (adasListener != null) { + MessagePad.Header header = raw.getHeader(); + adasListener.onCaptureImgOnTakeOver(header, header.getMsgType() == MessageType.TYPE_RECEIVE_CAPTURE_FRONT_IMG_ON_TAKE_OVER.typeCode, data); + } + AdasChannel.calculateTimeConsumingBusiness("接管时前方和后方摄像头数据请求的响应", nowTime); + } + +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index b221e7746c..8ee150b3d5 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java @@ -55,6 +55,7 @@ public class MyMessageFactory implements IMyMessageFactory { private IMsg laneMarksTranMessage;//车道线 private IMsg powerUnitMessage;//电源模块 private IMsg padSsmFuncMsgMessage;//SSM功能 + private IMsg captureImgOnTakeOverMessage;//接管时前方和后方摄像头数据请求的响应 private final AutopilotReview autopilotReview; private final TurnLightState lightLeft = new TurnLightState(); @@ -317,6 +318,12 @@ public class MyMessageFactory implements IMyMessageFactory { padSsmFuncMsgMessage = new PadSsmFuncMsgMessage(); } return padSsmFuncMsgMessage; + } else if (messageType == MessageType.TYPE_RECEIVE_CAPTURE_FRONT_IMG_ON_TAKE_OVER.typeCode || messageType == MessageType.TYPE_RECEIVE_CAPTURE_BACK_IMG_ON_TAKE_OVER.typeCode) { + //接管时正前方和后方摄像头数据请求的响应 + if (captureImgOnTakeOverMessage == null) { + captureImgOnTakeOverMessage = new CaptureImgOnTakeOverMessage(); + } + return captureImgOnTakeOverMessage; } else { //MessageType.TYPE_DEFAULT.typeCode return null; From e2541db3b3e2e2dad6087057c368c6101bd63541 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 29 Nov 2024 19:43:13 +0800 Subject: [PATCH 04/15] =?UTF-8?q?[6.9.0]OTA=E5=8D=87=E7=BA=A7=E5=92=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=97=AD=E7=8E=AF=E9=9C=80=E6=B1=82=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotControlProvider.kt | 33 ++++++++ .../autopilot/adapter/MoGoAdasListenerImpl.kt | 16 +++- .../DevaToolsProvider.kt | 2 + .../ota/OTAManager.kt | 7 -- .../ota/OTAUpgradeConfig.kt | 11 +++ .../ota/OTAUpgradeManager.kt | 82 ++++++++++++++++++ .../core/function/hmi/ui/MoGoHmiProvider.kt | 12 +++ .../function/hmi/ui/tools/OTAUpgradeDialog.kt | 76 +++++++++++++++++ .../main/res/layout/dialog_ota_upgrade.xml | 84 +++++++++++++++++++ .../src/main/res/values/strings.xml | 4 + .../IMoGoAutopilotControlProvider.kt | 25 ++++++ .../api/devatools/ICaptureImgListener.kt | 17 ++++ .../function/api/devatools/IOTAListener.kt | 31 +++++++ .../api/hmi/warning/IMoGoHmiProvider.kt | 5 ++ .../CallerAutoPilotControlManager.kt | 30 +++++++ .../call/devatools/CallerCaptureImgManager.kt | 22 +++++ .../call/devatools/CallerOTAManager.kt | 48 +++++++++++ .../function/call/hmi/CallerHmiManager.kt | 7 ++ 18 files changed, 501 insertions(+), 11 deletions(-) delete mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAManager.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeConfig.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ota/OTAUpgradeManager.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTAUpgradeDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_upgrade.xml create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/ICaptureImgListener.kt create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IOTAListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerCaptureImgManager.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerOTAManager.kt 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 From f38b93147354bfecd42ba57eddc52d67d58ec1f0 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 2 Dec 2024 11:29:48 +0800 Subject: [PATCH 05/15] =?UTF-8?q?[690][adas]=E6=96=B0=E5=A2=9E=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=E6=8E=A5=E7=AE=A1=E6=97=B6=E7=BB=99PAD=E5=8F=91?= =?UTF-8?q?=E5=90=8E=E6=91=84=E5=83=8F=E5=A4=B4=E6=95=B0=E6=8D=AE=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=B8=8E=E5=93=8D=E5=BA=94=E4=BF=AE=E6=94=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/mogo-adas-data/src/main/proto/message_pad.proto | 2 +- .../src/main/java/com/zhidao/support/adas/high/AdasChannel.java | 2 +- .../src/main/java/com/zhidao/support/adas/high/AdasManager.java | 2 +- .../main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/mogo-adas-data/src/main/proto/message_pad.proto b/libraries/mogo-adas-data/src/main/proto/message_pad.proto index 7ee8c30228..5a1c0cc6a9 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -948,6 +948,6 @@ message CollisionReport //message definition for MsgTypeCaptureImgReqOnTakeOver MsgTypeCaptureFrontImgOnTakeOver MsgTypeCaptureBackImgOnTakeOver message CaptureImgOnTakeOver { - uint32 uuid = 1; + uint64 uuid = 1; bytes data = 2; } \ 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 0f5fc2c190..e0cab876c4 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 @@ -3062,7 +3062,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * * -1L:添加到WS发送消息队列失败 */ @Override - public long sendCaptureImgReqOnTakeOver(int uuid) { + public long sendCaptureImgReqOnTakeOver(long uuid) { MessagePad.CaptureImgOnTakeOver.Builder builder = MessagePad.CaptureImgOnTakeOver.newBuilder() .setUuid(uuid); MessagePad.CaptureImgOnTakeOver req = builder.build(); 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 fdb651860b..f1d824e04c 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 @@ -1868,7 +1868,7 @@ public class AdasManager implements IAdasNetCommApi { * * -1L:添加到WS发送消息队列失败 */ @Override - public long sendCaptureImgReqOnTakeOver(int uuid) { + public long sendCaptureImgReqOnTakeOver(long uuid) { return mChannel == null ? -1L : mChannel.sendCaptureImgReqOnTakeOver(uuid); } 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 c7f35baeb0..07e6bc88e6 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 @@ -1356,7 +1356,7 @@ public interface IAdasNetCommApi { * * =0:表示乘客屏模式添加到WS发送消息队列 * * -1L:添加到WS发送消息队列失败 */ - long sendCaptureImgReqOnTakeOver(int uuid); + long sendCaptureImgReqOnTakeOver(long uuid); // TODO 需求暂停 待讨论 // boolean getRoutes(); From 40e31a059af1e80a4db38744dffc7b363cd27930 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 2 Dec 2024 11:43:09 +0800 Subject: [PATCH 06/15] =?UTF-8?q?[6.9.0]=E6=8E=A5=E7=AE=A1=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=89=8D=E5=90=8E=E6=91=84=E5=83=8F=E5=A4=B4=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=8E=A5=E5=8F=A3UUID=E6=95=B0=E6=8D=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacenter/autopilot/MoGoAutopilotControlProvider.kt | 2 +- .../function/api/autopilot/IMoGoAutopilotControlProvider.kt | 2 +- .../function/call/autopilot/CallerAutoPilotControlManager.kt | 2 +- 3 files changed, 3 insertions(+), 3 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 ed326e701b..6c56e25ed6 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 @@ -1509,7 +1509,7 @@ class MoGoAutopilotControlProvider : * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} */ - override fun sendCaptureImgReqOnTakeOver(uuid: Int): Boolean { + override fun sendCaptureImgReqOnTakeOver(uuid: Long): Boolean { return AdasManager.getInstance().sendCaptureImgReqOnTakeOver(uuid)>-1 } 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 fe977c21d8..3add803d41 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,5 +730,5 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} */ - fun sendCaptureImgReqOnTakeOver(uuid: Int): Boolean + fun sendCaptureImgReqOnTakeOver(uuid: Long): Boolean } \ 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 8a8aebc6f3..5a43dc8403 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 @@ -1089,7 +1089,7 @@ object CallerAutoPilotControlManager { * 例如下发uuid = 1 域控正常会回调两次响应接口 两次的uuid都是1,通过isFront区分是前方还是后方摄像头 * 域控响应接口{@link OnAdasListener#onCaptureImgOnTakeOver(MessagePad.Header, boolean, MessagePad.CaptureImgOnTakeOver)} */ - fun sendCaptureImgReqOnTakeOver(uuid: Int): Boolean{ + fun sendCaptureImgReqOnTakeOver(uuid: Long): Boolean{ return providerApi?.sendCaptureImgReqOnTakeOver(uuid)?:false } From e342a8d7358bedacb7453665f6b59387bf1a284d Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 2 Dec 2024 15:16:19 +0800 Subject: [PATCH 07/15] =?UTF-8?q?[690][adas]OTA=E5=8D=87=E7=BA=A7=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 36 ++++++++--------- .../ota/OTAUpgradeManager.kt | 9 ----- .../function/api/devatools/IOTAListener.kt | 10 ++--- .../call/devatools/CallerOTAManager.kt | 20 +++++----- .../src/main/proto/ssm_info.proto | 40 ++++++++++++++++--- .../support/adas/high/OnAdasListener.java | 18 ++++----- .../adas/high/msg/PadSsmFuncMsgMessage.java | 16 ++++---- 7 files changed, 84 insertions(+), 65 deletions(-) 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 e5824a8c58..35f34a1d8f 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 @@ -446,24 +446,24 @@ class MoGoAdasListenerImpl : OnAdasListener { } } - /** - * SSM上报OTA下载进度, 开始升级后定频上报 - * - * @param header 头 - * @param token PadSsmMsg唯一消息ID - * @param timestamp 消息发送时间 单位:毫秒 - * @param progress 数据 null表示 PadSsmMsg中的消息体为null - */ - override fun onOtaLoadingProgress( - header: MessagePad.Header?, - token: Long, - timestamp: Long, - progress: SsmInfo.OtaLoadingProgess? - ) { - if(progress != null){ - CallerOTAManager.invokeOtaLoadingProgress(progress) - } - } +// /** +// * SSM上报OTA下载进度, 开始升级后定频上报 +// * +// * @param header 头 +// * @param token PadSsmMsg唯一消息ID +// * @param timestamp 消息发送时间 单位:毫秒 +// * @param progress 数据 null表示 PadSsmMsg中的消息体为null +// */ +// override fun onOtaLoadingProgress( +// header: MessagePad.Header?, +// token: Long, +// timestamp: Long, +// progress: SsmInfo.OtaLoadingProgess? +// ) { +// if(progress != null){ +// CallerOTAManager.invokeOtaLoadingProgress(progress) +// } +// } /** * SSM上报OTA状态和查询OTA状态 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 774bc35424..335fd6ff17 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 @@ -56,15 +56,6 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener, } - /** - * SSM上报OTA下载进度, 开始升级后定频上报 - * @param progress 下载进度 - */ - override fun onOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess) { - super.onOtaLoadingProgress(progress) - - - } /** * SSM上报OTA状态和查询OTA状态 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 d200779363..6068c69827 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 @@ -13,11 +13,11 @@ interface IOTAListener { */ fun onOtaDownloadRequest(request: SsmInfo.OtaDownloadRequest){} - /** - * SSM上报OTA下载进度, 开始升级后定频上报 - * @param progress 下载进度 - */ - fun onOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess){} +// /** +// * SSM上报OTA下载进度, 开始升级后定频上报 +// * @param progress 下载进度 +// */ +// fun onOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess){} /** * SSM上报OTA状态和查询OTA状态 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 dcb60a0a47..1397424207 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 @@ -20,16 +20,16 @@ object CallerOTAManager: CallerBase() { } } - /** - * SSM上报OTA下载进度, 开始升级后定频上报 - * @param progress 下载进度 - */ - fun invokeOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess){ - M_LISTENERS.forEach { - val listener = it.value - listener.onOtaLoadingProgress(progress) - } - } +// /** +// * SSM上报OTA下载进度, 开始升级后定频上报 +// * @param progress 下载进度 +// */ +// fun invokeOtaLoadingProgress(progress: SsmInfo.OtaLoadingProgess){ +// M_LISTENERS.forEach { +// val listener = it.value +// listener.onOtaLoadingProgress(progress) +// } +// } /** * SSM上报OTA状态和查询OTA状态 diff --git a/libraries/mogo-adas-data/src/main/proto/ssm_info.proto b/libraries/mogo-adas-data/src/main/proto/ssm_info.proto index 7e738f60d2..a9cfd92b3e 100644 --- a/libraries/mogo-adas-data/src/main/proto/ssm_info.proto +++ b/libraries/mogo-adas-data/src/main/proto/ssm_info.proto @@ -58,7 +58,7 @@ enum MessageType { NOTIFICATION = 0; // ssm发送通知 msg:Notification OTA_DOWNLOAD_REQUEST = 1; // ssm发送OTA升级提示请求 todo OTA_DOWNLOAD_RESPONSE = 2; // pad下发OTA升级提示响应 todo - OTA_LOADING_PROGRESS = 3; // ssm上报OTA下载进度, 开始升级后定频上报 todo + OTA_LOADING_PROGRESS = 3; // ssm上报OTA下载进度, 开始升级后定频上报 todo 废弃 使用OTA_STATUS 定频推送的进度来,为下载时是0.1Hz,下载时是1Hz,此接口无法表示多任务,所以废弃 OTA_STATUS = 4; // ssm 上报OTA状态 todo OTA_STATUS_QUERY = 5; // pad查询OTA状态 req:OtaToken resp:OtaStatus COLD_START_STATUS_REPORT = 6; // 冷启动状态上报 msg:ColdStartState @@ -91,13 +91,41 @@ enum OtaType { MAP = 3; PROFILE = 4; } +//product_name中的数据 +//[{ +// "token": "12,34,56", +// "status": 0,// 与 UpgradeStatus 中的值相同 +// "fail_reason": "", +// "upgrade_reason": "", +// "task_id": 0, +// "task_item_id": 0, +// "ota_type": 1, +// "product_name": "", +// "need_restart": false, +// "is_delay": false, +// "cur_size": 0, +// "total_size": 0 +//}, { +// "token": "34,56,78", +// "status": 0, +// "fail_reason": "", +// "upgrade_reason": "", +// "task_id": 0, +// "task_item_id": 0, +// "ota_type": 1, +// "product_name": "", +// "need_restart": false, +// "is_delay": false, +// "cur_size": 0, +// "total_size": 0 +//}] message OtaDownloadRequest { required string ota_token = 1; // ota token 唯一标识 - required OtaType ota_type = 2; // ota type 1:镜像, 2:固件, 3:地图, 4:配置文件 - required bool need_restart = 3; // 是否需要重启 True:需要, False:不需要 + required OtaType ota_type = 2; // ota type 1:镜像, 2:固件, 3:地图, 4:配置文件 todo 废弃,使用product_name json中的 ota_type + required bool need_restart = 3; // 是否需要重启 True:需要, False:不需要 todo 废弃,使用product_name json中的 need_restart required string product_name = 4; // 制品名称 - optional double size = 5; // 文件大小 Mb + optional double size = 5; // 文件大小 Mb todo 废弃,使用product_name json中的 cur_size total_size } enum IfUpgrade { @@ -130,8 +158,8 @@ enum UpgradeStatus { message OtaStatus { required OtaDownloadRequest ota_info = 1; // 升级信息 - required UpgradeStatus status = 2; // 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败 - optional string reason = 3; // 失败原因 + required UpgradeStatus status = 2; // 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败 todo 废弃,使用product_name json中的 status + optional string reason = 3; // 失败原因 todo 废弃 todo 废弃,使用product_name json中的 fail_reason } enum CSState { 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 2692687c37..2408c9c74a 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 @@ -217,15 +217,15 @@ public interface OnAdasListener { */ void onOtaDownloadRequest(MessagePad.Header header, long token, long timestamp, @Nullable SsmInfo.OtaDownloadRequest request); - /** - * SSM上报OTA下载进度, 开始升级后定频上报 - * - * @param header 头 - * @param token PadSsmMsg唯一消息ID - * @param timestamp 消息发送时间 单位:毫秒 - * @param progress 数据 null表示 PadSsmMsg中的消息体为null - */ - void onOtaLoadingProgress(MessagePad.Header header, long token, long timestamp, @Nullable SsmInfo.OtaLoadingProgess progress); +// /** +// * SSM上报OTA下载进度, 开始升级后定频上报 +// * +// * @param header 头 +// * @param token PadSsmMsg唯一消息ID +// * @param timestamp 消息发送时间 单位:毫秒 +// * @param progress 数据 null表示 PadSsmMsg中的消息体为null +// */ +// void onOtaLoadingProgress(MessagePad.Header header, long token, long timestamp, @Nullable SsmInfo.OtaLoadingProgess progress); /** diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java index 34d57d25e7..8cd2db31d5 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/PadSsmFuncMsgMessage.java @@ -63,14 +63,14 @@ public class PadSsmFuncMsgMessage extends MyAbstractMessageHandler { adasListener.onOtaDownloadRequest(raw.getHeader(), padSsmMsg.getToken(), timestamp, request); } } else if (type == SsmInfo.MessageType.OTA_LOADING_PROGRESS) { - //SSM上报OTA下载进度, 开始升级后定频上报 - SsmInfo.OtaLoadingProgess progress = null; - if (!data.isEmpty()) { - progress = SsmInfo.OtaLoadingProgess.parseFrom(data); - } - if (adasListener != null) { - adasListener.onOtaLoadingProgress(raw.getHeader(), padSsmMsg.getToken(), timestamp, progress); - } +// //SSM上报OTA下载进度, 开始升级后定频上报 +// SsmInfo.OtaLoadingProgess progress = null; +// if (!data.isEmpty()) { +// progress = SsmInfo.OtaLoadingProgess.parseFrom(data); +// } +// if (adasListener != null) { +// adasListener.onOtaLoadingProgress(raw.getHeader(), padSsmMsg.getToken(), timestamp, progress); +// } } else if (type == SsmInfo.MessageType.OTA_STATUS || type == SsmInfo.MessageType.OTA_STATUS_QUERY) { //SSM上报OTA状态和查询OTA状态 SsmInfo.OtaStatus status = null; From ac756f3b66982958d964d69688cd1a59fd240f24 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 2 Dec 2024 19:44:05 +0800 Subject: [PATCH 08/15] =?UTF-8?q?[6.9.0]=E5=BD=95=E5=8C=85=E6=88=AA?= =?UTF-8?q?=E5=9B=BE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/BadCaseManager.kt | 76 +++++++++------- .../badcase/biz/InitiativeBadCaseWindow.kt | 89 +++++++++---------- .../badcase/biz/PassiveBadCaseWindow.kt | 79 ++++++++-------- 3 files changed, 124 insertions(+), 120 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index 4506bca906..99cd8717db 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -5,6 +5,7 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.os.Environment import android.os.SystemClock import android.util.Log @@ -42,6 +43,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisStatesListener import com.mogo.eagle.core.function.api.autopilot.IMoGoTakeoverListener import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener +import com.mogo.eagle.core.function.api.devatools.ICaptureImgListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener import com.mogo.eagle.core.function.api.map.deva.IMoGoMapScreenListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager @@ -52,6 +54,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84Lis import com.mogo.eagle.core.function.call.autopilot.CallerChassisStatesListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerTakeoverListenerManager import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener +import com.mogo.eagle.core.function.call.devatools.CallerCaptureImgManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager import com.mogo.eagle.core.function.call.map.CallerMapScreenListenerManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager @@ -72,6 +75,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.util.RecordBitmapUtils import com.zhjt.mogo_core_function_devatools.ext.enqueuePop import com.zhjt.mogo_core_function_devatools.workorder.ReportTypeWindow import me.jessyan.autosize.utils.AutoSizeUtils +import mogo.telematics.pad.MessagePad import record_cache.RecordPanelOuterClass import java.io.File import java.util.Random @@ -81,7 +85,7 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis IMoGoChassisLocationGCJ02Listener, IMsgBoxListener, IMoGoDevaToolsListener, IMogoStatusChangedListener, IMoGoMapScreenListener, IMoGoChassisStatesListener, IMoGoAutopilotStatusListener, - IDataCenterBizListener, IMoGoTakeoverListener { + IDataCenterBizListener, IMoGoTakeoverListener, ICaptureImgListener { const val TAG = "BadCase" @@ -91,6 +95,7 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis private var record: AutoPilotRecord? = null private var recordKey: Long = 0 //主动录制bag包key + private var takeOverBagId: Long = 0 //接管录包Bag Id(key) @SuppressLint("StaticFieldLeak") private var reportTypeWindow: ReportTypeWindow ?= null @@ -116,6 +121,8 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis //消息盒子监听,获取FM和Report信息 CallerMsgBoxListenerManager.addListener(TAG,this) CallerDevaToolsListenerManager.addListener(TAG, this) + //接管时前方和后方摄像头数据请求响应回调监听 + CallerCaptureImgManager.addListener(TAG, this) // 云socket连接状态 MogoStatusManager.getInstance() .registerStatusChangedListener(TAG, StatusDescriptor.CLOUD_SOCKET, this) @@ -297,8 +304,6 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis }else{ //进行录包,但不展示录包弹窗 BadCaseConfig.notDisplayBagWindow = true - //高精地图屏幕截图 - CallerMapScreenListenerManager.addListener(TAG,this) val recordKey = Random(SystemClock.elapsedRealtime()).nextInt().toLong() CallerAutoPilotControlManager.recordPackage(BadCaseConfig.type,recordKey.toInt(), BadCaseConfig.totalDuration, BadCaseConfig.previousDuration) @@ -416,8 +421,6 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis //保存录包状态 recordSet.add(recordPanel.key.toString()) BadCaseConfig.setInitiativeRecordSet(recordSet) - //开启高精地图截图 - CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() //将当次主动录包设置标签还原 BadCaseConfig.notDisplayBagWindow = false } @@ -457,6 +460,13 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis val latLon = LatLonPoint(CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude, CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude) val q = RegeocodeQuery(latLon,200f,GeocodeSearch.AMAP) geocodeSearch.getFromLocationAsyn(q) + takeOverBagId = recordPanel.key + //触发域控前后120度摄像头截图和高精地图截图 + CallerAutoPilotControlManager.sendCaptureImgReqOnTakeOver(recordPanel.key) + //高精地图屏幕截图 + CallerMapScreenListenerManager.addListener(TAG,this) + //开启高精地图截图 + CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() } } } @@ -578,42 +588,16 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis override fun onMapScreen(bitmap: Bitmap) { super.onMapScreen(bitmap) - //在截图上保存即时信息 - val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" - val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}" - val state = when(CallerAutoPilotStatusListenerManager.getState()){ - 0->"自驾状态:不可自驾" - 1->"自驾状态:可自驾" - 2->"自驾状态:自驾中" - 7->"自驾状态:平行驾驶中" - else->"自驾状态:未知" - } - val speed = "当前车速:${BadCaseConfig.currentSpeed}" - val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ - "路线起始点:无" - }else{ - "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" - } - val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, - BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus - ,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity) - //图片保存本地 val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ "MapScreen" + File.separator+ currentDay + File.separator - val fileName = "$recordKey.png" + val fileName = "$takeOverBagId.png" val path = fileDir + fileName if (!File(fileDir).exists()) { File(fileDir).mkdirs() } - if(outBitmap != null){ - RecordBitmapUtils.bitmap2Path(outBitmap,path) - }else{ - RecordBitmapUtils.bitmap2Path(bitmap,path) - } - //遍历是否有非当日的文件并删除 - RecordBitmapUtils.deleteExpiredFile(currentDay) + RecordBitmapUtils.bitmap2Path(bitmap,path) //注销高精地图截图监听回调 CallerMapScreenListenerManager.removeListener(TAG) } @@ -648,4 +632,30 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis } + /** + * 接管时前方和后方摄像头数据请求的响应 + * @param isFront true:前方摄像头 false:后方摄像头 + * @param data 数据 + */ + override fun onCaptureImgOnTakeOver(isFront: Boolean, data: MessagePad.CaptureImgOnTakeOver) { + super.onCaptureImgOnTakeOver(isFront, data) + //将byte字节流转为Bitmap + val bitmap = BitmapFactory.decodeByteArray(data.data.toByteArray(),0,data.toByteArray().size) + //图片保存本地 + val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) + val imageName = if(isFront){ + "FrontCamera" + }else{ + "RearCamera" + } + val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ + imageName + File.separator+ currentDay + File.separator + val fileName = "$takeOverBagId.png" + val path = fileDir + fileName + if (!File(fileDir).exists()) { + File(fileDir).mkdirs() + } + RecordBitmapUtils.bitmap2Path(bitmap,path) + } + } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index 8cf0176c4a..e76b7a819e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -6,7 +6,6 @@ import android.graphics.Bitmap import android.graphics.Color import android.graphics.PixelFormat import android.os.Bundle -import android.os.Environment import android.os.Handler import android.os.SystemClock import android.util.DisplayMetrics @@ -36,12 +35,9 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener import com.mogo.eagle.core.function.api.map.deva.IMoGoMapScreenListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84 import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager -import com.mogo.eagle.core.function.call.map.CallerMapScreenListenerManager -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.mogo.toast.TipToast @@ -75,7 +71,6 @@ import record_cache.RecordPanelOuterClass import java.io.File import java.util.* import kotlin.collections.ArrayList -import kotlin.math.absoluteValue /** @@ -198,7 +193,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList BadCaseNetManager.badCaseNetManager.getRecordOption(1,AppConfigInfo.iPCMacAddress) // BadCaseNetManager.badCaseNetManager.getRecordOption(1,"48:b0:2d:3a:9c:8f") //高精地图屏幕截图 - CallerMapScreenListenerManager.addListener(this.hashCode().toString(),this) +// CallerMapScreenListenerManager.addListener(this.hashCode().toString(),this) //采集结果回调监听 CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(),this) //主动录包采集原因回调监听 @@ -561,7 +556,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList //注销采集原因回调监听 CallerDevaToolsNetManager.removeListener(this.hashCode().toString()) //注销高精地图截图监听回调 - CallerMapScreenListenerManager.removeListener(this.hashCode().toString()) +// CallerMapScreenListenerManager.removeListener(this.hashCode().toString()) if (mFloatLayout.parent != null){ mWindowManager!!.removeView(mFloatLayout) @@ -580,8 +575,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList //保存录包状态 recordSet.add(recordPanel.key.toString()) BadCaseConfig.setInitiativeRecordSet(recordSet) - //开启高精地图截图 - CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() +// //开启高精地图截图 +// CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() } if(recordFileName==null){ recordFileName = recordPanel.filename @@ -702,44 +697,44 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList * 高精地图截图回调 */ override fun onMapScreen(bitmap: Bitmap) { - //在截图上保存即时信息 - val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" - val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}" - val state = when(CallerAutoPilotStatusListenerManager.getState()){ - 0->"自驾状态:不可自驾" - 1->"自驾状态:可自驾" - 2->"自驾状态:自驾中" - 7->"自驾状态:平行驾驶中" - else->"自驾状态:未知" - } - val speed = "当前车速:${BadCaseConfig.currentSpeed}" - val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ - "路线起始点:无" - }else{ - "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" - } - - val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, - BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus - ,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity) - - //图片保存本地 - val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) - val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ - "MapScreen" + File.separator+ currentDay + File.separator - val fileName = "$recordKey.png" - val path = fileDir + fileName - if (!File(fileDir).exists()) { - File(fileDir).mkdirs() - } - if(outBitmap != null){ - RecordBitmapUtils.bitmap2Path(outBitmap,path) - }else{ - RecordBitmapUtils.bitmap2Path(bitmap,path) - } - screenSavePath = path - //遍历是否有非当日的文件并删除 - RecordBitmapUtils.deleteExpiredFile(currentDay) +// //在截图上保存即时信息 +// val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" +// val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}" +// val state = when(CallerAutoPilotStatusListenerManager.getState()){ +// 0->"自驾状态:不可自驾" +// 1->"自驾状态:可自驾" +// 2->"自驾状态:自驾中" +// 7->"自驾状态:平行驾驶中" +// else->"自驾状态:未知" +// } +// val speed = "当前车速:${BadCaseConfig.currentSpeed}" +// val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ +// "路线起始点:无" +// }else{ +// "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" +// } +// +// val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, +// BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus +// ,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity) +// +// //图片保存本地 +// val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) +// val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ +// "MapScreen" + File.separator+ currentDay + File.separator +// val fileName = "$recordKey.png" +// val path = fileDir + fileName +// if (!File(fileDir).exists()) { +// File(fileDir).mkdirs() +// } +// if(outBitmap != null){ +// RecordBitmapUtils.bitmap2Path(outBitmap,path) +// }else{ +// RecordBitmapUtils.bitmap2Path(bitmap,path) +// } +// screenSavePath = path +// //遍历是否有非当日的文件并删除 +// RecordBitmapUtils.deleteExpiredFile(currentDay) } } \ 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/badcase/biz/PassiveBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt index 8fec467ed1..883ca30e6c 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt @@ -37,7 +37,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager -import com.mogo.eagle.core.function.call.map.CallerMapScreenListenerManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -180,7 +179,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene BadCaseNetManager.badCaseNetManager.getRecordOption(2,AppConfigInfo.iPCMacAddress) // BadCaseNetManager.badCaseNetManager.getRecordOption(2,"48:b0:2d:3a:9c:8f") //高精地图屏幕截图 - CallerMapScreenListenerManager.addListener(this.hashCode().toString(),this) +// CallerMapScreenListenerManager.addListener(this.hashCode().toString(),this) CallerDevaToolsNetManager.addListener(this.hashCode().toString(),this) if(BadCaseConfig.windowNum<1){ BadCaseConfig.windowNum = 1 @@ -530,7 +529,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene fun hideFloatWindow() { //注销高精地图截图监听回调 - CallerMapScreenListenerManager.removeListener(this.hashCode().toString()) +// CallerMapScreenListenerManager.removeListener(this.hashCode().toString()) //注销采集原因回调监听 CallerDevaToolsNetManager.removeListener(this.hashCode().toString()) // 移除 ADAS车辆状态&定位 监听 @@ -552,7 +551,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene receiveTime = msgBoxBean.timestamp.toString() stat = recordBagMsg.stat.toString() //获取高精地图截图 - CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() +// CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() } fun setClickListener(clickListener: ClickListener) { @@ -589,42 +588,42 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene */ override fun onMapScreen(bitmap: Bitmap) { //在截图上保存即时信息 - val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" - val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}" - val state = when(CallerAutoPilotStatusListenerManager.getState()){ - 0->"自驾状态:不可自驾" - 1->"自驾状态:可自驾" - 2->"自驾状态:自驾中" - 7->"自驾状态:平行驾驶中" - else->"自驾状态:未知" - } - val speed = "当前车速:${BadCaseConfig.currentSpeed}" - val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ - "路线起始点:无" - }else{ - "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" - } - - val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, - BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus - ,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity) - //图片保存本地 - val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) - val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ - "MapScreen" + File.separator+ currentDay + File.separator - val fileName = "$recordKey.png" - val path = fileDir + fileName - if (!File(fileDir).exists()) { - File(fileDir).mkdirs() - } - if(outBitmap != null){ - RecordBitmapUtils.bitmap2Path(outBitmap,path) - }else{ - RecordBitmapUtils.bitmap2Path(bitmap,path) - } - screenSavePath = path - //遍历是否有非当日的文件并删除 - RecordBitmapUtils.deleteExpiredFile(currentDay) +// val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" +// val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}" +// val state = when(CallerAutoPilotStatusListenerManager.getState()){ +// 0->"自驾状态:不可自驾" +// 1->"自驾状态:可自驾" +// 2->"自驾状态:自驾中" +// 7->"自驾状态:平行驾驶中" +// else->"自驾状态:未知" +// } +// val speed = "当前车速:${BadCaseConfig.currentSpeed}" +// val site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ +// "路线起始点:无" +// }else{ +// "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" +// } +// +// val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, +// BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus +// ,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity) +// //图片保存本地 +// val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) +// val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+ +// "MapScreen" + File.separator+ currentDay + File.separator +// val fileName = "$recordKey.png" +// val path = fileDir + fileName +// if (!File(fileDir).exists()) { +// File(fileDir).mkdirs() +// } +// if(outBitmap != null){ +// RecordBitmapUtils.bitmap2Path(outBitmap,path) +// }else{ +// RecordBitmapUtils.bitmap2Path(bitmap,path) +// } +// screenSavePath = path +// //遍历是否有非当日的文件并删除 +// RecordBitmapUtils.deleteExpiredFile(currentDay) } /** From 5221bda15b684cd2f78061cea40cdb4fda56fe20 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 3 Dec 2024 16:52:36 +0800 Subject: [PATCH 09/15] =?UTF-8?q?[6.9.0]OTA=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ota/OTAUpgradeManager.kt | 12 +++++++++++ .../data/deva/coldstart/ColdStartNodeInfo.kt | 2 -- .../core/data/deva/ota/OtaUpgradeInfo.kt | 20 +++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/ota/OtaUpgradeInfo.kt 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 335fd6ff17..62bf7c730c 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 @@ -1,6 +1,7 @@ package com.zhjt.mogo_core_function_devatools.ota import android.content.Context +import android.util.Log 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 @@ -8,6 +9,7 @@ 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 org.json.JSONArray import system_master.SsmInfo /** @@ -67,6 +69,16 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener, override fun onOtaStatus(status: SsmInfo.OtaStatus) { super.onOtaStatus(status) OTAUpgradeConfig.otaToken = status.otaInfo.otaToken + + Log.i(TAG,"status.otaInfo.otaToken"+status.otaInfo.otaToken) + Log.i(TAG,"status.otaInfo.productName"+status.otaInfo.productName) + + //解析JSON + val productArray = JSONArray(status.otaInfo.productName) + if(productArray.length() > 0){ + + } + } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/coldstart/ColdStartNodeInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/coldstart/ColdStartNodeInfo.kt index a6855aa921..b30aa2421a 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/coldstart/ColdStartNodeInfo.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/coldstart/ColdStartNodeInfo.kt @@ -1,7 +1,5 @@ package com.mogo.eagle.core.data.deva.coldstart -import android.os.CountDownTimer - /** * 冷启动关键节点实体类 * @param nodeName 节点名称 diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/ota/OtaUpgradeInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/ota/OtaUpgradeInfo.kt new file mode 100644 index 0000000000..570543a0cf --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/ota/OtaUpgradeInfo.kt @@ -0,0 +1,20 @@ +package com.mogo.eagle.core.data.deva.ota + +/** + * OTA升级详情 + * @param token + * @param status + * @param fail_reason + * @param upgrade_reason 升级原因 + * @param task_id + * @param task_item_id + * @param ota_type ota type 1:镜像, 2:固件, 3:地图, 4:配置文件 + * @param product_name 升级项目名称 + * @param need_restart 升级是否需要重启 + * @param is_delay 是否是延时升级 + * @param cur_size 当前已下载文件大小 + * @param total_size 下载文件总大小 + */ +data class OtaUpgradeInfo(var token: String,var status: Int,var fail_reason: String,var upgrade_reason: String, + var task_id: Int,var task_item_id: Int,var ota_type: Int,var product_name: String, + var need_restart: Boolean,var is_delay: Boolean,var cur_size:Float,var total_size: Float) \ No newline at end of file From 5eb7484701c4c33a03a4b09f01f37e184867a0b2 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Tue, 3 Dec 2024 18:58:42 +0800 Subject: [PATCH 10/15] =?UTF-8?q?[690][adas]OTA=E5=8D=87=E7=BA=A7=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9,sendSsmFuncOtaDow?= =?UTF-8?q?nloadResponse=20=E5=BF=85=E9=A1=BB=E8=B5=8B=E5=80=BCtoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/zhidao/support/adas/high/AdasChannel.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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 e0cab876c4..2c583fc3ce 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 @@ -2984,9 +2984,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec @Override public long sendSsmFuncOtaDownloadResponse(@NonNull String token, @NonNull SsmInfo.IfUpgrade ifUpgrade) { SsmInfo.OtaDownloadResponse.Builder builder = SsmInfo.OtaDownloadResponse.newBuilder(); - if (!TextUtils.isEmpty(token)) { - builder.setToken(token); - } + builder.setToken(TextUtils.isEmpty(token) ? String.valueOf(System.currentTimeMillis()) : token); builder.setIfUpgrade(ifUpgrade); return sendSsmFuncMsg(false, system_master.SsmInfo.MessageType.OTA_DOWNLOAD_RESPONSE, builder.build().toByteString()); } From c9e0f1e4f4cf2d5ac7a8cefe05bf8760523243b1 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 4 Dec 2024 16:50:49 +0800 Subject: [PATCH 11/15] =?UTF-8?q?[6.9.0]OTA=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ota/OTAUpgradeManager.kt | 128 +++++++++++++++++- .../res/layout/item_ota_download_status.xml | 27 ++++ .../core/function/hmi/ui/MoGoHmiProvider.kt | 51 ++++++- .../hmi/ui/tools/OTADownloadStatusDialog.kt | 46 +++++++ .../function/hmi/ui/tools/OTAUpgradeDialog.kt | 61 +++++---- .../hmi/ui/tools/OTAUpgradeTipView.kt | 57 ++++++++ .../tools/adapter/OTADownloadStatusAdapter.kt | 63 +++++++++ .../res/layout/dialog_ota_download_status.xml | 16 +++ .../main/res/layout/dialog_ota_upgrade.xml | 12 ++ .../main/res/layout/view_map_container.xml | 9 ++ .../main/res/layout/view_ota_upgrade_tip.xml | 13 ++ .../core/data/deva/ota/OtaUpgradeInfo.kt | 12 +- .../api/hmi/warning/IMoGoHmiProvider.kt | 12 ++ .../function/call/hmi/CallerHmiManager.kt | 16 +++ 14 files changed, 486 insertions(+), 37 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_ota_download_status.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTADownloadStatusDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTAUpgradeTipView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/adapter/OTADownloadStatusAdapter.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_download_status.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_ota_upgrade_tip.xml 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 62bf7c730c..40982ff2a0 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 @@ -2,6 +2,7 @@ package com.zhjt.mogo_core_function_devatools.ota import android.content.Context import android.util.Log +import com.mogo.eagle.core.data.deva.ota.OtaUpgradeInfo 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 @@ -9,7 +10,9 @@ 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 com.mogo.eagle.core.function.call.hmi.CallerHmiManager import org.json.JSONArray +import org.json.JSONObject import system_master.SsmInfo /** @@ -50,11 +53,74 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener, } /** - * SSM发送OTA升级提示请求 + * SSM发送OTA升级提示请求,主动触发 * @param request SSM发送OTA升级提示内容 */ override fun onOtaDownloadRequest(request: SsmInfo.OtaDownloadRequest) { super.onOtaDownloadRequest(request) + Log.i(TAG,"onOtaDownloadRequest otaToken"+request.otaToken) + Log.i(TAG,"onOtaDownloadRequest productName"+request.productName) + if(request.otaToken.isNotEmpty()){ + if(OTAUpgradeConfig.otaToken != request.otaToken){ + OTAUpgradeConfig.otaToken = request.otaToken + //触发升级提示 + CallerHmiManager.showOTAUpgradeDialog() + }else{ + //展示OTA升级提示 + CallerHmiManager.showOTAUpgradeTipView(true) + } + }else{ + //隐藏OTA升级提示 + CallerHmiManager.showOTAUpgradeTipView(false) + } + //解析JSON + var upgradeComplete = true + val otaUpgradeList = ArrayList() + val productArray = JSONArray(request.productName) + if(productArray.length() > 0){ + for(index in 0 until productArray.length()){ + val productInfo = productArray[index] as JSONObject + val token = productInfo.optString("token") + val productStatus = productInfo.optInt("status") + val failReason = productInfo.optString("fail_reason") + val upgradeReason = productInfo.optString("upgrade_reason") + val taskId = productInfo.optInt("task_id") + val taskItemId = productInfo.optInt("task_item_id") + val otaType = productInfo.optInt("ota_type") + val productName = productInfo.optString("product_name") + val needRestart = productInfo.optBoolean("need_restart") + val isDelay = productInfo.optBoolean("is_delay") + val curSize = productInfo.optDouble("cur_size") + val totalSize = productInfo.optDouble("total_size") + + Log.i(TAG, "index=$index") + Log.i(TAG, "token=$token") + Log.i(TAG, "status=$productStatus") + Log.i(TAG, "fail_reason=$failReason") + Log.i(TAG, "upgrade_reason=$upgradeReason") + Log.i(TAG, "task_id=$taskId") + Log.i(TAG, "task_item_id=$taskItemId") + Log.i(TAG, "ota_type=$otaType") + Log.i(TAG, "product_name=$productName") + Log.i(TAG, "need_restart=$needRestart") + Log.i(TAG, "is_delay=$isDelay") + Log.i(TAG, "cur_size=$curSize") + Log.i(TAG, "total_size=$totalSize") + + //// 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败 + if(productStatus == 0 || productStatus == 1 || productStatus == 2){ + upgradeComplete = false + } + + val otaUpgradeInfo = OtaUpgradeInfo(token, productStatus,failReason,upgradeReason, + taskId,taskItemId,otaType,productName,needRestart,isDelay,curSize,totalSize) + otaUpgradeList.add(otaUpgradeInfo) + } + CallerHmiManager.showOTADownloadStatusDialog(otaUpgradeList) + if(upgradeComplete){ + OTAUpgradeConfig.otaToken = "" + } + } } @@ -68,15 +134,69 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener, */ override fun onOtaStatus(status: SsmInfo.OtaStatus) { super.onOtaStatus(status) - OTAUpgradeConfig.otaToken = status.otaInfo.otaToken + Log.i(TAG,"onOtaStatus status.otaInfo.otaToken"+status.otaInfo.otaToken) + Log.i(TAG,"onOtaStatus status.otaInfo.productName"+status.otaInfo.productName) - Log.i(TAG,"status.otaInfo.otaToken"+status.otaInfo.otaToken) - Log.i(TAG,"status.otaInfo.productName"+status.otaInfo.productName) + if(status.otaInfo.otaToken.isNotEmpty()){ + if(OTAUpgradeConfig.otaToken != status.otaInfo.otaToken){ + OTAUpgradeConfig.otaToken = status.otaInfo.otaToken + //触发升级提示 + CallerHmiManager.showOTAUpgradeDialog() + }else{ + //展示OTA升级提示 + CallerHmiManager.showOTAUpgradeTipView(true) + } + }else{ + //隐藏OTA升级提示 + CallerHmiManager.showOTAUpgradeTipView(false) + } //解析JSON + val otaUpgradeList = ArrayList() val productArray = JSONArray(status.otaInfo.productName) + var upgradeComplete = true if(productArray.length() > 0){ + for(index in 0 until productArray.length()){ + val productInfo = productArray[index] as JSONObject + val token = productInfo.optString("token") + val productStatus = productInfo.optInt("status") + val failReason = productInfo.optString("fail_reason") + val upgradeReason = productInfo.optString("upgrade_reason") + val taskId = productInfo.optInt("task_id") + val taskItemId = productInfo.optInt("task_item_id") + val otaType = productInfo.optInt("ota_type") + val productName = productInfo.optString("product_name") + val needRestart = productInfo.optBoolean("need_restart") + val isDelay = productInfo.optBoolean("is_delay") + val curSize = productInfo.optDouble("cur_size") + val totalSize = productInfo.optDouble("total_size") + Log.i(TAG, "index=$index") + Log.i(TAG, "token=$token") + Log.i(TAG, "status=$productStatus") + Log.i(TAG, "fail_reason=$failReason") + Log.i(TAG, "upgrade_reason=$upgradeReason") + Log.i(TAG, "task_id=$taskId") + Log.i(TAG, "task_item_id=$taskItemId") + Log.i(TAG, "ota_type=$otaType") + Log.i(TAG, "product_name=$productName") + Log.i(TAG, "need_restart=$needRestart") + Log.i(TAG, "is_delay=$isDelay") + Log.i(TAG, "cur_size=$curSize") + Log.i(TAG, "total_size=$totalSize") + //// 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败 + if(productStatus == 0 || productStatus == 1 || productStatus == 2){ + upgradeComplete = false + } + + val otaUpgradeInfo = OtaUpgradeInfo(token, productStatus,failReason,upgradeReason, + taskId,taskItemId,otaType,productName,needRestart,isDelay,curSize,totalSize) + otaUpgradeList.add(otaUpgradeInfo) + } + CallerHmiManager.showOTADownloadStatusDialog(otaUpgradeList) + if(upgradeComplete){ + OTAUpgradeConfig.otaToken = "" + } } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_ota_download_status.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_ota_download_status.xml new file mode 100644 index 0000000000..a51a5f5ad1 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_ota_download_status.xml @@ -0,0 +1,27 @@ + + + + + + + + \ 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 8831e1c072..a4b8ff9f83 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 @@ -29,6 +29,7 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths.PATH_FRAGMENT_HMI import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I +import com.mogo.eagle.core.data.deva.ota.OtaUpgradeInfo import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.map.Infrastructure @@ -58,7 +59,9 @@ 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.OTADownloadStatusDialog import com.mogo.eagle.core.function.hmi.ui.tools.OTAUpgradeDialog +import com.mogo.eagle.core.function.hmi.ui.tools.OTAUpgradeTipView 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 @@ -660,15 +663,59 @@ class MoGoHmiProvider : IMoGoHmiProvider { CallerHmiViewControlListenerManager.invokeColdStartProcessView() } + var otaUpgradeDialog: OTAUpgradeDialog ?= null + var otaDownloadStatusDialog: OTADownloadStatusDialog ?= null + var otaUpgradeTipView: OTAUpgradeTipView ?= null + /** * 展示OTA升级弹窗 */ override fun showOTAUpgradeDialog() { ThreadUtils.runOnUiThread{ - if (context != null){ - OTAUpgradeDialog.show(context) + context?.let { + if(otaUpgradeDialog == null){ + otaUpgradeDialog = OTAUpgradeDialog(it) + } + if(otaUpgradeDialog?.isShowing == false){ + otaUpgradeDialog?.show() + } } } } + /** + * 展示OTA升级下载状态弹窗 + */ + override fun showOTADownloadStatusDialog(list: List) { + ThreadUtils.runOnUiThread{ + if(otaDownloadStatusDialog?.isShowing == true){ + return@runOnUiThread + } + context?.let { + if(otaDownloadStatusDialog == null){ + otaDownloadStatusDialog = OTADownloadStatusDialog(it) + } + otaDownloadStatusDialog?.notifyDownloadStatus(list) + } + } + } + + /** + * 展示OTA升级提示 + * @param visible 设置是否可见 + */ + override fun showOTAUpgradeTipView(visible: Boolean) { + ThreadUtils.runOnUiThread{ + if(otaUpgradeDialog?.isShowing == true){ + return@runOnUiThread + } + if(otaUpgradeTipView == null){ + context?.let { + otaUpgradeTipView = OTAUpgradeTipView(it) + } + } + otaUpgradeTipView?.setDisplayStatus(visible) + } + } + } \ 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/OTADownloadStatusDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTADownloadStatusDialog.kt new file mode 100644 index 0000000000..b4b57af05c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTADownloadStatusDialog.kt @@ -0,0 +1,46 @@ +package com.mogo.eagle.core.function.hmi.ui.tools + +import android.content.Context +import androidx.lifecycle.LifecycleObserver +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.data.deva.ota.OtaUpgradeInfo +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.eagle.core.function.hmi.ui.tools.adapter.OTADownloadStatusAdapter +import kotlinx.android.synthetic.main.dialog_ota_download_status.rvDownloadStatus + +/** + * OTA升级下载状态对话框 + */ +class OTADownloadStatusDialog(context: Context) : + BaseFloatDialog(context,TAG), LifecycleObserver { + + companion object { + private const val TAG = "OTADownloadStatusDialog" + } + + private var otaDownloadStatusAdapter: OTADownloadStatusAdapter ?= null + + + init{ + setContentView(R.layout.dialog_ota_download_status) + setCanceledOnTouchOutside(false) + initView() + } + + private fun initView(){ + val linearLayoutManager = LinearLayoutManager(context) + linearLayoutManager.orientation = LinearLayoutManager.VERTICAL + otaDownloadStatusAdapter = OTADownloadStatusAdapter(context) + rvDownloadStatus.adapter = otaDownloadStatusAdapter + rvDownloadStatus.layoutManager = linearLayoutManager + } + + fun notifyDownloadStatus(list: List){ + if(!this.isShowing){ + show() + } + otaDownloadStatusAdapter?.setData(list) + } + +} \ 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 index 3b916ba7fe..984964f7d2 100644 --- 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 @@ -1,12 +1,17 @@ package com.mogo.eagle.core.function.hmi.ui.tools import android.content.Context +import android.os.CountDownTimer 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.mogo.eagle.core.utilcode.util.ThreadUtils import com.zhjt.mogo_core_function_devatools.ota.OTAUpgradeConfig +import kotlinx.android.synthetic.main.dialog_ota_upgrade.tv_upgrade_countdown +import kotlinx.android.synthetic.main.dialog_ota_upgrade.tv_upgrade_later +import kotlinx.android.synthetic.main.dialog_ota_upgrade.tv_upgrade_now import system_master.SsmInfo /** @@ -17,26 +22,12 @@ class OTAUpgradeDialog(context: Context) : 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 const val UPGRADE_WAITING_TIME = 300000L //升级确认等待时间 + private const val WAITING_TICK_TIME = 1000L //等待确认间隔时间 } private var clickListener: ClickListener? = null - private lateinit var tvUpgradeNow: TextView //立即升级 - private lateinit var tvUpgradeLater: TextView //稍后升级 + private var upgradeWaitingTimer: CountDownTimer ?= null //等待升级确认计时器 init{ setContentView(R.layout.dialog_ota_upgrade) @@ -45,21 +36,32 @@ class OTAUpgradeDialog(context: Context) : } private fun initView(){ - tvUpgradeNow = findViewById(R.id.tv_upgrade_now) - tvUpgradeLater = findViewById(R.id.tv_upgrade_later) //立即升级 - tvUpgradeNow.setOnClickListener { + tv_upgrade_now.setOnClickListener { CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.IMMEDIATELY) + dismiss() } //稍后升级 - tvUpgradeLater.setOnClickListener { + tv_upgrade_later.setOnClickListener { CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.DELAY) + dismiss() } - } + upgradeWaitingTimer = object: CountDownTimer(UPGRADE_WAITING_TIME,WAITING_TICK_TIME){ + override fun onTick(millisUntilFinished: Long) { + ThreadUtils.runOnUiThread { + tv_upgrade_countdown.text = millisUntilFinished.toInt().toString() + } + } - override fun dismiss() { - super.dismiss() - otaUpgradeDialog = null + override fun onFinish() { + CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.DELAY) + ThreadUtils.runOnUiThread { + dismiss() + } + } + + } + upgradeWaitingTimer?.start() } fun setClickListener(clickListener: ClickListener) { @@ -73,4 +75,13 @@ class OTAUpgradeDialog(context: Context) : fun upgradeLater() } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + upgradeWaitingTimer?.cancel() + } + } \ 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/OTAUpgradeTipView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTAUpgradeTipView.kt new file mode 100644 index 0000000000..fb4a06670e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/OTAUpgradeTipView.kt @@ -0,0 +1,57 @@ +package com.mogo.eagle.core.function.hmi.ui.tools + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.hmi.R +import kotlinx.android.synthetic.main.view_ota_upgrade_tip.view.btn_upgrade + +/** + * OTA升级任务标记提示 + */ +class OTAUpgradeTipView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr){ + + companion object { + private const val TAG = "OTAUpgradeTipView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.view_ota_upgrade_tip, this, true) + initView() + } + + private fun initView(){ + btn_upgrade.setOnClickListener { + //打开升级弹窗 + CallerHmiManager.showOTAUpgradeDialog() + } + } + + /** + * 设置视图是否可见 + * @param visible 是否可见 + */ + fun setDisplayStatus(visible: Boolean){ + if(visible){ + if(this@OTAUpgradeTipView.visibility == View.VISIBLE){ + return + }else{ + this@OTAUpgradeTipView.visibility = View.VISIBLE + } + }else{ + if(this@OTAUpgradeTipView.visibility != View.VISIBLE){ + return + }else{ + this@OTAUpgradeTipView.visibility = View.GONE + } + } + } + +} \ 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/adapter/OTADownloadStatusAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/adapter/OTADownloadStatusAdapter.kt new file mode 100644 index 0000000000..308f67eab8 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/adapter/OTADownloadStatusAdapter.kt @@ -0,0 +1,63 @@ +package com.mogo.eagle.core.function.hmi.ui.tools.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ProgressBar +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.deva.ota.OtaUpgradeInfo +import com.mogo.eagle.core.function.hmi.R + +/** + * OTA升级下载状态适配器 + */ +class OTADownloadStatusAdapter(private val context: Context): RecyclerView.Adapter() { + + private var data: List ?= null + + fun setData(list: List){ + this.data = list + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DownloadStatusHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_ota_download_status, parent, false) + return DownloadStatusHolder(view) + } + + override fun onBindViewHolder(holder: DownloadStatusHolder, position: Int) { + data?.let { + val otaUpgradeInfo = it[position] + holder.pbDownloadProgress.progress = (otaUpgradeInfo.cur_size*100/otaUpgradeInfo.total_size).toInt() +// 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败 + holder.tvDownloadStatus.text = when (otaUpgradeInfo.status) { + 1 -> { + "下载中" + } + 2 -> { + "下载完成" + } + 3 -> { + "升级完成" + } + 4 -> { + "升级失败" + } + else -> { + "默认(未开始)" + } + } + } + } + + override fun getItemCount() = data?.size ?: 0 + + class DownloadStatusHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var pbDownloadProgress: ProgressBar = itemView.findViewById(R.id.pbDownloadProgress) + var tvDownloadStatus: TextView = itemView.findViewById(R.id.tvDownloadStatus) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_download_status.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_download_status.xml new file mode 100644 index 0000000000..2c85291729 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_ota_download_status.xml @@ -0,0 +1,16 @@ + + + + + + \ 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 index 970833aaa6..c00170b3db 100644 --- 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 @@ -21,6 +21,18 @@ android:layout_marginTop="50dp" /> + + + + + + +