From 01d1f42eb57c44a466101389aef28fef68210b9b Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 8 Nov 2022 17:55:39 +0800 Subject: [PATCH] =?UTF-8?q?2.11.1=20=E6=B7=BB=E5=8A=A0=E6=96=B0=E8=80=81ob?= =?UTF-8?q?u=E7=9A=84=E5=85=BC=E5=AE=B9=EF=BC=8C=E9=BB=98=E8=AE=A4ip?= =?UTF-8?q?=E9=83=BD=E4=B8=8D=E9=9C=80=E8=A6=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../mogo-core-function-obu-mogo/build.gradle | 1 + .../core/function/obu/mogo/MoGoObuProvider.kt | 73 +- .../obu/mogo/MogoPrivateObuManager.kt | 1748 +++++++++-------- .../obu/mogo/MogoPrivateObuNewManager.kt | 15 +- .../obu/mogo/utils/TrafficDataConvertUtils.kt | 240 +-- .../mogo/module/common/enums/EventTypeEnum.kt | 39 +- 7 files changed, 1094 insertions(+), 1024 deletions(-) diff --git a/config.gradle b/config.gradle index b5f1468f25..1ce4ee01f0 100644 --- a/config.gradle +++ b/config.gradle @@ -112,7 +112,7 @@ ext { // obu sdk obusdk : "com.zhidao.enterprise.smartv2x:smartv2x:1.0.0.3", -// mogoobu : 'com.zhidao.support.obu:mogoobu:1.0.0.33', + mogoobuold : 'com.zhidao.support.obu:mogoobu:1.0.0.33', mogoobu : 'com.mogo.support.obu:mogo-obu:1.0.0', mogoami : 'com.zhidao.support.obu.ami:mogoami:1.0.0.24', diff --git a/core/function-impl/mogo-core-function-obu-mogo/build.gradle b/core/function-impl/mogo-core-function-obu-mogo/build.gradle index 7b8a0e75df..4c4e538ab2 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/build.gradle +++ b/core/function-impl/mogo-core-function-obu-mogo/build.gradle @@ -66,6 +66,7 @@ dependencies { implementation project(':core:mogo-core-function-call') } + implementation rootProject.ext.dependencies.mogoobuold implementation rootProject.ext.dependencies.mogoobu } diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt index 9c852227d5..64730fbfac 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt @@ -3,12 +3,14 @@ package com.mogo.eagle.core.function.obu.mogo import android.content.Context import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.obu.IMoGoObuProvider import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.util.CommonUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler @@ -44,31 +46,62 @@ class MoGoObuProvider : IMoGoObuProvider { //不处理 } else { mContext = context -// val thread = object : Thread() { -// override fun run() { - mContext?.let { - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - busObuIp, - CommonUtils.getIpAddressString() - ) - } else if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - taxiObuIp, - CommonUtils.getIpAddressString() - ) - } - } -// } -// }.start() + mContext?.let { + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { //bus 司机端 + //mogo obu + MogoPrivateObuNewManager.INSTANCE.connectObu( + it, + busObuIp, + CommonUtils.getIpAddressString() + ) + + //old obu + val ipAddress = + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, busObuIp) + MogoPrivateObuManager.INSTANCE.init(context, ipAddress) + + } else if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { //taxi 司机端和乘客端 + //mogo obu + MogoPrivateObuNewManager.INSTANCE.connectObu( + it, + taxiObuIp, + CommonUtils.getIpAddressString() + ) + + //old obu + val ipAddress = + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) + MogoPrivateObuManager.INSTANCE.init(context, ipAddress) + } + } } } + /** + * 通过控制面板设置ip,进行传递 + */ override fun connect(ipAddress: String) { + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger( + FunctionBuildConfig.appIdentityMode + ) + ) { + //不处理 + } else { + mContext?.let { + // 保存本地OBU IP地址 + SharedPrefsMgr.getInstance(it).putString(MoGoConfig.OBU_IP, ipAddress) + //连接 mogo obu + MogoPrivateObuNewManager.INSTANCE.connectObu( + it, + ipAddress, + CommonUtils.getIpAddressString() + ) + + //连接old obu + MogoPrivateObuManager.INSTANCE.connectObu(it, ipAddress) + } + } } - } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt index 7b5ca673dc..3d90fedd0d 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt @@ -1,33 +1,34 @@ package com.mogo.eagle.core.function.obu.mogo -//import android.content.Context -//import com.alibaba.android.arouter.launcher.ARouter -//import com.mogo.cloud.passport.MoGoAiCloudClientConfig -//import com.mogo.eagle.core.data.app.AppConfigInfo -//import com.mogo.eagle.core.data.config.FunctionBuildConfig -//import com.mogo.eagle.core.data.constants.MogoServicePaths -//import com.mogo.eagle.core.data.enums.WarningDirectionEnum -//import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener -//import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager -//import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -//import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager -//import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager -//import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Default -//import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.TooClose -//import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager -//import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtils -//import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -//import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU -//import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr -//import com.mogo.module.common.drawer.TrafficMarkerDrawer -//import com.mogo.module.common.enums.EventTypeEnum -//import com.mogo.service.IMogoServiceApis -//import com.zhidao.support.obu.MogoObuManager -//import com.zhidao.support.obu.OnMogoObuListener -//import com.zhidao.support.obu.constants.ObuConstants -//import com.zhidao.support.obu.model.* -//import com.zhidao.support.obu.model.advance.Light -//import org.json.JSONObject +import android.content.Context +import android.util.Log +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.data.enums.WarningDirectionEnum +import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager +import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Default +import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.TooClose +import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager +import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import com.mogo.module.common.drawer.TrafficMarkerDrawer +import com.mogo.module.common.enums.EventTypeEnum +import com.mogo.service.IMogoServiceApis +import com.zhidao.support.obu.MogoObuManager +import com.zhidao.support.obu.OnMogoObuListener +import com.zhidao.support.obu.constants.ObuConstants +import com.zhidao.support.obu.model.* +import com.zhidao.support.obu.model.advance.Light +import org.json.JSONObject /** * @@ -42,861 +43,866 @@ class MogoPrivateObuManager private constructor() { } } -// private var mMogoServiceApis: IMogoServiceApis? = null -// private var mContext: Context? = null -// private var mObuStatusInfo = CallerObuListenerManager.getObuStatusInfo() -// -// fun init(context: Context, ipAddress: String) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "obuManager初始化--") -// mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS) -// .navigation(context) as IMogoServiceApis -// mContext = context -// connectObu(context, ipAddress) -// //控制日志输出 -// MogoObuManager.getInstance().init(MoGoAiCloudClientConfig.getInstance().getSn(), AppConfigInfo.toString()) -// MogoObuManager.getInstance().registerListener(mogoObuListener) -// } -// -// fun connectObu(context: Context, ipAddress: String) { -// //自研obu初始化 -// mObuStatusInfo.connectIP = ipAddress -// mObuStatusInfo.obuSdkVersion = MogoObuManager.getInstance().versionName -// -// if (!MogoObuManager.getInstance().isConnected) { -// MogoObuManager.getInstance().connect(context, mObuStatusInfo.connectIP) -// } else { -// MogoObuManager.getInstance().disConnect() -// try { -// Thread.sleep(500) -// MogoObuManager.getInstance().connect(context, mObuStatusInfo.connectIP) -// } catch (e: Exception) { -// e.printStackTrace() -// } -// } -// } -// -// private val mogoObuListener: OnMogoObuListener = object : OnMogoObuListener() { -// // OBU连接成功 -// override fun onConnected() { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnected ------> ") -// mObuStatusInfo.obuStatus = true -// CallerObuListenerManager.invokeListener(mObuStatusInfo) -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", true) } -// } -// -// // OBU连接失败 -// override fun onConnectFail(isNeedReconnect: Boolean) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnectFail ------> ") -// mObuStatusInfo.obuStatus = false -// mObuStatusInfo.obuHvStatus = false -// mObuStatusInfo.obuRvStatus = false -// CallerObuListenerManager.invokeListener(mObuStatusInfo) -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) } -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } -// } -// -// // OBU断开连接 -// override fun onDisconnect() { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onDisconnect ------> ") -// mObuStatusInfo.obuStatus = false -// mObuStatusInfo.obuHvStatus = false -// mObuStatusInfo.obuRvStatus = false -// CallerObuListenerManager.invokeListener(mObuStatusInfo) -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) } -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } -// } -// -// // 接收到的原始数据 -// override fun onReceiveOriginData(data: String) { -// super.onReceiveOriginData(data) -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onReceiveOriginData ------> data = $data") -// -// } -// -// // 发送的数据 -// override fun onSendData(bytes: ByteArray) { -// super.onSendData(bytes) -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onSendData ------> ") -// } -// -// // CV2X系统信息 -// override fun onCvxAppInitIndInfo(info: CvxAppInitIndInfo) { -// super.onCvxAppInitIndInfo(info) -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxAppInitIndInfo ------> $info") + private var mMogoServiceApis: IMogoServiceApis? = null + private var mContext: Context? = null + private var mObuStatusInfo = CallerObuListenerManager.getObuStatusInfo() + + fun init(context: Context, ipAddress: String) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "obuManager初始化--") + mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS) + .navigation(context) as IMogoServiceApis + mContext = context + //连接obu设备 + connectObu(context, ipAddress) + //控制日志输出 + MogoObuManager.getInstance().init(MoGoAiCloudClientConfig.getInstance().getSn(), AppConfigInfo.toString()) + MogoObuManager.getInstance().registerListener(mogoObuListener) + } + + fun connectObu(context: Context, ipAddress: String) { + //自研obu初始化 + mObuStatusInfo.connectIP = ipAddress + mObuStatusInfo.obuSdkVersion = MogoObuManager.getInstance().versionName + + if (!MogoObuManager.getInstance().isConnected) { + MogoObuManager.getInstance().connect(context, mObuStatusInfo.connectIP) + } else { + try { + MogoObuManager.getInstance().disConnect() + Thread.sleep(500) + MogoObuManager.getInstance().connect(context, mObuStatusInfo.connectIP) + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + private val mogoObuListener: OnMogoObuListener = object : OnMogoObuListener() { + // OBU连接成功 + override fun onConnected() { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnected ------> ") + Log.d("liyz", "old onConnected -----> ") + mObuStatusInfo.obuStatus = true + CallerObuListenerManager.invokeListener(mObuStatusInfo) + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", true) } + + //断开mogo obu + com.mogo.support.obu.MogoObuManager.getInstance().disconnect() + } + + // OBU连接失败 + override fun onConnectFail(isNeedReconnect: Boolean) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnectFail ------> ") + Log.d("liyz", "old onConnectFail -----> ") + mObuStatusInfo.obuStatus = false + mObuStatusInfo.obuHvStatus = false + mObuStatusInfo.obuRvStatus = false + CallerObuListenerManager.invokeListener(mObuStatusInfo) + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) } + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } + } + + // OBU断开连接 + override fun onDisconnect() { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onDisconnect ------> ") + mObuStatusInfo.obuStatus = false + mObuStatusInfo.obuHvStatus = false + mObuStatusInfo.obuRvStatus = false + CallerObuListenerManager.invokeListener(mObuStatusInfo) + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) } + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } + } + + // 接收到的原始数据 + override fun onReceiveOriginData(data: String) { + super.onReceiveOriginData(data) + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onReceiveOriginData ------> data = $data") + + } + + // 发送的数据 + override fun onSendData(bytes: ByteArray) { + super.onSendData(bytes) + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onSendData ------> ") + } + + // CV2X系统信息 + override fun onCvxAppInitIndInfo(info: CvxAppInitIndInfo) { + super.onCvxAppInitIndInfo(info) + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxAppInitIndInfo ------> $info") + if (info != null) { + if (!info.stack_info.isNullOrEmpty()) { + mObuStatusInfo.stackInfo = info.stack_info + } + + if (!info.app_info.isNullOrEmpty()) { + mObuStatusInfo.appInfo = info.app_info + } + + if (!info.hli_info.isNullOrEmpty()) { + mObuStatusInfo.hliInfo = info.hli_info + } + CallerObuListenerManager.invokeListener(mObuStatusInfo) + } + } + + // (2) 车辆信息:CVX_HV_INFO_IND + override fun onCvxHvInfoIndInfo(info: CvxHvInfoIndInfo?) { + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", true) } + mObuStatusInfo.obuHvStatus = true + CallerObuListenerManager.invokeListener(mObuStatusInfo) + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxHvInfoIndInfo ------> $info") + if (info != null && info.basic_info != null && info.basic_info.position != null) { + val movingObjectInfo = info.basic_info + val position = movingObjectInfo.position + val data = JSONObject() + try { + data.putOpt("lon", position.longitude) + data.putOpt("lat", position.latitude) + data.putOpt("speed", movingObjectInfo.speed) + data.putOpt("heading", movingObjectInfo.heading) + if (info.acceleration_set != null) { + data.putOpt("acceleration", info.acceleration_set.lateral) + data.putOpt("yawRate", info.acceleration_set.yaw_rate) + } + try { + data.putOpt("systemTime", System.currentTimeMillis()) + } catch (e: Exception) { + e.printStackTrace() + } + try { + data.putOpt("satelliteTime", System.currentTimeMillis()) + } catch (e: Exception) { + e.printStackTrace() + } + + // 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统,1-工控机,2-OBU + if (2 == FunctionBuildConfig.gpsProvider) { + // 同步给MAP地图 + CallerMapUIServiceManager.getMapUIController()?.syncLocation2Map(data) + // 同步更新经纬度和系统时间至 AutoPilotStatusListener + CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon(System.currentTimeMillis()/1000.0,position.longitude, position.latitude) + } + + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + // (3) 远车信息:CVX_RV_INFO_IND + override fun onCvxRvInfoIndInfo(info: CvxRvInfoIndInfo) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxRvInfoIndInfo ------> $info") + mObuStatusInfo.obuRvStatus = true + CallerObuListenerManager.invokeListener(mObuStatusInfo) + mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", true) } + // 更新数据 + TrafficDataConvertUtils.cvxRvInfoIndInfo2TrafficData(info)?.let { + TrafficMarkerDrawer.updateITrafficLocationInfo(it) + } + } + + // (3) 道路事件预警信息:CVX_RTI_THREAT_IND + override fun onCvxRtiThreatIndInfo(info: CvxRtiThreatIndInfo?) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxRtiThreatIndInfo ------> $info") + + if (info != null && info.threat_info != null && info.ext_info != null) { + var alertContent = "" + var ttsContent = "" + var appId = info.threat_info.app_id.toString() + val status = info.status + val level = info.threat_info.threat_level + val direction = + getMessageDirection(if (info.ext_info != null) info.ext_info.pos_classification else -1) + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxRtiThreatIndInfo direction = $direction -- pos_classification = ${info.ext_info.pos_classification}" + ) + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxRtiThreatIndInfo appId = $appId --status = $status --level = $level -- handleDirection = $direction --rtiType = ${info.ext_info.rti_type} --direction = $direction -- pos_classification = ${info.ext_info.pos_classification} " + ) + when (appId) { + // 道路危险情况预警 + EventTypeEnum.TYPE_USECASE_ID_HLW.poiType, + EventTypeEnum.TYPE_USECASE_ID_IVS.poiType + -> { + when (info.ext_info.rti_type) { + //急转弯 + 0x2 -> { + // 特殊处理左、右方向的 + when (direction) { + WarningDirectionEnum.ALERT_WARNING_LEFT, + WarningDirectionEnum.ALERT_WARNING_TOP_LEFT, + WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT -> { + appId = + EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType + } + WarningDirectionEnum.ALERT_WARNING_RIGHT, + WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT, + WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT -> { + appId = + EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType + } + } + } + //施工 + 0x7 -> { + appId = EventTypeEnum.FOURS_ROAD_WORK.poiType + } + //限速 + 0xA -> { + appId = EventTypeEnum.TYPE_USECASE_ID_SLW.poiType + } + //事故 + 0xC -> { + appId = + EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType + } + //拥堵 + 0xD -> { + appId = EventTypeEnum.TYPE_USECASE_ID_TJW.poiType + } + //行人 + 0xF -> { + appId = + EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType + } + //禁止停车 + 0x13 -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_NO_PARKING.poiType + } + //学校 + 0x14 -> { + appId = + EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType + } + //桥梁 + 0x17 -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType + } + //轻轨电车 + 0x18 -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_TRAMCAR.poiType + } + //人行横道 + 0x19 -> { + appId = + EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType + } + //减速慢行 + 0x1A -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType + } + //事故易发路段 + 0x1B -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType + } + //环岛行驶 + 0x1C -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_ROUNDABOUTPNG.poiType + } + //环岛行驶 + 0x1D -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_TEST_SECTION.poiType + } + //驼峰桥 + 0x1E -> { + appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType + } + } + alertContent = EventTypeEnum.getWarningContent(appId) + ttsContent = EventTypeEnum.getWarningTts(appId) + } + // 前方拥堵提醒 + EventTypeEnum.TYPE_USECASE_ID_TJW.poiType -> { + ttsContent = EventTypeEnum.getWarningTts(appId) + if (info.threat_info != null) { + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "ttsContent = $ttsContent --alertContent = $alertContent ---info.threat_info.distance = ${info.threat_info.distance} " + ) + if (info.threat_info.distance.toInt() != 0) { + alertContent = String.format( + EventTypeEnum.getWarningContent(appId), + info.threat_info.distance.toInt() + ) + } else { + alertContent = "前方拥堵,减速慢行" + } + } + + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "ttsContent = $ttsContent --alertContent = $alertContent" + ) + } + } + + when (status) { + // 添加 + ObuConstants.STATUS.ADD, + ObuConstants.STATUS.UPDATE// 更新 + -> { + //显示警告红边 TODO 需要确定是什么值 +// CallerHmiManager.showWarning(direction) + + //显示弹框,语音提示 + CallerHmiManager.showWarningV2X(appId, + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + object : IMoGoWarningStatusListener { + override fun onDismiss() { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + } + }, + true, + 5000L + ) + // 更新数据 + TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { + TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) + } + } + // 删除 + ObuConstants.STATUS.DELETE -> { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + // 移除顶部弹窗 + CallerHmiManager.disableWarningV2X((appId + direction.direction).toString()) + // 更新数据 + TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { + // 事件结束,还原车辆颜色 + it.threatLevel = 0x01 + TrafficMarkerDrawer.updateITrafficInfo(it) + } + } + } + } + + } + + // (4) V2I预警信息:CVX_IVP_THREAT_IND,红绿灯 + override fun onCvxIvpThreatIndInfo(info: CvxIvpThreatIndInfo?) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "CvxIvpThreatIndInfo ------> $info") + if (info != null && info.ext_info != null + && info.threat_info != null + && info.ext_info.lights != null + && info.ext_info.lights.isNotEmpty() + ) { + //v2i数据传输延迟 +// val hvMillTime = info.threat_info.hv_time.millisecond +// val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 +// val hvTime = hvMillTime + hvSecondMillTime +// val currentTime = TimeUtils.getNowMills() % 60000 +// val delayTime = currentTime - hvTime + +// CallerObuListenerManager.invokeDelayTime(delayTime) +// CallerLogger.e( +// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", +// "onCvxIvpThreatIndInfo red ---delayTime---> $delayTime" +// ) + + handlerTrafficLight( + info.threat_info.app_id, + info.status, + info.ext_info.lights, + info.ext_info.index + ) + } + } + + // (2) 弱势交通参与者预警信息:CVX_PTC_THREAT_IND + override fun onCvxPtcThreatIndInfo(info: CvxPtcThreatIndInfo?) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxPtcInfoIndInfo ------> $info") + // 交通参与者类型 0x0:未知 UNKNOWN | 0x1:非机动车 NON_MOTOR | 0x2:行人 PEDESTRIAN 0x3:RSU + if (info != null && (info.ptc_type == 1 || info.ptc_type == 2)) { + //v2i数据传输延迟 +// val hvMillTime = info.threat_info.hv_time.millisecond +// val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 +// val hvTime = hvMillTime + hvSecondMillTime +// val currentTime = TimeUtils.getNowMills() % 60000 +// val delayTime = currentTime - hvTime + +// CallerObuListenerManager.invokeDelayTime(delayTime) +// CallerLogger.d( +// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", +// "onCvxPtcInfoIndInfo ---delayTime---> $delayTime" +// ) + + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxPtcInfoIndInfo ---status---> ${info.status}" + ) + var v2xType = "" + if (info.ptc_type == 1) { //摩托车 + v2xType = EventTypeEnum.TYPE_USECASE_ID_VRUCW_MOTORBIKE.poiType + } else if (info.ptc_type == 2) { //行人 + v2xType = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType + } + val ttsContent = EventTypeEnum.getWarningTts(v2xType) + val alertContent = EventTypeEnum.getWarningContent(v2xType) + val direction = + getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) + val level = if (info.threat_info != null) info.threat_info.threat_level else -1 + + when (info.status) { + // 添加 + ObuConstants.STATUS.ADD, + ObuConstants.STATUS.UPDATE// 更新 + -> { +// if (level == 2 || level == 3) { //不考虑level + //显示警告红边 + CallerHmiManager.showWarning(direction) + CallerHmiManager.showWarningV2X(v2xType, + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + (v2xType + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + object : IMoGoWarningStatusListener { + override fun onDismiss() { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + } + }, + true, + 5000L + ) +// } + // 更新数据 + TrafficDataConvertUtils.cvxPtcThreatIndInfo2TrafficData(info)?.let { + TrafficMarkerDrawer.updateITrafficInfo(it) + } + } + // 删除 + ObuConstants.STATUS.DELETE -> { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + // 更新数据 + TrafficDataConvertUtils.cvxPtcThreatIndInfo2TrafficData(info)?.let { + // 事件结束,还原交通参与者颜色 + it.threatLevel = 0x01 + TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) + } + CallerHmiManager.disableWarningV2X(ObuConstants.USE_CASE_ID.VRUCW.toString()) + } + } + + } + + } + + // (5) 限速预警信息:CVX_SLW_THREAT_IND + override fun onCvxSlwThreatIndInfo(info: CvxSlwThreatIndInfo?) { + //todo 限速走高精地图 屏蔽OBU限速\ +// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxSlwThreatIndInfo ------> $info") // if (info != null) { -// if (!info.stack_info.isNullOrEmpty()) { -// mObuStatusInfo.stackInfo = info.stack_info -// } -// -// if (!info.app_info.isNullOrEmpty()) { -// mObuStatusInfo.appInfo = info.app_info -// } -// -// if (!info.hli_info.isNullOrEmpty()) { -// mObuStatusInfo.hliInfo = info.hli_info -// } -// CallerObuListenerManager.invokeListener(mObuStatusInfo) -// } -// } -// -// // (2) 车辆信息:CVX_HV_INFO_IND -// override fun onCvxHvInfoIndInfo(info: CvxHvInfoIndInfo?) { -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", true) } -// mObuStatusInfo.obuHvStatus = true -// CallerObuListenerManager.invokeListener(mObuStatusInfo) -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxHvInfoIndInfo ------> $info") -// if (info != null && info.basic_info != null && info.basic_info.position != null) { -// val movingObjectInfo = info.basic_info -// val position = movingObjectInfo.position -// val data = JSONObject() -// try { -// data.putOpt("lon", position.longitude) -// data.putOpt("lat", position.latitude) -// data.putOpt("speed", movingObjectInfo.speed) -// data.putOpt("heading", movingObjectInfo.heading) -// if (info.acceleration_set != null) { -// data.putOpt("acceleration", info.acceleration_set.lateral) -// data.putOpt("yawRate", info.acceleration_set.yaw_rate) -// } -// try { -// data.putOpt("systemTime", System.currentTimeMillis()) -// } catch (e: Exception) { -// e.printStackTrace() -// } -// try { -// data.putOpt("satelliteTime", System.currentTimeMillis()) -// } catch (e: Exception) { -// e.printStackTrace() -// } -// -// // 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统,1-工控机,2-OBU -// if (2 == FunctionBuildConfig.gpsProvider) { -// // 同步给MAP地图 -// CallerMapUIServiceManager.getMapUIController()?.syncLocation2Map(data) -// // 同步更新经纬度和系统时间至 AutoPilotStatusListener -// CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon(System.currentTimeMillis()/1000.0,position.longitude, position.latitude) -// } -// -// } catch (e: Exception) { -// e.printStackTrace() -// } -// } -// -// } -// -// // (3) 远车信息:CVX_RV_INFO_IND -// override fun onCvxRvInfoIndInfo(info: CvxRvInfoIndInfo) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxRvInfoIndInfo ------> $info") -// mObuStatusInfo.obuRvStatus = true -// CallerObuListenerManager.invokeListener(mObuStatusInfo) -// mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", true) } -// // 更新数据 -// TrafficDataConvertUtils.cvxRvInfoIndInfo2TrafficData(info)?.let { -// TrafficMarkerDrawer.updateITrafficLocationInfo(it) -// } -// } -// -// // (3) 道路事件预警信息:CVX_RTI_THREAT_IND -// override fun onCvxRtiThreatIndInfo(info: CvxRtiThreatIndInfo?) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxRtiThreatIndInfo ------> $info") -// -// if (info != null && info.threat_info != null && info.ext_info != null) { -// var alertContent = "" -// var ttsContent = "" -// var appId = info.threat_info.app_id.toString() -// val status = info.status -// val level = info.threat_info.threat_level -// val direction = -// getMessageDirection(if (info.ext_info != null) info.ext_info.pos_classification else -1) -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "onCvxRtiThreatIndInfo direction = $direction -- pos_classification = ${info.ext_info.pos_classification}" -// ) -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "onCvxRtiThreatIndInfo appId = $appId --status = $status --level = $level -- handleDirection = $direction --rtiType = ${info.ext_info.rti_type} --direction = $direction -- pos_classification = ${info.ext_info.pos_classification} " -// ) -// when (appId) { -// // 道路危险情况预警 -// EventTypeEnum.TYPE_USECASE_ID_HLW.poiType, -// EventTypeEnum.TYPE_USECASE_ID_IVS.poiType -// -> { -// when (info.ext_info.rti_type) { -// //急转弯 -// 0x2 -> { -// // 特殊处理左、右方向的 -// when (direction) { -// WarningDirectionEnum.ALERT_WARNING_LEFT, -// WarningDirectionEnum.ALERT_WARNING_TOP_LEFT, -// WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT -> { -// appId = -// EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -// } -// WarningDirectionEnum.ALERT_WARNING_RIGHT, -// WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT, -// WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT -> { -// appId = -// EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -// } -// } -// } -// //施工 -// 0x7 -> { -// appId = EventTypeEnum.FOURS_ROAD_WORK.poiType -// } -// //限速 -// 0xA -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_SLW.poiType -// } -// //事故 -// 0xC -> { -// appId = -// EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType -// } -// //拥堵 -// 0xD -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_TJW.poiType -// } -// //行人 -// 0xF -> { -// appId = -// EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType -// } -// //禁止停车 -// 0x13 -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_NO_PARKING.poiType -// } -// //学校 -// 0x14 -> { -// appId = -// EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType -// } -// //桥梁 -// 0x17 -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType -// } -// //轻轨电车 -// 0x18 -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_TRAMCAR.poiType -// } -// //人行横道 -// 0x19 -> { -// appId = -// EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType -// } -// //减速慢行 -// 0x1A -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -// } -// //事故易发路段 -// 0x1B -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType -// } -// //环岛行驶 -// 0x1C -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_ROUNDABOUTPNG.poiType -// } -// //环岛行驶 -// 0x1D -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_TEST_SECTION.poiType -// } -// //驼峰桥 -// 0x1E -> { -// appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType -// } -// } -// alertContent = EventTypeEnum.getWarningContent(appId) -// ttsContent = EventTypeEnum.getWarningTts(appId) -// } -// // 前方拥堵提醒 -// EventTypeEnum.TYPE_USECASE_ID_TJW.poiType -> { -// ttsContent = EventTypeEnum.getWarningTts(appId) -// if (info.threat_info != null) { -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "ttsContent = $ttsContent --alertContent = $alertContent ---info.threat_info.distance = ${info.threat_info.distance} " -// ) -// if (info.threat_info.distance.toInt() != 0) { -// alertContent = String.format( -// EventTypeEnum.getWarningContent(appId), -// info.threat_info.distance.toInt() -// ) -// } else { -// alertContent = "前方拥堵,减速慢行" -// } -// } -// -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "ttsContent = $ttsContent --alertContent = $alertContent" -// ) -// } -// } -// -// when (status) { -// // 添加 -// ObuConstants.STATUS.ADD, -// ObuConstants.STATUS.UPDATE// 更新 -// -> { -// //显示警告红边 TODO 需要确定是什么值 -//// CallerHmiManager.showWarning(direction) -// -// //显示弹框,语音提示 -// CallerHmiManager.showWarningV2X(appId, -// alertContent, -// ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 -// (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 -// object : IMoGoWarningStatusListener { -// override fun onDismiss() { -// // 关闭警告红边 -// CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) -// } -// }, -// true, -// 5000L -// ) -// // 更新数据 -// TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { -// TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) -// } -// } -// // 删除 -// ObuConstants.STATUS.DELETE -> { -// // 关闭警告红边 -// CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) -// // 移除顶部弹窗 -// CallerHmiManager.disableWarningV2X((appId + direction.direction).toString()) -// // 更新数据 -// TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { -// // 事件结束,还原车辆颜色 -// it.threatLevel = 0x01 -// TrafficMarkerDrawer.updateITrafficInfo(it) -// } -// } -// } -// } -// -// } -// -// // (4) V2I预警信息:CVX_IVP_THREAT_IND,红绿灯 -// override fun onCvxIvpThreatIndInfo(info: CvxIvpThreatIndInfo?) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "CvxIvpThreatIndInfo ------> $info") -// if (info != null && info.ext_info != null -// && info.threat_info != null -// && info.ext_info.lights != null -// && info.ext_info.lights.isNotEmpty() -// ) { -// //v2i数据传输延迟 -//// val hvMillTime = info.threat_info.hv_time.millisecond -//// val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 -//// val hvTime = hvMillTime + hvSecondMillTime -//// val currentTime = TimeUtils.getNowMills() % 60000 -//// val delayTime = currentTime - hvTime -// -//// CallerObuListenerManager.invokeDelayTime(delayTime) -//// CallerLogger.e( -//// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -//// "onCvxIvpThreatIndInfo red ---delayTime---> $delayTime" -//// ) -// -// handlerTrafficLight( -// info.threat_info.app_id, -// info.status, -// info.ext_info.lights, -// info.ext_info.index -// ) -// } -// } -// -// // (2) 弱势交通参与者预警信息:CVX_PTC_THREAT_IND -// override fun onCvxPtcThreatIndInfo(info: CvxPtcThreatIndInfo?) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxPtcInfoIndInfo ------> $info") -// // 交通参与者类型 0x0:未知 UNKNOWN | 0x1:非机动车 NON_MOTOR | 0x2:行人 PEDESTRIAN 0x3:RSU -// if (info != null && (info.ptc_type == 1 || info.ptc_type == 2)) { -// //v2i数据传输延迟 -//// val hvMillTime = info.threat_info.hv_time.millisecond -//// val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 -//// val hvTime = hvMillTime + hvSecondMillTime -//// val currentTime = TimeUtils.getNowMills() % 60000 -//// val delayTime = currentTime - hvTime -// -//// CallerObuListenerManager.invokeDelayTime(delayTime) -//// CallerLogger.d( -//// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -//// "onCvxPtcInfoIndInfo ---delayTime---> $delayTime" -//// ) -// -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "onCvxPtcInfoIndInfo ---status---> ${info.status}" -// ) -// var v2xType = "" -// if (info.ptc_type == 1) { //摩托车 -// v2xType = EventTypeEnum.TYPE_USECASE_ID_VRUCW_MOTORBIKE.poiType -// } else if (info.ptc_type == 2) { //行人 -// v2xType = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType -// } -// val ttsContent = EventTypeEnum.getWarningTts(v2xType) -// val alertContent = EventTypeEnum.getWarningContent(v2xType) -// val direction = -// getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) -// val level = if (info.threat_info != null) info.threat_info.threat_level else -1 -// // when (info.status) { // // 添加 // ObuConstants.STATUS.ADD, -// ObuConstants.STATUS.UPDATE// 更新 +// ObuConstants.STATUS.UPDATE // -> { -//// if (level == 2 || level == 3) { //不考虑level -// //显示警告红边 -// CallerHmiManager.showWarning(direction) -// CallerHmiManager.showWarningV2X(v2xType, -// alertContent, -// ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 -// (v2xType + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 -// object : IMoGoWarningStatusListener { -// override fun onDismiss() { -// // 关闭警告红边 -// CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) -// } -// }, -// true, -// 5000L -// ) -//// } -// // 更新数据 -// TrafficDataConvertUtils.cvxPtcThreatIndInfo2TrafficData(info)?.let { -// TrafficMarkerDrawer.updateITrafficInfo(it) +// if (info.ext_info != null) { +// // 计算为千米每小时 TODO 这里需要做一下向上取整数,40,60,80,120等 +// CallerLogger.d( +// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", +// "info.ext_info.speed_limit_max ------> ${info.ext_info.speed_limit_max}" +// ) +// CallerHmiManager.showLimitingVelocity((Math.round(((info.ext_info.speed_limit_max * 60 * 60) / 1000) / 10) * 10).toInt()) // } // } // // 删除 // ObuConstants.STATUS.DELETE -> { -// // 关闭警告红边 -// CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) -// // 更新数据 -// TrafficDataConvertUtils.cvxPtcThreatIndInfo2TrafficData(info)?.let { -// // 事件结束,还原交通参与者颜色 -// it.threatLevel = 0x01 -// TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) -// } -// CallerHmiManager.disableWarningV2X(ObuConstants.USE_CASE_ID.VRUCW.toString()) +// CallerHmiManager.disableLimitingVelocity() // } // } -// // } -// -// } -// -// // (5) 限速预警信息:CVX_SLW_THREAT_IND -// override fun onCvxSlwThreatIndInfo(info: CvxSlwThreatIndInfo?) { -// //todo 限速走高精地图 屏蔽OBU限速\ -//// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxSlwThreatIndInfo ------> $info") -//// if (info != null) { -//// when (info.status) { -//// // 添加 -//// ObuConstants.STATUS.ADD, -//// ObuConstants.STATUS.UPDATE -//// -> { -//// if (info.ext_info != null) { -//// // 计算为千米每小时 TODO 这里需要做一下向上取整数,40,60,80,120等 -//// CallerLogger.d( -//// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -//// "info.ext_info.speed_limit_max ------> ${info.ext_info.speed_limit_max}" -//// ) -//// CallerHmiManager.showLimitingVelocity((Math.round(((info.ext_info.speed_limit_max * 60 * 60) / 1000) / 10) * 10).toInt()) -//// } -//// } -//// // 删除 -//// ObuConstants.STATUS.DELETE -> { -//// CallerHmiManager.disableLimitingVelocity() -//// } -//// } -//// } -// } -// -// -// // (1) V2V预警信息:CVX_V2V_THREAT_IND -// override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo?) { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxV2vThreatIndInfo ------> $info") -// info?.let { -// //预警信息,预警类型 threat_level 2、3 -// info.threat_info?.let { -// //预警方位 -// val direction = getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) -// //处理预警类型 -// val appId = info.threat_info.app_id -// val level = info.threat_info.threat_level -// val status = info.status -// if (info.ext_info != null) { -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "onCvxV2vThreatIndInfo target_classification = ${ -// getMessageDirection(info.ext_info.target_classification) -// } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" -// ) -// } -// -// handleSdkObu(appId, direction, status, level, info) -// } -// } -// } -// } -// -// /** -// * 返回OBU监听 -// */ -// fun getMogoObuListener(): OnMogoObuListener { -// return mogoObuListener -// } -// -// /** -// * 获取消息的方位 车辆相关 -// */ -// private fun getMessageDirection(targetClassification: Int): WarningDirectionEnum { -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "预警红边:预警方向->$targetClassification") -// return when (targetClassification) { -// ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_IN_LANE, -// ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_IN_LANE, -// 0x04 -> WarningDirectionEnum.ALERT_WARNING_TOP //正前方 -// -// 0x03 -> WarningDirectionEnum.ALERT_WARNING_RIGHT //正右方 -// -// ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_IN_LANE, -// 0x05 -> WarningDirectionEnum.ALERT_WARNING_BOTTOM //正后方 -// -// 0x02 -> WarningDirectionEnum.ALERT_WARNING_LEFT //正左方 -// -// ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_LEFT, -// ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_LEFT, -// ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_LEFT, -// ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_LEFT, -// ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_LEFT -> WarningDirectionEnum.ALERT_WARNING_TOP_LEFT //左前方 -// -// ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_RIGHT, -// ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_RIGHT, -// ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_RIGHT, -// ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_RIGHT, -// ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_RIGHT -> WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT //右前方 -// -// ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_LEFT, -// ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_LEFT -> WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT //左后方 -// -// ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_RIGHT, -// ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_RIGHT -> WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT //右后方 -// -// ObuConstants.TARGET_CLASSIFICATION.TC_UNCLASSIFIED -> WarningDirectionEnum.ALERT_WARNING_NON //未知 -// else -> WarningDirectionEnum.ALERT_WARNING_ALL -// } -// } -// -// fun release() { -// MogoObuManager.getInstance().unregisterListener() -// } -// -// /** -// * 处理红绿灯 -// */ -// private fun handlerTrafficLight(appId: Int, status: Int, lights: List, index: Int) { -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "handlerTrafficLight appId = $appId --- status = $status ---index = $index ---lights.size = ${lights.size} ---lights = $lights " -// ) -// when (status) { -// // 添加 -// ObuConstants.STATUS.ADD, -// ObuConstants.STATUS.UPDATE -// -> { -// changeTrafficLightStatus(appId, lights, index) -// } -// // 删除 -// ObuConstants.STATUS.DELETE -> { -// // 移除顶部弹窗 -// CallerHmiManager.disableWarningTrafficLight() -// CallerHmiManager.disableWarningV2X(appId.toString()) -// } -// } -// } -// -// private var isRedLight = false -// private var isGreenLight = false -// -// /** -// * 修改红绿灯 -// */ -// @Synchronized -// private fun changeTrafficLightStatus( -// appId: Int, -// lights: List, -// index: Int -// ) { -// var ttsContent = "" -// var alertContent = "" -// //这里需要根据真实数据确定 index 取值方式 -// if (index != -1 && lights.size >= index) { -// val currentLight = lights[index] -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "currentLight = $currentLight ---currentLight.phase = ${currentLight.phase} ---rlvw_violation_type = ${currentLight.rlvw_violation_type} --- index = $index ---appId = $appId ---appId = $appId" -// ) -// // 闯红灯预警 -// when (currentLight.rlvw_violation_type) { -// 0x0 -> {//不可用 V2I_RLVW_VIOLATION_TYPE_UNAVAILABLE -// } -// 0x1 -> {//无违规 V2I_RLVW_VIOLATION_TYPE_NO_VIOLATION -// CallerHmiManager.disableWarningV2X(appId.toString()) -// } -// 0x2 -> {//闯红灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_RED_LIGHT -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// CallerHmiManager.showWarningV2X( -// appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 -// appId.toString(), null, true, 5000L -// ) -// } -// 0x3 -> {//闯黄灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_YELLOW_LIGHT -// } -// } -// -// when (currentLight.phase) { -// // 灯光不可用 -// 0x0 -> { -// CallerHmiManager.showWarningTrafficLight(0,2) -// } -// // 红灯 -// 0x1 -> { -// if (!isRedLight) { -// CallerHmiManager.disableWarningV2X(appId.toString()) -// isRedLight = true -// } -// isGreenLight = false -// CallerHmiManager.showWarningTrafficLight(1,2) -// -// val red = currentLight.count_down.toInt() -// CallerHmiManager.changeCountdownRed(red) -// CallerHmiManager.changeCountdownGreen(0) -// CallerHmiManager.changeCountdownYellow(0) -// -// } -// // 绿灯 -// 0x2 -> { -// if (!isGreenLight) { -// CallerHmiManager.disableWarningV2X(appId.toString()) -// isGreenLight = true -// } -// isRedLight = false -// CallerHmiManager.showWarningTrafficLight(3,2) -// val green = currentLight.count_down.toInt() -// CallerHmiManager.changeCountdownGreen(green) -// //防止数据出现问题的容错 -// CallerHmiManager.changeCountdownRed(0) -// CallerHmiManager.changeCountdownYellow(0) -// // 拼接建议速度 -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "speed_min = ${currentLight.glosa_suggested_speed_min} --speed_max = ${currentLight.glosa_suggested_speed_max.toInt()}" -// ) -// val adviceSpeed = -// "${currentLight.glosa_suggested_speed_min.toInt()} - ${currentLight.glosa_suggested_speed_max.toInt()}" -// -// val adviceSpeedTts = -// "${currentLight.glosa_suggested_speed_min.toInt()}到${currentLight.glosa_suggested_speed_max.toInt()}" -// -// ttsContent = -// String.format( -// EventTypeEnum.getWarningTts(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), -// adviceSpeedTts -// ) -// -// alertContent = -// String.format( -// EventTypeEnum.getWarningContent(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), -// adviceSpeed -// ) -// -// val maxSpeed = currentLight.glosa_suggested_speed_max.toInt() -// if (maxSpeed > 0) { -// CallerHmiManager.showWarningV2X( -// EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType, -// alertContent, -// ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 -// appId.toString(), -// null, -// true, -// 5000L -// ) -// } -// } -// // 黄灯 -// 0x3 -> { -// CallerHmiManager.disableWarningV2X(appId.toString()) -// CallerHmiManager.showWarningTrafficLight(2,2) -// val yellow = currentLight.count_down.toInt() -// CallerHmiManager.changeCountdownYellow(yellow) -// CallerHmiManager.changeCountdownGreen(0) -// CallerHmiManager.changeCountdownRed(0) -// } -// } -// } -// -// } -// -// -// /** -// * 构造对应展示数据和场景 根据obu的场景,add change delete确定是否展示 -// * -// * @param appId 使用WarningTypeEnum获取icon、提示内容、tts内容 -// * -// * @see com.mogo.module.common.enums.EventTypeEnum -// */ -// private fun handleSdkObu( -// appId: Int, -// direction: WarningDirectionEnum, -// status: Int, -// level: Int, -// info: CvxV2vThreatIndInfo -// ) { -// // 这里排除需要特殊定制的语音及文案外,其余的都可以使用 EventTypeEnum 提供的 -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "handleSdkObu appId = $appId --- handleDirection = $direction ---level = $level ---status = $status" -// ) -// var alertContent: String -// var ttsContent: String -// var changeVisualAngle = false -// when (appId.toString()) { -// // 变道预警,注意左后车辆/注意右后车辆 -// EventTypeEnum.TYPE_USECASE_ID_LCW.poiType -> { -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// if ( -// direction == WarningDirectionEnum.ALERT_WARNING_LEFT || -// direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || -// direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT -// ) { -// ttsContent = String.format(ttsContent, "左") -// alertContent = String.format(alertContent, "左") -// } else if ( -// direction == WarningDirectionEnum.ALERT_WARNING_RIGHT || -// direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || -// direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT -// ) { -// ttsContent = String.format(ttsContent, "右") -// alertContent = String.format(alertContent, "右") -// } -// } -// -// //车辆失控预警 -// EventTypeEnum.TYPE_USECASE_ID_CLW.poiType -> { -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// -// alertContent = String.format(alertContent, direction.desc) -// ttsContent = String.format(ttsContent, direction.desc) -// } -// -// //左转辅助 -// EventTypeEnum.TYPE_USECASE_ID_LTA.poiType -> { -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// } -// -// //异常车辆提醒 -// EventTypeEnum.TYPE_USECASE_ID_AVW.poiType -> { -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// alertContent = String.format(alertContent, direction.desc) -// ttsContent = String.format(ttsContent, direction.desc) -// } -// -// //盲区预警 -// EventTypeEnum.TYPE_USECASE_ID_BSW.poiType -> { -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// -// if ( -// direction == WarningDirectionEnum.ALERT_WARNING_LEFT || -// direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || -// direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT -// ) { //左后 -// changeVisualAngle = true -// ttsContent = String.format(ttsContent, "左") -// alertContent = String.format(alertContent, "左") -// } else if ( -// direction == WarningDirectionEnum.ALERT_WARNING_RIGHT || -// direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || -// direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT -// ) { //右后 -// changeVisualAngle = true -// ttsContent = String.format(ttsContent, "右") -// alertContent = String.format(alertContent, "右") -// } -// } -// -// // 这里处理固定的提示信息,包括了<紧急车辆提醒> -// else -> { -// ttsContent = EventTypeEnum.getWarningTts(appId.toString()) -// alertContent = EventTypeEnum.getWarningContent(appId.toString()) -// } -// } -// -// when (status) { -// // 添加,更新 add的时候,可能级别是2, -// ObuConstants.STATUS.ADD, -// ObuConstants.STATUS.UPDATE -> { -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" -// ) -// if (level == 2 || level == 3) { -// //显示弹框,语音提示 -// CallerHmiManager.showWarningV2X(appId.toString(), -// alertContent, -// ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 -// (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 -// object : IMoGoWarningStatusListener { -// -// override fun onShow() { -// super.onShow() -// if (changeVisualAngle) { -// CallerVisualAngleManager.changeVisualAngle(TooClose) -// } -// } -// -// override fun onDismiss() { -// // 关闭警告红边 -// CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) -// if (changeVisualAngle) { -// CallerVisualAngleManager.changeVisualAngle(Default()) -// } -// } -// }, -// true, -// 5000L -// ) -// //显示警告红边 -// CallerHmiManager.showWarning(direction) -// } -// //更新周边车辆进行预警颜色变换,车辆实时移动和变色 -// TrafficDataConvertUtils.cvxV2vThreatIndInfo2TrafficData(info)?.let { -// TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) -// } -// } -// // 删除 -// ObuConstants.STATUS.DELETE -> { -// // 关闭警告红边 -// CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) -// // 移除顶部弹窗 -// CallerHmiManager.disableWarningV2X((appId + direction.direction).toString()) -// //更新周边车辆进行预警颜色变换,车辆实时移动和变色 -// TrafficDataConvertUtils.cvxV2vThreatIndInfo2TrafficData(info)?.let { -// it.threatLevel = 0x01 -// TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) -// } -// } -// } -// } + } + + + // (1) V2V预警信息:CVX_V2V_THREAT_IND + override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo?) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxV2vThreatIndInfo ------> $info") + info?.let { + //预警信息,预警类型 threat_level 2、3 + info.threat_info?.let { + //预警方位 + val direction = getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) + //处理预警类型 + val appId = info.threat_info.app_id + val level = info.threat_info.threat_level + val status = info.status + if (info.ext_info != null) { + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxV2vThreatIndInfo target_classification = ${ + getMessageDirection(info.ext_info.target_classification) + } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" + ) + } + + handleSdkObu(appId, direction, status, level, info) + } + } + } + } + + /** + * 返回OBU监听 + */ + fun getMogoObuListener(): OnMogoObuListener { + return mogoObuListener + } + + /** + * 获取消息的方位 车辆相关 + */ + private fun getMessageDirection(targetClassification: Int): WarningDirectionEnum { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "预警红边:预警方向->$targetClassification") + return when (targetClassification) { + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_IN_LANE, + ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_IN_LANE, + 0x04 -> WarningDirectionEnum.ALERT_WARNING_TOP //正前方 + + 0x03 -> WarningDirectionEnum.ALERT_WARNING_RIGHT //正右方 + + ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_IN_LANE, + 0x05 -> WarningDirectionEnum.ALERT_WARNING_BOTTOM //正后方 + + 0x02 -> WarningDirectionEnum.ALERT_WARNING_LEFT //正左方 + + ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_LEFT, + ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_LEFT, + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_LEFT, + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_LEFT, + ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_LEFT -> WarningDirectionEnum.ALERT_WARNING_TOP_LEFT //左前方 + + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_RIGHT, + ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_RIGHT, + ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_RIGHT, + ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_RIGHT, + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_RIGHT -> WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT //右前方 + + ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_LEFT, + ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_LEFT -> WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT //左后方 + + ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_RIGHT, + ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_RIGHT -> WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT //右后方 + + ObuConstants.TARGET_CLASSIFICATION.TC_UNCLASSIFIED -> WarningDirectionEnum.ALERT_WARNING_NON //未知 + else -> WarningDirectionEnum.ALERT_WARNING_ALL + } + } + + fun release() { + MogoObuManager.getInstance().unregisterListener() + } + + /** + * 处理红绿灯 + */ + private fun handlerTrafficLight(appId: Int, status: Int, lights: List, index: Int) { + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "handlerTrafficLight appId = $appId --- status = $status ---index = $index ---lights.size = ${lights.size} ---lights = $lights " + ) + when (status) { + // 添加 + ObuConstants.STATUS.ADD, + ObuConstants.STATUS.UPDATE + -> { + changeTrafficLightStatus(appId, lights, index) + } + // 删除 + ObuConstants.STATUS.DELETE -> { + // 移除顶部弹窗 + CallerHmiManager.disableWarningTrafficLight() + CallerHmiManager.disableWarningV2X(appId.toString()) + } + } + } + + private var isRedLight = false + private var isGreenLight = false + + /** + * 修改红绿灯 + */ + @Synchronized + private fun changeTrafficLightStatus( + appId: Int, + lights: List, + index: Int + ) { + var ttsContent = "" + var alertContent = "" + //这里需要根据真实数据确定 index 取值方式 + if (index != -1 && lights.size >= index) { + val currentLight = lights[index] + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "currentLight = $currentLight ---currentLight.phase = ${currentLight.phase} ---rlvw_violation_type = ${currentLight.rlvw_violation_type} --- index = $index ---appId = $appId ---appId = $appId" + ) + // 闯红灯预警 + when (currentLight.rlvw_violation_type) { + 0x0 -> {//不可用 V2I_RLVW_VIOLATION_TYPE_UNAVAILABLE + } + 0x1 -> {//无违规 V2I_RLVW_VIOLATION_TYPE_NO_VIOLATION + CallerHmiManager.disableWarningV2X(appId.toString()) + } + 0x2 -> {//闯红灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_RED_LIGHT + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + CallerHmiManager.showWarningV2X( + appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + appId.toString(), null, true, 5000L + ) + } + 0x3 -> {//闯黄灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_YELLOW_LIGHT + } + } + + when (currentLight.phase) { + // 灯光不可用 + 0x0 -> { + CallerHmiManager.showWarningTrafficLight(0,2) + } + // 红灯 + 0x1 -> { + if (!isRedLight) { + CallerHmiManager.disableWarningV2X(appId.toString()) + isRedLight = true + } + isGreenLight = false + CallerHmiManager.showWarningTrafficLight(1,2) + + val red = currentLight.count_down.toInt() + CallerHmiManager.changeCountdownRed(red) + CallerHmiManager.changeCountdownGreen(0) + CallerHmiManager.changeCountdownYellow(0) + + } + // 绿灯 + 0x2 -> { + if (!isGreenLight) { + CallerHmiManager.disableWarningV2X(appId.toString()) + isGreenLight = true + } + isRedLight = false + CallerHmiManager.showWarningTrafficLight(3,2) + val green = currentLight.count_down.toInt() + CallerHmiManager.changeCountdownGreen(green) + //防止数据出现问题的容错 + CallerHmiManager.changeCountdownRed(0) + CallerHmiManager.changeCountdownYellow(0) + // 拼接建议速度 + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "speed_min = ${currentLight.glosa_suggested_speed_min} --speed_max = ${currentLight.glosa_suggested_speed_max.toInt()}" + ) + val adviceSpeed = + "${currentLight.glosa_suggested_speed_min.toInt()} - ${currentLight.glosa_suggested_speed_max.toInt()}" + + val adviceSpeedTts = + "${currentLight.glosa_suggested_speed_min.toInt()}到${currentLight.glosa_suggested_speed_max.toInt()}" + + ttsContent = + String.format( + EventTypeEnum.getWarningTts(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), + adviceSpeedTts + ) + + alertContent = + String.format( + EventTypeEnum.getWarningContent(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), + adviceSpeed + ) + + val maxSpeed = currentLight.glosa_suggested_speed_max.toInt() + if (maxSpeed > 0) { + CallerHmiManager.showWarningV2X( + EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType, + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + appId.toString(), + null, + true, + 5000L + ) + } + } + // 黄灯 + 0x3 -> { + CallerHmiManager.disableWarningV2X(appId.toString()) + CallerHmiManager.showWarningTrafficLight(2,2) + val yellow = currentLight.count_down.toInt() + CallerHmiManager.changeCountdownYellow(yellow) + CallerHmiManager.changeCountdownGreen(0) + CallerHmiManager.changeCountdownRed(0) + } + } + } + + } + + + /** + * 构造对应展示数据和场景 根据obu的场景,add change delete确定是否展示 + * + * @param appId 使用WarningTypeEnum获取icon、提示内容、tts内容 + * + * @see com.mogo.module.common.enums.EventTypeEnum + */ + private fun handleSdkObu( + appId: Int, + direction: WarningDirectionEnum, + status: Int, + level: Int, + info: CvxV2vThreatIndInfo + ) { + // 这里排除需要特殊定制的语音及文案外,其余的都可以使用 EventTypeEnum 提供的 + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "handleSdkObu appId = $appId --- handleDirection = $direction ---level = $level ---status = $status" + ) + var alertContent: String + var ttsContent: String + var changeVisualAngle = false + when (appId.toString()) { + // 变道预警,注意左后车辆/注意右后车辆 + EventTypeEnum.TYPE_USECASE_ID_LCW.poiType -> { + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + if ( + direction == WarningDirectionEnum.ALERT_WARNING_LEFT || + direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || + direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT + ) { + ttsContent = String.format(ttsContent, "左") + alertContent = String.format(alertContent, "左") + } else if ( + direction == WarningDirectionEnum.ALERT_WARNING_RIGHT || + direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || + direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT + ) { + ttsContent = String.format(ttsContent, "右") + alertContent = String.format(alertContent, "右") + } + } + + //车辆失控预警 + EventTypeEnum.TYPE_USECASE_ID_CLW.poiType -> { + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + + alertContent = String.format(alertContent, direction.desc) + ttsContent = String.format(ttsContent, direction.desc) + } + + //左转辅助 + EventTypeEnum.TYPE_USECASE_ID_LTA.poiType -> { + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + } + + //异常车辆提醒 + EventTypeEnum.TYPE_USECASE_ID_AVW.poiType -> { + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + alertContent = String.format(alertContent, direction.desc) + ttsContent = String.format(ttsContent, direction.desc) + } + + //盲区预警 + EventTypeEnum.TYPE_USECASE_ID_BSW.poiType -> { + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + + if ( + direction == WarningDirectionEnum.ALERT_WARNING_LEFT || + direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || + direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT + ) { //左后 + changeVisualAngle = true + ttsContent = String.format(ttsContent, "左") + alertContent = String.format(alertContent, "左") + } else if ( + direction == WarningDirectionEnum.ALERT_WARNING_RIGHT || + direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || + direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT + ) { //右后 + changeVisualAngle = true + ttsContent = String.format(ttsContent, "右") + alertContent = String.format(alertContent, "右") + } + } + + // 这里处理固定的提示信息,包括了<紧急车辆提醒> + else -> { + ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + alertContent = EventTypeEnum.getWarningContent(appId.toString()) + } + } + + when (status) { + // 添加,更新 add的时候,可能级别是2, + ObuConstants.STATUS.ADD, + ObuConstants.STATUS.UPDATE -> { + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" + ) + if (level == 2 || level == 3) { + //显示弹框,语音提示 + CallerHmiManager.showWarningV2X(appId.toString(), + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + object : IMoGoWarningStatusListener { + + override fun onShow() { + super.onShow() + if (changeVisualAngle) { + CallerVisualAngleManager.changeVisualAngle(TooClose) + } + } + + override fun onDismiss() { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + if (changeVisualAngle) { + CallerVisualAngleManager.changeVisualAngle(Default()) + } + } + }, + true, + 5000L + ) + //显示警告红边 + CallerHmiManager.showWarning(direction) + } + //更新周边车辆进行预警颜色变换,车辆实时移动和变色 + TrafficDataConvertUtils.cvxV2vThreatIndInfo2TrafficData(info)?.let { + TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) + } + } + // 删除 + ObuConstants.STATUS.DELETE -> { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + // 移除顶部弹窗 + CallerHmiManager.disableWarningV2X((appId + direction.direction).toString()) + //更新周边车辆进行预警颜色变换,车辆实时移动和变色 + TrafficDataConvertUtils.cvxV2vThreatIndInfo2TrafficData(info)?.let { + it.threatLevel = 0x01 + TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it) + } + } + } + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index bf2e565702..f6aeccbb59 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -50,7 +50,7 @@ class MogoPrivateObuNewManager private constructor() { fun connectObu(context: Context, obuIpAddress: String, padIpAddress: String) { MogoObuManager.getInstance().registerMogoObuListener(mogoObuListener) - Log.d(TAG, "obuIpAddress = $obuIpAddress ----- padIpAddress = $padIpAddress") + Log.d(TAG, "MogoPrivateObuNewManager obuIpAddress = $obuIpAddress ----- padIpAddress = $padIpAddress") val com = MogoObuCom.newBuilder() .setLocalIp(padIpAddress) .setComType(MogoObuComType.UDP) @@ -82,7 +82,7 @@ class MogoPrivateObuNewManager private constructor() { */ override fun onConnectStatus(connectStatus: Int) { if (connectStatus == 0) { //断开连接 - Log.d(TAG, "onConnectFail ------> ") + Log.d(TAG, "new onConnectFail ------> ") CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnectFail ------> ") mObuStatusInfo.obuStatus = false mObuStatusInfo.obuHvStatus = false @@ -92,11 +92,20 @@ class MogoPrivateObuNewManager private constructor() { mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } } else if (connectStatus == 1) { //连接成功 - Log.d(TAG, "onConnected ------> ") + Log.d(TAG, "new onConnected ------> ") CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnected ------> ") mObuStatusInfo.obuStatus = true CallerObuListenerManager.invokeListener(mObuStatusInfo) mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", true) } + + //断开老obu + try { + com.zhidao.support.obu.MogoObuManager.getInstance().disConnect() + } catch (e: Exception) { + e.printStackTrace() + } + } else { + Log.d(TAG, "new connectStatus ------> $connectStatus ") } } diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt index b88ffe939f..8e94bc8bc6 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt @@ -1,14 +1,14 @@ package com.mogo.eagle.core.function.obu.mogo.utils -//import com.mogo.eagle.core.data.traffic.TrafficData -//import com.mogo.eagle.core.data.enums.TrafficTypeEnum -//import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -//import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU -//import com.zhidao.support.obu.constants.ObuConstants -//import com.zhidao.support.obu.model.CvxPtcThreatIndInfo -//import com.zhidao.support.obu.model.CvxRtiThreatIndInfo -//import com.zhidao.support.obu.model.CvxRvInfoIndInfo -//import com.zhidao.support.obu.model.CvxV2vThreatIndInfo +import com.mogo.eagle.core.data.traffic.TrafficData +import com.mogo.eagle.core.data.enums.TrafficTypeEnum +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU +import com.zhidao.support.obu.constants.ObuConstants +import com.zhidao.support.obu.model.CvxPtcThreatIndInfo +import com.zhidao.support.obu.model.CvxRtiThreatIndInfo +import com.zhidao.support.obu.model.CvxRvInfoIndInfo +import com.zhidao.support.obu.model.CvxV2vThreatIndInfo /** * @author xiaoyuzhou @@ -17,117 +17,117 @@ package com.mogo.eagle.core.function.obu.mogo.utils object TrafficDataConvertUtils { val TAG = "TrafficDataConvertUtils" -// /** -// * OBU 远车 转换交通元素数据 -// */ -// fun cvxRvInfoIndInfo2TrafficData(info: CvxRvInfoIndInfo): TrafficData? { -// if (info.basic_info == null || info.basic_info.position == null) { -// CallerLogger.e("$M_OBU$TAG", "cvxRvInfoIndInfo2TrafficData 数据转换异常,请检查参数是否齐全") -// return null -// } -// val trafficData = TrafficData() -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE -// trafficData.uuid = info.vehicle_id -// trafficData.lat = info.basic_info.position.latitude -// trafficData.lon = info.basic_info.position.longitude -// trafficData.heading = info.basic_info.heading -// trafficData.speed = info.basic_info.speed -// -// return trafficData -// } -// -// /** -// * OBU RSU道路事件预警信息 转换交通元素数据 -// */ -// fun cvxRtiThreatIndInfo2TrafficData(info: CvxRtiThreatIndInfo): TrafficData? { -// // 这里只处理道路施工 -// if(info.ext_info.rti_type != 0x7){ -// return null -// } -// if (info.rti_id == null || info.ext_info == null -// || info.zones_info == null || info.zones_info.first() == null -// || info.zones_info.first().path_points.first() == null -// || info.threat_info == null -// ) { -// CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") -// return null -// } -// val trafficData = TrafficData() -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_DAO_LU_SHI_GONG -// trafficData.uuid = info.rti_id -// -// trafficData.lat = info.zones_info.first().path_points.first().latitude -// trafficData.lon = info.zones_info.first().path_points.first().longitude -// -// trafficData.threatLevel = info.threat_info.threat_level -// -// return trafficData -// } -// -// /** -// * OBU 预警事件 转换交通元素数据 -// */ -// fun cvxV2vThreatIndInfo2TrafficData(info: CvxV2vThreatIndInfo): TrafficData? { -// if (info.basic_info == null || info.basic_info.position == null || info.threat_info == null) { -// CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") -// return null -// } -// val trafficData = TrafficData() -// trafficData.uuid = info.vehicle_id -// trafficData.lat = info.basic_info.position.latitude -// trafficData.lon = info.basic_info.position.longitude -// trafficData.heading = info.basic_info.heading -// trafficData.speed = info.basic_info.speed -// // 判断车辆V2X预警级别,调整车辆颜色 -// trafficData.threatLevel = info.threat_info.threat_level -// -// if (info.threat_info.app_id == ObuConstants.USE_CASE_ID.EVW) { -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_SPECIAL_VEHICLE -// } else { -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE -// } -// -// return trafficData -// } -// -// /** -// * OBU 弱势交通参与者信息 转换交通元素数据 TODO -// */ -// fun cvxPtcThreatIndInfo2TrafficData(info: CvxPtcThreatIndInfo): TrafficData? { -// if (info.ptc_pos == null || info.threat_info == null) { -// CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") -// return null -// } -// val trafficData = TrafficData() -// -// trafficData.uuid = info.ptc_id -// trafficData.lat = info.ptc_pos.latitude -// trafficData.lon = info.ptc_pos.longitude -//// trafficData.heading = info.ptc_pos.heading -//// trafficData.speed = info.ptc_pos.speed -// -// when (info.ptc_type) { -// // 未知 -// 0x0 -> { -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI -// } -// // 非机动车 -// 0x1 -> { -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO -// } -// // 行人 -// 0x2 -> { -// trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE -// } -// } -// -// // 判断车辆V2X预警级别,调整车辆颜色 -// if (info.threat_info != null) { -// trafficData.threatLevel = info.threat_info.threat_level -// } -// -// return trafficData -// } + /** + * OBU 远车 转换交通元素数据 + */ + fun cvxRvInfoIndInfo2TrafficData(info: CvxRvInfoIndInfo): TrafficData? { + if (info.basic_info == null || info.basic_info.position == null) { + CallerLogger.e("$M_OBU$TAG", "cvxRvInfoIndInfo2TrafficData 数据转换异常,请检查参数是否齐全") + return null + } + val trafficData = TrafficData() + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE + trafficData.uuid = info.vehicle_id + trafficData.lat = info.basic_info.position.latitude + trafficData.lon = info.basic_info.position.longitude + trafficData.heading = info.basic_info.heading + trafficData.speed = info.basic_info.speed + + return trafficData + } + + /** + * OBU RSU道路事件预警信息 转换交通元素数据 + */ + fun cvxRtiThreatIndInfo2TrafficData(info: CvxRtiThreatIndInfo): TrafficData? { + // 这里只处理道路施工 + if(info.ext_info.rti_type != 0x7){ + return null + } + if (info.rti_id == null || info.ext_info == null + || info.zones_info == null || info.zones_info.first() == null + || info.zones_info.first().path_points.first() == null + || info.threat_info == null + ) { + CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") + return null + } + val trafficData = TrafficData() + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_DAO_LU_SHI_GONG + trafficData.uuid = info.rti_id + + trafficData.lat = info.zones_info.first().path_points.first().latitude + trafficData.lon = info.zones_info.first().path_points.first().longitude + + trafficData.threatLevel = info.threat_info.threat_level + + return trafficData + } + + /** + * OBU 预警事件 转换交通元素数据 + */ + fun cvxV2vThreatIndInfo2TrafficData(info: CvxV2vThreatIndInfo): TrafficData? { + if (info.basic_info == null || info.basic_info.position == null || info.threat_info == null) { + CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") + return null + } + val trafficData = TrafficData() + trafficData.uuid = info.vehicle_id + trafficData.lat = info.basic_info.position.latitude + trafficData.lon = info.basic_info.position.longitude + trafficData.heading = info.basic_info.heading + trafficData.speed = info.basic_info.speed + // 判断车辆V2X预警级别,调整车辆颜色 + trafficData.threatLevel = info.threat_info.threat_level + + if (info.threat_info.app_id == ObuConstants.USE_CASE_ID.EVW) { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_SPECIAL_VEHICLE + } else { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE + } + + return trafficData + } + + /** + * OBU 弱势交通参与者信息 转换交通元素数据 TODO + */ + fun cvxPtcThreatIndInfo2TrafficData(info: CvxPtcThreatIndInfo): TrafficData? { + if (info.ptc_pos == null || info.threat_info == null) { + CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") + return null + } + val trafficData = TrafficData() + + trafficData.uuid = info.ptc_id + trafficData.lat = info.ptc_pos.latitude + trafficData.lon = info.ptc_pos.longitude +// trafficData.heading = info.ptc_pos.heading +// trafficData.speed = info.ptc_pos.speed + + when (info.ptc_type) { + // 未知 + 0x0 -> { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI + } + // 非机动车 + 0x1 -> { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO + } + // 行人 + 0x2 -> { + trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE + } + } + + // 判断车辆V2X预警级别,调整车辆颜色 + if (info.threat_info != null) { + trafficData.threatLevel = info.threat_info.threat_level + } + + return trafficData + } } \ No newline at end of file diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt index 0341a13771..5d3ce7d2c5 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt @@ -196,6 +196,27 @@ enum class EventTypeEnum( content = "逆向超车预警", tts = "注意对向来车" ), + TYPE_USECASE_ID_ROAD_GIVE_WAY( + 0x2C11.toString(), + "减速慢行", + poiTypeSrcVr = R.drawable.icon_warning_v2x_give_way, + content = "注意路况复杂,减速慢行", + tts = "路况复杂,减速慢行" + ), + TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP( + 0x2C03.toString(), + "前方右转急弯", + poiTypeSrcVr = R.drawable.icon_warning_v2x_turn_right_sharp, + content = "注意前方右转急弯", + tts = "前方路口右转急弯,减速慢行" + ), + TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP( + 0x2C02.toString(), + "前方左转急弯", + poiTypeSrcVr = R.drawable.icon_warning_v2x_turn_left_sharp, + content = "注意前方左转急弯", + tts = "前方路口左转急弯,减速慢行", + ), //TODO TYPE_USECASE_ID_VRUCW_PERSON( @@ -737,8 +758,8 @@ enum class EventTypeEnum( TYPE_USECASE_ID_IVP_GREEN.poiType -> TYPE_USECASE_ID_IVP_GREEN.poiTypeSrcVr // TYPE_USECASE_ID_COC.poiType -> TYPE_USECASE_ID_COC.poiTypeSrcVr TYPE_USECASE_ID_ROAD_TRAMCAR.poiType -> TYPE_USECASE_ID_ROAD_TRAMCAR.poiTypeSrcVr -// TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiTypeSrcVr -// TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiTypeSrcVr + TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiTypeSrcVr + TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiTypeSrcVr TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType -> TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiTypeSrcVr TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType -> TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiTypeSrcVr TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType -> TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiTypeSrcVr @@ -746,7 +767,7 @@ enum class EventTypeEnum( TYPE_USECASE_ID_ROAD_TEST_SECTION.poiType -> TYPE_USECASE_ID_ROAD_TEST_SECTION.poiTypeSrcVr TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType -> TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiTypeSrcVr TYPE_USECASE_ID_ROAD_NO_PARKING.poiType -> TYPE_USECASE_ID_ROAD_NO_PARKING.poiTypeSrcVr -// TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -> TYPE_USECASE_ID_ROAD_GIVE_WAY.poiTypeSrcVr + TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -> TYPE_USECASE_ID_ROAD_GIVE_WAY.poiTypeSrcVr TYPE_VIP_IDENTIFICATION.poiType -> TYPE_VIP_IDENTIFICATION.poiTypeSrcVr TYPE_ERROR.poiType -> TYPE_ERROR.poiTypeSrcVr TYPE_OPTIMAL_ROUTE_RECOMMEND.poiType -> TYPE_OPTIMAL_ROUTE_RECOMMEND.poiTypeSrcVr @@ -779,8 +800,8 @@ enum class EventTypeEnum( TYPE_USECASE_ID_IVP_GREEN.poiType -> TYPE_USECASE_ID_IVP_GREEN.content // TYPE_USECASE_ID_COC.poiType -> TYPE_USECASE_ID_COC.content TYPE_USECASE_ID_ROAD_TRAMCAR.poiType -> TYPE_USECASE_ID_ROAD_TRAMCAR.content -// TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.content -// TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.content + TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.content + TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.content TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType -> TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.content TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType -> TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.content TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType -> TYPE_USECASE_ID_ROAD_COLLISION_WARNING.content @@ -788,7 +809,7 @@ enum class EventTypeEnum( TYPE_USECASE_ID_ROAD_TEST_SECTION.poiType -> TYPE_USECASE_ID_ROAD_TEST_SECTION.content TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType -> TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.content TYPE_USECASE_ID_ROAD_NO_PARKING.poiType -> TYPE_USECASE_ID_ROAD_NO_PARKING.content -// TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -> TYPE_USECASE_ID_ROAD_GIVE_WAY.content + TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -> TYPE_USECASE_ID_ROAD_GIVE_WAY.content TYPE_VIP_IDENTIFICATION.poiType -> TYPE_VIP_IDENTIFICATION.content FOURS_ROAD_WORK.poiType -> FOURS_ROAD_WORK.content AI_ROAD_WORK.poiType -> AI_ROAD_WORK.content @@ -822,8 +843,8 @@ enum class EventTypeEnum( TYPE_USECASE_ID_IVP_GREEN.poiType -> TYPE_USECASE_ID_IVP_GREEN.tts // TYPE_USECASE_ID_COC.poiType -> TYPE_USECASE_ID_COC.tts TYPE_USECASE_ID_ROAD_TRAMCAR.poiType -> TYPE_USECASE_ID_ROAD_TRAMCAR.tts -// TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.tts -// TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.tts + TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.tts + TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType -> TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.tts TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType -> TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.tts TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType -> TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.tts TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType -> TYPE_USECASE_ID_ROAD_COLLISION_WARNING.tts @@ -831,7 +852,7 @@ enum class EventTypeEnum( TYPE_USECASE_ID_ROAD_TEST_SECTION.poiType -> TYPE_USECASE_ID_ROAD_TEST_SECTION.tts TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType -> TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.tts TYPE_USECASE_ID_ROAD_NO_PARKING.poiType -> TYPE_USECASE_ID_ROAD_NO_PARKING.tts -// TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -> TYPE_USECASE_ID_ROAD_GIVE_WAY.tts + TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType -> TYPE_USECASE_ID_ROAD_GIVE_WAY.tts TYPE_VIP_IDENTIFICATION.poiType -> TYPE_VIP_IDENTIFICATION.tts FOURS_ROAD_WORK.poiType -> FOURS_ROAD_WORK.tts AI_ROAD_WORK.poiType -> AI_ROAD_WORK.tts