From 6af8c12967744e52842a995df34f153f07975673 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Sat, 25 Feb 2023 20:11:05 +0800 Subject: [PATCH 01/15] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../binding/BindingCarNetWorkManager.kt | 4 ++-- .../eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt index 9daa99f962..ba157a1abd 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt @@ -56,8 +56,6 @@ class BindingCarNetWorkManager private constructor() { widevineIDWithMd5: String?, screenType: Int ) { -// String macAddress1 = "48:b0:2d:4d:33:40"; -// String sn = "X2020220417KA94QIN"; val request = BindingCarRequest( macAddress, widevineIDWithMd5, @@ -152,12 +150,14 @@ class BindingCarNetWorkManager private constructor() { } private fun updateCarVrIconRes(brandId: String?) { + d(SceneConstant.M_BINDING + TAG, "CarModelChange : ${DebugConfig.isCarModelChange()}") if(!DebugConfig.isCarModelChange()){ return } if (brandId == null || brandId.isEmpty()) { return } + d(SceneConstant.M_BINDING + TAG, "getDefaultId() : ${getDefaultId()} ---- brandId = $brandId") if (getDefaultId() == brandId) { return } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt index de83239e19..a631acac8e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt @@ -42,10 +42,10 @@ class LimitingVelocityView constructor( if (limitingVelocity > 0) { visibility = View.VISIBLE tvLimitingVelocity.text = "$limitingVelocity" - tvLimitingSource.text = DataSourceType.getName(sourceType) + tvLimitingSource?.text = DataSourceType.getName(sourceType) } else { visibility = View.GONE - tvLimitingSource.text = "" + tvLimitingSource?.text = "" } } } From 387572900b7fe8df274e3df3d24f57f7aac14ede Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 10:52:56 +0800 Subject: [PATCH 02/15] =?UTF-8?q?[shuttle]=20m2=E4=B9=98=E5=AE=A2=E5=B1=8F?= =?UTF-8?q?auto=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/bus/passenger/model/PM2DrivingModel.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt index 1da862dc25..0af825eb00 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt +++ b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt @@ -145,7 +145,7 @@ class PM2DrivingModel private constructor() { override fun onReceivedMsg(type: Int, byteArray: ByteArray) {//接收司机端发来的信息 if (TelematicConstant.BUSINESS_STRING == type){ val msg = GsonUtils.fromJson(String(byteArray),AppConnectMsg::class.java) as AppConnectMsg - Logger.d(TAG,"onReceivedMsg = "+GsonUtils.toJson(msg)) + Logger.d(SceneConstant.M_BUS_P+TAG,"onReceivedMsg = "+GsonUtils.toJson(msg)) if (msg.isPlay){ //播报 speakTTS(msg.msg) } @@ -227,7 +227,7 @@ class PM2DrivingModel private constructor() { super.onAutopilotStatusResponse(autoPilotStatusInfo) val status = autoPilotStatusInfo.state if (mCurrentAutoStatus == status) return - + d(SceneConstant.M_BUS_P+TAG, "onAutopilotStatusResponse ===== $status") if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status){ //美化模式下且行程中 if (FunctionBuildConfig.isDemoMode && @@ -241,6 +241,7 @@ class PM2DrivingModel private constructor() { }else{//自驾状态 2 mAutoStatusCallback?.updateAutoStatus(true) } + mCurrentAutoStatus = status } } @@ -260,7 +261,7 @@ class PM2DrivingModel private constructor() { if (data?.data == null) return if (data.data.driverStatus != operationStatus?.driverStatus || data.data.plateNumber != operationStatus?.plateNumber){ - d(TAG, "queryDriverOperationStatus ===== 车牌或者登陆状态有变更") + d(SceneConstant.M_BUS_P+TAG, "queryDriverOperationStatus ===== 车牌或者登陆状态有变更") mDrivingInfoCallback?.changeOperationStatus(data.data.driverStatus == 1) } operationStatus = data.data as PM2OperationStatusResponse.Result @@ -294,7 +295,7 @@ class PM2DrivingModel private constructor() { } if (data?.result?.sites === null) { - d(TAG, "queryDriverSiteByCoordinate ===== 没有路线") + d(SceneConstant.M_BUS_P+TAG, "queryDriverSiteByCoordinate ===== 没有路线") routesResult = null mNextStationIndex = 0 isGoingToNextStation = false @@ -314,7 +315,7 @@ class PM2DrivingModel private constructor() { queryDriverOperationDelay() return } - d(TAG, "queryDriverSiteByCoordinate = %s", msg) + d(SceneConstant.M_BUS_P+TAG, "queryDriverSiteByCoordinate = %s", msg) } }) @@ -335,7 +336,7 @@ class PM2DrivingModel private constructor() { && station.isLeaving && i + 1 < stations.size) { mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i + 1, false) if (mNextStationIndex != i + 1) { - d(TAG,"轨迹排查--开始行程") + d(SceneConstant.M_BUS_P+TAG,"轨迹排查--开始行程") mTwoStationsRouts.clear() startRemainRouteInfo() } @@ -467,7 +468,7 @@ class PM2DrivingModel private constructor() { * @param isStart */ fun startOrStopCalculateRouteInfo(isStart: Boolean) { - d(TAG, "startOrStopCalculateRouteInfo() $isStart") + d(SceneConstant.M_BUS_P+TAG, "startOrStopCalculateRouteInfo() $isStart") if (isStart) { PM2ModelLoopManager.startCalculateRouteInfoLoop() } else { From cb53eebb3d3628a8a9774977a88ef6d115f282bd Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 27 Feb 2023 11:36:04 +0800 Subject: [PATCH 03/15] =?UTF-8?q?[=E5=B7=A5=E6=8E=A7=E6=9C=BA=E7=9B=91?= =?UTF-8?q?=E6=8E=A7]=20=E6=B3=A8=E9=87=8A=E6=8E=89=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=E6=9C=8D=E5=8A=A1=E5=92=8C=E4=B9=98=E5=AE=A2=E7=AB=AF?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_ipc_monitoring/build.gradle | 2 +- .../java/com/zhidao/adas/client/ui/MainActivity.java | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle index ec986aca15..10b72a52ca 100644 --- a/app_ipc_monitoring/build.gradle +++ b/app_ipc_monitoring/build.gradle @@ -93,6 +93,6 @@ dependencies { // implementation project(':core:mogo-core-utils') implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.android.support:multidex:1.0.3' - implementation 'com.mogo.cloud:telematic:1.3.59' +// implementation 'com.mogo.cloud:telematic:1.3.59'//注释掉司机端 乘客端 implementation 'com.jcraft:jsch:0.1.55' } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index 08ae38336b..5a13b4a000 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -1,7 +1,5 @@ package com.zhidao.adas.client.ui; -import static com.mogo.telematic.MogoProtocolMsg.NORMAL_DATA; - import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -1084,6 +1082,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas if (BuildConfig.IS_CLIENT) { /*—————————————作为乘客端———————————*/ options = new AdasOptions.Builder().setClient(true).build(); + /*乘客端启动 注释掉 NSDNettyManager.getInstance().searchAndConnectServer(this, "1234", new NettyClientListener() { @Override @@ -1103,7 +1102,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas getHandler().sendEmptyMessage(WHAT_DRIVER_IP); onUpdateConnectStateView(); } - }); + });*/ } else { /*—————————————作为司机端———————————*/ int mode = Constants.getIpcConnectionMode(this); @@ -1126,6 +1125,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; } + /*司机端启动 注释掉 NSDNettyManager.getInstance().startNSDNettyServerWithSN(this, new NettyServerListener() { @Override public void onMessageResponseServer(MogoProtocolMsg msg, Channel channel) { @@ -1152,10 +1152,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas public void onChannelDisConnect(Channel channel) { Log.i(TAG, "onChannelDisConnect channel=" + channel.id()); } - }, "1234567"); + }, "1234567");*/ } AdasManager.getInstance().create(options, this); AdasManager.getInstance().setOnAdasListener(this); + /*两端数据转发 注释掉 AdasManager.getInstance().setOnMultiDeviceListener(new OnMultiDeviceListener() { @Override public void onForwardingDriverIPCMessage(byte[] bytes) { @@ -1173,7 +1174,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas .sendMogoProtocolMsgToServer(new MogoProtocolMsg(NORMAL_DATA, bytes.length, bytes), null); Log.i(TAG, "乘客屏发送数据=" + ByteUtil.byteArrToHex(bytes)); } - }); + });*/ } From 72dc6f27f197dce8a9c9e553c56d5dfca94ac71d Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 27 Feb 2023 11:41:44 +0800 Subject: [PATCH 04/15] =?UTF-8?q?[=E5=B7=A5=E6=8E=A7=E6=9C=BA=E7=9B=91?= =?UTF-8?q?=E6=8E=A7]=20=E6=B3=A8=E9=87=8A=E6=8E=89=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF=E6=9C=8D=E5=8A=A1=E5=92=8C=E4=B9=98=E5=AE=A2=E7=AB=AF?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/zhidao/adas/client/ui/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index 5a13b4a000..d48fec82ef 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -1588,7 +1588,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; case WHAT_DRIVER_IP: ipcIp.setVisibility(View.VISIBLE); - ipcIp.setText("司机IP:" + NSDNettyManager.getInstance().getConnServerIp()); +// ipcIp.setText("司机IP:" + NSDNettyManager.getInstance().getConnServerIp()); break; case WHAT_IPC_CONNECT_STATE: if (floatWindow != null) { From bfcc3fff30487b44eae6dae9e1671b5592f29c59 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 15:11:02 +0800 Subject: [PATCH 05/15] =?UTF-8?q?[M2]=20m2=20EB5=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/ui/PM2DrivingInfoFragment.kt | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/PM2DrivingInfoFragment.kt b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/PM2DrivingInfoFragment.kt index 1182752a5a..85b1cdd90f 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/PM2DrivingInfoFragment.kt +++ b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/ui/PM2DrivingInfoFragment.kt @@ -2,16 +2,13 @@ package com.mogo.och.bus.passenger.ui import android.graphics.BitmapFactory import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.os.Message import android.view.View import androidx.core.content.ContextCompat import com.amap.api.maps.model.LatLng import com.mogo.commons.mvp.MvpFragment -import com.mogo.eagle.core.data.msgbox.MsgBoxBean -import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.data.msgbox.NoticeFrCloudMsg -import com.mogo.eagle.core.data.msgbox.V2XMsg -import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData -import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.util.DateTimeUtils @@ -21,6 +18,7 @@ import com.mogo.och.bus.passenger.presenter.PM2DrivingPresenter import com.mogo.och.common.module.utils.DateTimeUtil.* import com.mogo.och.common.module.utils.NumberFormatUtil import kotlinx.android.synthetic.m2.p_m2_driving_info_fragment.* +import java.lang.ref.WeakReference import kotlin.math.ceil import kotlin.math.roundToInt @@ -30,6 +28,9 @@ import kotlin.math.roundToInt */ class PM2DrivingInfoFragment : MvpFragment() { + + private var timeHandler: TimeHandler? = null + /** * 改变自动驾驶状态 * @@ -71,6 +72,8 @@ class PM2DrivingInfoFragment : // BPRouteDataTestUtils.converToRouteData() } updateCurrentTime() + timeHandler = TimeHandler(this) + timeHandler?.sendEmptyMessageDelayed(WHAT_TIME_CURRENT, LOOP_TIME_TEXT) } override fun initViews(savedInstanceState: Bundle?) { @@ -89,6 +92,7 @@ class PM2DrivingInfoFragment : } override fun onDestroy() { + timeHandler?.removeCallbacksAndMessages(null) super.onDestroy() overMapView.onDestroy() } @@ -216,8 +220,27 @@ class PM2DrivingInfoFragment : "$remainDis$disUnit | $time 分钟".also { remain_mt.text = it } } - companion object { - private val TAG = PM2DrivingInfoFragment::class.java.simpleName + class TimeHandler(obj: PM2DrivingInfoFragment) : Handler(Looper.getMainLooper()) { + private val mRef: WeakReference = WeakReference(obj) + + val drivingInfoFragment = mRef.get() as PM2DrivingInfoFragment + override fun handleMessage(msg: Message) { + mRef.get()?.run { + when (msg.what) { + WHAT_TIME_CURRENT -> { + drivingInfoFragment.updateCurrentTime() + sendEmptyMessageDelayed( + WHAT_TIME_CURRENT, LOOP_TIME_TEXT) + } //可以直接访问Activity中的变量 + else -> {} + } + } + } } + companion object { + private val TAG = PM2DrivingInfoFragment::class.java.simpleName + const val LOOP_TIME_TEXT = 60 * 1000L + const val WHAT_TIME_CURRENT = 10001 //MSG_WHAT + } } \ No newline at end of file From 9777008d469f0826e3377549d7781e523951862a Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Mon, 27 Feb 2023 15:19:45 +0800 Subject: [PATCH 06/15] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=BF=85=E8=A6=81=E7=9A=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/biz/v2x/obu/V2xObuEventManager.kt | 4 ++++ .../datacenter/obu/MogoObuDcCombineManager.kt | 9 +++++++++ .../datacenter/obu/MogoPrivateObuNewManager.kt | 15 --------------- .../core/function/hmi/ui/MoGoHmiProvider.kt | 16 ++++++++++++++++ 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt index a1153493fe..130cf0ef7a 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt @@ -5,9 +5,12 @@ import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.V2XMsg +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.obu.IMoGoObuSaveMessageListener import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuSaveMessageListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant /** * 处理obu分发出来,在消息盒子展示的消息 @@ -48,6 +51,7 @@ object V2xObuEventManager : IMoGoObuSaveMessageListener { obuDataMap[type] = System.currentTimeMillis() } + CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "onMoGoObuSaveMessage type = $type ---content = $content ---tts = $tts ") CallerMsgBoxManager.saveMsgBox( MsgBoxBean( MsgBoxType.V2X, diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt index c752f5b45f..7f9651f0da 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt @@ -242,6 +242,9 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener when (status) { // 添加 MogoObuConstants.STATUS.ADD -> { + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } saveObuToDcData(appId, alertContent, ttsContent) showWarning(appId, alertContent, ttsContent, direction) } @@ -502,6 +505,9 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener "${M_OBU}${TAG}", "MogoObuDcCombineManager changeTrafficLightStatus 闯红灯 --------> ttsContent = $ttsContent ---alertContent = $alertContent " ) + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } saveObuToDcData(EventTypeEnumNew.TYPE_USECASE_ID_IVP_RED.poiType, alertContent, ttsContent) showWarning(EventTypeEnumNew.TYPE_USECASE_ID_IVP_RED.poiType, alertContent, ttsContent, WarningDirectionEnum.ALERT_WARNING_NON) } @@ -539,6 +545,9 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener ) val maxSpeed = currentLight.suggestMaxSpeed * 3.6 if (maxSpeed > 0) { + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } saveObuToDcData(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, alertContent, ttsContent) showWarning(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, alertContent, ttsContent, WarningDirectionEnum.ALERT_WARNING_NON) } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index 0c64d6a0b1..a4b0d19ddb 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -1037,8 +1037,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { ) } - private val ttsMap = mutableMapOf() - /** * 消息盒子对应消息的语音播报 */ @@ -1048,19 +1046,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { tts: String, direction: WarningDirectionEnum ) { - //30秒内同一个事件只出现一次 TODO 临时添加,后面宏宇统一在数据中心处理 - if (ttsMap.containsKey(type)) { - var oldTime = ttsMap[type] - var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 - if (timeDiff < 30) { - return - } - ttsMap.remove(type) - ttsMap[type] = System.currentTimeMillis() - } else { - ttsMap[type] = System.currentTimeMillis() - } - CallerHmiManager.warningV2X( type, content, diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index 406fdd97ee..735db45a88 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -39,6 +39,7 @@ import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView import com.mogo.eagle.core.utilcode.kotlin.safeCancel import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.zhjt.service_biz.BizConfig @@ -87,6 +88,8 @@ class MoGoHmiProvider : IMoGoHmiProvider { ) } + private val ttsMap = mutableMapOf() + /** * 不展示顶部弹窗,其它保留 */ @@ -99,6 +102,19 @@ class MoGoHmiProvider : IMoGoHmiProvider { direction: WarningDirectionEnum, expireTime: Long ) { + //30秒内同一个事件只出现一次 TODO 临时添加,后面宏宇统一在数据中心处理 + if (ttsMap.containsKey(v2xType)) { + var oldTime = ttsMap[v2xType] + var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 + if (timeDiff < 30) { + return + } + ttsMap.remove(v2xType) + ttsMap[v2xType] = System.currentTimeMillis() + } else { + ttsMap[v2xType] = System.currentTimeMillis() + } + CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "warningV2X v2xType = $v2xType ---alertContent = $alertContent ---ttsContent = $ttsContent ") val playTTS = !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) context?.let { val warningContent = alertContent ?: EventTypeEnumNew.getWarningContent(v2xType) From 123e490057e8843f5e3f7cb351f2235c7280bcbe Mon Sep 17 00:00:00 2001 From: yangyakun Date: Mon, 27 Feb 2023 15:25:34 +0800 Subject: [PATCH 07/15] =?UTF-8?q?[m2]=20[1.0.0]=20[=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E4=BF=AE=E6=94=B9]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/productFlavors/flavorsFilterConfig.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/productFlavors/flavorsFilterConfig.gradle b/app/productFlavors/flavorsFilterConfig.gradle index 92ab21d059..cc0e038aee 100644 --- a/app/productFlavors/flavorsFilterConfig.gradle +++ b/app/productFlavors/flavorsFilterConfig.gradle @@ -18,8 +18,8 @@ project.android.variantFilter { variant -> // region 过滤shuttle 的flavors if (names.contains("shuttle")) { //Gradle会忽略满足上述条件的所有变体 - if (names.contains("fOchBus")) { - } else if (names.contains("fOchBusPassenger")) { + if (names.contains("fOchShuttle")) { + } else if (names.contains("fOchShuttlePassenger")) { } else { setIgnore(true) } From 604b7e963204af82bb34359dc268d87667584507 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 27 Feb 2023 16:52:20 +0800 Subject: [PATCH 08/15] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9B=92=E5=AD=90=E8=BF=90=E8=90=A5=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=9D=A0=E8=BE=B9=E5=81=9C=E8=BD=A6=E5=92=8C?= =?UTF-8?q?=E8=BF=98=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/DriverMsgBoxBubbleAdapter.kt | 51 +++++++++++++- .../msgbox/adapter/DriverMsgBoxListAdapter.kt | 51 +++++++++++++- .../icon_msg_box_operation_return.png | Bin 0 -> 15347 bytes .../icon_msg_box_operation_stop.png | Bin 0 -> 16391 bytes .../layout/item_msg_box_operation_return.xml | 64 ++++++++++++++++++ .../layout/item_msg_box_operation_stop.xml | 54 +++++++++++++++ .../item_msg_bubble_operation_return.xml | 64 ++++++++++++++++++ .../layout/item_msg_bubble_operation_stop.xml | 52 ++++++++++++++ 8 files changed, 334 insertions(+), 2 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_return.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_stop.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt index 8592c0bcb3..948d93eaec 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt @@ -33,6 +33,8 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A private var data: ArrayList ?= null private val operation: Int = 1 + private val operationReturn: Int = 10 + private val operationStop: Int = 11 private val notice: Int = 2 private val v2x: Int = 3 private val report: Int = 4 @@ -55,6 +57,16 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_operation,parent,false) return BubbleOperationHolder(view) } + operationReturn -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_bubble_operation_return, parent, false) + return BubbleOperationReturnHolder(view) + } + operationStop -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_bubble_operation_stop, parent, false) + return BubbleOperationStopHolder(view) + } report -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_report,parent,false) return BubbleReportHolder(view) @@ -87,6 +99,23 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A } } } + //运营平台还车通知 + is BubbleOperationReturnHolder -> { + data?.let { + val operationReturnMsg = it[position].bean as OperationMsg + holder.tvOperationReturnContent.text = operationReturnMsg.content + holder.tvOperationReturnTime.text = + TimeUtils.millis2String(operationReturnMsg.timestamp, getHourMinFormat()) + } + } + //运营平台靠边停车 + is BubbleOperationStopHolder -> { + data?.let { + val operationStopMsg = it[position].bean as OperationMsg + holder.tvOperationStopTime.text = + TimeUtils.millis2String(operationStopMsg.timestamp, getHourMinFormat()) + } + } is BubbleReportHolder -> { data?.let { val msgBoxBean = it[position] @@ -187,7 +216,16 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A override fun getItemViewType(position: Int): Int { return if(data!![position].type == MsgBoxType.OPERATION){ - operation + if((data!![position].bean as OperationMsg).type == 0){ + //运营平台还车通知 + operationReturn + }else if((data!![position].bean as OperationMsg).type == 1){ + //运营平台靠边停车 + operationStop + }else{ + //普通运营平台 + operation + } }else if(data!![position].type == MsgBoxType.REPORT){ report }else if(data!![position].type == MsgBoxType.NOTICE){ @@ -214,6 +252,17 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var clBubbleOperationLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clBubbleOperationLayout) } + //运营平台还车通知 + class BubbleOperationReturnHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvOperationReturnTime: TextView = itemView.findViewById(R.id.tvOperationReturnTime) + var tvOperationReturnContent: TextView = itemView.findViewById(R.id.tvOperationReturnContent) + } + + //运营平台靠边停车通知 + class BubbleOperationStopHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvOperationStopTime: TextView = itemView.findViewById(R.id.tvOperationStopTime) + } + //Notice class BubbleNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){ var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index 95ea8caef9..b020fd0ee7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -35,6 +35,8 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : private var reportBean: MsgBoxBean ?= null private val operation: Int = 1 + private val operationReturn: Int = 10 + private val operationStop: Int = 11 private val notice: Int = 2 private val v2x: Int = 3 private val report: Int = 5 @@ -72,6 +74,16 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : .inflate(R.layout.item_msg_box_operation, parent, false) return MsgBoxOperation(view) } + operationReturn -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_operation_return, parent, false) + return MsgBoxOperationReturn(view) + } + operationStop -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_operation_stop, parent, false) + return MsgBoxOperationStop(view) + } notice -> { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_msg_box_notice, parent, false) @@ -244,6 +256,23 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : } } } + //运营平台还车通知 + is MsgBoxOperationReturn -> { + data?.let { + val operationReturnMsg = it[position].bean as OperationMsg + holder.tvOperationReturnContent.text = operationReturnMsg.content + holder.tvOperationReturnTime.text = + TimeUtils.millis2String(operationReturnMsg.timestamp, getHourMinFormat()) + } + } + //运营平台靠边停车 + is MsgBoxOperationStop -> { + data?.let { + val operationStopMsg = it[position].bean as OperationMsg + holder.tvOperationStopTime.text = + TimeUtils.millis2String(operationStopMsg.timestamp, getHourMinFormat()) + } + } is MsgBoxNotice -> { data?.let { val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg @@ -314,7 +343,16 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : override fun getItemViewType(position: Int): Int { return if (data!![position].type == MsgBoxType.OPERATION) { - operation + if((data!![position].bean as OperationMsg).type == 0){ + //运营平台还车通知 + operationReturn + }else if((data!![position].bean as OperationMsg).type == 1){ + //运营平台靠边停车 + operationStop + }else{ + //普通运营平台 + operation + } } else if (data!![position].type == MsgBoxType.NOTICE) { notice } else if (data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY) { @@ -365,6 +403,17 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : var tvOperationContentOpen: TextView = itemView.findViewById(R.id.tvOperationContentOpen) } + //运营平台还车通知 + class MsgBoxOperationReturn(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationReturnTime: TextView = itemView.findViewById(R.id.tvOperationReturnTime) + var tvOperationReturnContent: TextView = itemView.findViewById(R.id.tvOperationReturnContent) + } + + //运营平台靠边停车通知 + class MsgBoxOperationStop(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationStopTime: TextView = itemView.findViewById(R.id.tvOperationStopTime) + } + //Notice class MsgBoxNotice(itemView: View) : RecyclerView.ViewHolder(itemView) { var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_return.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_return.png new file mode 100644 index 0000000000000000000000000000000000000000..d1363d1a969248b3f1b78f11041797e4a84827bd GIT binary patch literal 15347 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ΠAcg(qw#n7k0|3ahS1Oq{? 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 R4NL$4002ovPDHLkV1jbBZ}R{E literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_stop.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba1c633ec0af4d0ede746def2f5dce659572f6f GIT binary patch literal 16391 zcmV+iK={9jP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91c%TCS1ONa40RR91cmMzZ00`n$?f?KkaY;l$RCod1y$Q5sS9#yL?|tu8 zX{gdrnkdZzDMAQ=FtH6LBEm_m#F$}WgfT|gP8?(7q`R{^Y17zkWIIk+D~_Gz<+X^t zFisd^7Q_oDalnRVo?@^X?8dZYBqSkKX{stDsw7pt;okoL{@?fQbMC8>(1=9#t8@0= z-|+vYz0W;&tV#Qypnc=z?SzfhcHzdnT{vm&!uh;ips;q#=acPiKHuIZZCjhQ?V@d) zPui-+`z3dvO(y##yT7%$j`sD*tX(&ov}>nJ?Yh&xuiZSkT9V)4O>ur_wfWU;dEYhd zZ*Hu&?^khNq~cwo{xqVP=uczSYu@Mx&hz3yg^{gz11-`qhcRh~CiC`HiGFrEZy#-2 zwteg=A3AVn>3*m5-w_4A^M~36O7=^Ybrp4fnRlkD;sQ|%MN!3y+En^o;?8r)EjXf6 z@B}D~;37RN7!W6u$(LpSqf3*e51;loF8$NV?_RT3mY%FVu{>WEl z)jn?_X^KlMP8#T>Rp} zwBTm?fMto4m;J-^!LuL2!G2HPyj>^ocdl$b_HCzq7tkE;N7Jc<#)WMQCFEUGO9bZE$Uob-~ZE5Wdk60_{2zCkwO z+Q*rQlXicbOy4%0%>K<8pKP~S_6a^cp#`4*bX&RWw)Q&Z;ElRpJ>NNWo}xBAnVBRP zR#~iK^xRqT2y_XAPDpOn_q+$8Jh#fChNeaVhJT|{$>&n)*oci%Y z*PHSLou04)?|s?QD`&Hff2+&!*%dnpqYb+#=A0v$Lk`E6$}W}qhZUiAp@B*|3e{Em z0DkUXjd~H&fx~ zU^95}JK|Bod(wtPSJHcOkjcVD5ThNuNgtifi>4Q@9H<>CT|?W@2oqp+>xwm=@;HMdgPLznUeBS#7LwX!vzCQrfLJi(aI6nPFGT9w zdg*q4%8m7pgln1*9zdUm4Lh)jUlF_Jj;npLt+XFK`!j8K@g9%~eVew#W;#ILCQ4c1Q*g%3oq+GfS(6}a=@2O71)g=7D4vmFI zv%ebqk_$}&rE3ApL0Qxf2Mk~yIMd1GuE~7oC`*V2x7~|gg()Jty|Do=X z&jY%4VTSDmj^V|`gcDAv88MHuq)DXcwLvyxmfU#3ls!D?^lmsYrDzh^DOY-BZ$V%3 zK_6oVR+kHBGQh-TN!Z4sz8;t7^Xc?opYvz4Uu3

SNUt+hf}HyuAG#J;uCW!RVcw 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 VRortXp)mje002ovPDHLkV1lwzbz}el literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml new file mode 100644 index 0000000000..dd210d1341 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml new file mode 100644 index 0000000000..bae20dc545 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml @@ -0,0 +1,54 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml new file mode 100644 index 0000000000..224dc865f1 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml new file mode 100644 index 0000000000..e6b647840f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml @@ -0,0 +1,52 @@ + + + + + + + + + + \ No newline at end of file From c6f0ecc04a739b2478df6918e2a158b80c5d61b3 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 27 Feb 2023 17:27:52 +0800 Subject: [PATCH 09/15] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0]=E5=BD=95?= =?UTF-8?q?=E5=8C=85=E7=AE=A1=E7=90=86=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevaToolsProvider.kt | 4 ++++ .../badcase/BadCaseManager.kt | 16 ++++++++++++++++ .../core/function/hmi/ui/setting/ToolsView.kt | 3 ++- .../function/api/devatools/IDevaToolsProvider.kt | 5 +++++ .../call/devatools/CallerDevaToolsManager.kt | 7 +++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index c3dfb3780d..dfdec5e541 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -158,6 +158,10 @@ class DevaToolsProvider : IDevaToolsProvider { BadCaseManager.showBadCaseConfigWindow(ctx) } + override fun showBadCaseManagerView(context: Context) { + BadCaseManager.showBadCaseManagerWindow(context) + } + override fun downLoadPackage(downloadKey: String, downloadUrl: String) { upgradeManager.downLoadPackage(mContext!!, downloadKey, downloadUrl) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index 62501383b7..54de5f1730 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -101,6 +101,22 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis } } + /** + * 展示BadCase录包管理页面 + */ + fun showBadCaseManagerWindow(context: Context){ + val badCaseManagerView = BadCaseManagerView(context) + badCaseManagerView.setOnClickListener(object: BadCaseManagerView.ClickListener{ + override fun onClose() { + hideFloat?.invoke() + hideFloat = null + } + }) + context.enqueuePop(badCaseManagerView,AutoSizeUtils.dp2px(context,960f), WindowManager.LayoutParams.MATCH_PARENT, key = "BadCaseManagerView").also { + hideFloat = it + } + } + /** * 主动采集BadCase */ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt index a81a76c890..a765f0434a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt @@ -55,7 +55,8 @@ class ToolsView private constructor() { } override fun showBadCaseManagerView() { - ToastUtils.showShort("代码合并中") + dismissToolsFloatView() + CallerDevaToolsManager.showBadCaseManagerView(it) } }) } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index 5f7cca0772..0de776cdd9 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -105,6 +105,11 @@ interface IDevaToolsProvider : IProvider { */ fun showFeedbackWindow(ctx: Context) + /** + * 展示录包管理页面 + */ + fun showBadCaseManagerView(context: Context) + /** * 下载指定包 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index 6c9cab0897..91f1d0e9e8 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -141,6 +141,13 @@ object CallerDevaToolsManager { devaToolsProviderApi?.showFeedbackWindow(ctx) } + /** + * 展示录包管理页面 + */ + fun showBadCaseManagerView(context: Context){ + devaToolsProviderApi?.showBadCaseManagerView(context) + } + /** * 下载指定包 */ From ec1a00b0b6fd80882796481a937153026a5e0eb1 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 27 Feb 2023 17:40:22 +0800 Subject: [PATCH 10/15] =?UTF-8?q?[m1][mogo-adas]=20=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=87=AA=E5=8A=A8=E9=A9=BE=E9=A9=B6=E6=A1=A3?= =?UTF-8?q?=E4=BD=8D=E5=8F=82=E6=95=B0=E4=BF=AE=E6=94=B9=E6=88=90BuildConf?= =?UTF-8?q?ig=E5=8F=AF=E9=85=8D=E7=BD=AE=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/README.md | 12 + app/productFlavors/fMultiDisplayOchBus.gradle | 3 + .../fMultiDisplayOchTaxi.gradle | 3 + app/productFlavors/fOchBus.gradle | 3 + app/productFlavors/fOchBusPassenger.gradle | 3 + app/productFlavors/fOchBusPassengerM1.gradle | 3 + app/productFlavors/fOchBusPassengerM2.gradle | 3 + app/productFlavors/fOchShuttle.gradle | 3 + .../fOchShuttlePassenger.gradle | 3 + app/productFlavors/fOchSweeper.gradle | 3 + app/productFlavors/fOchTaxi.gradle | 3 + app/productFlavors/fOchTaxiPassenger.gradle | 3 + app/productFlavors/fPadLenovo.gradle | 3 + .../mogo/launcher/startup/ConfigStartUp.kt | 2 + app_ipc_monitoring/build.gradle | 6 + .../main/java/com/zhidao/adas/client/App.java | 5 + .../zhidao/adas/client/DataDistribution.java | 454 +++++++++--------- .../adas/client/bean/ArrivalNotification.java | 23 - .../adas/client/bean/AutopilotState.java | 24 - .../adas/client/bean/BagManagerCmd.java | 24 - .../zhidao/adas/client/bean/BasicInfoReq.java | 23 - .../adas/client/bean/CarConfigResp.java | 23 - .../adas/client/bean/ChassisStates.java | 24 - .../adas/client/bean/FSMFunctionStates.java | 24 - .../adas/client/bean/GlobalPathResp.java | 23 - .../com/zhidao/adas/client/bean/GnssInfo.java | 24 - .../adas/client/bean/MogoReportMessage.java | 25 - .../com/zhidao/adas/client/bean/ObuMap.java | 3 +- .../com/zhidao/adas/client/bean/ObuRsi.java | 3 +- .../com/zhidao/adas/client/bean/ObuRsm.java | 3 +- .../com/zhidao/adas/client/bean/ObuSpat.java | 3 +- .../adas/client/bean/ObuWarningData.java | 24 - .../client/bean/PerceptionTrafficLight.java | 3 +- .../client/bean/PlanningDecisionState.java | 23 - .../adas/client/bean/PlanningObjects.java | 23 - .../bean/PredictionObstacleTrajectory.java | 24 - .../zhidao/adas/client/bean/ReceiveData.java | 25 + .../adas/client/bean/RecordDataConfig.java | 22 - .../zhidao/adas/client/bean/RecordPanel.java | 24 - .../client/bean/RoboSweeperTaskIndex.java | 24 - .../zhidao/adas/client/bean/StatusInfo.java | 24 - .../adas/client/bean/TrackedObjects.java | 21 - .../zhidao/adas/client/bean/Trajectory.java | 21 - .../zhidao/adas/client/bean/VehicleState.java | 22 - .../com/zhidao/adas/client/bean/Warn.java | 21 - .../zhidao/adas/client/ui/MainActivity.java | 81 ++-- .../adas/client/ui/VersionFragment.java | 94 +++- .../src/main/res/values/colors.xml | 4 +- .../autopilot/MoGoAutopilotControlProvider.kt | 6 +- .../core/data/config/FunctionBuildConfig.kt | 7 + .../zhidao/support/adas/high/AdasOptions.java | 17 +- .../ability/AutopilotAbility230.java | 44 +- .../ability/AutopilotAbility250.java | 40 +- .../ability/AutopilotAbilityManager.java | 81 +--- 54 files changed, 470 insertions(+), 969 deletions(-) delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java diff --git a/app/README.md b/app/README.md index a74139426c..71338949e3 100644 --- a/app/README.md +++ b/app/README.md @@ -38,3 +38,15 @@ 3. demo: 演示环境(大部分时候都是测试环境) ## 区分 flavor 功能引入 + + + +## 不能启动自动驾驶的档位 +| 车型 | 配置所在文件 | 档位 | 配置 | +|:-|:-|:-|:-| +| 东风、红旗 | fOchTaxi.gradle、fOchTaxiPassenger.gradle | P、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' | +| 金旅小巴 | fOchBus.gradle、fOchBusPassenger.gradle、fOchShuttle.gradle、fOchShuttlePassenger.gradle | N、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' | +| M1 | fOchBusPassengerM1.gradle | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' | +| M2 | fOchBusPassengerM2.gradle | N、P、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' | +| 清扫车 | fOchSweeper.gradle | N | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);}}' | +| 开沃 | 暂无 | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' | diff --git a/app/productFlavors/fMultiDisplayOchBus.gradle b/app/productFlavors/fMultiDisplayOchBus.gradle index 13e4c0f623..6705e54bc7 100644 --- a/app/productFlavors/fMultiDisplayOchBus.gradle +++ b/app/productFlavors/fMultiDisplayOchBus.gradle @@ -45,6 +45,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/productFlavors/fMultiDisplayOchTaxi.gradle b/app/productFlavors/fMultiDisplayOchTaxi.gradle index e129159f91..2e9691dca8 100644 --- a/app/productFlavors/fMultiDisplayOchTaxi.gradle +++ b/app/productFlavors/fMultiDisplayOchTaxi.gradle @@ -48,6 +48,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/productFlavors/fOchBus.gradle b/app/productFlavors/fOchBus.gradle index 143630b32a..f96331027e 100644 --- a/app/productFlavors/fOchBus.gradle +++ b/app/productFlavors/fOchBus.gradle @@ -48,5 +48,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Bus不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchBusPassenger.gradle b/app/productFlavors/fOchBusPassenger.gradle index 4828eb2d69..962f544f6e 100644 --- a/app/productFlavors/fOchBusPassenger.gradle +++ b/app/productFlavors/fOchBusPassenger.gradle @@ -44,5 +44,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Bus不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchBusPassengerM1.gradle b/app/productFlavors/fOchBusPassengerM1.gradle index 207c5b2b13..401cc27191 100644 --- a/app/productFlavors/fOchBusPassengerM1.gradle +++ b/app/productFlavors/fOchBusPassengerM1.gradle @@ -48,5 +48,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //M1不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/productFlavors/fOchBusPassengerM2.gradle b/app/productFlavors/fOchBusPassengerM2.gradle index b4361568b3..d99a8b239c 100644 --- a/app/productFlavors/fOchBusPassengerM2.gradle +++ b/app/productFlavors/fOchBusPassengerM2.gradle @@ -45,5 +45,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //M2不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchShuttle.gradle b/app/productFlavors/fOchShuttle.gradle index fe33f7e370..c359ba42a1 100644 --- a/app/productFlavors/fOchShuttle.gradle +++ b/app/productFlavors/fOchShuttle.gradle @@ -46,5 +46,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Bus不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchShuttlePassenger.gradle b/app/productFlavors/fOchShuttlePassenger.gradle index 53397c6211..3b8169805f 100644 --- a/app/productFlavors/fOchShuttlePassenger.gradle +++ b/app/productFlavors/fOchShuttlePassenger.gradle @@ -41,5 +41,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Bus不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchSweeper.gradle b/app/productFlavors/fOchSweeper.gradle index a4ca130d10..730ae5e818 100644 --- a/app/productFlavors/fOchSweeper.gradle +++ b/app/productFlavors/fOchSweeper.gradle @@ -49,5 +49,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //清扫车不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchTaxi.gradle b/app/productFlavors/fOchTaxi.gradle index 5cc815d2dd..424280b7f3 100644 --- a/app/productFlavors/fOchTaxi.gradle +++ b/app/productFlavors/fOchTaxi.gradle @@ -49,6 +49,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Taxi不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fOchTaxiPassenger.gradle b/app/productFlavors/fOchTaxiPassenger.gradle index f659f9c8be..a762c8f8c8 100644 --- a/app/productFlavors/fOchTaxiPassenger.gradle +++ b/app/productFlavors/fOchTaxiPassenger.gradle @@ -48,6 +48,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //Taxi不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovo.gradle b/app/productFlavors/fPadLenovo.gradle index b41beb967b..f9cbdfbc63 100644 --- a/app/productFlavors/fPadLenovo.gradle +++ b/app/productFlavors/fPadLenovo.gradle @@ -45,5 +45,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt index 7b7e2516e4..d952367b9b 100644 --- a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt @@ -39,6 +39,8 @@ object ConfigStartUp { FunctionBuildConfig.appIdentityMode = BuildConfig.APP_IDENTITY_MODE // 各个module需要的url FunctionBuildConfig.urlJson = GsonUtils.fromJson(BuildConfig.URLs, UrlConfig::class.java) + //不能启动自动驾驶的档位 + FunctionBuildConfig.unableLaunchAutopilotGear = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR // // 这里影响当前Activity的身份信息,多进程先保持与原来一样,主进程为司机端,:passenger 进程为乘客端 TODO 暂时不启用,仅做洱海交付,独立乘客屏+宣传视频 // if (ProcessUtils.getCurrentProcessName().contains(":passenger")) { diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle index 10b72a52ca..338e981ac3 100644 --- a/app_ipc_monitoring/build.gradle +++ b/app_ipc_monitoring/build.gradle @@ -64,6 +64,12 @@ android { driver { dimension "multi_device" buildConfigField 'boolean', 'IS_CLIENT', 'false' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_M1', 'null' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_M2', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_SWEEPER', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_VAN', 'null' } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java index e89e78ab58..f0bd8f52ca 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java @@ -4,8 +4,13 @@ import android.app.Application; import com.zhidao.adas.client.utils.CrashHandler; +import chassis.Chassis; + public class App extends Application { public static App INSTANCE; + + public Chassis.GearPosition gear; + @Override public void onCreate() { super.onCreate(); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java index fd80d8d570..851fe8b076 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java @@ -2,36 +2,15 @@ package com.zhidao.adas.client; import android.util.Pair; -import com.zhidao.adas.client.bean.ArrivalNotification; -import com.zhidao.adas.client.bean.AutopilotState; -import com.zhidao.adas.client.bean.BagManagerCmd; import com.zhidao.adas.client.bean.BaseInfo; -import com.zhidao.adas.client.bean.BasicInfoReq; -import com.zhidao.adas.client.bean.CarConfigResp; -import com.zhidao.adas.client.bean.ChassisStates; import com.zhidao.adas.client.bean.DataShow; import com.zhidao.adas.client.bean.ErrorData; -import com.zhidao.adas.client.bean.FSMFunctionStates; -import com.zhidao.adas.client.bean.GlobalPathResp; -import com.zhidao.adas.client.bean.GnssInfo; -import com.zhidao.adas.client.bean.MogoReportMessage; import com.zhidao.adas.client.bean.ObuMap; import com.zhidao.adas.client.bean.ObuRsi; import com.zhidao.adas.client.bean.ObuRsm; import com.zhidao.adas.client.bean.ObuSpat; import com.zhidao.adas.client.bean.OriginalPointCloudData; import com.zhidao.adas.client.bean.PerceptionTrafficLight; -import com.zhidao.adas.client.bean.PlanningDecisionState; -import com.zhidao.adas.client.bean.PlanningObjects; -import com.zhidao.adas.client.bean.PredictionObstacleTrajectory; -import com.zhidao.adas.client.bean.RecordDataConfig; -import com.zhidao.adas.client.bean.RecordPanel; -import com.zhidao.adas.client.bean.RoboSweeperTaskIndex; -import com.zhidao.adas.client.bean.StatusInfo; -import com.zhidao.adas.client.bean.TrackedObjects; -import com.zhidao.adas.client.bean.Trajectory; -import com.zhidao.adas.client.bean.VehicleState; -import com.zhidao.adas.client.bean.Warn; import com.zhidao.adas.client.log.LogSave; import com.zhidao.adas.client.utils.Constants; import com.zhidao.support.adas.high.common.ThreadPoolManager; @@ -44,6 +23,8 @@ import java.util.Locale; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; +import mogo.telematics.pad.MessagePad; + /** * 数据分发 */ @@ -193,8 +174,8 @@ public class DataDistribution { } public String cutDown(String str) { - if (isCutDown && str.length() > 650) { - str = str.substring(0, 650) + "\n(已缩短。如需查看完整数据,请勾选日志缩短复选框)"; + if (isCutDown && str.length() > 850) { + str = str.substring(0, 850) + "\n(已缩短。如需查看完整数据,请勾选日志缩短复选框)"; } return str; } @@ -202,219 +183,222 @@ public class DataDistribution { private String onTransmit(String time, BaseInfo data) { String temp = data.toString(); String str = cutDown(temp); - if (data instanceof Trajectory) { - listTrajectory.add(0, new DataShow(listTrajectorySize++, time + str)); - if (listTrajectory.size() > LIST_SIZE) { - listTrajectory.remove(listTrajectory.size() - 1); + if (data.header == null) { + if (data instanceof ErrorData) { + listErrorData.add(0, new DataShow(listErrorDataSize++, time + str)); + if (listErrorData.size() > 100) { + listErrorData.remove(listErrorData.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_ERROR.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof OriginalPointCloudData) { + listOriginalPointCloud.add(0, new DataShow(listOriginalPointCloudSize++, time + str)); + if (listOriginalPointCloud.size() > LIST_SIZE) { + listOriginalPointCloud.remove(listOriginalPointCloud.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_POINT_CLOUD_ORIGINAL.equals(listener.first)) { + listener.second.onRefresh(); + } } - if (listener != null && Constants.TITLE.RECEIVE_TRAJECTORY.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof TrackedObjects) { - listTrackedObjects.add(0, new DataShow(listTrackedObjectsSize++, time + str)); - if (listTrackedObjects.size() > LIST_SIZE) { - listTrackedObjects.remove(listTrackedObjects.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_TRACKED_OBJECTS.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof OriginalPointCloudData) { - listOriginalPointCloud.add(0, new DataShow(listOriginalPointCloudSize++, time + str)); - if (listOriginalPointCloud.size() > LIST_SIZE) { - listOriginalPointCloud.remove(listOriginalPointCloud.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_POINT_CLOUD_ORIGINAL.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof PlanningObjects) { - listPlanningObjects.add(0, new DataShow(listPlanningObjectsSize++, time + str)); - if (listPlanningObjects.size() > LIST_SIZE) { - listPlanningObjects.remove(listPlanningObjects.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_PLANNING_OBJECTS.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof PlanningDecisionState) { - listPlanningDecisionState.add(0, new DataShow(listPlanningDecisionStateSize++, time + str)); - if (listPlanningDecisionState.size() > LIST_SIZE) { - listPlanningDecisionState.remove(listPlanningDecisionState.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_PLANNING_DECISION_STATE.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ObuSpat) { - listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str)); - if (listObuSpat.size() > LIST_SIZE) { - listObuSpat.remove(listObuSpat.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_OBU_SPAT.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ObuRsi) { - listObuRsi.add(0, new DataShow(listObuRsiSize++, time + str)); - if (listObuRsi.size() > LIST_SIZE) { - listObuRsi.remove(listObuRsi.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_OBU_RSI.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ObuRsm) { - listObuRsm.add(0, new DataShow(listObuRsmSize++, time + str)); - if (listObuRsm.size() > LIST_SIZE) { - listObuRsm.remove(listObuRsm.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_OBU_RSM.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ObuMap) { - listObuMap.add(0, new DataShow(listObuMapSize++, time + str)); - if (listObuMap.size() > LIST_SIZE) { - listObuMap.remove(listObuMap.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_OBU_MAP.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof GnssInfo) { - listGnssInfo.add(0, new DataShow(listGnssInfoSize++, time + str)); - if (listGnssInfo.size() > LIST_SIZE) { - listGnssInfo.remove(listGnssInfo.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_GNSS_INFO.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof VehicleState) { - listVehicleState.add(0, new DataShow(listVehicleStateSize++, time + str)); - if (listVehicleState.size() > LIST_SIZE) { - listVehicleState.remove(listVehicleState.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_VEHICLE_STATE.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ChassisStates) { - listChassisStates.add(0, new DataShow(listChassisStatesSize++, time + str)); - if (listChassisStates.size() > LIST_SIZE) { - listChassisStates.remove(listChassisStates.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_CHASSIS_STATES.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof AutopilotState) { - listAutopilotState.add(0, new DataShow(listAutopilotStateSize++, time + str)); - if (listAutopilotState.size() > LIST_SIZE) { - listAutopilotState.remove(listAutopilotState.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_AUTOPILOT_STATE.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof MogoReportMessage) { - listMogoReportMessage.add(0, new DataShow(listMogoReportMessageSize++, time + str)); - if (listMogoReportMessage.size() > LIST_SIZE) { - listMogoReportMessage.remove(listMogoReportMessage.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_REPORT_MESSAGE.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof PerceptionTrafficLight) { - listPerceptionTrafficLight.add(0, new DataShow(listPerceptionTrafficLightSize++, time + str)); - if (listPerceptionTrafficLight.size() > LIST_SIZE) { - listPerceptionTrafficLight.remove(listPerceptionTrafficLight.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT.equals(listener.first)) { - listener.second.onPerceptionTrafficLight((PerceptionTrafficLight) data); - } - } else if (data instanceof PredictionObstacleTrajectory) { - listPredictionObstacleTrajectory.add(0, new DataShow(listPredictionObstacleTrajectorySize++, time + str)); - if (listPredictionObstacleTrajectory.size() > LIST_SIZE) { - listPredictionObstacleTrajectory.remove(listPredictionObstacleTrajectory.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof BasicInfoReq) { - - } else if (data instanceof CarConfigResp) { - if (listener != null && Constants.TITLE.TITLE_CAR_CONFIG_RESP.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof RecordPanel) { - listRecordPanel.add(0, new DataShow(listRecordPanelSize++, time + str)); - if (listRecordPanel.size() > LIST_SIZE) { - listRecordPanel.remove(listRecordPanel.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_RECORD_RESULT.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof BagManagerCmd) { - listBagManagerCmd.add(0, new DataShow(listBagManagerCmdSize++, time + str)); - if (listBagManagerCmd.size() > LIST_SIZE) { - listBagManagerCmd.remove(listBagManagerCmd.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_BAG_MANAGER_CMD.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof GlobalPathResp) { - listGlobalPathResp.add(0, new DataShow(listGlobalPathRespSize++, time + str)); - if (listGlobalPathResp.size() > LIST_SIZE) { - listGlobalPathResp.remove(listGlobalPathResp.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof Warn) { - listWarn.add(0, new DataShow(listWarnSize++, time + str)); - if (listWarn.size() > LIST_SIZE) { - listWarn.remove(listWarn.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_WARN.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ArrivalNotification) { - listArrivalNotification.add(0, new DataShow(listArrivalNotificationSize++, time + str)); - if (listArrivalNotification.size() > LIST_SIZE) { - listArrivalNotification.remove(listArrivalNotification.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof StatusInfo) { - listStatusInfo.add(0, new DataShow(listStatusInfoSize++, time + str)); - if (listStatusInfo.size() > LIST_SIZE) { - listStatusInfo.remove(listStatusInfo.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_STATUS_QUERY_RESP.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof RecordDataConfig) { - listRecordDataConfig.add(0, new DataShow(listRecordDataConfigSize++, time + str)); - if (listRecordDataConfig.size() > LIST_SIZE) { - listRecordDataConfig.remove(listRecordDataConfig.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof RoboSweeperTaskIndex) { - listRoboSweeperTaskIndex.add(0, new DataShow(listRoboSweeperTaskIndexSize++, time + str)); - if (listRoboSweeperTaskIndex.size() > LIST_SIZE) { - listRoboSweeperTaskIndex.remove(listRoboSweeperTaskIndex.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof FSMFunctionStates) { - listFSMFunctionStates.add(0, new DataShow(listFSMFunctionStatesSize++, time + str)); - if (listFSMFunctionStates.size() > LIST_SIZE) { - listFSMFunctionStates.remove(listFSMFunctionStates.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_FUNCTION_STATES.equals(listener.first)) { - listener.second.onRefresh(); - } - } else if (data instanceof ErrorData) { - listErrorData.add(0, new DataShow(listErrorDataSize++, time + str)); - if (listErrorData.size() > 100) { - listErrorData.remove(listErrorData.size() - 1); - } - if (listener != null && Constants.TITLE.RECEIVE_ERROR.equals(listener.first)) { - listener.second.onRefresh(); + } else { + MessagePad.MessageType messageType = data.header.getMsgType(); + if (messageType == MessagePad.MessageType.MsgTypeTrajectory) { + listTrajectory.add(0, new DataShow(listTrajectorySize++, time + str)); + if (listTrajectory.size() > LIST_SIZE) { + listTrajectory.remove(listTrajectory.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_TRAJECTORY.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeTrackedObjects) { + listTrackedObjects.add(0, new DataShow(listTrackedObjectsSize++, time + str)); + if (listTrackedObjects.size() > LIST_SIZE) { + listTrackedObjects.remove(listTrackedObjects.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_TRACKED_OBJECTS.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypePlanningObjects) { + listPlanningObjects.add(0, new DataShow(listPlanningObjectsSize++, time + str)); + if (listPlanningObjects.size() > LIST_SIZE) { + listPlanningObjects.remove(listPlanningObjects.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PLANNING_OBJECTS.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypePlanningDecisionState) { + listPlanningDecisionState.add(0, new DataShow(listPlanningDecisionStateSize++, time + str)); + if (listPlanningDecisionState.size() > LIST_SIZE) { + listPlanningDecisionState.remove(listPlanningDecisionState.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PLANNING_DECISION_STATE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeGnssInfo) { + listGnssInfo.add(0, new DataShow(listGnssInfoSize++, time + str)); + if (listGnssInfo.size() > LIST_SIZE) { + listGnssInfo.remove(listGnssInfo.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_GNSS_INFO.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeVehicleState) { + listVehicleState.add(0, new DataShow(listVehicleStateSize++, time + str)); + if (listVehicleState.size() > LIST_SIZE) { + listVehicleState.remove(listVehicleState.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_VEHICLE_STATE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeChassisStates) { + listChassisStates.add(0, new DataShow(listChassisStatesSize++, time + str)); + if (listChassisStates.size() > LIST_SIZE) { + listChassisStates.remove(listChassisStates.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_CHASSIS_STATES.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeAutopilotState) { + listAutopilotState.add(0, new DataShow(listAutopilotStateSize++, time + str)); + if (listAutopilotState.size() > LIST_SIZE) { + listAutopilotState.remove(listAutopilotState.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_AUTOPILOT_STATE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeReportMessage) { + listMogoReportMessage.add(0, new DataShow(listMogoReportMessageSize++, time + str)); + if (listMogoReportMessage.size() > LIST_SIZE) { + listMogoReportMessage.remove(listMogoReportMessage.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_REPORT_MESSAGE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypePredictionObstacleTrajectory) { + listPredictionObstacleTrajectory.add(0, new DataShow(listPredictionObstacleTrajectorySize++, time + str)); + if (listPredictionObstacleTrajectory.size() > LIST_SIZE) { + listPredictionObstacleTrajectory.remove(listPredictionObstacleTrajectory.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeCarConfigResp) { + if (listener != null && Constants.TITLE.TITLE_CAR_CONFIG_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeRecordResult) { + listRecordPanel.add(0, new DataShow(listRecordPanelSize++, time + str)); + if (listRecordPanel.size() > LIST_SIZE) { + listRecordPanel.remove(listRecordPanel.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_RECORD_RESULT.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeBagManagerCmd) { + listBagManagerCmd.add(0, new DataShow(listBagManagerCmdSize++, time + str)); + if (listBagManagerCmd.size() > LIST_SIZE) { + listBagManagerCmd.remove(listBagManagerCmd.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_BAG_MANAGER_CMD.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeGlobalPathResp) { + listGlobalPathResp.add(0, new DataShow(listGlobalPathRespSize++, time + str)); + if (listGlobalPathResp.size() > LIST_SIZE) { + listGlobalPathResp.remove(listGlobalPathResp.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeWarn) { + listWarn.add(0, new DataShow(listWarnSize++, time + str)); + if (listWarn.size() > LIST_SIZE) { + listWarn.remove(listWarn.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_WARN.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeArrivalNotification) { + listArrivalNotification.add(0, new DataShow(listArrivalNotificationSize++, time + str)); + if (listArrivalNotification.size() > LIST_SIZE) { + listArrivalNotification.remove(listArrivalNotification.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeStatusQueryResp) { + listStatusInfo.add(0, new DataShow(listStatusInfoSize++, time + str)); + if (listStatusInfo.size() > LIST_SIZE) { + listStatusInfo.remove(listStatusInfo.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_STATUS_QUERY_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeRecordDataConfigResp) { + listRecordDataConfig.add(0, new DataShow(listRecordDataConfigSize++, time + str)); + if (listRecordDataConfig.size() > LIST_SIZE) { + listRecordDataConfig.remove(listRecordDataConfig.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeSweeperTaskIndexData) { + listRoboSweeperTaskIndex.add(0, new DataShow(listRoboSweeperTaskIndexSize++, time + str)); + if (listRoboSweeperTaskIndex.size() > LIST_SIZE) { + listRoboSweeperTaskIndex.remove(listRoboSweeperTaskIndex.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeFunctionStates) { + listFSMFunctionStates.add(0, new DataShow(listFSMFunctionStatesSize++, time + str)); + if (listFSMFunctionStates.size() > LIST_SIZE) { + listFSMFunctionStates.remove(listFSMFunctionStates.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_FUNCTION_STATES.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof PerceptionTrafficLight) { + listPerceptionTrafficLight.add(0, new DataShow(listPerceptionTrafficLightSize++, time + str)); + if (listPerceptionTrafficLight.size() > LIST_SIZE) { + listPerceptionTrafficLight.remove(listPerceptionTrafficLight.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT.equals(listener.first)) { + listener.second.onPerceptionTrafficLight((PerceptionTrafficLight) data); + } + } else if (data instanceof ObuSpat) { + listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str)); + if (listObuSpat.size() > LIST_SIZE) { + listObuSpat.remove(listObuSpat.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_SPAT.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuRsi) { + listObuRsi.add(0, new DataShow(listObuRsiSize++, time + str)); + if (listObuRsi.size() > LIST_SIZE) { + listObuRsi.remove(listObuRsi.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_RSI.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuRsm) { + listObuRsm.add(0, new DataShow(listObuRsmSize++, time + str)); + if (listObuRsm.size() > LIST_SIZE) { + listObuRsm.remove(listObuRsm.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_RSM.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuMap) { + listObuMap.add(0, new DataShow(listObuMapSize++, time + str)); + if (listObuMap.size() > LIST_SIZE) { + listObuMap.remove(listObuMap.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_MAP.equals(listener.first)) { + listener.second.onRefresh(); + } } } return temp; diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java deleted file mode 100644 index 9c5904dc23..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class ArrivalNotification extends BaseInfo { - public final MessagePad.ArrivalNotification bean; - - public ArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java deleted file mode 100644 index e3a2c31b98..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class AutopilotState extends BaseInfo { - public final MessagePad.AutopilotState bean; - - public AutopilotState(MessagePad.Header header, MessagePad.AutopilotState bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java deleted file mode 100644 index db1dd0f4ab..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import bag_manager.BagManagerOuterClass; -import mogo.telematics.pad.MessagePad; - -public class BagManagerCmd extends BaseInfo { - public final BagManagerOuterClass.BagManager bean; - - public BagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java deleted file mode 100644 index bce516eee2..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class BasicInfoReq extends BaseInfo { - public final MessagePad.BasicInfoReq bean; - - public BasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java deleted file mode 100644 index c8b3b390f3..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class CarConfigResp extends BaseInfo { - public final MessagePad.CarConfigResp bean; - - public CarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java deleted file mode 100644 index f18d4564a5..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import chassis.ChassisStatesOuterClass; -import mogo.telematics.pad.MessagePad; - -public class ChassisStates extends BaseInfo { - public final ChassisStatesOuterClass.ChassisStates bean; - - public ChassisStates(MessagePad.Header header, ChassisStatesOuterClass.ChassisStates bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java deleted file mode 100644 index 1d672127ae..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import function_state_management.FunctionStates; -import mogo.telematics.pad.MessagePad; - -public class FSMFunctionStates extends BaseInfo { - public final FunctionStates.FSMFunctionStates bean; - - public FSMFunctionStates(MessagePad.Header header, FunctionStates.FSMFunctionStates bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java deleted file mode 100644 index bd5be112a6..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class GlobalPathResp extends BaseInfo { - public final MessagePad.GlobalPathResp bean; - - public GlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java deleted file mode 100644 index 1ebd36a34f..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class GnssInfo extends BaseInfo { - public final MessagePad.GnssInfo bean; - - public GnssInfo(MessagePad.Header header, MessagePad.GnssInfo bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java deleted file mode 100644 index ec25240c06..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import mogo_msg.MogoReportMsg; - -public class MogoReportMessage extends BaseInfo { - public final MogoReportMsg.MogoReportMessage bean; - - public MogoReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java index 88c93caf6e..51a2c8c4ed 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuMap extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java index d433245ebe..8cd054f956 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuRsi extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java index 6045845ae4..badbf1745b 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuRsm extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java index bb4707903e..3ba064f0e6 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuSpat extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java deleted file mode 100644 index 7ea1bca9af..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import mogo.v2x.ObuWarningEvent; - -public class ObuWarningData extends BaseInfo { - public final ObuWarningEvent.ObuWarningData bean; - - public ObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java index 585a18d0a6..246de432ce 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java @@ -1,6 +1,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class PerceptionTrafficLight extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java deleted file mode 100644 index c443774c36..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class PlanningDecisionState extends BaseInfo { - public final MessagePad.PlanningActionMsg bean; - - public PlanningDecisionState(MessagePad.Header header, MessagePad.PlanningActionMsg bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java deleted file mode 100644 index 68c1947de2..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class PlanningObjects extends BaseInfo { - public final MessagePad.PlanningObjects bean; - - public PlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java deleted file mode 100644 index b6b070e110..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import prediction.Prediction; - -public class PredictionObstacleTrajectory extends BaseInfo { - public final Prediction.mPredictionObjects bean; - - public PredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java new file mode 100644 index 0000000000..0d8be2857d --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java @@ -0,0 +1,25 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.GeneratedMessageV3; +import com.google.protobuf.TextFormat; +import com.zhidao.support.adas.high.common.ByteUtil; + +import java.text.SimpleDateFormat; + +import mogo.telematics.pad.MessagePad; + +public class ReceiveData extends BaseInfo { + public final GeneratedMessageV3 bean; + + public ReceiveData(MessagePad.Header header, GeneratedMessageV3 bean, SimpleDateFormat sdf) { + super("接收", bean.getSerializedSize(), header, sdf); + this.bean = bean; + } + + + @Override + public String toString() { + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java deleted file mode 100644 index 1dd5785507..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class RecordDataConfig extends BaseInfo { - public final MessagePad.RecordDataConfig bean; - - public RecordDataConfig(MessagePad.Header header, MessagePad.RecordDataConfig bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java deleted file mode 100644 index a5d8cd7964..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import record_cache.RecordPanelOuterClass; - -public class RecordPanel extends BaseInfo { - public final RecordPanelOuterClass.RecordPanel bean; - - public RecordPanel(MessagePad.Header header, RecordPanelOuterClass.RecordPanel bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java deleted file mode 100644 index 86eaedbb6c..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import planning.RoboSweeperTaskIndexOuterClass; - -public class RoboSweeperTaskIndex extends BaseInfo { - public final RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex bean; - - public RoboSweeperTaskIndex(MessagePad.Header header, RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java deleted file mode 100644 index 72a96e6b7a..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import system_master.SystemStatusInfo; - -public class StatusInfo extends BaseInfo { - public final SystemStatusInfo.StatusInfo bean; - - public StatusInfo(MessagePad.Header header, SystemStatusInfo.StatusInfo bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java deleted file mode 100644 index 6f49037779..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class TrackedObjects extends BaseInfo { - private MessagePad.TrackedObjects bean; - - public TrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java deleted file mode 100644 index 764d7fa44e..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class Trajectory extends BaseInfo { - public final MessagePad.Trajectory bean; - - public Trajectory(MessagePad.Header header, MessagePad.Trajectory bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java deleted file mode 100644 index aabab1571e..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import chassis.VehicleStateOuterClass; -import mogo.telematics.pad.MessagePad; - -public class VehicleState extends BaseInfo { - public final VehicleStateOuterClass.VehicleState bean; - - public VehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java deleted file mode 100644 index 5bb43ebaaa..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class Warn extends BaseInfo { - public final MessagePad.Warn bean; - - public Warn(MessagePad.Header header, MessagePad.Warn bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index d48fec82ef..45b6b6c46d 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -43,11 +43,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; -import com.mogo.telematic.MogoProtocolMsg; -import com.mogo.telematic.NSDNettyManager; -import com.mogo.telematic.client.listener.NettyClientListener; -import com.mogo.telematic.client.status.ConnectState; -import com.mogo.telematic.server.netty.NettyServerListener; +import com.zhidao.adas.client.App; import com.zhidao.adas.client.BuildConfig; import com.zhidao.adas.client.DataDistribution; import com.zhidao.adas.client.R; @@ -55,36 +51,16 @@ import com.zhidao.adas.client.adapter.InfoTitleAdapter; import com.zhidao.adas.client.base.BaseActivity; import com.zhidao.adas.client.base.BaseAdapter; import com.zhidao.adas.client.base.BaseFragment; -import com.zhidao.adas.client.bean.ArrivalNotification; -import com.zhidao.adas.client.bean.AutopilotState; -import com.zhidao.adas.client.bean.BagManagerCmd; -import com.zhidao.adas.client.bean.BasicInfoReq; -import com.zhidao.adas.client.bean.CarConfigResp; -import com.zhidao.adas.client.bean.ChassisStates; import com.zhidao.adas.client.bean.ErrorData; -import com.zhidao.adas.client.bean.FSMFunctionStates; -import com.zhidao.adas.client.bean.GlobalPathResp; -import com.zhidao.adas.client.bean.GnssInfo; import com.zhidao.adas.client.bean.IPCConnectState; -import com.zhidao.adas.client.bean.MogoReportMessage; import com.zhidao.adas.client.bean.ObuMap; import com.zhidao.adas.client.bean.ObuRsi; import com.zhidao.adas.client.bean.ObuRsm; import com.zhidao.adas.client.bean.ObuSpat; import com.zhidao.adas.client.bean.OriginalPointCloudData; import com.zhidao.adas.client.bean.PerceptionTrafficLight; -import com.zhidao.adas.client.bean.PlanningDecisionState; -import com.zhidao.adas.client.bean.PlanningObjects; -import com.zhidao.adas.client.bean.PredictionObstacleTrajectory; -import com.zhidao.adas.client.bean.RecordDataConfig; -import com.zhidao.adas.client.bean.RecordPanel; -import com.zhidao.adas.client.bean.RoboSweeperTaskIndex; +import com.zhidao.adas.client.bean.ReceiveData; import com.zhidao.adas.client.bean.SpecialVehicleBean; -import com.zhidao.adas.client.bean.StatusInfo; -import com.zhidao.adas.client.bean.TrackedObjects; -import com.zhidao.adas.client.bean.Trajectory; -import com.zhidao.adas.client.bean.VehicleState; -import com.zhidao.adas.client.bean.Warn; import com.zhidao.adas.client.log.ConnectStatusSave; import com.zhidao.adas.client.log.LogSave; import com.zhidao.adas.client.other.permission.BackgrounderPermission; @@ -97,14 +73,12 @@ import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.AdasOptions; import com.zhidao.support.adas.high.OnAdasConnectStatusListener; import com.zhidao.support.adas.high.OnAdasListener; -import com.zhidao.support.adas.high.OnMultiDeviceListener; -import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; -import com.zhidao.support.adas.high.common.ByteUtil; import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.ProtocolStatus; import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; +import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; import java.net.Inet4Address; import java.net.InetAddress; @@ -123,7 +97,6 @@ import bag_manager.BagManagerOuterClass; import chassis.ChassisStatesOuterClass; import chassis.VehicleStateOuterClass; import function_state_management.FunctionStates; -import io.netty.channel.Channel; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; import perception.TrafficLightOuterClass; @@ -878,44 +851,46 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) { - Trajectory base = new Trajectory(header, trajectory, sdf); + ReceiveData base = new ReceiveData(header, trajectory, sdf); DataDistribution.getInstance().addData(base); } @Override public void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects) { - TrackedObjects base = new TrackedObjects(header, trackedObjects, sdf); + ReceiveData base = new ReceiveData(header, trackedObjects, sdf); DataDistribution.getInstance().addData(base); } @Override public void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo) { - GnssInfo base = new GnssInfo(header, gnssInfo, sdf); + ReceiveData base = new ReceiveData(header, gnssInfo, sdf); DataDistribution.getInstance().addData(base); } @Override public void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState) { - VehicleState base = new VehicleState(header, vehicleState, sdf); + App.INSTANCE.gear = vehicleState.getGear(); + ReceiveData base = new ReceiveData(header, vehicleState, sdf); DataDistribution.getInstance().addData(base); } @Override public void onChassisStates(MessagePad.Header header, ChassisStatesOuterClass.ChassisStates chassisStates) { - ChassisStates base = new ChassisStates(header, chassisStates, sdf); + App.INSTANCE.gear = chassisStates.getGearSystemStates().getGearPosition(); + ReceiveData base = new ReceiveData(header, chassisStates, sdf); DataDistribution.getInstance().addData(base); } @Override public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) { - AutopilotState base = new AutopilotState(header, autopilotState, sdf); + ReceiveData base = new ReceiveData(header, autopilotState, sdf); DataDistribution.getInstance().addData(base); } @Override public void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage) { - MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage, sdf); + ReceiveData base = new ReceiveData(header, mogoReportMessage, sdf); DataDistribution.getInstance().addData(base); } @@ -927,7 +902,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects) { - PredictionObstacleTrajectory base = new PredictionObstacleTrajectory(header, predictionObjects, sdf); + ReceiveData base = new ReceiveData(header, predictionObjects, sdf); DataDistribution.getInstance().addData(base); } @@ -966,32 +941,32 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onPlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects planningObjects) { - PlanningObjects base = new PlanningObjects(header, planningObjects, sdf); + ReceiveData base = new ReceiveData(header, planningObjects, sdf); DataDistribution.getInstance().addData(base); } @Override public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) { - BasicInfoReq info = new BasicInfoReq(header, basicInfoReq, sdf); - DataDistribution.getInstance().addData(info); + ReceiveData base = new ReceiveData(header, basicInfoReq, sdf); + DataDistribution.getInstance().addData(base); AdasManager.getInstance().sendBasicInfoResp("", 0, com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.DEBUG); runOnUiThread(new Runnable() { @Override public void run() { - showToastCenter("收到车机基础信息请求:" + info.toString()); + showToastCenter("收到车机基础信息请求:" + base.toString()); } }); } @Override public void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp) { - CarConfigResp base = new CarConfigResp(header, carConfigResp, sdf); + ReceiveData base = new ReceiveData(header, carConfigResp, sdf); DataDistribution.getInstance().addData(base); } @Override public void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel) { - RecordPanel base = new RecordPanel(header, recordPanel, sdf); + ReceiveData base = new ReceiveData(header, recordPanel, sdf); DataDistribution.getInstance().addData(base); recordKey = recordPanel.getKey(); recordFileName = recordPanel.getFilename(); @@ -999,37 +974,37 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp) { - GlobalPathResp base = new GlobalPathResp(header, globalPathResp, sdf); + ReceiveData base = new ReceiveData(header, globalPathResp, sdf); DataDistribution.getInstance().addData(base); } @Override public void onWarn(MessagePad.Header header, MessagePad.Warn warn) { - Warn base = new Warn(header, warn, sdf); + ReceiveData base = new ReceiveData(header, warn, sdf); DataDistribution.getInstance().addData(base); } @Override public void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification) { - ArrivalNotification base = new ArrivalNotification(header, arrivalNotification, sdf); + ReceiveData base = new ReceiveData(header, arrivalNotification, sdf); DataDistribution.getInstance().addData(base); } @Override public void onStatusQueryResp(MessagePad.Header header, SystemStatusInfo.StatusInfo statusInfo) { - StatusInfo base = new StatusInfo(header, statusInfo, sdf); + ReceiveData base = new ReceiveData(header, statusInfo, sdf); DataDistribution.getInstance().addData(base); } @Override public void onRecordDataConfigResp(MessagePad.Header header, MessagePad.RecordDataConfig config) { - RecordDataConfig base = new RecordDataConfig(header, config, sdf); + ReceiveData base = new ReceiveData(header, config, sdf); DataDistribution.getInstance().addData(base); } @Override public void onPlanningActionMsg(MessagePad.Header header, MessagePad.PlanningActionMsg planningActionMsg) { - PlanningDecisionState base = new PlanningDecisionState(header, planningActionMsg, sdf); + ReceiveData base = new ReceiveData(header, planningActionMsg, sdf); DataDistribution.getInstance().addData(base); } @@ -1060,19 +1035,19 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onFunctionStates(MessagePad.Header header, FunctionStates.FSMFunctionStates functionStates) { - FSMFunctionStates base = new FSMFunctionStates(header, functionStates, sdf); + ReceiveData base = new ReceiveData(header, functionStates, sdf); DataDistribution.getInstance().addData(base); } @Override public void onSweeperTaskIndexData(MessagePad.Header header, RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { - RoboSweeperTaskIndex base = new RoboSweeperTaskIndex(header, roboSweeperTaskIndex, sdf); + ReceiveData base = new ReceiveData(header, roboSweeperTaskIndex, sdf); DataDistribution.getInstance().addData(base); } @Override public void onBagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bagManager) { - BagManagerCmd base = new BagManagerCmd(header, bagManager, sdf); + ReceiveData base = new ReceiveData(header, bagManager, sdf); DataDistribution.getInstance().addData(base); } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java index 7b4abdaad1..733e70d9ae 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java @@ -23,6 +23,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; +import com.zhidao.adas.client.App; import com.zhidao.adas.client.BuildConfig; import com.zhidao.adas.client.R; import com.zhidao.adas.client.adapter.ConfigAdapter; @@ -36,6 +37,7 @@ import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.MessageType; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -45,6 +47,7 @@ import java.util.List; import java.util.Locale; import java.util.Set; +import chassis.Chassis; import mogo.telematics.pad.MessagePad; /** @@ -65,7 +68,7 @@ public class VersionFragment extends BaseFragment { private ConfigAdapter adapter; private InterfaceAdapter unregisteredAdapter; private InterfaceAdapter registeredAdapter; - + private Set[] unableGears; private int role = Constants.TERMINAL_ROLE.DEBUG;//角色 默认调试屏 @@ -216,9 +219,48 @@ public class VersionFragment extends BaseFragment { list.add(new Config("ADAS LIB版本:", AdasManager.getInstance().getAdasVersion())); list.add(new Config("APP构建时间:", BuildConfig.BUILD_TIME)); list.add(getAutopilotAbilityConfig("")); + list.add(gear()); adapter.setData(list); } + private Config gear() { + StringBuilder builder = new StringBuilder(); + Chassis.GearPosition gear = App.INSTANCE.gear; + if (gear != null) { + if (unableGears == null) { + unableGears = new Set[6]; + unableGears[0] = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS; + unableGears[1] = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_M1; + unableGears[2] = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_M2; + unableGears[3] = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_SWEEPER; + unableGears[4] = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI; + unableGears[5] = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_VAN; + } + for (int j = 0; j < unableGears.length; j++) { + String type = ""; + if (j == 0) { + type = "BUS"; + } else if (j == 1) { + type = "M1"; + } else if (j == 2) { + type = "M2"; + } else if (j == 3) { + type = "SWEEPER"; + } else if (j == 4) { + type = "TAXI"; + } else if (j == 5) { + type = "VAN"; + } + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableGears[j]); + boolean b = AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear); + builder.append("车型:").append(type); + builder.append(" 当前档位:").append(gear.name()); + builder.append(" 是否可以启动自驾:").append(b).append('\n'); + } + } + return new Config("档位影响:", builder.toString()); + } + private Config getAutopilotAbilityConfig(String value) { return new Config("能否启动自动驾驶:", value); } @@ -226,32 +268,34 @@ public class VersionFragment extends BaseFragment { public void autopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { List list = adapter.getData(); if (list != null) { - Config temp = getAutopilotAbilityConfig(isAutopilotAbility + ",原因:" + unableAutopilotReason); - int index = list.indexOf(temp); - if (index < 0) { - list.add(temp); - if (getActivity() != null) - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - adapter.notifyItemInserted(list.size() - 1); - } - }); - } else { - Config config = list.get(index); - config.cover(temp); - config.color = RandomColor.randomColor(); - if (getActivity() != null) - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - adapter.notifyItemChanged(index); - } - }); - } + updateRefreshConfig(list, getAutopilotAbilityConfig(isAutopilotAbility + ",原因:" + unableAutopilotReason)); + updateRefreshConfig(list, gear()); } + } - + private void updateRefreshConfig(List list, Config temp) { + int index = list.indexOf(temp); + if (index < 0) { + list.add(temp); + if (getActivity() != null) + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + adapter.notifyItemInserted(list.size() - 1); + } + }); + } else { + Config config = list.get(index); + config.cover(temp); + config.color = RandomColor.randomColor(); + if (getActivity() != null) + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + adapter.notifyItemChanged(index); + } + }); + } } @Override diff --git a/app_ipc_monitoring/src/main/res/values/colors.xml b/app_ipc_monitoring/src/main/res/values/colors.xml index fc88f479a4..cee6d1bede 100644 --- a/app_ipc_monitoring/src/main/res/values/colors.xml +++ b/app_ipc_monitoring/src/main/res/values/colors.xml @@ -19,7 +19,7 @@ #1E90FF #FFC0CB #FF8F00 - #FFE500 - #B9ED3E + #FF33FF + #669900 #2EEDEB diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index e68500d7c7..2cd3d2f345 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -105,7 +105,7 @@ class MoGoAutopilotControlProvider : .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setClient(false) - .setIdentityMode(FunctionBuildConfig.appIdentityMode) + .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) // .setSubscribeInterfaceOptions(subscribeInterfaceOptions)// .build() @@ -196,7 +196,7 @@ class MoGoAutopilotControlProvider : val options = AdasOptions .Builder() .setClient(true) - .setIdentityMode(FunctionBuildConfig.appIdentityMode) + .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() AdasManager.getInstance() .create(options, MoGoAdasMsgConnectStatusListenerImpl()) @@ -224,7 +224,7 @@ class MoGoAutopilotControlProvider : .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setClient(false)// 乘客端直连工控机改为false - .setIdentityMode(FunctionBuildConfig.appIdentityMode) + .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index 9e6508a3d3..4b1caa167e 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.data.config +import chassis.Chassis import com.mogo.eagle.core.data.deva.net.UrlConfig import com.mogo.eagle.core.utilcode.util.GsonUtils @@ -213,4 +214,10 @@ object FunctionBuildConfig { @JvmField var urlJson: UrlConfig = GsonUtils.fromJson("{\"och_url\":\"https://tech.zhidaohulian.com\"}", UrlConfig::class.java) + /** + * 最外层设置的Url + */ + @Volatile + @JvmField + var unableLaunchAutopilotGear: Set? = null } \ No newline at end of file diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java index 3c38a18599..dcdc047c72 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java @@ -4,6 +4,9 @@ import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityMan import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions; import java.util.HashSet; +import java.util.Set; + +import chassis.Chassis; /** * Date:2019/5/31。 @@ -126,13 +129,13 @@ public class AdasOptions { } /** - * 身份/车型 + * 不能启动自驾的档位 * - * @param identityMode 车型 + * @param unableLaunchAutopilotGear 档位 * @return */ - public Builder setIdentityMode(String identityMode) { - options.setIdentityMode(identityMode); + public Builder setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { + options.setUnableLaunchAutopilotGear(unableLaunchAutopilotGear); return this; } @@ -153,7 +156,7 @@ public class AdasOptions { options.ipcAssignIP = null; options.ipcFixationIP = null; options.subscribeInterfaceOptions = null; - options.setIdentityMode(""); + options.setUnableLaunchAutopilotGear(null); return options; } @@ -197,7 +200,7 @@ public class AdasOptions { this.subscribeInterfaceOptions = subscribeInterfaceOptions; } - public void setIdentityMode(String identityMode) { - AutopilotAbilityManager.getInstance().setIdentityMode(identityMode); + public void setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java index 9c6ce3ea4c..d6e4188abc 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java @@ -1,10 +1,7 @@ package com.zhidao.support.adas.high.common.autopilot.ability; -import com.zhidao.support.adas.high.OnAdasListener; - import java.util.Timer; import java.util.TimerTask; -import java.util.regex.Pattern; import chassis.Chassis; import chassis.ChassisStatesOuterClass; @@ -31,10 +28,6 @@ public class AutopilotAbility230 { } private void onCallback() { - //金旅、开沃小巴乘客端 不能启动自动驾驶 - if (AutopilotAbilityManager.getInstance().isBusPassenger()) { - return; - } boolean isAutopilotAbility = true;//是否能启动自动驾驶 String unableAutopilotReason = null;//不能启动自动驾驶原因 //检测底盘相关 @@ -47,36 +40,14 @@ public class AutopilotAbility230 { } } if (isAutopilotAbility) { - /** - * 档位状态判断 目前判断的车型包括 东风Taxi 红旗Taxi 金旅Bus 金旅M1 金旅M1 福田清扫车 开沃 - * TODO 如果 identityMode 未赋值以及目前已知其他车型判断逻辑跟东风Taxi和红旗 走 - */ - //开沃任何档位都能启动自驾 - if (!AutopilotAbilityManager.getInstance().isBusDriverVan()) { - if (chassisStates.hasGearSystemStates()) { - Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); - //金旅Bus和清扫车 档位不正常 - if (AutopilotAbilityManager.getInstance().isBusDriver()) { - if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } else if (AutopilotAbilityManager.getInstance().isSweeperDriverFutian()) { - if (gear == Chassis.GearPosition.GEAR_N) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } else { - //东风Taxi和红旗 司机端和乘客端 档位不正常 - if (gear == Chassis.GearPosition.GEAR_P || gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } + if (chassisStates.hasGearSystemStates()) { + Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); + if (!AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear)) { + isAutopilotAbility = false; + unableAutopilotReason = "档位不正常"; } } } - //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段 // if (isAutopilotAbility) { // //电子驻车制动系统 @@ -88,9 +59,7 @@ public class AutopilotAbility230 { // } // } } - if (AutopilotAbilityManager.getInstance().getListener() != null) { - AutopilotAbilityManager.getInstance().getListener().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); - } + AutopilotAbilityManager.getInstance().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); } public synchronized void start() { @@ -114,5 +83,4 @@ public class AutopilotAbility230 { } - } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java index 01bf359101..0c459e56a6 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java @@ -45,10 +45,6 @@ public class AutopilotAbility250 { } private void onCallback(SystemStatusInfo.StatusInfo statusInfo) { - //金旅、开沃小巴乘客端 不能启动自动驾驶 - if (AutopilotAbilityManager.getInstance().isBusPassenger()) { - return; - } boolean isAutopilotAbility = true;//是否能启动自动驾驶 String unableAutopilotReason = null;//不能启动自动驾驶原因 //检测节点状态相关 @@ -122,36 +118,14 @@ public class AutopilotAbility250 { } } if (isAutopilotAbility) { - /** - * 档位状态判断 目前判断的车型包括 东风Taxi 红旗Taxi 金旅Bus 金旅M1 金旅M1 福田清扫车 开沃 - * TODO 如果 identityMode 未赋值以及目前已知其他车型判断逻辑跟东风Taxi和红旗 走 - */ - //开沃任何档位都能启动自驾 - if (!AutopilotAbilityManager.getInstance().isBusDriverVan()) { - if (chassisStates.hasGearSystemStates()) { - Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); - //金旅Bus和清扫车 档位不正常 - if (AutopilotAbilityManager.getInstance().isBusDriver()) { - if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } else if (AutopilotAbilityManager.getInstance().isSweeperDriverFutian()) { - if (gear == Chassis.GearPosition.GEAR_N) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } else { - //东风Taxi和红旗 司机端和乘客端 档位不正常 - if (gear == Chassis.GearPosition.GEAR_P || gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } + if (chassisStates.hasGearSystemStates()) { + Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); + if (!AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear)) { + isAutopilotAbility = false; + unableAutopilotReason = "档位不正常"; } } } - //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段 // if (isAutopilotAbility) { // //电子驻车制动系统 @@ -163,9 +137,7 @@ public class AutopilotAbility250 { // } // } } - if (AutopilotAbilityManager.getInstance().getListener() != null) { - AutopilotAbilityManager.getInstance().getListener().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); - } + AutopilotAbilityManager.getInstance().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); } public synchronized void start() { diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java index 1e80fe6805..429e08162f 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java @@ -10,11 +10,13 @@ import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.CupidLogUtils; +import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.regex.Matcher; import java.util.regex.Pattern; +import chassis.Chassis; import chassis.ChassisStatesOuterClass; import mogo.telematics.pad.MessagePad; import system_master.SystemStatusInfo; @@ -38,37 +40,14 @@ public class AutopilotAbilityManager { private AutopilotAbility250 autopilotAbility250; private Timer startTimer; /** - * 身份/车型 + * 不能启动自动驾驶的档位 */ - private String identityMode; + private Set unableLaunchAutopilotGear; public interface OnAutopilotAbilityListener { void onStatusQuery();//查询是被调用 } - /** - * 身份规则定义根据app/productFlavors/README.md - * * taxi司机屏 Taxi_Driver_Base (东风、红旗司机端) - * * taxi乘客屏 Taxi_Passenger_Base (东风、红旗乘客端) - * * bus司机屏 Bus_Driver_Base (金旅小巴司机端) - * * Bus_Driver_Van (开沃小巴司机端) - * * bus乘客屏 Bus_Passenger_Base (金旅、开沃小巴乘客端) - * * Bus_Passenger_M1 (M1小巴乘客端) - * * Bus_Passenger_M2 (M2小巴乘客端) - * * 清扫车 Sweeper_Driver_FT (福田清扫车司机端) - *

- * 此定义不区分角色,只区分业务线和车型 - */ - private interface IDENTITY_MODE { - String TAXI_DRIVER_BASE = "Taxi_Driver_Base";//(东风、红旗司机端) - String TAXI_PASSENGER_BASE = "Taxi_Passenger_Base";//(东风、红旗乘客端) - String BUS_DRIVER_BASE = "Bus_Driver_Base";//(金旅小巴司机端) - String BUS_DRIVER_VAN = "Bus_Driver_Van";//(开沃小巴司机端) - String BUS_PASSENGER_BASE = "Bus_Passenger_Base";//(金旅、开沃小巴乘客端) - String BUS_PASSENGER_M1 = "Bus_Passenger_M1";//(M1小巴乘客端) - String BUS_PASSENGER_M2 = "Bus_Passenger_M2";//(M2小巴乘客端) - String SWEEPER_DRIVER_FT = "Sweeper_Driver_FT";//(福田清扫车司机端) - } private AutopilotAbilityManager() { } @@ -84,8 +63,22 @@ public class AutopilotAbilityManager { return INSTANCE; } - public void setIdentityMode(String identityMode) { - this.identityMode = identityMode; + public void setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { + this.unableLaunchAutopilotGear = unableLaunchAutopilotGear; + } + + /** + * 获取当前档位是否能启动自动驾驶 如果不传递默认可以启动 + * 不能启动自驾档位规则:app/README.md/不能启动自动驾驶的档位 + * + * @param currentGear 当前档位 + * @return 是否能启动自驾 + */ + public boolean isLaunchAutopilot(Chassis.GearPosition currentGear) { + if (unableLaunchAutopilotGear != null && !unableLaunchAutopilotGear.isEmpty()) { + return !unableLaunchAutopilotGear.contains(currentGear); + } + return true; } public void setCarConfig(MessagePad.CarConfigResp carConfig) { @@ -105,8 +98,10 @@ public class AutopilotAbilityManager { this.listener = listener; } - public OnAdasListener getListener() { - return listener; + public void onAutopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { + if (listener != null) { + listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); + } } public void setHandler(Handler handler) { @@ -243,32 +238,4 @@ public class AutopilotAbilityManager { } return version; } - - /** - * 金旅、开沃小巴乘客端 - */ - public boolean isBusPassenger() { - return IDENTITY_MODE.BUS_PASSENGER_BASE.equalsIgnoreCase(identityMode); - } - - /** - * 开沃小巴司机端 - */ - public boolean isBusDriverVan() { - return IDENTITY_MODE.BUS_DRIVER_VAN.equalsIgnoreCase(identityMode); - } - - /** - * 金旅小巴司机端 - */ - public boolean isBusDriver() { - return IDENTITY_MODE.BUS_DRIVER_BASE.equalsIgnoreCase(identityMode); - } - - /** - * 福田清扫车司机端 - */ - public boolean isSweeperDriverFutian() { - return IDENTITY_MODE.SWEEPER_DRIVER_FT.equalsIgnoreCase(identityMode); - } } From 3603487d85978452024c6dae3252afeb9ec5004d Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 17:40:28 +0800 Subject: [PATCH 11/15] =?UTF-8?q?[M1]=20=E8=87=AA=E9=A9=BE=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/charter/model/DriverM1Model.kt | 40 +++++++------------ .../charter/presenter/DriverM1Presenter.kt | 8 +--- .../och/charter/base/CharterBaseFragment.kt | 5 ++- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt index dd048a79db..462b847534 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt @@ -31,7 +31,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.sendMsgToAllClients import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant @@ -78,6 +77,9 @@ class DriverM1Model { private val MSG_QUERY_BUS_STATION: Int = 1001 private val QUERY_BUS_STATION_DELAY: Long = 5000 + // 运营类型 + private val VEHICLE_TYPE = 10 + private var mControllerStatusCallback //Model->Presenter:VR mode等 : IDriverM1ControllerStatusCallback? = null @@ -493,33 +495,21 @@ class DriverM1Model { } fun initAutopilotControlParameters(): AutopilotControlParameters? { -// var currentStation: BusStationBean? = null -// var nextStation: BusStationBean? = null -// if (leaveIndex < 0) { -// if (backgroundCurrentStationIndex + 1 > stationList!!.size - 1 || !isGoingToNextStation) { -// e(SceneConstant.M_BUS + TAG, "行程日志-mismatch condition1.") -// return null -// } -// currentStation = stationList[backgroundCurrentStationIndex] -// nextStation = stationList[backgroundCurrentStationIndex + 1] -// } else { -// if (leaveIndex + 1 > stationList!!.size - 1 || !isGoingToNextStation) { -// e(SceneConstant.M_BUS + TAG, "行程日志-mismatch condition2.") -// return null -// } -// currentStation = stationList[leaveIndex] -// nextStation = stationList[leaveIndex + 1] -// } + if ( mCurrentOrder == null) return null var parameters = AutopilotControlParameters() -// parameters.routeID = busRoutesResult.getLineId() -// parameters.routeName = busRoutesResult.getName() + parameters.routeID = mCurrentOrder?.lineId!! + parameters.routeName = mCurrentOrder?.lineName!! // parameters.startName = PinYinUtil.getPinYinHeadChar(currentStation.getName()) -// parameters.endName = PinYinUtil.getPinYinHeadChar(nextStation.getName()) -// parameters.startLatLon = AutoPilotLonLat(currentStation.getLat(), currentStation.getLon()) -// parameters.endLatLon = AutoPilotLonLat(nextStation.getLat(), nextStation.getLon()) -// parameters.vehicleType = VEHICLE_TYPE + parameters.endName = PinYinUtil.getPinYinHeadChar(mCurrentOrder?.siteName) + parameters.startLatLon = AutopilotControlParameters.AutoPilotLonLat( + mLatitude, + mLongitude + ) + parameters.endLatLon = + AutopilotControlParameters.AutoPilotLonLat(mCurrentOrder?.wgs84Lat!!, mCurrentOrder?.wgs84Lon!!) + parameters.vehicleType = VEHICLE_TYPE // if (parameters.autoPilotLine == null) { -// parameters.autoPilotLine = AutoPilotLine( +// parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( // busRoutesResult.getLineId(), // busRoutesResult.csvFileUrl, busRoutesResult.csvFileMd5, // busRoutesResult.txtFileUrl, busRoutesResult.txtFileMd5, diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt index 57ee0946ec..84f35c4a7c 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt @@ -109,12 +109,8 @@ class DriverM1Presenter(view: DriverM1Fragment?) : val status = autoPilotStatusInfo.state if (mCurrentAutopilotStatus == status) return - if (FunctionBuildConfig.isDemoMode){ //todo 此处要加上判断订单状态 美化模式生效 - mView?.onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) - }else{ - mView?.onAutopilotStatusChanged(status) - } - + mView?.onAutopilotStatusChanged(status) + mCurrentAutopilotStatus = status // when(status){ // // IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> { // diff --git a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/base/CharterBaseFragment.kt b/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/base/CharterBaseFragment.kt index a14e3c85bc..02cc66f32c 100644 --- a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/base/CharterBaseFragment.kt +++ b/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/base/CharterBaseFragment.kt @@ -313,7 +313,10 @@ abstract class CharterBaseFragment?>() : ctvAutopilotStatusIv!!.setImageResource(R.drawable.bus_disable_autopilot_icon) ctvAutopilotStatus!!.isSelected = false ctvAutopilotStatus!!.isClickable = true - } else { + } else if (IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING + == autopilotStatus){ + //todo 处理平行驾驶 + }else{ ctvAutopilotStatusTv!!.setTextColor(resources.getColor(R.color.bus_autopilot_text_color_normal)) ctvAutopilotStatusTv!!.text = resources.getString(R.string.bus_loading_autopilot_runnig_tv) From 19f9f1d1ef2a871ea4ecfcfab328129e87b79bf9 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 27 Feb 2023 19:06:03 +0800 Subject: [PATCH 12/15] [2.13.0-arch-opt] change the color of jiangshiche and opt tracker --- .../business/identify/CircleQueue.java | 12 ++-- .../business/identify/TrackManager.java | 19 ++++-- .../function/business/identify/TrackObj.java | 58 +++++-------------- .../identify/TrackerSourceColorHelper.kt | 2 +- .../business/identify/WarningHelper.kt | 6 ++ .../src/main/java/com/mogo/map/IMogoMap.java | 5 ++ .../mogo/map/marker/IMogoMarkerManager.java | 5 ++ .../main/java/com/mogo/map/AMapWrapper.java | 12 +++- .../java/com/mogo/map/MogoMarkerManager.java | 9 +++ 9 files changed, 68 insertions(+), 60 deletions(-) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java index 5f7b50180e..a4faef0d56 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java @@ -24,18 +24,10 @@ public class CircleQueue { objQueue.add(obj); } - public void deleteObj(ObjQueue obj) { - objQueue.remove(obj); - } - public List getLastThreeFrame() { return objQueue.subList(objQueue.size() - 3, objQueue.size()); } - public List getLastFiveFrame() { - return objQueue.subList(objQueue.size() - 5, objQueue.size()); - } - public List getPreFrame() { return objQueue.subList(0, objQueue.size()); } @@ -44,6 +36,10 @@ public class CircleQueue { return objQueue.lastElement(); } + public void clear(){ + objQueue.clear(); + } + @Override public String toString() { return "CircleQueue{" + diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java index 907f04ce8d..b4d2daa6c6 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.business.identify; import android.annotation.SuppressLint; import android.os.Build; +import android.util.Log; import androidx.annotation.RequiresApi; @@ -50,7 +51,7 @@ public class TrackManager { * 记录每次实际绘制的交通元素UUID */ @SuppressLint("NewApi") - private final HashMap trafficDataUuid = new HashMap<>(); + private final ConcurrentHashMap trafficDataUuid = new ConcurrentHashMap<>(); /** * 过滤后的数据集合 @@ -101,7 +102,7 @@ public class TrackManager { trackObj = cacheTrack; MessagePad.TrackedObject cache = cacheTrack.getCache(); if (cache != null) { - //相对静止物体并且非obu数据,则不改变,为感知融合同位置物体,使用缓存数据做覆盖 + //相对静止物体 感知融合同位置物体,使用缓存数据做覆盖 if (cacheTrack.relativeStatic()) { if (data.getColor() != null && !data.getColor().isEmpty()) { cache = cache.toBuilder().setColor(data.getColor()).build(); @@ -112,10 +113,10 @@ public class TrackManager { uuid = findSameValue; trackObj.updateObj(data); } else { - trackObj = new TrackObj(data); + trackObj = new TrackObj(data,s2CellId,s2LatLng); } } else { - trackObj = new TrackObj(data); + trackObj = new TrackObj(data,s2CellId,s2LatLng); } } mFilterTrafficData.put(uuid, trackObj.getCache()); @@ -150,17 +151,23 @@ public class TrackManager { } public synchronized void removeKey(String key) { - mMarkersCaches.remove(key); cellIdCaches.remove(key); + mMarkersCaches.remove(key); + WarningHelper.INSTANCE.remove(key); MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .removeMarker(key); } @SuppressLint("NewApi") public void clearAll() { + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).clearAllMarker(); + cellIdCaches.clear(); trafficDataUuid.clear(); WarningHelper.INSTANCE.clear(); - mMarkersCaches.forEach((uuid, trackObj) -> removeKey(uuid)); + mMarkersCaches.forEach((uuid, trackObj) -> { + trackObj.clear(); + }); + mMarkersCaches.clear(); } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java index 0a1d3829b7..55ef457a88 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java @@ -5,8 +5,6 @@ import static com.mogo.eagle.core.function.business.identify.TrackManager.LIMIT_ import android.annotation.SuppressLint; import com.mogo.eagle.core.data.enums.TrafficTypeEnum; -import com.mogo.eagle.core.data.map.CenterLine; -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.geometry.S2CellId; import com.mogo.eagle.core.utilcode.geometry.S2LatLng; import com.mogo.eagle.core.utilcode.util.CoordinateUtils; @@ -22,26 +20,18 @@ public class TrackObj { private final CircleQueue circleQueue = new CircleQueue(6); private S2CellId s2CellId; //s2 id权重 private S2LatLng s2LatLng; //s2 经纬度 - private double recentlyTime; //用于缓存帧数判断,暂定缓存1秒数据,中间如果有物体未出现,1秒后删除 - private double roadAngle; //道路航向 private int[] typeArray = new int[3]; private int typeWeight; //类型权重 private double lat; private double lon; private double speedAverage; - public TrackObj(MessagePad.TrackedObject data) { + public TrackObj(MessagePad.TrackedObject data, S2CellId cellId, S2LatLng latLng) { circleQueue.addQueue(new ObjQueue(data.getHeading(), data.getSpeed(), data.getLatitude(), data.getLongitude(), data.getType())); - recentlyTime = data.getSatelliteTime(); lat = data.getLatitude(); lon = data.getLongitude(); - s2LatLng = S2LatLng.fromDegrees(data.getLatitude(), data.getLongitude()); - s2CellId = S2CellId.fromLatLng(s2LatLng).parent(22); //需要验证22前后 - CenterLine centerLine = CallerMapUIServiceManager.INSTANCE.getMapUIController().getCenterLineInfo(lon, lat, -1); - if (centerLine != null && centerLine.getAngle() != 0) { - roadAngle = centerLine.getAngle(); - } - + s2LatLng = latLng; + s2CellId = cellId; //需要验证22前后 } private MessagePad.TrackedObject cacheData; @@ -50,14 +40,12 @@ public class TrackObj { public void updateObj(MessagePad.TrackedObject data) { cacheData = data; correct(); - recentlyTime = data.getSatelliteTime(); circleQueue.addQueue(new ObjQueue(cacheData.getHeading(), cacheData.getSpeed(), data.getLatitude(), data.getLongitude(), data.getType())); } private void correct() { calAverageSpeedAndType(); calLoc(); -// calHeading(); } @SuppressLint("NewApi") @@ -80,8 +68,10 @@ public class TrackObj { } speedAverage = cal / objQueueList.size(); } - typeArray = Arrays.stream(typeArray).sorted().toArray(); - typeWeight = typeArray[typeArray.length / 2] == 0 ? cacheData.getType() : typeArray[typeArray.length / 2]; + if(typeArray.length > 0){ + typeArray = Arrays.stream(typeArray).sorted().toArray(); + typeWeight = typeArray[typeArray.length / 2] == 0 ? cacheData.getType() : typeArray[typeArray.length / 2]; + } // 重新给静止物体赋值速度 if (relativeStatic()) { @@ -105,26 +95,6 @@ public class TrackObj { } } - private void calHeading() { - //更正数据,速度小于LIMIT_SPEED使用上一帧数据 -// if (relativeStatic()) { -// if (roadAngle != 0.0) { -// CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo(lon, lat, -1); -// if (centerLine != null && centerLine.getAngle() != 0) { -// cacheData = cacheData.toBuilder().setHeading(centerLine.getAngle()).build(); -// } else { -// cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); -// } -// } else { -// cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); -// } -// } - } - - public double getRecentlyTime() { - return recentlyTime; - } - public long getCellIdPos() { return s2CellId.pos(); } @@ -167,12 +137,6 @@ public class TrackObj { } } - public boolean isFourWheelType() { - return typeWeight != TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.getType() - && typeWeight != TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE.getType() - && typeWeight != TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO.getType(); - } - private double[] getCenterPoint(List objQueueList) { int total = objQueueList.size(); double X = 0, Y = 0, Z = 0; @@ -202,12 +166,18 @@ public class TrackObj { return d; } + public void clear(){ + circleQueue.clear(); + s2CellId = null; + s2LatLng = null; + typeArray = null; + } + @Override public String toString() { return "TrackObj{" + "circleQueue=" + circleQueue + ", s2CellId=" + s2CellId + - ", recentlyTime=" + recentlyTime + ", cacheData=" + cacheData + '}'; } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt index 489cce927c..d530f02c48 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt @@ -64,7 +64,7 @@ object TrackerSourceColorHelper { //僵尸车 if(data.addAttribute == AdditionalAttribute.ATTR_ZOMBIE){ - color = "#8F9AADFF" + color = "#AE7887FF" } // pnc预警 diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt index 2d7a5c69a4..81f546cb3d 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt @@ -139,6 +139,12 @@ object WarningHelper { } } + fun remove(key:String){ + pncWarningBeautyTrafficData.remove(key) + pncWarningOriginTrafficData.remove(key) + obuWarningTrafficData.remove(key) + } + fun clear() { pncWarningBeautyTrafficData.clear() pncWarningOriginTrafficData.clear() diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java index 07ba7245d8..5fad00ad88 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java @@ -46,6 +46,11 @@ public interface IMogoMap { */ IMogoMarker addMarker(String tag, MogoMarkerOptions options); + /** + * 清除所有marker + */ + void clearAllMarkers(); + /** * 批量更新锚点位置 * diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java index 8e7e2db59f..f4c23bb89b 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java @@ -38,6 +38,11 @@ public interface IMogoMarkerManager { */ List addMarkers(String tag, ArrayList options, boolean moveToCenter); + /** + * 清除所有marker + */ + void clearAllMarker(); + /** * 批量更新锚点位置 * diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java index d471356be8..a517eca07a 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java @@ -3,10 +3,10 @@ package com.mogo.map; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Point; +import android.util.Log; import android.util.Pair; import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.map.center.CenterLine; import com.mogo.map.marker.AMapInfoWindowAdapter; @@ -108,6 +108,13 @@ public class AMapWrapper implements IMogoMap { return mogoMarker; } + @Override + public void clearAllMarkers() { + if (sAMap != null) { + sAMap.clearAllMarkers(); + } + } + @SuppressLint("NewApi") @Override public void updateBatchMarkerPosition(HashMap optionsArrayList) { @@ -119,6 +126,9 @@ public class AMapWrapper implements IMogoMap { MarkerSimpleData markerOptions = ObjectUtils.fromTrafficData(trackedObject); if (markerOptions != null) { markerOptionsArrayList.add(markerOptions); + if(markerOptions.id == 65061){ + Log.i("emArrow","time :" + markerOptions.time + " , lat : " + markerOptions.lat + " , lon : " + markerOptions.lon); + } } }); long time = markerOptionsArrayList.get(0).getTime(); diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java index ceb1a65a6b..db9333517e 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java @@ -71,6 +71,15 @@ public class MogoMarkerManager implements IMogoMarkerManager { } } + @Override + public void clearAllMarker() { + try{ + MogoMap.getInstance().getMogoMap().clearAllMarkers(); + }catch (Exception e){ + e.printStackTrace(); + } + } + @Override public void updateBatchMarkerPosition(HashMap optionsArrayList) { try { From 03d5e173ee8d9b7ee4c90ed351713dc077681660 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 20:23:04 +0800 Subject: [PATCH 13/15] =?UTF-8?q?[M1]=20=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BF=90=E8=90=A5=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charter/bean/QueryCurrentOrderResponse.kt | 2 + .../och/charter/bean/RequestChangeDest.kt | 2 +- .../IDriverM1ControllerStatusCallback.kt | 8 +- .../och/charter/fragment/DriverM1Fragment.kt | 2 +- .../mogo/och/charter/model/DriverM1Model.kt | 197 +++++++++--------- .../och/charter/net/DriverM1ServiceManager.kt | 4 +- .../charter/presenter/DriverM1Presenter.kt | 42 +++- .../src/driverm1/res/raw/bus_di.mp3 | Bin 15150 -> 0 bytes .../src/driverm1/res/raw/m1_voice_di.mp3 | Bin 0 -> 46365 bytes .../charter/callback/IADASStatusCallback.java | 11 - .../common/module/bean/dpmsg/ChangeDestMsg.kt | 4 +- .../module/bean/dpmsg/DPCommonOperationMsg.kt | 9 + .../module/bean/dpmsg/DPOperateDoorMsg.kt | 2 +- .../module/bean/dpmsg/DPOrderClosedMsg.kt | 2 +- .../socketmessage/OCHSocketMessageManager.kt | 17 +- 15 files changed, 174 insertions(+), 128 deletions(-) delete mode 100644 OCH/mogo-och-charter/src/driverm1/res/raw/bus_di.mp3 create mode 100644 OCH/mogo-och-charter/src/driverm1/res/raw/m1_voice_di.mp3 delete mode 100644 OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt index 475345a1e4..33b553b552 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/QueryCurrentOrderResponse.kt @@ -13,6 +13,8 @@ data class QueryCurrentOrderResponse(var data: Result):BaseData(){ //线路id , var orderNo: String, var lineId: Int, var lineName: String, + var startSiteId: String, + var startSiteName: String, var siteId: Int, var siteName: String, var wgs84Lon: Double, diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt index 0505130487..68361127d7 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/bean/RequestChangeDest.kt @@ -4,4 +4,4 @@ package com.magic.mogo.och.charter.bean * @author: wangmingjun * @date: 2023/2/24 */ -data class RequestChangeDest(var sn: String,var lineId: Int,var siteId: Int) +data class RequestChangeDest(var sn: String,var lineId: Int,var startSiteId: Int,var siteId: Int) diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt index d4881f53de..d6b76a84f3 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/callback/IDriverM1ControllerStatusCallback.kt @@ -1,16 +1,14 @@ package com.magic.mogo.och.charter.callback -import com.mogo.eagle.core.data.map.MogoLocation - /** * Created on 2021/9/10 * * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) */ interface IDriverM1ControllerStatusCallback { - // 自车定位 - fun onCarLocationChanged(location: MogoLocation?) - //开始开启自动驾驶 fun startOpenAutopilot() + + //启动自驾失败 + fun onStartAdasFailure() } \ No newline at end of file diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt index 36a92a0c26..d5f34dbf4f 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/fragment/DriverM1Fragment.kt @@ -61,7 +61,7 @@ class DriverM1Fragment : CharterBaseFragmentPresenter:VR mode等 : IDriverM1ControllerStatusCallback? = null - private var mADASStatusCallback: IADASStatusCallback? = null - private var mOrderCallback: DriverM1OrderCallback? = null private var mChangeDestCallback: ChangeDestCallback? = null @@ -121,6 +119,7 @@ class DriverM1Model { mContext = AbsMogoApplication.getApp() // 定位监听 CallerChassisLocationGCJ02ListenerManager.addListener(TAG, mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.setListenerHz(TAG,2) //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener) @@ -181,99 +180,19 @@ class DriverM1Model { } if (e is IllegalStateException) { // that's a bug in RxJava or in a custom operator - d(SceneConstant.M_BUS + TAG, "IllegalStateException") + d(SceneConstant.M_CHARTER_D + TAG, "IllegalStateException") Thread.currentThread().uncaughtExceptionHandler.uncaughtException( Thread.currentThread(), e ) return } - d(SceneConstant.M_BUS + TAG, "Undeliverable exception") + d(SceneConstant.M_CHARTER_D + TAG, "Undeliverable exception") } }) } - /** - * 接收乘客屏发来确认信息 - */ - private val mReceivedMsgListener: IReceivedMsgListener = - object : IReceivedMsgListener { - override fun onReceivedMsg(type: Int, byteArray: ByteArray) { - if (TelematicConstant.BUSINESS_STRING == type){ - try { - val msg = GsonUtils.fromJson(String(byteArray), - BaseDPMsg::class.java) as BaseDPMsg - if (msg.type == DPMsgType.TYPE_CHANGE_DEST.type){ - val changeDestMsg = GsonUtils.fromJson(String(byteArray), - ChangeDestMsg::class.java) as ChangeDestMsg - currentChangeDestMsg = changeDestMsg - showChangerDestCommitDialog(changeDestMsg) - } - d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+ GsonUtils.toJson(msg)) - }catch (e: Exception){ - d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+"消息解析错误") - } - - } - } - } - - private fun showChangerDestCommitDialog(changeDestMsg: ChangeDestMsg) { - if (changeDestMsg.destSiteName !== ""){ - UiThreadHandler.post{ - mChangeDestCallback?.showCommitDialog("确认站点", - "请确认是否前往"+ changeDestMsg.destSiteName + "站点") - } - }else if (changeDestMsg.lineName !== ""){ - UiThreadHandler.post{ - mChangeDestCallback?.showCommitDialog("确认路线", - "请确认是否切换"+ changeDestMsg.lineName + "路线") - } - } - } - - private val mMogoOnMessageListener = - object : IMogoOnMessageListener { - override fun onMsgReceived(obj: DataBaseMsg) { - if (obj == null) { - d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = null") - return - } - d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = " + obj.msgType) - - when(obj.msgType){ - OCHSocketMessageManager.msgMonitorType ->{ - val msg = obj as SystemMsg - pushAppOperationalMsgBox(obj.pushTimeStamp, msg.context) - - val list = msg.screenList - if (list.size > 1){ //发送乘客屏 - } - } - OCHSocketMessageManager.msgOperateDoorType ->{ - val msg = obj as OperateDoorMsg -// pushAppOperationalMsgBox(obj.pushTimeStamp, msg.) - sendMsgToClient(DPOperateDoorMsg(true)) - } - OCHSocketMessageManager.msgOrderClosedType ->{ - val msg = obj as OrderCloseMsg - pushAppOperationalMsgBox(obj.pushTimeStamp, msg.message) - sendMsgToClient(DPOrderClosedMsg()) - } - } - - } - - override fun target(): Class { - return DataBaseMsg::class.java - } - } - - fun setAdasStatusCallback(callback: IADASStatusCallback?) { - mADASStatusCallback = callback - } - fun setChangeDestCallback(callback: ChangeDestCallback?){ mChangeDestCallback = callback } @@ -300,7 +219,89 @@ class DriverM1Model { ) stopLoopAbnormalFactors() } + /** + * 接收乘客屏发来确认信息 + */ + private val mReceivedMsgListener: IReceivedMsgListener = + object : IReceivedMsgListener { + override fun onReceivedMsg(type: Int, byteArray: ByteArray) { + if (TelematicConstant.BUSINESS_STRING == type){ + try { + val msg = GsonUtils.fromJson(String(byteArray), + BaseDPMsg::class.java) as BaseDPMsg + if (msg.type == DPMsgType.TYPE_CHANGE_DEST.type){ + val changeDestMsg = GsonUtils.fromJson(String(byteArray), + ChangeDestMsg::class.java) as ChangeDestMsg + currentChangeDestMsg = changeDestMsg + showChangerDestCommitDialog(changeDestMsg) + } + d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+ GsonUtils.toJson(msg)) + }catch (e: Exception){ + d(SceneConstant.M_CHARTER_D,"onReceivedMsg = "+"消息解析错误") + } + } + } + } + + private fun showChangerDestCommitDialog(changeDestMsg: ChangeDestMsg) { + if (!TextUtils.isEmpty(changeDestMsg.destSiteName)){ + UiThreadHandler.post{ + mChangeDestCallback?.showCommitDialog("确认站点", + "请确认是否前往"+ changeDestMsg.destSiteName + "站点") + } + }else if (!TextUtils.isEmpty(changeDestMsg.lineName)){ + UiThreadHandler.post{ + mChangeDestCallback?.showCommitDialog("确认路线", + "请确认是否切换"+ changeDestMsg.lineName + "路线") + } + } + } + + private val mMogoOnMessageListener = + object : IMogoOnMessageListener { + override fun onMsgReceived(obj: DataBaseMsg) { + if (obj == null) { + d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = null") + return + } + d(SceneConstant.M_CHARTER_D + TAG, "onMsgReceived = " + obj.msgType) + + when(obj.msgType){ + OCHSocketMessageManager.msgMonitorType ->{ //运营消息 + val msg = obj as SystemMsg + pushOperationalToMsgBox(obj.pushTimeStamp, msg.context) + val list = msg.screenList + if (list.size > 1){ //发送乘客屏 + sendMsgToClient(DPCommonOperationMsg(msg.context)) + } + } + OCHSocketMessageManager.msgOperateDoorType ->{ + sendMsgToClient(DPOperateDoorMsg(true)) + } + OCHSocketMessageManager.msgOrderClosedType ->{ //订单结束 + val msg = obj as OrderCloseMsg + pushOperationalToMsgBox(obj.pushTimeStamp, msg.message + ,OCHSocketMessageManager.OPERATION_ORDER_TYPE) + sendMsgToClient(DPOrderClosedMsg()) + } + } + + } + + override fun target(): Class { + return DataBaseMsg::class.java + } + } + + fun pushOperationalToMsgBox(time : Long,content : String,type: Int = -1){ + playDI() + pushAppOperationalMsgBox(time, content,type) + } + + private fun playDI(){ + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(mContext, R.raw.m1_voice_di) + } private val mAdasStartFailureListener: OchAdasStartFailureCallback = object : OchAdasStartFailureCallback { override fun onStartAutopilotFailure( @@ -311,10 +312,10 @@ class DriverM1Model { // .triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage) // if (mADASStatusCallback != null && !FunctionBuildConfig.isDemoMode) { // e( -// SceneConstant.M_BUS + TAG, +// SceneConstant.M_CHARTER_D + TAG, // "mAdasStartFailureListener = $startFailedMessage" // ) -// mADASStatusCallback?.onStartAdasFailure() + mControllerStatusCallback?.onStartAdasFailure() // } } } @@ -337,9 +338,6 @@ class DriverM1Model { if (null == gnssInfo) return mLongitude = gnssInfo.longitude mLatitude = gnssInfo.latitude - if (mControllerStatusCallback != null) { - mControllerStatusCallback?.onCarLocationChanged(gnssInfo) - } //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 // if (isGoingToNextStation && !isArrivedStation) { @@ -351,7 +349,7 @@ class DriverM1Model { //根据围栏判断,是否到达站点 private fun judgeArrivedStation(location: MogoLocation) { // if (backgroundCurrentStationIndex + 1 > stationList!!.size - 1) { -// e(SceneConstant.M_BUS + TAG, "到站数组越界") +// e(SceneConstant.M_CHARTER_D + TAG, "到站数组越界") // return // } // val upcomingStation: BusStationBean = stationList[backgroundCurrentStationIndex + 1] @@ -363,7 +361,7 @@ class DriverM1Model { // ).toDouble() // if (distance <= CharterConst.ARRIVE_AT_END_STATION_DISTANCE) { // d( -// SceneConstant.M_BUS + TAG, "行程日志-judgeArrivedStation() distance = " + distance +// SceneConstant.M_CHARTER_D + TAG, "行程日志-judgeArrivedStation() distance = " + distance // + " to " + upcomingStation.getName() // ) // onArriveAt(null) //无自动驾驶到站信息传null @@ -388,12 +386,12 @@ class DriverM1Model { triggerStartServiceEvent(true, false) val parameters = initAutopilotControlParameters() if (null == parameters) { - d(SceneConstant.M_BUS + TAG, "行程日志-AutopilotControlParameters is empty.") + d(SceneConstant.M_CHARTER_D + TAG, "行程日志-AutopilotControlParameters is empty.") return } startAutoPilot(parameters) d( - SceneConstant.M_BUS + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + SceneConstant.M_CHARTER_D + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName ) if (mControllerStatusCallback != null) { @@ -411,7 +409,7 @@ class DriverM1Model { false //是否强制绘制引导线 setIgnoreConditionDraw(false) // 同步给乘客屏 setIPCDemoMode(false) //是否自动启动自驾 - d(SceneConstant.M_BUS + TAG, "美化模式-ignore:置为false") + d(SceneConstant.M_CHARTER_D + TAG, "美化模式-ignore:置为false") } } @@ -433,7 +431,7 @@ class DriverM1Model { * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 */ fun restartAutopilot() { - d(SceneConstant.M_BUS + TAG, "司机端-启动自动驾驶===$isGoingToNextStation") + d(SceneConstant.M_CHARTER_D + TAG, "司机端-启动自动驾驶===$isGoingToNextStation") //只去启动自动驾驶 startAutopilot() } @@ -635,11 +633,18 @@ class DriverM1Model { fun changeDest(){ if (currentChangeDestMsg == null) return + if (TextUtils.isEmpty(currentChangeDestMsg?.destSiteName)){//确认路线 + d(SceneConstant.M_CHARTER_D + TAG, "confirm line .") + sendCommitMsgToClient(true) + return + } DriverM1ServiceManager.changeDest(mContext,currentChangeDestMsg!!.lineId, + currentChangeDestMsg!!.startSiteId, currentChangeDestMsg!!.destSiteId, object : OchCommonServiceCallback{ override fun onSuccess(data: BaseData?) { if (data != null && data.code == 0){ + d(SceneConstant.M_CHARTER_D + TAG, "confirmed station .") sendCommitMsgToClient(true) } } diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt index a13db84d9f..407afa2d5f 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/net/DriverM1ServiceManager.kt @@ -69,11 +69,11 @@ object DriverM1ServiceManager { ?.subscribe(OchCommonSubscribeImpl(context!!, callback, "checkOrderCountDown")) } - fun changeDest(context: Context?,lineId: Int,siteId: Int, + fun changeDest(context: Context?,lineId: Int,startSiteId: Int,siteId: Int, callback: OchCommonServiceCallback?){ mDriverM1ServiceApi.changeDest(MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, - RequestChangeDest(MoGoAiCloudClientConfig.getInstance().sn,lineId,siteId) + RequestChangeDest(MoGoAiCloudClientConfig.getInstance().sn,lineId,startSiteId,siteId) )?.transformTry() ?.subscribe(OchCommonSubscribeImpl(context!!, callback, "changeDest")) } diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt index 84f35c4a7c..8b47fbbf37 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/presenter/DriverM1Presenter.kt @@ -4,18 +4,22 @@ import androidx.lifecycle.LifecycleOwner import com.magic.mogo.och.charter.bean.QueryCurrentOrderResponse import com.magic.mogo.och.charter.callback.ChangeDestCallback import com.magic.mogo.och.charter.callback.DriverM1OrderCallback +import com.magic.mogo.och.charter.callback.IDriverM1ControllerStatusCallback import com.magic.mogo.och.charter.fragment.DriverM1Fragment import com.magic.mogo.och.charter.model.DriverM1Model import com.mogo.commons.mvp.Presenter import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo -import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean import com.mogo.och.common.module.biz.callback.ILoginCallback +import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager.OPERATION_ROAD_SIDE_TYPE import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin +import com.mogo.och.common.module.manager.OCHPlanningStopSideStatusManager +import com.mogo.och.common.module.utils.DateTimeUtil /** * @author: wangmingjun @@ -23,7 +27,8 @@ import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin */ class DriverM1Presenter(view: DriverM1Fragment?) : Presenter(view),ILoginCallback, DriverM1OrderCallback, ChangeDestCallback, - IMoGoAutopilotStatusListener { + IMoGoAutopilotStatusListener, OCHPlanningStopSideStatusManager.OCHPlanningActionsCallback, + IDriverM1ControllerStatusCallback { private val TAG = DriverM1Presenter::class.java.name private var mCurrentAutopilotStatus : Int = -1 @@ -36,13 +41,18 @@ class DriverM1Presenter(view: DriverM1Fragment?) : private fun registerListener() { //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 CallerAutoPilotStatusListenerManager.addListener(TAG, this) + OCHPlanningStopSideStatusManager.addListener(TAG,this) DriverM1Model.get().setDriverM1OrderCallback(this) DriverM1Model.get().setChangeDestCallback(this) + DriverM1Model.get().setControllerStatusCallback(this) } private fun releaseListener() { + OCHPlanningStopSideStatusManager.removeListener(TAG) + CallerAutoPilotStatusListenerManager.removeListener(TAG) DriverM1Model.get().setDriverM1OrderCallback(null) DriverM1Model.get().setChangeDestCallback(null) + DriverM1Model.get().setControllerStatusCallback(null) } override fun onDestroy(owner: LifecycleOwner) { @@ -127,4 +137,32 @@ class DriverM1Presenter(view: DriverM1Fragment?) : // } // } } + + override fun onStartAutopilotFailure( + actionStatus: OCHPlanningStopSideStatusManager.Status, + stopSideStatus: Boolean?, + errorInfo: String? + ) { + when (actionStatus) { + OCHPlanningStopSideStatusManager.Status.START -> { // 靠边停车 to 消息盒子 + DriverM1Model.get().pushOperationalToMsgBox( + DateTimeUtil.getCurrentTimeStamp(), + "", + OPERATION_ROAD_SIDE_TYPE + ) + } + } + } + + override fun startOpenAutopilot() { + ThreadUtils.runOnUiThread { + mView?.startAutopilotAnimation() + } + } + + override fun onStartAdasFailure() { + ThreadUtils.runOnUiThread { + mView?.stopAnimAndUpdateBtnStatus() + } + } } diff --git a/OCH/mogo-och-charter/src/driverm1/res/raw/bus_di.mp3 b/OCH/mogo-och-charter/src/driverm1/res/raw/bus_di.mp3 deleted file mode 100644 index 15b31ed247d4390b1d571976c4f05d7d3da1571b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15150 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 w<=LtEOaJJt%2@k{4eiMKgITNo8$iX11poj5 diff --git a/OCH/mogo-och-charter/src/driverm1/res/raw/m1_voice_di.mp3 b/OCH/mogo-och-charter/src/driverm1/res/raw/m1_voice_di.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..191886658cd0c2c103e6ae736b65d9136c7dbdc2 GIT binary patch literal 46365 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 literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java b/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java deleted file mode 100644 index 6b5aa0e854..0000000000 --- a/OCH/mogo-och-charter/src/main/java/com/magic/mogo/och/charter/callback/IADASStatusCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.magic.mogo.och.charter.callback; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) - */ -public interface IADASStatusCallback { - //自驾返回失败 - void onStartAdasFailure(); -} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt index 4418cf569a..d130f49741 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/ChangeDestMsg.kt @@ -7,9 +7,9 @@ package com.mogo.och.common.module.bean.dpmsg data class ChangeDestMsg( var lineId: Int, //线路id var lineName: String = "", //线路名称 - var startSiteId: Int=0, //当前站点 + var startSiteId: Int= 0, //当前站点 var startSiteName: String = "", - var destSiteId: Int=0, //目的地 + var destSiteId: Int= 0, //目的地 var destSiteName: String = "", var isConfirmed: Boolean = false //司机端是否同意 ): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt new file mode 100644 index 0000000000..af7badf1fa --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPCommonOperationMsg.kt @@ -0,0 +1,9 @@ +package com.mogo.och.common.module.bean.dpmsg + +/** + * @author: wangmingjun + * @date: 2023/2/24 + */ +data class DPCommonOperationMsg( + var msg: String +): BaseDPMsg(DPMsgType.TYPE_COMMON.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt index 20b8443827..30a4f2c3b4 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOperateDoorMsg.kt @@ -6,4 +6,4 @@ package com.mogo.och.common.module.bean.dpmsg */ data class DPOperateDoorMsg( var open: Boolean = false // true: 开门, false: 关门 -): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type) +): BaseDPMsg(DPMsgType.TYPE_OPEN_CLOSE_DOOR.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt index 1b5e4c5a15..5785b9500b 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/bean/dpmsg/DPOrderClosedMsg.kt @@ -6,4 +6,4 @@ package com.mogo.och.common.module.bean.dpmsg */ data class DPOrderClosedMsg( var closed: Boolean = true // true: 开门, false: 关门 -): BaseDPMsg(DPMsgType.TYPE_CHANGE_DEST.type) +): BaseDPMsg(DPMsgType.TYPE_ORDER_CLOSED.type) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt index 443ad5469d..76fc2a39f1 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/common/socketmessage/OCHSocketMessageManager.kt @@ -12,10 +12,14 @@ import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager * 统一管理业务长链消息推送 */ object OCHSocketMessageManager { - public const val msgMonitorType:Int = 6295553 //后台运营消息 - public const val msgWriteOffPassengerType:Int = 6295554 //核销消息 - public const val msgOperateDoorType = 6295554 // 开/关门消息 - public const val msgOrderClosedType = 6295555 //订单结束消息 + const val msgMonitorType:Int = 6295553 //后台运营消息 + const val msgWriteOffPassengerType:Int = 6295554 //核销消息 + const val msgOperateDoorType = 6295554 // 开/关门消息 + const val msgOrderClosedType = 6295555 //订单结束消息 + + const val OPERATION_SYSTEM: Int = -1 // 运营消息 默认是次消息类型 + const val OPERATION_ORDER_TYPE: Int = 0 // 还车通知 + const val OPERATION_ROAD_SIDE_TYPE: Int = 1 //靠边停车通知 fun registerSocketMessageListener(msgType:Int, mogoOnMessageListener :IMogoOnMessageListener){ @@ -28,8 +32,9 @@ object OCHSocketMessageManager { .unregisterLifecycleListener(msgType) } - fun pushAppOperationalMsgBox(time : Long,content : String){ + fun pushAppOperationalMsgBox(time : Long,content : String,type: Int = -1){ + CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.OPERATION, - OperationMsg(time,content))); + OperationMsg(time,content,type))) } } \ No newline at end of file From bdffe3b56071e65527de5a6200934222fecf265d Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 20:41:17 +0800 Subject: [PATCH 14/15] =?UTF-8?q?[M2]=20=E4=B9=98=E5=AE=A2=E5=B1=8F?= =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E6=8E=92=E6=9F=A5=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/bus/passenger/model/PM2DrivingModel.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt index 0af825eb00..33369c39d8 100644 --- a/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt +++ b/OCH/mogo-och-bus-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt @@ -192,19 +192,19 @@ class PM2DrivingModel private constructor() { private val moGoAutopilotPlanningListener = object : IMoGoPlanningRottingListener{ override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) { - val routePoints = globalPathResp?.wayPointsList - if (null != routePoints && routePoints.size > 0) { - updateRoutePoints(routePoints) -// startOrStopRouteAndWipe(true) + globalPathResp?.let { + d(SceneConstant.M_BUS_P + TAG, "och-rotting==wayPointsSize = " + it.wayPointsList.size) + updateRoutePoints(it.wayPointsList) } } } - fun updateRoutePoints(routePoints: List?) { + fun updateRoutePoints(routePoints: List?) { mRoutePoints.clear() val latLngModels = CoordinateCalculateRouteUtil .coordinateConverterWgsToGcjLocations(mContext, routePoints) + d(SceneConstant.M_BUS_P + TAG, "och-rotting==latLngModels = " + latLngModels.size) mRoutePoints.addAll(latLngModels) calculateTwoStationsRoute() } @@ -336,7 +336,7 @@ class PM2DrivingModel private constructor() { && station.isLeaving && i + 1 < stations.size) { mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i + 1, false) if (mNextStationIndex != i + 1) { - d(SceneConstant.M_BUS_P+TAG,"轨迹排查--开始行程") + d(SceneConstant.M_BUS_P+TAG,"och-rotting--start ") mTwoStationsRouts.clear() startRemainRouteInfo() } @@ -398,7 +398,7 @@ class PM2DrivingModel private constructor() { break } for (lastPoints in lastPointsMap.values) { - d(SceneConstant.M_BUS_P + TAG, "轨迹排查==lastPoints.size() = " + lastPoints.size) + d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastPoints.size() = " + lastPoints.size) var lastSumLength = 0f lastSumLength = if (lastPoints.size == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex >= 0) { @@ -417,7 +417,7 @@ class PM2DrivingModel private constructor() { CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints) } val lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 //秒 - d(SceneConstant.M_BUS_P + TAG, "轨迹排查==lastSumLength = $lastSumLength") + d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastSumLength = $lastSumLength") mDrivingInfoCallback?.updateRemainMT( lastSumLength.toLong(), lastTime.toLong() @@ -447,7 +447,7 @@ class PM2DrivingModel private constructor() { stationNext.gcjLat ) - d(SceneConstant.M_BUS_P + TAG, "轨迹排查==currentRouteIndex = " + currentRouteIndex + d(SceneConstant.M_BUS_P + TAG, "och-rotting==currentRouteIndex = " + currentRouteIndex + ", nextRouteIndex = " + nextRouteIndex) if (currentRouteIndex < nextRouteIndex) { //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 From 10f561ba26dfd7146f1e81c0e7116439ca03a7d5 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 27 Feb 2023 21:00:41 +0800 Subject: [PATCH 15/15] =?UTF-8?q?[shuttle]=20=E4=B9=98=E5=AE=A2=E5=B1=8F?= =?UTF-8?q?=E6=96=B9=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/productFlavors/fOchShuttlePassenger.gradle | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/productFlavors/fOchShuttlePassenger.gradle b/app/productFlavors/fOchShuttlePassenger.gradle index 3b8169805f..a578eb87cc 100644 --- a/app/productFlavors/fOchShuttlePassenger.gradle +++ b/app/productFlavors/fOchShuttlePassenger.gradle @@ -17,7 +17,11 @@ project.android.productFlavors { // 车机类型,主要用于区分自研车机还是别人家的车机,自研车机类型为0 buildConfigField 'int', 'CAR_MACHINE_TYPE', '2' //高德地图鉴权信息 - manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, CHANNEL_VALUE: "fOchShuttlePassenger",ACTIVITY_ROOT:true] + manifestPlaceholders = [AMAP_API_VALUE: rootProject.ext.android.fLauncherAmapApiValue, + CHANNEL_VALUE: "fOchShuttlePassenger", + ACTIVITY_ROOT:true, + // Activity的朝向 + SCREEN_ORIENTATION: "landscape"] // 是否基于地图 buildConfigField 'boolean', 'IS_MAP_BASED', 'true' @@ -43,6 +47,6 @@ project.android.productFlavors { buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' //Bus不能启动自驾的档位 - buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file