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