Merge branch 'dev_robotaxi-d_230612_3.3.0' into 3.3.0merge2master

This commit is contained in:
yangyakun
2023-07-07 15:25:07 +08:00
348 changed files with 10472 additions and 7214 deletions

View File

@@ -17,16 +17,17 @@ import com.mogo.eagle.core.data.constants.MoGoConfig
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_MULTI_CONNECT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_ADAS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_MULTI_CONNECT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_SOURCE_ADAS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_INIT_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_AUTOPILOT
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotControlProvider
import com.mogo.eagle.core.function.api.map.collect.IMoGoMapDataCollectProvider
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicStatusListenerManager
import com.mogo.eagle.core.function.datacenter.autopilot.adapter.MoGoAdasListenerImpl
import com.mogo.eagle.core.function.datacenter.autopilot.adapter.MoGoAdasMsgConnectStatusListenerImpl
import com.mogo.eagle.core.function.datacenter.autopilot.server.AsyncDataToAutopilotServer
@@ -35,7 +36,7 @@ import com.mogo.eagle.core.function.datacenter.autopilot.telematic.IMsgHandler
import com.mogo.eagle.core.function.datacenter.autopilot.telematic.TeleMsgHandler
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ADAS_IMPL
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.ParseVersionUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
@@ -51,10 +52,12 @@ import com.mogo.telematic.server.netty.NettyTcpServer
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.AdasOptions
import com.zhidao.support.adas.high.OnMultiDeviceListener
import com.zhidao.support.adas.high.chain.AdasChain
import com.zhidao.support.adas.high.common.Constants
import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS
import com.zhidao.support.adas.high.common.CupidLogUtils
import com.zhidao.support.adas.high.common.MessageType
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.data.bean.MogoReport
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask
@@ -62,7 +65,6 @@ import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import com.zhjt.service.chain.ChainLog
import com.zhjt.service.chain.TracingConstants
import io.netty.channel.Channel
import mogo.telematics.pad.MessagePad
import java.util.*
@@ -91,7 +93,7 @@ class MoGoAutopilotControlProvider :
get() = TAG
override fun init(context: Context) {
CallerLogger.i("$M_ADAS_IMPL$TAG", "初始化工控机连接……")
CallerLogger.i("$M_D_C$TAG", "初始化工控机连接……")
mContext = context
// 初始化ADAS 域控制器
CupidLogUtils.setEnableLog(false)
@@ -142,6 +144,7 @@ class MoGoAutopilotControlProvider :
}
}, 1000, 10000)
invokeNettyConnResult("司机端服务启动成功!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(true)
}
override fun onStopServer() {
@@ -149,6 +152,7 @@ class MoGoAutopilotControlProvider :
timer?.cancel()
timer = null
invokeNettyConnResult("司机端服务停止!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(false)
}
override fun onChannelConnect(channel: Channel?) {
@@ -156,7 +160,7 @@ class MoGoAutopilotControlProvider :
}
override fun onChannelDisConnect(channel: Channel?) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "onChannelDisConnect")
CallerLogger.d("$M_D_C$TAG", "onChannelDisConnect")
}
override fun onReceiveClientSign(channel: Channel?, sn: String?) {
@@ -219,7 +223,7 @@ class MoGoAutopilotControlProvider :
}
})
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
CallerLogger.i("$M_ADAS_IMPL$TAG", "initServer……")
CallerLogger.i("$M_D_C$TAG", "initServer……")
// 同步数据给工控机的服务
AsyncDataToAutopilotServer.INSTANCE.initServer()
}
@@ -252,7 +256,7 @@ class MoGoAutopilotControlProvider :
NSDNettyManager.getInstance()
.sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes))
} else {
CallerLogger.d("$M_ADAS_IMPL$TAG", "司机端Server未启动")
CallerLogger.d("$M_D_C$TAG", "司机端Server未启动")
}
}
@@ -310,18 +314,26 @@ class MoGoAutopilotControlProvider :
override fun onMapCollectStart(cmdId: Int, cmdTime: Long) {
val result = recordPackage(2, cmdId)
CallerLogger.d("$M_ADAS_IMPL$TAG", "开始记录包: [$cmdId, $result]")
CallerLogger.d("$M_D_C$TAG", "开始记录包: [$cmdId, $result]")
}
override fun onMapCollectEnd(cmdId: Int, cmdTime: Long) {
val result = stopRecord(2, cmdId)
CallerLogger.d("$M_ADAS_IMPL$TAG", "结束记录包: [$cmdId, $result]")
CallerLogger.d("$M_D_C$TAG", "结束记录包: [$cmdId, $result]")
}
@ChainLog(
linkChainLog = AdasChain.CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = AdasChain.CHAIN_SOURCE_ADAS,
nodeAliasCode = AdasChain.CHAIN_CODE_ADAS_START_AUTOPILOT,
paramIndexes = [0]
)
override fun startAutoPilot(controlParameters: AutopilotControlParameters) {
startAutoPilot(controlParameters, Constants.AUTOPILOT_SOURCE.PAD)
}
//todo chainlog
override fun startAutoPilotByMoFang(controlParameters: AutopilotControlParameters?) {
if (controlParameters==null){
startAutoPilotWithNoParameter(Constants.AUTOPILOT_SOURCE.MO_FANG)
@@ -341,7 +353,7 @@ class MoGoAutopilotControlProvider :
invokeAutoPilotResult(if (invokeResult) "无参自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
} else {
invokeAutoPilotResult("车机与工控机链接失败,无法开启自动驾驶 无参")
CallerLogger.e("$M_ADAS_IMPL$TAG", "车机与工控机链接失败,无法开启自动驾驶")
CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法开启自动驾驶")
}
}
}
@@ -357,21 +369,20 @@ class MoGoAutopilotControlProvider :
invokeAutoPilotResult(if (invokeResult) "自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
} else {
invokeAutoPilotResult("车机与工控机链接失败,无法开启自动驾驶")
CallerLogger.e("$M_ADAS_IMPL$TAG", "车机与工控机链接失败,无法开启自动驾驶")
CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法开启自动驾驶")
}
}
}
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = TracingConstants.Endpoint.PAD,
nodeAliasCode = ChainConstant.CHAIN_ALIAS_CODE_EAGLE_START_AUTOPILOT_RESULT,
paramIndexes = [0],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
parentNodeAliasCode = ChainConstant.CHAIN_CODE_EAGLE_START_AUTOPILOT,
nodeAliasCode = ChainConstant.CHAIN_CODE_EAGLE_START_AUTOPILOT_RESULT,
paramIndexes = [0]
)
private fun invokeAutoPilotResult(status: String) {
CallerLogger.e("$M_ADAS_IMPL$TAG", status)
CallerLogger.e("$M_D_C$TAG", status)
}
override fun sendTrafficLightData(trafficLightResult: TrafficLightResult) {
@@ -398,7 +409,7 @@ class MoGoAutopilotControlProvider :
if (AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
AdasManager.getInstance().sendAutoPilotModeReq(0, 1, null)
} else {
CallerLogger.e("$M_ADAS_IMPL$TAG", "车机与工控机链接失败,无法断开自动驾驶")
CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法断开自动驾驶")
}
}
@@ -492,7 +503,7 @@ class MoGoAutopilotControlProvider :
)
)
} else {
CallerLogger.d("$M_ADAS_IMPL$TAG", "同步美化模式状态时司机端Server未启动")
CallerLogger.d("$M_D_C$TAG", "同步美化模式状态时司机端Server未启动")
}
}
}
@@ -515,7 +526,7 @@ class MoGoAutopilotControlProvider :
)
)
} else {
CallerLogger.d("$M_ADAS_IMPL$TAG", "同步美化模式状态时司机端Server未启动")
CallerLogger.d("$M_D_C$TAG", "同步美化模式状态时司机端Server未启动")
}
}
}
@@ -553,9 +564,9 @@ class MoGoAutopilotControlProvider :
* @return boolean
*/
override fun sendDetouring(isEnable: Boolean): Boolean {
return if(isEnable){
return if (isEnable) {
AdasManager.getInstance().sendDetouring(1)
}else{
} else {
AdasManager.getInstance().sendDetouring(0)
}
}
@@ -576,31 +587,31 @@ class MoGoAutopilotControlProvider :
* @return boolean
*/
override fun sendWeakNetSlowDown(isEnable: Boolean): Boolean {
return if(isEnable){
return if (isEnable) {
AdasManager.getInstance().sendWeakNetSlowDown(1)
}else{
} else {
AdasManager.getInstance().sendWeakNetSlowDown(0)
}
}
/**
* 获取全部参数
* 结果回调{@link OnAdasListener#onGetParamResp(MessagePad.Header, MessagePad.SetParamReq)}
* 结果回调{@link OnAdasListener#onGetParamResp(MessagePad.Header, MessagePad.SetParamReq, AdasParam)}
*
* @return boolean
*/
override fun sendGetAllParamReq(): Boolean {
return AdasManager.getInstance().sendGetAllParamReq()
return AdasManager.getInstance().sendGetAllParamReq()
}
/**
* 参数获取请求
* 结果回调{@link OnAdasListener#onGetParamResp(MessagePad.Header, MessagePad.SetParamReq)}
* 结果回调{@link OnAdasListener#onGetParamResp(MessagePad.Header, MessagePad.SetParamReq, AdasParam)}
*
* @param paramType 参数类型{@link com.zhidao.support.adas.high.common.Constants.PARAM_TYPE}
* @param paramType 参数类型:libraries/mogo-adas-data/src/main/proto/personal/adas_constants.proto
* @return boolean
*/
override fun sendGetParamReq(paramType: Int): Boolean {
override fun sendGetParamReq(paramType: AdasConstants.MapSystemParamType): Boolean {
return AdasManager.getInstance().sendGetParamReq(paramType)
}
@@ -640,7 +651,7 @@ class MoGoAutopilotControlProvider :
bagManager.descReq = descReq.build()
// 空间使用信息,获取响应且reqType=1时有效
for(diskSpaceInfoEntity in bagManagerEntity.spaceInfoResp){
for (diskSpaceInfoEntity in bagManagerEntity.spaceInfoResp) {
val spaceInfoResp = BagManagerOuterClass.BagSpaceInfo
.newBuilder()
val diskSpaceInfo = BagManagerOuterClass.SpaceInfo
@@ -652,7 +663,7 @@ class MoGoAutopilotControlProvider :
.build()
spaceInfoResp
.setHost(diskSpaceInfoEntity.host).diskSpaceInfo = diskSpaceInfo
for(entity in diskSpaceInfoEntity.BagDirsSpaceInfo){
for (entity in diskSpaceInfoEntity.BagDirsSpaceInfo) {
val bagDirsSpaceInfo = BagManagerOuterClass.SpaceInfo
.newBuilder()
.setDirectory(entity.directory)
@@ -666,8 +677,8 @@ class MoGoAutopilotControlProvider :
}
// 包信息列表,获取响应且reqType=2时有效
for(bagsInfoRespEntity in bagManagerEntity.bagsInfoResp){
if(bagsInfoRespEntity.itemType == 0){
for (bagsInfoRespEntity in bagManagerEntity.bagsInfoResp) {
if (bagsInfoRespEntity.itemType == 0) {
// 包描述信息
val bagDescription = BagManagerOuterClass.BagDescription
.newBuilder()
@@ -689,7 +700,7 @@ class MoGoAutopilotControlProvider :
.setDescription(bagDescription.build())
// 子包信息
for(subBagEntity in bagsInfoRespEntity.subBags){
for (subBagEntity in bagsInfoRespEntity.subBags) {
val subBag = BagManagerOuterClass.SubBag
.newBuilder()
.setKey(subBagEntity.key)
@@ -875,15 +886,18 @@ class MoGoAutopilotControlProvider :
}
msgHandler.synMsgToAllClients()
} else {// 乘客屏
CallerDevaToolsManager.getBindingCarInfo( carConfigResp.macAddress, MoGoAiCloudClientConfig.getInstance().sn)
CallerDevaToolsManager.getBindingCarInfo(
carConfigResp.macAddress,
MoGoAiCloudClientConfig.getInstance().sn
)
invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为${carConfigResp.macAddress}")
}
if(carConfigResp.dockVersion.isNotEmpty()){
if(carConfigResp.dockVersion.contains("taxi")){
if (carConfigResp.dockVersion.isNotEmpty()) {
if (carConfigResp.dockVersion.toLowerCase(Locale.getDefault()).contains("taxi")) {
//修改雨天模式开关默认状态为开启仅针对taxi320及以上的版本-sop 215
val num = ParseVersionUtils.parseVersion(true,carConfigResp.dockVersion)
if(num >= 30200){
val num = ParseVersionUtils.parseVersion(true, carConfigResp.dockVersion)
if (num >= 30200) {
FunctionBuildConfig.isRainMode = true
}
}
@@ -893,15 +907,13 @@ class MoGoAutopilotControlProvider :
}
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
linkCode = CHAIN_LINK_ADAS,
endpoint = TracingConstants.Endpoint.PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_MULTI_CONNECT,
paramIndexes = [0],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_INIT_STATUS,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_MULTI_CONNECT,
paramIndexes = [0]
)
private fun invokeNettyConnResult(status: String) {
CallerLogger.d("$M_ADAS_IMPL$TAG", status)
CallerLogger.d("$M_D_C$TAG", status)
}
override fun getTeleTimeStamp(): Long {

View File

@@ -7,42 +7,35 @@ import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HdMapBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ARRIVE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_GUARDIAN
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_RECORD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ROUTE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_CONFIG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_ACTIONS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_OBJECTS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_STATUS_QUERY_RESP
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_ADAS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_ACTIONS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_OBJECTS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ARRIVE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_RECORD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ROUTE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_VEHICLE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_CONFIG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_ACTIONS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_OBJECTS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS_QUERY_RESP
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_SOURCE_ADAS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_GNSS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_INIT_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_AUTOPILOT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_VEHICLE
import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeArriveAtStation
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotGuardian
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotSNRequest
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotStatusRespByQuery
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutoPilotDockerInfo
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutoPilotStatus
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListenerManager.invokeAutopilotAbility
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager.invokeAutopilotCarConfigData
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyDataUpdate
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyPlanningObj
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotWarnMessage
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordConfig
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordResult
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager.invokeAutopilotStatistics
@@ -55,12 +48,11 @@ import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsiListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsmListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuWarningSpatListenerManager
import com.mogo.eagle.core.function.call.v2x.*
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.support.obu.ObuScene
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.OnAdasListener
import com.zhidao.support.adas.high.bean.AdasParam
import com.zhjt.mogo.adas.data.bean.AdasParam
import com.zhidao.support.adas.high.common.ProtocolStatus
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics
import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask
@@ -72,8 +64,6 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import com.zhjt.service.chain.ChainLog
import com.zhjt.service.chain.TracingConstants
import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD
import function_state_management.FunctionStates
import mogo.telematics.pad.MessagePad
import mogo.telematics.pad.MessagePad.TrackedObject
@@ -87,10 +77,6 @@ import record_cache.RecordPanelOuterClass
import system_master.SystemStatusInfo
/**
* @author emArrow
* @since 2022/3/11
*
*
* 适配ADAS 回调监听分发,这里不做业务,只做数据包装及分发处理
*/
class MoGoAdasListenerImpl : OnAdasListener {
@@ -101,12 +87,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
//车前引导线
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAJECTORY,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_TRAJECTORY,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_TRAJECTORY,
paramIndexes = [0, 1]
)
override fun onTrajectory(header: MessagePad.Header, trajectory: MessagePad.Trajectory?) {
if (HdMapBuildConfig.isMapLoaded) {
@@ -120,10 +104,8 @@ class MoGoAdasListenerImpl : OnAdasListener {
// @ChainLog(
// linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED,
// linkCode = CHAIN_LINK_ADAS,
// endpoint = PAD,
// nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA,
// paramIndexes = [0, 1],
// clientPkFileName = "sn"
// paramIndexes = [0, 1]
// )
override fun onTrackedObjects(
header: MessagePad.Header,
@@ -136,20 +118,17 @@ class MoGoAdasListenerImpl : OnAdasListener {
//自车定位信息
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_GNSS,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_CAR_LOC,
paramIndexes = [0, 1]
)
override fun onGnssInfo(header: MessagePad.Header, gnssInfo: MessagePad.GnssInfo) {
CallerChassisGnssListenerManager.invokeChassisGnssListener(gnssInfo)
if (gnssInfo != null) {
if (1 == FunctionBuildConfig.gpsProvider) {
// 同步更新经纬度和系统时间至 AutoPilotStatusListener
CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon(
CallerAutoPilotStatusListenerManager.updateAutoPilotLocAndTime(
gnssInfo.satelliteTime,
gnssInfo.longitude,
gnssInfo.latitude
@@ -167,12 +146,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param vehicleState 数据
*/
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_VEHICLE,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_VEHICLE,
paramIndexes = [0, 1]
)
override fun onVehicleState(
header: MessagePad.Header,
@@ -229,12 +206,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param vehicleState 数据
*/
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_VEHICLE,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_VEHICLE,
paramIndexes = [0, 1]
)
override fun onChassisStates(
header: MessagePad.Header,
@@ -290,12 +265,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
//自动驾驶状态
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_STATUS,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_STATUS,
paramIndexes = [0, 1]
)
override fun onAutopilotState(
header: MessagePad.Header,
@@ -305,40 +278,17 @@ class MoGoAdasListenerImpl : OnAdasListener {
//工控机模拟时间
CallerAutopilotVehicleStateListenerManager.invokeAutopilotTime(header.timestamp.toLong())
if (HdMapBuildConfig.isMapLoaded) {
// 初始化自动驾驶状态信息
val autopilotStatusInfo = getAutoPilotStatusInfo()
autopilotStatusInfo.state = autopilotState.state
autopilotStatusInfo.pilotmode = autopilotState.autopilotMode
autopilotStatusInfo.reason = autopilotState.reason
autopilotStatusInfo.version = AdasManager.getInstance().adasVersion
if (autopilotStatusInfo.connectIP == null) {
autopilotStatusInfo.connectIP = AdasManager.getInstance().ipcConnectedIp
}
if (autopilotStatusInfo.connectPort == null) {
autopilotStatusInfo.connectPort = AdasManager.getInstance().ipcConnectedPort
}
AdasManager.getInstance().carConfig?.let {
autopilotStatusInfo.dockVersion = it.dockVersion
}
CallerLogger.d(
"Upgrade",
"origin = ${autopilotStatusInfo.connectStatus} -----now = ${AppConfigInfo.isConnectAutopilot} "
)
AppConfigInfo.isConnectAutopilot = autopilotStatusInfo.connectStatus
AppConfigInfo.connectStatusDescribe = autopilotStatusInfo.connectStatusDescribe
invokeAutoPilotStatus()
updateAutoPilotStatus(autopilotState.state, autopilotState.autopilotMode)
}
}
}
//监控
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_GUARDIAN,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_GUARDIAN,
paramIndexes = [0, 1]
)
override fun onReportMessage(
header: MessagePad.Header,
@@ -350,14 +300,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
//感知红绿灯
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT,
paramIndexes = [0, 1],
clientPkFileName = "sn"
)
override fun onPerceptionTrafficLight(
header: MessagePad.Header?,
trafficLights: TrafficLightOuterClass.TrafficLights?
@@ -377,19 +319,21 @@ class MoGoAdasListenerImpl : OnAdasListener {
//他车轨迹预测
}
//todo 新增稳定设备类型需要添加目的避免在nuc设备上使用此类功能
private val limit = DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()
override fun onPointCloud(header: MessagePad.Header, pointCloud: ByteArray?) {
//点云数据透传
CallerAutopilotPointCloudListenerManager.invokeAutopilotPointCloudDataUpdate(pointCloud)
if(limit){
//点云数据透传
CallerAutopilotPointCloudListenerManager.invokeAutopilotPointCloudDataUpdate(pointCloud)
}
}
//planning障碍物
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_OBJECTS,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_OBJECTS,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_P_OBJECTS,
paramIndexes = [0, 1]
)
override fun onPlanningObjects(
header: MessagePad.Header?,
@@ -410,18 +354,17 @@ class MoGoAdasListenerImpl : OnAdasListener {
//工控机基础配置信息
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_CONFIG,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_INIT_STATUS,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_CAR_CONFIG,
paramIndexes = [0, 1]
)
override fun onCarConfigResp(
header: MessagePad.Header,
carConfigResp: MessagePad.CarConfigResp?
) {
if (carConfigResp != null) {
updateAutoPilotDockerInfo(carConfigResp.dockVersion)
AppConfigInfo.dockerVersion = carConfigResp.dockVersion
AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号
AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址
@@ -433,12 +376,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
//全局路径规划
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ROUTE,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_ROUTE,
paramIndexes = [0, 1]
)
override fun onGlobalPathResp(
header: MessagePad.Header,
@@ -449,12 +390,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
//数据采集badCase
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_RECORD,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_RECORD,
paramIndexes = [0, 1]
)
override fun onRecordResult(
header: MessagePad.Header,
@@ -465,27 +404,15 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//预警信息
// @ChainLog(
// linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
// linkCode = CHAIN_LINK_ADAS,
// endpoint = PAD,
// nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_WARN,
// paramIndexes = [0, 1],
// clientPkFileName = "sn"
// )
override fun onWarn(header: MessagePad.Header, warn: MessagePad.Warn?) {
invokeAutopilotWarnMessage(warn)
}
//到站回调
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ARRIVE,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_ARRIVE,
paramIndexes = [0, 1]
)
override fun onArrivalNotification(
header: MessagePad.Header,
@@ -496,12 +423,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
//状态查询应答
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_STATUS_QUERY_RESP,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_STATUS_QUERY_RESP,
paramIndexes = [0, 1]
)
override fun onStatusQueryResp(
header: MessagePad.Header?,
@@ -526,12 +451,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
* planning决策状态, 透传
*/
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_PLANNING_ACTIONS,
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_PLANNING_ACTIONS,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_P_ACTIONS,
paramIndexes = [0, 1]
)
override fun onPlanningActionMsg(
header: MessagePad.Header?,
@@ -620,7 +543,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param header 头
* @param roboSweeperTaskIndex 数据
*/
override fun onSweeperTaskIndexData(header: MessagePad.Header?, roboSweeperTaskIndex: RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex?) {
override fun onSweeperTaskIndexData(
header: MessagePad.Header?,
roboSweeperTaskIndex: RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex?
) {
roboSweeperTaskIndex?.let {
//清扫车(福田)清扫控制系统状态
CallerSweeperFutianCleanSystemListenerManager.invokeSweeperFutianCleanTaskIndexData(it)
@@ -752,12 +678,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param rsi 数据
*/
@ChainLog(
linkChainLog = ChainConstant.CHAIN_LINK_LOG_CLOUD_V2N,
linkCode = ChainConstant.CHAIN_LINK_CLOUD,
endpoint = PAD,
nodeAliasCode = ChainConstant.CHAIN_ALIAS_CODE_CLOUD_V2N,
paramIndexes = [0],
clientPkFileName = "sn"
linkChainLog = ChainConstant.CHAIN_TYPE_V2X,
linkCode = ChainConstant.CHAIN_SOURCE_CLOUD,
nodeAliasCode = ChainConstant.CHAIN_CODE_V2X_MSG,
paramIndexes = [0, 1]
)
override fun onV2nCongestionEvent(header: MessagePad.Header, rsi: MogoV2X.RSI_PB) {
CallerAutopilotIdentifyListenerManager.invokeAutopilotV2nCongestionEvent(header, rsi)
@@ -774,15 +698,26 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param parkingViolation 违停 ---包含 静态障碍车
*/
@ChainLog(
linkChainLog = ChainConstant.CHAIN_LINK_LOG_CLOUD_V2N,
linkCode = ChainConstant.CHAIN_LINK_CLOUD,
endpoint = PAD,
nodeAliasCode = ChainConstant.CHAIN_ALIAS_CODE_CLOUD_V2N,
paramIndexes = [0],
clientPkFileName = "sn"
linkChainLog = ChainConstant.CHAIN_TYPE_V2X,
linkCode = ChainConstant.CHAIN_SOURCE_CLOUD,
nodeAliasCode = ChainConstant.CHAIN_CODE_V2X_MSG,
paramIndexes = [0]
)
override fun onV2nGlobalPathEvents(header: MessagePad.Header, roadOverview: RoadOverviewEvents.RoadOverviewData, construct: MogoV2X.RSI_PB?, triangle: MogoV2X.RSI_PB?, congestion: MogoV2X.RSI_PB?, parkingViolation: MogoV2X.RSM_PB?) {
CallerV2XListenerManager.dispatchV2nGlobalPathEvents(roadOverview.eventCount, construct, triangle, congestion, parkingViolation)
override fun onV2nGlobalPathEvents(
header: MessagePad.Header,
roadOverview: RoadOverviewEvents.RoadOverviewData,
construct: MogoV2X.RSI_PB?,
triangle: MogoV2X.RSI_PB?,
congestion: MogoV2X.RSI_PB?,
parkingViolation: MogoV2X.RSM_PB?
) {
CallerV2XListenerManager.dispatchV2nGlobalPathEvents(
roadOverview.eventCount,
construct,
triangle,
congestion,
parkingViolation
)
}
/**
@@ -796,6 +731,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param adasParam 解析后的配置参数
*/
override fun onGetParamResp(header: MessagePad.Header, getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) {
CallerAutopilotGetParamResponseDispatcher.dispatchResponse(header, getParamResp, adasParam)
}
/**

View File

@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.datacenter.autopilot.adapter
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.debug.DebugConfig.*
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
@@ -10,7 +11,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ADAS_IMPL
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.OnAdasConnectStatusListener
@@ -24,11 +25,11 @@ import com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.PASSENGER
* ADAS-SDK与工控机连接状态回调
*/
class MoGoAdasMsgConnectStatusListenerImpl :
OnAdasConnectStatusListener,
IMoGoAutopilotStatusListener,
IMoGoCloudListener {
OnAdasConnectStatusListener,
IMoGoAutopilotStatusListener,
IMoGoCloudListener {
companion object{
companion object {
private const val TAG = "ConnectStatus"
}
@@ -40,53 +41,63 @@ class MoGoAdasMsgConnectStatusListenerImpl :
override fun onConnectionIPCStatus(ipcConnectionStatus: Int, reason: String?) {
CallerAutoPilotStatusListenerManager.invokeAutoPilotIPCStatusChanged(
ipcConnectionStatus,
reason
ipcConnectionStatus,
reason
)
if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 连接成功")
connectStatus = true
// 初始化自动驾驶状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
AppConfigInfo.connectStatusDescribe = reason
when (ipcConnectionStatus) {
Constants.IPC_CONNECTION_STATUS.CONNECTED -> {
CallerLogger.d("$M_D_C$TAG", "webSocket 连接成功")
connectStatus = true
// 初始化自动驾驶状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
AdasManager.getInstance().ipcConnectedIp
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort =
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort =
AdasManager.getInstance().ipcConnectedPort
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = true
// 同步SN给工控机
syncBasicInfoToAutopilot()
//每次工控机连接成功后,需同步当前设置的美化模式状态
CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode)
//当连接状态是关闭美化模式时,同步给工控机
if (!FunctionBuildConfig.isDemoMode) {
CallerAutoPilotControlManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode)
}
//每次工控机连接成功后,需同步当前设置的雨天模式状态
CallerAutoPilotControlManager.setRainMode(FunctionBuildConfig.isRainMode)
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.DISCONNECTED) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 连接失败 reason:$reason")
if (connectStatus) {
reason?.let {
ToastUtils.showLong("工控机连接断开,原因:$it , 等待重连")
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().version =
AdasManager.getInstance().adasVersion
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = true
AppConfigInfo.isConnectAutopilot = true
// 同步SN给工控机
syncBasicInfoToAutopilot()
//每次工控机连接成功后,需同步当前设置的美化模式状态
CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode)
//当连接状态是关闭美化模式时,同步给工控机
if (!FunctionBuildConfig.isDemoMode) {
CallerAutoPilotControlManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode)
}
connectStatus = false
//每次工控机连接成功后,需同步当前设置的雨天模式状态
CallerAutoPilotControlManager.setRainMode(FunctionBuildConfig.isRainMode)
}
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
Constants.IPC_CONNECTION_STATUS.DISCONNECTED -> {
CallerLogger.d("$M_D_C$TAG", "webSocket 连接失败 reason:$reason")
if (connectStatus) {
reason?.let {
ToastUtils.showLong("工控机连接断开,原因:$it , 等待重连")
}
connectStatus = false
}
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP =
AdasManager.getInstance().ipcConnectedIp
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort =
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort =
AdasManager.getInstance().ipcConnectedPort
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = false
//与工控机断开连接,需要重置自动驾驶状态(包括上传至云平台缓存信息),等待连接成功后同步状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state = 0
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().pilotmode = 0
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTING) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 正在连接")
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 正在搜索工控机IP")
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用")
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = false
AppConfigInfo.isConnectAutopilot = false
//与工控机断开连接,需要重置自动驾驶状态(包括上传至云平台缓存信息),等待连接成功后同步状态信息
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state = 0
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().pilotmode = 0
}
Constants.IPC_CONNECTION_STATUS.CONNECTING -> {
CallerLogger.d("$M_D_C$TAG", "webSocket 正在连接")
}
Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS -> {
CallerLogger.d("$M_D_C$TAG", "webSocket 正在搜索工控机IP")
}
Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS -> {
CallerLogger.d("$M_D_C$TAG", "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用")
}
}
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ipcConnStatus =
ipcConnectionStatus
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ipcConnStatus = ipcConnectionStatus
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatusDescribe = reason
CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus()
}
@@ -105,24 +116,24 @@ class MoGoAdasMsgConnectStatusListenerImpl :
/**
* 同步SN信息给工控机
*/
private fun syncBasicInfoToAutopilot(sn: String? = null) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "同步PAD的SN给工控机……")
private fun syncBasicInfoToAutopilot() {
CallerLogger.d("$M_D_C$TAG", "同步PAD的SN给工控机……")
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
// 设置PAD-SN给工控,网络环境
AdasManager.getInstance()
.sendBasicInfoResp(
MoGoAiCloudClientConfig.getInstance().sn,
getEnvironment(),
getTerminalRole()
)
.sendBasicInfoResp(
MoGoAiCloudClientConfig.getInstance().sn,
getEnvironment(),
getTerminalRole()
)
} else {
// 乘客屏先不传sn
AdasManager.getInstance()
.sendBasicInfoResp(
"",
getEnvironment(),
getTerminalRole()
)
.sendBasicInfoResp(
"",
getEnvironment(),
getTerminalRole()
)
}
}
@@ -145,7 +156,7 @@ class MoGoAdasMsgConnectStatusListenerImpl :
}
override fun tokenGot(token: String, sn: String) {
syncBasicInfoToAutopilot(sn)
syncBasicInfoToAutopilot()
}
}

View File

@@ -1,7 +1,5 @@
package com.mogo.eagle.core.function.datacenter.autopilot.server
import android.annotation.SuppressLint
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
@@ -13,12 +11,10 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.zhidao.support.adas.high.AdasManager
import com.zhjt.service.chain.ChainLog
import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger
/**
* @author xiaoyuzhou
@@ -37,7 +33,6 @@ class AsyncDataToAutopilotServer private constructor() : IMoGoTrafficLightListen
}
}
private var mPreAutoStatus = AtomicInteger(-1)
private var createSubscribe: Disposable? = null
fun initServer() {
@@ -45,30 +40,24 @@ class AsyncDataToAutopilotServer private constructor() : IMoGoTrafficLightListen
CallerTrafficLightListenerManager.addListener(TAG, this)
}
@SuppressLint("CheckResult")
override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) {
super.onAutopilotStatusResponse(autoPilotStatusInfo)
val state = autoPilotStatusInfo.state
if (mPreAutoStatus.get() != state) {
mPreAutoStatus.set(state)
createSubscribe?.let {
if (!it.isDisposed) {
bizLog(SceneConstant.M_ADAS_IMPL + TAG, "自动驾驶状态变化取消前置轨迹请求间隔2s重新请求底盘轨迹")
createSubscribe?.dispose()
}
override fun onAutopilotStatusResponse(state: Int) {
bizLog(SceneConstant.M_D_C + TAG, "自动驾驶状态变化:$state")
createSubscribe?.let {
if (!it.isDisposed) {
bizLog(SceneConstant.M_D_C + TAG, "自动驾驶状态变化取消前置轨迹请求间隔2s重新请求底盘轨迹")
createSubscribe?.dispose()
}
when (state) {
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
createSubscribe = Observable.timer(2000L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
bizLog(SceneConstant.M_ADAS_IMPL + TAG, "请求底盘轨迹")
CallerAutoPilotControlManager.getGlobalPath()
}
}
else -> {}
}
when (state) {
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
createSubscribe = Observable.timer(2000L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
bizLog(SceneConstant.M_D_C + TAG, "请求底盘轨迹")
CallerAutoPilotControlManager.getGlobalPath()
}
}
else -> {}
}
}
@@ -82,12 +71,10 @@ class AsyncDataToAutopilotServer private constructor() : IMoGoTrafficLightListen
}
@ChainLog(
linkChainLog = ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
linkCode = ChainConstant.CHAIN_LINK_ADAS,
endpoint = PAD,
nodeAliasCode = ChainConstant.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_BIZ,
paramIndexes = [0, 1],
clientPkFileName = "sn"
linkChainLog = ChainConstant.CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_ADAS_ROUTE_REQ,
paramIndexes = [0, 1]
)
private fun bizLog(tag: String, msg: String) {
CallerLogger.d(tag, msg)

View File

@@ -9,7 +9,7 @@ import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_INIT_STATUS
import com.mogo.eagle.core.data.multidisplay.TelematicConstant
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.setDemoMode
@@ -28,7 +28,6 @@ import com.mogo.telematic.client.NettyTcpClient
import com.mogo.telematic.client.status.ConnectState
import com.zhidao.support.adas.high.AdasManager
import com.zhjt.service.chain.ChainLog
import com.zhjt.service.chain.TracingConstants
import io.netty.channel.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -66,10 +65,7 @@ class TeleMsgHandler : IMsgHandler {
AdasManager.getInstance().decoderRaw(it.body)
} catch (e: Exception) {
e.printStackTrace()
CallerLogger.e(
"${SceneConstant.M_ADAS_IMPL}$TAG",
"乘客屏解析数据过程中出现异常:${e.message}"
)
invokeNettyConnResult("乘客屏解析数据过程中出现异常:${e.message}")
}
}
MogoProtocolMsg.SYNC_MODE_STATUS -> {
@@ -145,11 +141,6 @@ class TeleMsgHandler : IMsgHandler {
CallerTrafficLightListenerManager.invokeEnterCrossRoad(false)
}
}
TelematicConstant.OPEN_ROMA_STATUS -> {
ThreadUtils.runOnUiThread {
CallerTelematicListenerManager.invokeReceivedMsg(TelematicConstant.OPEN_ROMA_STATUS,it.body)
}
}
TelematicConstant.CONTROL_PASSENGER_DRIVER_MONITOR -> {
ThreadUtils.runOnUiThread {
CallerTelematicListenerManager.invokeReceivedMsg(TelematicConstant.CONTROL_PASSENGER_DRIVER_MONITOR,it.body)
@@ -224,11 +215,6 @@ class TeleMsgHandler : IMsgHandler {
TelematicConstant.BUSINESS_STRING -> {
CallerTelematicListenerManager.invokeReceivedMsg(TelematicConstant.BUSINESS_STRING, it.body)
}
TelematicConstant.OPEN_ROMA_STATUS -> {
ThreadUtils.runOnUiThread {
CallerTelematicListenerManager.invokeReceivedMsg(TelematicConstant.OPEN_ROMA_STATUS,it.body)
}
}
else -> {
}
}
@@ -242,7 +228,7 @@ class TeleMsgHandler : IMsgHandler {
override fun handleClientConn2Server(channel: Channel?) {
val socketAddress = channel?.remoteAddress().toString()
CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", "Client ip is:${socketAddress}")
CallerLogger.d("${SceneConstant.M_D_C}$TAG", "Client ip is:${socketAddress}")
setDemoMode(FunctionBuildConfig.isDemoMode)
setIgnoreConditionDraw(FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData)
}
@@ -294,15 +280,13 @@ class TeleMsgHandler : IMsgHandler {
override fun handleServerConnStatus(statusCode: Int, content: String?, channel: Channel) {}
@ChainLog(
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
linkCode = ChainConstant.CHAIN_LINK_ADAS,
endpoint = TracingConstants.Endpoint.PAD,
nodeAliasCode = ChainConstant.CHAIN_ALIAS_CODE_MULTI_CONNECT,
paramIndexes = [0],
clientPkFileName = "sn"
linkChainLog = CHAIN_TYPE_INIT_STATUS,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_MULTI_CONNECT,
paramIndexes = [0]
)
private fun invokeNettyConnResult(status: String) {
CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", status)
CallerLogger.d("${SceneConstant.M_D_C}$TAG", status)
}
/**

View File

@@ -79,7 +79,6 @@ object MoGoLocationDispatcher :
lastGnssLocation.errorCode = it.errorCode
lastGnssLocation.errorInfo = it.errorInfo
}
//FileUtils.writeToFile("/sdcard/Download/", "location_wgs84.txt", "${gnssInfo.longitude},${gnssInfo.latitude}\n")
if (1 == FunctionBuildConfig.gpsProvider) {
// WGS84坐标系高精度位置信息
CallerChassisLocationWGS84ListenerManager.invokeChassisLocationWGS84(
@@ -102,7 +101,6 @@ object MoGoLocationDispatcher :
override fun onMoGoLocationChanged(mogoLocation: MogoLocation) {
// 更新GaoDe 信息
lastGaoDeLocation = mogoLocation
// 计算最后一次工控机同步的定位是否超时,如果超时则切换为高德地图定位,暂定超过30秒需要切换
if (1 == FunctionBuildConfig.gpsProvider) {
if (TimeUtils.getNowMills() - lastGnssLocation.lastReceiveTime > 10000) {

View File

@@ -129,18 +129,31 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener
}
alertContent = EventTypeEnumNew.getWarningContent(appId)
ttsContent = EventTypeEnumNew.getWarningTts(appId)
alertContent = String.format( //事件才有影响范围
alertContent,
Math.round(rsiWarningData.warningMsgList[0].distance).toString(),
Math.round(rsiWarningData.warningMsgList[0].eventRadius).toString()
)
ttsContent = String.format(
ttsContent,
ConvertUtils.intToChinese(
rsiWarningData.warningMsgList[0].distance.roundToInt()),
ConvertUtils.intToChinese(
rsiWarningData.warningMsgList[0].eventRadius.roundToInt())
)
//他车超速行驶
if(EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType == appId){
//同向正后方、同向邻道左后方、同向邻道右后方 提示他车超速行驶
if(rsiWarningData.warningMsgList[0].targetPosition == MogoObuShowConstants.VEH_TARGET_POSITION.BEHEAD_IN_LANE
|| rsiWarningData.warningMsgList[0].targetPosition == MogoObuShowConstants.VEH_TARGET_POSITION.BEHEAD_LEFT
|| rsiWarningData.warningMsgList[0].targetPosition == MogoObuShowConstants.VEH_TARGET_POSITION.BEHEAD_RIGHT){
alertContent = String.format(alertContent, direction.desc)
ttsContent = String.format(ttsContent, direction.desc)
}else{
return
}
}else{
alertContent = String.format( //事件才有影响范围
alertContent,
Math.round(rsiWarningData.warningMsgList[0].distance).toString(),
Math.round(rsiWarningData.warningMsgList[0].eventRadius).toString()
)
ttsContent = String.format(
ttsContent,
ConvertUtils.intToChinese(
rsiWarningData.warningMsgList[0].distance.roundToInt()),
ConvertUtils.intToChinese(
rsiWarningData.warningMsgList[0].eventRadius.roundToInt())
)
}
}
//车内标牌
@@ -290,6 +303,10 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener
}
MogoObuShowConstants.STATUS.UPDATE -> { // 更新
if(EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType == appId){
saveObuToDcData(appId, alertContent, ttsContent)
showWarning(appId, alertContent, ttsContent, direction)
}
}
// 删除

View File

@@ -1,7 +1,6 @@
package com.mogo.eagle.core.function.datacenter.obu
import android.content.Context
import android.util.Log
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig
@@ -116,7 +115,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
}
fun setHvInfoSendCycle(time: Int) {
ObuManager.getInstance().setHvInfoPushCycle(time);
ObuManager.getInstance().setHvInfoPushCycle(time)
}
/**
@@ -137,8 +136,8 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
*/
fun deleteObuFile() {
UiThreadHandler.post {
var isDeleteSuccess = FileUtils.delete(Config.downLoadObuPath)
var isDeleteUnzipSuccess = FileUtils.delete(Config.downLoadUnzipObuPath)
val isDeleteSuccess = FileUtils.delete(Config.downLoadObuPath)
val isDeleteUnzipSuccess = FileUtils.delete(Config.downLoadUnzipObuPath)
CallerLogger.d(
"$M_OBU${MogoObuConst.TAG_UPGRADE_OBU}",
"deleteObuFile isDeleteSuccess = $isDeleteSuccess ----isDeleteUnzipSuccess = $isDeleteUnzipSuccess"
@@ -155,11 +154,11 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
/**
* 传递obu升级包给硬件
* @param upgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件
* @param isUpgradeNow 是否立即升级
* upgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件
* isUpgradeNow 是否立即升级
* falseOBU设备下次上电时执行升级程序
* ture: OBU设备立即执行升级程序 TODO 警告:执行立即升级时请确保车辆是静止状态。车辆在运行过程中升级设备可能会影响驾驶,严重时可能造成安全隐患!!!
* @param listener 升级回调
* listener 升级回调
* @return 是否调用成功
*/
fun uploadObuPack(filePathArray: Array<String>) {
@@ -232,8 +231,11 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
}
override fun onObuCallResult(result: BaseResult?) {
if(result == null){
return
}
val builder = StringBuilder("调用结果:\n")
when (result!!.function) {
when (result.function) {
MogoObuConstants.CALL_FUNCTION.CONFIG -> {
val configResult = result as MogoObuCallConfigResult
builder.append(configResult.type.desc).append("配置调用= ")
@@ -280,16 +282,12 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
*/
override fun onGnssInfo(gnssInfo: MessagePad.GnssInfo?) {
if (gnssInfo != null) {
CallerLogger.d(
"$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}",
"onGnssInfo lon = ${gnssInfo.longitude} --- lat = ${gnssInfo.latitude} ---speed = ${gnssInfo.gnssSpeed} ---heading = ${gnssInfo.heading} --acceleration = ${gnssInfo.acceleration} --yawRate = ${gnssInfo.yawRate}"
)
// 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统1-工控机2-OBU
if (2 == FunctionBuildConfig.gpsProvider) {
// 同步给MAP地图
CallerObuLocationWGS84ListenerManager.invokeObuLocationWGS84(gnssInfo)
// 同步更新经纬度和系统时间至 AutoPilotStatusListener
CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon(
CallerAutoPilotStatusListenerManager.updateAutoPilotLocAndTime(
System.currentTimeMillis() / 1000.0,
gnssInfo.longitude,
gnssInfo.latitude
@@ -396,6 +394,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
// }
MogoObuShowConstants.RTE.RTI_TYPE_SPEEDING -> { //超速行驶
appId = EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType
}
MogoObuShowConstants.RTE.RTI_TYPE_RETRIGRADE -> { //车辆逆行
appId =
@@ -404,18 +403,31 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
}
alertContent = EventTypeEnumNew.getWarningContent(appId)
ttsContent = EventTypeEnumNew.getWarningTts(appId)
alertContent = String.format( //事件才有影响范围
alertContent,
Math.round(data.warningMsgList[0].distance).toString(),
Math.round(data.warningMsgList[0].eventRadius).toString()
)
ttsContent = String.format(
ttsContent,
ConvertUtils.intToChinese(
data.warningMsgList[0].distance.roundToInt()),
ConvertUtils.intToChinese(
data.warningMsgList[0].eventRadius.roundToInt())
)
//他车超速行驶
if(EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType == appId){
//同向正后方、同向邻道左后方、同向邻道右后方 提示他车超速行驶
if(data.warningMsgList[0].targetPosition == MogoObuShowConstants.VEH_TARGET_POSITION.BEHEAD_IN_LANE
|| data.warningMsgList[0].targetPosition == MogoObuShowConstants.VEH_TARGET_POSITION.BEHEAD_LEFT
|| data.warningMsgList[0].targetPosition == MogoObuShowConstants.VEH_TARGET_POSITION.BEHEAD_RIGHT){
alertContent = String.format(alertContent, direction.desc)
ttsContent = String.format(ttsContent, direction.desc)
}else{
return
}
}else{
alertContent = String.format( //事件才有影响范围
alertContent,
Math.round(data.warningMsgList[0].distance).toString(),
Math.round(data.warningMsgList[0].eventRadius).toString()
)
ttsContent = String.format(
ttsContent,
ConvertUtils.intToChinese(
data.warningMsgList[0].distance.roundToInt()),
ConvertUtils.intToChinese(
data.warningMsgList[0].eventRadius.roundToInt())
)
}
}
//车内标牌
@@ -583,6 +595,10 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
}
MogoObuShowConstants.STATUS.UPDATE -> { // 更新
if(EventTypeEnumNew.TYPE_USECASE_ID_SLW.poiType == appId){
saveObuData(appId, alertContent, ttsContent)
showWarning(appId, alertContent, ttsContent, direction)
}
}
MogoObuShowConstants.STATUS.DELETE -> { // 删除
@@ -615,13 +631,13 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
) {
CallerLogger.d(
"$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}",
"onMogoObuRsmWarning ------> ${data.toString()}"
"onMogoObuRsmWarning ------> ${data?.toString()}"
)
if (HmiBuildConfig.isShowObuV2iView) {
if (HmiBuildConfig.isShowObuWeaknessTrafficView) {
// 交通参与者类型 0x0:未知 UNKNOWN | 1机动车 2:非机动车 NON_MOTOR | 3:行人 PEDESTRIAN 4:obu
if (data != null && data.participant != null) {
var v2xType = when (data.participant.ptcType) {
val v2xType = when (data.participant.ptcType) {
1 -> { //机动车
EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_MOTOR_VEHICLES.poiType
}
@@ -637,7 +653,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
}
val ttsContent = EventTypeEnumNew.getWarningTts(v2xType)
val alertContent = EventTypeEnumNew.getWarningContent(v2xType)
var level = -1
val direction = getMessageDirection(data.participant.targetPosition)
CallerLogger.d(
"$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}",
@@ -645,10 +660,9 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
)
when (data.status) {
MogoObuShowConstants.STATUS.ADD -> { // 添加
// 更新数据模型变色的时候是不是update,如果不是更新可能导致模型不变色add的时候是否有level高的 TODO
// 更新数据模型变色的时候是不是update,如果不是更新可能导致模型不变色add的时候是否有level高的
TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data)
?.let {
TrafficMarkerDrawer.updateITrafficThreatLevelInfo(it)
}
}
@@ -657,7 +671,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
}
MogoObuShowConstants.STATUS.DELETE -> { // 删除
// 更新数据 TODO 删除原来的改变颜色删除marker。不影响别的模型添加
// 更新数据 删除原来的改变颜色删除marker。不影响别的模型添加
TrafficDataConvertUtilsNew.cvxPtcThreatIndInfo2TrafficData(data)
?.let {
// 事件结束,还原交通参与者颜色
@@ -672,7 +686,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
//预警status
if (data.warningMsg != null && data.warningMsg.warningDataList != null && data.warningMsg.warningDataList.size > 0) {
level = data.warningMsg.warningDataList[0].warningLevel //默认是1个
val level = data.warningMsg.warningDataList[0].warningLevel //默认是1个
CallerLogger.d(
"$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}",
"onMogoObuRsmWarning ---status---> ${data.status} ---data.warningMsg.warningData[0].status = ${data.warningMsg.warningDataList[0].status} ---v2xType = $v2xType ---alertContent = $alertContent ---ttsContent = $ttsContent ---level = $level"
@@ -775,7 +789,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
/**
* 构造对应展示数据和场景 根据obu的场景add change delete确定是否展示
* @param appId 使用WarningTypeEnum获取icon、提示内容、tts内容
* @see com.mogo.module.common.enums.EventTypeEnumNew
* @see com.mogo.eagle.core.data.enums.EventTypeEnumNew
* EventTypeEnumNew在定义的id为了防止重复和原始数据是不一样的有对应关系
*/
private fun handleSdkObu(
@@ -990,7 +1004,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
// 添加
MogoObuShowConstants.STATUS.ADD,
MogoObuShowConstants.STATUS.UPDATE -> {
if (lights != null && lights.isNotEmpty()) {
if (lights.isNotEmpty()) {
changeTrafficLightStatus(appId, lights)
}
}
@@ -1057,8 +1071,8 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
if (HmiBuildConfig.isShowGreenWaveView) {
if (!isShowGreenWave) {
isShowGreenWave = true
var minSpeedTemp = Math.round(currentLight.suggestMinSpeed * 3.6)
var maxSpeedTemp = Math.round(currentLight.suggestMaxSpeed * 3.6)
var minSpeedTemp = (currentLight.suggestMinSpeed * 3.6).roundToInt()
val maxSpeedTemp = (currentLight.suggestMaxSpeed * 3.6).roundToInt()
if (minSpeedTemp == maxSpeedTemp) {
minSpeedTemp -= 5
}
@@ -1078,7 +1092,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
val maxSpeed = currentLight.suggestMaxSpeed
if (maxSpeed > 0) {
var currentSpeed =
val currentSpeed =
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().gnssSpeed.toDouble()
if (currentSpeed > 0) {
ttsContentNew =

View File

@@ -5,6 +5,7 @@ import android.os.CountDownTimer
import android.os.Handler
import com.mogo.eagle.core.data.biz.trafficlight.*
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.data.multidisplay.TelematicConstant
@@ -17,6 +18,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.zhjt.service.chain.ChainLog
import perception.TrafficLightOuterClass
import perception.TrafficLightOuterClass.TrafficLight
@@ -64,7 +66,7 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
@Volatile
private var hasObuLightStatus: Boolean = false
private var lightCountDownTimer: CountDownTimer?= null
private var lightCountDownTimer: CountDownTimer? = null
private var lastLightTime: Long = System.currentTimeMillis()
fun initServer(context: Context) {
@@ -80,16 +82,20 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
* @param trafficLights 感知红绿灯
*/
override fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) {
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"onAutopilotPerceptionTrafficLight ---- hasObuLightStatus = $hasObuLightStatus ----hasAiLightStatus = $hasAiLightStatus "
)
if (!hasObuLightStatus) {
if (!hasAiLightStatus) {
lastLightTime = System.currentTimeMillis()
if(lightCountDownTimer==null){
lightCountDownTimer = object: CountDownTimer(300000,1000){
if (lightCountDownTimer == null) {
lightCountDownTimer = object : CountDownTimer(300000, 1000) {
override fun onTick(millisUntilFinished: Long) {
if((System.currentTimeMillis() - lastLightTime)>1000){
if ((System.currentTimeMillis() - lastLightTime) > 1000) {
//隐藏红绿灯显示
CallerTrafficLightListenerManager.disableTrafficLight()
hide("感知倒计时结束隐藏", DataSourceType.TELEMATIC)
lightCountDownTimer?.cancel()
lightCountDownTimer = null
}
@@ -115,9 +121,13 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
} else if (it.hasUTurn()) {
light = it.uTurn
}
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"onAutopilotPerceptionTrafficLight light = $light "
)
if (light == null) {
//隐藏红绿灯显示
hide()
hide("感知light为null隐藏", DataSourceType.TELEMATIC)
} else {
onTrafficLightPlusSource(light.convert(), 0, DataSourceType.TELEMATIC)
}
@@ -131,10 +141,17 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
*/
override fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) {
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.SHOW_TRAFFIC_LIGHT, GsonUtils.toJson(trafficLightResult).toByteArray())
CallerTelematicManager.sendMsgToAllClients(
TelematicConstant.SHOW_TRAFFIC_LIGHT,
GsonUtils.toJson(trafficLightResult).toByteArray()
)
}
if (!hasObuLightStatus) {
hasAiLightStatus = true
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"onTrafficLightStatus trafficLightResult = $trafficLightResult "
)
updateTrafficLight(trafficLightResult)
}
}
@@ -144,18 +161,22 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
* @param enter true:进入路口false:离开路口
*/
override fun onEnterCrossRoad(enter: Boolean) {
CallerLogger.d("${SceneConstant.M_D_C}${TAG}", "onEnterCrossRoad enter = $enter ")
if (!enter) {
Handler().postDelayed({
hasAiLightStatus = false
hasObuLightStatus = false
}, 5000)
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.HIDE_TRAFFIC_LIGHT, "0".toByteArray())
CallerTelematicManager.sendMsgToAllClients(
TelematicConstant.HIDE_TRAFFIC_LIGHT,
"0".toByteArray()
)
}
//如果没有OBU灯态则进行隐藏如果有OBU灯态则交由OBU管理
if(!hasObuLightStatus){
if (!hasObuLightStatus) {
CallerTrafficLightListenerManager.resetTrafficLightStatus(!hasObuLightStatus)
hide()
hide("云端离开路口隐藏", DataSourceType.AICLOUD)
}
}
}
@@ -165,9 +186,13 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
*/
override fun onTrafficRequestError() {
hasAiLightStatus = false
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"onTrafficRequestError hasObuLightStatus = $hasObuLightStatus ------> "
)
CallerTrafficLightListenerManager.resetTrafficLightStatus(!hasObuLightStatus)
if(!hasObuLightStatus){
hide()
if (!hasObuLightStatus) {
hide("云端红绿灯接口请求失败隐藏", DataSourceType.AICLOUD)
}
}
@@ -175,30 +200,46 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
* obu数据消失
*/
override fun onObuTrafficLightDisapper() {
CallerLogger.d("${SceneConstant.M_D_C}${TAG}", "onObuTrafficLightDisapper ------> ")
hasObuLightStatus = false
hide()
hide("OBU红绿灯消息关闭隐藏", DataSourceType.OBU)
}
/**
* 是否重置红绿灯数据,需要确保在obu的红绿灯显示的时候不执行。否则会闪屏
*/
override fun resetTrafficLight(isReset: Boolean) {
CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "resetTrafficLight ------> isReset = $isReset ---hasObuLightStatus = $hasObuLightStatus")
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"resetTrafficLight ------> isReset = $isReset ---hasObuLightStatus = $hasObuLightStatus"
)
if (!hasObuLightStatus) {
if(isReset){
hide()
if (isReset) {
hide("云端重置红绿灯数据", DataSourceType.AICLOUD)
}
}
}
private fun hide(){
CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "hide() ---------> ")
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_SOCKET_TRAFFIC_LIGHT,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_ADAS_TRAFFIC_LIGHT_HIDE,
paramIndexes = [0, 1]
)
private fun hide(msg: String, sourceType: DataSourceType) {
CallerLogger.d("${SceneConstant.M_D_C}${TAG}", "hide() :$msg type :$sourceType")
CallerTrafficLightListenerManager.disableTrafficLight()
}
/**
* obu 红绿灯数据
* 红绿灯数据
*/
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_SOCKET_TRAFFIC_LIGHT,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_ADAS_TRAFFIC_LIGHT,
paramIndexes = [0, 1, 2]
)
override fun onTrafficLightPlusSource(
light: TrafficLightEnum,
remain: Int,
@@ -208,7 +249,10 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
if (lightSource == DataSourceType.OBU) {
hasObuLightStatus = true
}
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"onTrafficLightPlusSource ----- light = $light ---remain = $remain ---lightSource = $lightSource ---hasObuLightStatus = $hasObuLightStatus ---hasAiLightStatus = $hasAiLightStatus"
)
CallerTrafficLightListenerManager.showTrafficLight(light, lightSource)
if (remain == -1) {
CallerTrafficLightListenerManager.disableTrafficLightCountDown()
@@ -226,10 +270,10 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
CallerTrafficLightListenerManager.changeCountdownYellow(remain)
}
TrafficLightEnum.BLACK -> {
CallerTrafficLightListenerManager.disableTrafficLight()
hide("感知数据BLACK隐藏", lightSource)
}
else -> {
hide()
hide("未知红绿灯类型隐藏", lightSource)
}
}
@@ -237,6 +281,10 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
private fun updateTrafficLight(trafficLightResult: TrafficLightResult) {
val currentTrafficLight = trafficLightResult.currentRoadTrafficLight()
CallerLogger.d(
"${SceneConstant.M_D_C}${TAG}",
"updateTrafficLight ----- currentTrafficLight = $currentTrafficLight"
)
currentTrafficLight?.let {
val remain = if (it.remain > 99) {
99
@@ -245,9 +293,9 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight
}
onTrafficLightPlusSource(it.convert(), remain, DataSourceType.AICLOUD)
}
}
fun destroy() {
//取消注册监听AI云.OBU,路侧获取红绿灯状态
CallerTrafficLightListenerManager.removeListener(TAG)