[6.5.0]融合红绿灯

This commit is contained in:
xuxinchao
2024-06-28 16:34:35 +08:00
parent c2f258c3c4
commit fabf1996fd
8 changed files with 267 additions and 71 deletions

View File

@@ -39,8 +39,8 @@ fun TrafficLightStatus.convert(): TrafficLightEnum {
}
}
fun FusionTrafficLightOuterClass.FusionTrafficLight.convert(): TrafficLightEnum {
return when (this.state) {
fun convert(state: FusionTrafficLightOuterClass.FusionLightState): TrafficLightEnum {
return when (state) {
FusionTrafficLightOuterClass.FusionLightState.STATE_GREEN_FUSION -> TrafficLightEnum.GREEN
FusionTrafficLightOuterClass.FusionLightState.STATE_YELLOW_FUSION -> TrafficLightEnum.YELLOW
FusionTrafficLightOuterClass.FusionLightState.STATE_RED_FUSION -> TrafficLightEnum.RED
@@ -78,6 +78,10 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
@Volatile
private var hasAutopilotPerception: Boolean = false
//是否有融合带有下一和下二灯态的红绿灯数据
@Volatile
private var hasFusionLightStatus: Boolean = false
//红绿灯定时器,超时未更新隐藏红绿灯
@Volatile
private var lightCountDownTimer: CountDownTimer? = null
@@ -125,19 +129,29 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
if (!hasAutopilotPerception) {
hasAutopilotPerception = true
}
if (HmiBuildConfig.isShowCarSourceTrafficLightView) {
var lightRemain = light.duration.toInt()
val source = when (trafficLights.source) {
1 -> DataSourceType.TELEMATIC_UNION_V2I
2 -> DataSourceType.TELEMATIC_UNION_V2N
else -> {
lightRemain = 0
DataSourceType.TELEMATIC
if(light.nextState == null || light.nextState == FusionTrafficLightOuterClass.FusionLightState.STATE_OFF_FUSION
|| light.nextTwoState == null || light.nextTwoState == FusionTrafficLightOuterClass.FusionLightState.STATE_OFF_FUSION){
if (HmiBuildConfig.isShowCarSourceTrafficLightView) {
var lightRemain = light.duration.toInt()
val source = when (trafficLights.source) {
1 -> DataSourceType.TELEMATIC_UNION_V2I
2 -> DataSourceType.TELEMATIC_UNION_V2N
else -> {
lightRemain = 0
DataSourceType.TELEMATIC
}
}
onTrafficLightPlusSource(convert(light.state), lightRemain, source)
} else {
onTrafficLightPlusSource(convert(light.state), 0, DataSourceType.TELEMATIC)
}
onTrafficLightPlusSource(light.convert(), lightRemain, source)
} else {
onTrafficLightPlusSource(light.convert(), 0, DataSourceType.TELEMATIC)
}else{
//有下一和下二灯态则为融合V2N红绿灯数据
onFusionTrafficLight(convert(light.state),light.duration.toInt(),
convert(light.nextState),light.nextDuration.toInt(),
convert(light.nextTwoState),light.nextTwoDuration.toInt(),
DataSourceType.TELEMATIC_UNION_V2N
)
}
}
}
@@ -248,6 +262,34 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
CallerTrafficLightListenerManager.disableTrafficLight()
}
/**
* 融合V2N红绿灯数据带有下一下二灯态
*/
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_SOCKET_TRAFFIC_LIGHT,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_ADAS_TRAFFIC_LIGHT,
paramIndexes = [0, 1, 2,3,4,5,6,7]
)
override fun onFusionTrafficLight(
currentState: TrafficLightEnum, currentDuration: Int,
nextState: TrafficLightEnum, nextDuration: Int,
nextTwoState: TrafficLightEnum, nextTwoDuration: Int,
lightSource: DataSourceType
) {
super.onFusionTrafficLight(currentState, currentDuration, nextState, nextDuration,
nextTwoState, nextTwoDuration, lightSource)
if (filterTelematicUnion(lightSource)) {
return
}
hasObuLightStatus = false
hasAutopilotPerception = false
hasAiLightStatus = false
hasFusionLightStatus = true
CallerTrafficLightListenerManager.showFusionTrafficLight(currentState, currentDuration, nextState, nextDuration,
nextTwoState, nextTwoDuration, lightSource)
}
/**
* OBU红绿灯数据
*/