处理OBU提示信息获取

This commit is contained in:
董宏宇
2021-08-09 19:42:32 +08:00
parent a7bbce3e88
commit 77d08e2132
5 changed files with 373 additions and 278 deletions

View File

@@ -51,6 +51,8 @@ dependencies {
implementation rootProject.ext.dependencies.coroutinesandroid
implementation rootProject.ext.dependencies.coroutinescore
implementation rootProject.ext.dependencies.mogoobu
api "com.mogo.libs:hook:1.0"
if (Boolean.valueOf(RELEASE)) {
api rootProject.ext.dependencies.mogomap

View File

@@ -1,5 +1,8 @@
package com.mogo.module.common.enum
import com.mogo.module.common.R
import com.zhidao.support.obu.constants.ObuConstants
/**
* author : donghongyu
* e-mail : 1358506549@qq.com
@@ -7,9 +10,242 @@ package com.mogo.module.common.enum
* desc : 车机启动状态
* version: 1.0
*/
interface WarningTypeEnum {
enum class WarningTypeEnum(
var useCaseId: Int,
var desc: String,
var warningContent: String,
var warningTts: String,
var warningIconId: Int
) {
TYPE_USECASE_ID_EBW(
ObuConstants.USE_CASE_ID.EBW,
"紧急制动预警",
"前车急刹车",
"前车急刹车",
R.drawable.icon_warning_v2x_emergency_brake
),
TYPE_USECASE_ID_FCW(
ObuConstants.USE_CASE_ID.FCW,
"前向碰撞预警",
"前车碰撞预警",
"前车碰撞预警",
R.drawable.icon_warning_v2x_collision_warning
),
TYPE_USECASE_ID_ICW(
ObuConstants.USE_CASE_ID.ICW,
"交叉路口碰撞预警",
"交叉路口碰撞预警",
"注意交叉路口车辆",
R.drawable.icon_warning_v2x_collision_warning
),
TYPE_USECASE_ID_CLW(
ObuConstants.USE_CASE_ID.CLW,
"车辆失控预警",
"前车失控预警",
"前车失控预警",
R.drawable.icon_warning_v2x_vehicle_control
),
TYPE_USECASE_ID_DNPW(
ObuConstants.USE_CASE_ID.DNPW,
"逆向超车预警",
"逆向超车预警",
"注意逆向车道车辆",
R.drawable.icon_warning_v2x_blind_area_collision
),
TYPE_USECASE_ID_AVW(
ObuConstants.USE_CASE_ID.AVW,
"异常车辆提醒",
"前车异常",
"前车异常",
R.drawable.icon_warning_v2x_abnormal_vehicle
),
TYPE_USECASE_ID_BSW(
ObuConstants.USE_CASE_ID.BSW,
"盲区预警",
"盲区碰撞预警",
"",
R.drawable.icon_warning_v2x_blind_area_collision
),
TYPE_USECASE_ID_LCW(
ObuConstants.USE_CASE_ID.LCW,
"变道预警",
"盲区碰撞预警",
"注意%s后车辆",
R.drawable.icon_warning_v2x_blind_area_collision
),//注意左后车辆/注意右后车辆
TYPE_USECASE_ID_EVW(
ObuConstants.USE_CASE_ID.EVW,
"紧急车辆提醒",
"请避让特种车辆",
"后方存在特殊车辆,请安排避让",
R.drawable.icon_warning_v2x_special_vehicle_access
),
TYPE_USECASE_ID_VRUCW(
ObuConstants.USE_CASE_ID.VRUCW,
"弱势交通参与者碰撞预警",
"%s碰撞预警",
"%s碰撞预警",
R.drawable.icon_warning_v2x_pedestrian_crossing
),//行人/摩托车碰撞预警
TYPE_USECASE_ID_SLW(
ObuConstants.USE_CASE_ID.SLW,
"限速预警",
"已超速",
"已超速",
R.drawable.icon_warning_v2x_over_speed
),
TYPE_USECASE_ID_LTA(
ObuConstants.USE_CASE_ID.LTA,
"左转辅助",
"左转碰撞预警",
"注意左前车辆",
R.drawable.icon_warning_v2x_collision_warning
),
TYPE_USECASE_ID_HLW(
ObuConstants.USE_CASE_ID.HLW,
"道路危险情况预警",
"道路危险情况预警",
"前方路况危险",
R.drawable.icon_warning_v2x_road_dangerous
),//(如果能给出具体的类别,则播报具体危险类别)
TYPE_USECASE_ID_IVS(
ObuConstants.USE_CASE_ID.IVS,
"车内标牌",
"前方施工",
"前方施工",
R.drawable.icon_warning_v2x_road_construction
),
TYPE_USECASE_ID_TJW(
ObuConstants.USE_CASE_ID.TJW,
"前方拥堵提醒",
"前方道路拥堵",
"前方%d米道路拥堵请减速慢行",
R.drawable.icon_warning_v2x_congestion
),
TYPE_USECASE_ID_IVP(
ObuConstants.USE_CASE_ID.IVP,
"闯红灯预警",
"路口红灯,禁止通行",
"路口红灯,禁止通行",
R.drawable.icon_warning_v2x_traffic_lights_red
),
TYPE_USECASE_ID_COC(
ObuConstants.USE_CASE_ID.COC,
"预留",
"路况预警",
"路况预警",
R.drawable.icon_warning_v2x_abnormal_vehicle
),
TYPE_ERROR(
ObuConstants.USE_CASE_ID.ERROR,
"未知/错误/异常",
"",
"",
R.drawable.icon_warning_v2x_abnormal_vehicle
);
companion object {
fun getWarningType(useCaseId: Int): WarningTypeEnum {
return when (useCaseId) {
ObuConstants.USE_CASE_ID.EBW -> TYPE_USECASE_ID_EBW
ObuConstants.USE_CASE_ID.FCW -> TYPE_USECASE_ID_FCW
ObuConstants.USE_CASE_ID.ICW -> TYPE_USECASE_ID_ICW
ObuConstants.USE_CASE_ID.CLW -> TYPE_USECASE_ID_CLW
ObuConstants.USE_CASE_ID.DNPW -> TYPE_USECASE_ID_DNPW
ObuConstants.USE_CASE_ID.AVW -> TYPE_USECASE_ID_AVW
ObuConstants.USE_CASE_ID.BSW -> TYPE_USECASE_ID_BSW
ObuConstants.USE_CASE_ID.LCW -> TYPE_USECASE_ID_LCW
ObuConstants.USE_CASE_ID.EVW -> TYPE_USECASE_ID_EVW
ObuConstants.USE_CASE_ID.VRUCW -> TYPE_USECASE_ID_VRUCW
ObuConstants.USE_CASE_ID.SLW -> TYPE_USECASE_ID_SLW
ObuConstants.USE_CASE_ID.LTA -> TYPE_USECASE_ID_LTA
ObuConstants.USE_CASE_ID.HLW -> TYPE_USECASE_ID_HLW
ObuConstants.USE_CASE_ID.IVS -> TYPE_USECASE_ID_IVS
ObuConstants.USE_CASE_ID.TJW -> TYPE_USECASE_ID_TJW
ObuConstants.USE_CASE_ID.IVP -> TYPE_USECASE_ID_IVP
ObuConstants.USE_CASE_ID.COC -> TYPE_USECASE_ID_COC
ObuConstants.USE_CASE_ID.ERROR -> TYPE_ERROR
else -> TYPE_USECASE_ID_AVW
}
}
fun getWarningIcon(useCaseId: Int): Int {
return when (useCaseId) {
ObuConstants.USE_CASE_ID.EBW -> TYPE_USECASE_ID_EBW.warningIconId
ObuConstants.USE_CASE_ID.FCW -> TYPE_USECASE_ID_FCW.warningIconId
ObuConstants.USE_CASE_ID.ICW -> TYPE_USECASE_ID_ICW.warningIconId
ObuConstants.USE_CASE_ID.CLW -> TYPE_USECASE_ID_CLW.warningIconId
ObuConstants.USE_CASE_ID.DNPW -> TYPE_USECASE_ID_DNPW.warningIconId
ObuConstants.USE_CASE_ID.AVW -> TYPE_USECASE_ID_AVW.warningIconId
ObuConstants.USE_CASE_ID.BSW -> TYPE_USECASE_ID_BSW.warningIconId
ObuConstants.USE_CASE_ID.LCW -> TYPE_USECASE_ID_LCW.warningIconId
ObuConstants.USE_CASE_ID.EVW -> TYPE_USECASE_ID_EVW.warningIconId
ObuConstants.USE_CASE_ID.VRUCW -> TYPE_USECASE_ID_VRUCW.warningIconId
ObuConstants.USE_CASE_ID.SLW -> TYPE_USECASE_ID_SLW.warningIconId
ObuConstants.USE_CASE_ID.LTA -> TYPE_USECASE_ID_LTA.warningIconId
ObuConstants.USE_CASE_ID.HLW -> TYPE_USECASE_ID_HLW.warningIconId
ObuConstants.USE_CASE_ID.IVS -> TYPE_USECASE_ID_IVS.warningIconId
ObuConstants.USE_CASE_ID.TJW -> TYPE_USECASE_ID_TJW.warningIconId
ObuConstants.USE_CASE_ID.IVP -> TYPE_USECASE_ID_IVP.warningIconId
ObuConstants.USE_CASE_ID.COC -> TYPE_USECASE_ID_COC.warningIconId
ObuConstants.USE_CASE_ID.ERROR -> TYPE_ERROR.warningIconId
else -> TYPE_USECASE_ID_AVW.warningIconId
}
}
fun getWarningContent(useCaseId: Int): String {
return when (useCaseId) {
ObuConstants.USE_CASE_ID.EBW -> TYPE_USECASE_ID_EBW.warningContent
ObuConstants.USE_CASE_ID.FCW -> TYPE_USECASE_ID_FCW.warningContent
ObuConstants.USE_CASE_ID.ICW -> TYPE_USECASE_ID_ICW.warningContent
ObuConstants.USE_CASE_ID.CLW -> TYPE_USECASE_ID_CLW.warningContent
ObuConstants.USE_CASE_ID.DNPW -> TYPE_USECASE_ID_DNPW.warningContent
ObuConstants.USE_CASE_ID.AVW -> TYPE_USECASE_ID_AVW.warningContent
ObuConstants.USE_CASE_ID.BSW -> TYPE_USECASE_ID_BSW.warningContent
ObuConstants.USE_CASE_ID.LCW -> TYPE_USECASE_ID_LCW.warningContent
ObuConstants.USE_CASE_ID.EVW -> TYPE_USECASE_ID_EVW.warningContent
ObuConstants.USE_CASE_ID.VRUCW -> TYPE_USECASE_ID_VRUCW.warningContent
ObuConstants.USE_CASE_ID.SLW -> TYPE_USECASE_ID_SLW.warningContent
ObuConstants.USE_CASE_ID.LTA -> TYPE_USECASE_ID_LTA.warningContent
ObuConstants.USE_CASE_ID.HLW -> TYPE_USECASE_ID_HLW.warningContent
ObuConstants.USE_CASE_ID.IVS -> TYPE_USECASE_ID_IVS.warningContent
ObuConstants.USE_CASE_ID.TJW -> TYPE_USECASE_ID_TJW.warningContent
ObuConstants.USE_CASE_ID.IVP -> TYPE_USECASE_ID_IVP.warningContent
ObuConstants.USE_CASE_ID.COC -> TYPE_USECASE_ID_COC.warningContent
ObuConstants.USE_CASE_ID.ERROR -> TYPE_ERROR.warningContent
else -> TYPE_USECASE_ID_AVW.warningContent
}
}
fun getWarningTts(useCaseId: Int): String {
return when (useCaseId) {
ObuConstants.USE_CASE_ID.EBW -> TYPE_USECASE_ID_EBW.warningTts
ObuConstants.USE_CASE_ID.FCW -> TYPE_USECASE_ID_FCW.warningTts
ObuConstants.USE_CASE_ID.ICW -> TYPE_USECASE_ID_ICW.warningTts
ObuConstants.USE_CASE_ID.CLW -> TYPE_USECASE_ID_CLW.warningTts
ObuConstants.USE_CASE_ID.DNPW -> TYPE_USECASE_ID_DNPW.warningTts
ObuConstants.USE_CASE_ID.AVW -> TYPE_USECASE_ID_AVW.warningTts
ObuConstants.USE_CASE_ID.BSW -> TYPE_USECASE_ID_BSW.warningTts
ObuConstants.USE_CASE_ID.LCW -> TYPE_USECASE_ID_LCW.warningTts
ObuConstants.USE_CASE_ID.EVW -> TYPE_USECASE_ID_EVW.warningTts
ObuConstants.USE_CASE_ID.VRUCW -> TYPE_USECASE_ID_VRUCW.warningTts
ObuConstants.USE_CASE_ID.SLW -> TYPE_USECASE_ID_SLW.warningTts
ObuConstants.USE_CASE_ID.LTA -> TYPE_USECASE_ID_LTA.warningTts
ObuConstants.USE_CASE_ID.HLW -> TYPE_USECASE_ID_HLW.warningTts
ObuConstants.USE_CASE_ID.IVS -> TYPE_USECASE_ID_IVS.warningTts
ObuConstants.USE_CASE_ID.TJW -> TYPE_USECASE_ID_TJW.warningTts
ObuConstants.USE_CASE_ID.IVP -> TYPE_USECASE_ID_IVP.warningTts
ObuConstants.USE_CASE_ID.COC -> TYPE_USECASE_ID_COC.warningTts
ObuConstants.USE_CASE_ID.ERROR -> TYPE_ERROR.warningTts
else -> TYPE_USECASE_ID_AVW.warningTts
}
}
const val WARNING_PRIOR_COLLISION = 20001//前向碰撞
const val WARNING_INTERSECTION_COLLISION = 20002//交叉路口碰撞
const val WARNING_LEFT_AUXILIARY = 20003//左转辅助
@@ -37,6 +273,6 @@ interface WarningTypeEnum {
const val WARNING_ACCIDENT_PRONE_ROAD_SECTION = 20025//事故易发路段
const val WARNING_HUMP_BRIDGE = 20026//驼峰桥
const val WARNING_SCHOOL = 20027// 学校
}
}

View File

@@ -1,156 +0,0 @@
package com.mogo.module.common.utils
import com.mogo.module.common.enum.WarningTypeEnum
import com.mogo.module.common.R
/**
* @author xiaoyuzhoukeyi
* @date 2021/8/6 11:04 上午
*/
object WarningUtils {
fun getWarningIcon(v2xType: Int): Array<Any> {
var warningIconId = R.drawable.icon_warning_v2x_abnormal_vehicle
var warningContent = "注意周边环境"
var warningTts = "注意周边环境"
when (v2xType) {
WarningTypeEnum.WARNING_PRIOR_COLLISION -> {
warningIconId = R.drawable.icon_warning_v2x_collision_warning
warningContent = "前车碰撞预警"
warningTts = "前车碰撞预警"
}//前向碰撞
WarningTypeEnum.WARNING_INTERSECTION_COLLISION -> {
warningIconId = R.drawable.icon_warning_v2x_collision_warning
warningContent = "注意交叉路口车辆"
warningTts = "注意交叉路口车辆"
}//交叉路口碰撞
WarningTypeEnum.WARNING_LEFT_AUXILIARY -> {
warningIconId = R.drawable.icon_warning_v2x_collision_warning
warningContent = "注意左前车辆"
warningTts = "注意左前车辆"
}//左转辅助
WarningTypeEnum.WARNING_BLIND_AREA_COLLISION -> {
warningIconId = R.drawable.icon_warning_v2x_blind_area_collision
warningContent = "注意后方来车"
warningTts = "注意后方来车"
}//盲区/变道辅助
WarningTypeEnum.WARNING_REVERSE_OVERTAKING -> {
warningIconId = R.drawable.icon_warning_v2x_blind_area_collision
warningContent = "注意逆向车道车辆"
warningTts = "注意逆向车道车辆"
}//逆向超车
WarningTypeEnum.WARNING_VEHICLE_BRAKES -> {
warningIconId = R.drawable.icon_warning_v2x_emergency_brake
warningContent = "前车急刹车"
warningTts = "前车急刹车"
}//紧急制动-前车急刹
WarningTypeEnum.WARNING_ABNORMAL_VEHICLE -> {
warningIconId = R.drawable.icon_warning_v2x_abnormal_vehicle
warningContent = "前车异常"
warningTts = "前车异常"
}//异常车辆提醒
WarningTypeEnum.WARNING_VEHICLE_CONTROL -> {
warningIconId = R.drawable.icon_warning_v2x_vehicle_control
warningContent = "前车失控预警"
warningTts = "前车失控预警"
}//车辆失控预警
WarningTypeEnum.WARNING_SPECIAL_VEHICLE_ACCESS -> {
warningIconId = R.drawable.icon_warning_v2x_special_vehicle_access
warningContent = "请避让特种车辆"
warningTts = "后方存在特殊车辆,请安排避让"
}//特种车辆通行
WarningTypeEnum.WARNING_SPEED_LIMIT -> {
warningIconId = R.drawable.icon_warning_v2x_over_speed
warningContent = "减速慢行"
warningTts = "请减速慢行"
}// 限速预警
WarningTypeEnum.WARNING_RED_LIGHT -> {
warningIconId = R.drawable.icon_warning_v2x_traffic_lights_red
warningContent = "路口红灯,禁止通行"
warningTts = "路口红灯,禁止通行"
}//闯红灯预警
WarningTypeEnum.WARNING_VULNERABLE_TRANSPORT_PARTICIPANT -> {
warningIconId = R.drawable.icon_warning_v2x_pedestrian_crossing
warningContent = "行人碰撞预警"
warningTts = "行人碰撞预警"
}//弱势交通参与者碰撞预警
WarningTypeEnum.WARNING_TRAFFIC_SPEED_GUIDE -> {
warningIconId = R.drawable.icon_warning_v2x_traffic_lights_green
warningContent = "绿波通行"
warningTts = "绿波通行"
}//绿波通行车速引导
WarningTypeEnum.WARNING_CAR_PLATE -> {
warningIconId = R.drawable.icon_warning_v2x_road_construction
warningContent = "前方施工"
warningTts = "前方施工"
}//车内标牌
WarningTypeEnum.warning_congestion -> {
warningIconId = R.drawable.icon_warning_v2x_congestion
warningContent = "前方道路拥堵"
warningTts = "前方道路拥堵"
}//前方道路拥堵
WarningTypeEnum.WARNING_OVER_SPEED -> {
warningIconId = R.drawable.icon_warning_v2x_over_speed
warningContent = "您已超速"
warningTts = "您已超速"
}//超速预警
WarningTypeEnum.WARNING_ROAD_HAZARDS -> {
warningIconId = R.drawable.icon_warning_v2x_road_dangerous
warningContent = "道路危险情况预警"
warningTts = "道路危险情况预警"
}//道路危险情况预警
WarningTypeEnum.WARNING_ROUNDABOUT -> {
warningIconId = R.drawable.icon_warning_v2x_roundaboutpng
warningContent = "前方驶入环岛"
warningTts = "前方驶入环岛"
}//环岛
WarningTypeEnum.WARNING_GIVE_WAY -> {
warningIconId = R.drawable.icon_warning_v2x_over_speed
warningContent = "有车出入,减速慢行"
warningTts = "有车出入,减速慢行"
}//减速让行
WarningTypeEnum.WARNING_BAN_ASTERN -> {
warningIconId = R.drawable.icon_warning_v2x_ban_astern
warningContent = "当前路段禁止停车"
warningTts = "当前路段禁止停车"
}//禁止停车
WarningTypeEnum.WARNING_TURN_LEFT_SHARP -> {
warningIconId = R.drawable.icon_warning_v2x_turn_left_sharp
warningContent = "前方左转急弯"
warningTts = "前方路口左转急弯,请减速慢行"
}//左转急弯
WarningTypeEnum.WARNING_TURN_RIGHT_SHARP -> {
warningIconId = R.drawable.icon_warning_v2x_turn_right_sharp
warningContent = "前方右转急弯"
warningTts = "前方路口右转急弯,请减速慢行"
}//右转急弯
WarningTypeEnum.WARNING_TRAMCAR -> {
warningIconId = R.drawable.icon_warning_v2x_tramcar
warningContent = "前方有轨电车提醒"
warningTts = "前方有轨电车经过,请注意行驶安全"
}//有轨电车
WarningTypeEnum.WARNING_TEST_SECTION -> {
warningIconId = R.drawable.icon_warning_v2x_test_section
warningContent = "前方考试路段"
warningTts = "前方考试路段,减速慢行"
}//考试路段
WarningTypeEnum.WARNING_ACCIDENT_PRONE_ROAD_SECTION -> {
warningIconId = R.drawable.icon_warning_v2x_accident_prone_road_section
warningContent = "当前路段事故多发"
warningTts = "当前路段事故多发,请谨慎行驶"
}//事故易发路段
WarningTypeEnum.WARNING_HUMP_BRIDGE -> {
warningIconId = R.drawable.icon_warning_v2x_hump_bridge
warningContent = "前方驼峰桥"
warningTts = "即将驶入桥梁,请减速慢行"
}//驼峰桥
WarningTypeEnum.WARNING_SCHOOL -> {
warningIconId = R.drawable.icon_warning_v2x_school
warningContent = "前方学校,减速慢行"
warningTts = "前方人行横道,请减速慢"
}// 学校
}
return arrayOf(warningIconId, warningContent, warningTts)
}
}

View File

@@ -8,12 +8,12 @@ import android.view.WindowManager
import android.view.animation.OvershootInterpolator
import com.mogo.commons.mvp.MvpFragment
import com.mogo.commons.voice.AIAssist
import com.mogo.module.common.enum.WarningTypeEnum
import com.mogo.module.hmi.R
import com.mogo.module.hmi.notification.WarningFloat
import com.mogo.module.hmi.notification.anim.DefaultAnimator
import com.mogo.module.hmi.notification.enums.SidePattern
import com.mogo.module.hmi.ui.widget.ViewV2XNotification
import com.mogo.module.common.utils.WarningUtils
import kotlinx.android.synthetic.main.fragment_warning.*
/**
@@ -46,15 +46,18 @@ class MoGoWarningFragment : MvpFragment<MoGoWarningContract.View?, WaringPresent
v2xType: Int,
alertContent: String?,
ttsContent: String?,
tag: String?
tag: String?,
) {
activity?.let {
val notificationView = ViewV2XNotification(activity)
notificationView.setWarningIcon(WarningUtils.getWarningIcon(v2xType)[0] as Int)
notificationView.setWarningIcon(WarningTypeEnum.getWarningIcon(v2xType))
notificationView.setWarningContent(
alertContent ?: WarningUtils.getWarningIcon(v2xType)[1] as String
alertContent ?: WarningTypeEnum.getWarningContent(
v2xType
)
)
if (!TextUtils.isEmpty(ttsContent)) {

View File

@@ -2,6 +2,7 @@ package com.mogo.module.obu.mogo
import android.content.Context
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.module.common.enum.WarningTypeEnum
import com.mogo.module.obu.mogo.map.ObuRecognizedResultDrawer
import com.mogo.service.IMogoServiceApis
import com.mogo.service.MogoServicePaths
@@ -28,7 +29,7 @@ class MogoPrivateObuManager private constructor() {
private var mMogoServiceApis: IMogoServiceApis? = null
private var mIMoGoWaringProvider: IMoGoWaringProvider? = null
val icw_data =
"02000114010000000000001effd7892b11a4440af70100142a03000907e506100e2917019000005662010a45000b0000220847162c000037970010000a17f6215c459478b6010347ac045000090a0006012c01f4009600080073007300730073000b000000000000000000000000000000002b000037780000247300003261000000000000426c827f47001200100000000000000000000021220000349a006c0010000a17f63ecb45947ba301030000332c0010000a17f642e945947bea010300004d580010000a17f6435545947e4e0103000054c40010000a17f6413a45947f96010300005c300010000a17f62c2845947d140103000070e40010000a17f5fdb14594786001030000992000060004ffec2710"
"02000114010000000000001effd7892b11a4440af70100142a03000907e506100e2917019000005662010a45000b0000220847162c000037970010000a17f6215c459478b6010347ac045000090a0006012c01f4009600080073007300730073000b000000000000000000000000000000002b000037780000247300003261000000000000426c827f47001200100000000000000000000021220000349a006c0010000a17f63ecb45947ba301030000332c0010000a17f642e945947bea010300004d580010000a17f6435545947e4e0103000054c40010000a17f6413a45947f96010300005c300010000a17f62c2845947d140103000070e40010000a17f5fdb14594786001030000992000060004ffec2710"
// Obu 识别他车绘制
private var mObuRecognizedResultDrawer: ObuRecognizedResultDrawer? = null
@@ -36,7 +37,7 @@ class MogoPrivateObuManager private constructor() {
fun init(context: Context?) {
Logger.d(MogoObuConst.TAG_MOGO_OBU, "obuManager初始化--")
mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS)
.navigation(context) as IMogoServiceApis
.navigation(context) as IMogoServiceApis
// 获取预警模块的接口
mIMoGoWaringProvider = mMogoServiceApis!!.waringProviderApi
@@ -112,6 +113,12 @@ class MogoPrivateObuManager private constructor() {
mObuRecognizedResultDrawer?.addCvxRvInfoIndInfo(info)
}
// 弱势交通预警
override fun onCvxPtcInfoIndInfo(info: CvxPtcInfoIndInfo?) {
super.onCvxPtcInfoIndInfo(info)
}
//TODO 他车是否一直出现
override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo) {
Logger.e(MogoObuConst.TAG_MOGO_OBU, "onCvxV2vThreatIndInfo ------> $info")
@@ -123,21 +130,29 @@ class MogoPrivateObuManager private constructor() {
//显示警告弹框
mMogoServiceApis!!.v2XListenerManager.warningChangedForListenerWithDirection(
getMessage(direction),
"ACTION_V2X_FRONT_WARNING"
getMessageDirection(direction),
"ACTION_V2X_FRONT_WARNING"
)
//处理预警类型
val appId = info.threat_info.app_id
Logger.d(MogoObuConst.TAG_MOGO_OBU, "direction = " + direction + "----" + getMessage(direction) + "--appId = " + appId)
handleSdkObu(getEventType(appId), info.threat_info.threat_level, getMessage(direction), info.status)
Logger.d(
MogoObuConst.TAG_MOGO_OBU,
"direction = " + direction + "----" + getMessageDirection(direction) + "--appId = " + appId
)
handleSdkObu(
appId,
info.threat_info.threat_level,
getMessageDirection(direction),
info.status
)
}
//更新周边车辆进行预警颜色变换,车辆实时移动和变色
mObuRecognizedResultDrawer?.updateCvxRvInfoIndInfo(
info.threat_info.threat_level,
info.vehicle_id,
info.basic_info
info.threat_info.threat_level,
info.vehicle_id,
info.basic_info
)
} else {
Logger.e(MogoObuConst.TAG_MOGO_OBU, "info == null ")
@@ -146,7 +161,10 @@ class MogoPrivateObuManager private constructor() {
}
private fun getMessage(targetClassification: Int): Int {
/**
* 获取消息的方位
*/
private fun getMessageDirection(targetClassification: Int): Int {
return when (targetClassification) {
ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_LEFT,
ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_LEFT -> 1 //左前方
@@ -161,42 +179,6 @@ class MogoPrivateObuManager private constructor() {
}
}
private fun getEventType(appid: Int): Int {
if (appid == ObuConstants.USE_CASE_ID.EBW) { //紧急制动
return MogoObuConst.TYPE_URGENCY_COLLISION_WARNING
} else if (appid == ObuConstants.USE_CASE_ID.ICW) { //交叉路口碰撞预警
return MogoObuConst.TYPE_CROSS_COLLISION_WARNING
} else if (appid == ObuConstants.USE_CASE_ID.LTA) { //左转辅助
return MogoObuConst.TYPE_TURN_LEFT_WARN
} else if (appid == ObuConstants.USE_CASE_ID.BSW || appid == ObuConstants.USE_CASE_ID.LCW) { //盲区预警和变道预警
return MogoObuConst.TYPE_BLIND_ASSIST_WARN
} else if (appid == ObuConstants.USE_CASE_ID.DNPW) { //逆向超车预警
return MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN
} else if (appid == ObuConstants.USE_CASE_ID.FCW) { //前向碰撞预警
return MogoObuConst.TYPE_FRONT_COLLISION_WARNING
} else if (appid == ObuConstants.USE_CASE_ID.AVW) { //异常车辆预警
return MogoObuConst.TYPE_UNUSUAL_CAR_WARN
} else if (appid == ObuConstants.USE_CASE_ID.CLW) { //车辆失控预警
return MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN
} else if (appid == ObuConstants.USE_CASE_ID.SLW) { //限速预警
return MogoObuConst.TYPE_LIMIT_SPEED_WARN
} else if (appid == ObuConstants.USE_CASE_ID.LTA) { //闯红灯预警 ---
return MogoObuConst.TYPE_RUSH_RED_LIGHT
} else if (appid == ObuConstants.USE_CASE_ID.VRUCW) { //行人碰撞预警 ---
return MogoObuConst.TYPE_ROAD_USER_COLLISION_WARNING
} else if (appid == ObuConstants.USE_CASE_ID.LTA) { //绿波车速引导 ---
return MogoObuConst.TYPE_OPTIMAL_SPEED_ADVISORY
} else if (appid == ObuConstants.USE_CASE_ID.HLW) { //道路危险情况预警
return MogoObuConst.TYPE_UNUSUAL_ROAD_WARN
} else if (appid == ObuConstants.USE_CASE_ID.IVS) { //交通标牌提示
return MogoObuConst.TYPE_TRAFFIC_SIGN_INFO
} else if (appid == ObuConstants.USE_CASE_ID.TJW) { //前方拥堵提醒
return MogoObuConst.TYPE_BLOCK_WARN
} else if (appid == ObuConstants.USE_CASE_ID.EVW) { //紧急车辆提示预警
return MogoObuConst.TYPE_PRESSING_CAR_WARN
}
return 0
}
fun release() {
MogoObuManager.getInstance().unregisterListener()
@@ -206,88 +188,116 @@ class MogoPrivateObuManager private constructor() {
/**
* 构造对应展示数据和场景 根据obu的场景add change delete确定是否展示
*
* @param type TODO
* @param useCaseId TODO 这里需要修改成 使用WarningTypeEnum获取icon、提示内容、tts内容
*
* @see com.mogo.module.common.enum.WarningTypeEnum
*/
private fun handleSdkObu(type: Int, level: Int, directe: Int, status: Int) {
var alertContent: String = ""
var ttsContent: String = ""
private fun handleSdkObu(useCaseId: Int, level: Int, direction: Int, status: Int) {
var alertContent = ""
var ttsContent = ""
if (type == MogoObuConst.TYPE_CROSS_COLLISION_WARNING) { //交叉路口碰撞预警
alertContent = MogoObuConst.TYPE_CROSS_COLLISION_WARNING_TEXT
ttsContent = MogoObuConst.TYPE_CROSS_COLLISION_WARNING_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_URGENCY_COLLISION_WARNING) { // 前车紧急制动预警
alertContent = MogoObuConst.TYPE_URGENCY_COLLISION_WARNING_TEXT
ttsContent = MogoObuConst.TYPE_URGENCY_COLLISION_WARNING_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_FRONT_COLLISION_WARNING) { //前车碰撞预警
alertContent = MogoObuConst.TYPE_FRONT_COLLISION_WARNING_TEXT
ttsContent = MogoObuConst.TYPE_FRONT_COLLISION_WARNING_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_TURN_LEFT_WARN) { //左转辅助
alertContent = MogoObuConst.TYPE_TURN_LEFT_WARN_TEXT
ttsContent = MogoObuConst.TYPE_TURN_LEFT_WARN_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_BLIND_ASSIST_WARN) { //盲区预警/变道预警
alertContent = MogoObuConst.TYPE_BLIND_ASSIST_WARN_TEXT
if (directe == 2) {
ttsContent = MogoObuConst.TYPE_BLIND_ASSIST_WARN_VOICE_LEFT_TEXT
} else if (directe == 4) {
ttsContent = MogoObuConst.TYPE_BLIND_ASSIST_WARN_VOICE_RIGHT_TEXT
// TODO 这里排除需要特殊定制的语音及文案外,其余的都可以使用 WarningTypeEnum 提供的
when (useCaseId) {
// 变道预警,注意左后车辆/注意右后车辆
WarningTypeEnum.TYPE_USECASE_ID_LCW.useCaseId -> {
ttsContent = WarningTypeEnum.getWarningTts(useCaseId)
if (direction == 2) {
ttsContent = String.format(ttsContent, "")
} else if (direction == 4) else {
ttsContent = String.format(ttsContent, "")
}
}
} else if (type == MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN) { //逆向超车预警
alertContent = MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN_TEXT
ttsContent = MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_UNUSUAL_CAR_WARN) { //异常车辆预警
alertContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_TEXT
if (directe == 1) {
ttsContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_VOICE_LEFT_TEXT
} else if (directe == 3) {
ttsContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_VOICE_RIGHT_TEXT
} else if (directe == 5) {
ttsContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_VOICE_TEXT
}
} else if (type == MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN) { //前车失控预警
alertContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_TEXT
if (directe == 1) {
ttsContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_LEFT_TEXT
} else if (directe == 3) {
ttsContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_RIGHT_TEXT
} else if (directe == 5) {
ttsContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_TEXT
}
} else if (type == MogoObuConst.TYPE_LIMIT_SPEED_WARN) { //限速预警
alertContent = MogoObuConst.TYPE_LIMIT_SPEED_WARN_TEXT
ttsContent = MogoObuConst.TYPE_LIMIT_SPEED_WARN_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_UNUSUAL_ROAD_WARN) { //道路危险情况预警
alertContent = MogoObuConst.TYPE_UNUSUAL_ROAD_WARN_TEXT
ttsContent = MogoObuConst.TYPE_UNUSUAL_ROAD_WARN_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_BLOCK_WARN) { //前方拥堵提醒 TODO
alertContent = MogoObuConst.TYPE_BLOCK_WARN_TEXT
ttsContent = MogoObuConst.TYPE_BLOCK_WARN_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_PRESSING_CAR_WARN) { //紧急车辆预警
alertContent = MogoObuConst.TYPE_PRESSING_CAR_WARN_TEXT
ttsContent = MogoObuConst.TYPE_PRESSING_CAR_WARN_VOICE_TEXT
} else if (type == MogoObuConst.TYPE_TRAFFIC_SIGN_INFO) { //交通标牌 TODO
// 弱势交通参与者碰撞预警,行人/摩托车碰撞预警 TODO
WarningTypeEnum.TYPE_USECASE_ID_VRUCW.useCaseId -> {
} else if (type == MogoObuConst.TYPE_ROAD_USER_COLLISION_WARNING) { //弱势交通群体 TODO
}
// 前方拥堵提醒,前方XXX米道路拥堵请减速慢行 TODO
WarningTypeEnum.TYPE_USECASE_ID_TJW.useCaseId -> {
} else if (type == MogoObuConst.TYPE_OPTIMAL_SPEED_ADVISORY) { //绿波车速引导 TODO
alertContent = ""
ttsContent = ""
} else if (type == MogoObuConst.TYPE_RUSH_RED_LIGHT) { //闯红灯预警 TODO
alertContent = MogoObuConst.TYPE_RUSH_RED_LIGHT_TEXT
ttsContent = MogoObuConst.TYPE_RUSH_RED_LIGHT_VOICE_TEXT
}
// 这里处理固定的提示信息
else -> {
ttsContent = WarningTypeEnum.getWarningTts(useCaseId)
}
}
//显示弹框,语音提示
if (status == 1) {
if (status == ObuConstants.STATUS.ADD) {
mIMoGoWaringProvider!!.showWarningV2X(
type,
alertContent,
if (level == 3) ttsContent else "",
type.toString()
useCaseId,
alertContent,
if (level == 3) ttsContent else "",
useCaseId.toString()
)
} else if (status == 2) {
mIMoGoWaringProvider!!.disableWarningV2X(type.toString())
} else if (status == ObuConstants.STATUS.DELETE) {
mIMoGoWaringProvider!!.disableWarningV2X(useCaseId.toString())
}
// if (type == WarningTypeEnum.TYPE_USECASE_ID_ICW.useCaseId) { //交叉路口碰撞预警
// alertContent = MogoObuConst.TYPE_CROSS_COLLISION_WARNING_TEXT
// ttsContent = MogoObuConst.TYPE_CROSS_COLLISION_WARNING_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_URGENCY_COLLISION_WARNING) { // 前车紧急制动预警
// alertContent = MogoObuConst.TYPE_URGENCY_COLLISION_WARNING_TEXT
// ttsContent = MogoObuConst.TYPE_URGENCY_COLLISION_WARNING_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_FRONT_COLLISION_WARNING) { //前车碰撞预警
// alertContent = MogoObuConst.TYPE_FRONT_COLLISION_WARNING_TEXT
// ttsContent = MogoObuConst.TYPE_FRONT_COLLISION_WARNING_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_TURN_LEFT_WARN) { //左转辅助
// alertContent = MogoObuConst.TYPE_TURN_LEFT_WARN_TEXT
// ttsContent = MogoObuConst.TYPE_TURN_LEFT_WARN_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_BLIND_ASSIST_WARN) { //盲区预警/变道预警
// alertContent = MogoObuConst.TYPE_BLIND_ASSIST_WARN_TEXT
// if (directe == 2) {
// ttsContent = MogoObuConst.TYPE_BLIND_ASSIST_WARN_VOICE_LEFT_TEXT
// } else if (directe == 4) {
// ttsContent = MogoObuConst.TYPE_BLIND_ASSIST_WARN_VOICE_RIGHT_TEXT
// }
// } else if (type == MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN) { //逆向超车预警
// alertContent = MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN_TEXT
// ttsContent = MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_UNUSUAL_CAR_WARN) { //异常车辆预警
// alertContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_TEXT
// if (directe == 1) {
// ttsContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_VOICE_LEFT_TEXT
// } else if (directe == 3) {
// ttsContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_VOICE_RIGHT_TEXT
// } else if (directe == 5) {
// ttsContent = MogoObuConst.TYPE_UNUSUAL_CAR_WARN_VOICE_TEXT
// }
// } else if (type == MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN) { //前车失控预警
// alertContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_TEXT
// if (directe == 1) {
// ttsContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_LEFT_TEXT
// } else if (directe == 3) {
// ttsContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_RIGHT_TEXT
// } else if (directe == 5) {
// ttsContent = MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_TEXT
// }
// } else if (type == MogoObuConst.TYPE_LIMIT_SPEED_WARN) { //限速预警
// alertContent = MogoObuConst.TYPE_LIMIT_SPEED_WARN_TEXT
// ttsContent = MogoObuConst.TYPE_LIMIT_SPEED_WARN_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_UNUSUAL_ROAD_WARN) { //道路危险情况预警
// alertContent = MogoObuConst.TYPE_UNUSUAL_ROAD_WARN_TEXT
// ttsContent = MogoObuConst.TYPE_UNUSUAL_ROAD_WARN_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_BLOCK_WARN) { //前方拥堵提醒 TODO
// alertContent = MogoObuConst.TYPE_BLOCK_WARN_TEXT
// ttsContent = MogoObuConst.TYPE_BLOCK_WARN_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_PRESSING_CAR_WARN) { //紧急车辆预警
// alertContent = MogoObuConst.TYPE_PRESSING_CAR_WARN_TEXT
// ttsContent = MogoObuConst.TYPE_PRESSING_CAR_WARN_VOICE_TEXT
// } else if (type == MogoObuConst.TYPE_TRAFFIC_SIGN_INFO) { //交通标牌 TODO
//
// } else if (type == MogoObuConst.TYPE_ROAD_USER_COLLISION_WARNING) { //弱势交通群体 TODO
//
// } else if (type == MogoObuConst.TYPE_OPTIMAL_SPEED_ADVISORY) { //绿波车速引导 TODO
// alertContent = ""
// ttsContent = ""
// } else if (type == MogoObuConst.TYPE_RUSH_RED_LIGHT) { //闯红灯预警 TODO
// alertContent = MogoObuConst.TYPE_RUSH_RED_LIGHT_TEXT
// ttsContent = MogoObuConst.TYPE_RUSH_RED_LIGHT_VOICE_TEXT
// }
}
}