找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2999|回复: 0
打印 上一主题 下一主题
收起左侧

RDA5856 IOT代码手册

[复制链接]
跳转到指定楼层
楼主
ID:403439 发表于 2018-9-28 03:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.    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:
此文件包含了蓝牙免持设备的代码,以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:
此文件包含了一些蓝牙基本功能的代码,如蓝牙激活关闭,蓝牙查找设备,主动连接断开设备,profile的消息汇总等,设备的通用数据结构也在这里定义,可以通过target\5856_nolcd\include目录下的tgt_app_cfg.h文件,将宏APP_SUPPORT_BLUETOOTH置1来打卡蓝牙功能

二.    蓝牙代码结构说明
每个profile源文件均由若干API和一个消息处理函数组成,API为提供给用户使用的功能接口,消息处理函数内处理的消息为蓝牙库上报给APP的一些消息,用户可在这些消息处理代码里增加自己的处理函数。
每个profile头文件里定义了一些关键数据结构,这些数据结构是根据蓝牙库上报的内容来定义的,用户不能自行修改,否则会导致运行出错。
三.    API及消息说明
1.    HFP
API说明:
void app_connect_hfp(t_bdaddr *pAddr)
作用:发起一个HFP连接请求
参数:pAddr 目标蓝牙设备地址
---------------------------------------------------------------------------------------------------------------------
void app_disconnect_hfp(t_bdaddr *pAddr)
作用:发起一个HFP断开连接请求
参数:pAddr 目标蓝牙设备地址
---------------------------------------------------------------------------------------------------------------------
void app_hfp_call_answer_req(t_bdaddr *pAddr, u_int8 call_status)
作用:当HFP有电话来时,用来回复是否要接听
参数:pAddr目标设备蓝牙地址
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)
作用:发起一个通话请求
参数:pAddr 目标设备蓝牙地址
      call_type 请求通话类型,HFP_CALL_REQ_REDIAL为直接重拨最后一次通话的号码,此时phone_number参数无用;HFP_CALL_REQ_OUTGONING为拨打指定电话号码,phone_number为要通话的对方号码
      phone_number 要通话的对方号码   
---------------------------------------------------------------------------------------------------------------------
void app_hfp_get_adp_info_req(void)
作用:请求获取蓝牙中间层数据,若获取成功,则蓝牙库会上报一个RDABT_HFP_ADP_INFO_MSG消息
参数:无
---------------------------------------------------------------------------------------------------------------------

消息说明:
RDABT_HFP_CONNECTED_IND_MSG
此消息说明有设备HFP连接成功,用户可使用hfp头文件里定义的RDABT_HFP_MSG_INFO结构来获取消息参数,msg_param在不同的消息里有不同的意义,在此消息里,msg_param里存放了状态值,表示连接是否成功,正常连接成功的值为RDABT_NOERROR,其他返回值参见bt.h头文件定义。
hfp_addr里存放了连接设备的蓝牙地址。
typedef struct
{
        t_bdaddr hfp_addr;
        u_int32 msg_param;
}RDABT_HFP_MSG_INFO;
---------------------------------------------------------------------------------------------------------------------
RDABT_HFP_ACL_DISCONNECT_IND_MSG
此消息说明有设备HFP连接断开,用户可使用hfp头文件里定义的RDABT_HFP_MSG_INFO结构来获取消息参数,hfp_addr里存放了断开设备的蓝牙地址
---------------------------------------------------------------------------------------------------------------------
RDABT_HFP_CALL_STATUS_IND_MSG
此消息说明有电话信息,hfp_addr里存放了设备的蓝牙地址,msg_param里存放了电话信息,定义如下
#define BT_CALL_STATUS_NONE             0x0000
表示没有电话状态
#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
此消息说明中间层数据已上报,数据格式如下
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是当前已连接设备的列表,每个设备内存放了地址和电话状态信息,hfp_max_device_num是可提供连接的最大设备数,这个值与用户在target\5856_nolcd\include目录下的tgt_app_cfg.h文件里配置的max_device_nb值一致。

2.    A2DP
API说明:
void app_connect_a2dp(t_bdaddr *pAddr)
作用:发起一个A2DP连接请求
参数:目标蓝牙设备地址
---------------------------------------------------------------------------------------------------------------------

void app_disconnect_a2dp(t_bdaddr *pAddr)
作用:发起一个A2DP断开连接请求
参数:目标蓝牙设备地址
---------------------------------------------------------------------------------------------------------------------
void app_a2dp_get_adp_info_req(void)
作用:请求获取蓝牙中间层数据,若获取成功,则蓝牙库会上报一个RDABT_A2DP_ADP_INFO_MSG消息
参数:无
---------------------------------------------------------------------------------------------------------------------

消息说明:
RDABT_A2DP_SIGNAL_CONNECTED_CNF_MSG
此消息说明有设备A2DP连接成功,用户可使用a2dp头文件里定义的RDABT_A2DP_MSG_INFO结构来获取消息参数,msg_param在不同的消息里有不同的意义,在此消息里,msg_param里存放了状态值,表示连接是否成功,正常连接成功的值为RDABT_NOERROR,其他返回值参见bt.h头文件定义。
a2dp_addr里存放了连接设备的蓝牙地址。
RDABT_A2DP_SIGNAL_DISCONNECTED_IND_MSG
RDABT_A2DP_SIGNAL_DISCONNECTED_CNF_MSG
这两个消息说明有设备A2DP断开,区别在于RDABT_A2DP_SIGNAL_DISCONNECTED_CNF_MSG是RDA蓝牙发起断开请求的,RDABT_A2DP_SIGNAL_DISCONNECTED_IND_MSG是对方蓝牙发起断开请求的
RDABT_A2DP_MEDIA_DATA_IND_MSG
此消息说明有A2DP数据到达,参数是数据地址
---------------------------------------------------------------------------------------------------------------------
RDABT_A2DP_SEND_SEP_START_IND_MSG
此消息说明A2DP开始播放
---------------------------------------------------------------------------------------------------------------------
RDABT_A2DP_ADP_INFO_MSG
此消息说明库已上报A2DP中间层数据
3.    AVRCP
API说明:
void app_connect_avrcp(t_bdaddr *pAddr)
作用:发起AVRCP连接请求
参数:对方设备蓝牙地址
void app_disconnect_avrcp(t_bdaddr *pAddr)
作用:断开AVRCP连接请求
参数:对方设备蓝牙地址
void app_avrcp_get_adp_info_req ()
作用:获取AVRCP中间层数据,若获取成功则会收到RDABT_AVRCP_ADP_INFO_MSG消息
参数:无
void app_avrcp_send_key(u_int8 key)
作用:发送AVRCP键值
参数:键值,定义在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蓝牙发起的连接,RDABT_AVRCP_CONNECT_IND_MSG是对方蓝牙发起的连接
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_ADP_INFO_MSG
此消息说明收到了蓝牙库上报的中间层数据,可用RDABT_AVRCP_ADP_INFO结构来获取
---------------------------------------------------------------------------------------------------------------------
RDABT_AVRCP_PLAYER_STATUS_IND_MSG
此消息说明对方设备的播放器状态有了变化,当播放器开始播放或者在播放时暂停都会上报此消息
---------------------------------------------------------------------------------------------------------------------
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)
作用:发起SPP连接
参数:对方设备蓝牙地址
---------------------------------------------------------------------------------------------------------------------
void app_spp_disconnect_req(t_bdaddr *pAddr)
作用:断开SPP连接
参数:对方设备蓝牙地址
---------------------------------------------------------------------------------------------------------------------
void app_spp_get_adp_info_req(void)
作用:获取SPP中间层数据
参数:无
---------------------------------------------------------------------------------------------------------------------
void app_spp_send_data_req(RDABT_SPP_SEND_DATA_STRUCT *spp_sd_struct)
作用:发送SPP数据
参数:
typedef struct
{
    u_int8 *data;
    u_int16 data_length;
    u_int16 spp_port;
}RDABT_SPP_SEND_DATA_STRUCT;
data为要发送的数据buffer,data_length为要发送的数据的长度,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是对方设备发起的SPP连接,RDABT_SPP_CONNECTED_CNF_MSG为RDA蓝牙发起的连接
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_DISCONNECTED_IND_MSG
RDABT_SPP_DISCONNECTED_CNF_MSG
这两个消息都是表示SPP连接已断开,RDABT_SPP_DISCONNECTED_IND_MSG是对方设备发起的断开SPP连接,RDABT_SPP_DISCONNECTED_CNF_MSG为RDA蓝牙发起的断开连接
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_ADP_INFO_MSG
表示蓝牙库已上报SPP中间层数据,可用RDABT_SPP_ADP_INFO结构来获取
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_DATA_IND_MSG
表示收到了SPP数据,可用RDABT_SPP_SEND_DATA_STRUCT结构来获取,注意,使用完数据后要发送RDABT_SPP_FREE_DATA_REQ消息给蓝牙库以释放内存,否则会造成内存泄露
---------------------------------------------------------------------------------------------------------------------
RDABT_SPP_FLOWCTRL_IND_MSG
表示有流控,造成流控的原因一般是对方的接收buf满或者本地的buf满
流控消息参数有2个,SPP_FLOW_STOP表示要停止发送,SPP_FLOW_GO表示流控解除,可以继续发送数据
---------------------------------------------------------------------------------------------------------------------

5.    PBAP
同步电话本分为两步,第一步是要获取对方通讯录内电话本的条目数,第二步是真正去获取电话本内容

API说明:
void app_get_pbap_size(t_bdaddr *pAddr)
作用:获取对方设备上电话本的条目数
参数:对方设备蓝牙地址
---------------------------------------------------------------------------------------------------------------------
void app_get_call_recends_size(t_bdaddr *pAddr)
作用:获取对方设备上通话记录的条目数
参数:对面设备蓝牙地址
---------------------------------------------------------------------------------------------------------------------
void app_get_pbap_data(u_int32 size)
作用:获取对方设备上电话本内容
参数:要获取的条目数量,注意,获取的条目在库里是自动迁移的,例如第一次获取的数量为4,那么返回的就是手机上第一条到第四条的内容,第二次获取的数量也是4,那么返回的就是手机上第五条到第八条的内容
---------------------------------------------------------------------------------------------------------------------
void app_get_call_recends_data(u_int32 size)
作用:获取对方设备上通话记录内容
参数:要获取的条目数量,解释同上
---------------------------------------------------------------------------------------------------------------------
void app_pbap_deal_pb_data(u_int8 *data)
作用:解析获取到的电话本数据,用户可自行利用这个函数内部解析出的姓名和号码等信息
参数:蓝牙库上报的电话本数据地址
---------------------------------------------------------------------------------------------------------------------

消息说明:
RDABT_PBAP_GET_SIZE_IND
表示获取到了对方设备上电话本的条目
---------------------------------------------------------------------------------------------------------------------
RDABT_PBAP_DATA_IND
表示获取到了对方设备上电话本的内容
---------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

6.    MAP
API说明:
void app_get_map_size(t_bdaddr *pAddr)
作用:获取对方设备上的短信条目数
参数:对方设备蓝牙地址
---------------------------------------------------------------------------------------------------------------------
void app_get_map_data(u_int32 size)
作用:获取对方设备上的短信内容
参数:要获取的短信条数,具体解释同电话本
---------------------------------------------------------------------------------------------------------------------
Rdabt_map_info rdabt_map_deal_msglist_data(u_int8 *msg_data)
作用:解析蓝牙库上报的短信内容
参数:蓝牙库上报的短信内容地址
返回值:
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;
解析出的信息都填写在这个结构里,包括短信的收发时间,发送者姓名,发送者号码等
---------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

消息说明:
RDABT_MAP_GET_SIZE_IND
表示获取到了设备上的短信条目数
---------------------------------------------------------------------------------------------------------------------
RDABT_MAP_GET_DATA_IND
表示获取到了设备上的短信内容
---------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

7.    其他
API说明:
void app_bt_inquiry_req(unsigned char max_result)
作用:发起搜索设备请求
参数:要搜索的最大设备数
此函数使用了如下结构
typedef struct
{
    APP_MGR_DEVICE_INFO *inquiry_device_list;
    u_int8 max_inquiry_num;
    u_int8 inquiry_device_count;
}Rdabt_inquiry_data;
用户无需修改此结构,只需要在函数内给inquiry_device_list分配内存,同时将inquiry_device_list内存部分置0,然后填写max_inquiry_num即可。当搜索到设备时,会上报RDABT_DISCOVERY_RESULT_IND消息。
---------------------------------------------------------------------------------------------------------------------

消息说明:
        RDABT_DISCOVERY_RESULT_IND
    收到这个消息表示新搜索到一个蓝牙设备,用户可以使用消息参数内的结构体指针来获取设备名称,设备类型,设备地址等信息。设备信息会自动保存在inquiry_device_list里,它是一个单向链表。
---------------------------------------------------------------------------------------------------------------------

    RDABT_DISCOVERY_RESULT_CNF
    收到这个消息表示搜索已完成,用户需要在这里释放inquiry_device_list,否则会造成内存泄露。


全部资料51hei下载地址:
http://www.51hei.com/bbs/dpj-135991-1.html

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表