標題:
RDA5856 IOT代碼手冊
[打印本頁]
作者:
51hei嗚嗚
時間:
2018-9-28 03:39
標題:
RDA5856 IOT代碼手冊
一. APP藍牙代碼文件說明
APP代碼位于apps\ap_btspeaker目錄下,其中每個profile為一個單獨的.c和.h文件,目前支持的profile及版本列表為:HFP 1.5,A2DP ,AVRCP,SPP,PBAP,MAP,HID,OPP
具體介紹如下:
1. ap_a2dp.h,ap_a2dp.c:
此文件包含了藍牙立體聲音樂的代碼,以5856項目為例,若想使用此功能,需打開target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_A2DP置1。
2. ap_avrcp.h,ap_avrcp.c:
此文件包含了藍牙立體聲音樂控制播放的代碼,以5856項目為例,若想使用此功能,需打開target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_AVRCP置1。
3. ap_hfp.h,ap_hfp.c:
此文件包含了藍牙免持設(shè)備的代碼,以5856項目為例,若想使用此功能,需打開target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_HFP置1。
4. ap_spp.h,ap_spp.c:
此文件包含了藍牙模擬串口的代碼,以5856項目為例,若想使用此功能,需打開target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_SPP置1。
5. ap_pbap.h,ap_pbap.c:
此文件包含了藍牙同步電話本的代碼,以5856項目為例,若想使用此功能,需打開target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_PBAP置1。
6. ap_map.h,ap_map.c:
此文件包含了藍牙同步手機短信的代碼,以5856項目為例,若想使用此功能,需打開target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_MAP置1。
7. ap_bt_common.h,ap_bt_common.c:
此文件包含了一些藍牙基本功能的代碼,如藍牙激活關(guān)閉,藍牙查找設(shè)備,主動連接斷開設(shè)備,profile的消息匯總等,設(shè)備的通用數(shù)據(jù)結(jié)構(gòu)也在這里定義,可以通過target\5856_nolcd\include目錄下的tgt_app_cfg.h文件,將宏APP_SUPPORT_BLUETOOTH置1來打卡藍牙功能
二. 藍牙代碼結(jié)構(gòu)說明
每個profile源文件均由若干API和一個消息處理函數(shù)組成,API為提供給用戶使用的功能接口,消息處理函數(shù)內(nèi)處理的消息為藍牙庫上報給APP的一些消息,用戶可在這些消息處理代碼里增加自己的處理函數(shù)。
每個profile頭文件里定義了一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)是根據(jù)藍牙庫上報的內(nèi)容來定義的,用戶不能自行修改,否則會導致運行出錯。
三. API及消息說明
1. HFP
API說明:
void app_connect_hfp(t_bdaddr *pAddr)
作用:發(fā)起一個HFP連接請求
參數(shù):pAddr 目標藍牙設(shè)備地址
---------------------------------------------------------------------------------------------------------------------
void app_disconnect_hfp(t_bdaddr *pAddr)
作用:發(fā)起一個HFP斷開連接請求
參數(shù):pAddr 目標藍牙設(shè)備地址
---------------------------------------------------------------------------------------------------------------------
void app_hfp_call_answer_req(t_bdaddr *pAddr, u_int8 call_status)
作用:當HFP有電話來時,用來回復(fù)是否要接聽
參數(shù):pAddr目標設(shè)備藍牙地址
call_status是否接聽選項,HFP_CALL_REQ_REJECT表示拒絕接聽,HFP_CALL_REQ_ACCEPT表示接聽
---------------------------------------------------------------------------------------------------------------------
void app_hfp_call_req(t_bdaddr *pAddr, u_int8 call_type, u_int8 *phone_number)
作用:發(fā)起一個通話請求
參數(shù):pAddr 目標設(shè)備藍牙地址
call_type 請求通話類型,HFP_CALL_REQ_REDIAL為直接重撥最后一次通話的號碼,此時phone_number參數(shù)無用;HFP_CALL_REQ_OUTGONING為撥打指定電話號碼,phone_number為要通話的對方號碼
phone_number 要通話的對方號碼
---------------------------------------------------------------------------------------------------------------------
void app_hfp_get_adp_info_req(void)
作用:請求獲取藍牙中間層數(shù)據(jù),若獲取成功,則藍牙庫會上報一個RDABT_HFP_ADP_INFO_MSG消息
參數(shù):無
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_HFP_CONNECTED_IND_MSG
此消息說明有設(shè)備HFP連接成功,用戶可使用hfp頭文件里定義的RDABT_HFP_MSG_INFO結(jié)構(gòu)來獲取消息參數(shù),msg_param在不同的消息里有不同的意義,在此消息里,msg_param里存放了狀態(tài)值,表示連接是否成功,正常連接成功的值為RDABT_NOERROR,其他返回值參見bt.h頭文件定義。
hfp_addr里存放了連接設(shè)備的藍牙地址。
typedef struct
{
t_bdaddr hfp_addr;
u_int32 msg_param;
}RDABT_HFP_MSG_INFO;
---------------------------------------------------------------------------------------------------------------------
RDABT_HFP_ACL_DISCONNECT_IND_MSG
此消息說明有設(shè)備HFP連接斷開,用戶可使用hfp頭文件里定義的RDABT_HFP_MSG_INFO結(jié)構(gòu)來獲取消息參數(shù),hfp_addr里存放了斷開設(shè)備的藍牙地址
---------------------------------------------------------------------------------------------------------------------
RDABT_HFP_CALL_STATUS_IND_MSG
此消息說明有電話信息,hfp_addr里存放了設(shè)備的藍牙地址,msg_param里存放了電話信息,定義如下
#define BT_CALL_STATUS_NONE 0x0000
表示沒有電話狀態(tài)
#define BT_CALL_STATUS_INCOMING 0x0100
表示有來電
#define BT_CALL_STATUS_OUTGOING 0x0200
表示有去電
#define BT_CALL_STATUS_ALERT 0x0300
表示來電正在振鈴
#define BT_CALL_STATUS_ACTIVE 0x0001
表示電話已接通
#define BT_CALL_STATUS_END 0x0400
表示電話已掛斷
---------------------------------------------------------------------------------------------------------------------
RDABT_HFP_RING_IND_MSG
此消息說明有來電進入,正在振鈴
---------------------------------------------------------------------------------------------------------------------
RDABT_HFP_ADP_INFO_MSG
此消息說明中間層數(shù)據(jù)已上報,數(shù)據(jù)格式如下
typedef struct
{
t_bdaddr hfp_addr;
u_int16 hfp_call_status;
}RDABT_HFP_DEVICE_INFO;
typedef struct
{
RDABT_HFP_DEVICE_INFO *hfp_device_info_list;
UINT8 hfp_max_device_num;
}RDABT_HFP_ADP_INFO;
hfp_device_info_list是當前已連接設(shè)備的列表,每個設(shè)備內(nèi)存放了地址和電話狀態(tài)信息,hfp_max_device_num是可提供連接的最大設(shè)備數(shù),這個值與用戶在target\5856_nolcd\include目錄下的tgt_app_cfg.h文件里配置的max_device_nb值一致。
2. A2DP
API說明:
void app_connect_a2dp(t_bdaddr *pAddr)
作用:發(fā)起一個A2DP連接請求
參數(shù):目標藍牙設(shè)備地址
---------------------------------------------------------------------------------------------------------------------
void app_disconnect_a2dp(t_bdaddr *pAddr)
作用:發(fā)起一個A2DP斷開連接請求
參數(shù):目標藍牙設(shè)備地址
---------------------------------------------------------------------------------------------------------------------
void app_a2dp_get_adp_info_req(void)
作用:請求獲取藍牙中間層數(shù)據(jù),若獲取成功,則藍牙庫會上報一個RDABT_A2DP_ADP_INFO_MSG消息
參數(shù):無
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_A2DP_SIGNAL_CONNECTED_CNF_MSG
此消息說明有設(shè)備A2DP連接成功,用戶可使用a2dp頭文件里定義的RDABT_A2DP_MSG_INFO結(jié)構(gòu)來獲取消息參數(shù),msg_param在不同的消息里有不同的意義,在此消息里,msg_param里存放了狀態(tài)值,表示連接是否成功,正常連接成功的值為RDABT_NOERROR,其他返回值參見bt.h頭文件定義。
a2dp_addr里存放了連接設(shè)備的藍牙地址。
RDABT_A2DP_SIGNAL_DISCONNECTED_IND_MSG
RDABT_A2DP_SIGNAL_DISCONNECTED_CNF_MSG
這兩個消息說明有設(shè)備A2DP斷開,區(qū)別在于RDABT_A2DP_SIGNAL_DISCONNECTED_CNF_MSG是RDA藍牙發(fā)起斷開請求的,RDABT_A2DP_SIGNAL_DISCONNECTED_IND_MSG是對方藍牙發(fā)起斷開請求的
RDABT_A2DP_MEDIA_DATA_IND_MSG
此消息說明有A2DP數(shù)據(jù)到達,參數(shù)是數(shù)據(jù)地址
---------------------------------------------------------------------------------------------------------------------
RDABT_A2DP_SEND_SEP_START_IND_MSG
此消息說明A2DP開始播放
---------------------------------------------------------------------------------------------------------------------
RDABT_A2DP_ADP_INFO_MSG
此消息說明庫已上報A2DP中間層數(shù)據(jù)
3. AVRCP
API說明:
void app_connect_avrcp(t_bdaddr *pAddr)
作用:發(fā)起AVRCP連接請求
參數(shù):對方設(shè)備藍牙地址
void app_disconnect_avrcp(t_bdaddr *pAddr)
作用:斷開AVRCP連接請求
參數(shù):對方設(shè)備藍牙地址
void app_avrcp_get_adp_info_req ()
作用:獲取AVRCP中間層數(shù)據(jù),若獲取成功則會收到RDABT_AVRCP_ADP_INFO_MSG消息
參數(shù):無
void app_avrcp_send_key(u_int8 key)
作用:發(fā)送AVRCP鍵值
參數(shù):鍵值,定義在ap_avrcp.h中,常用的有OPID_PLAY,OPID_STOP,OPID_PAUSE
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_AVRCP_CONNECT_CNF_MSG
RDABT_AVRCP_CONNECT_IND_MSG
這兩個消息都是表示收到AVRCP連接,RDABT_AVRCP_CONNECT_CNF_MSG是RDA藍牙發(fā)起的連接,RDABT_AVRCP_CONNECT_IND_MSG是對方藍牙發(fā)起的連接
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_ADP_INFO_MSG
此消息說明收到了藍牙庫上報的中間層數(shù)據(jù),可用RDABT_AVRCP_ADP_INFO結(jié)構(gòu)來獲取
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_PLAYER_STATUS_IND_MSG
此消息說明對方設(shè)備的播放器狀態(tài)有了變化,當播放器開始播放或者在播放時暫停都會上報此消息
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_NOTIFICATION_IND_MSG
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_VENDOR_DATA_IND_MSG
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_BROWSING_DATA_IND_MSG
---------------------------------------------------------------------------------------------------------------------
4. SPP
API說明:
void app_spp_connect_req(t_bdaddr *pAddr)
作用:發(fā)起SPP連接
參數(shù):對方設(shè)備藍牙地址
---------------------------------------------------------------------------------------------------------------------
void app_spp_disconnect_req(t_bdaddr *pAddr)
作用:斷開SPP連接
參數(shù):對方設(shè)備藍牙地址
---------------------------------------------------------------------------------------------------------------------
void app_spp_get_adp_info_req(void)
作用:獲取SPP中間層數(shù)據(jù)
參數(shù):無
---------------------------------------------------------------------------------------------------------------------
void app_spp_send_data_req(RDABT_SPP_SEND_DATA_STRUCT *spp_sd_struct)
作用:發(fā)送SPP數(shù)據(jù)
參數(shù):
typedef struct
{
u_int8 *data;
u_int16 data_length;
u_int16 spp_port;
}RDABT_SPP_SEND_DATA_STRUCT;
data為要發(fā)送的數(shù)據(jù)buffer,data_length為要發(fā)送的數(shù)據(jù)的長度,spp_port為spp端口號,這個端口號在收到RDABT_SPP_CONNECTED_IND_MSG或RDABT_SPP_CONNECTED_CNF_MSG消息的時候會得到,用戶需要自行保存
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_SPP_CONNECTED_IND_MSG
RDABT_SPP_CONNECTED_CNF_MSG
這兩個消息都是表示有新SPP連接,RDABT_SPP_CONNECTED_IND_MSG是對方設(shè)備發(fā)起的SPP連接,RDABT_SPP_CONNECTED_CNF_MSG為RDA藍牙發(fā)起的連接
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_DISCONNECTED_IND_MSG
RDABT_SPP_DISCONNECTED_CNF_MSG
這兩個消息都是表示SPP連接已斷開,RDABT_SPP_DISCONNECTED_IND_MSG是對方設(shè)備發(fā)起的斷開SPP連接,RDABT_SPP_DISCONNECTED_CNF_MSG為RDA藍牙發(fā)起的斷開連接
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_ADP_INFO_MSG
表示藍牙庫已上報SPP中間層數(shù)據(jù),可用RDABT_SPP_ADP_INFO結(jié)構(gòu)來獲取
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_DATA_IND_MSG
表示收到了SPP數(shù)據(jù),可用RDABT_SPP_SEND_DATA_STRUCT結(jié)構(gòu)來獲取,注意,使用完數(shù)據(jù)后要發(fā)送RDABT_SPP_FREE_DATA_REQ消息給藍牙庫以釋放內(nèi)存,否則會造成內(nèi)存泄露
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_FLOWCTRL_IND_MSG
表示有流控,造成流控的原因一般是對方的接收buf滿或者本地的buf滿
流控消息參數(shù)有2個,SPP_FLOW_STOP表示要停止發(fā)送,SPP_FLOW_GO表示流控解除,可以繼續(xù)發(fā)送數(shù)據(jù)
---------------------------------------------------------------------------------------------------------------------
5. PBAP
同步電話本分為兩步,第一步是要獲取對方通訊錄內(nèi)電話本的條目數(shù),第二步是真正去獲取電話本內(nèi)容
API說明:
void app_get_pbap_size(t_bdaddr *pAddr)
作用:獲取對方設(shè)備上電話本的條目數(shù)
參數(shù):對方設(shè)備藍牙地址
---------------------------------------------------------------------------------------------------------------------
void app_get_call_recends_size(t_bdaddr *pAddr)
作用:獲取對方設(shè)備上通話記錄的條目數(shù)
參數(shù):對面設(shè)備藍牙地址
---------------------------------------------------------------------------------------------------------------------
void app_get_pbap_data(u_int32 size)
作用:獲取對方設(shè)備上電話本內(nèi)容
參數(shù):要獲取的條目數(shù)量,注意,獲取的條目在庫里是自動遷移的,例如第一次獲取的數(shù)量為4,那么返回的就是手機上第一條到第四條的內(nèi)容,第二次獲取的數(shù)量也是4,那么返回的就是手機上第五條到第八條的內(nèi)容
---------------------------------------------------------------------------------------------------------------------
void app_get_call_recends_data(u_int32 size)
作用:獲取對方設(shè)備上通話記錄內(nèi)容
參數(shù):要獲取的條目數(shù)量,解釋同上
---------------------------------------------------------------------------------------------------------------------
void app_pbap_deal_pb_data(u_int8 *data)
作用:解析獲取到的電話本數(shù)據(jù),用戶可自行利用這個函數(shù)內(nèi)部解析出的姓名和號碼等信息
參數(shù):藍牙庫上報的電話本數(shù)據(jù)地址
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_PBAP_GET_SIZE_IND
表示獲取到了對方設(shè)備上電話本的條目
---------------------------------------------------------------------------------------------------------------------
RDABT_PBAP_DATA_IND
表示獲取到了對方設(shè)備上電話本的內(nèi)容
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
6. MAP
API說明:
void app_get_map_size(t_bdaddr *pAddr)
作用:獲取對方設(shè)備上的短信條目數(shù)
參數(shù):對方設(shè)備藍牙地址
---------------------------------------------------------------------------------------------------------------------
void app_get_map_data(u_int32 size)
作用:獲取對方設(shè)備上的短信內(nèi)容
參數(shù):要獲取的短信條數(shù),具體解釋同電話本
---------------------------------------------------------------------------------------------------------------------
Rdabt_map_info rdabt_map_deal_msglist_data(u_int8 *msg_data)
作用:解析藍牙庫上報的短信內(nèi)容
參數(shù):藍牙庫上報的短信內(nèi)容地址
返回值:
typedef struct
{
char msg_time[MAP_LENGTH];
char msg_name[MAP_LENGTH * 2];
char msg_num[MAP_LENGTH];
u_int16 msg_handle;
}Rdabt_map_info;
解析出的信息都填寫在這個結(jié)構(gòu)里,包括短信的收發(fā)時間,發(fā)送者姓名,發(fā)送者號碼等
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_MAP_GET_SIZE_IND
表示獲取到了設(shè)備上的短信條目數(shù)
---------------------------------------------------------------------------------------------------------------------
RDABT_MAP_GET_DATA_IND
表示獲取到了設(shè)備上的短信內(nèi)容
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
7. 其他
API說明:
void app_bt_inquiry_req(unsigned char max_result)
作用:發(fā)起搜索設(shè)備請求
參數(shù):要搜索的最大設(shè)備數(shù)
此函數(shù)使用了如下結(jié)構(gòu)
typedef struct
{
APP_MGR_DEVICE_INFO *inquiry_device_list;
u_int8 max_inquiry_num;
u_int8 inquiry_device_count;
}Rdabt_inquiry_data;
用戶無需修改此結(jié)構(gòu),只需要在函數(shù)內(nèi)給inquiry_device_list分配內(nèi)存,同時將inquiry_device_list內(nèi)存部分置0,然后填寫max_inquiry_num即可。當搜索到設(shè)備時,會上報RDABT_DISCOVERY_RESULT_IND消息。
---------------------------------------------------------------------------------------------------------------------
消息說明:
RDABT_DISCOVERY_RESULT_IND
收到這個消息表示新搜索到一個藍牙設(shè)備,用戶可以使用消息參數(shù)內(nèi)的結(jié)構(gòu)體指針來獲取設(shè)備名稱,設(shè)備類型,設(shè)備地址等信息。設(shè)備信息會自動保存在inquiry_device_list里,它是一個單向鏈表。
---------------------------------------------------------------------------------------------------------------------
RDABT_DISCOVERY_RESULT_CNF
收到這個消息表示搜索已完成,用戶需要在這里釋放inquiry_device_list,否則會造成內(nèi)存泄露。
全部資料51hei下載地址:
http://www.torrancerestoration.com/bbs/dpj-135991-1.html
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1