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
cncn/空国内(415 行全功能)
cneceECE(65 行极简)
globalglobal/其他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_SWITCHOFF/REMINDER/WARNING(EU ISA)
isOverseasRegion()INTELLIGENT_SPEED_ASSISTANCEOFF/DISPLAY/OVERSPEED
isL2SupportedDevice()(国内 L2)INTELLIGENT_SPEED_ASSISTANCEOFF/VISION/VISION_AUDIO
else(国内普通)NAVIGATE_VISION_OVER_SPEED_SETTINGSOFF/视觉/视觉+声音

二次确认:海外/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 LicenseGlobal License
AEB/FCW(ADD 配置)LICENSE_ID_AEB_FCW_GLOBAL(10)
LDW/LDP(ADD 配置)LICENSE_ID_LDP_LDW_GLOBAL(34)
ELKLICENSE_ID_ELKLICENSE_ID_ELK_GLOBAL(12)
AESLICENSE_ID_AESLICENSE_ID_AES_GLOBAL(36)
RCWLICENSE_ID_RCWLICENSE_ID_RCW_GLOBAL(8)
RCTBLICENSE_ID_RCTBLICENSE_ID_RCTB_GLOBAL(6)
BSD/LCALICENSE_ID_BSD_LCALICENSE_ID_BSD_LCA_GLOBAL(3)
DOWLICENSE_ID_DOWLICENSE_ID_DOW_GLOBAL(9)
TLALICENSE_ID_TLALICENSE_ID_TLA_GLOBAL(15)
MAILICENSE_ID_MAILICENSE_ID_MAI_GLOBAL(28)
LAEB/RAEBLICENSE_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 → LicenseID
  • tabPreferenceToLicenseMap: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信号作用
AutopilotAuthBtnToggleControllerGuard.AUTO_VEHICLE_SERVICE_AUTH服务授权总开关(跳 CTA com.mi.car.defaultapps,P 挡 + 账号)
AutoPilotExperienceSwitchPrefControllerAUTO_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 项)
用一套 LicenseCN/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 是泊车生态核心枢纽)