From c57e9d86e8affcb44382af47402bb751defa6660 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 11 Jan 2023 11:56:38 +0800 Subject: [PATCH] =?UTF-8?q?[2.13.2]=20=E4=BF=AE=E6=94=B9=E7=BA=A2=E7=BB=BF?= =?UTF-8?q?=E7=81=AF=E4=BC=98=E5=85=88=E7=BA=A7=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/widget/SingleTrafficLightView.kt | 2 +- .../obu/mogo/MogoPrivateObuNewManager.kt | 14 ++- .../utils/TrafficDataConvertDcCombineUtils.kt | 2 - .../core/TrafficLightDispatcher.kt | 117 +++++++++++------- .../api/hmi/view/IViewTrafficLight.kt | 2 +- .../api/hmi/warning/IMoGoWaringProvider.kt | 2 +- .../api/obu/IMoGoObuTrafficLightListener.kt | 15 +++ .../function/call/hmi/CallerHmiManager.kt | 2 + .../CallerObuTrafficLightListenerManager.kt | 64 ++++++++++ 9 files changed, 163 insertions(+), 57 deletions(-) create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt index f0d289f626..c2c483aeb3 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt @@ -174,7 +174,7 @@ class SingleTrafficLightView @JvmOverloads constructor( * 更新红绿灯icon * * @param lightId 0-都是默认,1-红,2-黄,3-绿 - * @param lightSource 1:云端下发;2:自车感知 + * @param lightSource 1:云端下发;2:自车感知; 3:OBU */ private fun updateTrafficLightIcon(lightId: Int,lightSource: Int) { UiThreadHandler.post { 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 2a63222743..22ebb50034 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 @@ -19,6 +19,7 @@ import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Defa import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.TooClose import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager +import com.mogo.eagle.core.function.call.obu.CallerObuTrafficLightListenerManager import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtilsNew import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU @@ -939,7 +940,8 @@ class MogoPrivateObuNewManager private constructor() { when (currentLight.light) { // 灯光不可用 0 -> { - CallerHmiManager.showWarningTrafficLight(0, 3) +// CallerHmiManager.showWarningTrafficLight(0, 3) + CallerObuTrafficLightListenerManager.invokeObuTrafficLight(0) } // 红灯 2, 3 -> { @@ -948,8 +950,8 @@ class MogoPrivateObuNewManager private constructor() { isRedLight = true } isGreenLight = false - CallerHmiManager.showWarningTrafficLight(1, 3) - +// CallerHmiManager.showWarningTrafficLight(1, 3) + CallerObuTrafficLightListenerManager.invokeObuTrafficLight(1) val red = currentLight.countDown.toInt() CallerHmiManager.changeCountdownRed(red) } @@ -961,7 +963,8 @@ class MogoPrivateObuNewManager private constructor() { isGreenLight = true } isRedLight = false - CallerHmiManager.showWarningTrafficLight(3, 3) +// CallerHmiManager.showWarningTrafficLight(3, 3) + CallerObuTrafficLightListenerManager.invokeObuTrafficLight(3) val green = currentLight.countDown.toInt() CallerHmiManager.changeCountdownGreen(green) } @@ -969,7 +972,8 @@ class MogoPrivateObuNewManager private constructor() { // 黄灯 7, 8 -> { CallerHmiManager.disableWarningV2X(appId.toString()) - CallerHmiManager.showWarningTrafficLight(2, 3) +// CallerHmiManager.showWarningTrafficLight(2, 3) + CallerObuTrafficLightListenerManager.invokeObuTrafficLight(2) val yellow = currentLight.countDown.toInt() CallerHmiManager.changeCountdownYellow(yellow) } diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertDcCombineUtils.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertDcCombineUtils.kt index 721454634b..f8cdab2ba7 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertDcCombineUtils.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertDcCombineUtils.kt @@ -33,7 +33,6 @@ object TrafficDataConvertDcCombineUtils { trafficData.lat = info.warningMsg[0].position.latitude trafficData.lon = info.warningMsg[0].position.longitude trafficData.threatLevel = info.warningMsg[0].warningLevel - Log.e("liyz", "cvxRtiThreatIndInfo2TrafficData trafficData -- ${trafficData.toString()}") return trafficData } @@ -43,7 +42,6 @@ object TrafficDataConvertDcCombineUtils { fun cvxPtcThreatIndInfo2TrafficData(info: ObuWarningEvent.RsmWarningData): TrafficData? { if (info.participantOfOne == null) { CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") - Log.e("liyz", "cvxPtcThreatIndInfo2TrafficData info.participant ") return null } val trafficData = TrafficData() diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt index 13d5736a55..d77c967c40 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt @@ -2,11 +2,14 @@ package com.mogo.eagle.core.function.v2x.trafficlight.core import android.content.Context import android.os.Handler +import android.util.Log import com.mogo.eagle.core.data.trafficlight.TrafficLightResult import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener +import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightListener import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.obu.CallerObuTrafficLightListenerManager import com.mogo.eagle.core.function.call.trafficlight.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightHMIManager import perception.TrafficLightOuterClass @@ -17,30 +20,36 @@ import perception.TrafficLightOuterClass.TrafficLight * @description 对多个红绿灯信号来源进行统一调度(AI云、工控机) * @since: 2022/4/28 */ -class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener , IMoGoTrafficLightListener { +class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLightListener, + IMoGoObuTrafficLightListener { - companion object{ + companion object { const val TAG = "TrafficLightDispatcher" - val INSTANCE: TrafficLightDispatcher by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){ + val INSTANCE: TrafficLightDispatcher by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { TrafficLightDispatcher() } } private var mContext: Context? = null + //是否有AI获取红绿灯灯态 private var hasAiLightStatus: Boolean = false + //obu数据 + private var hasObuLightStatus: Boolean = false - fun initServer(context: Context){ + fun initServer(context: Context) { mContext = context //注册监听AI云获取红绿灯状态 CallerTrafficLightListenerManager.registerTrafficLightListener(TAG, this) //注册监听AI云进入路口 CallerTrafficLightListenerManager.registerEnterCrossRoadListener(TAG, this) //注册监听红绿灯请求失败 - CallerTrafficLightListenerManager.registerTrafficRequestErrorListener(TAG,this) + CallerTrafficLightListenerManager.registerTrafficRequestErrorListener(TAG, this) //注册监听工控机感知红绿灯 CallerAutopilotIdentifyListenerManager.addListener(TAG, this) + //obu红绿灯数据 + CallerObuTrafficLightListenerManager.registerObuTrafficLightListener(TAG, this) } /** @@ -48,46 +57,48 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener , IMoGoTrafficLigh * @param trafficLights 感知红绿灯 */ override fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) { - if(!hasAiLightStatus){ - trafficLights?.let { it -> - var light :TrafficLight?= null - if(it.hasStraight()){ - light = it.straight - }else if(it.hasLeft()){ - light = it.left - }else if(it.hasRight()){ - light = it.right - }else if(it.hasUTurn()){ - light = it.uTurn - } - if(light == null){ - //隐藏红绿灯显示 - TrafficLightHMIManager.INSTANCE.hideTrafficLight() - }else{ - when (light.state) { - TrafficLightOuterClass.LightState.STATE_RED -> { - //红灯 - CallerHmiManager.showWarningTrafficLight(1,2) - CallerHmiManager.changeCountdownGreen(0) - } - TrafficLightOuterClass.LightState.STATE_YELLOW -> { - //黄灯 - CallerHmiManager.showWarningTrafficLight(2,2) - CallerHmiManager.changeCountdownGreen(0) - } - TrafficLightOuterClass.LightState.STATE_GREEN -> { - //绿灯 - CallerHmiManager.showWarningTrafficLight(3,2) - CallerHmiManager.changeCountdownGreen(0) - } - TrafficLightOuterClass.LightState.STATE_OFF -> { - //黑灯,隐藏红绿灯显示 - TrafficLightHMIManager.INSTANCE.hideTrafficLight() - } - else -> {} + if (!hasObuLightStatus) { + if (!hasAiLightStatus) { + trafficLights?.let { it -> + var light: TrafficLight? = null + if (it.hasStraight()) { + light = it.straight + } else if (it.hasLeft()) { + light = it.left + } else if (it.hasRight()) { + light = it.right + } else if (it.hasUTurn()) { + light = it.uTurn + } + if (light == null) { + //隐藏红绿灯显示 + TrafficLightHMIManager.INSTANCE.hideTrafficLight() + } else { + when (light.state) { + TrafficLightOuterClass.LightState.STATE_RED -> { + //红灯 + CallerHmiManager.showWarningTrafficLight(1, 2) + CallerHmiManager.changeCountdownGreen(0) + } + TrafficLightOuterClass.LightState.STATE_YELLOW -> { + //黄灯 + CallerHmiManager.showWarningTrafficLight(2, 2) + CallerHmiManager.changeCountdownGreen(0) + } + TrafficLightOuterClass.LightState.STATE_GREEN -> { + //绿灯 + CallerHmiManager.showWarningTrafficLight(3, 2) + CallerHmiManager.changeCountdownGreen(0) + } + TrafficLightOuterClass.LightState.STATE_OFF -> { + //黑灯,隐藏红绿灯显示 + TrafficLightHMIManager.INSTANCE.hideTrafficLight() + } + else -> {} + } } - } + } } } } @@ -96,17 +107,20 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener , IMoGoTrafficLigh * AI云获取红绿灯状态 */ override fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) { - TrafficLightHMIManager.INSTANCE.updateTrafficLight(trafficLightResult) - hasAiLightStatus = true + if (!hasObuLightStatus) { + TrafficLightHMIManager.INSTANCE.updateTrafficLight(trafficLightResult) + hasAiLightStatus = true + } } /** * 车辆进入路口 */ override fun onEnterCrossRoad(enter: Boolean) { - if(!enter){ + if (!enter) { Handler().postDelayed({ hasAiLightStatus = false + hasObuLightStatus = false }, 5000) } } @@ -118,8 +132,17 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener , IMoGoTrafficLigh hasAiLightStatus = false } + /** + * obu 红绿灯数据 + */ + override fun onObuTrafficLight(light: Int) { + super.onObuTrafficLight(light) + hasObuLightStatus = true + Log.d("liyz", "onObuTrafficLight light = $light") + CallerHmiManager.showWarningTrafficLight(light, 3) + } - fun destroy(){ + fun destroy() { //取消注册监听AI云获取红绿灯状态 CallerTrafficLightListenerManager.unRegisterTrafficLightListener(TAG) //取消注册监听工控机感知红绿灯 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewTrafficLight.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewTrafficLight.kt index 42bebf7c4c..54fe8e8e87 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewTrafficLight.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewTrafficLight.kt @@ -14,7 +14,7 @@ abstract class IViewTrafficLight(context: Context?, attrs: AttributeSet?, defSty * 展示红绿灯预警 * * @param checkLightId 0-都是默认,1-红,2-黄,3-绿 - * @param lightSource 1:云端下发;2:自车感知 + * @param lightSource 1:云端下发;2:自车感知;3:OBU */ open fun showWarningTrafficLight(checkLightId: Int,lightSource: Int) {} diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index c56983d24c..bc8722a937 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -114,7 +114,7 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { * 展示红绿灯预警 * * @param checkLightId 0-都是默认,1-红,2-黄,3-绿 - * @param lightSource 1:云端下发;2:自车感知 + * @param lightSource 1:云端下发;2:自车感知;3:OBU */ fun showWarningTrafficLight(checkLightId: Int,lightSource: Int) diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt new file mode 100644 index 0000000000..1b4be4e95c --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt @@ -0,0 +1,15 @@ +package com.mogo.eagle.core.function.api.obu + + +/** + * @author lixiaopeng + * @date 2022/1/30 10:28 下午 + * OBU 灯态信息 + */ +interface IMoGoObuTrafficLightListener { + /** + * @param light 灯的信息 + */ + fun onObuTrafficLight(light: Int){} + +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 46e8660a69..99e24ec393 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.call.hmi +import android.util.Log import android.view.View import android.view.ViewGroup import com.alibaba.android.arouter.launcher.ARouter @@ -187,6 +188,7 @@ object CallerHmiManager : CallerBase() { * @param lightSource 1:云端下发;2:自车感知;3:OBU */ fun showWarningTrafficLight(checkLightId: Int, lightSource: Int) { + Log.d("liyz", "showWarningTrafficLight checkLightId = $checkLightId ---lightSource = $lightSource") waringProviderApi?.showWarningTrafficLight(checkLightId, lightSource) } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt new file mode 100644 index 0000000000..a53d5b350e --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt @@ -0,0 +1,64 @@ +package com.mogo.eagle.core.function.call.obu + +import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightListener +import java.util.concurrent.ConcurrentHashMap + +object CallerObuTrafficLightListenerManager { + + private val M_OBU_TRAFFIC_LIGHT_LISTENER: ConcurrentHashMap = + ConcurrentHashMap() + + var mLight: Int = 0 + + /** + * 添加监听 + * @param tag 标记,用来注销监听使用 + * @param listener 监听回调 + */ + fun registerObuTrafficLightListener( + tag: String, + listener: IMoGoObuTrafficLightListener + ) { + if (M_OBU_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { + return + } + listener.onObuTrafficLight(mLight) + M_OBU_TRAFFIC_LIGHT_LISTENER[tag] = listener + } + + /** + * 删除监听 + * @param tag 标记,用来注销监听使用 + */ + fun unRegisterObuTrafficLightListener(tag: String) { + if (!M_OBU_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { + return + } + M_OBU_TRAFFIC_LIGHT_LISTENER.remove(tag) + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun unRegisterObuTrafficLightListener(listener: IMoGoObuTrafficLightListener) { + if (!M_OBU_TRAFFIC_LIGHT_LISTENER.containsValue(listener)) { + return + } + M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { + if (it.value == listener) { + M_OBU_TRAFFIC_LIGHT_LISTENER.remove(it.key) + } + } + } + + fun invokeObuTrafficLight(light: Int) { + this.mLight = light + M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { + val tag = it.key + val listener = it.value + listener.onObuTrafficLight(light) + } + } + +} \ No newline at end of file