From abb9aa03e711ad1cb7bd029f5a0cc9fc01d5a699 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 14 Sep 2023 19:34:09 +0800 Subject: [PATCH 1/5] =?UTF-8?q?[610][adas]=E8=83=BD=E5=90=A6=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E8=87=AA=E9=A9=BE=E6=9D=A1=E4=BB=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8CTaxi=E6=97=A0=E4=BA=BA=E5=8C=96=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=EF=BC=88DF=E5=92=8CHQ=EF=BC=89MAP>=3D360=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E7=A7=BB=E9=99=A4P=E6=A1=A3=E5=92=8C=E6=89=8B=E5=88=B9?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ability/AutopilotAbility250.java | 25 ++++++++++------- .../ability/AutopilotAbility350And360.java | 27 ++++++++++++------- .../ability/AutopilotAbilityManager.java | 19 +++++++++++-- 3 files changed, 49 insertions(+), 22 deletions(-) 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 74a9312eae..38a391d2f4 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 @@ -30,6 +30,8 @@ public class AutopilotAbility250 { private VehicleStateOuterClass.VehicleState vehicleState; private int mapVersion = -1;//MAP版本 private int masterVersion = -1;//Master版本 + private boolean isHQ = false;//是否是HQ + private boolean isDF = false;//是否是DF private OnAutopilotAbilityListener listener; protected interface OnAutopilotAbilityListener { @@ -42,8 +44,10 @@ public class AutopilotAbility250 { void onRemoveTimeoutMessages(); } - protected AutopilotAbility250(int mapVersion) { + protected AutopilotAbility250(int mapVersion, boolean isHQ, boolean isDF) { this.mapVersion = mapVersion; + this.isHQ = isHQ; + this.isDF = isDF; this.masterVersion = -1; } @@ -151,18 +155,19 @@ public class AutopilotAbility250 { } } } - if (vehicleState != null) { - //TODO 关于手刹:目前只有老底盘中存在这个字段,df360开始,其他车型未知 - //电子驻车制动系统 - if (vehicleState.hasParkingBrake()) { - boolean isBrake = vehicleState.getParkingBrake(); - if (isBrake) { - isAutopilotAbility = false; - unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车"); + if ((!isHQ && !isDF) || mapVersion < 30600) { + if (vehicleState != null) { + //TODO 关于手刹:目前只有老底盘中存在这个字段,df360开始,其他车型未知 + //电子驻车制动系统 + if (vehicleState.hasParkingBrake()) { + boolean isBrake = vehicleState.getParkingBrake(); + if (isBrake) { + isAutopilotAbility = false; + unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车"); + } } } } - if (listener != null) { listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java index 9ea99c68d6..582f69af80 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility350And360.java @@ -23,7 +23,10 @@ public class AutopilotAbility350And360 { private static final String TAG = AutopilotAbility250.class.getSimpleName(); private ChassisStatesOuterClass.ChassisStates chassisStates; private VehicleStateOuterClass.VehicleState vehicleState; + private int mapVersion = -1;//MAP版本 private int masterVersion = -1;//Master版本 + private boolean isHQ = false;//是否是HQ + private boolean isDF = false;//是否是DF private OnAutopilotAbilityListener listener; protected interface OnAutopilotAbilityListener { @@ -31,7 +34,10 @@ public class AutopilotAbility350And360 { } - protected AutopilotAbility350And360() { + protected AutopilotAbility350And360(int mapVersion, boolean isHQ, boolean isDF) { + this.mapVersion = mapVersion; + this.isHQ = isHQ; + this.isDF = isDF; this.masterVersion = -1; } @@ -124,18 +130,19 @@ public class AutopilotAbility350And360 { } } } - if (vehicleState != null) { - //TODO 关于手刹:目前只有老底盘中存在这个字段,df360开始,其他车型未知 - //电子驻车制动系统 - if (vehicleState.hasParkingBrake()) { - boolean isBrake = vehicleState.getParkingBrake(); - if (isBrake) { - isAutopilotAbility = false; - unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车"); + if ((!isHQ && !isDF) || mapVersion < 30600) { + if (vehicleState != null) { + //TODO 关于手刹:目前只有老底盘中存在这个字段,df360开始,其他车型未知 + //电子驻车制动系统 + if (vehicleState.hasParkingBrake()) { + boolean isBrake = vehicleState.getParkingBrake(); + if (isBrake) { + isAutopilotAbility = false; + unableAutopilotReasons = AutopilotAbilityManager.getInstance().addUnableAutopilotReason(unableAutopilotReasons, UnableAutopilotReason.SourceType.CHASSIS, "施加驻车"); + } } } } - if (listener != null) { listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReasons); } 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 256e526868..7456ff819c 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 @@ -47,6 +47,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA private boolean isFutianSweeper = false;//是否是福田清扫车 private boolean isJinlvM1 = false;//是否是M1 private boolean isHQ = false;//是否是HQ + private boolean isDF = false;//是否是DF private AutopilotAbility230 autopilotAbility230; private AutopilotAbility250 autopilotAbility250; private AutopilotAbility330 autopilotAbility330; @@ -79,6 +80,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA public void setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { this.unableLaunchAutopilotGear = unableLaunchAutopilotGear; + taxiUnmanned(); } /** @@ -111,11 +113,24 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA return unableAutopilotReasons; } + /** + * Taxi无人化相关,从MAP360开始去掉P档限制和手刹限制 + */ + private void taxiUnmanned() { + if ((isHQ || isDF) && mapVersion >= 30600) { + if (unableLaunchAutopilotGear != null) { + unableLaunchAutopilotGear.remove(Chassis.GearPosition.GEAR_P); + } + } + } + public void setCarConfig(MessagePad.CarConfigResp carConfig) { mapVersion = carConfig.getMapVersion(); isFutianSweeper = carConfig.getIsFutianSweeper(); isJinlvM1 = carConfig.getIsJinlvM1(); isHQ = carConfig.getIsHQ(); + isDF = carConfig.getIsDF(); + taxiUnmanned(); if (mapVersion != -1) { stopTimer(); CupidLogUtils.i(TAG, "工控机版本=" + mapVersion); @@ -265,7 +280,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA stop330(); stop360(); if (autopilotAbility350And360 == null) { - autopilotAbility350And360 = new AutopilotAbility350And360(); + autopilotAbility350And360 = new AutopilotAbility350And360(mapVersion, isHQ, isDF); autopilotAbility350And360.start(this); } @@ -286,7 +301,7 @@ public class AutopilotAbilityManager implements AutopilotAbility230.OnAutopilotA stop350And360(); stop360(); if (autopilotAbility250 == null) { - autopilotAbility250 = new AutopilotAbility250(mapVersion); + autopilotAbility250 = new AutopilotAbility250(mapVersion, isHQ, isDF); autopilotAbility250.start(this); } } else { From f7d5462bedd05ee7313e3d53bd3054d53b403ef7 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 14 Sep 2023 19:37:44 +0800 Subject: [PATCH 2/5] =?UTF-8?q?[6.1.0]=E8=BF=90=E8=90=A5=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/setting/SOPSettingView.kt | 482 ++++---- .../src/main/res/layout/view_sop_setting.xml | 1041 +++++++++-------- .../core/data/config/FunctionBuildConfig.kt | 11 +- .../eagle/core/data/config/HmiBuildConfig.kt | 2 +- .../uicontroller/IMogoMapUIController.java | 6 + .../java/com/mogo/map/AMapViewWrapper.java | 13 + .../com/mogo/map/MogoMapUIController.java | 12 + .../map/uicontroller/AMapUIController.java | 11 + 8 files changed, 837 insertions(+), 741 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index ac1da819b8..e065153e6e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -4,7 +4,6 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.view.View -import android.widget.* import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig @@ -21,18 +20,17 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher import com.mogo.eagle.core.function.call.devatools.* import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.obu.CallerObuApiManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils -import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.function.call.obu.CallerObuApiManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.AdasParam import kotlinx.android.synthetic.main.view_sop_setting.view.* -import kotlinx.android.synthetic.main.view_sop_setting.view.tbRouteDynamicEffect import mogo.telematics.pad.MessagePad /** @@ -57,47 +55,30 @@ internal class SOPSettingView @JvmOverloads constructor( private fun initView() { sopLayout.setOnClickListener { } - tbObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring - tbObstacleAvoidance.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 绕障类功能开关",isChecked) - CallerAutoPilotControlManager.sendDetouring(isChecked) - FunctionBuildConfig.isDetouring = isChecked + //V2X消息设置 + v2xSetting() + //地图效果类设置 + mapSetting() + //与车相关类设置 + vehicleSetting() + //其他类别开关设置 + otherSetting() + } + + /** + * V2X消息设置 + */ + private fun v2xSetting(){ + //V2N新链路 + scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData + scNewV2NData.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked) + FunctionBuildConfig.isNewV2NData = isChecked } - tbMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning - tbMarkingObstacles.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 危险障碍物颜色标记开关",isChecked) - FunctionBuildConfig.isPNCWarning = isChecked - } - - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - tbMarkingObstacles.visibility = View.GONE - } - - tbRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy - tbRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 引导线动态效果",isChecked) - HmiBuildConfig.isShowRouteStrategy = isChecked - } - - //默认开启 - tbObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView - tbObuWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP obu弱势交通控制, ",isChecked) - HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked - } - - /** - * 默认关闭 - */ - tbCloudWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowCloudWeaknessTrafficView - tbCloudWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 云端弱势交通控制, ",isChecked) - HmiBuildConfig.isShowCloudWeaknessTrafficView = isChecked - } - - tbV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc - tbV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked -> + //V2N场景进PNC + scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc + scV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked -> if(!compoundButton.isPressed){ return@setOnCheckedChangeListener } @@ -106,53 +87,9 @@ internal class SOPSettingView @JvmOverloads constructor( FunctionBuildConfig.isV2NPnc = isChecked } - tbV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc - tbV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked -> - if(!compoundButton.isPressed){ - return@setOnCheckedChangeListener - } - hmiAction("SOP V2I场景进PNC, ",isChecked) - CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked) - FunctionBuildConfig.isV2IPnc = isChecked - } - - /** - * 默认打开 - */ - tbObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView - tbObuV2vView.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP obuV2V开关, ",isChecked) - HmiBuildConfig.isShowObuV2vView = isChecked - } - - /** - * 默认打开 - */ - tbObuV2iView.isChecked = HmiBuildConfig.isShowObuV2iView - tbObuV2iView.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP obuV2i开关, ",isChecked) - HmiBuildConfig.isShowObuV2iView = isChecked - } - - /** - * 默认关闭 - */ - tbRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView - tbRunRedLightSop.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP obu闯红灯预警, ",isChecked) - HmiBuildConfig.isShowRunRedLightView = isChecked - if (HmiBuildConfig.isShowRunRedLightView) { - CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray()) - } else { - CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray()) - } - } - - /** - * 默认关闭 - */ - tbGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView - tbGreenWaveSop.setOnCheckedChangeListener { _, isChecked -> + //绿波通行(默认关闭) + scGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView + scGreenWaveSop.setOnCheckedChangeListener { _, isChecked -> hmiAction("SOP obu绿波通行, ",isChecked) HmiBuildConfig.isShowGreenWaveView = isChecked if (HmiBuildConfig.isShowGreenWaveView) { @@ -162,30 +99,111 @@ internal class SOPSettingView @JvmOverloads constructor( } } - tbTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView - tbTrafficLight.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 红绿灯标识开关, ",isChecked) - if (isChecked) { - CallerHmiManager.showTrafficLightView() + //V2I场景进PNC + scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc + scV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked -> + if(!compoundButton.isPressed){ + return@setOnCheckedChangeListener + } + hmiAction("SOP V2I场景进PNC, ",isChecked) + CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked) + FunctionBuildConfig.isV2IPnc = isChecked + } + + //闯红灯预警(默认关闭) + scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView + scRunRedLightSop.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP obu闯红灯预警, ",isChecked) + HmiBuildConfig.isShowRunRedLightView = isChecked + if (HmiBuildConfig.isShowRunRedLightView) { + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray()) } else { - CallerHmiManager.hideTrafficLightView() + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray()) } } - tbSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView - tbSpeedLimit.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 限速标识开关, ",isChecked) + //路侧弱势交通参与者(默认开启) + scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView + scObuWeaknessTrafficSop.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP obu弱势交通控制, ",isChecked) + HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked + } + + //V2V总开关(默认关闭) + scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView + scObuV2vView.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP obuV2V开关, ",isChecked) + HmiBuildConfig.isShowObuV2vView = isChecked + } + + //obu总开关 + scObu.isChecked = CallerObuApiManager.isConnected() + scObu.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP OBU控制总开关, ",isChecked) if (isChecked) { - HmiBuildConfig.isShowLimitingVelocityView = true + CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP) } else { - HmiBuildConfig.isShowLimitingVelocityView = false - CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE) + //断开链接 + CallerObuApiManager.disConnectObu() } } + } + + /** + * 地图效果类设置 + */ + private fun mapSetting(){ + //危险障碍物颜色标记开关 + scMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning + scMarkingObstacles.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 危险障碍物颜色标记开关",isChecked) + FunctionBuildConfig.isPNCWarning = isChecked + } + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + scMarkingObstacles.isEnabled = false + } + + //引导线动态效果 + scRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy + scRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 引导线动态效果",isChecked) + HmiBuildConfig.isShowRouteStrategy = isChecked + } + + //点云效果 + //初始化点云数据渲染情况 + scDrawPointCloudData.isChecked = FunctionBuildConfig.isDrawPointCloudData + //是否渲染点云数据 + scDrawPointCloudData.setOnCheckedChangeListener { _, isChecked -> + CallerAutoPilotControlManager.setIsDrawPointCloud(isChecked) + FunctionBuildConfig.isDrawPointCloudData = isChecked + CallerMapUIServiceManager.getMapUIController()?.setIsDrawPointCloud(isChecked) + } + + //自车光圈 + scCarAperture.isChecked = FunctionBuildConfig.isDisplayAnimEnable + scCarAperture.setOnCheckedChangeListener { _, isChecked -> + CallerMapUIServiceManager.getMapUIController()?.setDisplayAnimEnable(isChecked) + FunctionBuildConfig.isDisplayAnimEnable = isChecked + } + } + + /** + * 与车相关类设置 + */ + private fun vehicleSetting(){ + //绕障类功能 + scObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring + scObstacleAvoidance.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 绕障类功能开关",isChecked) + CallerAutoPilotControlManager.sendDetouring(isChecked) + FunctionBuildConfig.isDetouring = isChecked + } + // 演示模式,上一次勾选的数据 - tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode - tbDemoMode.setOnCheckedChangeListener { compoundButton, _ -> + scDemoMode.isChecked = FunctionBuildConfig.isDemoMode + scDemoMode.setOnCheckedChangeListener { compoundButton, _ -> if(!compoundButton.isPressed){ return@setOnCheckedChangeListener } @@ -200,12 +218,12 @@ internal class SOPSettingView @JvmOverloads constructor( } //只在司机端设置美化模式开关功能 if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - tbDemoMode.visibility = View.GONE + scDemoMode.isEnabled = false } // 雨天模式,上一次勾选的数据 - tbRainMode.isChecked = FunctionBuildConfig.isRainMode - tbRainMode.setOnCheckedChangeListener { compoundButton, isChecked -> + scRainMode.isChecked = FunctionBuildConfig.isRainMode + scRainMode.setOnCheckedChangeListener { compoundButton, isChecked -> if(!compoundButton.isPressed){ return@setOnCheckedChangeListener } @@ -216,72 +234,24 @@ internal class SOPSettingView @JvmOverloads constructor( } //雨天模式按钮只在司机屏生效,乘客屏不显示 if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - tbRainMode.visibility = View.GONE - } - - tbObu.isChecked = CallerObuApiManager.isConnected() - tbObu.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP OBU控制总开关, ",isChecked) - if (isChecked) { - CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP) - } else { - //断开链接 - CallerObuApiManager.disConnectObu() - } - } - - - tbIPCReport.isChecked = FunctionBuildConfig.isReportWarning - tbIPCReport.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 是否开启异常上报, ",isChecked) - FunctionBuildConfig.isReportWarning = isChecked - } - - tbNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData - tbNewV2NData.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked) - FunctionBuildConfig.isNewV2NData = isChecked - } - - // M1 360度环视 - tbNew360LookAround?.also { - if (!AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) { - it.isEnabled = false - } else { - it.isEnabled = true - it.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CallerHmiManager.showM1360LookAround() - } else { - CallerHmiManager.hidM1360LookAround() - } - } - it.isChecked = CallerHmiManager.isM1360LookAroundShowing() - } + scRainMode.visibility = View.GONE } //弱网减速停车 - tbWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown - tbWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked -> + scWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown + scWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked -> FunctionBuildConfig.isWeakNetSlowDown = isChecked CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked) hmiAction("SOP 弱网减速停车, ",isChecked) } //故障减速停车 - tbFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown - tbFaultSlowDown.setOnCheckedChangeListener{_, isChecked -> + scFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown + scFaultSlowDown.setOnCheckedChangeListener{_, isChecked -> FunctionBuildConfig.isFaultSlowDown = isChecked CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked) hmiAction("SOP 故障减速停车, ",isChecked) } - - //是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包) - tbShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow - tbShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked -> - FunctionBuildConfig.isShowBagRecordWindow = isChecked - hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked) - } //融合模式 rgFusionMode.setOnCheckedChangeListener { _, p1 -> when(p1){ @@ -308,93 +278,69 @@ internal class SOPSettingView @JvmOverloads constructor( } CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) } + } - - //变道绕障的目标障碍物速度阈值 - tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" - ivSpeedReduce.setOnClickListener { - if (FunctionBuildConfig.detouringSpeed <= 3) { - ToastUtils.showShort("阈值最小可为3 m/s") + /** + * 其他类别开关设置 + */ + private fun otherSetting(){ + //红绿灯标识开关 + scTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView + scTrafficLight.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 红绿灯标识开关, ",isChecked) + if (isChecked) { + CallerHmiManager.showTrafficLightView() } else { - FunctionBuildConfig.detouringSpeed-- - tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" - } - hmiAction("SOP 变道绕障的目标障碍物速度阈值",FunctionBuildConfig.detouringSpeed) - } - ivSpeedAdd.setOnClickListener { - if (FunctionBuildConfig.detouringSpeed >= 7) { - ToastUtils.showShort("阈值最大可为7 m/s") - } else { - FunctionBuildConfig.detouringSpeed++ - tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" - } - hmiAction("SOP 变道绕障的目标障碍物速度阈值",FunctionBuildConfig.detouringSpeed) - } - btnSpeedSet.setOnClickListener { - val isSuccess = - CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) - if (isSuccess == true) { - ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功") - hmiAction("SOP 变道绕障的目标障碍物速度阈值设置","成功") - } else { - ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败") - hmiAction("SOP 变道绕障的目标障碍物速度阈值设置","失败") + CallerHmiManager.hideTrafficLightView() } } - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - tvSpeedThresholdTitle.visibility = View.GONE - ivSpeedReduce.visibility = View.GONE - tvSpeed.visibility = View.GONE - ivSpeedAdd.visibility = View.GONE - btnSpeedSet.visibility = View.GONE + //限速标识 + scSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView + scSpeedLimit.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 限速标识开关, ",isChecked) + if (isChecked) { + HmiBuildConfig.isShowLimitingVelocityView = true + } else { + HmiBuildConfig.isShowLimitingVelocityView = false + CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE) + } } - /** - * 魔方sop运营相关配置 - */ - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - val mf = CallerDevaToolsManager.mofang() - if (mf != null) { - mfStatusLayout.setClickEnabled(true) - mfStatusLayout.setClickedTextAndTag(if (mf.isConnected()) "断开魔方连接" else "开始连接魔方", if (mf.isConnected()) 0 else 1) - mf.registerMoFangStatusListener(TAG, this) - mfStatusLayout.setOnClickCallback { - val tag = it.tag as? Int - if (tag == 0) { - //断开魔方连接 - if (!mf.isConnected()) { - Toast.makeText(context, "尚未建立连接", Toast.LENGTH_SHORT).show() - return@setOnClickCallback - } - mfStatusLayout.showLoadingView() - mfStatusLayout.setLoadingViewText("正在断开魔方连接, 请稍候...") - mf.disconnect() - } - if (tag == 1) { - //建立魔方连接 - if (mf.isConnected()) { - Toast.makeText(context, "已连接,不要重复连接", Toast.LENGTH_SHORT).show() - return@setOnClickCallback - } - mf.connect() - mfStatusLayout.showLoadingView() - mfStatusLayout.setLoadingViewText("正在连接魔方, 请稍候") + //异常上报提示 + scIPCReport.isChecked = FunctionBuildConfig.isReportWarning + scIPCReport.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 是否开启异常上报, ",isChecked) + FunctionBuildConfig.isReportWarning = isChecked + } + + // M1 360度环视 + scNew360LookAround?.also { + if (!AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) { + it.isEnabled = false + } else { + it.isEnabled = true + it.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + CallerHmiManager.showM1360LookAround() + } else { + CallerHmiManager.hidM1360LookAround() } } + it.isChecked = CallerHmiManager.isM1360LookAroundShowing() } - - mfTest.isEnabled = mf?.isConnected() ?: false - mfTest.isChecked = mf?.isEnableTest() ?: false - mfTest.setOnCheckedChangeListener { _, isChecked -> - mf?.enableTest(isChecked) - } - } else { - mfStatusLayout.setClickEnabled(false) - mfTest.isEnabled = false } + + //是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包) + scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow + scShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked -> + FunctionBuildConfig.isShowBagRecordWindow = isChecked + hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked) + } + } + override fun onAttachedToWindow() { super.onAttachedToWindow() //添加 业务配置监听 @@ -410,10 +356,10 @@ internal class SOPSettingView @JvmOverloads constructor( override fun updateFuncMode(tag: String, boolean: Boolean) { super.updateFuncMode(tag, boolean) if(tag == FUNC_MODE_DEMO){ - tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode + scDemoMode.isChecked = FunctionBuildConfig.isDemoMode } if(tag == FUNC_MODE_RAIN){ - tbRainMode.isChecked = FunctionBuildConfig.isRainMode + scRainMode.isChecked = FunctionBuildConfig.isRainMode } } @@ -426,61 +372,55 @@ internal class SOPSettingView @JvmOverloads constructor( CallerDevaToolsManager.mofang()?.unRegisterMoFangStatusListener(this) } -// private val timerTaskRefresh = object : TimerTask(){ -// override fun run() { -// UiThreadHandler.post{ -// tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode -// tbRainMode.isChecked = FunctionBuildConfig.isRainMode -// } -// } -// -// } override fun updateBizView(type: String, lock: Boolean) { when (type) { + //美化模式 FuncBizConfig.BIZ_BEAUTY_MODE -> { - tbDemoMode.isClickable = !lock + scDemoMode.isClickable = !lock if(lock){ - tbDemoMode.visibility = View.INVISIBLE + scDemoMode.visibility = View.INVISIBLE }else{ - tbDemoMode.visibility = View.VISIBLE + scDemoMode.visibility = View.VISIBLE } } + //雨天模式 FuncBizConfig.BIZ_RAIN_MODE -> { - tbRainMode.isClickable = !lock + scRainMode.isClickable = !lock if (lock) { - tbRainMode.visibility = View.INVISIBLE + scRainMode.visibility = View.INVISIBLE } else { - tbRainMode.visibility = View.VISIBLE - } - } - FuncBizConfig.BIZ_PNC_WARNING -> { - tbMarkingObstacles.isClickable = !lock - if (lock) { - tbMarkingObstacles.visibility = View.INVISIBLE - } else { - tbMarkingObstacles.visibility = View.VISIBLE + scRainMode.visibility = View.VISIBLE } } + +// FuncBizConfig.BIZ_PNC_WARNING -> { +// tbMarkingObstacles.isClickable = !lock +// if (lock) { +// tbMarkingObstacles.visibility = View.INVISIBLE +// } else { +// tbMarkingObstacles.visibility = View.VISIBLE +// } +// } } } override fun onMoFangConnected() { - mfStatusLayout?.also { - it.hideLoadingView() - it.setClickedTextAndTag("断开魔方连接", 0) - mfTest?.isEnabled = true - mfTest?.isChecked = CallerDevaToolsManager.mofang()?.isEnableTest() ?: false - } +// mfStatusLayout?.also { +// it.hideLoadingView() +// it.setClickedTextAndTag("断开魔方连接", 0) +// mfTest?.isEnabled = true +// mfTest?.isChecked = CallerDevaToolsManager.mofang()?.isEnableTest() ?: false +// } } override fun onMoFangDisconnected() { - mfStatusLayout?.also { - it.hideLoadingView() - it.setClickedTextAndTag("开始连接魔方", 1) - mfTest?.isEnabled = false - } +// mfStatusLayout?.also { +// it.hideLoadingView() +// it.setClickedTextAndTag("开始连接魔方", 1) +// mfTest?.isEnabled = false +// } } override fun onMoFangBatteryChanged(battery: Int) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index 0f7ffcb25a..c1d928aff4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -5,488 +5,593 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> - + android:background="@color/color_D4D8DC" + android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -