07 · 速查卡(能量回收自定义 slider)

AI/新人工前必读一页纸。深入排障读 05 篇,台架复现读 06 篇。

1. propId 三件套

信号hexdec类型/范围关键值
BAN_REASON(禁用原因)0x6140757b1631614331INT32, area=00=NO_INHIBIT 可用
BRAKING_MODE(回收模式)0x614081201631617312INT32, area=03=ADVANCED(自定义);slider 可见性门控
ENERGY_REGENERATION_LEVEL(强度值)0x6140757d1631614333INT32, area=0, 0~100slider 本体;恒等映射(offset=0,无 100-x)

权威获取法:javap -constants 读 MiCarPropertyIds$DrivingCtrl.class 编译期常量;或运行时日志 >>> Done set propVal: N to propId: 0x6140757d 实证。

2. 关键文件与行号锚点

代码仓:/home/zbc/car/fuben23_micarsettings/MiCarSettings。 行号以 rls-xcd-u-mp-26-v7.0 HEAD e8b5a7ba5(V3/PS4 最终内容) 为准; 修复前基底 f63fe1cdc 单独标注(dev 分支 1~3 行漂移,以符号定位为准)。

锚点e8b5a7ba5(V3)f63fe1cdc(修复前)
SliderPreference.java MAX_PROGRESS_CHANGE_TIMES=1:81:81
SliderPreference.java onValueChange(listener 内):202;先计数 :229-231(mSliderValue != getIntSliderValue(value)),后下发门 >1 :234:221-227:>0 门先下发、无条件 mProgressChangeTimes++ 后置 :225
SliderPreference.java onStopTrackingTouch → 调 onSliderStopTrackingTouch:169 / :174同区域
SliderPreference.java alignAdjustProgress(取整核心):336;三门 roundup && !isIgnoreClick() && ==MAX :345-346;先 slider.setValue :357,再手动回调 :360:325;条件 <= MAX :327;先回调 :334、后 setValue :336
SliderPreference.java onSliderProgressChanged / 内调 syncValueInternal:364 / :372:339 区域
SliderPreference.java onSliderStopTrackingTouch(松手兜底终值):384(force 兜底 :397):359
SliderPreference.java syncValueInternal / callChangeListener / 回滚分支:995 / :1006 / :1009:970
SliderPreference.java setValueInternal(mSliderValue 覆盖点):931(:933-934)同区域
SliderPreference.java setValueRoundUp:510:485
IFusionSlider.kt isIgnoreClick() 默认 false(V3 新增接口):54-56不存在
MiCarIconSlider.kt override 透传组件库(V3 新增):64-67不存在
MiCarSlider.kt override 透传组件库(V3 新增):40-43不存在
MiCarIconSeekBarPreference.java onSliderProgressChanged / updateThumbText:113 / :121(用参数);无参旧版保留于 :124-126:113 / :115(无参读 mSlider=旧值)
BrakingStrengthPreferenceController.java setValueRoundUp(true)+SLIDER_NORMAL:112-113:112
同文件 BRAKING_MODE==ADVANCED 可见性门控:199-203:199-202
CustomEnergyRecoveryStrengthController.kt 同款配置:58-59:58
MainCustomEnergyRecoveryStrengthController.kt 同款配置:60-61:60-61
BaseVehicleProgressPrefController.java propValToProgress/progressToPropVal(恒等):142 / :153:142 / :153
MiCarPropertyIds.java BRAKING_MODE / ENERGY_REGENERATION_LEVEL / BAN_REASON:993 / :995 / :997:993 / :995 / :997
CustomSteeringModeFragment.java mach 移除 M1 页能量回收项:225-226:225-226
MiCarSettings.java isCustomEnergyRecoveryEnabled=isLuxOrMann:1204-1206:1204-1206
RoofSunShadeSliderPreference.kt 同款「回调读当前值」旧写法(未开取整,不触发):152-155(观察)同

3. 日志签名速查(logcat)

签名含义
CarSettings: >>> Done set propVal: N to propId: 0x6140757dApp SET 下发完成(N=实际写车值)
CarSettings-SliderPreference: onStartTrackingTouch() ... mSliderValue = N触摸开始,N=组件内部当前值
onStopTrackingTouch() ... mSliderValue = N触摸结束;start/stop 同毫秒=轻触
onSliderStopTrackingTouch() ... mOriginProgress:0.0, slider.getValue():M.0松手兜底;M≠mSliderValue 即被取整改写
CarSettings-MiCarIconSeekBarPreference: updateThumbText() ... progress=N, thumbText=N数值标签刷新(修复后带参数)
* Ignore propId: 0x6140757d feedback: N防回弹拦截(回显自愈被屏蔽)
`CarPropertyCacheManager: onChangeEvent id=0x6140757d … v=N`
onDataVerifyFailed propId: 0x..., propVal: NSET 后回读校验失败,UI 回滚(台架 vehicled 不持久特征)
milogcat CARSIGNAL(3-MW):prop client set vals : prop : 6140757d ... int32_values : [N] / pub p=0x6140757d,a=0,v=NApp→中间件段透传对账(set↔pub 逐值应相等)
MCU 方向:send to pps ok, n=7, d=[202,166,165,47,2,0,X]d[3]=47 是常量字段(175/175 恒 47,初版报告误读为强度值,已证伪);末字节 d[6]=App 下发值+1 = MCU 透传跟踪锚点(12/12 逐 ms 样本吻合,相邻包差值=SET 差值,非序号);CARSIGNAL 止于 10:58:01.77,不覆盖 67→70 段(该段属合理外推)

milogcat 位置:bugreport 内 FS/data/milog/milogcat/CARSIGNAL/milogcat(目录文件);主 txt 里只有空壳 section。

4. 取整公式一行版(V3 最终)

step=10;余数≥5 进位(half-up:67→70, 33→30, 45→50)
触发条件(V3,SliderPreference.java:345-346):mIsRoundUpWhenClick && !slider.isIgnoreClick()
  && mProgressChangeTimes == 1 —— step=10、余数≥5、恰好 1 次 int 变化、且组件库非 ignoreClick(GT 不取整)
不触发:拖动(>1 次)/ 摸 thumb 未拖(0 次)/ GT 主题任何点击(库强制 ignoreClick=true)
关键时序(V2 起):计数先于下发(:229-231→:234);先 setValue(:357)再手动回调刷新(:360),无原值泄漏帧
修复前→后:MiCarIconSeekBarPreference.updateThumbText() 无参读旧值 → updateThumbText(progress) 立即跟随(:121)

5. 定界流程(值不一致先别慌,逐段对账)

flowchart TD
    A[slider 显示值 ≠ 别处显示值] --> B[① App SET 值: grep 'Done set propVal' 主 txt]
    B --> C{SET 值 = 用户设定值?}
    C -- "不等(如 67→70)" --> D["App 取整改写<br/>查 onSliderStopTrackingTouch getValue()<br/>与 mProgressChangeTimes 计数"]
    C -- 等 --> E[② 中间件 pub 值: CARSIGNAL grep 'pub p=0x6140757d']
    E --> F{pub = SET?}
    F -- 不等 --> G[中间件/发布限速方向]
    F -- 等 --> H[③ 下游订阅端: BatteryHandler mValue / 雷达图日志]
    H --> I{下游值 = pub?}
    I -- 不等 --> J[下游消费端方向]
    I -- 等 --> K["视觉滞留方向: 对照视频帧与 updateThumbText 日志<br/>(setValue 前后回调读旧值)"]

6. 常见误判警示(全都实踩过/证伪过)

  1. ❌ 别再提 100-x 反转(JarviX 初版论断)——propValToProgress/progressToPropVal 恒等(offset=0), CARSIGNAL set↔pub 逐值相等,双重证伪。
  2. ❌ 别去 MiCarX 组件库找取整逻辑——取整在 Settings 仓 base/settingsBaseUi/SliderPreference.java; 「3.2.4 称已修 → 3.2.6 仍在」之谜 = 修错了层,组件库升级对该半边天然无效。
  3. ❌ 检索只 grep .java——controller 大量是 .kt,必须双扩展名。
  4. ❌ 把 d=[202,166,165,47,...] 的 d[3] 当能量回收强度透传证据——175 条恒 47,是常量字段(已证伪); 正确锚点是末字节 d[6]=下发值+1(SET:47→d[6]=48 同毫秒,12/12 吻合)。
  5. ❌ 台架上让 App 自己 SET BRAKING_MODE=3——vehicled 不持久写入,必回滚(onDataVerifyFailed); 只能 mock 注入。(2026-10-13 修订,mach 限定):settings put GLOBAL vehicle_mock_data 1 后 App 自己 SET 生效不回滚(点「自定义」cache v=3 实证);该开关只管写值下行,信号仍须注入。
  6. ❌ GT 主题「摸 thumb」按视觉位置下针——视觉/触摸错位 ~96px,极易误点轨道(误触放大器,待立项)。
  7. ❌ fermi(A17)上装 v7.0(A14)包——NoSuchFieldError: ADVANCE_MEDIA_T_UUID 起即崩; A17 验证用 dev 分支 xcd_cn_a17 包。
  8. ❌ 「松手不停在拖动值 = 中间件丢值」——中间件仅 ≤150ms 发布限速,稳态逐值相等;先查取整。
  9. ❌ GT 主题「点轨道不跳值/点不动」当卡死或「不响应」报 bug——那是组件库 GT 强制 ignoreClick=true 的特性(点轨道=就地 grab + 按压动画,无值变化,08 篇 §3.4),叠加 2026-10-13 产品裁决「GT 只支持拖动」与 V3 取整关闭,属设计行为;对照组按键背光亮度 (不开取整)在 GT 同样点不动且无抖动(05 篇 §9.3)。
  10. ❌ 台架上验证「计数/时序」类回归——vehicled 不持久走回滚分支(:1009),mSliderValue 不被覆盖,台架物理上不可复现(06 篇坑 #7);须正式环境包或计数日志。

7. 历史工单与修复索引

单号/编号一句话状态
N801PROB-86420非整十数点击按四舍五入跳到整十关单 By Design(点击取整=设计行为,修复必须保留兼容;2026-10-13 产品裁决重申:普通主题点击必整十)
N801PROB-132401GT 主题 slider 显示值与中控不对应定案 high;三轮修复史(05 篇 §9):V1(原案)→V1 回归(连续拖动松手被取整,计数后置被 mSliderValue 覆盖)→V2(PS3 计数前置)→第三轮 GT 点击抖动(==1 门被按下微抖随机击穿)→V3(PS4 加 !isIgnoreClick() 门,GT 关取整)。同一 Change-Id I4a34b69c…766e,Gerrit dev=387202 / rls=387204,当前 PS4,查询时点 2026-10-13 仍 NEW;本地 rls commit e8b5a7ba5
残留-GT 错位GT 主题 slider 视觉/触摸错位 ~96px待立项(组件库 GtSliderThemeDelegate 方向;组件库侧立项将引用 08 篇);micarx 反馈「升级到 3.2.7」,截至 10-13 未发布
残留-RoofSunShade同款旧写法未修(无取整不触发)观察(RoofSunShadeSliderPreference.kt:152-155)
残留-净零位移往返 53→54→53 误判点击(理论级)不处理(产品裁决否决净位移方案,05 篇 §9.4)

分析产物:/home/zbc/下载/test/车机JIRA/jira-data/N801PROB-132401/analysis/(root-cause.md / review.json / frames f_01~f_15)。