diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index 8f783ae662..86b6f769f0 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -25,6 +25,7 @@ import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasListenerImpl import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasMsgConnectStatusListenerImpl import com.mogo.eagle.core.function.autopilot.adapter.MoGoHandAdasMsgManager import com.mogo.eagle.core.function.autopilot.server.AsyncDataToAutopilotServer +import com.mogo.eagle.core.function.autopilot.telematic.EventListener import com.mogo.eagle.core.function.autopilot.telematic.IMsgHandler import com.mogo.eagle.core.function.autopilot.telematic.TeleMsgHandler import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager @@ -72,6 +73,8 @@ class MoGoAutopilotProvider : private var mContext: Context? = null private lateinit var msgHandler: IMsgHandler private var timer: Timer? = null + @Volatile + private var isInit = false override val functionName: String get() = TAG @@ -146,13 +149,24 @@ class MoGoAutopilotProvider : } }, MoGoAiCloudClientConfig.getInstance().sn) } else { - val options = AdasOptions - .Builder() - .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) - .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) - .setClient(false)// 乘客端直连工控机改为false - .build() - AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) + msgHandler.setListener(object : EventListener { + override fun connectDevice(isSupportMulti: Boolean) { + if (!isInit) { + isInit = true + if (isSupportMulti) { + // 直连工控机 + directConnect() + } else { + val options = AdasOptions + .Builder() + .setClient(true) + .build() + AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) + listenDeviceData() + } + } + } + }) NSDNettyManager.getInstance() .searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode), @@ -179,10 +193,7 @@ class MoGoAutopilotProvider : // 监听ADAS-SDK获取到的工控机数据(乘客也需注册) AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) - // 乘客屏监听工控机基础信息回调 - if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - CallerAutopilotCarConfigListenerManager.addListener(TAG, this) - } + CallerAutopilotCarConfigListenerManager.addListener(TAG, this) CallerLogger.i("$M_ADAS_IMPL$TAG", "initServer……") // 同步数据给工控机的服务 AsyncDataToAutopilotServer.INSTANCE.initServer() @@ -190,6 +201,47 @@ class MoGoAutopilotProvider : setRainMode(FunctionBuildConfig.isRainMode) } + private fun directConnect() { + val options = AdasOptions + .Builder() + .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) + .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) + .setClient(false)// 乘客端直连工控机改为false + .build() + AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) + } + + /** + * 司机屏转发工控机发过来的数据,乘客屏接收解析后的数据保持原流程不变 + */ + private fun listenDeviceData() { + AdasManager.getInstance().setOnMultiDeviceListener(object : OnMultiDeviceListener { + override fun onForwardingDriverIPCMessage(bytes: ByteArray?) { + if (bytes == null) + return + // 发送数据给乘客端 + if (NSDNettyManager.getInstance().isServerStart) { + msgHandler.synWriteTime() + NSDNettyManager.getInstance() + .sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) + } else { + CallerLogger.d("$M_ADAS_IMPL$TAG", "司机端Server未启动!") + } + } + + override fun onForwardingPassengerIPCMessage(bytes: ByteArray?) { + if (bytes == null) + return + NSDNettyManager.getInstance() + .sendMogoProtocolMsgToServer( + MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes), + null + ) + } + + }) + } + /** * 连接自动驾驶域控制器 * @@ -561,10 +613,23 @@ class MoGoAutopilotProvider : } override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { - // 乘客屏才监听 - CallerBindingcarManager.getBindingcarProvider() - .getBindingcarInfo(carConfigResp.macAddress, MoGoAiCloudClientConfig.getInstance().sn) - invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为:${carConfigResp.macAddress}") + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + if (!isInit) { + isInit = true + if (carConfigResp.dockVersion.contains("2.3.0")) {// 不支持多连接 + // 司机屏转发工控机发过来的数据 + listenDeviceData() + } + } + msgHandler.synMsgToAllClients() + } else {// 乘客屏 + CallerBindingcarManager.getBindingcarProvider() + .getBindingcarInfo( + carConfigResp.macAddress, + MoGoAiCloudClientConfig.getInstance().sn + ) + invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为:${carConfigResp.macAddress}") + } } @ChainLog( diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/EventListener.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/EventListener.kt new file mode 100644 index 0000000000..381a39a613 --- /dev/null +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/EventListener.kt @@ -0,0 +1,5 @@ +package com.mogo.eagle.core.function.autopilot.telematic + +interface EventListener { + fun connectDevice(isSupportMulti: Boolean) +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/IMsgHandler.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/IMsgHandler.kt index 3f9c72d8fc..2e9c751e2e 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/IMsgHandler.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/IMsgHandler.kt @@ -19,4 +19,6 @@ interface IMsgHandler { fun getTeleTimeStamp(): Long fun synMsgToAllClients() + + fun setListener(eventListener: EventListener?) } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/TeleMsgHandler.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/TeleMsgHandler.kt index 716eab5c48..78a8bad488 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/TeleMsgHandler.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/TeleMsgHandler.kt @@ -47,6 +47,8 @@ class TeleMsgHandler : IMsgHandler { @Volatile private var timestamp = 0L + private var listener: EventListener? = null + override fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel?) { msg?.let { when (it.protocolType) { @@ -86,6 +88,7 @@ class TeleMsgHandler : IMsgHandler { AppConfigInfo.plateNumber = carConfig.plateNumber AppConfigInfo.iPCMacAddress = carConfig.macAddress AppConfigInfo.dockerVersion = carConfig.dockVersion + listener?.connectDevice(!carConfig.dockVersion.contains("2.3.0")) invokeNettyConnResult( "司机屏发送给乘客屏配置信息为:${ TextFormat.printer().escapingNonAscii(false).printToString(carConfig) @@ -255,6 +258,10 @@ class TeleMsgHandler : IMsgHandler { return wrTimeStamp } + override fun setListener(eventListener: EventListener?) { + listener = eventListener + } + private fun reqServerSN() { if (NettyTcpClient.sSERVER_SN.isNullOrEmpty()) { ProcessLifecycleOwner.get().lifecycleScope.launch {