From 981d2e7f24dfe00e4354c33fa6dca073a634be49 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 20 Jun 2025 11:24:27 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[8.1.0]=20[fea]=20[Vlm=20=E6=8E=A5=E5=85=A5?= =?UTF-8?q?]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/bridge/BridgeProvider.kt | 27 ++++++- .../mogo/och/bridge/BridgeServiceManager.kt | 62 ++++----------- .../java/com/mogo/och/bridge/bridge/Data.kt | 42 ++++++++++ .../och/bridge/bridge/OchBridgeManager.kt | 55 +++++++++++-- .../mogo/och/bridge/bridge/OchNdeManager.kt} | 33 ++++---- .../mogo/och/bridge/bridge/OchVlmManager.kt | 58 ++++++++++++++ .../common/module/debug/DebugDataDispatch.kt | 35 ++++++++- .../src/debug/res/drawable/common_debug.webp | Bin 0 -> 186858 bytes .../module/biz/birdge/BridgeListener.kt | 7 ++ .../common/module/biz/birdge/data/RoadMsg.kt | 8 ++ .../common/module/biz/birdge/data/VlmData.kt | 28 +++++++ .../och/common/module/manager/EnvManager.kt | 45 +++++++++++ .../weaknet/passenger/ui/PM2BaseFragment.kt | 9 ++- .../ui/mind/adapter/AINDERoadAdapter.kt | 6 +- .../ui/mind/bean/AssistantMessage.kt | 14 ++-- .../passenger/ui/mind/data/NDEViewModel.kt | 74 +++--------------- .../unmanned/passenger/ui/aiview/AiView.kt | 14 ++-- .../ui/aiview/adapter/AIMessageAdapter.kt | 2 + .../ui/aiview/adapter/AIMessageViewHolder.kt | 38 ++++++++- .../ui/aiview/adapter/AINDERoadAdapter.kt | 6 +- .../ui/aiview/bean/AssistantMessage.kt | 15 ++-- .../AutomaticExplorationViewModel.kt | 4 +- .../passenger/ui/aiview/data/NDEViewModel.kt | 39 +++++++++ .../aiview/{ => data}/PNCActionsViewModel.kt | 5 +- .../{ => data}/RoadCrossRoamViewModel.kt | 6 +- .../{ => data}/RoadV2NEventViewModel.kt | 3 +- .../main/res/layout/item_ai_vlm_action.xml | 51 ++++++++++++ .../hmi/ui/setting/DebugSettingView.kt | 5 +- .../constants/SharedPrefsConstants.java | 2 + 29 files changed, 514 insertions(+), 179 deletions(-) create mode 100644 OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/Data.kt rename OCH/{taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/NDEViewModel.kt => common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchNdeManager.kt} (81%) create mode 100644 OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchVlmManager.kt create mode 100644 OCH/common/common/src/debug/res/drawable/common_debug.webp create mode 100644 OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/RoadMsg.kt create mode 100644 OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/VlmData.kt create mode 100644 OCH/common/common/src/main/java/com/mogo/och/common/module/manager/EnvManager.kt rename OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/{ => data}/AutomaticExplorationViewModel.kt (97%) create mode 100644 OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/NDEViewModel.kt rename OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/{ => data}/PNCActionsViewModel.kt (98%) rename OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/{ => data}/RoadCrossRoamViewModel.kt (94%) rename OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/{ => data}/RoadV2NEventViewModel.kt (95%) create mode 100644 OCH/taxi/unmanned-passenger/src/main/res/layout/item_ai_vlm_action.xml diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt index 54f444b221..2d796baca7 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt @@ -10,10 +10,14 @@ import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.och.bridge.autopilot.location.OchLocationManager import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager import com.mogo.och.bridge.bridge.OchBridgeManager +import com.mogo.och.bridge.bridge.OchVlmManager import com.mogo.och.bridge.trajectory.TrajectoryManager import com.mogo.och.common.module.biz.birdge.BridgeService import com.mogo.och.common.module.biz.birdge.BridgeListener +import com.mogo.och.common.module.biz.birdge.data.RoadMsg +import com.mogo.och.common.module.biz.birdge.data.VlmData import com.mogo.och.common.module.constant.OchCommonConst +import com.mogo.och.common.module.manager.EnvManager /** @@ -29,7 +33,16 @@ class BridgeProvider : BridgeService, CallerBase() { override fun init(context: Context?) { this.context = context - OchBridgeManager.load() + + // 车前引导线+预测数据 + if(EnvManager.isB2Passenger()||EnvManager.isT1T2Passenger()){ + OchBridgeManager.load() + } + +// if(EnvManager.isT1T2Passenger()){ + OchVlmManager.load() +// } + TrajectoryManager.load() } @@ -92,5 +105,17 @@ class BridgeProvider : BridgeService, CallerBase() { } } + fun invokeVlmDataDispatch(vlmData:VlmData){ + M_LISTENERS.forEach { + it.value.onVlmDataListener(vlmData) + } + } + + fun inVokeNdeData(title: String, desc: String, sortedList: List) { + M_LISTENERS.forEach { + it.value.onNdeDataListener(title,desc,sortedList) + } + } + } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt index e600572140..048b82028f 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt @@ -3,13 +3,10 @@ package com.mogo.och.bridge import android.annotation.SuppressLint import com.alibaba.android.arouter.launcher.ARouter import com.mogo.eagle.core.data.map.MogoLocation -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.och.common.module.biz.birdge.data.RoadMsg +import com.mogo.och.common.module.biz.birdge.data.VlmData import com.mogo.och.common.module.constant.OchCommonConst -import com.mogo.och.common.module.manager.loop.BizLoopManager -import com.mogo.och.common.module.manager.loop.LoopInfo -import io.reactivex.schedulers.Schedulers -import kotlin.properties.Delegates object BridgeServiceManager { @@ -19,52 +16,12 @@ object BridgeServiceManager { private var bridgeService: BridgeProvider? = ARouter.getInstance().build(OchCommonConst.BIZ_Bridge).navigation() as BridgeProvider - private var trajectoryTime = 0L - private var predictionTime = 0L - - init { - BizLoopManager.setLoopFunction(TAG, - LoopInfo(2, ::checkTimeout, immediately = false, scheduler = Schedulers.io()) - ) - } - - // 是否有车前引导线 - private var haveTrajectoryInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue -> - if (oldValue != newValue) { - bridgeService?.invokeTrajectoryHaveDataListener(newValue) - CallerLogger.d(TAG,"haveTrajectoryInfo 发生变化:${newValue}") - } - trajectoryTime = System.currentTimeMillis() - - } - - // 是否有预测数据 - private var havePredictionInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue -> - if (oldValue != newValue) { - bridgeService?.invokePredictionHavaData(newValue) - CallerLogger.d(TAG,"havePredictionInfo 发生变化:${newValue}") - } - predictionTime = System.currentTimeMillis() - } - - fun checkTimeout(){ - if(System.currentTimeMillis() - trajectoryTime>2_000){ - haveTrajectoryInfo = false - CallerLogger.d(TAG,"超时设置为false:haveTrajectoryInfo ${haveTrajectoryInfo}") - } - if(System.currentTimeMillis() - predictionTime>2_000){ - havePredictionInfo = false - CallerLogger.d(TAG,"超时设置为false:havePredictionInfo ${havePredictionInfo}") - } - } - - fun invokePlanningListener(haveTrajectoryInfos:Boolean){ - this.haveTrajectoryInfo = haveTrajectoryInfos + bridgeService?.invokeTrajectoryHaveDataListener(haveTrajectoryInfos) } fun invokePredictionHaveData(havePredictionInfos:Boolean){ - this.havePredictionInfo = havePredictionInfos + bridgeService?.invokePredictionHavaData(havePredictionInfos) } fun invokeTrajectoryPoints(trajectoryList: MutableList){ @@ -78,4 +35,15 @@ object BridgeServiceManager { this.bridgeService?.invokeTrajectoryPointAndDistance(trajectoryList, distance) } + /** + * 分发vmData + */ + fun invokeVlmData(vlmData: VlmData){ + this.bridgeService?.invokeVlmDataDispatch(vlmData) + } + + fun invokeNdeData(title: String, desc: String, sortedList: List) { + this.bridgeService?.inVokeNdeData(title,desc,sortedList) + } + } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/Data.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/Data.kt new file mode 100644 index 0000000000..834a40af21 --- /dev/null +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/Data.kt @@ -0,0 +1,42 @@ +package com.mogo.och.bridge.bridge + +data class VlmImageData(val imageSourceTimestamp: Double ,var image: ByteArray?) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as VlmImageData + + return imageSourceTimestamp == other.imageSourceTimestamp + } + + override fun hashCode(): Int { + return imageSourceTimestamp.hashCode() + } + + override fun toString(): String { + return "VlmImageData(imageSourceTimestamp=$imageSourceTimestamp)" + } + + +} + +data class VlmMessageData(val messageSourceTimestamp: Double ,val id:Int?,val message:String?){ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as VlmMessageData + +// if (messageSourceTimestamp != other.messageSourceTimestamp) return false + if (id != other.id) return false + + return true + } + + override fun hashCode(): Int { + var result = messageSourceTimestamp.hashCode() + result = 31 * result + (id ?: 0) + return result + } +} diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt index 9009316cb3..8955f6fcd7 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt @@ -4,24 +4,62 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningTrajectoryListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningTrajectoryListenerManager -import com.mogo.eagle.core.function.call.base.CallerBase import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON import com.mogo.och.bridge.BridgeServiceManager +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.manager.loop.LoopInfo +import io.reactivex.schedulers.Schedulers import prediction2025.Prediction2025 import mogo.telematics.pad.MessagePad +import kotlin.properties.Delegates -object OchBridgeManager: CallerBase(), - IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentifyListener { +object OchBridgeManager: IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentifyListener { private val TAG = "${M_OCHCOMMON}OchPlanningListenerManager" + + private var trajectoryTime = 0L + private var predictionTime = 0L + fun load(){ CallerPlanningTrajectoryListenerManager.addListener(TAG,this) CallerAutopilotIdentifyListenerManager.addListener(TAG,this) + BizLoopManager.setLoopFunction(TAG, LoopInfo(2, ::checkTimeout, immediately = false, scheduler = Schedulers.io())) } fun release(){ CallerPlanningTrajectoryListenerManager.removeListener(TAG) + CallerAutopilotIdentifyListenerManager.removeListener(TAG) + } + + // 是否有车前引导线 + private var haveTrajectoryInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + if (oldValue != newValue) { + BridgeServiceManager.invokePlanningListener(newValue) + CallerLogger.d(TAG,"haveTrajectoryInfo 发生变化:${newValue}") + } + trajectoryTime = System.currentTimeMillis() + + } + + // 是否有预测数据 + private var havePredictionInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + if (oldValue != newValue) { + BridgeServiceManager.invokePredictionHaveData(newValue) + CallerLogger.d(TAG,"havePredictionInfo 发生变化:${newValue}") + } + predictionTime = System.currentTimeMillis() + } + + fun checkTimeout(){ + if(System.currentTimeMillis() - trajectoryTime>2_000){ + haveTrajectoryInfo = false + CallerLogger.d(TAG,"超时设置为false:haveTrajectoryInfo $haveTrajectoryInfo") + } + if(System.currentTimeMillis() - predictionTime>2_000){ + havePredictionInfo = false + CallerLogger.d(TAG,"超时设置为false:havePredictionInfo $havePredictionInfo") + } } /** @@ -29,17 +67,20 @@ object OchBridgeManager: CallerBase(), */ override fun onAutopilotTrajectory(trajectoryInfos: MutableList) { if(trajectoryInfos.isEmpty()){ - BridgeServiceManager.invokePlanningListener(false) + haveTrajectoryInfo = false }else{ - BridgeServiceManager.invokePlanningListener(true) + haveTrajectoryInfo = true } } + /** + * 预测信息 + */ override fun onPredictionObstacleTrajectory(predictionObjects: Prediction2025.mPredictionObjects) { if (predictionObjects.objsAppList==null) { - BridgeServiceManager.invokePredictionHaveData(false) + havePredictionInfo = false }else{ - BridgeServiceManager.invokePredictionHaveData(true) + havePredictionInfo = true } } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/NDEViewModel.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchNdeManager.kt similarity index 81% rename from OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/NDEViewModel.kt rename to OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchNdeManager.kt index 66c3fc90a0..674401607c 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/NDEViewModel.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchNdeManager.kt @@ -1,24 +1,28 @@ -package com.mogo.och.unmanned.passenger.ui.aiview +package com.mogo.och.bridge.bridge -import androidx.lifecycle.ViewModel import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager -import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage +import com.mogo.eagle.core.function.call.autopilot.CallerVlmManager +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.och.bridge.BridgeServiceManager +import com.mogo.och.common.module.biz.birdge.data.RoadMsg + import mogo.telematics.pad.MessagePad.TrackedObject -class NDEViewModel: ViewModel(), IMoGoAutopilotIdentifyListener { +object OchNdeManager : IMoGoAutopilotIdentifyListener { + private val TAG = "${M_OCHCOMMON}OchVlmManager" - companion object{ - private const val TAG = "NDEViewModel" + fun load(){ + CallerAutopilotIdentifyListenerManager.addListener(TAG, this) + } + + fun release(){ + CallerVlmManager.removeListener(TAG) } private var lastMap2 = HashMap() private var lastTime = 0L - fun init(){ - CallerAutopilotIdentifyListenerManager.addListener(TAG, this) - } - override fun onAutopilotIdentifyDataUpdate(trafficData: List?){ super.onAutopilotIdentifyDataUpdate(trafficData) handleCheLong(trafficData) @@ -27,7 +31,7 @@ class NDEViewModel: ViewModel(), IMoGoAutopilotIdentifyListener { private fun handleCheLong(trafficData: List?) { var hasCheLong = false var isNewData = false - val roadMsgList = ArrayList() + val roadMsgList = ArrayList() val curMap = HashMap() if (lastTime > 0 && System.currentTimeMillis() - lastTime > 60000) { lastMap2.clear()// 清除上次车龙事件的缓存 @@ -55,8 +59,7 @@ class NDEViewModel: ViewModel(), IMoGoAutopilotIdentifyListener { curMap[obj.laneNum] = "0" } // 保存所有车道信息 - roadMsgList.add( - AIMessage.RoadMsg( + roadMsgList.add(RoadMsg( obj.arrowType, laneNum = obj.laneNum, isRecommend = obj.suggestedLanes, @@ -74,10 +77,8 @@ class NDEViewModel: ViewModel(), IMoGoAutopilotIdentifyListener { lastTime = System.currentTimeMillis() val sortedList = roadMsgList.sortedWith(compareByDescending { it.laneNum }) - val ndeEvent = AIMessage.NDEData(System.currentTimeMillis().toString(),"路口车龙","前方路口有车龙",sortedList) - AIMessageManager.post(ndeEvent) + BridgeServiceManager.invokeNdeData("路口车龙","前方路口有车龙",sortedList) } } } - } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchVlmManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchVlmManager.kt new file mode 100644 index 0000000000..d70f8cccff --- /dev/null +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchVlmManager.kt @@ -0,0 +1,58 @@ +package com.mogo.och.bridge.bridge + +import com.mogo.eagle.core.function.api.autopilot.IVlmListener +import com.mogo.eagle.core.function.call.autopilot.CallerVlmManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.och.bridge.BridgeServiceManager +import com.mogo.och.common.module.biz.birdge.data.VlmData +import vllm.Vlm +import kotlin.properties.Delegates + +object OchVlmManager : IVlmListener { + private val TAG = "${M_OCHCOMMON}OchVlmManager" + + fun load(){ + CallerVlmManager.addListener(TAG,this) + } + + fun release(){ + CallerVlmManager.removeListener(TAG) + } + + // + private var vllmImageData: VlmImageData by Delegates.observable(VlmImageData(0.0,null)) { _, oldValue, newValue -> + if (oldValue != newValue) { + if(newValue.imageSourceTimestamp == vllmData.messageSourceTimestamp){ + CallerLogger.d(TAG," message先来 图片后来 发送message和图片 ${newValue.imageSourceTimestamp}---${vllmData.messageSourceTimestamp}") + BridgeServiceManager.invokeVlmData(VlmData(vllmData.id,vllmData.message,newValue.image)) + } + } + } + private var vllmData: VlmMessageData by Delegates.observable(VlmMessageData(0.0,0,"")) { _, oldValue, newValue -> + if (oldValue != newValue) { + if(newValue.messageSourceTimestamp== vllmImageData.imageSourceTimestamp){ + // 图片先来 发送message和图片 + BridgeServiceManager.invokeVlmData(VlmData(newValue.id,newValue.message, + vllmImageData.image) + ) + CallerLogger.d(TAG,"messsage后来 图片先来 发送message和图片 ${newValue.message}----${newValue.messageSourceTimestamp}---${newValue.id}") + }else{ + // message 先来 单独发送message 图片来了后 再次发送出去 + BridgeServiceManager.invokeVlmData(VlmData(newValue.id,newValue.message,null)) + CallerLogger.d(TAG,"message先来 图片后来 发送message ${newValue.message}---${newValue.messageSourceTimestamp}---${newValue.id}") + } + } + } + + + override fun onVllm(sourceTimestamp: Double, vllm: Vlm.VLLMObject) { + if(this.vllmData.id!=vllm.workZone.id){ + this.vllmData = VlmMessageData(sourceTimestamp,vllm.workZone.id,vllm.workZone.sceneExplantion) + } + } + + override fun onVllmImage(sourceTimestamp: Double, image: ByteArray) { + this.vllmImageData = VlmImageData(sourceTimestamp,image) + } +} \ No newline at end of file diff --git a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt index 0d0219dd1d..51d39aca43 100644 --- a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt +++ b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt @@ -1,6 +1,8 @@ package com.mogo.och.common.module.debug import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.os.Environment import android.os.SystemClock import chassis.Chassis @@ -8,6 +10,7 @@ import chassis.Chassis.DoorNumber import chassis.VehicleStateOuterClass import com.amap.api.maps.model.LatLng import com.google.gson.reflect.TypeToken +import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.map.MogoLocation @@ -24,6 +27,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis import com.mogo.eagle.core.function.call.autopilot.CallerChassisStatesListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerVlmManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.map.CallerMapRomaListener @@ -34,24 +38,25 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.R import com.mogo.och.common.module.biz.birdge.BridgeManager import com.mogo.och.common.module.biz.order.OrderManager import com.mogo.och.common.module.debug.location.MogoLocationExit import com.mogo.och.common.module.manager.loop.BizLoopManager -//import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager -//import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil -//import com.mogo.och.bridge.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.view.DebugFloatWindow import com.mogo.och.common.module.wigets.media.MediaBeanManager import com.zhjt.mogo.adas.data.bean.AutopilotStatistics import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg +import vllm.Vlm import java.io.BufferedReader +import java.io.ByteArrayOutputStream import java.io.File import java.io.FileInputStream import java.io.IOException import java.io.InputStreamReader + object DebugDataDispatch { const val TAG = "DebugDataDispatch" @@ -73,6 +78,8 @@ object DebugDataDispatch { const val ota = "ota" const val video = "video" const val mediaMusic = "mediaAndMusic" + const val vlmMessage = "vlmMessage" + const val vlmImage = "vlmImage" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "1111/11111" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "globalPath" --es path "sy73.json" @@ -89,7 +96,8 @@ object DebugDataDispatch { // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "showDebugView" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "scanner" --es qrInfo "" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "ota" --ei "ota" 1 -// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "video" --ei "video" 1 --es url "rtmp://video.zhidaozhixing.com/live/861130041693196C_2" +// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "vlmMessage" --es message "前方100米有道路施工,施工长度100米,影响第1、2车道通行。" --ei id 128 --ef time 1880.0 +// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "vlmImage" --ef time 1880.0 val ROOT_PATH = @@ -102,6 +110,25 @@ object DebugDataDispatch { } when (type) { + vlmMessage -> { + val time = intent.getFloatExtra("time",0f) + val id = intent.getIntExtra("id",0) + val message = intent.getStringExtra("message") + val newBuilder = Vlm.VLLMObject.newBuilder() + val build = newBuilder.workZoneBuilder.setId(id).setSceneExplantion(message).build() + newBuilder.workZone = build + CallerVlmManager.invokeVllm(time.toDouble(),newBuilder.build()) + } + vlmImage -> { + val time = intent.getFloatExtra("time",0f) + BizLoopManager.runInIoThread{ + val bitmap = BitmapFactory.decodeResource(AbsMogoApplication.getApp().resources, R.drawable.common_debug) + val stream = ByteArrayOutputStream() + bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream) + val byteArray = stream.toByteArray() + CallerVlmManager.invokeVllmImage(time.toDouble(),byteArray) + } + } mediaMusic -> { val musicList = MediaBeanManager.getMusicList() val mediaList = MediaBeanManager.getMediaList() diff --git a/OCH/common/common/src/debug/res/drawable/common_debug.webp b/OCH/common/common/src/debug/res/drawable/common_debug.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f79104dced3518f5e1523b0e3305249dbfa7230 GIT binary patch literal 186858 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­PzqgZ6QYvo|en5R@FxJ8|Ai_@} z{hxl*Vy)_J^6ArS4fEUK1iCe$N{DhYrD6DQvfa-dmIH9dY2Qj+hA(pv+D_<3^8`|0 z!oaT%I8DBR0qJ5`yBS9z))yx}Gp}6U_mn18+!`dQrU#s6U28JP0m2i4whDZ*BRg*6 ze|_RuI+IULdg8w#)KrU$!PTMSFS)H)?qVulJd(I;Xh`1Les$Fw*ZV&aSIR+t67iJR zwf5hv$ltxd5*xr71@Zm)viS^FRZ$WkAd!jB>92P9c6_Y;`6QJ-`X%zsaLYYin1M0lJY$f))(_Sl1|LQ8~~8&&(nEE$@21|ys}g{CjaM|#M`jB)9N>7lAr&p9^@=6)j7rK+x}uu?A|%y0jvnA}(?y#@b~6h%p)#o}M%;kYDYaLWq=8`jjZ%0Mm{RVg2bukXs+d zihsj8W$8^4cv0M^l7{{sOxrOW%iMn^XWMBXd5sT~74bdd|IR=_=u+rVcSL^ubw5

W9B%16rzTiNVeZf%RUyWSzN!*Xe& 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 literal 0 HcmV?d00001 diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt index 14b452a186..8d378f1ce0 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt @@ -1,6 +1,8 @@ package com.mogo.och.common.module.biz.birdge import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.och.common.module.biz.birdge.data.RoadMsg +import com.mogo.och.common.module.biz.birdge.data.VlmData interface BridgeListener { /** @@ -15,4 +17,9 @@ interface BridgeListener { fun onTrajectoryDistanceListener(distance: Double){} fun onTrajectoryPointsAndDistanceListener(trajectoryList: MutableList,distance: Double){} + + + fun onVlmDataListener(vlmData: VlmData){} + + fun onNdeDataListener(title: String, desc: String, sortedList: List) {} } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/RoadMsg.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/RoadMsg.kt new file mode 100644 index 0000000000..5551bc498f --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/RoadMsg.kt @@ -0,0 +1,8 @@ +package com.mogo.och.common.module.biz.birdge.data + +data class RoadMsg( + var arrowType: Int, // 车道类型,如直行201(详情参考文件:message_pad.proto) + var laneNum: Int,// 车道号 + var isRecommend: Boolean,// 是否是推荐车道 + var isCheLong: Boolean// 是否有车龙,代表拥堵、行驶缓慢 +) \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/VlmData.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/VlmData.kt new file mode 100644 index 0000000000..5c8b1e4fa7 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/data/VlmData.kt @@ -0,0 +1,28 @@ +package com.mogo.och.common.module.biz.birdge.data + +data class VlmData(val id:Int?,val message:String?,var image: ByteArray?) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as VlmData + + if (id != other.id) return false + if (message != other.message) return false + if (image != null) { + if (other.image == null) return false + if (!image.contentEquals(other.image)) return false + } else if (other.image != null) return false + + return true + } + + override fun hashCode(): Int { + return id ?: 0 + } + + override fun toString(): String { + return "VlmData(id=$id, message=$message)" + } + +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/EnvManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/EnvManager.kt new file mode 100644 index 0000000000..89089e568a --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/EnvManager.kt @@ -0,0 +1,45 @@ +package com.mogo.och.common.module.manager + +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils + +object EnvManager { + fun isB1(): Boolean { + return AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode) + } + + fun isB1Driver(): Boolean { + return isB1() && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + } + + fun isB1Passenger(): Boolean { + return isB1() && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) + } + + fun isB2(): Boolean { + return AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode) + } + + fun isB2Driver(): Boolean { + return isB2() && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + } + + fun isB2Passenger(): Boolean { + return isB2() && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) + } + + fun isT1T2(): Boolean { + return AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode) + } + + fun isT1T2Driver(): Boolean { + return isT1T2() && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + } + + fun isT1T2Passenger(): Boolean { + return isT1T2() && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) + } + + + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt index 7285f1811c..039c33d7c3 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt @@ -10,6 +10,7 @@ import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.UriUtils +import com.mogo.och.common.module.biz.birdge.data.RoadMsg import com.mogo.och.common.module.biz.media.MediaManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.manager.transform.OchTransform @@ -126,11 +127,11 @@ class PM2BaseFragment : CallerMapRoadListenerManager.invokeCrossDevice(true) } test3.onClick { - val one = AIMessage.RoadMsg(201,1,true,false) - val two = AIMessage.RoadMsg(202,2,false,false) - val three = AIMessage.RoadMsg(203,3,false,true) + val one = RoadMsg(201,1,true,false) + val two = RoadMsg(202,2,false,false) + val three = RoadMsg(203,3,false,true) - val sortedList = ArrayList() + val sortedList = ArrayList() sortedList.add(one) sortedList.add(two) sortedList.add(three) diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/adapter/AINDERoadAdapter.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/adapter/AINDERoadAdapter.kt index 51893534b4..9492b7f358 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/adapter/AINDERoadAdapter.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/adapter/AINDERoadAdapter.kt @@ -10,14 +10,14 @@ import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView +import com.mogo.och.common.module.biz.birdge.data.RoadMsg import com.mogo.och.shuttle.weaknet.passenger.R -import com.mogo.och.shuttle.weaknet.passenger.ui.mind.bean.AIMessage class AINDERoadAdapter(private val context: Context): RecyclerView.Adapter() { - private var roadList: List?= null + private var roadList: List?= null - fun setData(list: List){ + fun setData(list: List){ roadList = list notifyDataSetChanged() } diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/bean/AssistantMessage.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/bean/AssistantMessage.kt index bdbaaa8155..ab2dcb2585 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/bean/AssistantMessage.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/bean/AssistantMessage.kt @@ -3,6 +3,8 @@ package com.mogo.och.shuttle.weaknet.passenger.ui.mind.bean import android.os.CountDownTimer import android.util.Log import com.mogo.eagle.core.data.v2x.RoadV2NEventType +import com.mogo.och.common.module.biz.birdge.data.RoadMsg +import com.mogo.och.common.module.biz.birdge.data.VlmData import kotlin.math.floor @@ -175,11 +177,11 @@ sealed class AIMessage( var roadList: List ): AIMessage(id,title) - data class RoadMsg( - var arrowType: Int, // 车道类型,如直行201(详情参考文件:message_pad.proto) - var laneNum: Int,// 车道号 - var isRecommend: Boolean,// 是否是推荐车道 - var isCheLong: Boolean// 是否有车龙,代表拥堵、行驶缓慢 - ) + data class AiVlmData( + override val id: String, + override val title: String, + var desc: String, + var vlmData: VlmData + ):AIMessage(id,title) } \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/data/NDEViewModel.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/data/NDEViewModel.kt index a0f18dd3ea..bb77504f17 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/data/NDEViewModel.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b2/com/mogo/och/shuttle/weaknet/passenger/ui/mind/data/NDEViewModel.kt @@ -3,85 +3,33 @@ package com.mogo.och.shuttle.weaknet.passenger.ui.mind.data import androidx.lifecycle.ViewModel import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager +import com.mogo.och.common.module.biz.birdge.BridgeListener +import com.mogo.och.common.module.biz.birdge.BridgeManager +import com.mogo.och.common.module.biz.birdge.data.RoadMsg import com.mogo.och.shuttle.weaknet.passenger.ui.mind.AIMessageManager import com.mogo.och.shuttle.weaknet.passenger.ui.mind.bean.AIMessage -import mogo.telematics.pad.MessagePad.TrackedObject /** * 车龙信息 */ -class NDEViewModel: ViewModel(), IMoGoAutopilotIdentifyListener { +class NDEViewModel: ViewModel(), BridgeListener { companion object{ private const val TAG = "NDEViewModel" } - private var lastMap2 = HashMap() - private var lastTime = 0L - fun init(){ - CallerAutopilotIdentifyListenerManager.addListener(TAG, this) + BridgeManager.addBridgeListener(TAG,this) } - override fun onAutopilotIdentifyDataUpdate(trafficData: List?){ - super.onAutopilotIdentifyDataUpdate(trafficData) - handleCheLong(trafficData) + override fun onCleared() { + super.onCleared() + BridgeManager.removeBridgeListener(TAG) } - private fun handleCheLong(trafficData: List?) { - var hasCheLong = false - var isNewData = false - val roadMsgList = ArrayList() - val curMap = HashMap() - if (lastTime > 0 && System.currentTimeMillis() - lastTime > 60000) { - lastMap2.clear()// 清除上次车龙事件的缓存 - } - var lastLocStr: String? = "" - trafficData?.forEach { obj -> - if (obj.type == 707) {// 当前方向所有车道 - if (obj.polygonCount > 1) {// 当次数据有车龙事件 - lastLocStr = lastMap2[obj.laneNum] - // 1. 上次无车龙但此次有车龙,认为是新车龙事件 - // 2. 两次都有车龙,则判断车龙的长度是否相同 - if (lastLocStr == null || lastLocStr == "0" || lastLocStr != "${obj.polygonList[0]}-${obj.polygonList[obj.polygonCount - 1]}") { - isNewData = true - } - hasCheLong = true - - // key: 车道号,value: 非0代表有车龙且首、尾两个点可计算车龙长度 - curMap[obj.laneNum] = - "${obj.polygonList[0]}-${obj.polygonList[obj.polygonCount - 1]}" - } else {// 当次没有车龙 - if (lastMap2[obj.laneNum] != null && lastMap2[obj.laneNum] != "0") {// 3. 上次有车龙,这次无车龙 - isNewData = true - } - // key: 车道号,value: 0代表无车龙 - curMap[obj.laneNum] = "0" - } - // 保存所有车道信息 - roadMsgList.add( - AIMessage.RoadMsg( - obj.arrowType, - laneNum = obj.laneNum, - isRecommend = obj.suggestedLanes, - isCheLong = obj.polygonCount > 1 - ) - ) - } - } - if (isNewData) { - // 清除上次车道信息 - lastMap2.clear() - if (hasCheLong) { - // 缓存当次车龙事件所有车道信息 - lastMap2.putAll(curMap) - lastTime = System.currentTimeMillis() - - val sortedList = roadMsgList.sortedWith(compareByDescending { it.laneNum }) - val ndeEvent = AIMessage.NDEData(System.currentTimeMillis().toString(),"路口车龙","前方路口有车龙",sortedList) - AIMessageManager.post(ndeEvent) - } - } + override fun onNdeDataListener(title: String, desc: String, sortedList: List) { + val ndeEvent = AIMessage.NDEData(System.currentTimeMillis().toString(),title,desc,sortedList) + AIMessageManager.post(ndeEvent) } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AiView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AiView.kt index 50d8d9a1a6..5b1e8c33da 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AiView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AiView.kt @@ -26,6 +26,10 @@ import com.mogo.och.unmanned.passenger.ui.aiview.adapter.AIMessageAdapter import com.mogo.och.unmanned.passenger.ui.aiview.adapter.OnItemClickListener import com.mogo.och.unmanned.passenger.ui.aiview.adapter.PaddingItemDecoration import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage +import com.mogo.och.unmanned.passenger.ui.aiview.data.AutomaticExplorationViewModel +import com.mogo.och.unmanned.passenger.ui.aiview.data.NDEViewModel +import com.mogo.och.unmanned.passenger.ui.aiview.data.RoadCrossRoamViewModel +import com.mogo.och.unmanned.passenger.ui.aiview.data.RoadV2NEventViewModel import com.mogo.och.unmanned.taxi.passenger.R import kotlinx.android.synthetic.main.taxt_p_ai.view.aiMotionLayout import kotlinx.android.synthetic.main.taxt_p_ai.view.ivIcon @@ -47,11 +51,10 @@ class AiView @JvmOverloads constructor( private var viewModel:AIViewModel?=null -// private var pncActionsModel:PNCActionsViewModel ?= null - private var roadV2NEventModel:RoadV2NEventViewModel ?= null - private var roadCrossRoamModel:RoadCrossRoamViewModel ?= null - private var automaticExplorationModel:AutomaticExplorationViewModel ?= null - private var ndeViewModel: NDEViewModel ?= null + private var roadV2NEventModel: RoadV2NEventViewModel?= null + private var roadCrossRoamModel: RoadCrossRoamViewModel?= null + private var automaticExplorationModel: AutomaticExplorationViewModel?= null + private var ndeViewModel: NDEViewModel?= null private var aiAnimator: BigFrameAnimatorContainer?=null private var aiAnimatorBg: BigFrameAnimatorContainer?=null @@ -105,7 +108,6 @@ class AiView @JvmOverloads constructor( if(aiAnimator==null) { aiAnimator = BigFrameAnimatorContainer(R.array.ai_animator, 31, ivIcon) } -// aiAnimator?.start() ivIcon.onClick { viewModel?.onWakeUp() diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageAdapter.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageAdapter.kt index 665e2f7b04..1e833e1987 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageAdapter.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageAdapter.kt @@ -26,6 +26,7 @@ class AIMessageAdapter : ListAdapter(MessageDiffCa AIMessage.TYPE_AUTOMATIC_EXPLORATION -> AutomaticExplorationViewHolder(inflater.inflate(R.layout.item_ai_automatic_exploration,parent,false)) AIMessage.TYPE_EVALUATE -> EvaluateViewViewHolder(inflater.inflate(R.layout.taxi_p_evaluate,parent,false)) AIMessage.TYPE_NDE -> NDEViewHolder(inflater.inflate(R.layout.item_ai_nde_event,parent,false)) + AIMessage.TYPE_VLM -> VlmViewHolder(inflater.inflate(R.layout.item_ai_vlm_action,parent,false)) else -> throw IllegalArgumentException("Invalid view type") } } @@ -44,6 +45,7 @@ class AIMessageAdapter : ListAdapter(MessageDiffCa is AIMessage.AutomaticExploration -> AIMessage.TYPE_AUTOMATIC_EXPLORATION is AIMessage.EvaluateData -> AIMessage.TYPE_EVALUATE is AIMessage.NDEData -> AIMessage.TYPE_NDE + is AIMessage.AiVlmData -> AIMessage.TYPE_VLM else -> AIMessage.TYPE_EVENT } } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageViewHolder.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageViewHolder.kt index c248534484..1adf8c3853 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageViewHolder.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AIMessageViewHolder.kt @@ -6,7 +6,6 @@ import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.content.Context import android.graphics.Rect -import android.text.TextUtils import android.util.Log import android.view.View import android.view.animation.LinearInterpolator @@ -14,6 +13,7 @@ import android.widget.FrameLayout import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView +import androidx.appcompat.widget.AppCompatImageView import androidx.core.content.ContextCompat import androidx.core.graphics.toColorInt import androidx.recyclerview.widget.LinearLayoutManager @@ -28,7 +28,9 @@ import com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventLivePlayView import com.mogo.eagle.core.function.view.MapRoamView import com.mogo.eagle.core.function.view.RoadCrossRoamListAdapter import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp import com.mogo.eagle.core.utilcode.mogo.glide.GlideImageLoader +import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform import com.mogo.eagle.core.utilcode.mogo.imageloader.MogoImageView import com.mogo.eagle.core.utilcode.util.DateTimeUtils import com.mogo.och.common.module.utils.FrameAnimatorContainer @@ -38,8 +40,6 @@ import com.mogo.och.unmanned.taxi.passenger.R import com.youth.banner.Banner import com.youth.banner.indicator.CircleIndicator import com.youth.banner.transformer.ScaleInTransformer -import kotlinx.android.synthetic.main.taxi_p_evaluate.view.iv_evaluate_great -import kotlinx.android.synthetic.main.taxi_p_evaluate.view.iv_evaluate_low import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -85,6 +85,23 @@ abstract class MessageViewHolder(view: View) : RecyclerView.ViewHolder(view) { .placeholder(R.drawable.icon_pic_holder) .error(R.drawable.icon_pic_error) // .error(R.drawable.icon_marker_window_place_holder) +// .placeholder(R.drawable.icon_marker_window_place_holder) + .into(this) + + } + } + fun ImageView.showOrHideWithByteArray(image: ByteArray?) { + if (image==null) { + visibility = View.GONE + } else { + visibility = View.VISIBLE + //optionalTransform(new GlideRoundedCornersTransform(30f, GlideRoundedCornersTransform.CornerType.LEFT)) + Glide.with(this) + .load(image) + .optionalTransform(GlideRoundedCornersTransform(18f, GlideRoundedCornersTransform.CornerType.ALL)) + .placeholder(R.drawable.icon_pic_holder) + .error(R.drawable.icon_pic_error) +// .error(R.drawable.icon_marker_window_place_holder) // .placeholder(R.drawable.icon_marker_window_place_holder) .into(this) @@ -434,6 +451,21 @@ class NDEViewHolder(binding: View) : MessageViewHolder(binding){ } +class VlmViewHolder(binding: View) : MessageViewHolder(binding){ + + private var tvNdeTitle: TextView = binding.findViewById(R.id.tvVlmMessage) + private var acivVlmImage: AppCompatImageView = binding.findViewById(R.id.acivVlmImage) + + + override fun bind(item: AIMessage, onItemClickListener: OnItemClickListener?) { + if(item is AIMessage.AiVlmData){ + tvNdeTitle.text = item.vlmData.message + acivVlmImage.showOrHideWithByteArray(item.vlmData.image) + } + } + +} + private class NoScrollLayoutManager(context: Context?) : LinearLayoutManager(context) { override fun canScrollVertically(): Boolean { return false diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AINDERoadAdapter.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AINDERoadAdapter.kt index 0d2ec97ca1..dbb8050c2d 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AINDERoadAdapter.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/adapter/AINDERoadAdapter.kt @@ -10,14 +10,14 @@ import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView -import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage +import com.mogo.och.common.module.biz.birdge.data.RoadMsg import com.mogo.och.unmanned.taxi.passenger.R class AINDERoadAdapter(private val context: Context): RecyclerView.Adapter() { - private var roadList: List?= null + private var roadList: List?= null - fun setData(list: List){ + fun setData(list: List){ roadList = list notifyDataSetChanged() } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/bean/AssistantMessage.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/bean/AssistantMessage.kt index 2b7ca9a3e4..b6038b0efe 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/bean/AssistantMessage.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/bean/AssistantMessage.kt @@ -3,6 +3,8 @@ package com.mogo.och.unmanned.passenger.ui.aiview.bean import android.os.CountDownTimer import android.util.Log import com.mogo.eagle.core.data.v2x.RoadV2NEventType +import com.mogo.och.common.module.biz.birdge.data.RoadMsg +import com.mogo.och.common.module.biz.birdge.data.VlmData import kotlin.math.floor @@ -27,6 +29,7 @@ sealed class AIMessage( const val TYPE_AUTOMATIC_EXPLORATION = 9 const val TYPE_EVALUATE = 10 const val TYPE_NDE = 11 + const val TYPE_VLM = 12 } data class Scan( @@ -177,11 +180,11 @@ sealed class AIMessage( var roadList: List ):AIMessage(id,title) - data class RoadMsg( - var arrowType: Int, // 车道类型,如直行201(详情参考文件:message_pad.proto) - var laneNum: Int,// 车道号 - var isRecommend: Boolean,// 是否是推荐车道 - var isCheLong: Boolean// 是否有车龙,代表拥堵、行驶缓慢 - ) + data class AiVlmData( + override val id: String, + override val title: String, + var desc: String, + var vlmData: VlmData + ):AIMessage(id,title) } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AutomaticExplorationViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/AutomaticExplorationViewModel.kt similarity index 97% rename from OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AutomaticExplorationViewModel.kt rename to OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/AutomaticExplorationViewModel.kt index 153b91e0d2..89b41098df 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/AutomaticExplorationViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/AutomaticExplorationViewModel.kt @@ -1,4 +1,4 @@ -package com.mogo.och.unmanned.passenger.ui.aiview +package com.mogo.och.unmanned.passenger.ui.aiview.data import android.os.CountDownTimer import androidx.lifecycle.ViewModel @@ -10,11 +10,11 @@ import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.utilcode.util.StringUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils -import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.bridge.distance.IDistanceListener import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager import com.mogo.och.data.taxi.BaseOrderBean import com.mogo.och.data.taxi.TaxiOrderStatusEnum +import com.mogo.och.unmanned.passenger.ui.aiview.AIMessageManager import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage import com.mogo.och.unmanned.taxi.utils.order.OrderListener import com.mogo.och.unmanned.taxi.utils.order.OrderModel diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/NDEViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/NDEViewModel.kt new file mode 100644 index 0000000000..ee6bf64d4d --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/NDEViewModel.kt @@ -0,0 +1,39 @@ +package com.mogo.och.unmanned.passenger.ui.aiview.data + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager +import com.mogo.och.common.module.biz.birdge.BridgeListener +import com.mogo.och.common.module.biz.birdge.BridgeManager +import com.mogo.och.common.module.biz.birdge.data.RoadMsg +import com.mogo.och.common.module.biz.birdge.data.VlmData +import com.mogo.och.unmanned.passenger.ui.aiview.AIMessageManager +import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage + +class NDEViewModel: ViewModel(), BridgeListener { + + companion object{ + private const val TAG = "NDEViewModel" + } + + fun init(){ + BridgeManager.addBridgeListener(TAG,this) + } + + override fun onCleared() { + super.onCleared() + BridgeManager.removeBridgeListener(TAG) + } + + + override fun onVlmDataListener(vlmData: VlmData){ + val ndeEvent = AIMessage.AiVlmData(vlmData.id.toString(),"","",vlmData) + AIMessageManager.post(ndeEvent) + } + + override fun onNdeDataListener(title: String, desc: String, sortedList: List) { + val ndeEvent = AIMessage.NDEData(System.currentTimeMillis().toString(),title,desc,sortedList) + AIMessageManager.post(ndeEvent) + } + +} \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/PNCActionsViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/PNCActionsViewModel.kt similarity index 98% rename from OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/PNCActionsViewModel.kt rename to OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/PNCActionsViewModel.kt index c3875ae4f7..33fc356fed 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/PNCActionsViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/PNCActionsViewModel.kt @@ -1,4 +1,4 @@ -package com.mogo.och.unmanned.passenger.ui.aiview +package com.mogo.och.unmanned.passenger.ui.aiview.data import androidx.lifecycle.ViewModel import com.mogo.eagle.core.data.autopilot.pnc.PncActionsHelper @@ -6,10 +6,9 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsL import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.unmanned.passenger.model.TaxiPassengerModel +import com.mogo.och.unmanned.passenger.ui.aiview.AIMessageManager import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage import mogo.telematics.pad.MessagePad diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/RoadCrossRoamViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/RoadCrossRoamViewModel.kt similarity index 94% rename from OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/RoadCrossRoamViewModel.kt rename to OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/RoadCrossRoamViewModel.kt index c7f836ed4d..fd6eb8a2f4 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/RoadCrossRoamViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/RoadCrossRoamViewModel.kt @@ -1,7 +1,6 @@ -package com.mogo.och.unmanned.passenger.ui.aiview +package com.mogo.och.unmanned.passenger.ui.aiview.data import android.content.Context -import android.view.View import androidx.lifecycle.ViewModel import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.config.FunctionBuildConfig @@ -14,6 +13,7 @@ import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.unmanned.passenger.ui.aiview.AIMessageManager import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage class RoadCrossRoamViewModel: ViewModel(), IMoGoMapRoadListener { @@ -67,7 +67,7 @@ class RoadCrossRoamViewModel: ViewModel(), IMoGoMapRoadListener { AIAssist.getInstance(mContext).speakTTSVoiceWithLevel(disStr, AIAssist.NEW_LEVEL_2) } CallerServicesEventManager.updateServicesNum(CallerServicesEventManager.ServiceType.ROAD) - AIMessageManager.post(AIMessage.RoadCrossRoam(System.currentTimeMillis().toString(),"")) + AIMessageManager.post(AIMessage.RoadCrossRoam(System.currentTimeMillis().toString(), "")) } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/RoadV2NEventViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/RoadV2NEventViewModel.kt similarity index 95% rename from OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/RoadV2NEventViewModel.kt rename to OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/RoadV2NEventViewModel.kt index b850341ea7..bc7fc909fd 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/RoadV2NEventViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/aiview/data/RoadV2NEventViewModel.kt @@ -1,4 +1,4 @@ -package com.mogo.och.unmanned.passenger.ui.aiview +package com.mogo.och.unmanned.passenger.ui.aiview.data import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.ViewModel @@ -11,6 +11,7 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.hmi.CallerRoadV2NEventWindowListenerManager import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.unmanned.passenger.ui.aiview.AIMessageManager import com.mogo.och.unmanned.passenger.ui.aiview.bean.AIMessage import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/item_ai_vlm_action.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/item_ai_vlm_action.xml new file mode 100644 index 0000000000..a38c470646 --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/item_ai_vlm_action.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ 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 cd3b86f98f..e168fd8aac 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 @@ -1567,7 +1567,9 @@ internal class DebugSettingView @JvmOverloads constructor( */ @SuppressLint("SetTextI18n") private fun setDomainControllerCheckedChangeListener() { - etAutopilotIP.setText("192.168.1.") + val string = SharedPrefsMgr.getInstance() + .getString(SharedPrefsConstants.inputIpDomainController, "192.168.1.") + etAutopilotIP.setText(string) etAutopilotIP.text?.let { etAutopilotIP.setSelection(it.length) } //设置工控机IP btnSetAutopilotIP.setOnClickListener { @@ -1575,6 +1577,7 @@ internal class DebugSettingView @JvmOverloads constructor( if (autoPilotIp.isNotEmpty()) { SSHAccountConfig.setRosMasterIp(autoPilotIp.split(":", ":").first()) CallerAutoPilotControlManager.resetIpAddress(autoPilotIp) + SharedPrefsMgr.getInstance().putString(SharedPrefsConstants.inputIpDomainController,autoPilotIp) } else { ToastUtils.showShort("请输入正确的IP地址") } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/SharedPrefsConstants.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/SharedPrefsConstants.java index 6d020bb170..dba632fe8d 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/SharedPrefsConstants.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/SharedPrefsConstants.java @@ -18,4 +18,6 @@ public class SharedPrefsConstants { public static final String APP_UPGRADE_CONTENT = "app_upgrade_content"; public static final String APP_MAC = "app_mac"; + + public static final String inputIpDomainController = "InputIpDomainController"; } From d749b996289d1c473b0b4c61ed82a363f567e2d7 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 20 Jun 2025 11:30:30 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[8.1.0]=20[fea]=20[=E5=85=AC=E4=BA=A4?= =?UTF-8?q?=E7=AB=99=E6=8F=90=E9=86=92]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/b1/layout/shuttle_p_weak_jl_base_fragment.xml | 11 +++++++++++ .../function/hmi/ui/v2n/RoadV2NEventWindowView.kt | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b1/layout/shuttle_p_weak_jl_base_fragment.xml b/OCH/shuttle/passenger_weaknet/src/main/res/b1/layout/shuttle_p_weak_jl_base_fragment.xml index 7d8eee6561..a4491c052c 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/res/b1/layout/shuttle_p_weak_jl_base_fragment.xml +++ b/OCH/shuttle/passenger_weaknet/src/main/res/b1/layout/shuttle_p_weak_jl_base_fragment.xml @@ -45,6 +45,7 @@ app:layout_constraintTop_toTopOf="parent" /> + + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/v2n/RoadV2NEventWindowView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/v2n/RoadV2NEventWindowView.kt index 7451c5eb3c..7b4c7cf9dd 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/v2n/RoadV2NEventWindowView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/v2n/RoadV2NEventWindowView.kt @@ -75,8 +75,8 @@ class RoadV2NEventWindowView @JvmOverloads constructor( AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) } - private val isB2 by lazy { - AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode) + private val isB1 by lazy { + AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode) } private var currentEventUUID: String = "" @@ -93,7 +93,7 @@ class RoadV2NEventWindowView @JvmOverloads constructor( private fun initView() { if (isPassengerScreen) { - if (isB2) { + if (isB1) { setB2PassengerScreenView() } else { setTaxiPassengerScreenView() From 58debcb7310e1f8a87da15ab33101b3c5716dfc9 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Fri, 20 Jun 2025 14:40:24 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[8.1.0][fmd]=20=E4=BF=AE=E5=A4=8Dbug?= =?UTF-8?q?=EF=BC=8C=E7=8A=B6=E6=80=81=E6=A0=8F=E5=A2=9E=E5=8A=A0SSH?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rviz/common/base/BaseAdapter.java | 2 +- .../rviz/common/utils/NetworkUtilsExtend.kt | 1 - .../FaultManagementDiagnosisService.kt | 202 +++++------------- .../rviz/ui/activity/FmdAct.kt | 7 +- .../fragments/resource/SystemResourceFrag.kt | 18 +- .../rviz/ui/views/StateBarView.java | 98 +++++++-- .../rviz/widgets/ros/host/RosHostView.java | 2 - .../res/layout/rviz_fmd_view_state_bar.xml | 32 +-- .../src/main/res/values/strings.xml | 13 +- 9 files changed, 175 insertions(+), 200 deletions(-) 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) 移动网络 From d1c934b216bb0290ea931af39c01fbab02ed9e1c Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Fri, 20 Jun 2025 14:50:23 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[8.1.0][data-center]=20SSM=E8=B6=85?= =?UTF-8?q?=E6=97=B6/=E6=81=A2=E5=A4=8D=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90=E6=8F=90=E7=A4=BA=E5=8A=9F=E8=83=BD=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 60b686678b..0b0315c04a 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -1456,29 +1456,29 @@ class MoGoAdasListenerImpl : OnAdasListener { */ override fun onNodeStateInfo(stateInfo: NodeStateInfo) { CallerNodeStateListenerManager.invokeNodeState(stateInfo) - if (stateInfo.existState != null) { - if (stateInfo.nodeName == AdasConstants.NodeName.SSM) { - //域控SSM接口接收是否超时 - if (stateInfo.existState == NodeExistState.NODE_EXIST_TIMEOUT) { - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.SSMINFO, - SSMMsg(0, "连接超时", "SSM超时无响应", System.currentTimeMillis()) - ) - ) - } else { - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.SSMINFO, - SSMMsg(0, "连接恢复", "SSM连接恢复", System.currentTimeMillis()) - ) - ) - } - } else if (stateInfo.nodeName == AdasConstants.NodeName.FSM2024) { - //域控FSM接口接收是否超时 -// (stateInfo.existState == NodeExistState.NODE_EXIST_TIMEOUT) - } - } +// if (stateInfo.existState != null) { +// if (stateInfo.nodeName == AdasConstants.NodeName.SSM) { +// //域控SSM接口接收是否超时 +// if (stateInfo.existState == NodeExistState.NODE_EXIST_TIMEOUT) { +// CallerMsgBoxManager.saveMsgBox( +// MsgBoxBean( +// MsgBoxType.SSMINFO, +// SSMMsg(0, "连接超时", "SSM超时无响应", System.currentTimeMillis()) +// ) +// ) +// } else { +// CallerMsgBoxManager.saveMsgBox( +// MsgBoxBean( +// MsgBoxType.SSMINFO, +// SSMMsg(0, "连接恢复", "SSM连接恢复", System.currentTimeMillis()) +// ) +// ) +// } +// } else if (stateInfo.nodeName == AdasConstants.NodeName.FSM2024) { +// //域控FSM接口接收是否超时 +//// (stateInfo.existState == NodeExistState.NODE_EXIST_TIMEOUT) +// } +// } } /**