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.config 的 Door 类 | 枚举值定义(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