From b64fc97129628f6fc008ed3bbeaae04051c0a1a8 Mon Sep 17 00:00:00 2001 From: aibingbing Date: Fri, 13 Sep 2024 19:13:31 +0800 Subject: [PATCH] =?UTF-8?q?[6.7.0][FSM]=20refactor:=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../status/entity/Status.kt | 5 +- .../bone/status/StartAutoPilotStatusView.kt | 53 +++++++++++-------- .../layout/view_start_autopilot_status.xml | 2 +- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt index 122054d504..dd0644996c 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/entity/Status.kt @@ -167,7 +167,10 @@ class FSMStatus(var state: FSMStateCode, var desc: String = ""): Status(), IAuto override fun isException(): Boolean = state == FSMStateCode.ExistError - fun hasFSMModule(): Boolean = (state == FSMStateCode.ExistNormal) || (state == FSMStateCode.ExistError) + /** + * 是否有 FSM 模块,Unknown展示 FSM 样式,算存在 + */ + fun hasFSMModule(): Boolean = (state == FSMStateCode.UnKnown) || (state == FSMStateCode.ExistNormal) || (state == FSMStateCode.ExistError) } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt index 41e4ec6e90..7281a6c3bc 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt @@ -62,7 +62,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } } - private val hasFSM by lazy { AtomicBoolean(false) } + private val hasFSM by lazy { AtomicBoolean(true) } init { @@ -71,8 +71,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } private fun initView() { - // 默认展示 有 FSM 的情况,未知状态 - changeStatusContainer(true) + // 默认展示 FSM 情况未知的状态 handleFSM(FSMStatus(FSMStateCode.UnKnown, "未知")) } @@ -91,13 +90,14 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } private fun handleFSM(status: FSMStatus) { - Logger.d(TAG, "--- handleFSM ---:${status.isException()}") + Logger.d(TAG, "--- handleFSM ---FSMStatus: code=${status.state} isError=${status.isException()} ") val lastHasFSM = hasFSM.get() val newHasFSM = status.hasFSMModule() - hasFSM.set(newHasFSM) + Logger.d(TAG, "--- handleFSM ---lastHasFSM=${lastHasFSM} newHasFSM=${newHasFSM}") if (lastHasFSM != newHasFSM) { - changeStatusContainer(status.hasFSMModule()) + changeStatusContainer(newHasFSM) } + hasFSM.set(newHasFSM) when (status.state) { FSMStateCode.UnKnown -> { @@ -149,7 +149,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor( private fun handleWithoutFSM(status: Status) { val isError = status.isException() && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING - Logger.d(TAG, "--- handleWithoutFSM ---: $isError") + Logger.d(TAG, "--- handleWithoutFSM ---${status::class.simpleName}: $isError") when (status) { is GearStatus -> { val position = try { @@ -163,28 +163,28 @@ class StartAutoPilotStatusView @JvmOverloads constructor( when (position) { Chassis.GearPosition.GEAR_N -> { - tv_gear.isEnabled = isError - tv_gear.text = "N" + tv_gear?.isEnabled = isError + tv_gear?.text = "N" } Chassis.GearPosition.GEAR_R -> { - tv_gear.isEnabled = isError - tv_gear.text = "R" + tv_gear?.isEnabled = isError + tv_gear?.text = "R" } Chassis.GearPosition.GEAR_P -> { - tv_gear.isEnabled = isError - tv_gear.text = "P" + tv_gear?.isEnabled = isError + tv_gear?.text = "P" } Chassis.GearPosition.GEAR_D -> { - tv_gear.isEnabled = isError - tv_gear.text = "D" + tv_gear?.isEnabled = isError + tv_gear?.text = "D" } Chassis.GearPosition.GEAR_NONE -> { - tv_gear.isEnabled = false - tv_gear.text = "" + tv_gear?.isEnabled = false + tv_gear?.text = "" } else -> {} @@ -207,18 +207,22 @@ class StartAutoPilotStatusView @JvmOverloads constructor( iv_steer?.isSelected = isError } - is SpeedStatus -> { - // TODO - } - else -> { Logger.d(TAG, "other state: $status") } } - notifyStatus(isError) + val isAnyOneError = tv_gear?.isEnabled == true || iv_accelerator?.isSelected == true || iv_brake?.isSelected == true || iv_double_flash?.isSelected == true || iv_steer?.isSelected == true + withoutFSMStatusLayout?.background = + ContextCompat.getDrawable( + context, + if (isAnyOneError) R.drawable.icon_no_fsm_status_bg_error + else R.drawable.icon_no_fsm_status_bg_normal + ) + notifyStatus(isAnyOneError) } private fun notifyStatus(isError: Boolean) { + Logger.d(TAG, "--- notifyStatus ---: $isError") statusChangedListeners.values.forEach { itx -> if (isError) { itx.onStatusError() @@ -245,11 +249,16 @@ class StartAutoPilotStatusView @JvmOverloads constructor( */ override fun onStatusChanged(changed: List, all: List) { changed.filter { it is IAutopilotPreLaunchStatus }.forEach { status -> + Logger.d(TAG, "onStatusChanged --> ${status::class.simpleName}") when (status) { is FSMStatus -> { handleFSM(status) } + is SpeedStatus -> { + // TODO + } + else -> { handleWithoutFSM(status) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml index 99c3791b45..a41423d993 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml @@ -11,6 +11,7 @@ android:layout_height="match_parent" android:scaleType="fitXY" android:src="@drawable/icon_fsm_status_bg_normal" + android:visibility="visible" tools:visibility="visible"/>