diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/base/BaseAdapter.java b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/base/BaseAdapter.java index b8b9b9f8f6..d2e46e8aed 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/base/BaseAdapter.java +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/base/BaseAdapter.java @@ -44,7 +44,7 @@ public abstract class BaseAdapter extends Recycler public void setData(List mDatas) { this.mDatas = mDatas; - if (!mDatas.isEmpty()) + if (mDatas != null && !mDatas.isEmpty()) notifyDataSetChanged(); } diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/utils/NetworkUtilsExtend.kt b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/utils/NetworkUtilsExtend.kt index 1a8fe74cc1..34203653ea 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/utils/NetworkUtilsExtend.kt +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/common/utils/NetworkUtilsExtend.kt @@ -26,7 +26,6 @@ class NetworkUtilsExtend { fun onLinkChanged(network: Network?, linkProperties: LinkProperties?) } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) class NetworkCallbackImpl : NetworkCallback() { private val TAG = "NetworkCallbackImpl" diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/service/FaultManagementDiagnosisService.kt b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/service/FaultManagementDiagnosisService.kt index 4c63f82bc0..3b3b973b92 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/service/FaultManagementDiagnosisService.kt +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/service/FaultManagementDiagnosisService.kt @@ -21,12 +21,12 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListe import com.mogo.eagle.core.function.call.autopilot.CallerFaultManagementStateListenerManager import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.zhidao.support.adas.high.AdasManager import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.rviz.R import com.zhjt.mogo_core_function_devatools.rviz.common.config.SSHAccountConfig import com.zhjt.mogo_core_function_devatools.rviz.common.coroutines.FlowBus import com.zhjt.mogo_core_function_devatools.rviz.constant.AppConfigInfo -import com.zhjt.mogo_core_function_devatools.rviz.constant.DiagnoseType import com.zhjt.mogo_core_function_devatools.rviz.constant.EventKey import com.zhjt.mogo_core_function_devatools.rviz.constant.FaultLevel import com.zhjt.mogo_core_function_devatools.rviz.constant.FaultModuleId @@ -68,6 +68,7 @@ import java.util.Locale import java.util.Timer import java.util.TimerTask import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference /** @@ -93,6 +94,7 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, private val dockerInfoMap = mutableMapOf>() private var cloudMapVersion = "未知"//云端MAP版本 private var hdMapVersion = HdMapVersion()//高精度版本 + private val isReceiveFMData = AtomicBoolean(false)//是否接收到了FM数据 private val queryRosHostArgumentMap = ConcurrentHashMap()//当前参与查询主机参数的主机 @@ -132,9 +134,12 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, override fun onCreate() { super.onCreate() initFMData() - CallerAutoPilotStatusListenerManager.addListener(TAG, adasConnectionStatuslistener) + CallerAutoPilotStatusListenerManager.addListener(TAG, adasConnectionStatusListener) CallerAutopilotCarConfigListenerManager.addListener(TAG, this) CallerFaultManagementStateListenerManager.addListener(TAG, this) + AdasManager.getInstance().carConfig?.let { + onAutopilotCarConfig(it) + } Log.i(TAG, "故障管理诊断服务已启动") } @@ -186,16 +191,8 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, FmEntity("功能状态机&其他(FSM&OTH)") } - - /** - * 启动诊断 - */ - - fun startDiagnose() { - connectSSH() - } - - private val adasConnectionStatuslistener = object : IMoGoAutopilotStatusListener { + @OptIn(DelicateCoroutinesApi::class) + private val adasConnectionStatusListener = object : IMoGoAutopilotStatusListener { override fun onAutopilotIpcConnectStatusChanged( status: AdasConstants.IpcConnectionStatus, @@ -204,28 +201,19 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, super.onAutopilotIpcConnectStatusChanged(status, reason) val adasConnectStatus = AdasConnectionStatus(status, reason) when (status) { - AdasConstants.IpcConnectionStatus.DISCONNECTED -> { - - } - AdasConstants.IpcConnectionStatus.CONNECTED -> { - + if (AdasManager.getInstance().carConfig == null) { + AdasManager.getInstance().sendCarConfigReq() + } GlobalScope.launch(Dispatchers.IO) { delay(6000) updateFaultManagementStop(FMInfoMsg(null, null, null)) } } - AdasConstants.IpcConnectionStatus.CONNECTING -> { - + else -> { + isReceiveFMData.set(false) } - - AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION -> { - } - - AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> {} - AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS -> {} - else -> {} } FlowBus.with(EventKey.UPDATE_ADAS_CONNECT_STATE) .post(scopeSubscriber, adasConnectStatus) @@ -235,7 +223,7 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, //连接SSH - private fun connectSSH() { + fun connectSSH() { openConnection( SSH.createHost( SSHAccountConfig.getUserName(), @@ -258,35 +246,15 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, private fun updateFaultManagementStop(fmInfo: FMInfoMsg) { - //TODO -// if (isReceiveFMData.get()) { -// return -// } -// isReceiveFMData.set(true) - val msg: String - val type: DiagnoseType - if (fmInfo.fmInfoList != null) { - msg = "FM数据获取成功……" - type = DiagnoseType.SUCCEED - } else { + if (isReceiveFMData.get()) { + return + } + isReceiveFMData.set(true) + if (fmInfo.fmInfoList == null) { //证明未收到FM数据,存在两种情况,一个是没有发数据,一个是版本不支持 FlowBus.with(EventKey.SEND_IS_SUPPORT_FM) .post(scopeSubscriber, AppConfigInfo.isSupportFM) - if (AppConfigInfo.isSupportFM) { - msg = "FM数据获取成功……" - type = DiagnoseType.SUCCEED - } else { - msg = "获取FM数据失败,此MAP不支持FM相关功能" - type = DiagnoseType.FAILED - } } - //TODO -// updateDiagnoseUIStateInUIThread( -// DiagnoseSource.ADAS, -// msg, -// type -// ) -// executeProcessConnectSSHStart() } @@ -491,44 +459,37 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, rosHostArgumentPosition: Int, isInserted: Boolean ) { - - GlobalScope.launch(Dispatchers.Main) { - //TODO -// updateDiagnoseUIState( -// DiagnoseSource.SSH, -// "正在连接${Utils.getIPLastSegment(host.hostname)}……" -// ) - synchronized(rosHostArguments) { - val p = getRosHostArgument(host) - val argument = p.second - val isInsert = p.first < 0 - if (isInsert) {//不存在 - rosHostArguments.add(argument) - //根据IP排序,主动连接的主机(一般是rosMaster)置顶 - rosHostArguments.sortWith(Comparator { rosHostArgument1, rosHostArgument2 -> - if (defaultSSH != null) { - if (rosHostArgument1.host == defaultSSH!!.host) { - return@Comparator -1 - } - if (rosHostArgument2.host == defaultSSH!!.host) { - return@Comparator 1 - } + synchronized(rosHostArguments) { + val p = getRosHostArgument(host) + val argument = p.second + val isInsert = p.first < 0 + if (isInsert) {//不存在 + rosHostArguments.add(argument) + //根据IP排序,主动连接的主机(一般是rosMaster)置顶 + rosHostArguments.sortWith(Comparator { rosHostArgument1, rosHostArgument2 -> + if (defaultSSH != null) { + if (rosHostArgument1.host == defaultSSH!!.host) { + return@Comparator -1 } - rosHostArgument1.host.hostname - .compareTo(rosHostArgument2.host.hostname) - }) - } else { - //已存在 - argument.resetConnectFailureCode() - } - if (TextUtils.equals(SSHAccountConfig.getRosMasterIp(), argument.host.hostname)) { - argument.isRosMaster = true; - } - - val index = rosHostArguments.indexOf(argument) + if (rosHostArgument2.host == defaultSSH!!.host) { + return@Comparator 1 + } + } + rosHostArgument1.host.hostname + .compareTo(rosHostArgument2.host.hostname) + }) + } else { + //已存在 + argument.resetConnectFailureCode() + } + if (TextUtils.equals(SSHAccountConfig.getRosMasterIp(), argument.host.hostname)) { + argument.isRosMaster = true; + } + val index = rosHostArguments.indexOf(argument) + GlobalScope.launch(Dispatchers.Main) { CallerSshConnectionListenerManager.invokeConnecting( argument.host, index, isInsert - ) //正在连接 在此的 -1和true不使用 + ) } } Log.i(TAG, "${host.toString()} 连接中") @@ -540,12 +501,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, sshMap.put(ssh.host, ssh) } GlobalScope.launch(Dispatchers.Main) { - //TODO -// updateDiagnoseUIState( -// DiagnoseSource.SSH, -// "连接${Utils.getIPLastSegment(ssh.host.hostname)}成功……", -// DiagnoseType.SUCCEED -// ) CallerSshConnectionListenerManager.invokeConnected(ssh) } getRosMasterConfig(ssh) @@ -587,15 +542,8 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, defaultSSH = null } GlobalScope.launch(Dispatchers.Main) { - //TODO -// updateDiagnoseUIState( -// DiagnoseSource.SSH, -// "连接${Utils.getIPLastSegment(host.hostname)}失败,原因:$msg……", -// DiagnoseType.FAILED -// ) CallerSshConnectionListenerManager.invokeConnectFailure(host, msg) } - updateDiagnoseFinish(host) Log.i(TAG, "${host.toString()} 连接失败=${msg}") } @@ -607,11 +555,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, ) { if (list.isNotEmpty()) { dockerInfoMap[host] = list - //TODO -// updateDiagnoseUIStateInUIThread( -// DiagnoseSource.SSH, -// "${Utils.getIPLastSegment(host.hostname)} Docker信息获取成功……" -// ) val mapDocker: DockerInfo? = list.find { it.names == "autocar_default_1" || it.names == "autocar-default-1" } if (mapDocker != null) { @@ -629,7 +572,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, } } } - updateDiagnoseFinish(host) } else { if (dockerInfoMap.containsKey(host)) dockerInfoMap.remove(host) @@ -765,7 +707,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, } } else if (MogoCommand.QUERY_VEHICLE_CONFIG == cmd) { vehicleConfig = VehicleConfig(result) - //TODO // updateDiagnoseUIStateInUIThread( // DiagnoseSource.SSH, // "车辆信息,车牌:${vehicleConfig!!.plate} 品牌:${vehicleConfig!!.brand} 类型:${vehicleConfig!!.model}", @@ -1086,54 +1027,7 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener, ssh.execCommand(MogoCommand.QUERY_VEHICLE_CONFIG, false) //获取车牌等信息 ssh.execCommand(MogoCommand.QUERY_ROS_SLAVE, false) //获取从ros主机 } - //TODO -// updateDiagnoseUIStateInUIThread( -// DiagnoseSource.SSH, -// "正在获取${Utils.getIPLastSegment(ssh.host.hostname)} Docker信息……" -// ) ssh.execCommand(MogoCommand.QUERY_DOCKER_PS_A, false) - //等待获取Docker信息是否成功 - GlobalScope.launch(Dispatchers.IO) { - delay(6000) - if (!dockerInfoMap.containsKey(ssh.host)) { - //TODO -// withContext(Dispatchers.Main) { -// updateDiagnoseUIState( -// DiagnoseSource.SSH, -// "${Utils.getIPLastSegment(ssh.host.hostname)} Docker信息获取失败……", -// DiagnoseType.FAILED -// ) -// } - updateDiagnoseFinish(ssh.host) - } - } - } - - //检查诊断是否完成,并更新状态 - private fun updateDiagnoseFinish(host: SSHHostBean) { - //TODO -// if (!isDiagnoseFinish.get()) { -// synchronized(diagnoseFinishState) { -// if (diagnoseFinishState.containsKey(host)) { -// diagnoseFinishState[host] = true -// } -// } -// val count = diagnoseFinishState.count { it.value } -// if (count == diagnoseFinishState.size) { -// isDiagnoseFinish.set(true) -// val msg = -// if (CallerAutopilotActionsListenerManager.isAutopilotAbility()) "可自动驾驶,请打开「鹰眼」进入运营状态" else "不可自动驾驶,详细信息请关闭《诊断弹窗》查看" -// updateDiagnoseUIStateInUIThread(DiagnoseSource.MC, "诊断完成,当前环境${msg}") -// val vib = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { -// val vibratorManager = -// getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager -// vibratorManager.defaultVibrator -// } else { -// getSystemService(VIBRATOR_SERVICE) as Vibrator -// } -// vib.vibrate(VibrationEffect.createOneShot(500, 255)) -// } -// } } private fun queryRosHostArgument(ssh: SSH) { diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/activity/FmdAct.kt b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/activity/FmdAct.kt index e042bea6b6..8e7edc4e91 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/activity/FmdAct.kt +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/activity/FmdAct.kt @@ -49,6 +49,7 @@ class FmdAct : BaseActivity() { arrayOf("车况概览", "系统资源", "故障码") private lateinit var overviewFrag: OverviewFrag + private lateinit var systemResourceFrag: SystemResourceFrag private lateinit var faultCodeFrag: FaultCodeFrag private val mIconUnselectIds = intArrayOf( R.drawable.rviz_fmd_tab_car_status_unselect, @@ -86,9 +87,10 @@ class FmdAct : BaseActivity() { Utils.getApp().startService(Intent(Utils.getApp(), FmCodeUpdateService::class.java)) registerForContextMenu(clConnectStatusBarView.vehicleNumberView) overviewFrag = OverviewFrag() + systemResourceFrag = SystemResourceFrag() faultCodeFrag = FaultCodeFrag() mFragments.add(overviewFrag) - mFragments.add(SystemResourceFrag()) + mFragments.add(systemResourceFrag) mFragments.add(faultCodeFrag) for (i in mTitles.indices) { @@ -201,8 +203,9 @@ class FmdAct : BaseActivity() { fmdBound = (service as FaultManagementDiagnosisService.FaultManagementDiagnosisBinder).service faultCodeFrag.setData(fmdBound!!.fmDataMap) + systemResourceFrag.initData() overviewFrag.setData(fmdBound!!.fmDataMap) - fmdBound!!.startDiagnose() + fmdBound!!.connectSSH() } override fun onServiceDisconnected(className: ComponentName) { diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/fragments/resource/SystemResourceFrag.kt b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/fragments/resource/SystemResourceFrag.kt index 8209f64ea4..5e87b122b1 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/fragments/resource/SystemResourceFrag.kt +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/fragments/resource/SystemResourceFrag.kt @@ -39,13 +39,17 @@ class SystemResourceFrag : FmdBaseFragment(), OnRosHostClickListener, override fun onHiddenChanged(hidden: Boolean) { super.onHiddenChanged(hidden) if (!hidden) { - if (!isInit) { - isInit = true - rosHostsView.setDatas( - fmdAct.getRosHostArguments(), - fmdAct.getCloudMapVersion() - ) - } + initData() + } + } + + fun initData() { + if (!isInit) { + isInit = true + rosHostsView.setDatas( + fmdAct.getRosHostArguments(), + fmdAct.getCloudMapVersion() + ) } } diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/views/StateBarView.java b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/views/StateBarView.java index 69caeff9fe..983afc9b45 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/views/StateBarView.java +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/ui/views/StateBarView.java @@ -27,12 +27,17 @@ import androidx.lifecycle.LifecycleRegistry; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.zhjt.mogo.adas.data.AdasConstants; import com.zhjt.mogo_core_function_devatools.rviz.R; +import com.zhjt.mogo_core_function_devatools.rviz.common.config.SSHAccountConfig; import com.zhjt.mogo_core_function_devatools.rviz.common.coroutines.FlowBus; import com.zhjt.mogo_core_function_devatools.rviz.common.utils.DetectHtml; import com.zhjt.mogo_core_function_devatools.rviz.common.utils.NetworkUtilsExtend; import com.zhjt.mogo_core_function_devatools.rviz.constant.AppConfigInfo; import com.zhjt.mogo_core_function_devatools.rviz.constant.EventKey; import com.zhjt.mogo_core_function_devatools.rviz.model.entities.AdasConnectionStatus; +import com.zhjt.mogo_core_function_devatools.rviz.ssh.SSH; +import com.zhjt.mogo_core_function_devatools.rviz.ssh.function.call.CallerSshConnectionListenerManager; +import com.zhjt.mogo_core_function_devatools.rviz.ssh.function.listener.OnSshConnectionListener; +import com.zhjt.mogo_core_function_devatools.rviz.ssh.module.SSHHostBean; import java.net.Inet4Address; import java.net.InetAddress; @@ -47,7 +52,7 @@ import mogo.telematics.pad.MessagePad; /** * 连接以及状态展示 */ -public class StateBarView extends LinearLayout implements LifecycleOwner, NetworkUtilsExtend.NetworkCallbackListener { +public class StateBarView extends LinearLayout implements LifecycleOwner, NetworkUtilsExtend.NetworkCallbackListener, OnSshConnectionListener { private static final String TAG = StateBarView.class.getSimpleName(); private final CoroutineScope scopeSubscriber = CoroutineScopeKt.CoroutineScope(MainScope().getCoroutineContext()); private final LifecycleRegistry lifecycle = new LifecycleRegistry(this); @@ -55,6 +60,7 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ private TextView ipView; private TextView vehicleNumberView; private TextView adasStateView; + private TextView sshStateView; @NonNull @Override @@ -101,7 +107,6 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ setListener(); initView(); getNetWorkType(); -// FlowBus.INSTANCE.with(EventKey.GET_VEHICLE_CONFIG).post(scopeSubscriber, EventKey.GET_VEHICLE_CONFIG); FlowBus.INSTANCE.with(EventKey.UPDATE_CAR_CONFIG_STATE).register(this, it -> { setHintTextView(vehicleNumberView, it.getPlateNumber()); }); @@ -109,20 +114,35 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ String msg = getResources().getString(R.string.rviz_fmd_disconnected); AdasConstants.IpcConnectionStatus ipcConnectionStatus = it.getIpcConnectionStatus(); String reason = it.getReason(); - if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { + if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.DISCONNECTED) { + msg = getResources().getString(R.string.rviz_fmd_disconnected); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { msg = getResources().getString(R.string.rviz_fmd_connected); - } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.DISCONNECTED) { - msg = "连接失败"; } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTING) { - msg = "连接中"; - if (!TextUtils.isEmpty(reason)) { - if (reason.contains("(")) { - String[] str = reason.split("("); - msg = str[0]; - } else { - msg = reason; - } - } + msg = getResources().getString(R.string.rviz_fmd_connecting); + setHintTextView(netNameView, getNetWorkType()); + setHintTextView(ipView, getIpAddressString()); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER || + ipcConnectionStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK) { + msg = getResources().getString(R.string.rviz_fmd_reconnecting); + setHintTextView(netNameView, getNetWorkType()); + setHintTextView(ipView, getIpAddressString()); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION) { + msg = getResources().getString(R.string.rviz_fmd_connect_exception); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS) { + msg = getResources().getString(R.string.rviz_fmd_illegal_address); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS) { + msg = getResources().getString(R.string.rviz_fmd_search_address); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS) { + msg = getResources().getString(R.string.rviz_fmd_not_found_address); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED) { + msg = getResources().getString(R.string.rviz_fmd_certification_failed); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT) { + msg = getResources().getString(R.string.rviz_fmd_heartbeat_timeout); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH) { + msg = getResources().getString(R.string.rviz_fmd_protocol_mismatch); + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED) { + msg = getResources().getString(R.string.rviz_fmd_server_disconnected); } setHintTextView(adasStateView, msg); if (ipcConnectionStatus != AdasConstants.IpcConnectionStatus.CONNECTED) { @@ -150,10 +170,12 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ ipView = findViewById(R.id.ip_view); vehicleNumberView = findViewById(R.id.vehicle_number_view); adasStateView = findViewById(R.id.adas_state_view); + sshStateView = findViewById(R.id.ssh_state_view); setHintTextView(netNameView, getNetWorkType()); setHintTextView(ipView, getIpAddressString()); setHintTextView(vehicleNumberView, TextUtils.isEmpty(AppConfigInfo.INSTANCE.getPlateNumber()) ? getResources().getString(R.string.rviz_fmd_disconnected) : AppConfigInfo.INSTANCE.getPlateNumber()); setHintTextView(adasStateView, getResources().getString(R.string.rviz_fmd_disconnected)); + setHintTextView(sshStateView, getResources().getString(R.string.rviz_fmd_disconnected)); } /** @@ -218,9 +240,20 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ textView.setText(Html.fromHtml(text)); } } else { - if (getResources().getString(R.string.rviz_fmd_disconnected).equals(text) || getResources().getString(R.string.rviz_fmd_unknown).equals(text) || "连接失败".equals(text)) { + if (getResources().getString(R.string.rviz_fmd_disconnected).equals(text) || + getResources().getString(R.string.rviz_fmd_unknown).equals(text) || + getResources().getString(R.string.rviz_fmd_connect_exception).equals(text) || + getResources().getString(R.string.rviz_fmd_illegal_address).equals(text) || + getResources().getString(R.string.rviz_fmd_not_found_address).equals(text) || + getResources().getString(R.string.rviz_fmd_certification_failed).equals(text) || + getResources().getString(R.string.rviz_fmd_heartbeat_timeout).equals(text) || + getResources().getString(R.string.rviz_fmd_protocol_mismatch).equals(text) || + getResources().getString(R.string.rviz_fmd_server_disconnected).equals(text)) { textView.setTextColor(getResources().getColor(R.color.rviz_fmd_status_error)); - } else if (getResources().getString(R.string.rviz_fmd_gain).equals(text) || "连接中".equals(text) || "重连中".equals(text)) { + } else if (getResources().getString(R.string.rviz_fmd_gain).equals(text) || + getResources().getString(R.string.rviz_fmd_connecting).equals(text) || + getResources().getString(R.string.rviz_fmd_reconnecting).equals(text) || + getResources().getString(R.string.rviz_fmd_search_address).equals(text)) { textView.setTextColor(Color.YELLOW); } else { textView.setTextColor(getResources().getColor(R.color.rviz_fmd_status_normal)); @@ -233,6 +266,8 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ protected void onAttachedToWindow() { super.onAttachedToWindow(); lifecycle.setCurrentState(Lifecycle.State.STARTED); + NetworkUtilsExtend.Companion.addNetworkCallback(this); + CallerSshConnectionListenerManager.INSTANCE.addListener(TAG, this); } @Override @@ -240,9 +275,40 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ super.onDetachedFromWindow(); lifecycle.setCurrentState(Lifecycle.State.DESTROYED); NetworkUtilsExtend.Companion.removeNetworkCallback(this); + CallerSshConnectionListenerManager.INSTANCE.removeListener(TAG); } public View getVehicleNumberView() { return vehicleNumberView; } + + @Override + public void onSshConnecting(@NonNull SSHHostBean host, int rosHostArgumentPosition, boolean isInserted) { + if (TextUtils.equals(host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) { + setHintTextView(sshStateView, "连接中"); + } + } + + @Override + public void onSshConnected(@NonNull SSH ssh) { + if (TextUtils.equals(ssh.host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) { + setHintTextView(sshStateView, getResources().getString(R.string.rviz_fmd_connected)); + } + } + + @Override + public void onSshDisconnected(@NonNull SSHHostBean host) { + if (TextUtils.equals(host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) { + setHintTextView(sshStateView, "已断开"); + } + } + + @Override + public void onSshConnectFailure(@NonNull SSHHostBean host, @NonNull String msg) { + if (TextUtils.equals(host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) { + setHintTextView(sshStateView, "连接失败"); + setHintTextView(netNameView, getNetWorkType()); + setHintTextView(ipView, getIpAddressString()); + } + } } diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/widgets/ros/host/RosHostView.java b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/widgets/ros/host/RosHostView.java index 2aa39eed13..6960383bac 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/widgets/ros/host/RosHostView.java +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/java/com/zhjt/mogo_core_function_devatools/rviz/widgets/ros/host/RosHostView.java @@ -2,9 +2,7 @@ package com.zhjt.mogo_core_function_devatools.rviz.widgets.ros.host; import android.content.Context; import android.graphics.Rect; -import android.text.TextUtils; import android.util.AttributeSet; -import android.util.Pair; import android.view.LayoutInflater; import android.view.View; diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/layout/rviz_fmd_view_state_bar.xml b/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/layout/rviz_fmd_view_state_bar.xml index 9389d6b4c1..0f4aceff32 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/layout/rviz_fmd_view_state_bar.xml +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/layout/rviz_fmd_view_state_bar.xml @@ -11,7 +11,7 @@ + android:layout_weight="1"> + android:layout_weight=".7"> - - - - - - - + android:layout_weight="0.9"> + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/values/strings.xml index 52d329d71e..d1372ccbef 100644 --- a/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-devatools-rviz/src/main/res/values/strings.xml @@ -1,8 +1,19 @@ 未知 - 已连接 未连接 + 已连接 + 连接中 + 重连中 + 连接失败 + 地址非法 + 搜索域控 + 找不到域控 + 认证异常 + 心跳超时 + 协议不匹配 + 域控断开 + 获取中 (WiFi) 移动网络