[FSM] feat: FSM状态 和 人工干预状态 增加美化模式判断;

This commit is contained in:
aibingbing
2024-12-04 17:23:24 +08:00
parent 5dfff8a249
commit d7eecbf361

View File

@@ -7,13 +7,18 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import chassis.Chassis
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_DEMO
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.zhjt.mogo_core_function_devatools.status.StatusManager
import com.zhjt.mogo_core_function_devatools.status.entity.AcceleratorStatus
import com.zhjt.mogo_core_function_devatools.status.entity.BrakeStatus
@@ -44,7 +49,8 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), StatusManager.IStatusListener {
) : ConstraintLayout(context, attrs, defStyleAttr), StatusManager.IStatusListener,
IViewControlListener {
companion object {
private const val TAG = "StartAutoPilotStatusView"
@@ -89,7 +95,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
}
private fun handleFSM(status: FSMStatus) {
Logger.d(TAG, "--- handleFSM ---FSMStatus: code=${status.state} isError=${status.isException()} ")
Logger.d(TAG, "--- handleFSM ---FSMStatus: code=${status.state} isError=${status.isException()} isDemoMode=${FunctionBuildConfig.isDemoMode}")
val lastHasFSM = hasFSM.get()
val newHasFSM = status.hasFSMModule()
Logger.d(TAG, "--- handleFSM ---lastHasFSM=${lastHasFSM} newHasFSM=${newHasFSM}")
@@ -98,6 +104,11 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
}
hasFSM.set(newHasFSM)
if (FunctionBuildConfig.isDemoMode && status.isException()) {
// 美化模式下如果是异常的,修改成正常的
status.state = FSMStateCode.ExistNormal
}
when (status.state) {
FSMStateCode.UnKnown -> {
fSMStatusLayout?.setOnClickListener(null)
@@ -145,9 +156,15 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
}
private fun handleWithoutFSM(status: Status) {
val isError =
var isError =
status.isException() && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
Logger.d(TAG, "--- handleWithoutFSM ---${status::class.simpleName}: $isError")
Logger.d(TAG, "--- handleWithoutFSM --- isError=${status::class.simpleName}: $isError isDemoMode=${FunctionBuildConfig.isDemoMode}")
if (FunctionBuildConfig.isDemoMode && isError) {
// 美化模式下如果是异常的,修改成正常的
isError = false
}
when (status) {
is GearStatus -> {
val position = try {
@@ -224,6 +241,34 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
}
}
/**
* 处理无FSM模块时 && 美化模式时
*/
private fun handleWithoutFSMDemoMode() {
Logger.d(TAG, "--- handleWithoutFSMDemoMode ---")
UiThreadHandler.post {
tv_gear?.isEnabled = false
iv_accelerator?.isSelected = false
iv_brake?.isSelected = false
iv_double_flash?.isSelected = false
iv_steer?.isSelected = false
withoutFSMStatusLayout?.background =
ContextCompat.getDrawable(
context,
R.drawable.icon_no_fsm_status_bg_normal
)
notifyStatus(false)
}
}
/**
* 处理有FSM模块时 && 美化模式时
*/
private fun handleFSMDemoMode() {
Logger.d(TAG, "--- handleFSMDemoMode ---")
handleFSM(FSMStatus(FSMStateCode.ExistNormal, listOf("正常")))
}
private fun notifyStatus(isError: Boolean) {
Logger.d(TAG, "--- notifyStatus ---: $isError")
statusChangedListeners.values.forEach { itx ->
@@ -238,11 +283,27 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
override fun onAttachedToWindow() {
super.onAttachedToWindow()
StatusManager.addListener(TAG, this)
CallerHmiViewControlListenerManager.addListener(TAG,this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
StatusManager.removeListener(TAG)
CallerHmiViewControlListenerManager.removeListener(TAG)
}
override fun updateFuncMode(tag: String, boolean: Boolean) {
if(tag == FUNC_MODE_DEMO){
Logger.i(TAG, "updateFuncMode: tag=$tag value=$boolean")
if (FunctionBuildConfig.isDemoMode) {
// 构建数据,强制刷新成正常的状态
if (hasFSM.get()) {
handleFSMDemoMode()
} else {
handleWithoutFSMDemoMode()
}
}
}
}
/**