这篇博文给大家讲解的是“基于高通平台 SINK工程该如何实现支持百分之一精度的电池电量显示功能”,希望大家喜欢,并多多指教!!!
在sink工程上,之前大家在电池电量的显示功能上基本都是采用柱状型的显示,柱状的显示都是走的标准化AT COMMAND中的HFP命令AT+IPHONEACCEV指令。
HFP命令AT+XAPL
- 描述:允许通过耳机自定义AT命令
- 发起者:耳机
- 格式:AT+XAPL=[vendorID]-[productID]-[version],[features]
- 参数:
- vendorID: 标识生产商的vendor ID的十六进制表示,但是没有0x前缀
- productID: 标识生产生的product ID的十六进制表示,但是没有0x前缀
- version: 软件的版本
- features: 用10进制标识的位标识:
- 1 = 耳机支持电池电量报告
- 2 = 耳机暂停或者正在充电
- 其他值保留
- 例子: AT+XAPL=ABCD-1234-0100,3
- 响应: +XAPL=iPhone,[features]
HFP命令AT+IPHONEACCEV
- 描述:报告耳机的状态变更
- 发起者:耳机
- 格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2 ],[val2 ],...
- 参数:
- Number of key/value pairs : 接下来参数的数量
- key: 被报告状态变化的类型
- 1 = 电量等级
- 2 = 暂停状态
- val: 更改的值
- Battery events:0-9之间数字的字符串 A string value between '0' and '9'.
- Dock state: 0 = undocked, 1 = docked.
- Example: AT+IPHONEACCEV=1,1,3
从上描述可以看出,柱状显示支持最大的精度就是10%,而在高通平台上往往我们都用的是6段。
自从前两年开始,iphone手机支持了精度1%的电量显示图标,这两年很多安卓的手机也跟随响应了这个需求,从而在用户的手中,更喜欢精度高的显示。
其1%的这个电量通知用的 AT 指令是 AT+BIEV:
描述:
HF Indicator
如果HF支持HF indicator,其会查看AG是否支持HF indicator。
如果HF和AG支持HF indicator特性,HF将发送AT+BIND=< HF supported HF indicators >通知HF侧支持的indicator,AG以OK应答。
当AG接收到HF告知的HF indicator特性,HF将发送AT+BIND=?请求AG侧支持的HF indicator。AG将会以+BIND和以OK结尾的应答。
当HF接收到AG支持的HF indicator,HF将会发送AT+BIND?命令确定HF目前使能的HF indicator。AG将会一次或多次以+BIND应答和以OK结尾的应答。
至此HF可能发送AT+BIEV命令告知AG其使能的HF indicator发生变化。
AG可以使用+BIND使能或者禁止任何HF indicator。
其柱状电量显示的实现方式,大家应该用的都是比较熟悉了,简单的描述就是动态的发送“AT+IPHONEACCEV 和 AT+XAPL”指令。
这里主要给大家描述一下在我们ADK6.4.2 Sink的工程中如何添加AT+BIEV的指令来实现精度1%的电量显示功能:
1、首先我们需要先找到或者自己封装一个AT+BIEV的发送函数到AG端,万幸的是,我们的默认ADK就给大家封装好了的。那就顺用咯。
2、其下就是需要将我们当前的电池电量值,化为当前电量的百分比。实际上也很简单,就是将当前电压值减去临界电压值后,再除以饱和电压减去临界电压的值。
其函数可以参考如下:
3、随后就需要不断循环的发送当前电量值,找到一个合适位置发出去就可以。我这里就是在void ATCommandPlayEvent ( sinkEvents_t id )函数下传出去(这里仅供参考)。
至于当前的电池电压,我们直接从结构体struct power_type 中的vbat里面取就可以了。
#include
#include
接着就可以直接发送AT+BIEV的指令了:
接着重新编译整个工程后,烧录到芯片里面,就可以看到精度为1%的电池电量显示功能了。
是不是很简单呀? 这也是我最近实现的一个简单功能,没有做详细的测试,大家要是发现有什么问题,麻烦及时提出来,我会第一时间优化这块的问题点。
希望该博文,能对读者您有一点点的帮助。
关注大大通!多登录大大通!
关注我,后期会继续为大家更新新的知识!!!!!
评论
YUQI
2021年7月22日
qw
2021年7月6日