01 · 车门业务代码全景

主力模块:settingsPage/micarLockSettings/ | 信号定义:base/settingsBaseLib/.../MiCarPropertyIds.java

1. 模块命中分布

模块门相关文件数角色
settingsPage/micarLockSettings/~15核心:车门/门锁/尾门/前备箱/童锁/充电口/加油口/靠近离车
settingsPage/VehicleBodyControl/1车身控制(门/窗快捷)
settingsPage/micarChargeSettings/5(充电口盖)充电口盖状态
settingsPage/settingsAutoPilot/1开门预警 DOW
settingsPage/micarSnapshot/3快照里的门状态
base/settingsBaseLib/全量 propId 定义 MiCarPropertyIds.java
base/settingsVehicleLib/信号读写基础设施 SettingsCarPropertyManager

2. 车门业务分类地图

graph LR
    Root["座舱车门业务"]

    Root --> Door["车门控制"]
    Root --> Lock["门锁"]
    Root --> Gate["尾门/前备箱"]
    Root --> Port["充电口/加油口"]
    Root --> Approach["靠近/离车"]
    Root --> Assist["辅助驾驶"]
    Root --> Popup["离车提醒弹窗"]

    Door --> Door1["VehicleDoorToggleCtrlPreferenceController<br/>电动门开关(6态状态机)"]
    Door --> Door2["AutoDoorCloseSwitchController<br/>车门自动吸合"]

    Lock --> Lock1["VehicleLockToggleCtrlPreferenceController<br/>童锁+车窗锁"]
    Lock --> Lock2["CloseWindowWhenLockController<br/>锁车自动关窗"]

    Gate --> Gate1["ElectricTailGatePreferenceController<br/>电动尾门"]
    Gate --> Gate2["TailGateHeightPrefController<br/>尾门高度40-100%"]
    Gate --> Gate3["ElectricHeadGatePreferenceController<br/>电动前备箱"]

    Port --> Port1["FuelLidController<br/>加油口盖(仅增程)"]
    Port --> Port2["Door.CHARGE_PORT_STATE<br/>充电口盖"]

    Approach --> Ap1["VehicleApproachUnLockController<br/>靠近自动解锁"]
    Approach --> Ap2["WalkAwayLockController<br/>离车自动锁车"]

    Assist --> As1["MiCarAutoPilotDOWControllerNew<br/>开门预警DOW"]

    Popup --> Pu1["DoorUnLockActivity<br/>离车提醒(车门可视化)"]

    style Door fill:#e3f2fd
    style Popup fill:#fff3e0
    style Pu1 fill:#ffe0b2

3. 核心 Controller / Fragment 清单

职责路径
VehicleDoorToggleCtrlPreferenceController主副驾/左右后电动门开关,处理 6 态运动状态 + 不可用原因micarLockSettings/.../vehicle/VehicleDoorToggleCtrlPreferenceController.java
VehicleLockToggleCtrlPreferenceController左右后童锁 + 车窗锁开关micarLockSettings/.../vehicle/VehicleLockToggleCtrlPreferenceController.java
ElectricTailGatePreferenceController电动尾门开/关/暂停 + 高度设置入口micarLockSettings/.../gate/ElectricTailGatePreferenceController.kt
ElectricHeadGatePreferenceController电动前备箱开关micarLockSettings/.../gate/ElectricHeadGatePreferenceController.kt
TailGateHeightPrefController尾门开启高度(40-100%,步进 10%)micarLockSettings/.../gate/TailGateHeightPrefController.kt
FuelLidController加油口盖开关(仅增程车型)micarLockSettings/.../lock/FuelLidController.kt
VehicleApproachUnLockController靠近自动解锁时机micarLockSettings/.../lock/VehicleApproachUnLockController.kt
WalkAwayLockController离车自动锁车micarLockSettings/.../lock/WalkAwayLockController.kt
AutoDoorCloseSwitchController车门自动吸合micarLockSettings/.../lock/AutoDoorCloseSwitchController.kt
CloseWindowWhenLockController锁车自动关窗micarLockSettings/.../lock/CloseWindowWhenLockController.kt
MiCarAutoPilotDOWControllerNew开门预警 DOW(辅助驾驶)settingsAutoPilot/.../MiCarAutoPilotDOWControllerNew.kt
DoorUnLockActivity离车提醒弹窗(车门状态可视化)micarLockSettings/.../activity/DoorUnLockActivity.java
VehicleLockSettingsFragment锁车设置聚合页micarLockSettings/.../vehicle/VehicleLockSettingsFragment.java

路径前缀:settingsPage/micarLockSettings/src/main/java/com/android/car/settings/miauto/

4. 信号定义入口

文件作用
base/settingsBaseLib/.../vehicle/MiCarPropertyIds.java全量 propId 定义(Door/Window/Lock/Gate 等内部类)
micarLockSettings/.../DoorVehiclePropertysMap.java车门相关 propId 集合(Controller 注册用)
micarLockSettings/.../LockVehiclePropertysMap.java锁/童锁/车窗锁 propId 集合
外部 aar mi.car.configDoor枚举值定义(DoorState / PowerOperatedDoorMovingStatus 等),本仓库无源码

5. 联动逻辑(门与其他系统)

5.1 涉水/洗车模式 × 车门

  • MiCarPropertyIds.WADING_MODE_REASON_IN_VEHICLE_DOOR_OPEN = 0x1 << 3车门打开时禁止进入涉水模式
  • 实现:micarDrivingSettings/.../DriveModeBasePreferenceController.kt 进入涉水模式前校验。

5.2 车速 × 车门

  • 电动门不可用原因 Door.PowerOperatedDoorDisableReason.HIGH_SPEED:车速过高时禁用电动门,弹 Toast「车速过高,请停车后操作」。
  • 还有 ANTI_PLAY(防玩)、THERMAL(温度保护)。
  • 处理:VehicleDoorToggleCtrlPreferenceController 的不可用原因分支。

5.3 开门预警 DOW

  • AutoPilot.DOW(开关)+ AutoPilot.DOW_WARNING_TYPE(警告类型),area = MiVehicleAreaBody.REAR
  • 三态:OFF / WARNING(警告)/ DELAY_OPEN(延迟开门)。
  • 控制器 MiCarAutoPilotDOWControllerNew

5.4 童锁 × 车窗锁

  • LockVehiclePropertysMap 定义 4 路控制:左后童锁 / 右后童锁 / 左后车窗锁 / 右后车窗锁。
  • 信号:WindowCtrl.REAR_LOCK_STATUS(车窗锁)+ LockCtrl.CHILDREN_LOCK(儿童锁)。

5.5 加油口盖(仅增程车型)

  • VehicleLockSettingsFragment 进入时判断 Driving.PropulsionTypeConfig.EXTENDED_RANGE_ELECTRIC 才显示加油口盖入口。
  • 不可用原因:CRASH_EVNT(碰撞)/ PWR_FLT(电源故障)/ VCU_GEAR_FLT(P 档故障)/ WASH_MOD(洗车模式)。

5.6 锁车自动关窗/关遮阳帘

  • Window.LOCK_AUTO_CLOSE(锁车自动关窗)+ Window.LOCK_CAR_CLOSE_SUN_SHADE_CONFIGURATION(关遮阳帘)。

6. 电动门状态机(重点)

电动门不是简单开/关,而是 6 态状态机Door.POWER_OPERATED_DOOR_MOVING_STATUS):

stateDiagram-v2
    [*] --> CLOSED
    CLOSED --> OPENING: 按开
    OPENING --> FULL_OPEN: 到顶
    OPENING --> STOP_NEXT_CLOSE: 中途松手
    FULL_OPEN --> CLOSING: 按关
    CLOSING --> CLOSED: 到底
    CLOSING --> STOP_NEXT_OPEN: 中途松手
    STOP_NEXT_OPEN --> OPENING: 再按开
    STOP_NEXT_CLOSE --> CLOSING: 再按关
    note right of CLOSED: 关闭
    note right of FULL_OPEN: 完全开启
    note right of OPENING: 开启中
    note right of CLOSING: 关闭中

枚举:CLOSED / OPENING / CLOSING / FULL_OPEN / STOP_NEXT_OPEN(停止后下次开)/ STOP_NEXT_CLOSE(停止后下次关)。 控制器用 Door.POWER_OPERATED_DOOR_BUTTON_STATUS 下发 ON/OFF/STOP 命令,用 POWER_OPERATED_DOOR_MOVING_STATUS 回读状态。


下一篇:02-车门信号与属性定义.md