[8.3.0] FSM Event消息 无法起自驾和异常推自驾消息添加到消息盒子中
This commit is contained in:
@@ -17,6 +17,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_COLD_START_STATE
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FM_MSG
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FSM_EVENT_MSG
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FSM_MSG
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_MAP_PARAM
|
||||
@@ -884,6 +885,16 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
updateAutoPilotStatus(2, state, mode)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
|
||||
linkCode = CHAIN_SOURCE_ADAS,
|
||||
nodeAliasCode = CHAIN_CODE_ADAS_FSM_EVENT_MSG,
|
||||
paramIndexes = [0, 1]
|
||||
)
|
||||
override fun onFSMEvent(header: MessagePad.Header, fsmEventMsg: Fsm2024.FsmEventMsg) {
|
||||
CallerFsm2024ListenerManager.invokeFSMEvent(fsmEventMsg)
|
||||
}
|
||||
|
||||
/**
|
||||
* 定位状态
|
||||
* 定位呈现状态透传 用于pad图标显示 1hz 所有车型MAP440开始支持
|
||||
|
||||
@@ -141,7 +141,7 @@ object DataManager {
|
||||
CallerMsgBoxListenerManager.invokeListener(MsgCategory.NOTICE, msg)
|
||||
}
|
||||
|
||||
MsgBoxType.FMINFO -> {
|
||||
MsgBoxType.FSM_EVENT, MsgBoxType.FMINFO -> {
|
||||
synchronized(this) {
|
||||
fmInfoList.add(msg)
|
||||
}
|
||||
|
||||
@@ -592,7 +592,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
}
|
||||
}else if(category == MsgCategory.FM_INFO){
|
||||
//FM
|
||||
BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg
|
||||
if (msgBoxList.type== MsgBoxType.FMINFO) {
|
||||
BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ class MsgBoxTabAdapter(private val activity: Activity) :
|
||||
private val nde = 22 //NDE消息车龙
|
||||
private val ota = 23 //OTA升级消息
|
||||
private val cloud = 24 //云控基础平台
|
||||
private val fsmEvent = 25
|
||||
|
||||
private val none = -1
|
||||
|
||||
@@ -165,6 +166,11 @@ class MsgBoxTabAdapter(private val activity: Activity) :
|
||||
.inflate(R.layout.item_tab_cloud,parent,false)
|
||||
return MsgBoxCloud(view)
|
||||
}
|
||||
fsmEvent -> {
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
.inflate(R.layout.item_tab_fm,parent,false)
|
||||
return FSMEventInfoHolder(view)
|
||||
}
|
||||
//V2X消息
|
||||
else -> {
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
@@ -202,170 +208,176 @@ class MsgBoxTabAdapter(private val activity: Activity) :
|
||||
//FM信息
|
||||
is FmInfoHolder -> {
|
||||
data?.let {
|
||||
val fmInfoMsg = it[position].bean as FMInfoMsg
|
||||
//时间显示
|
||||
holder.tvFmTime.text =
|
||||
val temp = it[position]
|
||||
if (temp.type == MsgBoxType.FMINFO) {
|
||||
val fmInfoMsg = temp.bean as FMInfoMsg
|
||||
//时间显示
|
||||
holder.tvFmTime.text =
|
||||
// "时间:${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}"
|
||||
"${StringUtils.getString(R.string.module_core_time)}${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}"
|
||||
//建议操作
|
||||
if(fmInfoMsg.fmInfoList.isNullOrEmpty()){
|
||||
//建议操作暂无
|
||||
"${StringUtils.getString(R.string.module_core_time)}${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}"
|
||||
//建议操作
|
||||
if (fmInfoMsg.fmInfoList.isNullOrEmpty()) {
|
||||
//建议操作暂无
|
||||
// holder.tvFmAction.text = "建议操作:暂无"
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
|
||||
//Title
|
||||
// holder.tvFmTitle.text = "暂无建议操作"
|
||||
holder.tvFmTitle.text = StringUtils.getString(R.string.module_core_not_available_suggested_procedure)
|
||||
}else{
|
||||
val receiveFaultLevel = ArrayList<Int>()
|
||||
fmInfoMsg.fmInfoList!!.forEach { info ->
|
||||
if(info.faultActionCount != 0){
|
||||
info.faultActionList.forEach { action ->
|
||||
//如果不包含此故障Level,则进行添加
|
||||
if(!receiveFaultLevel.contains(MsgFmData.FaultAction.getFaultLevel(action))){
|
||||
receiveFaultLevel.add(MsgFmData.FaultAction.getFaultLevel(action))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//对faultLevel集合进行排序,按照顺序输出建议操作
|
||||
if(receiveFaultLevel.size > 0){
|
||||
val faultActionStr: StringBuilder = StringBuilder()
|
||||
// faultActionStr.append("建议操作:")
|
||||
faultActionStr.append(StringUtils.getString(R.string.module_core_suggested_procedure))
|
||||
receiveFaultLevel.sort()
|
||||
// receiveFaultLevel.reverse()
|
||||
//Title
|
||||
holder.tvFmTitle.text = MsgFmData.FaultAction.getFaultTitle(receiveFaultLevel[0])
|
||||
//不同级别的Icon显示
|
||||
when(receiveFaultLevel[0]){
|
||||
0->{
|
||||
//重度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_severe_warning))
|
||||
}
|
||||
1,2,3->{
|
||||
//中度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_moderate_warning))
|
||||
}
|
||||
4,5->{
|
||||
//轻度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
|
||||
}
|
||||
}
|
||||
receiveFaultLevel.forEach {level->
|
||||
if(MsgFmData.FaultAction.getFaultAction(level).isNotBlank()){
|
||||
faultActionStr.append(MsgFmData.FaultAction.getFaultAction(level))
|
||||
}
|
||||
if(MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()){
|
||||
faultActionStr.append("(")
|
||||
faultActionStr.append(MsgFmData.FaultAction.getFaultActionCode(level))
|
||||
faultActionStr.append(")")
|
||||
}
|
||||
if(MsgFmData.FaultAction.getFaultAction(level).isNotBlank() || MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()){
|
||||
faultActionStr.append(";")
|
||||
}
|
||||
}
|
||||
if(faultActionStr.length > 5){
|
||||
if(faultActionStr.endsWith(";")){
|
||||
faultActionStr.deleteCharAt(faultActionStr.lastIndex)
|
||||
}
|
||||
holder.tvFmAction.text = faultActionStr.toString()
|
||||
}else{
|
||||
// holder.tvFmAction.text = "建议操作:暂无"
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
|
||||
}
|
||||
}else{
|
||||
// holder.tvFmAction.text = "建议操作:暂无"
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
|
||||
//轻度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
|
||||
}
|
||||
}
|
||||
//故障策略
|
||||
// holder.tvFmFault.text = "故障策略:${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
|
||||
holder.tvFmFault.text = "${StringUtils.getString(R.string.module_core_fault_handling_strategy)}${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
|
||||
//故障原因
|
||||
if(fmInfoMsg.fmInfoList.isNullOrEmpty()){
|
||||
// holder.tvFmReason.text = "故障原因:暂无"
|
||||
holder.tvFmReason.text = StringUtils.getString(R.string.module_core_failure_cause_not_available)
|
||||
}else{
|
||||
val fmFaultReason = StringBuilder()
|
||||
// fmFaultReason.append("故障原因:")
|
||||
fmFaultReason.append(StringUtils.getString(R.string.module_core_failure_cause))
|
||||
for((index,info) in fmInfoMsg.fmInfoList!!.withIndex()){
|
||||
fmFaultReason.append(info.faultName)
|
||||
if(info.faultId.isNotBlank()){
|
||||
fmFaultReason.append("(")
|
||||
fmFaultReason.append(info.faultId)
|
||||
fmFaultReason.append(")")
|
||||
}
|
||||
if(index!=(fmInfoMsg.fmInfoList!!.size-1)){
|
||||
fmFaultReason.append("/")
|
||||
}
|
||||
}
|
||||
holder.tvFmReason.text = fmFaultReason.toString()
|
||||
}
|
||||
//故障后果
|
||||
if(fmInfoMsg.fmInfoList.isNullOrEmpty()){
|
||||
// holder.tvFmResult.text = "故障后果:暂无"
|
||||
holder.tvFmResult.text = StringUtils.getString(R.string.module_core_consequences_failure_not_available)
|
||||
}else{
|
||||
val fmFaultResult = StringBuilder()
|
||||
// fmFaultResult.append("故障后果:")
|
||||
fmFaultResult.append(StringUtils.getString(R.string.module_core_consequences_failure))
|
||||
fmInfoMsg.fmInfoList!!.forEach { info->
|
||||
if(info.faultResultCount != 0){
|
||||
info.faultResultList.forEach { result->
|
||||
if(MsgFmData.FaultResult.getResultDefine(result).isNotBlank()){
|
||||
fmFaultResult.append(MsgFmData.FaultResult.getResultDefine(result))
|
||||
}
|
||||
if(result.isNotBlank()){
|
||||
fmFaultResult.append("(")
|
||||
fmFaultResult.append(result)
|
||||
fmFaultResult.append(")")
|
||||
}
|
||||
if(MsgFmData.FaultResult.getResultDefine(result).isNotBlank() || result.isNotBlank()){
|
||||
fmFaultResult.append("/")
|
||||
//Title
|
||||
// holder.tvFmTitle.text = "暂无建议操作"
|
||||
holder.tvFmTitle.text = StringUtils.getString(R.string.module_core_not_available_suggested_procedure)
|
||||
} else {
|
||||
val receiveFaultLevel = ArrayList<Int>()
|
||||
fmInfoMsg.fmInfoList!!.forEach { info ->
|
||||
if (info.faultActionCount != 0) {
|
||||
info.faultActionList.forEach { action ->
|
||||
//如果不包含此故障Level,则进行添加
|
||||
if (!receiveFaultLevel.contains(MsgFmData.FaultAction.getFaultLevel(action))) {
|
||||
receiveFaultLevel.add(MsgFmData.FaultAction.getFaultLevel(action))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//对faultLevel集合进行排序,按照顺序输出建议操作
|
||||
if (receiveFaultLevel.size > 0) {
|
||||
val faultActionStr: StringBuilder = StringBuilder()
|
||||
// faultActionStr.append("建议操作:")
|
||||
faultActionStr.append(StringUtils.getString(R.string.module_core_suggested_procedure))
|
||||
receiveFaultLevel.sort()
|
||||
// receiveFaultLevel.reverse()
|
||||
//Title
|
||||
holder.tvFmTitle.text = MsgFmData.FaultAction.getFaultTitle(receiveFaultLevel[0])
|
||||
//不同级别的Icon显示
|
||||
when (receiveFaultLevel[0]) {
|
||||
0 -> {
|
||||
//重度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_severe_warning))
|
||||
}
|
||||
|
||||
1, 2, 3 -> {
|
||||
//中度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_moderate_warning))
|
||||
}
|
||||
|
||||
4, 5 -> {
|
||||
//轻度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
|
||||
}
|
||||
}
|
||||
receiveFaultLevel.forEach { level ->
|
||||
if (MsgFmData.FaultAction.getFaultAction(level).isNotBlank()) {
|
||||
faultActionStr.append(MsgFmData.FaultAction.getFaultAction(level))
|
||||
}
|
||||
if (MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()) {
|
||||
faultActionStr.append("(")
|
||||
faultActionStr.append(MsgFmData.FaultAction.getFaultActionCode(level))
|
||||
faultActionStr.append(")")
|
||||
}
|
||||
if (MsgFmData.FaultAction.getFaultAction(level).isNotBlank() || MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()) {
|
||||
faultActionStr.append(";")
|
||||
}
|
||||
}
|
||||
if (faultActionStr.length > 5) {
|
||||
if (faultActionStr.endsWith(";")) {
|
||||
faultActionStr.deleteCharAt(faultActionStr.lastIndex)
|
||||
}
|
||||
holder.tvFmAction.text = faultActionStr.toString()
|
||||
} else {
|
||||
// holder.tvFmAction.text = "建议操作:暂无"
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
|
||||
}
|
||||
} else {
|
||||
// holder.tvFmAction.text = "建议操作:暂无"
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
|
||||
//轻度预警样式
|
||||
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
|
||||
}
|
||||
}
|
||||
if(fmFaultResult.endsWith("/")){
|
||||
holder.tvFmResult.text = fmFaultResult.deleteCharAt(fmFaultResult.lastIndex).toString()
|
||||
}else{
|
||||
// holder.tvFmResult.text = "故障后果:暂无"
|
||||
//故障策略
|
||||
// holder.tvFmFault.text = "故障策略:${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
|
||||
holder.tvFmFault.text =
|
||||
"${StringUtils.getString(R.string.module_core_fault_handling_strategy)}${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
|
||||
//故障原因
|
||||
if (fmInfoMsg.fmInfoList.isNullOrEmpty()) {
|
||||
// holder.tvFmReason.text = "故障原因:暂无"
|
||||
holder.tvFmReason.text = StringUtils.getString(R.string.module_core_failure_cause_not_available)
|
||||
} else {
|
||||
val fmFaultReason = StringBuilder()
|
||||
// fmFaultReason.append("故障原因:")
|
||||
fmFaultReason.append(StringUtils.getString(R.string.module_core_failure_cause))
|
||||
for ((index, info) in fmInfoMsg.fmInfoList!!.withIndex()) {
|
||||
fmFaultReason.append(info.faultName)
|
||||
if (info.faultId.isNotBlank()) {
|
||||
fmFaultReason.append("(")
|
||||
fmFaultReason.append(info.faultId)
|
||||
fmFaultReason.append(")")
|
||||
}
|
||||
if (index != (fmInfoMsg.fmInfoList!!.size - 1)) {
|
||||
fmFaultReason.append("/")
|
||||
}
|
||||
}
|
||||
holder.tvFmReason.text = fmFaultReason.toString()
|
||||
}
|
||||
//故障后果
|
||||
if (fmInfoMsg.fmInfoList.isNullOrEmpty()) {
|
||||
// holder.tvFmResult.text = "故障后果:暂无"
|
||||
holder.tvFmResult.text = StringUtils.getString(R.string.module_core_consequences_failure_not_available)
|
||||
} else {
|
||||
val fmFaultResult = StringBuilder()
|
||||
// fmFaultResult.append("故障后果:")
|
||||
fmFaultResult.append(StringUtils.getString(R.string.module_core_consequences_failure))
|
||||
fmInfoMsg.fmInfoList!!.forEach { info ->
|
||||
if (info.faultResultCount != 0) {
|
||||
info.faultResultList.forEach { result ->
|
||||
if (MsgFmData.FaultResult.getResultDefine(result).isNotBlank()) {
|
||||
fmFaultResult.append(MsgFmData.FaultResult.getResultDefine(result))
|
||||
}
|
||||
if (result.isNotBlank()) {
|
||||
fmFaultResult.append("(")
|
||||
fmFaultResult.append(result)
|
||||
fmFaultResult.append(")")
|
||||
}
|
||||
if (MsgFmData.FaultResult.getResultDefine(result).isNotBlank() || result.isNotBlank()) {
|
||||
fmFaultResult.append("/")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fmFaultResult.endsWith("/")) {
|
||||
holder.tvFmResult.text = fmFaultResult.deleteCharAt(fmFaultResult.lastIndex).toString()
|
||||
} else {
|
||||
// holder.tvFmResult.text = "故障后果:暂无"
|
||||
holder.tvFmResult.text = StringUtils.getString(R.string.module_core_consequences_failure_not_available)
|
||||
}
|
||||
}
|
||||
}
|
||||
//对布局进行展开折叠操作
|
||||
if(fmInfoMsg.isShow){
|
||||
//对布局进行展开折叠操作
|
||||
if (fmInfoMsg.isShow) {
|
||||
// holder.tvFmShowStatus.text = "收起"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
|
||||
holder.tvFmFault.visibility = View.VISIBLE
|
||||
holder.tvFmReason.visibility = View.VISIBLE
|
||||
holder.tvFmResult.visibility = View.VISIBLE
|
||||
}else{
|
||||
// holder.tvFmShowStatus.text = "展开"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
|
||||
holder.tvFmFault.visibility = View.GONE
|
||||
holder.tvFmReason.visibility = View.GONE
|
||||
holder.tvFmResult.visibility = View.GONE
|
||||
}
|
||||
holder.tvFmShowStatus.setOnClickListener{
|
||||
if(!fmInfoMsg.isShow){
|
||||
fmInfoMsg.isShow = true
|
||||
// holder.tvFmShowStatus.text = "收起"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
|
||||
holder.tvFmFault.visibility = View.VISIBLE
|
||||
holder.tvFmReason.visibility = View.VISIBLE
|
||||
holder.tvFmResult.visibility = View.VISIBLE
|
||||
}else{
|
||||
fmInfoMsg.isShow = false
|
||||
// holder.tvFmShowStatus.text = "展开"
|
||||
} else {
|
||||
// holder.tvFmShowStatus.text = "展开"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
|
||||
holder.tvFmFault.visibility = View.GONE
|
||||
holder.tvFmReason.visibility = View.GONE
|
||||
holder.tvFmResult.visibility = View.GONE
|
||||
}
|
||||
holder.tvFmShowStatus.setOnClickListener {
|
||||
if (!fmInfoMsg.isShow) {
|
||||
fmInfoMsg.isShow = true
|
||||
// holder.tvFmShowStatus.text = "收起"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
|
||||
holder.tvFmFault.visibility = View.VISIBLE
|
||||
holder.tvFmReason.visibility = View.VISIBLE
|
||||
holder.tvFmResult.visibility = View.VISIBLE
|
||||
} else {
|
||||
fmInfoMsg.isShow = false
|
||||
// holder.tvFmShowStatus.text = "展开"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
|
||||
holder.tvFmFault.visibility = View.GONE
|
||||
holder.tvFmReason.visibility = View.GONE
|
||||
holder.tvFmResult.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -627,6 +639,47 @@ class MsgBoxTabAdapter(private val activity: Activity) :
|
||||
holder.tvCloudTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
|
||||
}
|
||||
}
|
||||
is FSMEventInfoHolder -> {
|
||||
data?.let {
|
||||
val temp = it[position]
|
||||
if (temp.type == MsgBoxType.FSM_EVENT) {
|
||||
holder.ivFmImage.setImageResource(R.drawable.icon_warning_fsm_event)
|
||||
holder.tvFmReason.visibility = View.GONE
|
||||
holder.tvFmResult.visibility = View.GONE
|
||||
holder.tvFmFault.visibility = View.GONE
|
||||
val fsmEventMsg = temp.bean as FSMEventMsg
|
||||
//时间显示
|
||||
holder.tvFmTime.text =
|
||||
"${StringUtils.getString(R.string.module_core_time)}${fsmEventMsg.timestamp.let { it1 -> TimeUtils.millis2String(it1) }}"
|
||||
|
||||
holder.tvFmTitle.text = fsmEventMsg.title
|
||||
holder.tvFmShowStatus.visibility = if (fsmEventMsg.content.contains(';') || fsmEventMsg.content.contains(';')) View.VISIBLE else View.GONE
|
||||
//对布局进行展开折叠操作
|
||||
if (fsmEventMsg.isShow) {
|
||||
// holder.tvFmShowStatus.text = "收起"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.content
|
||||
} else {
|
||||
// holder.tvFmShowStatus.text = "展开"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.summaryContent
|
||||
}
|
||||
holder.tvFmShowStatus.setOnClickListener {
|
||||
if (!fsmEventMsg.isShow) {
|
||||
fsmEventMsg.isShow = true
|
||||
// holder.tvFmShowStatus.text = "收起"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.content
|
||||
} else {
|
||||
fsmEventMsg.isShow = false
|
||||
// holder.tvFmShowStatus.text = "展开"
|
||||
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
|
||||
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.summaryContent
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -677,6 +730,8 @@ class MsgBoxTabAdapter(private val activity: Activity) :
|
||||
cloud
|
||||
} else if(data!![position].type == MsgBoxType.V2X || data!![position].type == MsgBoxType.OBU){
|
||||
v2x
|
||||
}else if (data!![position].type == MsgBoxType.FSM_EVENT){
|
||||
fsmEvent
|
||||
} else {
|
||||
none
|
||||
}
|
||||
@@ -805,5 +860,15 @@ class MsgBoxTabAdapter(private val activity: Activity) :
|
||||
var tvCloudTime: TextView = itemView.findViewById(R.id.tvCloudTime)
|
||||
var tvCloudContent: TextView = itemView.findViewById(R.id.tvCloudContent)
|
||||
}
|
||||
|
||||
//FSM Evet
|
||||
class FSMEventInfoHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
|
||||
var ivFmImage: ImageView = itemView.findViewById(R.id.ivFmImage) //故障级别图标
|
||||
var tvFmTitle: TextView = itemView.findViewById(R.id.tvFmTitle) //标题展示故障策略
|
||||
var tvFmShowStatus: TextView = itemView.findViewById(R.id.tvFmShowStatus) //折叠状态
|
||||
var tvFmTime: TextView = itemView.findViewById(R.id.tvFmTime) //发生时间
|
||||
var tvFmAction: TextView = itemView.findViewById(R.id.tvFmAction) //建议操作
|
||||
var tvFmFault: TextView = itemView.findViewById(R.id.tvFmFault) //故障策略
|
||||
var tvFmReason: TextView = itemView.findViewById(R.id.tvFmReason) //故障原因
|
||||
var tvFmResult: TextView = itemView.findViewById(R.id.tvFmResult) //后果
|
||||
}
|
||||
}
|
||||
@@ -154,8 +154,9 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
} else if (category == MsgCategory.FM_INFO) {
|
||||
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
|
||||
if (FunctionBuildConfig.isTakeoverRemind) {
|
||||
if (msgBoxBean.type == MsgBoxType.FMINFO) {
|
||||
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
|
||||
if (FunctionBuildConfig.isTakeoverRemind) {
|
||||
|
||||
// //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
|
||||
// var curFaultLevel = 5 //默认级别,遍历数组找出级别最高的(level数越小,级别越高)
|
||||
@@ -192,64 +193,63 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor(
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 8.2.0需求:定义三种不同提示强度的异常提示交互
|
||||
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
|
||||
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
|
||||
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
|
||||
* 除此以外不做其他提示频率限制
|
||||
*
|
||||
* 一级:安全停车
|
||||
* FM_DP_EMERGENCY_STOP(就地紧急停车)、FM_DP_COMFORTABLE_STOP(立刻舒适停车)、FM_DP_PNC_CHOOSE_STOP(择机靠边停车)
|
||||
* 交互:图像、TTS、消息盒子
|
||||
*
|
||||
* 二级:降速行驶
|
||||
* FM_DP_SPEED_LIMIT3(三级降速)、FM_DP_SPEED_LIMIT2(二级降速)、FM_DP_SPEED_LIMIT1(一级降速)
|
||||
* 交互:TTS、消息盒子
|
||||
*
|
||||
* 三级:无操作
|
||||
* FM_DP_ONLY_WARNING(警示)、FM_DP_NO_ACTION(报告)
|
||||
* ps:以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
|
||||
*/
|
||||
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
|
||||
when(MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)){
|
||||
//一级
|
||||
MsgFmData.LEVEL_ONE->{
|
||||
//接管图像提示、语音提示
|
||||
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
|
||||
CallerHmiManager.warningV2X(
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.content,
|
||||
/**
|
||||
* 8.2.0需求:定义三种不同提示强度的异常提示交互
|
||||
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
|
||||
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
|
||||
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
|
||||
* 除此以外不做其他提示频率限制
|
||||
*
|
||||
* 一级:安全停车
|
||||
* FM_DP_EMERGENCY_STOP(就地紧急停车)、FM_DP_COMFORTABLE_STOP(立刻舒适停车)、FM_DP_PNC_CHOOSE_STOP(择机靠边停车)
|
||||
* 交互:图像、TTS、消息盒子
|
||||
*
|
||||
* 二级:降速行驶
|
||||
* FM_DP_SPEED_LIMIT3(三级降速)、FM_DP_SPEED_LIMIT2(二级降速)、FM_DP_SPEED_LIMIT1(一级降速)
|
||||
* 交互:TTS、消息盒子
|
||||
*
|
||||
* 三级:无操作
|
||||
* FM_DP_ONLY_WARNING(警示)、FM_DP_NO_ACTION(报告)
|
||||
* ps:以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
|
||||
*/
|
||||
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
|
||||
when (MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)) {
|
||||
//一级
|
||||
MsgFmData.LEVEL_ONE -> {
|
||||
//接管图像提示、语音提示
|
||||
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
|
||||
CallerHmiManager.warningV2X(
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.content,
|
||||
// "识别车辆故障,建议安全停车并查看操作建议",
|
||||
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
}
|
||||
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
},expireTime =3000L, isFromObu = false
|
||||
)
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//二级
|
||||
MsgFmData.LEVEL_TWO->{
|
||||
//语音提示
|
||||
override fun onDismiss() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
}, expireTime = 3000L, isFromObu = false
|
||||
)
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//二级
|
||||
MsgFmData.LEVEL_TWO -> {
|
||||
//语音提示
|
||||
// AIAssist.getInstance(context).speakTTSVoice("识别车辆异常,建议尽快安全停车,查看操作建议")
|
||||
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//三级
|
||||
MsgFmData.LEVEL_THREE->{
|
||||
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
|
||||
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//三级
|
||||
MsgFmData.LEVEL_THREE -> {
|
||||
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} else {
|
||||
if (msgBoxBean.sourceType == DataSourceType.SUMMARY) {
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.mogo.eagle.core.data.enums.DataSourceType
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.MsgCategory
|
||||
import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
|
||||
@@ -249,9 +250,11 @@ class DriverMsgBoxListView @JvmOverloads constructor(
|
||||
}
|
||||
//FM信息
|
||||
MsgCategory.FM_INFO -> {
|
||||
fmList?.add(0,msgBoxList)
|
||||
if(MsgBoxConfig.getUserRecord() == 1){
|
||||
fmList?.let { driverMsgBoxListAdapter?.setData(it) }
|
||||
if (msgBoxList.type == MsgBoxType.FMINFO) {
|
||||
fmList?.add(0, msgBoxList)
|
||||
if (MsgBoxConfig.getUserRecord() == 1) {
|
||||
fmList?.let { driverMsgBoxListAdapter?.setData(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
//系统信息
|
||||
|
||||
@@ -146,8 +146,9 @@ class MsgBoxToastView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
} else if (category == MsgCategory.FM_INFO) {
|
||||
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
|
||||
if (FunctionBuildConfig.isTakeoverRemind) {
|
||||
if (msgBoxBean.type == MsgBoxType.FMINFO) {
|
||||
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
|
||||
if (FunctionBuildConfig.isTakeoverRemind) {
|
||||
// //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
|
||||
// var curFaultLevel = 5 //默认级别,遍历数组找出级别最高的(level数越小,级别越高)
|
||||
// fmInfoMsg.fmInfoList?.forEach { faultInfo ->
|
||||
@@ -183,63 +184,65 @@ class MsgBoxToastView @JvmOverloads constructor(
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 8.2.0需求:定义三种不同提示强度的异常提示交互
|
||||
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
|
||||
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
|
||||
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
|
||||
* 除此以外不做其他提示频率限制
|
||||
*
|
||||
* 一级:安全停车
|
||||
* FM_DP_EMERGENCY_STOP(就地紧急停车)、FM_DP_COMFORTABLE_STOP(立刻舒适停车)、FM_DP_PNC_CHOOSE_STOP(择机靠边停车)
|
||||
* 交互:图像、TTS、消息盒子
|
||||
*
|
||||
* 二级:降速行驶
|
||||
* FM_DP_SPEED_LIMIT3(三级降速)、FM_DP_SPEED_LIMIT2(二级降速)、FM_DP_SPEED_LIMIT1(一级降速)
|
||||
* 交互:TTS、消息盒子
|
||||
*
|
||||
* 三级:无操作
|
||||
* FM_DP_ONLY_WARNING(警示)、FM_DP_NO_ACTION(报告)
|
||||
* ps:以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
|
||||
*/
|
||||
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
|
||||
when(MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)){
|
||||
//一级
|
||||
MsgFmData.LEVEL_ONE->{
|
||||
//接管图像提示、语音提示
|
||||
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
|
||||
CallerHmiManager.warningV2X(
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.content,
|
||||
/**
|
||||
* 8.2.0需求:定义三种不同提示强度的异常提示交互
|
||||
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
|
||||
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
|
||||
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
|
||||
* 除此以外不做其他提示频率限制
|
||||
*
|
||||
* 一级:安全停车
|
||||
* FM_DP_EMERGENCY_STOP(就地紧急停车)、FM_DP_COMFORTABLE_STOP(立刻舒适停车)、FM_DP_PNC_CHOOSE_STOP(择机靠边停车)
|
||||
* 交互:图像、TTS、消息盒子
|
||||
*
|
||||
* 二级:降速行驶
|
||||
* FM_DP_SPEED_LIMIT3(三级降速)、FM_DP_SPEED_LIMIT2(二级降速)、FM_DP_SPEED_LIMIT1(一级降速)
|
||||
* 交互:TTS、消息盒子
|
||||
*
|
||||
* 三级:无操作
|
||||
* FM_DP_ONLY_WARNING(警示)、FM_DP_NO_ACTION(报告)
|
||||
* ps:以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
|
||||
*/
|
||||
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
|
||||
when (MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)) {
|
||||
//一级
|
||||
MsgFmData.LEVEL_ONE -> {
|
||||
//接管图像提示、语音提示
|
||||
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
|
||||
CallerHmiManager.warningV2X(
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.content,
|
||||
// "识别车辆故障,建议安全停车并查看操作建议",
|
||||
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
}
|
||||
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
},expireTime =3000L, isFromObu = false
|
||||
)
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//二级
|
||||
MsgFmData.LEVEL_TWO->{
|
||||
//语音提示
|
||||
override fun onDismiss() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
}, expireTime = 3000L, isFromObu = false
|
||||
)
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//二级
|
||||
MsgFmData.LEVEL_TWO -> {
|
||||
//语音提示
|
||||
// AIAssist.getInstance(context).speakTTSVoice("识别车辆异常,建议尽快安全停车,查看操作建议")
|
||||
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//三级
|
||||
MsgFmData.LEVEL_THREE->{
|
||||
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
|
||||
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//三级
|
||||
MsgFmData.LEVEL_THREE -> {
|
||||
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
} else {
|
||||
if (msgBoxBean.sourceType == DataSourceType.SUMMARY) {
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.mogo.eagle.core.data.enums.EventTypeEnumNew
|
||||
import com.mogo.eagle.core.data.msgbox.AutopilotMsg
|
||||
import com.mogo.eagle.core.data.msgbox.CloudControlMsg
|
||||
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
|
||||
import com.mogo.eagle.core.data.msgbox.FSMEventMsg
|
||||
import com.mogo.eagle.core.data.msgbox.FSMMsg
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxCountDownBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
@@ -331,7 +332,18 @@ class MsgBoxToastAdapter(private val activity: Activity) : RecyclerView.Adapter<
|
||||
))
|
||||
}
|
||||
}
|
||||
}else{
|
||||
}else if(it[position].msgBoxBean.type == MsgBoxType.FSM_EVENT){
|
||||
//FSM Event信息
|
||||
//FSM消息
|
||||
val fsmMsg = it[position].msgBoxBean.bean as FSMEventMsg
|
||||
holder.tvV2XTitle.text = fsmMsg.title
|
||||
holder.tvV2XContent.text = fsmMsg.summaryContent
|
||||
holder.ivV2XImage.setImageDrawable(
|
||||
ContextCompat.getDrawable(
|
||||
activity,
|
||||
R.drawable.icon_warning_fsm_event
|
||||
))
|
||||
} else{
|
||||
//V2X消息
|
||||
val msgBoxBean = it[position].msgBoxBean
|
||||
val v2XMsg = msgBoxBean.bean as V2XMsg
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
@@ -33,7 +33,7 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvMsgFm"
|
||||
android:layout_width="@dimen/dp_154"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_113"
|
||||
android:text="@string/msg_box_title_fm"
|
||||
android:textColor="#FFFFFFFF"
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvMsgIpcReport"
|
||||
android:layout_width="@dimen/dp_154"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_113"
|
||||
android:text="@string/msg_box_title_report"
|
||||
android:textColor="#FFFFFFFF"
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
<!--消息盒子-->
|
||||
<string name="msg_box_title_notice">Notice</string>
|
||||
<string name="msg_box_title_fm">FM Info</string>
|
||||
<string name="msg_box_title_fm">Fault Info</string>
|
||||
<string name="msg_box_title_report">System Info</string>
|
||||
<string name="msg_box_title_bad_case">Record</string>
|
||||
<string name="bad_case_icon">Record Icon</string>
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
<!--消息盒子-->
|
||||
<string name="msg_box_title_notice">通知</string>
|
||||
<string name="msg_box_title_fm">FM信息</string>
|
||||
<string name="msg_box_title_fm">故障信息</string>
|
||||
<string name="msg_box_title_report">系统信息</string>
|
||||
<string name="msg_box_title_bad_case">录包</string>
|
||||
<string name="bad_case_icon">录包图标</string>
|
||||
|
||||
@@ -56,6 +56,7 @@ class ChainConstant {
|
||||
const val CHAIN_CODE_ADAS_SEND = "CHAIN_CODE_ADAS_SEND"
|
||||
const val CHAIN_CODE_ADAS_FM_MSG = "CHAIN_CODE_ADAS_FM_MSG"
|
||||
const val CHAIN_CODE_ADAS_FSM_MSG = "CHAIN_CODE_ADAS_FSM_MSG"
|
||||
const val CHAIN_CODE_ADAS_FSM_EVENT_MSG = "CHAIN_CODE_ADAS_FSM_EVENT_MSG"
|
||||
const val CHAIN_CODE_ADAS_ARRIVE = "CHAIN_CODE_ADAS_ARRIVE"
|
||||
const val CHAIN_CODE_ADAS_ARRIVE_QUERY = "CHAIN_CODE_ADAS_ARRIVE_QUERY"
|
||||
const val CHAIN_CODE_ADAS_ROUTE = "CHAIN_CODE_ADAS_ROUTE"
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.mogo.eagle.core.data.msgbox
|
||||
|
||||
import java.io.Serializable
|
||||
|
||||
/**
|
||||
* fsm event相关的消息
|
||||
*/
|
||||
data class FSMEventMsg(
|
||||
val title: String,
|
||||
val summaryContent: String,//内容概况
|
||||
val content: String,
|
||||
val timestamp: Long,
|
||||
var isShow: Boolean = false
|
||||
) : Serializable
|
||||
@@ -2,5 +2,5 @@ package com.mogo.eagle.core.data.msgbox
|
||||
|
||||
enum class MsgBoxType {
|
||||
// 按功能划分为几大类:运营、通知、V2X模块、OBU模块、工控机Report、录制、交通、FM、语音、SSM、工控机相关等
|
||||
OPERATION, NOTICE, V2X, OBU, REPORT, RECORD, TRAFFIC, FMINFO, VOICE, SSMINFO, AUTOPILOT, FSM, NDE,OTA,CLOUD
|
||||
OPERATION, NOTICE, V2X, OBU, REPORT, RECORD, TRAFFIC, FMINFO, VOICE, SSMINFO, AUTOPILOT, FSM, NDE, OTA, CLOUD, FSM_EVENT
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.mogo.eagle.core.function.api.autopilot
|
||||
|
||||
import fault_management.FmInfo
|
||||
import fsm.Fsm2024
|
||||
|
||||
/**
|
||||
@@ -15,4 +16,6 @@ interface IMoGoFsm2024Listener {
|
||||
*/
|
||||
fun onFSM2024State(fsmState: Fsm2024.FSMStateMsg)
|
||||
|
||||
// fun onFSMEvent(fsmEventMsg: Fsm2024.FsmEventMsg){}
|
||||
|
||||
}
|
||||
@@ -1,14 +1,40 @@
|
||||
package com.mogo.eagle.core.function.call.autopilot
|
||||
|
||||
import android.os.Build
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.data.R
|
||||
import com.mogo.eagle.core.data.msgbox.FSMEventMsg
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoFsm2024Listener
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
import com.mogo.eagle.core.utilcode.util.StringUtils
|
||||
import fsm.Fsm2024
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import java.util.Locale
|
||||
|
||||
/**
|
||||
* 新版FSM状态
|
||||
*/
|
||||
object CallerFsm2024ListenerManager : CallerBase<IMoGoFsm2024Listener>() {
|
||||
var fsmLocaleLanguage = "chs"
|
||||
|
||||
init {
|
||||
val locale = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
// API 24+ 获取语言列表中的第一个
|
||||
AbsMogoApplication.getApp().resources.configuration.locales[0]
|
||||
} else {
|
||||
// API 24 以下直接获取 locale 成员
|
||||
@Suppress("DEPRECATION")
|
||||
AbsMogoApplication.getApp().resources.configuration.locale
|
||||
}
|
||||
val language = locale.language // 例如: "zh"
|
||||
if (language == Locale.CHINESE.language) {
|
||||
fsmLocaleLanguage = "chs"
|
||||
} else if (language == Locale.ENGLISH.language) {
|
||||
fsmLocaleLanguage = "eng"
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeFSM2024State(fsmState: Fsm2024.FSMStateMsg) {
|
||||
M_LISTENERS.forEach {
|
||||
@@ -17,5 +43,62 @@ object CallerFsm2024ListenerManager : CallerBase<IMoGoFsm2024Listener>() {
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeFSMEvent(fsmEventMsg: Fsm2024.FsmEventMsg) {
|
||||
// M_LISTENERS.forEach {
|
||||
// val listener = it.value
|
||||
// listener.onFSMEvent(fsmEventMsg)
|
||||
// }
|
||||
|
||||
if (fsmEventMsg.hasFsmEventInt()) {
|
||||
val fsmEvent = fsmEventMsg.fsmEventInt
|
||||
if (fsmEvent.activeMode == Fsm2024.ActiveMode.PILOT_ACTIVE) {
|
||||
if (fsmEvent.event == Fsm2024.Event.FAIL_TO_ENTER_ACTIVE || fsmEvent.event == Fsm2024.Event.ABNORMAL_EXIT_ACTIVE) {
|
||||
val title =
|
||||
StringUtils.getString(if (fsmEvent.event == Fsm2024.Event.FAIL_TO_ENTER_ACTIVE) R.string.module_mogo_core_fail_to_enter_active else R.string.module_mogo_core_abnormal_exit_active)
|
||||
var content = StringUtils.getString(R.string.module_mogo_core_unknown_cause_fault)
|
||||
var summaryContent = ""
|
||||
if (fsmEvent.transitionReasonsMultiLangCount > 0) {
|
||||
fsmEvent.transitionReasonsMultiLangList.forEach {
|
||||
if (it.language == fsmLocaleLanguage) {
|
||||
val tem = StringBuilder()
|
||||
it.transitionReasonsList.forEach { msg ->
|
||||
if (!msg.isNullOrEmpty()) {
|
||||
if (summaryContent.isEmpty()) {
|
||||
summaryContent = msg
|
||||
}
|
||||
tem.append(msg).append(if (fsmLocaleLanguage == "chs") ";" else "; ")
|
||||
}
|
||||
}
|
||||
if (tem.endsWith(';') || tem.endsWith(' ')) {
|
||||
val delLength = if (fsmLocaleLanguage == "chs") 1 else 2
|
||||
if (tem.length >= delLength) {
|
||||
tem.delete(tem.length - delLength, tem.length)
|
||||
}
|
||||
content = tem.toString();
|
||||
}
|
||||
return@forEach
|
||||
}
|
||||
}
|
||||
}
|
||||
if (summaryContent.isEmpty()) {
|
||||
summaryContent = StringUtils.getString(R.string.module_mogo_core_unknown_cause_fault)
|
||||
}
|
||||
val time = if (fsmEvent.hasTime()) {
|
||||
fsmEvent.time.sec * 1000L
|
||||
} else {
|
||||
System.currentTimeMillis()
|
||||
}
|
||||
CallerMsgBoxManager.saveMsgBoxNoTrace(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.FSM_EVENT,
|
||||
FSMEventMsg(title, summaryContent, content, time)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -172,6 +172,9 @@
|
||||
<string name="module_mogo_core_function_hmi_ipc_upgrade_now">Upgrading to new version, expected 5 minutes</string>
|
||||
<string name="module_mogo_core_function_hmi_ipc_upgrade_fail">Upgrade failed, please contact operations personnel</string>
|
||||
<string name="module_mogo_core_function_hmi_ipc_last_version">Already the latest version</string>
|
||||
<string name="module_mogo_core_fail_to_enter_active">Unable to start autonomous driving</string>
|
||||
<string name="module_mogo_core_abnormal_exit_active">Abnormal exit from autonomous driving</string>
|
||||
<string name="module_mogo_core_unknown_cause_fault">Unknown cause of fault</string>
|
||||
|
||||
|
||||
<string name="module_mogo_core_function_map_roam_starting_fail">Failed to enter roaming mode, code:%s</string>
|
||||
|
||||
@@ -172,6 +172,9 @@
|
||||
<string name="module_mogo_core_function_hmi_ipc_upgrade_now">新版本升级中,预计5分钟升级完成</string>
|
||||
<string name="module_mogo_core_function_hmi_ipc_upgrade_fail">升级失败,请联系运维人员</string>
|
||||
<string name="module_mogo_core_function_hmi_ipc_last_version">已是最新版本</string>
|
||||
<string name="module_mogo_core_fail_to_enter_active">无法起自驾</string>
|
||||
<string name="module_mogo_core_abnormal_exit_active">异常退出自驾</string>
|
||||
<string name="module_mogo_core_unknown_cause_fault">未知故障原因</string>
|
||||
|
||||
|
||||
<string name="module_mogo_core_function_map_roam_starting_fail">进入漫游模式失败, code:%s</string>
|
||||
|
||||
@@ -118,6 +118,7 @@ public enum MessageType {
|
||||
TYPE_SEND_OBU_UPLOAD_STATUS(MessagePad.MessageType.MsgTypeObuUploadStatus, R.string.adas_data_MsgTypeObuUploadStatus_SEND),
|
||||
TYPE_RECEIVE_OBU_UPLOAD_STATUS(MessagePad.MessageType.MsgTypeObuUploadStatus, R.string.adas_data_MsgTypeObuUploadStatus_RECEIVE),
|
||||
TYPE_RECEIVE_PLANNING_STOP_LINE(MessagePad.MessageType.MsgTypePlanningStopLine, R.string.adas_data_MsgTypePlanningStopLine),
|
||||
TYPE_RECEIVE_FSM_EVENT(MessagePad.MessageType.MsgTypeFsmEvent, R.string.adas_data_MsgTypeFsmEvent),
|
||||
|
||||
//TODO 透传原始pb文件中不存在以下type。由于Java中无法强转,所以在mogo-adas-data/message_pad.proto中放开注释
|
||||
TYPE_RECEIVE_PLANNING_DECISION_STATE(MessagePad.MessageType.MsgTypePlanningDecisionState, R.string.adas_data_MsgTypePlanningDecisionState),
|
||||
|
||||
@@ -40,12 +40,18 @@ enum SessionResult{
|
||||
REQUEST_FAILED= 3; //请求失败
|
||||
}
|
||||
|
||||
enum ExitType{
|
||||
enum ExitType{ //废弃
|
||||
NO_EXIT =0;
|
||||
NORMAL_EXIT= 1;
|
||||
ABNORMAL_EXIT= 2;
|
||||
}
|
||||
|
||||
enum OrderStatus {
|
||||
OLDER_SSM_VERSION = 0;
|
||||
NO_ORDER = 1;
|
||||
HAS_ORDER = 2;
|
||||
}
|
||||
|
||||
message Session{
|
||||
optional ActiveMode session_active_mode = 1 ; //这次点击是要进入哪个模式
|
||||
optional uint64 session_id= 2; //最新收到的请求的session id, 暂时不区分 自驾,平行驾驶、方向盘驾驶以及发送源头。没收到或者请求不带id时置为0
|
||||
@@ -75,6 +81,9 @@ message FSMStateMsg {
|
||||
required bool pilot_standby_flag = 11;
|
||||
required bool parallel_standby_flag = 12;
|
||||
required bool m1steer_standby_flag = 13;
|
||||
|
||||
optional OrderStatus order_status = 16;
|
||||
optional bool place_order_standby_flag = 17;
|
||||
|
||||
optional string pilot_not_standby_reason= 21; //FSM 无法自驾无法就绪的原因。
|
||||
optional string parallel_not_standby_reason= 22; //FSM 无法平行即使就绪原因
|
||||
@@ -82,8 +91,8 @@ message FSMStateMsg {
|
||||
|
||||
repeated string repeated_pilot_not_standby_reason= 26; // repeated reason
|
||||
repeated string repeated_parallel_not_standby_reason= 27;
|
||||
repeated string repeated_m1steer_not_standby_reason= 28;
|
||||
|
||||
repeated string repeated_m1steer_not_standby_reason= 28;
|
||||
|
||||
optional Session session = 30; //包含某次点击的所有信息
|
||||
|
||||
optional uint64 fail_to_pilot_session_id= 36; //2.0起废弃
|
||||
@@ -92,6 +101,43 @@ message FSMStateMsg {
|
||||
|
||||
optional string abnormal_state_trans_reason= 41; //2.0起废弃
|
||||
|
||||
optional ExitActive exit_active= 42; //存储最近一次离开Active状态的情况 (包括正常退出,掉自驾,接管,停车)
|
||||
optional ExitActive exit_active= 42; //(废弃)存储最近一次离开Active状态的情况 (包括正常退出,掉自驾,接管,停车)
|
||||
|
||||
repeated string pilot_not_standby_reasons_eng= 50;
|
||||
repeated string parallel_not_standby_reasons_eng= 51;
|
||||
repeated string m1steer_not_standby_reasons_eng= 52;
|
||||
|
||||
repeated uint32 pilot_not_standby_reasons_int= 55;
|
||||
repeated uint32 parallel_not_standby_reasons_int= 56;
|
||||
repeated uint32 m1steer_not_standby_reasons_int= 57;
|
||||
}
|
||||
|
||||
|
||||
enum Event{
|
||||
NO_EVENT =0; //不会出现,出现则说明FSM有bug
|
||||
SUCCEED_TO_ENTER_ACTIVE =1;//正常进入自驾/平行驾驶/M1方向盘驾驶/APP控车 等需要激活底盘线控的模式 (暂不会报出)
|
||||
FAIL_TO_ENTER_ACTIVE =2; //进入失败
|
||||
NORMAL_EXIT_ACTIVE= 3; //正常退出(包括到终点和接管)
|
||||
ABNORMAL_EXIT_ACTIVE= 4; //异常退出
|
||||
}
|
||||
|
||||
message TransReasons{
|
||||
optional string language = 1; //chs, eng
|
||||
repeated string transition_reasons = 2;
|
||||
}
|
||||
|
||||
message FsmEventInt{ //此事件非系统事件,而是一个FSM单次报出自驾状态变化关键信息的接口
|
||||
|
||||
optional ActiveMode active_mode = 1; //进入或退出的模式是自驾/平行驾驶/M1方向盘驾驶/APP控车
|
||||
optional Event event= 2;
|
||||
repeated uint32 transition_reasons = 3; //正常进入不会有原因。进入失败,正常退出,异常退出都会有原因
|
||||
repeated string fm_faults = 4; //如果涉及故障,就存在这个字段里
|
||||
optional common.Time time = 5; //时间发生的时间点
|
||||
optional string broken_nodes = 6; //崩溃节点字符串
|
||||
repeated TransReasons transition_reasons_multi_lang = 10;
|
||||
}
|
||||
|
||||
message FsmEventMsg {
|
||||
optional common.Header header = 1;
|
||||
optional FsmEventInt fsm_event_int= 2;
|
||||
}
|
||||
|
||||
@@ -113,6 +113,7 @@ enum MessageType
|
||||
MsgTypeSetObuUploadReq = 0x10139;//关闭或打开域控上报自车数据到OBU
|
||||
MsgTypeObuUploadStatus = 0x1013A;//obu上报状态查询以结果(上下行)
|
||||
MsgTypePlanningStopLine = 0x1013B;//决策停止线(自动驾驶决策呈现使用) 定频,理论是10hz,实际会有不同
|
||||
MsgTypeFsmEvent = 0x1013C;//fsm event msg
|
||||
}
|
||||
|
||||
message Header
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
<string name="adas_data_MsgTypeObuUploadStatus_SEND">Domain control OBU upload status query</string>
|
||||
<string name="adas_data_MsgTypeObuUploadStatus_RECEIVE">Domain control OBU upload status response</string>
|
||||
<string name="adas_data_MsgTypePlanningStopLine">Planning Stop Line</string>
|
||||
<string name="adas_data_MsgTypeFsmEvent">FSM Event</string>
|
||||
<string name="adas_data_MsgTypePlanningDecisionState">Planning decision state</string>
|
||||
<string name="adas_data_MsgTypeSweeperTaskIndexData">Sweeper index data</string>
|
||||
<string name="adas_data_MsgTypeObuWarningData">OBU warning event</string>
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
<string name="adas_data_MsgTypeObuUploadStatus_SEND">域控上报OBU开关状态查询</string>
|
||||
<string name="adas_data_MsgTypeObuUploadStatus_RECEIVE">域控上报OBU开关状态响应</string>
|
||||
<string name="adas_data_MsgTypePlanningStopLine">决策停止线</string>
|
||||
<string name="adas_data_MsgTypeFsmEvent">FSM事件</string>
|
||||
<string name="adas_data_MsgTypePlanningDecisionState">Planning决策状态</string>
|
||||
<string name="adas_data_MsgTypeSweeperTaskIndexData">清扫车指标数据</string>
|
||||
<string name="adas_data_MsgTypeObuWarningData">OBU预警事件</string>
|
||||
|
||||
@@ -339,6 +339,14 @@ public interface OnAdasListener {
|
||||
*/
|
||||
void onFSM2024State(@NonNull MessagePad.Header header, @NonNull Fsm2024.FSMStateMsg fsmState, int autopilotState, int autopilotMode);
|
||||
|
||||
/**
|
||||
* FSM事件
|
||||
*
|
||||
* @param header 头
|
||||
* @param fsmEventMsg 数据
|
||||
*/
|
||||
void onFSMEvent(@NonNull MessagePad.Header header, @NonNull Fsm2024.FsmEventMsg fsmEventMsg);
|
||||
|
||||
/**
|
||||
* 定位状态
|
||||
* 定位呈现状态透传 用于pad图标显示 1hz 所有车型MAP440开始支持
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.zhidao.support.adas.high.msg;
|
||||
|
||||
import android.os.SystemClock;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.zhidao.support.adas.high.AdasChannel;
|
||||
import com.zhidao.support.adas.high.OnAdasListener;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
import com.zhidao.support.adas.high.protocol.RawData;
|
||||
|
||||
import fsm.Fsm2024;
|
||||
|
||||
/**
|
||||
* FSM事件
|
||||
*/
|
||||
public class FSMEventMessage extends MyAbstractMessageHandler {
|
||||
|
||||
@Override
|
||||
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
|
||||
Fsm2024.FsmEventMsg fsmEventMsg = Fsm2024.FsmEventMsg.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
|
||||
AdasChannel.calculateTimeConsumingOnDispatchRaw("FSM事件", raw.receiveTime);
|
||||
long nowTime = 0;
|
||||
if (CupidLogUtils.isEnableLog())
|
||||
nowTime = SystemClock.elapsedRealtime();
|
||||
if (adasListener != null) {
|
||||
adasListener.onFSMEvent(raw.getHeader(), fsmEventMsg);
|
||||
}
|
||||
AdasChannel.calculateTimeConsumingBusiness("FSM事件", nowTime);
|
||||
}
|
||||
}
|
||||
@@ -64,6 +64,7 @@ public class MyMessageFactory implements IMyMessageFactory {
|
||||
private IMsg vlmMessageImage;//视觉语言模型图像
|
||||
private IMsg obuUploadStatusMessage;//域控上报OBU开关状态响应
|
||||
private IMsg planningStopLineMessage;//决策停止线
|
||||
private IMsg fSMEventMessage;//FSM事件
|
||||
|
||||
private final AutopilotReview autopilotReview;
|
||||
private final TurnLightState lightLeft = new TurnLightState();
|
||||
@@ -380,6 +381,12 @@ public class MyMessageFactory implements IMyMessageFactory {
|
||||
planningStopLineMessage = new PlanningStopLineMessage();
|
||||
}
|
||||
return planningStopLineMessage;
|
||||
} else if (messageType == MessageType.TYPE_RECEIVE_FSM_EVENT.typeCode) {
|
||||
//决策停止线
|
||||
if (fSMEventMessage == null) {
|
||||
fSMEventMessage = new FSMEventMessage();
|
||||
}
|
||||
return fSMEventMessage;
|
||||
} else {
|
||||
//MessageType.TYPE_DEFAULT.typeCode
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user