[6.4.0][启自驾指引] 优化轨迹下载状态展示逻辑

This commit is contained in:
renwj
2024-04-28 18:01:08 +08:00
parent e11d4a4003
commit cf0076f89b
3 changed files with 74 additions and 34 deletions

View File

@@ -245,12 +245,13 @@ internal class MoFangCommandExecutor {
linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message, $json")) linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message, $json"))
Log.d(TAG, "--- 启动自驾 ----入参:$json") Log.d(TAG, "--- 启动自驾 ----入参:$json")
//清扫车有FSM模块魔方启动自驾时需要将Source修改为魔方以便telamatics做区分并在转发时增加flag标记 //清扫车有FSM模块魔方启动自驾时需要将Source修改为魔方以便telamatics做区分并在转发时增加flag标记
if (AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) { if (CallerAutoPilotControlManager.isCanStartAutopilot(true)) {
CallerAutoPilotControlManager.startAutoPilotByMoFang(parameters) if (AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) {
} else{ CallerAutoPilotControlManager.startAutoPilotByMoFang(parameters)
CallerAutoPilotControlManager.startAutoPilot(parameters) } else{
CallerAutoPilotControlManager.startAutoPilot(parameters)
}
} }
} catch (t: Throwable) { } catch (t: Throwable) {
t.printStackTrace() t.printStackTrace()
Log.e(TAG, "error: ${t.message}, msg-> $msg") Log.e(TAG, "error: ${t.message}, msg-> $msg")

View File

@@ -3,8 +3,10 @@ package com.zhjt.mogo_core_function_devatools.status.flow.autopilot
import android.content.Context import android.content.Context
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
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.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.data.bean.MogoReport import com.zhjt.mogo.adas.data.bean.MogoReport
import com.zhjt.mogo_core_function_devatools.status.entity.RouteDownloadStatus import com.zhjt.mogo_core_function_devatools.status.entity.RouteDownloadStatus
import com.zhjt.mogo_core_function_devatools.status.entity.RouteState.RouteComplete import com.zhjt.mogo_core_function_devatools.status.entity.RouteState.RouteComplete
@@ -24,11 +26,17 @@ internal class RouteDownloadImpl(ctx: Context) : IFlow<RouteDownloadStatus>(ctx)
private const val TAG = "RouteDownloadImpl" private const val TAG = "RouteDownloadImpl"
} }
@Volatile
private var toDownloadLineId: Long? = null
private val extra by lazy { ConcurrentSkipListMap<Int, Any>() } private val extra by lazy { ConcurrentSkipListMap<Int, Any>() }
@Volatile
private var isTriggerDownloadAgain: Boolean = false
@Volatile
private var toDownloadLineInfo: AutoPilotLine? = null
@Volatile
private var isTriggerDownloadByMe = false
override fun onCreate() { override fun onCreate() {
CallerAutoPilotStatusListenerManager.addListener(TAG, this) CallerAutoPilotStatusListenerManager.addListener(TAG, this)
} }
@@ -42,27 +50,52 @@ internal class RouteDownloadImpl(ctx: Context) : IFlow<RouteDownloadStatus>(ctx)
super.onAutopilotStatusResponse(state) super.onAutopilotStatusResponse(state)
Logger.d(TAG, "--- onAutopilotStatusResponse -- 1 --: $state") Logger.d(TAG, "--- onAutopilotStatusResponse -- 1 --: $state")
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
val lineId = toDownloadLineId val info = toDownloadLineInfo
Logger.d(TAG, "--- onAutopilotStatusResponse -- 2 --: $lineId") Logger.d(TAG, "--- onAutopilotStatusResponse -- 2 --: $info")
if (lineId != null && lineId >= 0) { if (info != null) {
extra.clear() extra.clear()
send(RouteDownloadStatus(lineId, RouteComplete)) send(RouteDownloadStatus(info.lineId, RouteComplete))
toDownloadLineId = null toDownloadLineInfo = null
} }
} }
} }
override fun onAutopilotIpcConnectStatusChanged(
status: AdasConstants.IpcConnectionStatus,
reason: String?
) {
super.onAutopilotIpcConnectStatusChanged(status, reason)
val info = toDownloadLineInfo
val isConnected = CallerAutoPilotStatusListenerManager.isConnect()
if (!isConnected && info != null && !isTriggerDownloadAgain) {
Logger.d(TAG, "工控机断开了,但是轨迹未下载完成, 等待重新连接后,再次发送轨迹下载请求...")
isTriggerDownloadAgain = true
}
if (isConnected && isTriggerDownloadAgain && info != null) {
Logger.d(TAG, "工控机连上了,重新发送下载请求, 用以更新下载状态...")
isTriggerDownloadAgain = false
isTriggerDownloadByMe = true
CallerAutoPilotControlManager.sendTrajectoryDownloadReq(info)
}
}
override fun onAutopilotTrajectoryDownloadReq(autoPilotLine: AutoPilotLine, downloadType: Int) { override fun onAutopilotTrajectoryDownloadReq(autoPilotLine: AutoPilotLine, downloadType: Int) {
super.onAutopilotTrajectoryDownloadReq(autoPilotLine, downloadType) super.onAutopilotTrajectoryDownloadReq(autoPilotLine, downloadType)
Logger.d(TAG, "--- onAutopilotTrajectoryDownloadReq --: 1:$autoPilotLine, 2:$downloadType") Logger.d(TAG, "--- onAutopilotTrajectoryDownloadReq --: 1:$autoPilotLine, 2:$downloadType")
val lineId = autoPilotLine.lineId val lineId = autoPilotLine.lineId
if (downloadType == 0 && lineId >= 0) { if (downloadType == 0 && lineId >= 0) {
val info = autoPilotLine.deepCopy()
toDownloadLineInfo = info
extra.clear() extra.clear()
extra[0] = lineId to System.currentTimeMillis() extra[0] = info.lineId to info
toDownloadLineId = lineId if (!isTriggerDownloadByMe) {
send(RouteDownloadStatus(lineId = lineId, state = RouteNone).also { send(RouteDownloadStatus(lineId = lineId, state = RouteNone).also {
it.rawData = extra it.rawData = extra
}) })
} else {
isTriggerDownloadByMe = false
}
} }
} }
@@ -97,37 +130,40 @@ internal class RouteDownloadImpl(ctx: Context) : IFlow<RouteDownloadStatus>(ctx)
} catch (ignore: Exception) { } catch (ignore: Exception) {
} }
} }
extra[1] = lineId to "${System.currentTimeMillis()} => ($code,$toDownloadLineId)" val info = toDownloadLineInfo
Logger.d( extra[1] = lineId to info
TAG, Logger.d(TAG, "--- onAutopilotGuardian -- 3 --:lineId => ${info?.lineId}, parse_line_id: $lineId")
"--- onAutopilotGuardian -- 3 --:lineId => $toDownloadLineId, parse_line_id: $lineId" if (info?.lineId != lineId) {
)
if (toDownloadLineId != lineId) {
return return
} }
Logger.d( Logger.d(TAG, "--- onAutopilotGuardian -- 4 --:line_id => $lineId, code: ${guardianInfo.code}")
TAG,
"--- onAutopilotGuardian -- 4 --:line_id => $lineId, code: ${guardianInfo.code}"
)
when (code) { when (code) {
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_START -> { // 1. 轨迹管理_轨迹开始下载本地已有对应轨迹也触发 MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_START -> { // 1. 轨迹管理_轨迹开始下载本地已有对应轨迹也触发
extra[2] = lineId to System.currentTimeMillis() extra[2] = lineId to info
send(RouteDownloadStatus(lineId, RouteStart).also { it.rawData = extra }) send(RouteDownloadStatus(lineId, RouteStart).also { it.rawData = extra })
} }
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_WARNING,
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_SUCCESS -> { // 2. 轨迹管理_轨迹下载成功本地已有对应轨迹也触发 MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_SUCCESS -> { // 2. 轨迹管理_轨迹下载成功本地已有对应轨迹也触发
extra[3] = lineId to System.currentTimeMillis() if (code == MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_WARNING) {
extra[3] = lineId to info
} else {
extra[4] = lineId to info
}
send(RouteDownloadStatus(lineId, RouteComplete).also { it.rawData = extra }) send(RouteDownloadStatus(lineId, RouteComplete).also { it.rawData = extra })
toDownloadLineId = null toDownloadLineInfo = null
} }
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_FAILURE, MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_FAILURE,
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_WARNING,
MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_TIMEOUT -> { MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_TIMEOUT -> {
// 3. 轨迹管理_轨迹下载失败本地无对应轨迹 // 3. 轨迹管理_轨迹下载失败本地无对应轨迹
extra[4] = lineId to System.currentTimeMillis() if (code == MogoReport.Code.Info.ISYS.INIT_TRAJECTORY_FAILURE) {
extra[5] = lineId to info
} else {
extra[6] = lineId to info
}
send(RouteDownloadStatus(lineId, RouteFailed).also { it.rawData = extra }) send(RouteDownloadStatus(lineId, RouteFailed).also { it.rawData = extra })
toDownloadLineId = null toDownloadLineInfo = null
} }
} }
} }

View File

@@ -192,6 +192,9 @@ class AutopilotControlParameters {
"timestamp_dpqp=$timestamp_dpqp)" "timestamp_dpqp=$timestamp_dpqp)"
} }
fun deepCopy(): AutoPilotLine {
return AutoPilotLine(this.lineId, this.lineName, this.trajUrl, this.trajMd5, this.stopUrl, this.stopMd5, this.timestamp, this.vehicleModel, this.trajUrl_dpqp, this.trajMd5_dpqp, this.stopUrl_dpqp, this.stopMd5_dpqp, this.timestamp_dpqp)
}
} }
class AutoPilotLonLat { class AutoPilotLonLat {