[FSM] feat: FSM状态 和 人工干预状态 增加美化模式判断;
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user