[Update]启用多屏功能

This commit is contained in:
chenfufeng
2022-03-02 20:03:22 +08:00
parent f2e8608e08
commit b8b705e8a2
8 changed files with 220 additions and 90 deletions

View File

@@ -4,6 +4,7 @@ import android.Manifest.permission
import android.content.Context import android.content.Context
import androidx.annotation.RequiresPermission import androidx.annotation.RequiresPermission
import com.alibaba.android.arouter.facade.annotation.Route 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.AutopilotControlCmdParameter
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.config.FunctionBuildConfig 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.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils 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.AdasManager
import com.zhidao.support.adas.high.AdasOptions import com.zhidao.support.adas.high.AdasOptions
import com.zhidao.support.adas.high.bean.IPCUpgradeInfo import com.zhidao.support.adas.high.bean.IPCUpgradeInfo
import com.zhidao.support.adas.high.common.Constants import com.zhidao.support.adas.high.common.Constants
import com.zhidao.support.adas.high.common.CupidLogUtils import com.zhidao.support.adas.high.common.CupidLogUtils
import io.netty.channel.Channel
import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@@ -36,7 +46,7 @@ import java.util.concurrent.TimeUnit
*/ */
@Route(path = MogoServicePaths.PATH_AUTO_PILOT) @Route(path = MogoServicePaths.PATH_AUTO_PILOT)
class MoGoAutopilotProvider : class MoGoAutopilotProvider :
IMoGoAutopilotProvider, IMoGoMapDataCollectProvider.OnMapCollectCmdListener { IMoGoAutopilotProvider, IMoGoMapDataCollectProvider.OnMapCollectCmdListener {
private val TAG = "MoGoAutoPilotProvider" private val TAG = "MoGoAutoPilotProvider"
private var mContext: Context? = null private var mContext: Context? = null
@@ -56,107 +66,99 @@ class MoGoAutopilotProvider :
CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this) CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this)
// "192.168.1.102" // "192.168.1.102"
val options = AdasOptions.Builder() val options = AdasOptions.Builder()
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN) .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN)
.setIpcAssignIP(FunctionBuildConfig.adasConnectIP) .setIpcAssignIP(FunctionBuildConfig.adasConnectIP)
.setClient(false) .setClient(false)
.build() .build()
AdasManager.getInstance().create(context, options) AdasManager.getInstance().create(context, options)
// NSDNettyManager.getInstance().startNSDNettyServer(context, object : NettyServerListener<MogoProtocolMsg> { NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object :
// override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) { NettyServerListener<MogoProtocolMsg> {
// Logger.d(TAG, "Receive client data is:${msg?.toString()}") override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
// } Logger.d(TAG, "Receive client data is:${msg?.toString()}")
// }
// override fun onStartServer() {
// ToastUtils.showShort("司机端服务启动成功!") override fun onStartServer() {
// Logger.d(TAG, "onStartServer") ToastUtils.showShort("司机端服务启动成功!")
// } Logger.d(TAG, "onStartServer")
// }
// override fun onStopServer() {
// ToastUtils.showLong("司机端服务停止!") override fun onStopServer() {
// Logger.d(TAG, "onStopServer") ToastUtils.showLong("司机端服务停止!")
// } Logger.d(TAG, "onStopServer")
// }
// override fun onChannelConnect(channel: Channel?) {
// NSDNettyManager.getInstance().selectChannel(channel) override fun onChannelConnect(channel: Channel?) {
// val socketAddress = channel?.remoteAddress().toString() val socketAddress = channel?.remoteAddress().toString()
// Logger.d(TAG, "Client ip is:${socketAddress}") Logger.d(TAG, "Client ip is:${socketAddress}")
// } }
//
// override fun onChannelDisConnect(channel: Channel?) { override fun onChannelDisConnect(channel: Channel?) {
// Logger.d(TAG, "onChannelDisConnect") Logger.d(TAG, "onChannelDisConnect")
// } }
// }) }, MoGoAiCloudClientConfig.getInstance().sn)
} else {// 乘客 } else {
// 乘客端默认接收绘制全局路径+引导线 // 乘客端默认接收绘制全局路径+引导线
//FunctionBuildConfig.isDemoMode = true //FunctionBuildConfig.isDemoMode = true
//FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true //FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true
// "192.168.1.103" // "192.168.1.103"
val options = AdasOptions.Builder() val options = AdasOptions.Builder()
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN) .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.ASSIGN)
.setIpcAssignIP(FunctionBuildConfig.adasConnectIP) .setIpcAssignIP(FunctionBuildConfig.adasConnectIP)
.setClient(false) .setClient(false)
.build() .build()
AdasManager.getInstance().create(context, options) AdasManager.getInstance().create(context, options)
// NSDNettyManager.getInstance().searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object : NettyClientListener<MogoProtocolMsg> { NSDNettyManager.getInstance()
// override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) { .searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn, object :
// Logger.d(TAG, "收到司机端的数据!") NettyClientListener<MogoProtocolMsg> {
// // 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端 override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) {
// msg?.let { Logger.d(TAG, "收到司机端的数据!")
// AdasManager.getInstance().parseIPCData(it.body) // 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端
// Logger.d(TAG, "解析司机端数据完毕!") 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}") override fun onClientStatusConnectChanged(statusCode: Int, sign: String?) {
// else -> { when (statusCode) {
// ToastUtils.showLong("和司机端连接异常!") ConnectState.STATUS_CONNECT_SUCCESS -> {
// Logger.d(TAG, "client statusCode is:${statusCode}") Logger.d(TAG, "乘客端连接司机端服务成功! sign is:${sign}")
// } }
// } else -> {
// } ToastUtils.showLong("和司机端连接异常!")
// }) Logger.d(TAG, "client statusCode is:${statusCode}")
}
}
}
})
} }
//////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// //////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听/////////////////////////////////////////////
// 监听 adas 连接状态 // 监听 adas 连接状态
AdasManager.getInstance() AdasManager.getInstance()
.setOnAdasConnectStatusListener(MoGoAdasMsgConnectStatusListenerImpl()) .setOnAdasConnectStatusListener(MoGoAdasMsgConnectStatusListenerImpl())
// 监听ADAS-SDK获取到的工控机数据(乘客也需注册) // 监听ADAS-SDK获取到的工控机数据(乘客也需注册)
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
// // 司机端监听 // 司机端监听
// if (FunctionBuildConfig.appIdentityMode == 0) { if (FunctionBuildConfig.appIdentityMode == 0) {
// AdasManager.getInstance().setOnMultiDeviceListener { bytes -> AdasManager.getInstance().setOnMultiDeviceListener { bytes ->
// Logger.d( Logger.d(
// TAG, TAG,
// "司机端接收到工控机吐出来的数据为:${Arrays.toString(bytes)}" "司机端接收到工控机吐出来的数据为:${Arrays.toString(bytes)}"
// ) )
// // 发送数据给乘客端 // 发送数据给乘客端
// if (NSDNettyManager.getInstance().isServerStart) { if (NSDNettyManager.getInstance().isServerStart) {
// Logger.d( Logger.d(
// TAG, TAG,
// "司机端透传数据给乘客端!" "司机端透传数据给乘客端!"
// ) )
// NSDNettyManager.getInstance().sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) NSDNettyManager.getInstance()
//// NSDNettyManager.getInstance().sendMogoProtocolMsgToClient(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes)) { channelFuture: ChannelFuture -> .sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes))
//// if (channelFuture.isSuccess) { } else {
//// Logger.d( Logger.d(TAG, "司机端Server未启动")
//// TAG, }
//// "Send data to client is success." }
//// ) }
//// } else {
//// Logger.d(
//// TAG,
//// "Send data to client is failure."
//// )
//// }
//// }
// } else {
// Logger.d(TAG, "司机端Server未启动")
// }
// }
// }
// 同步数据给工控机的服务 // 同步数据给工控机的服务
AsyncDataToAutopilotServer.INSTANCE.initServer() AsyncDataToAutopilotServer.INSTANCE.initServer()
// 同步是否开启美化模式 // 同步是否开启美化模式
@@ -226,7 +228,7 @@ class MoGoAutopilotProvider :
override fun recordPackage(): Boolean { override fun recordPackage(): Boolean {
return AdasManager.getInstance() return AdasManager.getInstance()
.recordPackage(1, (System.currentTimeMillis() / 1000).toInt()) .recordPackage(1, (System.currentTimeMillis() / 1000).toInt())
} }
override fun recordPackage(type: Int, id: Int): Boolean { override fun recordPackage(type: Int, id: Int): Boolean {

View File

@@ -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
}
}

View File

@@ -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.map.CallerSmpManager
import com.mogo.eagle.core.function.call.obu.CallerOBUManager 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.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.R
import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener
import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView 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.eagle.core.utilcode.util.*
import com.mogo.map.MogoMap import com.mogo.map.MogoMap
import com.mogo.map.uicontroller.VisualAngleMode 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.map.uicontroller.VisualAngleMode.*
import com.mogo.module.common.MogoApisHandler import com.mogo.module.common.MogoApisHandler
import kotlinx.android.synthetic.main.view_debug_setting.view.* import kotlinx.android.synthetic.main.view_debug_setting.view.*
@@ -490,6 +495,18 @@ class DebugSettingView @JvmOverloads constructor(
AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context) AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context)
AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot() 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()) tvAppInfo.text = Html.fromHtml(AppConfigInfo.toString())

View File

@@ -45,6 +45,12 @@ object AppConfigInfo {
// 是否OBU // 是否OBU
var isConnectObu: Boolean = false var isConnectObu: Boolean = false
var isDriver = true
// Netty该端是否连接上另一端
var isConnectedNetty = false
var serverIp = ""
override fun toString(): String { override fun toString(): String {
return "<font color='red' size='30'>-------------------应用信息--------------------</font><br/>" + return "<font color='red' size='30'>-------------------应用信息--------------------</font><br/>" +
@@ -108,6 +114,27 @@ object AppConfigInfo {
"<font color='red'>" "<font color='red'>"
} }
}${isConnectObu}</font><br/>" + }${isConnectObu}</font><br/>" +
"${
when {
isDriver -> {
"司机端Server启动"
}
else -> {
"乘客端${
when {
serverIp.isNotEmpty() -> "(目标ip为:${serverIp})"
else -> ""
}
}连接"
}
}
}是否正常${
if (isConnectedNetty) {
"<font color='green'>"
} else {
"<font color='red'>"
}
}${isConnectedNetty}</font><br/>" +
"<font color='red' size='30'>------------------工控机感知&规控数据---------------------</font><br/>" "<font color='red' size='30'>------------------工控机感知&规控数据---------------------</font><br/>"
} }
} }

View File

@@ -274,4 +274,10 @@ public class MogoServicePaths {
*/ */
@Keep @Keep
public static final String PATH_MAP_DATA_COLLECT_PROVIDER = "/map_x/collect"; public static final String PATH_MAP_DATA_COLLECT_PROVIDER = "/map_x/collect";
/**
* 多屏通信模块
*/
@Keep
public static final String PATH_TELEMATIC_PROVIDER = "/telematic/api";
} }

View File

@@ -124,5 +124,4 @@ interface IMoGoAutopilotProvider : IMoGoFunctionServerProvider {
* isEnable = false 关闭 * isEnable = false 关闭
*/ */
fun setControlAutopilotCarAuto(isEnable: Boolean) fun setControlAutopilotCarAuto(isEnable: Boolean)
} }

View File

@@ -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
}

View File

@@ -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() ?: ""
}
}