Merge remote-tracking branch 'origin/dev_robotaxi-d_241210_6.9.0' into dev_robotaxi-d_241210_6.9.0
This commit is contained in:
@@ -12,6 +12,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String
|
||||
import com.zhjt.mogo.adas.data.AdasConstants
|
||||
import com.zhjt.mogo_core_function_devatools.ota.OTAUpgradeConfig
|
||||
|
||||
/**
|
||||
* 冷启动管理
|
||||
@@ -82,7 +83,9 @@ object ColdStartManager: IMoGoAutopilotStatusListener, IDataCenterBizListener {
|
||||
override fun invokeLoginStatus(isLogin: Boolean) {
|
||||
super.invokeLoginStatus(isLogin)
|
||||
loginStatus = isLogin
|
||||
Log.i("xuxinchao","loginStatus="+loginStatus)
|
||||
if(loginStatus){
|
||||
OTAUpgradeConfig.coldStartCompleted = true
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,4 +19,13 @@ object OTAUpgradeConfig {
|
||||
//当前SSM版本是否支持OTA升级,默认不支持
|
||||
@JvmField
|
||||
var supportOTA: Boolean = false
|
||||
//是否是主动查询
|
||||
@JvmField
|
||||
var isQuery: Boolean = false
|
||||
//已经提示过升级的列表
|
||||
@JvmField
|
||||
var promptedUpgrade: ArrayList<String> = ArrayList()
|
||||
//已经提示过升级成功的列表
|
||||
@JvmField
|
||||
var upgradeFinish: ArrayList<String> = ArrayList()
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zhjt.mogo_core_function_devatools.ota
|
||||
|
||||
import android.content.Context
|
||||
import android.text.TextUtils
|
||||
import android.util.Log
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.ota.OtaUpgradeInfo
|
||||
@@ -17,6 +18,9 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
import system_master.SsmInfo
|
||||
import java.util.Locale
|
||||
import java.util.regex.Matcher
|
||||
import java.util.regex.Pattern
|
||||
|
||||
/**
|
||||
* OTA升级管理类
|
||||
@@ -56,6 +60,17 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定频SSM接口
|
||||
* 1hz hq m1 MAP350开始支持,其他车型MAP360开始支持
|
||||
* 定频SSM接入后 onStatusQueryResp 状态查询应答接口将弃用
|
||||
* @param statusInf 数据
|
||||
*/
|
||||
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {
|
||||
//判断当前SSM版本是否支持OTA升级
|
||||
OTAUpgradeConfig.supportOTA = parseVersion(true, statusInf.masterVersion) >= 40800
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否有订单
|
||||
* @param inOrder true有订单 false没有订单
|
||||
@@ -76,18 +91,6 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
if(request.otaToken.isNotEmpty()){
|
||||
if(OTAUpgradeConfig.otaToken != request.otaToken){
|
||||
OTAUpgradeConfig.otaToken = request.otaToken
|
||||
//冷启动已完成(包括成功/失败),且驾驶状态为非自驾状态,且当前无订单进行强提示,否则为弱提示
|
||||
if(OTAUpgradeConfig.coldStartCompleted && !OTAUpgradeConfig.autopilotStatus
|
||||
&& !OTAUpgradeConfig.inOrder){
|
||||
//触发强提示升级
|
||||
CallerHmiManager.showOTAUpgradeDialog(true)
|
||||
}else{
|
||||
//触发弱提示升级
|
||||
//冷启动未完成(进行中),或驾驶状态为自驾状态,或当前有订单,直接默认选择稍后升级,
|
||||
// 并toast提示“收到车辆部署任务,请在车辆空闲时发起升级”
|
||||
CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.DELAY)
|
||||
ToastUtils.showLong("收到车辆部署任务,请在车辆空闲时发起升级")
|
||||
}
|
||||
}
|
||||
}
|
||||
//解析JSON
|
||||
@@ -104,7 +107,7 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
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")
|
||||
var productName = productInfo.optString("product_name")
|
||||
val needRestart = productInfo.optBoolean("need_restart")
|
||||
val isDelay = productInfo.optBoolean("is_delay")
|
||||
val curSize = productInfo.optDouble("cur_size")
|
||||
@@ -124,21 +127,45 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
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
|
||||
CallerOTAManager.invokeOtaDownloadStatus(true)
|
||||
}else{
|
||||
CallerOTAManager.invokeOtaDownloadStatus(false)
|
||||
if(index == 0){
|
||||
//是否需要触发提示升级只判断第一个任务
|
||||
if(productStatus == 0){
|
||||
if(!OTAUpgradeConfig.promptedUpgrade.contains(request.otaToken)){
|
||||
//冷启动已完成(包括成功/失败),且驾驶状态为非自驾状态,且当前无订单进行强提示,否则为弱提示
|
||||
if(OTAUpgradeConfig.coldStartCompleted && !OTAUpgradeConfig.autopilotStatus
|
||||
&& !OTAUpgradeConfig.inOrder){
|
||||
//触发强提示升级
|
||||
CallerHmiManager.showOTAUpgradeDialog(true)
|
||||
}else{
|
||||
//触发弱提示升级
|
||||
//冷启动未完成(进行中),或驾驶状态为自驾状态,或当前有订单,直接默认选择稍后升级,
|
||||
// 并toast提示“收到车辆部署任务,请在车辆空闲时发起升级”
|
||||
CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.DELAY)
|
||||
ToastUtils.showLong("收到车辆部署任务,请在车辆空闲时发起升级")
|
||||
}
|
||||
OTAUpgradeConfig.promptedUpgrade.add(request.otaToken)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败
|
||||
if(productStatus == 0 || productStatus == 1 || productStatus == 2){
|
||||
upgradeComplete = false
|
||||
}
|
||||
if(productName.contains(":")){
|
||||
productName = productName.trim().substringAfterLast(":")
|
||||
}
|
||||
val otaUpgradeInfo = OtaUpgradeInfo(token, productStatus,failReason,upgradeReason,
|
||||
taskId,taskItemId,otaType,productName,needRestart,isDelay,curSize,totalSize)
|
||||
otaUpgradeList.add(otaUpgradeInfo)
|
||||
}
|
||||
CallerHmiManager.showOTADownloadStatusDialog(otaUpgradeList)
|
||||
CallerHmiManager.showOTADownloadStatusDialog(true,otaUpgradeList)
|
||||
if(upgradeComplete){
|
||||
OTAUpgradeConfig.otaToken = ""
|
||||
CallerOTAManager.invokeOtaDownloadStatus(false)
|
||||
}else{
|
||||
CallerOTAManager.invokeOtaDownloadStatus(true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,8 +187,6 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
if(status.otaInfo.otaToken.isNotEmpty()){
|
||||
if(OTAUpgradeConfig.otaToken != status.otaInfo.otaToken){
|
||||
OTAUpgradeConfig.otaToken = status.otaInfo.otaToken
|
||||
//触发升级提示
|
||||
CallerHmiManager.showOTAUpgradeDialog(true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +205,7 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
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")
|
||||
var productName = productInfo.optString("product_name")
|
||||
val needRestart = productInfo.optBoolean("need_restart")
|
||||
val isDelay = productInfo.optBoolean("is_delay")
|
||||
val curSize = productInfo.optDouble("cur_size")
|
||||
@@ -199,32 +224,111 @@ object OTAUpgradeManager: IMoGoAutopilotStatusListener, IDataCenterBizListener,
|
||||
Log.i(TAG, "is_delay=$isDelay")
|
||||
Log.i(TAG, "cur_size=$curSize")
|
||||
Log.i(TAG, "total_size=$totalSize")
|
||||
//// 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败
|
||||
|
||||
if(index == 0){
|
||||
//是否需要触发提示升级只判断第一个任务
|
||||
if(productStatus == 0){
|
||||
if(!OTAUpgradeConfig.promptedUpgrade.contains(status.otaInfo.otaToken)){
|
||||
//冷启动已完成(包括成功/失败),且驾驶状态为非自驾状态,且当前无订单进行强提示,否则为弱提示
|
||||
if(OTAUpgradeConfig.coldStartCompleted && !OTAUpgradeConfig.autopilotStatus
|
||||
&& !OTAUpgradeConfig.inOrder){
|
||||
//触发强提示升级
|
||||
CallerHmiManager.showOTAUpgradeDialog(true)
|
||||
}else{
|
||||
//触发弱提示升级
|
||||
//冷启动未完成(进行中),或驾驶状态为自驾状态,或当前有订单,直接默认选择稍后升级,
|
||||
// 并toast提示“收到车辆部署任务,请在车辆空闲时发起升级”
|
||||
CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.DELAY)
|
||||
ToastUtils.showLong("收到车辆部署任务,请在车辆空闲时发起升级")
|
||||
}
|
||||
OTAUpgradeConfig.promptedUpgrade.add(status.otaInfo.otaToken)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 状态 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败
|
||||
if(productStatus == 0 || productStatus == 1 || productStatus == 2){
|
||||
upgradeComplete = false
|
||||
CallerOTAManager.invokeOtaDownloadStatus(true)
|
||||
}else{
|
||||
CallerOTAManager.invokeOtaDownloadStatus(false)
|
||||
}
|
||||
if(productStatus == 4){
|
||||
upgradeResult = false
|
||||
}
|
||||
if(productName.contains(":")){
|
||||
productName = productName.trim().substringAfterLast(":")
|
||||
}
|
||||
val otaUpgradeInfo = OtaUpgradeInfo(token, productStatus,failReason,upgradeReason,
|
||||
taskId,taskItemId,otaType,productName,needRestart,isDelay,curSize,totalSize)
|
||||
otaUpgradeList.add(otaUpgradeInfo)
|
||||
}
|
||||
if(upgradeComplete){
|
||||
OTAUpgradeConfig.otaToken = ""
|
||||
CallerHmiManager.showOTAResultDialog(upgradeResult)
|
||||
if(OTAUpgradeConfig.isQuery){
|
||||
ToastUtils.showLong("暂无待升级任务!")
|
||||
OTAUpgradeConfig.isQuery = false
|
||||
}else{
|
||||
if(!OTAUpgradeConfig.upgradeFinish.contains(status.otaInfo.otaToken)){
|
||||
CallerHmiManager.showOTADownloadStatusDialog(true,otaUpgradeList)
|
||||
CallerHmiManager.showOTAResultDialog(upgradeResult)
|
||||
OTAUpgradeConfig.upgradeFinish.add(status.otaInfo.otaToken)
|
||||
}
|
||||
}
|
||||
CallerOTAManager.invokeOtaDownloadStatus(false)
|
||||
}else{
|
||||
//通知关闭提示升级窗口(存在域控也在进行5min倒计时,与app存在时间差,域控会更早完成倒计时触发升级,
|
||||
// 此时通知app开始升级,app收到后即使未完成倒计时,也关闭提示弹窗,开始展示下载进展)
|
||||
CallerHmiManager.showOTAUpgradeDialog(false)
|
||||
CallerHmiManager.showOTADownloadStatusDialog(otaUpgradeList)
|
||||
CallerHmiManager.showOTADownloadStatusDialog(true,otaUpgradeList)
|
||||
CallerOTAManager.invokeOtaDownloadStatus(true)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private val pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+")
|
||||
|
||||
/**
|
||||
* 解析版本 格式 xxx.xxx.xxx(x的数量不固定)
|
||||
* 仅用于版本比较,不能用于展示
|
||||
* 例如:
|
||||
* "12.03.04" 解析结果:120304
|
||||
* "2.11.0" 解析结果:21100
|
||||
* "3.0.0" 解析结果:30000
|
||||
* 目前已用于DockerVersion和MaserVersion的解析
|
||||
*
|
||||
* @param isUseAll 是否使用全部截取数据 true:表示 12.34.56 截取之后 123456 false:表示12.34.56 截取之后 12
|
||||
* @param ver 版本字符串 例如:"MAP-taxi_RoboTaxi_df_2.8.0.3_20220928_test" 解析结果为:280
|
||||
* @return -1表示解析失败
|
||||
*/
|
||||
private fun parseVersion(isUseAll: Boolean, ver: String): Int {
|
||||
var version = -1
|
||||
if (!TextUtils.isEmpty(ver)) {
|
||||
try {
|
||||
val matcher: Matcher = pattern.matcher(ver)
|
||||
if (matcher.find()) {
|
||||
var group = matcher.group()
|
||||
if (!TextUtils.isEmpty(group)) {
|
||||
val format = "%02d"
|
||||
if (isUseAll) {
|
||||
val temp = group.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }
|
||||
.toTypedArray()
|
||||
group = String.format(Locale.getDefault(), format, temp[0].toInt())
|
||||
group += String.format(Locale.getDefault(), format, temp[1].toInt())
|
||||
group += String.format(Locale.getDefault(), format, temp[2].toInt())
|
||||
} else {
|
||||
group = group.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }
|
||||
.toTypedArray()[0]
|
||||
}
|
||||
version = group.toInt()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "版本解析失败=$ver", e)
|
||||
}
|
||||
}
|
||||
return version
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -139,6 +139,8 @@ class CarInfoTabView @JvmOverloads constructor(
|
||||
)
|
||||
if(OTAUpgradeConfig.supportOTA){
|
||||
//查询OTA状态
|
||||
OTAUpgradeConfig.isQuery = true
|
||||
OTAUpgradeConfig.promptedUpgrade.remove(OTAUpgradeConfig.otaToken)
|
||||
CallerAutoPilotControlManager.sendSsmFuncOtaStatusQuery(OTAUpgradeConfig.otaToken)
|
||||
}else{
|
||||
ToastUtils.showLong("当前域控版本不支持OTA升级")
|
||||
|
||||
@@ -691,19 +691,26 @@ class MoGoHmiProvider : IMoGoHmiProvider {
|
||||
/**
|
||||
* 展示OTA升级下载状态弹窗
|
||||
*/
|
||||
override fun showOTADownloadStatusDialog(list: List<OtaUpgradeInfo>) {
|
||||
override fun showOTADownloadStatusDialog(isShow: Boolean,list: List<OtaUpgradeInfo>) {
|
||||
ThreadUtils.runOnUiThread{
|
||||
if(otaDownloadStatusDialog?.isShowing == true){
|
||||
otaDownloadStatusDialog?.notifyDownloadStatus(list)
|
||||
return@runOnUiThread
|
||||
}
|
||||
context?.let {
|
||||
if(otaDownloadStatusDialog == null){
|
||||
otaDownloadStatusDialog = OTADownloadStatusDialog(it)
|
||||
if(isShow){
|
||||
if(otaDownloadStatusDialog?.isShowing == true){
|
||||
otaDownloadStatusDialog?.notifyDownloadStatus(list)
|
||||
return@runOnUiThread
|
||||
}
|
||||
context?.let {
|
||||
if(otaDownloadStatusDialog == null){
|
||||
otaDownloadStatusDialog = OTADownloadStatusDialog(it)
|
||||
}
|
||||
otaDownloadStatusDialog?.show()
|
||||
otaDownloadStatusDialog?.notifyDownloadStatus(list)
|
||||
}
|
||||
}else{
|
||||
if(otaDownloadStatusDialog?.isShowing == true){
|
||||
otaDownloadStatusDialog?.dismiss()
|
||||
}
|
||||
otaDownloadStatusDialog?.show()
|
||||
otaDownloadStatusDialog?.notifyDownloadStatus(list)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,11 +2,14 @@ package com.mogo.eagle.core.function.hmi.ui.tools
|
||||
|
||||
import android.content.Context
|
||||
import android.os.CountDownTimer
|
||||
import android.util.Log
|
||||
import androidx.annotation.UiThread
|
||||
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.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.zhjt.mogo_core_function_devatools.ota.OTAUpgradeConfig
|
||||
import kotlinx.android.synthetic.main.dialog_ota_upgrade.tv_upgrade_later
|
||||
import kotlinx.android.synthetic.main.dialog_ota_upgrade.tv_upgrade_now
|
||||
@@ -50,9 +53,11 @@ class OTAUpgradeDialog(context: Context) :
|
||||
override fun onFinish() {
|
||||
//立即升级
|
||||
CallerAutoPilotControlManager.sendSsmFuncOtaDownloadResponse(OTAUpgradeConfig.otaToken,SsmInfo.IfUpgrade.IMMEDIATELY)
|
||||
ThreadUtils.runOnUiThread {
|
||||
UiThreadHandler.postDelayed({
|
||||
CallerAutoPilotControlManager.sendSsmFuncOtaStatusQuery(OTAUpgradeConfig.otaToken)
|
||||
dismiss()
|
||||
}
|
||||
},2000
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,9 @@ class OTADownloadStatusAdapter(private val context: Context): RecyclerView.Adapt
|
||||
val otaUpgradeInfo = it[position]
|
||||
holder.tvProductName.text = otaUpgradeInfo.product_name
|
||||
holder.tvDownloadProgress.text = "${(otaUpgradeInfo.cur_size*100/otaUpgradeInfo.total_size).toInt()}%"
|
||||
if(otaUpgradeInfo.cur_size == otaUpgradeInfo.total_size){
|
||||
holder.tvDownloadProgress.text = "部署中"
|
||||
}
|
||||
holder.pbDownloadProgress.progress = (otaUpgradeInfo.cur_size*100/otaUpgradeInfo.total_size).toInt()
|
||||
// 0:默认(未开始), 1:下载中, 2:下载完成, 3:升级完成, 4:升级失败
|
||||
// holder.tvDownloadStatus.text = when (otaUpgradeInfo.status) {
|
||||
|
||||
@@ -279,8 +279,6 @@ class ColdStartView @JvmOverloads constructor(
|
||||
ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis())
|
||||
}
|
||||
}
|
||||
//判断当前SSM版本是否支持OTA升级
|
||||
OTAUpgradeConfig.supportOTA = parseVersion(true, statusInf.masterVersion) >= 40800
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvProductName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="@dimen/dp_600"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@id/pbDownloadProgress"
|
||||
app:layout_constraintLeft_toLeftOf="@id/pbDownloadProgress"
|
||||
|
||||
@@ -333,7 +333,7 @@ interface IMoGoHmiProvider :IProvider{
|
||||
/**
|
||||
* 展示OTA升级下载状态弹窗
|
||||
*/
|
||||
fun showOTADownloadStatusDialog(list: List<OtaUpgradeInfo>)
|
||||
fun showOTADownloadStatusDialog(isShow: Boolean,list: List<OtaUpgradeInfo>)
|
||||
|
||||
/**
|
||||
* 展示OTA升级结果弹窗
|
||||
|
||||
@@ -483,8 +483,8 @@ object CallerHmiManager {
|
||||
/**
|
||||
* 展示OTA升级下载状态弹窗
|
||||
*/
|
||||
fun showOTADownloadStatusDialog(list: List<OtaUpgradeInfo>){
|
||||
hmiProviderApi?.showOTADownloadStatusDialog(list)
|
||||
fun showOTADownloadStatusDialog(isShow: Boolean,list: List<OtaUpgradeInfo>){
|
||||
hmiProviderApi?.showOTADownloadStatusDialog(isShow,list)
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user