问题来源
客户新增 90PN 料号文件的读写需求,需要实现两个部分:
- 工厂产线生产时写入料号信息(已实现)。
- 售后网点售后时写入料号信息。
背景知识
客户售后网点使用 PhoneInfoTest 应用程序读写手机信息,目前 PhoneInfoTest 支持的命令如下:
1 | ## 整机 SSN eg. D8OKCT101847 |
备注:PhoneInfoTest 程序通过将 argv[1]
和 argv[2]
组合起来的 argv[1]*10 + argv[2]
的值,去查表,找到真正的命令,再去执行命令对应的 case 分支,从而实现不同命令做不同的操作的需求,具体请分析代码。
功能实现
新增 PhoneInfoTest 13 指令实现读写 90PN 文件。
1 | diff --git a/custom_files/vendor/qcom/proprietary/<Project>/diag/PhoneInfoTest/PhoneInfoTest.cpp b/custom_files/vendor/qcom/proprietary/<Project>/diag/PhoneInfoTest/PhoneInfoTest.cpp |
编译验证
单编模块,编译更快,编译完成之后,push 到手机中执行看效果,最后将 90PN 文件 push 出来,确认是否真的有写到。
1 | ## 配置 Android 工程 |
产线工具
前面有提到工厂产线生产时写入料号信息已经实现,这里也简单概述下,产线写 90PN 的相关实现逻辑。产线流水线有一个专门的写号站位,会将手机的很多信息统一写到手机的 NVRAM 中。这很多的信息中自然也包括 90PN 信息。而产线的工具实际上是调用高通开放的 API 接口实现和手机通信的,这个 API 接口其实就是 QXDM 工具中发送 cmd 是同样的东西。因此在验证阶段,我们用 QXDM 发送对应的 cmd 就可以实现产线工具同样的写 90PN 的效果。
写入 90PN 对应的 QXDM 指令是:Send_data 0x4b 0xc9 0xcc 0xff 12 <data>
,其中 data 有格式要求,data 的格式是,”一次发一个字符的 ASCII 码的十进制数,用空格隔开”。
倘若我们要往 90PN 中写入 Hello
字符,我们应该这么干:
- 查一下 ASCII 码表,看看
Hello
中的 5 个字符的十进制格式的 ASCII 码是多少?
查了下,分别是:72 101 108 108 111 - 接下里使用 QXDM 发送
Send_data 0x4b 0xc9 0xcc 0xff 12 72 101 108 108 111
。 - 使用
adb shell /data/data/PhoneInfoTest 13 0
查看是否写入成功。