[8.2.4][hmi][运营面板-车辆相关] 增加驾驶模式和否启用AIP选项UI
This commit is contained in:
@@ -1648,6 +1648,24 @@ class MoGoAutopilotControlProvider :
|
||||
return AdasManager.getInstance().sendV2iDownPerceptionToPnc(enable) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 驾驶模式
|
||||
*
|
||||
* @param style 0-正常模式 1-安全模式 2-专业模式
|
||||
*/
|
||||
override fun sendDrivingStyle(style: Int): Boolean {
|
||||
return AdasManager.getInstance().sendDrivingStyle(style) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否启用AIP选项功能
|
||||
*
|
||||
* @param enable false: off true:on 默认false
|
||||
*/
|
||||
override fun sendActivateAip(enable: Boolean): Boolean {
|
||||
return AdasManager.getInstance().sendActivateAip(if (enable) 1 else 0) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 云端配置控制
|
||||
* @param type 0:蘑菇云 1:NDE云 2:基础平台云
|
||||
|
||||
@@ -1328,8 +1328,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
getParamResp: MessagePad.SetParamReq,
|
||||
adasParam: AdasParam
|
||||
) {
|
||||
FunctionBuildConfig.fusionMode = adasParam.fusionMode
|
||||
CallerAutopilotGetParamResponseDispatcher.dispatchResponse(header, getParamResp, adasParam)
|
||||
CallerAutopilotGetParamResponseDispatcher.dispatchResponse(adasParam)
|
||||
CallerV2XManager.invokeGetParamResp(getParamResp, adasParam)
|
||||
}
|
||||
|
||||
|
||||
@@ -146,6 +146,18 @@ class MoGoAdasMsgConnectStatusListenerImpl :
|
||||
|
||||
CallerAutoPilotControlManager.sendV2nToPncCmd(FunctionBuildConfig.v2nTotalSwitch)
|
||||
|
||||
// BUS 司机端 连接成功查询AIP状态和驾驶模式
|
||||
if ((AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode) || AppIdentityModeUtils.isB2(
|
||||
FunctionBuildConfig.appIdentityMode
|
||||
) || AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) && AppIdentityModeUtils.isDriver(
|
||||
FunctionBuildConfig.appIdentityMode
|
||||
)
|
||||
) {
|
||||
CallerAutoPilotControlManager.sendGetParamReq(
|
||||
AdasConstants.MapSystemParamType.ACTIVATE_AIP,
|
||||
AdasConstants.MapSystemParamType.DRIVING_STYLE
|
||||
)
|
||||
}
|
||||
//事件数据进PNC应用
|
||||
if(FunctionBuildConfig.ndeEventDataToPnc){
|
||||
CallerAutoPilotControlManager.sendNdeDownEventToPnc(1)
|
||||
|
||||
@@ -158,7 +158,8 @@ internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoBackCam
|
||||
}
|
||||
}
|
||||
|
||||
override fun onGetParamResp(header: Header, getParamResp: SetParamReq, adasParam: AdasParam) {
|
||||
override fun onGetParamResp(adasParam: AdasParam) {
|
||||
super.onGetParamResp(adasParam)
|
||||
Log.d(TAG, "-- onGetParamResp -- 1 --")
|
||||
val parse = adasParam.m1StitchedVideoSelfVehicleParamParse
|
||||
if (parse != null) {
|
||||
|
||||
@@ -17,6 +17,7 @@ import android.widget.Toast
|
||||
import androidx.annotation.CallSuper
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.preference.CheckBoxPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.PreferenceGroup
|
||||
@@ -841,9 +842,10 @@ class OperatePanelLayout : LinearLayout {
|
||||
*/
|
||||
override fun onGetParamResp(getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) {
|
||||
ThreadUtils.runOnUiThread {
|
||||
Log.i("onGetParamResp","adasParam.v2nToPnc="+adasParam.v2nToPnc)
|
||||
Log.i("onGetParamResp","adasParam.v2iToPnc="+adasParam.v2iToPnc)
|
||||
Log.i("onGetParamResp","adasParam.perceptionToPnc="+adasParam.perceptionToPnc)
|
||||
CallerLogger.i(
|
||||
"V2X onGetParamResp",
|
||||
"adasParam.v2nToPnc=${adasParam.v2nToPnc} adasParam.v2iToPnc=${+adasParam.v2iToPnc} adasParam.perceptionToPnc=${adasParam.perceptionToPnc}"
|
||||
)
|
||||
//融合v2n开关 NDE下行事件数据进pnc
|
||||
if(adasParam.v2nToPnc != -1){
|
||||
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(NDE_EVENT_DATA_TO_PNC)?.also { changeValue(it,adasParam.v2nToPnc==1) }
|
||||
@@ -1496,11 +1498,12 @@ class OperatePanelLayout : LinearLayout {
|
||||
setPreferencesFromResource(R.xml.operate_panel_preference_details_mofang, rootKey)
|
||||
}
|
||||
}
|
||||
|
||||
// CallerAutoPilotControlManager
|
||||
class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoAutopilotCarConfigListener,
|
||||
ISopSettingListener, IViewControlListener, IMoGoGetParamResponseListener{
|
||||
companion object {
|
||||
private const val TAG = "VehiclesPreferenceFragmentCompat"
|
||||
private const val IS_CHECKED_DRIVING_STYLE = "is_checked_driving_style"
|
||||
private const val KEY_PNC_PARK_INTERSECTION_CAR = "pnc_park_intersection_car"
|
||||
private const val KEY_PNC_PARK_OVERTAKE_CAR = "pnc_park_overtake_car"
|
||||
private const val KEY_DETOUR_RETARD_PARK = "detour_retard_park"
|
||||
@@ -1513,12 +1516,17 @@ class OperatePanelLayout : LinearLayout {
|
||||
private const val KEY_BEYOND_VISUAL_RANGE_MODE = "beyond_visual_range_mode"
|
||||
private const val KEY_TRANSPARENT_TRANSFER_MODE = "transparent_transfer_mode"
|
||||
private const val KEY_PURE_OBU_MODE = "pure_obu_mode"
|
||||
private const val KEY_AIP_FUNCTION = "aip_function"
|
||||
private const val KEY_DRIVING_STYLE_NORMAL = "driving_style_normal"
|
||||
private const val KEY_DRIVING_STYLE_SAFETY = "driving_style_safety"
|
||||
private const val KEY_DRIVING_STYLE_PROFESSIONAL = "driving_style_professional"
|
||||
private const val KEY_AUTO_PILOT_SPEED_THRESHOLDS = "auto_pilot_speed_thresholds"
|
||||
private const val KEY_CHANGE_LANE_SPEED_THRESHOLDS = "change_lane_speed_thresholds"
|
||||
private const val KEY_OVERTAKE_SPEED_THRESHOLDSS = "overtake_speed_thresholds"
|
||||
}
|
||||
|
||||
private var prevCheckedKeyForFusionMode: String? = null
|
||||
private var prevCheckedKeyForDrivingStyle: String? = null
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
Logger.d(TAG, "--- onCreateView --- 1 ---")
|
||||
@@ -1529,8 +1537,25 @@ class OperatePanelLayout : LinearLayout {
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
Logger.d(TAG, "--- onCreateView --- 2 ---") //获取车辆配置
|
||||
CallerAutoPilotControlManager.getCarConfig() //查询融合模式
|
||||
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.FUSION_MODE)
|
||||
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.OVERTAKE_MAX_SPEED)
|
||||
CallerAutoPilotControlManager.sendGetParamReq(
|
||||
AdasConstants.MapSystemParamType.FUSION_MODE,
|
||||
AdasConstants.MapSystemParamType.OVERTAKE_MAX_SPEED,
|
||||
AdasConstants.MapSystemParamType.ACTIVATE_AIP,
|
||||
AdasConstants.MapSystemParamType.DRIVING_STYLE
|
||||
)
|
||||
}
|
||||
//非BUS 司机端隐藏按钮
|
||||
if (!(AppIdentityModeUtils.isB1(FunctionBuildConfig.appIdentityMode) || AppIdentityModeUtils.isB2(
|
||||
FunctionBuildConfig.appIdentityMode
|
||||
) || AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) && AppIdentityModeUtils.isDriver(
|
||||
FunctionBuildConfig.appIdentityMode
|
||||
)
|
||||
) {
|
||||
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(KEY_AIP_FUNCTION)?.isVisible= false
|
||||
preferenceScreen.findPreference<Preference>("header_driving_style")?.isVisible = false
|
||||
preferenceScreen.findPreferenceReal<CheckBoxPreference>(KEY_DRIVING_STYLE_NORMAL)?.isVisible= false
|
||||
preferenceScreen.findPreferenceReal<CheckBoxPreference>(KEY_DRIVING_STYLE_SAFETY)?.isVisible= false
|
||||
preferenceScreen.findPreferenceReal<CheckBoxPreference>( KEY_DRIVING_STYLE_PROFESSIONAL)?.isVisible= false
|
||||
}
|
||||
return super.onCreateView(inflater, container, savedInstanceState)
|
||||
}
|
||||
@@ -1553,7 +1578,8 @@ class OperatePanelLayout : LinearLayout {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onGetParamResp(header: MessagePad.Header, getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) {
|
||||
override fun onGetParamResp(adasParam: AdasParam) {
|
||||
super.onGetParamResp(adasParam)
|
||||
Logger.d(TAG, "-- onGetParamResp --: fusion-mode:${adasParam.fusionMode}, over-take-speed:${adasParam.overtakeMaxSpeed} ")
|
||||
lifecycleScope.launch {
|
||||
when(adasParam.fusionMode) {
|
||||
@@ -1627,6 +1653,60 @@ class OperatePanelLayout : LinearLayout {
|
||||
FunctionBuildConfig.overTakeSpeed = adasParam.overtakeMaxSpeed
|
||||
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(KEY_OVERTAKE_SPEED_THRESHOLDSS)?.update(listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5", "m/s"))
|
||||
}
|
||||
CallerLogger.i(
|
||||
"VEH onGetParamResp",
|
||||
"adasParam.activateAip=${adasParam.activateAip} "
|
||||
)
|
||||
if (adasParam.activateAip != -1) {
|
||||
ThreadUtils.runOnUiThread {
|
||||
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(
|
||||
KEY_AIP_FUNCTION
|
||||
)?.also { changeValue(it, adasParam.activateAip == 1) }
|
||||
}
|
||||
}
|
||||
//驾驶模式
|
||||
when(adasParam.drivingStyle) {
|
||||
0 -> {
|
||||
//正常模式
|
||||
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_NORMAL)?.also {
|
||||
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
1 -> {
|
||||
//安全模式
|
||||
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_SAFETY)?.also {
|
||||
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
2 -> {
|
||||
//专业模式
|
||||
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL}?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_DRIVING_STYLE_PROFESSIONAL)?.also {
|
||||
it.extras.putBoolean(IS_CHECKED_DRIVING_STYLE, true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1698,6 +1778,18 @@ class OperatePanelLayout : LinearLayout {
|
||||
KEY_PURE_OBU_MODE -> {
|
||||
return false
|
||||
}
|
||||
KEY_AIP_FUNCTION -> {
|
||||
return FunctionBuildConfig.isActivateAip
|
||||
}
|
||||
KEY_DRIVING_STYLE_NORMAL -> {
|
||||
return FunctionBuildConfig.drivingStyle == 0
|
||||
}
|
||||
KEY_DRIVING_STYLE_SAFETY -> {
|
||||
return FunctionBuildConfig.drivingStyle == 1
|
||||
}
|
||||
KEY_DRIVING_STYLE_PROFESSIONAL -> {
|
||||
return FunctionBuildConfig.drivingStyle == 2
|
||||
}
|
||||
KEY_AUTO_PILOT_SPEED_THRESHOLDS -> {
|
||||
return listOf("0.0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5.0", "km/h")
|
||||
}
|
||||
@@ -1928,6 +2020,71 @@ class OperatePanelLayout : LinearLayout {
|
||||
}
|
||||
return isChecked
|
||||
}
|
||||
KEY_AIP_FUNCTION -> {
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
CallerAutoPilotControlManager.sendActivateAip(isChecked)
|
||||
hmiAction("SOP AIP功能, ", isChecked)
|
||||
clickEventAnalytics("AIP功能", isChecked)
|
||||
return true
|
||||
}
|
||||
KEY_DRIVING_STYLE_NORMAL -> {
|
||||
if (preference.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
|
||||
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
|
||||
return false
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_NORMAL }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_NORMAL
|
||||
hmiAction("SOP 驾驶模式-正常模式, ", 0)
|
||||
clickEventAnalytics("驾驶模式-正常模式", true)
|
||||
CallerAutoPilotControlManager.sendDrivingStyle(0)
|
||||
}
|
||||
return isChecked
|
||||
}
|
||||
KEY_DRIVING_STYLE_SAFETY -> {
|
||||
if (preference.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
|
||||
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
|
||||
return false
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_SAFETY }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_SAFETY
|
||||
hmiAction("SOP 驾驶模式-安全模式, ", 1)
|
||||
clickEventAnalytics("驾驶模式-安全模式", true)
|
||||
CallerAutoPilotControlManager.sendDrivingStyle(1)
|
||||
}
|
||||
return isChecked
|
||||
}
|
||||
KEY_DRIVING_STYLE_PROFESSIONAL -> {
|
||||
if (preference.extras.containsKey(IS_CHECKED_DRIVING_STYLE)) {
|
||||
preference.extras.remove(IS_CHECKED_DRIVING_STYLE)
|
||||
return false
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
prevCheckedKeyForDrivingStyle?.takeIf { it != KEY_DRIVING_STYLE_PROFESSIONAL }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForDrivingStyle = KEY_DRIVING_STYLE_PROFESSIONAL
|
||||
hmiAction("SOP 驾驶模式-专业模式, ", 2)
|
||||
clickEventAnalytics("驾驶模式-专业模式", true)
|
||||
CallerAutoPilotControlManager.sendDrivingStyle(2)
|
||||
}
|
||||
return isChecked
|
||||
}
|
||||
|
||||
}
|
||||
return super.onPreferenceChange(preference, newValue)
|
||||
}
|
||||
|
||||
@@ -1107,11 +1107,8 @@ internal class SOPSettingView @JvmOverloads constructor(
|
||||
/**
|
||||
* 工控机配置参数获取
|
||||
*/
|
||||
override fun onGetParamResp(
|
||||
header: MessagePad.Header,
|
||||
getParamResp: MessagePad.SetParamReq,
|
||||
adasParam: AdasParam
|
||||
) {
|
||||
override fun onGetParamResp(adasParam: AdasParam) {
|
||||
super.onGetParamResp(adasParam)
|
||||
//融合模式
|
||||
ThreadUtils.runOnUiThread {
|
||||
updateFusionModeUI()
|
||||
|
||||
@@ -78,6 +78,35 @@
|
||||
android:title="纯路侧模式"
|
||||
android:persistent="false"
|
||||
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
|
||||
<SwitchPreferenceCompat
|
||||
android:key="aip_function"
|
||||
android:layout="@layout/layout_operate_panel_preference_switch_compat"
|
||||
android:persistent="false"
|
||||
android:title="AIP功能"
|
||||
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
|
||||
<Preference
|
||||
android:key="header_driving_style"
|
||||
android:layout="@layout/layout_operate_panel_preference_primary_category_title"
|
||||
android:selectable="false"
|
||||
android:title="驾驶模式" />
|
||||
<CheckBoxPreference
|
||||
android:key="driving_style_normal"
|
||||
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
|
||||
android:persistent="false"
|
||||
android:title="正常模式"
|
||||
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
|
||||
<CheckBoxPreference
|
||||
android:key="driving_style_safety"
|
||||
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
|
||||
android:persistent="false"
|
||||
android:title="安全模式"
|
||||
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
|
||||
<CheckBoxPreference
|
||||
android:key="driving_style_professional"
|
||||
android:layout="@layout/layout_operate_panel_preference_checkbox_compat"
|
||||
android:persistent="false"
|
||||
android:title="专业模式"
|
||||
android:widgetLayout="@layout/layout_operate_panel_preference_widget_checkbox_compat" />
|
||||
<com.mogo.eagle.core.function.hmi.ui.operate.preferences.PreferenceWithSpeedSetting
|
||||
android:key="auto_pilot_speed_thresholds"
|
||||
android:layout="@layout/layout_operate_panel_preference_with_title_above"
|
||||
|
||||
@@ -16,7 +16,7 @@ interface IMoGoGetParamResponseListener {
|
||||
* @param getParamResp 配置参数
|
||||
* @param adasParam 解析后的配置参数
|
||||
*/
|
||||
fun onGetParamResp(getParamResp: MessagePad.SetParamReq, adasParam: AdasParam){}
|
||||
fun onGetParamResp(adasParam: AdasParam){}
|
||||
|
||||
/**
|
||||
* AIP功能开关状态变更 只有变动才回调
|
||||
|
||||
@@ -18,7 +18,7 @@ object CallerAutopilotGetParamResponseDispatcher: CallerBase<IMoGoGetParamRespon
|
||||
}
|
||||
}
|
||||
|
||||
fun dispatchResponse(getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) {
|
||||
fun dispatchResponse(adasParam: AdasParam) {
|
||||
if (adasParam.activateAip != -1) {
|
||||
FunctionBuildConfig.isActivateAip = adasParam.activateAip > 0
|
||||
_isActivateAip = FunctionBuildConfig.isActivateAip
|
||||
@@ -26,9 +26,12 @@ object CallerAutopilotGetParamResponseDispatcher: CallerBase<IMoGoGetParamRespon
|
||||
if (adasParam.drivingStyle != -1) {
|
||||
FunctionBuildConfig.drivingStyle = adasParam.drivingStyle
|
||||
}
|
||||
if (adasParam.fusionMode != -1) {
|
||||
FunctionBuildConfig.fusionMode = adasParam.fusionMode
|
||||
}
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onGetParamResp(getParamResp, adasParam)
|
||||
listener.onGetParamResp(adasParam)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user