为 一加平板 Pro 用户在国际版 ROM 恢复国行手写笔的可用性。理论上也支持反向适配,但未经测试
- 一加平板 Pro (caihong) / OnePlus Pad 2 (rainbow)
- 一加智能手写笔 Pro / OnePlus Stylo 2
补全不同版本手写笔,第一次握手需要的固件。
姐姐我扒拉半天,发现主要问题应该来自 oplus_wireless_pen
模块,这个模块描述如下:
filename: /vendor/lib/modules/oplus_wireless_pen.ko
license: GPL v2
license: GPL v2
description: Wireless Pen Charger Cps8601
description: QTI Glink wireless pen driver
alias: i2c:cps-wls-charger
depends: panel_event_notifier,oplus_bsp_boot_projectinfo,pmic_glink
intree: Y
name: oplus_wireless_pen
vermagic: 6.1.68-android14-11-o-g2ba5638f614f SMP preempt mod_unload modversions aarch64
scmversion: g2ba5638f614f
注意到 cps8601
,这是一个 Qi 1.3
无线充电芯片,推测其是与手写笔充电 & 握手的关键组件。
在国行 ROM 下多次吸附并拔下手写笔,然后执行 dmesg
会看到相关日志:
[ 1615.603646] [cps8601]:irq_flag = 0x200
[ 1615.604179] [cps8601]:Rx attach!
[ 1615.680772] [cps8601]:irq_flag = 0x5
[ 1615.681306] [cps8601]:tx wakeup!
[ 1615.707303] [cps8601]:[error_attach_check_work_func] count 1
[ 1615.740387] [cps8601]:irq_flag = 0x8
[ 1615.791948] [cps8601]:irq_flag = 0x10
接下来执行 dmesg | grep cps8601
:
[ 1173.124104] [cps8601]:[cps_wls_get_ask_packet]get add_check
[ 1173.628240] [cps8601]:irq_flag = 0x20
[ 1173.629044] [cps8601]:receive ask pkt!
[ 1173.634582] [cps8601]:[cps_wls_get_ask_packet]get ble addr(956)
[ 1173.634606] [cps8601]:cps8601_valid_check: .. .. ..
[ 1173.635709] [cps8601]:[cps_wls_get_ask_packet]report 1
观察到 BLE addr
这个关键词,可以推测一定是握手的关键,接下来在 ROM 解包后搜索 cps8601
,找到 odm/firmware/wireless_pen/23xxx/cps8601_firmware.bin
。
经过对比两个 ROM 的文件夹名字不一样,推测这个可能影响到握手,交换 ROM 的 odm.img
后确实能成功连接手写笔。
编写 KernelSU
模块,完事 w