From b8b705e8a21d96ac215b709f39c2e0786c1925af Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 2 Mar 2022 20:03:22 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=E5=90=AF=E7=94=A8=E5=A4=9A=E5=B1=8F?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotProvider.kt | 180 +++++++++--------- .../autopilot/MoGoTelematicProvider.kt | 29 +++ .../hmi/ui/setting/DebugSettingView.kt | 17 ++ .../mogo/eagle/core/data/app/AppConfigInfo.kt | 27 +++ .../core/data/constants/MogoServicePaths.java | 6 + .../api/autopilot/IMoGoAutopilotProvider.kt | 1 - .../api/telematic/IMogoTelematicProvider.kt | 13 ++ .../call/telematic/CallerTelematicManager.kt | 37 ++++ 8 files changed, 220 insertions(+), 90 deletions(-) create mode 100644 core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoTelematicProvider.kt create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/telematic/IMogoTelematicProvider.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/telematic/CallerTelematicManager.kt 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 f46f5684a6..2a56b3c174 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 @@ -4,6 +4,7 @@ import android.Manifest.permission import android.content.Context import androidx.annotation.RequiresPermission import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.autopilot.AutopilotControlCmdParameter import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.config.FunctionBuildConfig @@ -21,11 +22,20 @@ import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.telematic.MogoProtocolMsg +import com.mogo.telematic.MogoProtocolMsg.NORMAL_DATA +import com.mogo.telematic.NSDNettyManager +import com.mogo.telematic.client.listener.NettyClientListener +import com.mogo.telematic.client.status.ConnectState +import com.mogo.telematic.server.netty.NettyServerListener import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.AdasOptions import com.zhidao.support.adas.high.bean.IPCUpgradeInfo import com.zhidao.support.adas.high.common.Constants import com.zhidao.support.adas.high.common.CupidLogUtils +import io.netty.channel.Channel +import java.util.* import java.util.concurrent.TimeUnit @@ -36,7 +46,7 @@ import java.util.concurrent.TimeUnit */ @Route(path = MogoServicePaths.PATH_AUTO_PILOT) class MoGoAutopilotProvider : - IMoGoAutopilotProvider, IMoGoMapDataCollectProvider.OnMapCollectCmdListener { + IMoGoAutopilotProvider, IMoGoMapDataCollectProvider.OnMapCollectCmdListener { private val TAG = "MoGoAutoPilotProvider" private var mContext: Context? = null @@ -56,107 +66,99 @@ class MoGoAutopilotProvider : CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this) // "192.168.1.102" val options = AdasOptions.Builder() - .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN) - .setIpcAssignIP(FunctionBuildConfig.adasConnectIP) - .setClient(false) - .build() + .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN) + .setIpcAssignIP(FunctionBuildConfig.adasConnectIP) + .setClient(false) + .build() AdasManager.getInstance().create(context, options) -// NSDNettyManager.getInstance().startNSDNettyServer(context, object : NettyServerListener { -// override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) { -// Logger.d(TAG, "Receive client data is:${msg?.toString()}") -// } -// -// override fun onStartServer() { -// ToastUtils.showShort("司机端服务启动成功!") -// Logger.d(TAG, "onStartServer") -// } -// -// override fun onStopServer() { -// ToastUtils.showLong("司机端服务停止!") -// Logger.d(TAG, "onStopServer") -// } -// -// override fun onChannelConnect(channel: Channel?) { -// NSDNettyManager.getInstance().selectChannel(channel) -// val socketAddress = channel?.remoteAddress().toString() -// Logger.d(TAG, "Client ip is:${socketAddress}") -// } -// -// override fun onChannelDisConnect(channel: Channel?) { -// Logger.d(TAG, "onChannelDisConnect") -// } -// }) - } else {// 乘客 + NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object : + NettyServerListener { + override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) { + Logger.d(TAG, "Receive client data is:${msg?.toString()}") + } + + override fun onStartServer() { + ToastUtils.showShort("司机端服务启动成功!") + Logger.d(TAG, "onStartServer") + } + + override fun onStopServer() { + ToastUtils.showLong("司机端服务停止!") + Logger.d(TAG, "onStopServer") + } + + override fun onChannelConnect(channel: Channel?) { + val socketAddress = channel?.remoteAddress().toString() + Logger.d(TAG, "Client ip is:${socketAddress}") + } + + override fun onChannelDisConnect(channel: Channel?) { + Logger.d(TAG, "onChannelDisConnect") + } + }, MoGoAiCloudClientConfig.getInstance().sn) + } else { // 乘客端默认接收绘制全局路径+引导线 //FunctionBuildConfig.isDemoMode = true //FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true // "192.168.1.103" val options = AdasOptions.Builder() - .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN) - .setIpcAssignIP(FunctionBuildConfig.adasConnectIP) - .setClient(false) - .build() + .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN) + .setIpcAssignIP(FunctionBuildConfig.adasConnectIP) + .setClient(false) + .build() AdasManager.getInstance().create(context, options) -// NSDNettyManager.getInstance().searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object : NettyClientListener { -// override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) { -// Logger.d(TAG, "收到司机端的数据!") -// // 乘客端收到adas数据直接解析,后续分发解析后的数据流程同司机端 -// msg?.let { -// AdasManager.getInstance().parseIPCData(it.body) -// Logger.d(TAG, "解析司机端数据完毕!") -// } -// } -// -// override fun onClientStatusConnectChanged(statusCode: Int, sign: String?) { -// when (statusCode) { -// ConnectState.STATUS_CONNECT_SUCCESS -> Logger.d(TAG, "乘客端连接司机端服务成功! sign is:${sign}") -// else -> { -// ToastUtils.showLong("和司机端连接异常!") -// Logger.d(TAG, "client statusCode is:${statusCode}") -// } -// } -// } -// }) + NSDNettyManager.getInstance() + .searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object : + NettyClientListener { + override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) { + Logger.d(TAG, "收到司机端的数据!") + // 乘客端收到adas数据直接解析,后续分发解析后的数据流程同司机端 + msg?.let { + AdasManager.getInstance().parseIPCData(it.body) + Logger.d(TAG, "解析司机端数据完毕!") + } + } + + override fun onClientStatusConnectChanged(statusCode: Int, sign: String?) { + when (statusCode) { + ConnectState.STATUS_CONNECT_SUCCESS -> { + Logger.d(TAG, "乘客端连接司机端服务成功! sign is:${sign}") + } + else -> { + ToastUtils.showLong("和司机端连接异常!") + Logger.d(TAG, "client statusCode is:${statusCode}") + } + } + } + }) } //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// // 监听 adas 连接状态 AdasManager.getInstance() - .setOnAdasConnectStatusListener(MoGoAdasMsgConnectStatusListenerImpl()) + .setOnAdasConnectStatusListener(MoGoAdasMsgConnectStatusListenerImpl()) // 监听ADAS-SDK获取到的工控机数据(乘客也需注册) AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) -// // 司机端监听 -// if (FunctionBuildConfig.appIdentityMode == 0) { -// AdasManager.getInstance().setOnMultiDeviceListener { bytes -> -// Logger.d( -// TAG, -// "司机端接收到工控机吐出来的数据为:${Arrays.toString(bytes)}" -// ) -// // 发送数据给乘客端 -// if (NSDNettyManager.getInstance().isServerStart) { -// Logger.d( -// TAG, -// "司机端透传数据给乘客端!" -// ) -// NSDNettyManager.getInstance().sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) -//// NSDNettyManager.getInstance().sendMogoProtocolMsgToClient(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) { channelFuture: ChannelFuture -> -//// if (channelFuture.isSuccess) { -//// Logger.d( -//// TAG, -//// "Send data to client is success." -//// ) -//// } else { -//// Logger.d( -//// TAG, -//// "Send data to client is failure." -//// ) -//// } -//// } -// } else { -// Logger.d(TAG, "司机端Server未启动!") -// } -// } -// } + // 司机端监听 + if (FunctionBuildConfig.appIdentityMode == 0) { + AdasManager.getInstance().setOnMultiDeviceListener { bytes -> + Logger.d( + TAG, + "司机端接收到工控机吐出来的数据为:${Arrays.toString(bytes)}" + ) + // 发送数据给乘客端 + if (NSDNettyManager.getInstance().isServerStart) { + Logger.d( + TAG, + "司机端透传数据给乘客端!" + ) + NSDNettyManager.getInstance() + .sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) + } else { + Logger.d(TAG, "司机端Server未启动!") + } + } + } // 同步数据给工控机的服务 AsyncDataToAutopilotServer.INSTANCE.initServer() // 同步是否开启美化模式 @@ -226,7 +228,7 @@ class MoGoAutopilotProvider : override fun recordPackage(): Boolean { return AdasManager.getInstance() - .recordPackage(1, (System.currentTimeMillis() / 1000).toInt()) + .recordPackage(1, (System.currentTimeMillis() / 1000).toInt()) } override fun recordPackage(type: Int, id: Int): Boolean { diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoTelematicProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoTelematicProvider.kt new file mode 100644 index 0000000000..45aede39be --- /dev/null +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoTelematicProvider.kt @@ -0,0 +1,29 @@ +package com.mogo.eagle.core.function.autopilot + +import android.content.Context +import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.function.api.telematic.IMogoTelematicProvider +import com.mogo.telematic.NSDNettyManager + +@Route(path = MogoServicePaths.PATH_TELEMATIC_PROVIDER) +class MoGoTelematicProvider: IMogoTelematicProvider { + + override fun init(context: Context?) {} + + override fun getServerStarted(): Boolean { + return NSDNettyManager.getInstance().isServerStart + } + + override fun getClientConnStatus(): Boolean { + return NSDNettyManager.getInstance().connectStatus + } + + override fun getServerIp(): String { + return NSDNettyManager.getInstance().connServerIp + } + + override fun getServerToken(): String { + return NSDNettyManager.getInstance().serverSn + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 279169c410..cd906d7b62 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -34,6 +34,7 @@ import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager import com.mogo.eagle.core.function.call.map.CallerSmpManager import com.mogo.eagle.core.function.call.obu.CallerOBUManager import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView @@ -45,6 +46,10 @@ import com.mogo.eagle.core.utilcode.mogo.toast.TipToast import com.mogo.eagle.core.utilcode.util.* import com.mogo.map.MogoMap import com.mogo.map.uicontroller.VisualAngleMode +import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_300 +import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS +import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_TOP +import com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT import com.mogo.map.uicontroller.VisualAngleMode.* import com.mogo.module.common.MogoApisHandler import kotlinx.android.synthetic.main.view_debug_setting.view.* @@ -490,6 +495,18 @@ class DebugSettingView @JvmOverloads constructor( AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context) AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot() + when (FunctionBuildConfig.appIdentityMode) { + 0x00 -> {// 司机端 + AppConfigInfo.isDriver = true + AppConfigInfo.isConnectedNetty = CallerTelematicManager.getServerStarted() + } + else -> { + AppConfigInfo.isDriver = false + AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus() + AppConfigInfo.serverIp = CallerTelematicManager.getServerIp() + } + } + // 将数据绘制 tvAppInfo.text = Html.fromHtml(AppConfigInfo.toString()) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt index 9c93745808..505e240334 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt @@ -45,6 +45,12 @@ object AppConfigInfo { // 是否OBU var isConnectObu: Boolean = false + var isDriver = true + + // Netty该端是否连接上另一端 + var isConnectedNetty = false + + var serverIp = "" override fun toString(): String { return "-------------------应用信息--------------------
" + @@ -108,6 +114,27 @@ object AppConfigInfo { "" } }${isConnectObu}
" + + "${ + when { + isDriver -> { + "司机端Server启动" + } + else -> { + "乘客端${ + when { + serverIp.isNotEmpty() -> "(目标ip为:${serverIp})" + else -> "" + } + }连接" + } + } + }是否正常:${ + if (isConnectedNetty) { + "" + } else { + "" + } + }${isConnectedNetty}
" + "------------------工控机感知&规控数据---------------------
" } } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java index 9e910c1789..1a23e90462 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/constants/MogoServicePaths.java @@ -274,4 +274,10 @@ public class MogoServicePaths { */ @Keep public static final String PATH_MAP_DATA_COLLECT_PROVIDER = "/map_x/collect"; + + /** + * 多屏通信模块 + */ + @Keep + public static final String PATH_TELEMATIC_PROVIDER = "/telematic/api"; } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt index 22f824401e..848d80661b 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt @@ -124,5 +124,4 @@ interface IMoGoAutopilotProvider : IMoGoFunctionServerProvider { * isEnable = false 关闭 */ fun setControlAutopilotCarAuto(isEnable: Boolean) - } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/telematic/IMogoTelematicProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/telematic/IMogoTelematicProvider.kt new file mode 100644 index 0000000000..70303c7b99 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/telematic/IMogoTelematicProvider.kt @@ -0,0 +1,13 @@ +package com.mogo.eagle.core.function.api.telematic + +import com.alibaba.android.arouter.facade.template.IProvider + +interface IMogoTelematicProvider: IProvider { + fun getServerStarted(): Boolean + + fun getClientConnStatus(): Boolean + + fun getServerIp(): String + + fun getServerToken(): String +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/telematic/CallerTelematicManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/telematic/CallerTelematicManager.kt new file mode 100644 index 0000000000..34bf5ea141 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/telematic/CallerTelematicManager.kt @@ -0,0 +1,37 @@ +package com.mogo.eagle.core.function.call.telematic + +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.function.api.telematic.IMogoTelematicProvider +import com.mogo.eagle.core.function.call.base.CallerBase + +object CallerTelematicManager { + private val TAG = "CallerTelematicManager" + + private val providerApi: IMogoTelematicProvider? + get() = CallerBase.getApiInstance( + IMogoTelematicProvider::class.java, + MogoServicePaths.PATH_TELEMATIC_PROVIDER + ) + + /** + * 获取Server是否启动的状态 + */ + fun getServerStarted(): Boolean { + return providerApi?.getServerStarted() ?: false + } + + /** + * 获取Client连接的状态 + */ + fun getClientConnStatus(): Boolean { + return providerApi?.getClientConnStatus() ?: false + } + + fun getServerIp(): String { + return providerApi?.getServerIp() ?: "" + } + + fun getServerToken(): String { + return providerApi?.getServerToken() ?: "" + } +} \ No newline at end of file