[8.1.0]云控基础平台消息接入

This commit is contained in:
xuxinchao
2025-06-11 10:59:25 +08:00
parent 6cf2dce10c
commit fcbb538919
19 changed files with 1093 additions and 3 deletions

View File

@@ -61,6 +61,7 @@ import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartManager
import com.zhjt.mogo_core_function_devatools.driver.video.DriveSeatVideoProviderImpl
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.zhjt.mogo_core_function_devatools.cloudcontrol.CloudControlManager
import com.zhjt.mogo_core_function_devatools.diskcopy.DiskCopyManager
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager
@@ -208,6 +209,7 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
ColdStartManager.init(mContext!!)
OTAUpgradeManager.init(mContext!!)
DiskCopyManager.init(mContext!!)
CloudControlManager.init(mContext!!)
if (DebugConfig.isDebug()) {
SdtManager.init(mContext!!, true, DetectResultImpl())
}

View File

@@ -0,0 +1,427 @@
package com.zhjt.mogo_core_function_devatools.cloudcontrol
import android.content.Context
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
import com.mogo.eagle.core.data.msgbox.CloudControlMsg
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.function.api.devatools.INDECloudListener
import com.mogo.eagle.core.function.call.devatools.CallerNDECloudManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.zhjt.mogo.adas.common.cloud.AdviceEvwType
import com.zhjt.mogo.adas.common.cloud.AdviceType
import com.zhjt.mogo.adas.data.bean.cloud.info.AdviceAvwInfo
import com.zhjt.mogo.adas.data.bean.cloud.info.AdviceComRsiInfo
import com.zhjt.mogo.adas.data.bean.cloud.info.AdviceEvwInfo
import com.zhjt.mogo.adas.data.bean.cloud.info.AdviceGlosaInfo
import com.zhjt.mogo.adas.data.bean.cloud.info.AdviceLaneSpdLmtInfo
import com.zhjt.mogo.adas.data.bean.cloud.info.AstFuncTlmInfo
import com.zhjt.mogo.adas.data.bean.cloud.pojo.AdvicePojo
import com.zhjt.mogo.adas.data.bean.cloud.pojo.AstFuncPojo
/**
* 云控基础平台信息管理
*/
object CloudControlManager: INDECloudListener{
const val TAG = "CloudControlManager"
fun init(context: Context){
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
CallerNDECloudManager.addListener(TAG,this)
}
}
/**
* NDE下发 信号灯信息
* @param astFuncPojo 云端辅助功能信息
* @param astFuncTlmInfo 云端下发信号灯信息
*/
override fun onNdeCloudAstFuncTlm(astFuncPojo: AstFuncPojo, astFuncTlmInfo: AstFuncTlmInfo) {
}
/**
* NDE下发 信号灯路口车速引导功能指令
* @param advicePojo 实时决策建议
* @param adviceGlosaInfo 信号灯路口车速引导功能指令
*/
override fun onNdeCloudAdviceGlosa(advicePojo: AdvicePojo, adviceGlosaInfo: AdviceGlosaInfo) {
//绿波车速引导
if(adviceGlosaInfo.spdExpNum > 0){
val speedMin = adviceGlosaInfo.spdExps[0].spdMin*3.6
val speedMax = adviceGlosaInfo.spdExps[0].spdMax*3.6
val num = adviceGlosaInfo.spdExps[0].numIntersection
val desc = if(num ==0 || num == 255){
"建议车速${speedMin}km/h-${speedMax}km/h"
}else{
"建议车速${speedMin}km/h-${speedMax}km/h可绿灯通过前方${num}个路口"
}
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_GREEN_WAVE_SPEED.poiType,
EventTypeEnumNew.CLOUD_GREEN_WAVE_SPEED.poiTypeStr,
desc
)
)
)
}
}
/**
* NDE下发 通用 RSI 预警指令
* 包含:
* 闯红灯预警
* 行驶车道建议
* 交通拥堵提醒
* 道路危险状况提示
* 超视距弱势交通参与者提醒
* 路口其他车辆闯红灯预警
* 障碍物(路面遗撒)预警
* 能见度预警
* @param advicePojo 实时决策建议
* @param adviceComRsiInfo 通用RSI预警指令
*/
override fun onNdeCloudAdviceComRsi(
advicePojo: AdvicePojo,
adviceComRsiInfo: AdviceComRsiInfo
) {
if(adviceComRsiInfo.rsisNum > 0){
adviceComRsiInfo.rsis.forEach {
when(it.eventType){
//闯红灯预警
6011->{
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_RED_LIGHT_WARN.poiType,
EventTypeEnumNew.CLOUD_RED_LIGHT_WARN.poiTypeStr,
"存在闯红灯风险"
)
)
)
}
//行驶车道建议
6031,6032->{
if(it.adviceRsiLaneProposalInfo.tagLaneDataNum > 0){
var desc = "推荐车道:"
it.adviceRsiLaneProposalInfo.tagLaneData.forEach {lane->
desc += "${lane.tagLaneSeq}车道 "
}
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_SUGGEST_DRIVE_LANE.poiType,
EventTypeEnumNew.CLOUD_SUGGEST_DRIVE_LANE.poiTypeStr,
""
)
)
)
}
}
//交通拥堵提醒
6061->{
//eventLevel 2:拥堵; 3:重拥堵
if(it.adviceRsiTrafficJamInfo.eventLevel ==2 || it.adviceRsiTrafficJamInfo.eventLevel == 3){
val desc = "前方${it.adviceRsiTrafficJamInfo.queueLength}${it.adviceRsiTrafficJamInfo.roadIdNum}车道拥堵"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_TRAFFIC_REMIND.poiType,
EventTypeEnumNew.CLOUD_TRAFFIC_REMIND.poiTypeStr,
desc
)
)
)
}
}
//道路危险状况提示
6021,6022->{
if(it.adviceRsiRoadDangerHintInfo.valid == 1){
if(it.adviceRsiRoadDangerHintInfo.laneOfEventNum > 0){
var lane = ""
it.adviceRsiRoadDangerHintInfo.laneOfEvent.forEach {
lane += "${it}"
}
val desc = "前方${it.eventRadius}米有${getAlterType(it.adviceRsiRoadDangerHintInfo.alterType)},影响${lane}车道通行"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_DANGEROUS_ROAD_WARN.poiType,
EventTypeEnumNew.CLOUD_DANGEROUS_ROAD_WARN.poiTypeStr,
desc
)
)
)
}
}
}
//超视距弱势交通参与者提醒
6051->{
if(it.adviceRsiOverSightDistanceInfo.valid == 1){
val desc = "前方${it.adviceRsiOverSightDistanceInfo.distance}米有${getWeakType(it.adviceRsiOverSightDistanceInfo.type)}"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_BEYOND_VISUAL_RANGE.poiType,
EventTypeEnumNew.CLOUD_BEYOND_VISUAL_RANGE.poiTypeStr,
desc
)
)
)
}
}
//路口其他车辆闯红灯预警
6041->{
if(it.adviceRsiOtherCarBreakReadWarningInfo.valid == 1){
val desc = if(it.adviceRsiOtherCarBreakReadWarningInfo.d2StopLine == -1.0){
"路口内有他车闯红灯"
}else{
"路口前有他车闯红灯"
}
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_OTHER_VEHICLE_RED_LIGHT_WARN.poiType,
EventTypeEnumNew.CLOUD_OTHER_VEHICLE_RED_LIGHT_WARN.poiTypeStr,
desc
)
)
)
}
}
//障碍物(路面遗撒)预警
6081->{
if(it.adviceRsiAbandonInfo.valid == 1){
if(it.adviceRsiAbandonInfo.laneOfEventNum > 0){
var lane = ""
it.adviceRsiAbandonInfo.lanOfEvent.forEach {lan->
lane = "$lane${lan}车道"
}
val desc = "前方${it.adviceRsiAbandonInfo.distance}${lane}存在障碍物,影响${lane}通行"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_OBSTACLE_WARN.poiType,
EventTypeEnumNew.CLOUD_OBSTACLE_WARN.poiTypeStr,
desc
)
)
)
}
}
}
//能见度预警
6071->{
if(it.adviceRsiVisibilityInfo.valid == 1){
val desc = "当前能见度为${it.adviceRsiVisibilityInfo.visibilityDis}"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_VISIBILITY_WARN.poiType,
EventTypeEnumNew.CLOUD_VISIBILITY_WARN.poiTypeStr,
desc
)
)
)
}
}
}
}
}
}
/**
* NDE下发 紧急车辆预警指令
* @param advicePojo 实时决策建议
* @param adviceEvwInfo 紧急车辆预警指令
*/
override fun onNdeCloudAdviceEvw(advicePojo: AdvicePojo, adviceEvwInfo: AdviceEvwInfo) {
//紧急车辆优先通行 TODO 没有具体车道
if(adviceEvwInfo.valid == 1){
val desc = if(adviceEvwInfo.alertRadius == 6553.5){
"前方有${getVehicleType(adviceEvwInfo.type.desc)}"
}else{
"后方${adviceEvwInfo.alertRadius}米有${getVehicleType(adviceEvwInfo.type.desc)}"
}
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_PRIORITY_VEHICLE.poiType,
EventTypeEnumNew.CLOUD_PRIORITY_VEHICLE.poiTypeStr,
desc
)
)
)
}
}
/**
* NDE下发 动态车道级限速指令
* @param advicePojo 实时决策建议
* @param adviceLaneSpdLmtInfo 动态车道级限速指令
*/
override fun onNdeCloudAdviceLaneSpdLmt(
advicePojo: AdvicePojo,
adviceLaneSpdLmtInfo: AdviceLaneSpdLmtInfo
) {
//动态限速信息
if(adviceLaneSpdLmtInfo.valid == 1){
val desc = "道路限速${adviceLaneSpdLmtInfo.speedLmt[0].speedLimit}km/h"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_LIMIT_SPEED.poiType,
EventTypeEnumNew.CLOUD_LIMIT_SPEED.poiTypeStr,
desc
)
)
)
}
}
/**
* NDE下发 异常车辆预警指令
* @param advicePojo 实时决策建议
* @param adviceAvwInfo 异常车辆预警指令
*/
override fun onNdeCloudAdviceAvw(advicePojo: AdvicePojo, adviceAvwInfo: AdviceAvwInfo) {
//异常车辆预警
if(adviceAvwInfo.valid == 1){
val desc = "前方${adviceAvwInfo.distance}${adviceAvwInfo.rsiLaneId}车道存在异常车辆"
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.CLOUD,
CloudControlMsg(EventTypeEnumNew.CLOUD_ABNORMAL_VEHICLE_WARN.poiType,
EventTypeEnumNew.CLOUD_ABNORMAL_VEHICLE_WARN.poiTypeStr,
desc
)
)
)
}
}
/**
* 获取车辆类型
*/
private fun getVehicleType(type: String): String{
return when(type){
AdviceEvwType.AMBULANCE.desc->{
AdviceEvwType.AMBULANCE.desc
}
AdviceEvwType.POLICE_CAR.desc->{
AdviceEvwType.POLICE_CAR.desc
}
AdviceEvwType.FIRE_TRUCK.desc->{
AdviceEvwType.FIRE_TRUCK.desc
}
else->{
"应急车辆"
}
}
}
private fun getAlterType(alterType: Int): String{
return when(alterType){
5501->{
"行人提醒"
}
5502->{
"非机动车提醒"
}
5503->{
"紧急制动预警"
}
5504->{
"倒车预警"
}
5505->{
"逆行预警"
}
5506->{
"异常低速预警"
}
5507->{
"异常停车预警"
}
5508->{
"超速预"
}
5509->{
"交通拥堵预警"
}
5510->{
"特殊车辆预警"
}
5511->{
"紧急车辆预警"
}
5512->{
"车辆状态异常预警"
}
5513->{
"连续并道预警"
}
5514->{
"匝道退回主路预警"
}
5515->{
"交通管控预警"
}
5516->{
"路面低摩阻预警"
}
5517->{
"动态车道级限速预警"
}
5518->{
"障碍物提醒"
}
5519->{
"红绿灯故障预警"
}
5520->{
"弱势交通参与者预警"
}
5521->{
"闯红灯"
}
5522->{
"机动车压实线变道"
}
5523->{
"机动车不按导向标识行驶"
}
else->{
"预警"
}
}
}
/**
* 获取弱势交通参与者类型
*/
private fun getWeakType(type: Int): String{
return when(type){
0->{
"未知"
}
1->{
"行人"
}
2->{
"非机动车"
}
else->{
""
}
}
}
}