04 · 地区法规与对抗验证
一、三层控制机制(核心)
ADAS 是法规差异最大的模块,每个功能开关可见性由三层叠加控制:
①编译期 App region flavor(app/src/region/cn vs /global)
→ 决定 Fragment 类(AutopilotSettingsFragment vs GlobalAutopilotSettingsFragment)
↓
②运行期 XML 选择(MiCarSettings.isEce())
AutopilotSettingsFragment: isEce ? _ece.xml : 国内.xml
GlobalAutopilotSettingsFragment: 固定 _global.xml
↓
③运行期 license + 配置字裁剪(getPreferenceKeyResIdsToRemove)
MiCarLcsControlHelper.isLicenseFeatureVisible(id) + isCfgADDEnable() + isL2SupportedDevice()
二、地区判断(ro.micar.build.region)
系统属性取值:cn/global/eu/ece。
DeviceUtil.isOverseasRegion()=!isCnRegion()(含 global/eu/ece)MiCarSettings.isEce()= region =="ece"(本模块欧洲判断实际生效)DeviceUtil.isEURegion()= region =="eu"(本模块未用)
XML 加载矩阵:
| App flavor | 运行期 region | 加载 XML |
|---|---|---|
| cn | cn/空 | 国内(415 行全功能) |
| cn | ece | ECE(65 行极简) |
| global | global/其他 | global(252 行精简) |
三、ECE 法规限制(UN-ECE)
ECE XML 只保留 3 项(受 UN-R152/R159/ISA 法规约束):
- AEB/FCW(前向防碰撞)— UN-R152 强制
- LDW/LDP(车道偏离)— UN-R159 强制
- 超速告警 + 国家代码— EU GSR ISA 法规强制(27 国分别限速)
ECE 完全移除:NOA/LCC/ACC、泊车(APA/HPP/AVP)、ELK、AES、RCW、RCTB、BSD、DOW、TLA、MAI、智驾学堂/休眠/灯、限高、XLA 等全部不暴露。getPreferenceKeyResIdsToRemove() 直接返回 null(XML 本身已极简)。
四、超速告警 4 套实现(法规差异核心)
MiCarAutoPilotNavOverSpeedController 按 4 条件分支:
| 条件 | 信号 | Tab 枚举 |
|---|---|---|
isEce() | TSA_SWITCH | OFF/REMINDER/WARNING(EU ISA) |
isOverseasRegion() | INTELLIGENT_SPEED_ASSISTANCE | OFF/DISPLAY/OVERSPEED |
isL2SupportedDevice()(国内 L2) | INTELLIGENT_SPEED_ASSISTANCE | OFF/VISION/VISION_AUDIO |
| else(国内普通) | NAVIGATE_VISION_OVER_SPEED_SETTINGS | OFF/视觉/视觉+声音 |
二次确认:海外/ECE 关闭超速告警需二次确认(法规要求主动确认关闭安全功能);国内非 ECE 不需要。
五、车型差异
Orin 芯片(DRIVING_ASSIST_CTRL_TYPE_CONFIG)
- 单 Orin 84 TOPS(
isCfgSingleOrinEnable):限速模式 summary 提示算力 - 双 Orin 508 TOPS(
isCfgDoubleOrinEnable):智驾全功能
ADD 高配总开关(isCfgADDEnable,CONFIG_ADD_808)
智驾全功能总开关。非 ADD 时移除:智驾学堂、智驾休眠;非 L2 车型时连 AEB/FCW、LDWP、超速告警一并移除(ADD 智驾专属)。
L2 强标车型(AutoPilotDeviceUtil.isL2SupportedDevice)
8 种 suit:MS12_U_BASE/MS12_U_TRACK/KUNLUN_3N_28A/LE_MANS_1_27B/LE_MANS_2_27B/LE_MANS_2S_27B/LE_MANS_5_27B/LE_MANS_9_27B。
法规强制:即使非 ADD 高配,L2 强标车型也保留 AEB/LDW/超速告警(GB 强标)。
CarConfigManager(仅门把手)
本模块 CarConfigManager 只用于门把手类型(isElectricalDoorHandle/isMechanicalDoorHandle),决定 DOW Switch/Tab 版。智驾主配置在 MiCarSettings(不在 CarConfigManager)。
六、License 体系
CN/Global 两套独立 license
| 功能 | CN License | Global License |
|---|---|---|
| AEB/FCW | (ADD 配置) | LICENSE_ID_AEB_FCW_GLOBAL(10) |
| LDW/LDP | (ADD 配置) | LICENSE_ID_LDP_LDW_GLOBAL(34) |
| ELK | LICENSE_ID_ELK | LICENSE_ID_ELK_GLOBAL(12) |
| AES | LICENSE_ID_AES | LICENSE_ID_AES_GLOBAL(36) |
| RCW | LICENSE_ID_RCW | LICENSE_ID_RCW_GLOBAL(8) |
| RCTB | LICENSE_ID_RCTB | LICENSE_ID_RCTB_GLOBAL(6) |
| BSD/LCA | LICENSE_ID_BSD_LCA | LICENSE_ID_BSD_LCA_GLOBAL(3) |
| DOW | LICENSE_ID_DOW | LICENSE_ID_DOW_GLOBAL(9) |
| TLA | LICENSE_ID_TLA | LICENSE_ID_TLA_GLOBAL(15) |
| MAI | LICENSE_ID_MAI | LICENSE_ID_MAI_GLOBAL(28) |
| LAEB/RAEB | LICENSE_ID_LAEB_RAEB | _GLOBAL(31) |
| 超速告警 | LICENSE_ID_OVER_SPEED(16) | 同 |
| C-NOA/HPP/AVP/众包 | 各自 license | — |
| NOA 变道/ALC/驾驶风格/ETC/收费站/XLA/动态车速/行车播报/限高/ADS灯 | 各自 license | — |
| 海外独有(ACC/避免右超/道路特征限速/限速联动/应急车道) | — | 各自 license |
per-tab License(AutopilotLicenseConfig)
preferenceToLicenseMap:开关 key → LicenseIDtabPreferenceToLicenseMap:Tab key → (tab) → LicenseID(ADS_MODE 三档分别 ACC/LCC/P2P_NOA)INTERESTED_LICENSE_IDS按 isOverseasRegion 分两套监听
License 状态(LicenseMaster)
LICENSE_AVAILABLE(1)/UNAVAILABLE(2)/HIDDEN(3)/NOA_P2P_VALID(4)。通过 MiCarLcsControlHelper.isLicenseFeatureVisible(id) 判断。
七、不用 hiddenFeatures(与其他模块不同)
⚠️ AutoPilot 不用 settings:hiddenFeatures/lemans_ece(与 Light/Lock/Driving 不同!)。HiddenFeaturesKeyListHelper 本模块未引用。ECE 隐藏全靠三层控制(编译期 flavor 选 Fragment + isEce 选 XML + license 裁剪)。
八、privacy 包(GDPR/PIPL 合规)
实际 XML 在 settingsSystem 模块(micar_autopilot_privacy_service_fragment.xml),Controller 在 AutoPilot/privacy 包。
| Controller | 信号 | 作用 |
|---|---|---|
| AutopilotAuthBtnToggleController | Guard.AUTO_VEHICLE_SERVICE_AUTH | 服务授权总开关(跳 CTA com.mi.car.defaultapps,P 挡 + 账号) |
| AutoPilotExperienceSwitchPrefController | AUTO_VEHICLE_EXP_IMPROVE_SWITCH | 体验改进计划(依附服务授权) |
| AutopilotPrivacyUtils + JobService | — | 构造 CTA Intent + JobScheduler 上传日志(生产 terms.api.xiaomiev.com) |
GDPR/PIPL 合规:数据采集明示授权,不按 isEce/isOverseas 分支(中外通用),与 ADAS 功能开关解耦。
九、对抗验证记录(AutoPilot,最完整)
| # | 常见误解 / 偏差 | 源码真相 |
|---|---|---|
| ① | ADAS 差异靠 sourceSet | ❌ dcddif/xcddif/global 三目录全空,靠三层控制 |
| ② | 用 hiddenFeatures/lemans_ece | ❌ 不用(与 Light/Lock/Driving 不同!全靠 license + isEce) |
| ③ | ECE 功能和国内差不多 | ❌ ECE 极简 65 行(UN-R152/R159/ISA,仅 3 项) |
| ④ | 用一套 License | ❌ CN/Global 两套独立 license(*_GLOBAL 系列) |
| ⑤ | ADS_MODE 是智驾模式 | ✅ ACC/LCC/NOA 三档总闸(555 行最复杂 Controller) |
| ⑥ | APA/AVP/HPP 一个功能 | ❌ 三层:APA(现场)/AVP(代客)/HPP(记忆) |
| ⑦ | MAI 是手动接管 | ❌ 误加速抑制(Mis-Acceleration Inhibition) |
| ⑧ | BSD 和 LCA 两个信号 | ❌ 复用同一信号 LCA |
| ⑨ | 超速告警一个实现 | ❌ 4 套平台分支(ECE/海外/L2/普通) |
| ⑩ | AES = Automated-Valet-Parking | ❌ 注释笔误,实际 Autonomous Emergency Steering |
| ⑪ | RCTASwitch 读 RCW 信号 | ❌ 注释错误,实际读 RCTAB 信号(且 XML 注释掉) |
| ⑫ | Orin 只有一种 | ✅ 单 84 TOPS / 双 508 TOPS |
| ⑬ | AEB 受 License 控制 | ❌ AEB/FCW/LDW 由 ADD 高配配置字控(L2 强标例外) |
| ⑭ | NavMileage 是车控 | ❌ NoaMileageProgress 是网络请求(10 分钟轮询) |
| ⑮ | HeightLimit 所有车都有 | ❌ 仅 KunLun(SUV 可升降,按车型算标准车高) |
| ⑯ | ShortRangeObstacle 在 AutoPilot XML | ❌ 跨模块(定义 AutoPilot,挂载 Driving XML) |
| ⑰ | ELK 国内外一样 | ❌ 国内 3 档 Tab / 海外 Switch |
| ⑱ | privacy 在 AutoPilot XML | ❌ XML 跨模块在 settingsSystem |
| ⑲ | CarConfigManager 承载智驾配置 | ❌ 仅门把手类型;智驾主配置在 MiCarSettings |
| ⑳ | L2 强标靠配置字 | ✅ 靠 getVehicleSuit() 匹配 8 种 suit(GB 法规强制) |
十、可信度
| 结论 | 可信度 |
|---|---|
| 3 XML 对比、60 Controller 分类、三层控制 | 🟢 代码结构 Agent + 地区法规 Agent 互证 |
| ADAS 功能全集(NOA/泊车/AEB/车道/后向/限速) | 🟢 ADAS 功能 Agent |
| License 体系、ECE 法规、车型矩阵 | 🟢 地区法规 Agent |
| AutoPilot 信号域(254-495 行)、27 不可用原因、枚举 | 🟢 信号梳理 Agent(全量统计,含 Helper 类) |
AutoPilot 模块 4 个 Agent 全部成功,高度互证,可信度整体 🟢。
补充对抗验证(信号梳理 Agent)
| # | 偏差 | 真相 |
|---|---|---|
| ㉑ | PILOT_CONTROL/NOA_CONTROL 是智驾总开关 | ❌ 占位别名(0 引用),实际用 ADS_MODE |
| ㉒ | Orin 只有单/双两种 | ❌ 还有 DAC_J3_DRIVING(征程3,默认) |
| ㉓ | DMS 信号在 Driving 域 | ❌ 定义在 AutoPilot 域,由 micarDrivingSettings 跨模块使用 |
| ㉔ | HPP 引用 5 次 | ❌ 实际 20 次(早期 grep 漏 Helper 类,HPP 是泊车生态核心枢纽) |