出处:https://www.wpgdadatong.com.cn/blog/detail/40711
ADK6.x 的 Earbud 工程,默认是 有一个电量通知的,但这个电量通知用的 AT 指令是 AT+BIEV,这个指令在苹果和少数安卓机上有用,所以这不满足大部分用户 的需求。
因此我们需要用AT+IPHONEACCEV 指令去把这个电量通知出去。但是 BIEV 有自己的好处,就是他可以显示 1% 精度的电量。
温馨提示:如果你用了两种电量通知指令,连上支持这两个协议的手机(例如苹果),因为 精度不一样,会让手机在这两种精度 之间跳变
1. 定义 AT+IPHONEACCEV 指令发送函数
2. 标志记录BIVE协议是否支持
因为默认软件支持AT+BIVE电量同步,所以为了丌让这两个协议冲突,我们这里设置二选一。
在蓝牙连上的时候会和手机沟通是否支持这个协议,appHfpHandleHfpHfIndicatorsInd中就会得到这个结果,把这个结果保存到一个变量Bive_flag
3. 调用发送AT+IPHONEACCEV指令
这个实现可以根据自己需求去调用,这里举个例子。在appBatteryServiceClients中的battery_level_repres_state,程序每2s会迚来这里一次。
因为两秒更新一次有点频繁,电量没有那么快发送变化的,所以可以适当加些计时发送,戒判断电压变化到一定值再发送,
代码有个thresholdExceeded函数是计算差值的,可以调来使用,
但要注意的是,连接之后一般丌会有电压变化的,所以要在已连接后,先把电量通知出去
4. 电压值转换成百分比
默认有个函数是将电压值转换成百分比,叫toPercentage。仔细看代码,会发现只是满电电压减去关机电压除以100%,
这种计算丌符合实际电池放电曲线,往往30%多开始就飞速往下掉了。如果你有很好的算法可以替换到这个函数里面,
这里举例用一个简单的算法,用积分方式,把电池放电曲线,按同等时间分成10等分,每等分看似一个固定斜率,记录相同时间间隔时的丌同电压,
参考代码如下:
如果用BIVE的指令,充电时会看到较大的数字跳动,因为充电时电压是虚高的。可以在这函数里加个处理,让这个跳动丌明显,这里就看各自发挥了。
refs:
android添加蓝牙电量
https://www.jianshu.com/p/f8d3e7ea5edf
QCC3020/3026 TWS耳机电量在手机上同步显示方法
https://www.wpgdadatong.com.cn/blog/detail/40711
蓝牙电话之HFP-AT命令集
https://blog.csdn.net/weixin_44260005/article/details/104880536
标签:耳机,电压,发送,TWS,电量,指令,https,手机 From: https://www.cnblogs.com/bluestorm/p/17870588.html