From 9fdafbc9046c387b8491d50e92b3b36d05ce8beb Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Thu, 19 May 2022 15:04:51 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=E8=B0=83=E8=AF=95=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9A=E5=B1=8F=E7=9A=84=E5=8F=91=E9=80=81?= =?UTF-8?q?=E6=88=96=E6=8E=A5=E6=94=B6=E6=95=B0=E6=8D=AE=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=88=B3=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_ipc_monitoring/build.gradle | 2 +- .../autopilot/MoGoAutopilotProvider.kt | 131 ++---------- .../autopilot/telematic/IMsgHandler.kt | 20 ++ .../autopilot/telematic/TeleMsgHandler.kt | 197 ++++++++++++++++++ .../hmi/ui/setting/DebugSettingView.kt | 4 +- .../mogo/eagle/core/data/app/AppConfigInfo.kt | 4 +- gradle.properties | 20 +- 7 files changed, 245 insertions(+), 133 deletions(-) create mode 100644 core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/IMsgHandler.kt create mode 100644 core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/TeleMsgHandler.kt diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle index 0dd7687714..242357adb3 100644 --- a/app_ipc_monitoring/build.gradle +++ b/app_ipc_monitoring/build.gradle @@ -75,6 +75,6 @@ dependencies { implementation project(':core:mogo-core-utils') implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.android.support:multidex:1.0.3' - implementation 'com.mogo.cloud:telematic:1.3.57' + implementation 'com.mogo.cloud:telematic:1.3.59' implementation 'com.jcraft:jsch:0.1.55' } 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 7ebf5cdf0f..67f976d817 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 @@ -24,6 +24,8 @@ 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.IMsgHandler +import com.mogo.eagle.core.function.autopilot.telematic.TeleMsgHandler import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager @@ -65,10 +67,7 @@ class MoGoAutopilotProvider : IMoGoAutopilotCarConfigListener { private val TAG = "MoGoAutoPilotProvider" private var mContext: Context? = null - @Volatile - private var isFirstDisc = true - @Volatile - private var wrTimeStamp = 0L + private lateinit var msgHandler: IMsgHandler override val functionName: String get() = TAG @@ -79,6 +78,7 @@ class MoGoAutopilotProvider : mContext = context // 初始化ADAS 域控制器 CupidLogUtils.setEnableLog(false) + msgHandler = TeleMsgHandler() // TODO 临时方案,根据不同的身份标识,连接不同的工控机IP if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机 // 注册地图采集功能 @@ -94,27 +94,7 @@ class MoGoAutopilotProvider : NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object : NettyServerListener { override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) { - msg?.let { - when (it.protocolType) { - REQ_CAR_NUMBER -> { - if (!AppConfigInfo.plateNumber.isNullOrEmpty()) { - val platNumberArray = AppConfigInfo.plateNumber!!.toByteArray() - NSDNettyManager.getInstance().sendMsgToSpecifiedClient( - MogoProtocolMsg( - REQ_CAR_NUMBER, - platNumberArray.size, platNumberArray - ), channel - ) { - invokeNettyConnResult("司机屏发送车牌号到乘客屏是否成功:${it.isSuccess}") - } - } else { - CallerAutoPilotManager.getCarConfig() - } - } - else -> { - } - } - } + msgHandler.handleMsgFromClient(msg, channel) } override fun onStartServer() { @@ -128,19 +108,7 @@ class MoGoAutopilotProvider : } override fun onChannelConnect(channel: Channel?) { - val socketAddress = channel?.remoteAddress().toString() - CallerLogger.d("$M_ADAS_IMPL$TAG", "Client ip is:${socketAddress}") - val byteArray = - if (FunctionBuildConfig.isDemoMode) byteArrayOf(1) else byteArrayOf(0) - NSDNettyManager.getInstance().sendMsgToSpecifiedClient( - MogoProtocolMsg( - SYNC_MODE_STATUS, - byteArray.size, - byteArray - ), channel - ) { - CallerLogger.d("$M_ADAS_IMPL$TAG", "同步美化模式状态是否成功:${it.isSuccess}") - } + msgHandler.handleClientConn2Server(channel) } override fun onChannelDisConnect(channel: Channel?) { @@ -170,7 +138,7 @@ class MoGoAutopilotProvider : channel: Channel ) { // 乘客端收到adas数据直接解析,后续分发解析后的数据流程同司机端 - handleMsgFromServer(msg, channel) + msgHandler.handleMsgFromServer(msg, channel) } override fun onClientStatusConnectChanged( @@ -178,7 +146,7 @@ class MoGoAutopilotProvider : sign: String?, channel: Channel ) { - handleConnStatusWithServer(statusCode, sign) + msgHandler.handleClientConnStatus(statusCode, sign, channel) } }) } @@ -191,7 +159,7 @@ class MoGoAutopilotProvider : AdasManager.getInstance().setOnMultiDeviceListener { bytes -> // 发送数据给乘客端 if (NSDNettyManager.getInstance().isServerStart) { - synWriteTime() + msgHandler.synWriteTime() NSDNettyManager.getInstance() .sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) } else { @@ -446,7 +414,7 @@ class MoGoAutopilotProvider : sign: String?, channel: Channel ) { - handleMsgFromServer(msg, channel) + msgHandler.handleMsgFromServer(msg, channel) } override fun onClientStatusConnectChanged( @@ -454,7 +422,7 @@ class MoGoAutopilotProvider : sign: String?, channel: Channel ) { - handleConnStatusWithServer(statusCode, sign) + msgHandler.handleClientConnStatus(statusCode, sign, channel) } }) } @@ -475,74 +443,10 @@ class MoGoAutopilotProvider : return MogoReport.Action.getDesc(actionCode) } - private fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel) { - msg?.let { - when (it.protocolType) { - NORMAL_DATA -> { - try { - synWriteTime() - AdasManager.getInstance().decoderRaw(it.body) - } catch (e: Exception) { - e.printStackTrace() - CallerLogger.e("$M_ADAS_IMPL$TAG", "乘客屏解析数据过程中出现异常:${e.message}") - } - } - SYNC_MODE_STATUS -> { - FunctionBuildConfig.isDemoMode = when (it.body[0].toInt()) { - 1 -> true - else -> false - } - setDemoMode(FunctionBuildConfig.isDemoMode) - } - REQ_CAR_NUMBER -> { - AppConfigInfo.plateNumber = String(msg.body) - invokeNettyConnResult("司机屏发送给乘客屏车牌号为:${AppConfigInfo.plateNumber}") - } - else -> { - } - } - } - } - - private fun handleConnStatusWithServer(statusCode: Int, content: String?) { - when (statusCode) { - ConnectState.STATUS_CONNECT_SUCCESS -> { - if (!isFirstDisc) { - isFirstDisc = true - } - ToastUtils.showShort("连接司机屏成功!") - invokeNettyConnResult("乘客屏连接司机屏成功") - // 连接成功后,乘客屏没拿到车牌号就像司机屏请求 - if (AppConfigInfo.plateNumber.isNullOrEmpty()) { - var byteArray = byteArrayOf(0) - NSDNettyManager.getInstance().sendMogoProtocolMsgToServer( - MogoProtocolMsg(REQ_CAR_NUMBER, byteArray.size, byteArray) - ) { - invokeNettyConnResult("乘客屏请求车牌号数据发送是否成功:${it}") - } - } - } - ConnectState.STATUS_CONNECT_CLOSED -> {// 由于重连机制会回调多次 - if (isFirstDisc) { - isFirstDisc = false - AppConfigInfo.plateNumber = "" - ToastUtils.showLong("断开和司机屏的连接!") - invokeNettyConnResult("断开和司机屏的连接!") - } - } - ConnectState.STATUS_CONNECT_ERROR -> { - AppConfigInfo.plateNumber = "" - ToastUtils.showLong("和司机端连接异常!") - invokeNettyConnResult("乘客屏和司机屏连接异常,错误为:$content") - } - else -> {} - } - } - override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { // 乘客屏才监听 AppConfigInfo.plateNumber = carConfigResp.plateNumber - invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber}") + invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为:${carConfigResp.macAddress}") } @ChainLog( @@ -557,16 +461,7 @@ class MoGoAutopilotProvider : CallerLogger.d("$M_ADAS_IMPL$TAG", status) } - /** - * 记录最新的司机屏发送数据的时间戳 - * 或乘客屏解析数据的时间戳 - */ - @Synchronized - private fun synWriteTime() { - wrTimeStamp = System.currentTimeMillis() - } - override fun getTeleTimeStamp(): Long { - return wrTimeStamp + return msgHandler.getTeleTimeStamp() } } \ 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 new file mode 100644 index 0000000000..f4d1c9bbab --- /dev/null +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/IMsgHandler.kt @@ -0,0 +1,20 @@ +package com.mogo.eagle.core.function.autopilot.telematic + +import com.mogo.telematic.MogoProtocolMsg +import io.netty.channel.Channel + +interface IMsgHandler { + fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel?) + + fun handleMsgFromClient(msg: MogoProtocolMsg?, channel: Channel?) + + fun handleClientConn2Server(channel: Channel?) + + fun handleClientConnStatus(statusCode: Int, content: String?, channel: Channel) + + fun handleServerConnStatus(statusCode: Int, content: String?, channel: Channel) + + fun synWriteTime() + + fun getTeleTimeStamp(): Long +} \ 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 new file mode 100644 index 0000000000..726f1084b5 --- /dev/null +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/telematic/TeleMsgHandler.kt @@ -0,0 +1,197 @@ +package com.mogo.eagle.core.function.autopilot.telematic + +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.deva.chain.ChainConstant +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager.setDemoMode +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.ToastUtils +import com.mogo.telematic.MogoProtocolMsg +import com.mogo.telematic.NSDNettyManager +import com.mogo.telematic.client.status.ConnectState +import com.zhidao.support.adas.high.AdasManager +import com.zhidao.support.adas.high.chain.AdasChain +import com.zhjt.service.chain.ChainLog +import com.zhjt.service.chain.TracingConstants +import io.netty.channel.Channel + +class TeleMsgHandler : IMsgHandler { + + private val TAG = "TeleMsgHandler" + + @Volatile + private var isFirstDisc = true + + @Volatile + private var wrTimeStamp = 0L + + @Volatile + private var hasQueryCarConfig = false + + override fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel?) { + msg?.let { + when (it.protocolType) { + MogoProtocolMsg.NORMAL_DATA -> { + try { + synWriteTime() + AdasManager.getInstance().decoderRaw(it.body) + } catch (e: Exception) { + e.printStackTrace() + CallerLogger.e( + "${SceneConstant.M_ADAS_IMPL}$TAG", + "乘客屏解析数据过程中出现异常:${e.message}" + ) + } + } + MogoProtocolMsg.SYNC_MODE_STATUS -> { + FunctionBuildConfig.isDemoMode = when (it.body[0].toInt()) { + 1 -> true + else -> false + } + setDemoMode(FunctionBuildConfig.isDemoMode) + } + MogoProtocolMsg.REQ_CAR_NUMBER -> { + AppConfigInfo.plateNumber = String(msg.body) + invokeNettyConnResult("司机屏发送给乘客屏车牌号为:${AppConfigInfo.plateNumber}") + } + MogoProtocolMsg.REQ_MAC_ADDRESS -> { + val macAddress = String(msg.body) + invokeNettyConnResult("司机屏发送给乘客屏Mac地址为:$macAddress") + } + else -> { + } + } + } + } + + override fun handleMsgFromClient(msg: MogoProtocolMsg?, channel: Channel?) { + msg?.let { + when (it.protocolType) { + MogoProtocolMsg.REQ_CAR_NUMBER -> { + if (!AppConfigInfo.plateNumber.isNullOrEmpty()) { + val platNumberArray = AppConfigInfo.plateNumber!!.toByteArray() + NSDNettyManager.getInstance().sendMsgToSpecifiedClient( + MogoProtocolMsg( + MogoProtocolMsg.REQ_CAR_NUMBER, + platNumberArray.size, platNumberArray + ), channel + ) { + invokeNettyConnResult("司机屏发送车牌号到乘客屏是否成功:${it.isSuccess}") + } + } else { + queryCarConfig() + } + } + MogoProtocolMsg.REQ_MAC_ADDRESS -> { + if (!AppConfigInfo.iPCMacAddress.isNullOrEmpty()) { + val macAddressArray = AppConfigInfo.iPCMacAddress!!.toByteArray() + NSDNettyManager.getInstance().sendMsgToSpecifiedClient( + MogoProtocolMsg( + MogoProtocolMsg.REQ_MAC_ADDRESS, + macAddressArray.size, macAddressArray + ), channel + ) { + invokeNettyConnResult("司机屏发送Mac地址到乘客屏是否成功:${it.isSuccess}") + } + } else { + queryCarConfig() + } + } + else -> { + } + } + } + } + + private fun queryCarConfig() { + if (!hasQueryCarConfig) { + hasQueryCarConfig = true + invokeNettyConnResult("乘客屏请求司机屏向工控机查询配置信息") + CallerAutoPilotManager.getCarConfig() + } + } + + override fun handleClientConn2Server(channel: Channel?) { + val socketAddress = channel?.remoteAddress().toString() + CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", "Client ip is:${socketAddress}") + val byteArray = + if (FunctionBuildConfig.isDemoMode) byteArrayOf(1) else byteArrayOf(0) + NSDNettyManager.getInstance().sendMsgToSpecifiedClient( + MogoProtocolMsg( + MogoProtocolMsg.SYNC_MODE_STATUS, + byteArray.size, + byteArray + ), channel + ) { + CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", "同步美化模式状态是否成功:${it.isSuccess}") + } + } + + override fun handleClientConnStatus(statusCode: Int, content: String?, channel: Channel) { + when (statusCode) { + ConnectState.STATUS_CONNECT_SUCCESS -> { + if (!isFirstDisc) { + isFirstDisc = true + } + ToastUtils.showShort("连接司机屏成功!") + invokeNettyConnResult("乘客屏连接司机屏成功") + val byteArray = byteArrayOf(0) + NSDNettyManager.getInstance().sendMogoProtocolMsgToServer( + MogoProtocolMsg(MogoProtocolMsg.REQ_CAR_NUMBER, byteArray.size, byteArray) + ) { + invokeNettyConnResult("乘客屏请求车牌号数据发送是否成功:${it}") + } + NSDNettyManager.getInstance().sendMogoProtocolMsgToServer( + MogoProtocolMsg(MogoProtocolMsg.REQ_MAC_ADDRESS, byteArray.size, byteArray) + ) { + invokeNettyConnResult("乘客屏请求MAC地址数据发送是否成功:${it}") + } + } + ConnectState.STATUS_CONNECT_CLOSED -> {// 由于重连机制会回调多次 + if (isFirstDisc) { + isFirstDisc = false + AppConfigInfo.plateNumber = "" + ToastUtils.showLong("断开和司机屏的连接!") + invokeNettyConnResult("断开和司机屏的连接!") + } + } + ConnectState.STATUS_CONNECT_ERROR -> { + AppConfigInfo.plateNumber = "" + ToastUtils.showLong("和司机端连接异常!") + invokeNettyConnResult("乘客屏和司机屏连接异常,错误为:$content") + } + else -> {} + } + } + + override fun handleServerConnStatus(statusCode: Int, content: String?, channel: Channel) { + + } + + @ChainLog( + linkChainLog = AdasChain.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" + ) + private fun invokeNettyConnResult(status: String) { + CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", status) + } + + /** + * 记录最新的司机屏发送数据的时间戳 + * 或乘客屏解析数据的时间戳 + */ + @Synchronized + override fun synWriteTime() { + wrTimeStamp = System.currentTimeMillis() + } + + override fun getTeleTimeStamp(): Long { + return wrTimeStamp + } +} \ 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 38394d1a98..7a63baa4bc 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 @@ -1333,7 +1333,7 @@ class DebugSettingView @JvmOverloads constructor( AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> { AppConfigInfo.isDriver = false AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus() - AppConfigInfo.serverIp = CallerTelematicManager.getServerIp() + AppConfigInfo.serverSn = CallerTelematicManager.getServerToken() } else -> { } @@ -1465,7 +1465,7 @@ class DebugSettingView @JvmOverloads constructor( else -> { "乘客端${ when { - AppConfigInfo.serverIp.isNotEmpty() -> "(目标ip为:${AppConfigInfo.serverIp})" + AppConfigInfo.serverSn.isNotEmpty() -> "(司机屏SN是:${AppConfigInfo.serverSn})" else -> "" } }连接" 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 c32945c2fd..0cc43d9fe7 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 @@ -62,7 +62,7 @@ object AppConfigInfo { // Netty该端是否连接上另一端 var isConnectedNetty = false - var serverIp = "" + var serverSn = "" var teleTimeStamp = 0L @@ -136,7 +136,7 @@ object AppConfigInfo { else -> { "乘客端${ when { - serverIp.isNotEmpty() -> "(目标ip为:${serverIp})" + serverSn.isNotEmpty() -> "(司机屏SN是:${serverSn})" else -> "" } }连接" diff --git a/gradle.properties b/gradle.properties index b9b2f173f9..ca76dc0070 100644 --- a/gradle.properties +++ b/gradle.properties @@ -63,23 +63,23 @@ SERVICE_CHAIN_VERSION=1.1.0 LOGLIB_VERSION=1.3.0 ######## MogoAiCloudSDK Version ######## # 网络请求LOGLIB_VERSION -MOGO_NETWORK_VERSION=1.3.58 +MOGO_NETWORK_VERSION=1.3.59 # 鉴权 -MOGO_PASSPORT_VERSION=1.3.58 +MOGO_PASSPORT_VERSION=1.3.59 # 常链接 -MOGO_SOCKET_VERSION=1.3.58 +MOGO_SOCKET_VERSION=1.3.59 # 数据采集 -MOGO_REALTIME_VERSION=1.3.58 +MOGO_REALTIME_VERSION=1.3.59 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.3.58 +MOGO_TANLU_VERSION=1.3.59 # 直播推流 -MOGO_LIVE_VERSION=1.3.58 +MOGO_LIVE_VERSION=1.3.59 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.3.58 +MOGO_TRAFFICLIVE_VERSION=1.3.59 # 定位服务 -MOGO_LOCATION_VERSION=1.3.58 +MOGO_LOCATION_VERSION=1.3.59 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.3.58 +MOGO_TELEMATIC_VERSION=1.3.59 ######## MogoAiCloudSDK Version ######## # 自研地图 MAP_SDK_VERSION=2.1.1.2 @@ -155,7 +155,7 @@ MOGO_OCH_TAXI_VERSION=2.0.66 # mogoAiCloud sdk services MOGO_AICLOUD_SERVICES_SDK_VERSION=2.1.16.10 # v2x-sdk -MOGO_V2X_SDK_VERSION=1.3.58 +MOGO_V2X_SDK_VERSION=1.3.59 ################# 旧版本架构模块版本 #################