TWS耳機電量在手機上同步顯示方法

出處: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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章