Qualcomm 蓝牙耳机FAQ(22 )--SINK工程支持百分之一精度的电池电量显示功能实现

大家好! 欢迎登录大大通平台!

这篇博文给大家讲解的是“基于高通平台  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%的电池电量显示功能了。


是不是很简单呀? 这也是我最近实现的一个简单功能,没有做详细的测试,大家要是发现有什么问题,麻烦及时提出来,我会第一时间优化这块的问题点。

希望该博文,能对读者您有一点点的帮助。

关注大大通!多登录大大通!

关注我,后期会继续为大家更新新的知识!!!!!


 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

YUQI

YUQI

2021年7月22日
你好,按照你上面的教程做,最后没有效果是怎么回事?
qw

qw

2021年7月6日
你好,耳机如何知道手机支持哪种显示方式呢?