CSR8670獲取來電號碼及開發流程

平臺:CSR8670

SDK:ADK4.1


場景:CSR8670作爲HF,當AG連接上後,獲取來電的號碼

結論:如果不關注流程的,很簡單,直接通過下面的設置並且Write Device就可以了。



不斷變化的需求:

我的原始需求並不是這樣,而是要把這塊業務能力抽象出來,提供產品需求上的支撐。一個場景就是來電之後,APP通過內部協議把電話號碼發送給設備,設備拿到號碼之後

可以選擇播放,也可以有其他的動作


流程:

爲了知道上圖中的那個設置到底幹了什麼,在網上沒啥資料可搜索的情況下,第一時間看官方的HFP相關的文檔,來電的時候是HFP profile的相關知識,這是基礎。


上圖是官方文檔,來電的時候猜測可能AG會嘗試建立語音連接,所以重點查看SCO和ALC的incoming connection過程,最後在這個流程下找到對應的開發實現,

流程圖如下:


這裏面查看一下應用層收到的HFP_SLC_CONNECT_CFM消息:

main.c中收到這個消息的代碼調用:

case HFP_SLC_CONNECT_CFM:
    sinkHandleSlcConnectCfm(conncfm);

sinkHandleSlcConnectCfm中對SLC做了setup操作,通過調用slcConnectionSetup,這裏面就調用了HfpCallerIdEnableRequest方法,打開這個方法的註釋,
大家會發現這個是發給AG的一個請求,請求對方告知caller id,也就是來電號碼了。如果AG允許了,系統會推送一個消息給應用層,消息id爲HFP_CALLER_ID_IND,
只要在這個case裏面拿到消息,就可以獲取到來電號碼了,當然也可以利用ADK提供的方法來播放號碼對應的語音了。

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