[8.1.0]云控基础平台消息接入
This commit is contained in:
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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->{
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user