BT相关接口
#deviceio_test bluetooth
bt_server_open
蓝牙测试初始化,执行蓝牙测试前,先调用该接口。BLE的接收和数据请求回调函数的注册。注:BLE读数据是通过注册回调函数实现。当BLE连接收到数据主动调用接收回调函数。具体请参见 RkBtContent
结构说明和 rk_ble_register_recv_callback
函数说明。bt_test_set_class
设置蓝牙设备类型。当前测试值为0x240404。bt_test_get_device_name
获取本机设备名bt_test_get_device_addr
获取本机设备地址bt_test_set_device_name
设置本机设备名bt_test_enable_reconnect
使能A2DP SINK 和 HFP 自动重连功能。推荐紧跟01后调用bt_test_disable_reconnect
禁用A2DP SINK 和 HFP 自动重连功能。推荐紧跟在01后调用bt_test_start_discovery
扫描周围设备bt_test_cancel_discovery
取消8发起的扫描操作bt_test_is_discovering
是否正在扫描周围的设备bt_test_display_devices
打印扫描到的周围设备的信息bt_test_display_paired_devices
打印当前已配对的设备信息bt_test_get_paired_devices
获取当前已配对的设备列表bt_test_free_paired_devices
释放 13 中申请的,用于存放已配对设备信息的内存bt_test_pair_by_addr
和指定地址的设备配对,15 input FC:58:FA:29:37:35(Q9)bt_test_unpair_by_addr
取消和指定地址的设备配对,data:" 94:87:E0:B6:6D:AE "bt_test_source_auto_start
A2DP Source 自动扫描开始,选择17前,要开启一个BT Sink设备,该设备处于可发现并可连接状态。17功能会自动扫描BT Sink设备并连接信 号最强的那个设备bt_test_source_connect_status
获取 A2DP Source 连接状态bt_test_source_auto_stop
A2DP Source 自动扫描接口停止bt_test_sink_open
打开 A2DP Sink 模式bt_test_sink_visibility00
设置 A2DP Sink 不可见、不可连接bt_test_sink_visibility01
设置 A2DP Sink 不可见、可连接bt_test_sink_visibility10
设置 A2DP Sink 可见、不可连接bt_test_sink_visibility11
设置 A2DP Sink 可见、可连接bt_test_ble_visibility00
设置ble可见/可连接特性。visiable:0表示不可见,1表示可见。connect:0表示不可连接,1表示可连接。该接口仅适用于bsa(BSA only)bt_test_ble_visibility11
设置BLE可见可连接bt_test_sink_status
查询 A2DP Sink 连接状态bt_test_sink_music_play
反向控制设备播放bt_test_sink_music_pause
反向控制设备暂停bt_test_sink_music_next
反向控制设备播放下一曲bt_test_sink_music_previous
反向控制设备播放上一曲bt_test_sink_music_stop
反向控制设备停止播放bt_test_sink_set_volume
设置音量测试bt_test_sink_connect_by_addr
连接指定地址的设备,data: " 94:87:E0:B6:6D:AE "bt_test_sink_disconnect_by_addr
A2DP Sink 断开链接bt_test_sink_get_play_status
获取播放状态,会触发play position change 回调bt_test_sink_get_poschange
当前连接的设备,是否支持播放进度上报bt_test_sink_disconnect
A2DP Sink 断开连接bt_test_sink_close
关闭 A2DP Sink 服务bt_test_ble_start
启动BLE。设备被动连接后,收到“Hello RockChip”,回应“My name is rockchip”bt_test_ble_write
测试BLE写功能,发送134个‘0’-‘9’组成的字符串bt_test_ble_disconnect
断开BLE连接bt_test_ble_stop
停止BLEbt_test_ble_setup
停止BLE广播,该函数执行后,BLE变为不可见并且不可连接bt_test_ble_clean
bt_test_ble_get_status
得到目前BLE的连接状态bt_test_spp_open
打开SPP,设备处于可连接状态bt_test_spp_write
送数据,data:数据指针,len:数据长度bt_test_spp_close
关闭SPPbt_test_spp_status
获取SPP的连接状态bt_test_hfp_sink_open
并存方式打开HFP HF与A2DP SINKbt_test_hfp_hp_open
仅打开HFP HF功能bt_test_hfp_hp_accept
主动接听电话bt_test_hfp_hp_hungup
主动挂断电话bt_test_hfp_hp_redail
重播bt_test_hfp_hp_report_battery
从0到9,每隔一秒上报一次电池电量状态,此时手机端可看到电量从空到满的图标变化过程。注:有些手机不支持蓝牙电量图标显示bt_test_hfp_hp_set_volume
从1到15,每隔一秒设置一次蓝牙通话的音量,此时手机端可看到蓝牙通话音量进度条变化过程。注:有些手 机并不动态显示进度条变化,主动加减音量触发进度天显示,此时可看到设备成功设置了手机端的音量。比 如本身音量为0,该接口运行结束后,主动按手机音量‘+’按钮,发现音量已经满格bt_test_hfp_hp_close
关闭HFP 服务bt_test_hfp_hp_disconnect
断开HFP连接bt_test_obex_init
打开obex服务bt_test_obex_pbap_connect
打开pbap服务,并连接指定设备bt_test_obex_pbap_get_pb_vcf
获取联系人电话薄,结果存储在/data/pb.vcfbt_test_obex_pbap_get_ich_vcf
获取来电历史记录,结果存储在/data/ich.vcfbt_test_obex_pbap_get_och_vcf
获取拨出历史记录,结果存储在/data/och.vcfbt_test_obex_pbap_get_mch_vcf
获取未接来电历史记录,结果存储在/data/mch.vcfbt_test_obex_pbap_disconnect
关闭pbap服务,并断开连接bt_test_obex_close
关闭obex服务bt_server_close
BT接口测试
蓝牙基础接口
Q9的设备地址:FC:58:FA:29:37:35
Which would you like: 15 input FC:58:FA:29:37:35
BSA_trace 29@ 01/01 08h:36m:33s:716ms: BSA_SecBondInit
BSA_trace 30@ 01/01 08h:36m:33s:716ms: BSA_SecBond
Which would you like: BSA_trace 31@ 01/01 08h:36m:34s:647ms: bsa_sec_event_hdlr event:0
BSA_trace 32@ 01/01 08h:36m:34s:911ms: bsa_sec_event_hdlr event:6
BSA_trace 33@ 01/01 08h:36m:34s:912ms: BSA_SecSpCfmReplyInit
BSA_trace 34@ 01/01 08h:36m:34s:912ms: BSA_SecSpCfmReply
++++++++++ BT BOND BONDING: Q9, fc:58:fa:29:37:35 ++++++++++
BSA_trace 35@ 01/01 08h:36m:35s:805ms: bsa_sec_event_hdlr event:3
BSA_trace 36@ 01/01 08h:36m:35s:830ms: BSA_DiscStartInit
BSA_trace 37@ 01/01 08h:36m:35s:830ms: BSA_DiscStart
++++++++++ BT BONDED: Q9, fc:58:fa:29:37:35 ++++++++++
BSA_trace 38@ 01/01 08h:36m:38s:813ms: bsa_sec_event_hdlr event:1
BLE接口测试说明
1.手机安装第三方ble测试apk,如nRF Connnect
2.选择40 bt_test_ble_start
函数
3.手机蓝牙扫描并连接 " ROCKCHIP_AUDIO BLE "
4.连接成功后,设备端会回调 bt_test.cpp
中的 ble_status_callback_test
函数,打印"+++++
RK_BLE_STATE_CONNECT +++++",注意这里手机上蓝牙图标上没显示连接的BLE设备,要通过APP才看到,而且测试过,同一时间只能连接一台BLE设备(不管是什么协议)
5.执行如下函数,进行具体功能测试:
void bt_test_ble_write(char *data)
测试BLE写功能,发送134个‘0’-‘9’组成的字符串
Which would you like: 41
BSA_trace 58@ 01/01 09h:47m:23s:554ms: BSA_BleSeSendIndInit
BSA_trace 59@ 01/01 09h:47m:23s:554ms: send notification:
BSA_trace 60@ 01/01 09h:47m:23s:555ms: 0000: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 0123456789012345
BSA_trace 61@ 01/01 09h:47m:23s:556ms: 0010: 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 6789012345678901
BSA_trace 62@ 01/01 09h:47m:23s:557ms: 0020: 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 2345678901234567
BSA_trace 63@ 01/01 09h:47m:23s:558ms: 0030: 38 39 30 31 32 33 34 35 36 37 38 39 30 31 32 33 8901234567890123
BSA_trace 64@ 01/01 09h:47m:23s:559ms: 0040: 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 4567890123456789
BSA_trace 65@ 01/01 09h:47m:23s:560ms: 0050: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 0123456789012345
BSA_trace 66@ 01/01 09h:47m:23s:561ms: 0060: 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 6789012345678901
BSA_trace 67@ 01/01 09h:47m:23s:562ms: 0070: 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 2345678901234567
BSA_trace 68@ 01/01 09h:47m:23s:563ms: 0080: 38 39 30 31 32 33 890123
BSA_trace 69@ 01/01 09h:47m:23s:564ms: BSA_BleSeSendInd
void bt_test_ble_get_status(char *data)
测试BLE状态接口
Which would you like: 46
RK_ble_status_test: RK_BLE_STATE_CONNECT.
RK_ble_status_test: RK_BLE_STATE_DISCONNECT.
void bt_test_ble_stop(char *data)
停止BLE,停止后APP就搜索不到了
A2DP SINK接口测试说明
A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议,用于传输单声道,双声道音乐(一般在A2DP中用于stereo双声道),典型应用为蓝牙耳机。
谁发送音频数据谁就是Source,谁接收音频数据谁就是Sink,这里是Sink接口测试,也就是说,这时候,这个被测试设备就相当于成为了一个蓝牙音箱,被别的Source设备连接后,在Source设备上播放音乐,声音会从Sink设备播出,测试步骤如下:
1.选择bt_test_sink_open
函数:
Which would you like: 20
++++++++++++ BT SINK EVENT: idle ++++++++++
BSA_trace 123@ 01/01 10h:08m:30s:022ms: BSA_AvkEnableInit
BSA_trace 124@ 01/01 10h:08m:30s:022ms: BSA_AvkEnable
BSA_trace 125@ 01/01 10h:08m:30s:024ms: BSA_AvkRegisterInit
BSA_trace 126@ 01/01 10h:08m:30s:024ms: BSA_AvkRegister
BSA_trace 127@ 01/01 10h:08m:30s:026ms: BSA_AvkRegister
BSA_trace 128@ 01/01 10h:08m:30s:026ms: UIPC_Open ChId:7
BSA_trace 129@ 01/01 10h:08m:30s:026ms: uipc_avk_open
BSA_trace 130@ 01/01 10h:08m:30s:027ms: uipc_fifo_open enter FIFO:./bt-avk-fifo
BSA_trace 131@ 01/01 10h:08m:30s:027ms: BSA_AvkRegister
BSA_trace 132@ 01/01 10h:08m:30s:028ms: uipc_avk_open AVK channel opened
BSA_trace 133@ 01/01 10h:08m:30s:028ms: uipc_fifo_task thread started
BSA_trace 134@ 01/01 10h:08m:30s:030ms: uipc_fifo_task fifo opened
BSA_trace 135@ 01/01 10h:08m:30s:030ms: uipc_fifo_task read thread will now read fifo
BSA_trace 136@ 01/01 10h:08m:30s:034ms: BSA_AvkOpenInit
BSA_trace 137@ 01/01 10h:08m:30s:035ms: BSA_AvkOpen
BSA_trace 138@ 01/01 10h:08m:33s:040ms: BSA_AvkOpenInit
BSA_trace 139@ 01/01 10h:08m:33s:040ms: BSA_AvkOpen
BSA_trace 141@ 01/01 10h:11m:12s:184ms: BSA_DmSetConfigInit
BSA_trace 142@ 01/01 10h:11m:12s:184ms: BSA_DmSetConfig
++++++++++++ BT SINK EVENT: connect sucess ++++++++++
BSA_trace 143@ 01/01 10h:11m:16s:058ms: BSA_AvkGetElementAttrCmdInit
BSA_trace 144@ 01/01 10h:11m:16s:058ms: BSA_AvkGetElementAttrCmd
2.手机蓝牙扫描并连接"RockChip"
3.连接成功后,设备端会回调bt_test.cpp
中的bt_sink_callback
函数, 打印"++++++++++++ BT SINK EVENT:connect sucess ++++++++++"
4.打开手机的音乐播放器,播放歌曲:
++++++++ bt sink track change ++++++++
remote device address: 9c:5a:81:40:5a:ad
title: unknow
artist: unknow
album: unknow
genre:
num_tracks:
track_num:
playing_time:
++++++++++++ BT A2DP SINK STATE: started ++++++++++
++++++++++++ BT SINK EVENT: playing ++++++++++
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 0, song_pos: 0
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 0, song_pos: 0
++++++++++++ BT SINK EVENT: paused ++++++++++
++++++++++++ BT A2DP SINK STATE: suspended ++++++++++
BSA_trace 145@ 01/01 10h:11m:37s:249ms: BSA_AvkGetElementAttrCmdInit
BSA_trace 146@ 01/01 10h:11m:37s:250ms: BSA_AvkGetElementAttrCmd
++++++++++++ BT A2DP SINK STATE: started ++++++++++
++++++++++++ BT SINK EVENT: playing ++++++++++
BSA_trace 147@ 01/01 10h:11m:37s:279ms: BSA_AvkGetElementAttrCmdInit
BSA_trace 148@ 01/01 10h:11m:37s:279ms: BSA_AvkGetElementAttrCmd
++++++++ bt sink track change ++++++++
remote device address: 9c:5a:81:40:5a:ad
title: Mystery of Love
artist: Sufjan Stevens
album: Call Me By Your Name (Original Motion Picture Soundtrack)
genre:
num_tracks: 0
track_num: 0
playing_time: 249025
++++++++ bt sink track change ++++++++
remote device address: 9c:5a:81:40:5a:ad
title: Mystery of Love
artist: Sufjan Stevens
album: Call Me By Your Name (Original Motion Picture Soundtrack)
genre:
num_tracks: 0
track_num: 0
playing_time: 249025
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 1001
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 1038
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 2039
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 2055
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 3057
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 3075
++++++++ bt sink position change ++++++++
remote device address: 9c:5a:81:40:5a:ad
song_len: 249025, song_pos: 4077
song_len: 289973, song_pos: 257081
++++++++++++ BT SINK EVENT: paused ++++++++++
++++++++++++ BT A2DP SINK STATE: suspended ++++++++++
BSA_trace 165@ 01/01 10h:33m:05s:032ms: BSA_AvkGetElementAttrCmdInit
BSA_trace 166@ 01/01 10h:33m:05s:032ms: BSA_AvkGetElementAttrCmd
BSA_trace 167@ 01/01 10h:33m:05s:539ms: BSA_AvkGetElementAttrCmdInit
BSA_trace 168@ 01/01 10h:33m:05s:540ms: BSA_AvkGetElementAttrCmd
++++++++ bt sink track change ++++++++
remote device address: 9c:5a:81:40:5a:ad
title: unknow
artist: unknow
album: unknow
genre:
num_tracks:
track_num:
playing_time:
++++++++ bt sink track change ++++++++
remote device address: 9c:5a:81:40:5a:ad
title: unknow
artist: unknow
album: unknow
genre:
num_tracks:
track_num:
playing_time:
BSA_trace 169@ 01/01 10h:33m:10s:558ms: BSA_DmSetConfigInit
BSA_trace 170@ 01/01 10h:33m:10s:558ms: BSA_DmSetConfig
++++++++++++ BT SINK EVENT: disconnected ++++++++++
5.执行如下函数,进行具体功能测试:21-39
A2DP SOURCE接口测试说明
1.选择bt_test_source_auto_start
函数
2.设备会自动扫描身边的A2dp Sink类型设备,并连接信号最强的那个(在旁边打开一个蓝牙音箱,它能够连上蓝牙音箱)
3.连接成功后,设备端会回调bt_test.cpp
中的bt_test_source_status_callback
函数,打印"++++++++++++ BT SOURCE EVENT:connect sucess ++++++++++"
4.此时设备播放音乐,则音乐会从连接的A2dp Sink设备中播出
5.执行如下函数,进行具体功能测试:17-19
SPP接口测试说明
蓝牙串口是基于 SPP 协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输的一种设备。测试步骤如下:
1.手机安装第三方SPP测试apk,如 “Serial Bluetooth Terminal”
2.选择47 bt_test_spp_open
函数
3.手机蓝牙扫描并连接"RockChip"
4.打开第三方SPP测试apk,使用spp连接设备。设备连接成功后,设备端会回调bt_test.cpp
中的
bt_test_btspp_status_callback
函数,打印"+++++++ RK_BT_SPP_EVENT_CONNECT +++++"
5.执行如下函数,进行具体功能测试:47-50
- 48 测试SPP写功能。向对端发送“This is a message from rockchip board!”字串
Which would you like: 47
BSA_trace 27@ 01/01 08h:09m:53s:759ms: BSA_DgEnableInit
BSA_trace 28@ 01/01 08h:09m:53s:759ms: BSA_DgEnable
BSA_trace 29@ 01/01 08h:09m:53s:761ms: BSA_DgListenInit
BSA_trace 30@ 01/01 08h:09m:53s:761ms: BSA_DgListen
BSA_trace 31@ 01/01 08h:10m:42s:489ms: bsa_sec_event_hdlr event:0
BSA_trace 32@ 01/01 08h:10m:42s:652ms: bsa_dg_event_hdlr event:0
BSA_trace 33@ 01/01 08h:10m:42s:653ms: UIPC_Open ChId:11
BSA_trace 34@ 01/01 08h:10m:42s:653ms: uipc_cl_dg_open
+++++++ RK_BT_SPP_EVENT_CONNECT +++++
Which would you like: 48
BSA_trace 35@ 01/01 08h:11m:01s:488ms: DG outgoing Data:
BSA_trace 36@ 01/01 08h:11m:01s:488ms: 0000: 54 68 69 73 20 69 73 20 61 20 6d 65 73 73 61 67 This is a messag
BSA_trace 37@ 01/01 08h:11m:01s:489ms: 0010: 65 20 66 72 6f 6d 20 72 6f 63 6b 63 68 69 70 20 e from rockchip
BSA_trace 38@ 01/01 08h:11m:01s:490ms: 0020: 62 6f 61 72 64 21 board!
BSA_trace 39@ 01/01 08h:11m:01s:491ms: uipc_cl_dg_send_buf ChId:11 len:38
bt_test_spp_write failed, ret<0> != strlen(buff)<38>
Which would you like: 50
+++++++ RK_BT_SPP_STATE_CONNECT +++++
HFP接口测试说明
HFP(Hands-free Profile),让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号要视蓝牙耳机及电话是否支持。
1.选择 bt_test_hfp_sink_open
或 bt_test_hfp_hp_open
函数
2.手机蓝牙扫描并连接"ROCKCHIP_AUDIO"。注:如果之前测试SINK功能时已经连接过手机,此时应在手机端先 忽略该设备,重新扫描并连接。
3.设备连接成功后,设备端会回调 bt_test.cpp
中的 bt_test_hfp_hp_cb
函数,打印“+++++ BT HFP HP CONNECT+++++”。如果手机被呼叫,此时打印“+++++ BT HFP HP RING +++++”,接通电话时会打印“+++++ BT HFP AUDIO OPEN +++++”。其他状态打印请直接阅读 bt_test.cpp
中bt_test_hfp_hp_cb
函数源码。注:若调用了 bt_test_hfp_sink_open
接口,当设备连接成功后,A2DP SINK的连接状态也会打印,比如"++++++++++++ BT SINK EVENT: connect sucess ++++++++++"
4.执行如下函数,进行具体功能测试:51-67
总结
蓝牙的配对流程
从目前的测试结果来看,配对流程如下(个人猜想):
扫描→配对中(bonding)→bonded(已配对)→连接
问题:两台手机之间用蓝牙进行配对,一方向另一方发送了文件,这中间采用的是什么协议呢
BLE蓝牙
一般都是作为从设备的,不能作为主设备去连接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)