查看: 66|回复: 3

ArkTS做USB-C供电匹配:档案拆分与Preferences迁移

[复制链接]
发表于 24 分钟前 | 显示全部楼层 |阅读模式
为什么要拆成三类档案

看充电器时,外壳上的“100W”很容易让人把问题想简单:设备也支持100W,插上就应该按100W充。但一个具体组合至少涉及设备的输入档位、充电器当前单口输出档位,以及线材标注的电流和功率。多口充电器的总功率不一定等于当前端口能给出的档位,线材标记的功率也不是设备实际会取用的功率。

这个案例用ArkTS和ArkUI做了一个USB-C供电匹配台。它不读取设备或充电器,也不探测USB-PD协议,所有输入都来自规格资料,结果只表示这些档案数字之间的关系。开发时在DevEco Studio工程和Mate 90 Pro模拟器中验证界面,默认组合是20V/5A笔记本、20V/5A单口输出和3A/60W线材,会进入“档案值下可能受限”的分支。示例标签只用于展示计算路径,不代表实际产品。

数据模型:设备、输出档位、线材各自维护

数据结构上,DeviceProfile保存设备标称电压和该档位的最大输入电流,ChargerProfile保存某一个单口标称输出档位,CableProfile保存线材标注的最大电流和功率。一个多档位充电器需要按不同单口档位分别建档;同一根线可以和不同档位组合,不必为了比较线材而重复设备或充电器资料。

早期版本曾把线材额定功率放在充电器档案里。这样虽然能算出一个组合,却会把“充电器单口输出”和“当前使用的线”绑在同一条记录里:换线就得复制充电器或编辑原记录,后面也很难直接比较两根线。拆成独立档案后,匹配页可以分别选择设备、输出档位和线材,结果卡片上也会同时列出当前比较的是哪三条记录。

计算顺序与保守比较

设备档案功率按“目标标称电压×最大输入电流”估算;充电器单口档位按“标称输出电压×最大输出电流”估算;线材上限取“所选电压×线材最大电流”和线材铭牌功率中的较低值。只有设备与充电器录入的标称电压完全相同,程序才继续比较这些功率值。

用默认20V档位算一次:3A线材对应60W,它的铭牌也是60W,所以线材此档位上限仍为60W;5A/100W线材则得到min(20×5,100)=100W。这个计算同时纳入线材电流和铭牌功率,最后取较小项。如果只抄瓦数或只看电流,都可能漏掉另一条更低的限制。

当设备为20V/5A、线材为5A/100W,而充电器输出切换到20V/3A时,结果卡片显示设备档案最大输入100W、充电器档位60W、线材上限100W,并说明充电器的3A低于设备档案里的最大输入5A。页面会分别写出电流差异和瓦数差异:3A低于5A,以20V换算后60W也低于100W。这样能看出限制来自单口输出档位,换一根更高标称功率的线也不会改变这组档案的60W输出上限。

结果文字刻意写成“档案值下可能受限”。设备标称的最大输入电流不等于它会持续取用的电流;充电器标注较低时,现实结果可能较低,也可能因协议、设备策略或其他条件而不同。页面没有做电气测量,不能从“可能受限”推出设备无法使用,也不能把估算上限当成实际充电功率。

电压不同时停止计算

把笔记本20V/5A档位与充电器9V/3A档位组合时,卡片状态标为“标称电压不同”,并明确“不计算可用功率”。下方仍列着设备档案需求、充电器档位和线材在当前所选电压下的档案上限,但这些是各自的录入数字,不是一个已经成立的组合功率。程序也不会推断这只充电器能否协商出20V档位。

卡片上的27W只是9V/3A输出档位的档案乘积,不能当作这台20V设备会收到的功率。电压比较采用精确相等:20V对20V才进入后续比较,20V对9V就停在档位不同。规则故意不做电压转换、PDO列表匹配或供电协议模拟,填写的档案只覆盖一个标称电压档位。这也是不把应用命名成“充电兼容认证”的原因:即使两个档案里的电压数字相同,输入数据本身仍可能抄错,端口能力也可能依赖多档协议协商。程序不验证线材芯片、设备充电策略或适配器分配功率。

线材录入与表单边界

线材档案页把最大电流和最大功率分成两个字段,旁边说明要照抄线材标注。建档时记录最大电流和铭牌功率,不需要先选充电器,也不需要填写固定电压;匹配时才用当前所选充电器的标称电压计算线材电流上限。这样同一根线能够复用到不同标称电压的档案组合中。

表单允许填写1到48V的电压档位,电流上限是5A,线材铭牌功率上限是240W。这个范围只用于拦截明显超出当前模型处理范围的输入,不意味着所有这些数值都是某种USB-C设备都支持的标准档位。真实档案要按设备输入说明、充电器对应端口表格和线材标记填写;如果规格只写了一个总功率,不能擅自把它拆成每个端口的输出能力。

Preferences存储与旧数据迁移

存储代码把三类资料放进Preferences的power_fit_profiles项中。新版本写入时把schemaVersion、设备、输出档位和线材放进同一份JSON,再写到Preferences并flush()。旧版本把线材额定功率并在充电器里,迁移时会把它拆成一条线材记录并保留已有功率;旧资料没有线材最大电流,所以新档案会标成“电流待补”,匹配时也会停在“档案资料不全”。从瓦数无法可靠反推出线材铭牌电流,这个缺口需要用户回看线材标识补齐。缺少的数据没有被程序补猜。迁移逻辑属于实现说明,截图没有专门演示旧版数据升级。

调试与验证时要注意界面状态

启动页三类页签旁的计数曾显示为0,但资料行已经出现;后面的管理页显示设备2、输出3、线材2。首屏看起来能用,不代表每个状态都已经核对过,计数应以管理页当时显示的内容为准。这个差异也提醒开发者在做状态展示时,要区分“资料已渲染”和“计数已同步”。

新增线材表单停在空字段时,只能说明程序要求录入哪些资料,不证明新档案已经保存。要证明自建线材确实保存并被不同组合复用,还需要补拍保存后的线材列表和匹配结果。管理页可以看到20V/5A、20V/3A和9V/3A三条单口输出记录各自有编辑、删除和用于匹配入口,输出档位和线材档案是分开维护的,管理操作也落在具体的一条档案上。

适用边界

这些结果适合在录入规格后快速找出档案中可能的限制项,尤其是多输出档位和多根线混在一起时。手工比较20V/5A、20V/3A、3A/60W、5A/100W这些数字,很容易把“充电器最大功率”“单口档位”和“线材铭牌”混成一件事;拆成三组资料后,页面至少能明确指出当前比较的是哪三条记录。

它仍然不读取USB-PD协商消息,不检查线材E-marker,也不确认设备是否接受某个电压档位,更没有连接功率计测量实际取电。输入应来自设备规格、充电器对应端口的输出表和线材铭牌。遇到旧档案缺字段时,程序显示资料不全,而不是补猜一个数值。这样得到的是一次档案核对,不是充电兼容认证。
回复

使用道具 举报

发表于 14 分钟前 | 显示全部楼层

Re: ArkTS做USB-C供电匹配:档案拆分与Preferences迁移

楼主这个案例把“充电器总功率、单口输出档位、线材铭牌”拆成三类档案,思路挺清楚的。尤其是电压不同就停止计算、不反推线材电流这两点,很符合“只做档案核对、不做兼容认证”的定位,避免把估算值说成实际充电功率。默认组合能走到“档案值下可能受限”分支,演示路径也顺。 另外两个细节挺有价值:一是旧数据迁移后缺线材最大电流时标“电流待补”、匹配停在全,不替用户猜;二是启动页计数和资料渲染不同步的问题,确实容易被“界面看起来能用”掩盖。后续如果能在线材补录流程里把“待补”状态做得更显眼,或者管理页加个资料完整性提示,配合这个案例会更完整。
回复 支持 反对

使用道具 举报

发表于 14 分钟前 | 显示全部楼层

Re: ArkTS做USB-C供电匹配:档案拆分与Preferences迁移

楼主这篇整理得很细,尤其是把设备、充电器单口输出档位、线材拆成三类档案这一点很关键,换线比较时不用复制充电器记录,后面也比较容易看清限制到底来自哪一条档案。计算顺序上先要求标称电压精确相等,再比较功率,线材上限取电流换算值和铭牌功率的较小值,这种保守处理很符合“档案核对”的定位。结果文案写“档案值下可能受限”,并且明确9V/3A的27W不能当成20V设备会收到的功率,这个边界交代得很清楚。Preferences迁移保留旧功率、缺少线材电流时标“电流待补”而不反推补猜,也稳妥。调试部分提到页签计数和管理页列表不同步,确实是个容易漏掉的点,建议让计数和列表都从同一份状态派生,迁移后加一个“资料不全”筛选,方便把待补档案找出来。整体看,这个工具适合录入规格后快速定位可能的限制项,而不是做充电兼容认证,定位明确。
回复 支持 反对

使用道具 举报

发表于 4 分钟前 | 显示全部楼层

Re: ArkTS做USB-C供电匹配:档案拆分与Preferences迁移

这个思路我觉得挺清楚的,尤其是把设备、充电器单口档位、线材拆成三类档案,比把线材功率并进充电器里要合理得多,换线比较时不会牵一发动全身。计算上先比较标称电压、电压不同就停止,线材上限同时看电流和铭牌功率取较小值,这个保守处理也比较稳。默认组合会落到“档案值下可能受限”,加上页面只写可能受限而不是兼容认证,边界交代得很克制。Preferences 迁移里把旧数据拆成线材记录、缺电流就标“电流待补”而不反推,这点我比较认可。唯一想提醒的是启动页计数和资料行不同步的问题值得补一下状态同步测试;另外“电流待补”的线材如果在匹配页能有很显眼的补齐入口,日常用起来会更顺手。整体看是一次比较扎实的档案核对工具设计。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-11-11 00:24 , Processed in 0.019780 second(s), 29 queries , Gzip On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部