diff --git a/README.md b/README.md
index dc4a9f75dc..27d6f2a681 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,9 @@ adb shell am broadcast -a com.hmi.v2x.limitingvelocity --ez limitingVelocityIsSh
// 控制OBU场景自测
adb shell am broadcast -a com.obu.test_trigger --ei obuStates 1 --ei obuLevel 3 --ei obuType 0x2A01
+// 控制OBU 展示周边周边车辆 惠新西街南口附近,南向北
+adb shell am broadcast -a com.obu.test_trigger_recognized
+
// (旧版本)使用命令行触发各种测试场景演示
diff --git a/modules/mogo-module-obu-mogo/src/main/AndroidManifest.xml b/modules/mogo-module-obu-mogo/src/main/AndroidManifest.xml
index 053183effc..b43b74fa98 100644
--- a/modules/mogo-module-obu-mogo/src/main/AndroidManifest.xml
+++ b/modules/mogo-module-obu-mogo/src/main/AndroidManifest.xml
@@ -8,6 +8,13 @@
+
+
+
+
+
+
+
diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt
index 33e97454a6..395b9478bc 100644
--- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt
+++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt
@@ -1,7 +1,6 @@
package com.mogo.module.obu.mogo
import android.content.Context
-import android.util.Log
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.module.common.enum.WarningTypeEnum
import com.mogo.module.obu.mogo.map.ObuRecognizedResultDrawer
@@ -14,7 +13,6 @@ 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.MovingObjectInfo
/**
* @description
@@ -247,7 +245,7 @@ class MogoPrivateObuManager private constructor() {
}
- // V2V预警信息 TODO 他车是否一直出现
+ // V2V预警信息
override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo?) {
Logger.e(MogoObuConst.TAG_MOGO_OBU, "onCvxV2vThreatIndInfo ------> $info")
info?.let {
@@ -255,26 +253,17 @@ class MogoPrivateObuManager private constructor() {
info.threat_info?.let {
//预警方位
val direction = info.ext_info.target_classification
- //显示警告红边
- mMogoServiceApis!!.v2XListenerManager.warningChangedForListenerWithDirection(
- getMessageDirection(direction),
- "ACTION_V2X_FRONT_WARNING"
- )
//处理预警类型
- val appId = info.threat_info.app_id
- Logger.d(
- MogoObuConst.TAG_MOGO_OBU,
- "direction = " + direction + "----" + getMessageDirection(
- direction
- ) + "--appId = " + appId
- )
+ val useCaseId = info.threat_info.app_id
+ val level = info.threat_info.threat_level
+ val status = info.status
+
handleSdkObu(
- info.vehicle_id,
- appId,
- info.threat_info.threat_level,
- getMessageDirection(direction),
- info.status,
- info.basic_info
+ useCaseId,
+ direction,
+ status,
+ level,
+ info
)
}
}
@@ -321,20 +310,15 @@ class MogoPrivateObuManager private constructor() {
* @see com.mogo.module.common.enum.WarningTypeEnum
*/
private fun handleSdkObu(
- vehicleId: String,
useCaseId: Int,
- level: Int,
direction: Int,
status: Int,
- basicInfo: MovingObjectInfo
+ level: Int,
+ info: CvxV2vThreatIndInfo
) {
+ // 这里排除需要特殊定制的语音及文案外,其余的都可以使用 WarningTypeEnum 提供的
var alertContent = ""
var ttsContent = ""
- Log.d(
- MogoObuConst.TAG_MOGO_OBU,
- "useCaseId = $useCaseId ---level = $level --direction = $direction ---status = $status "
- )
- // TODO 这里排除需要特殊定制的语音及文案外,其余的都可以使用 WarningTypeEnum 提供的
when (useCaseId) {
// 变道预警,注意左后车辆/注意右后车辆
WarningTypeEnum.TYPE_USECASE_ID_LCW.useCaseId -> {
@@ -404,7 +388,7 @@ class MogoPrivateObuManager private constructor() {
// 前方拥堵提醒,前方XXX米道路拥堵,请减速慢行 TODO
WarningTypeEnum.TYPE_USECASE_ID_TJW.useCaseId -> {
ttsContent = WarningTypeEnum.getWarningTts(useCaseId)
-// ttsContent = String.format(ttsContent, "")
+ // ttsContent = String.format(ttsContent, "")
alertContent = WarningTypeEnum.getWarningContent(useCaseId)
}
@@ -427,36 +411,36 @@ class MogoPrivateObuManager private constructor() {
}
}
-
- when (status) {
+ when (status) {
// 添加
- ObuConstants.STATUS.ADD -> {
+ ObuConstants.STATUS.ADD-> {
+ //显示警告红边
+ mMogoServiceApis!!.v2XListenerManager.warningChangedForListenerWithDirection(
+ getMessageDirection(direction),
+ "ACTION_V2X_FRONT_WARNING"
+ )
//显示弹框,语音提示
mIMoGoWaringProvider!!.showWarningV2X(
useCaseId,
alertContent,
- if (level == 3) ttsContent else "",
+ if (status == 3) ttsContent else "",
useCaseId.toString()
)
+ //更新周边车辆进行预警颜色变换,车辆实时移动和变色
+ mObuRecognizedResultDrawer?.updateCvxRvInfoIndInfo(level, info)
}
// 删除
ObuConstants.STATUS.DELETE -> {
// 移除顶部弹窗
mIMoGoWaringProvider?.disableWarningV2X(useCaseId.toString())
// 移除地图元素
- mObuRecognizedResultDrawer?.removeCvxRvInfoIndInfo(vehicleId)
+ mObuRecognizedResultDrawer?.removeCvxRvInfoIndInfo(info.vehicle_id)
}
// 更新
else -> {
//更新周边车辆进行预警颜色变换,车辆实时移动和变色
- mObuRecognizedResultDrawer?.updateCvxRvInfoIndInfo(
- level,
- vehicleId,
- basicInfo
- )
+ mObuRecognizedResultDrawer?.updateCvxRvInfoIndInfo(level, info)
}
}
-
}
-
}
\ No newline at end of file
diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt
index 1c1ce4cc77..81beacf2e8 100644
--- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt
+++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/map/ObuRecognizedResultDrawer.kt
@@ -12,7 +12,9 @@ import com.mogo.module.common.R
import com.mogo.module.common.constants.DataTypes
import com.mogo.utils.WorkThreadHandler
import com.zhidao.support.obu.model.CvxRvInfoIndInfo
+import com.zhidao.support.obu.model.CvxV2vThreatIndInfo
import com.zhidao.support.obu.model.advance.MovingObjectInfo
+import com.zhidao.support.obu.model.advance.V2vThreat
import java.util.concurrent.ConcurrentHashMap
/**
@@ -43,29 +45,6 @@ class ObuRecognizedResultDrawer() {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
drawerCvxRvInfo()
-
- /*// TODO 测试数据
- mCvxRvInfoIndInfoMap.forEach {
- var latitude = ((it.value.basic_info.position.latitude * 10000000.0).toLong())
- var longitude = (it.value.basic_info.position.longitude * 10000000.0).toLong()
- latitude += 5
- //longitude += 100
- it.value.basic_info.position.setValue(
- 0,
- latitude,
- longitude,
- 30
- )
- val result = latitude.toInt() % 2
- if (result == 0) {
- updateCvxRvInfoIndInfo(0, it.key, it.value.basic_info)
- } else {
- updateCvxRvInfoIndInfo(3, it.key, it.value.basic_info)
- }
- //addCvxRvInfoIndInfo(it.value)
- }*/
-
-
// 延时50毫秒重复发送自己,定时轮询进行车辆绘制,可以及时将已经不存在车辆删除
sendEmptyMessageDelayed(0, 100L)
}
@@ -74,22 +53,72 @@ class ObuRecognizedResultDrawer() {
init {
mContext = AbsMogoApplication.getApp()
mDrawerHandler.sendEmptyMessageDelayed(1, 0L)
-
- /* // TODO 测试数据
- val cvxRvInfoIndInfo = CvxRvInfoIndInfo(0, 1, 2)
- cvxRvInfoIndInfo.vehicle_id = "123321"
- val position = Position(0, 399739429, 1164115207, 20)
- val movingObjectInfo = MovingObjectInfo(0, position, 1800, 60)
- cvxRvInfoIndInfo.basic_info = movingObjectInfo
- addCvxRvInfoIndInfo(cvxRvInfoIndInfo)*/
-
}
/**
* 添加识别的数据
*/
- fun addCvxRvInfoIndInfo(value: CvxRvInfoIndInfo) {
- mCvxRvInfoIndInfoMap[value.vehicle_id] = value
+ fun addCvxRvInfoIndInfo(cvxRvInfoIndInfo: CvxRvInfoIndInfo) {
+ mCvxRvInfoIndInfoMap[cvxRvInfoIndInfo.vehicle_id] = cvxRvInfoIndInfo
+ }
+
+ /**
+ * 更新识别数据,V2V预警的时候需要修改车辆颜色
+ */
+ fun updateCvxRvInfoIndInfo(threatLevel: Int, cvxV2vThreatIndInfo: CvxV2vThreatIndInfo) {
+ val value = mCvxRvInfoIndInfoMap[cvxV2vThreatIndInfo.vehicle_id]
+ // 存在即改变
+ value?.let {
+ // 修改位置信息
+ value.basic_info = cvxV2vThreatIndInfo.basic_info
+ // 修改V2X预警级别
+ if (!value.threat_infos.isNullOrEmpty()) {
+ value.threat_infos[0] = cvxV2vThreatIndInfo.threat_info
+ } else {
+ val threatInfos = ArrayList()
+ threatInfos.add(0, cvxV2vThreatIndInfo.threat_info)
+ value.threat_infos = threatInfos
+ }
+
+ // 修改颜色
+ when (threatLevel) {
+ 1 -> {
+ mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#D8D8D8FF")
+ }
+ 2 -> {
+ mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#FFD53EFF")
+ }
+ 3 -> {
+ mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#FF3C45FF")
+ }
+ else -> {
+ mMarkersCaches[cvxV2vThreatIndInfo.vehicle_id]?.setAnchorColor("#D8D8D8FF")
+ }
+ }
+ mCvxRvInfoIndInfoMap[cvxV2vThreatIndInfo.vehicle_id] = value
+ }
+ // 不存在即添加
+ ?: let {
+ // 构建周边车辆数据结构
+ val cvxRvInfoIndInfo = CvxRvInfoIndInfo(
+ cvxV2vThreatIndInfo.opCode,
+ cvxV2vThreatIndInfo.ch,
+ cvxV2vThreatIndInfo.bitMask
+ )
+ cvxRvInfoIndInfo.vehicle_id = cvxV2vThreatIndInfo.vehicle_id
+ cvxRvInfoIndInfo.basic_info = cvxV2vThreatIndInfo.basic_info
+ // 修改V2X预警级别
+ if (!cvxRvInfoIndInfo.threat_infos.isNullOrEmpty()) {
+ cvxRvInfoIndInfo.threat_infos[0] = cvxV2vThreatIndInfo.threat_info
+ } else {
+ val threatInfos = ArrayList()
+ threatInfos.add(0, cvxV2vThreatIndInfo.threat_info)
+ cvxRvInfoIndInfo.threat_infos = threatInfos
+ }
+
+
+ mCvxRvInfoIndInfoMap[cvxV2vThreatIndInfo.vehicle_id] = cvxRvInfoIndInfo
+ }
}
/**
@@ -122,7 +151,7 @@ class ObuRecognizedResultDrawer() {
* 移除识别的数据
*/
fun removeCvxRvInfoIndInfo(key: String) {
- if (mCvxRvInfoIndInfoMap.contains(key)) {
+ if (mCvxRvInfoIndInfoMap.containsKey(key)) {
mCvxRvInfoIndInfoMap.remove(key)
}
}
@@ -179,6 +208,26 @@ class ObuRecognizedResultDrawer() {
cvxRvInfoIndInfo.basic_info.position.longitude
)
)
+
+ // 判断车辆V2X预警级别,调整车辆颜色
+ if (!cvxRvInfoIndInfo.threat_infos.isNullOrEmpty()) {
+ // 修改颜色
+ when (cvxRvInfoIndInfo.threat_infos.first().threat_level) {
+ 1 -> {
+ options.anchorColor("#D8D8D8FF")
+ }
+ 2 -> {
+ options.anchorColor("#FFD53EFF")
+ }
+ 3 -> {
+ options.anchorColor("#FF3C45FF")
+ }
+ else -> {
+ options.anchorColor("#D8D8D8FF")
+ }
+ }
+ }
+
val marker = MogoApisHandler.getInstance().apis.mapServiceApi.getMarkerManager(mContext)
.addMarker(DataTypes.TYPE_MARKER_OBU_DATA, options)
diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/receiver/ObuTestTriggerRecognizedReceiver.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/receiver/ObuTestTriggerRecognizedReceiver.kt
new file mode 100644
index 0000000000..b8a9da3629
--- /dev/null
+++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/receiver/ObuTestTriggerRecognizedReceiver.kt
@@ -0,0 +1,50 @@
+package com.mogo.module.obu.mogo.receiver
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.mogo.module.obu.mogo.MogoObuConst
+import com.mogo.module.obu.mogo.MogoPrivateObuManager
+import com.mogo.utils.logger.Logger
+import com.zhidao.support.obu.model.CvxRvInfoIndInfo
+import com.zhidao.support.obu.model.advance.MovingObjectInfo
+import com.zhidao.support.obu.model.advance.Position
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/8/11 10:50 上午
+ *
+ * OBU 周边车辆 测试使用
+ */
+class ObuTestTriggerRecognizedReceiver : BroadcastReceiver() {
+ private var mContext: Context? = null
+
+ companion object {
+ private const val TAG = "ObuTestTriggerRecognizedReceiver"
+ }
+
+ override fun onReceive(context: Context, intent: Intent) {
+ mContext = context
+ /**
+ * OBU 场景类型
+ * @see com.zhidao.support.obu.constants.ObuConstants.USE_CASE_ID
+ */
+ val obuType = intent.getIntExtra(MogoObuConst.BROADCAST_OBU_TYPE_EXTRA_KEY, 0)
+ val obuStatus = intent.getIntExtra(MogoObuConst.BROADCAST_OBU_STATES_EXTRA_KEY, 0)
+ val obuLevel = intent.getIntExtra(MogoObuConst.BROADCAST_OBU_LEVEL_EXTRA_KEY, 3)
+ Logger.d(TAG, "obuType:$obuType obuStatus:$obuStatus obuLevel:$obuLevel")
+
+ // TODO 测试数据
+ val cvxRvInfoIndInfo = CvxRvInfoIndInfo(0, 1, 2)
+ cvxRvInfoIndInfo.vehicle_id = "123321"
+ val position = Position(0, 399739429, 1164115207, 20)
+ val movingObjectInfo = MovingObjectInfo(0, position, 1800, 60)
+ cvxRvInfoIndInfo.basic_info = movingObjectInfo
+
+ MogoPrivateObuManager.INSTANCE
+ .getMogoObuListener()
+ .onCvxRvInfoIndInfo(cvxRvInfoIndInfo)
+
+ }
+
+}
\ No newline at end of file