1、內核增加配置
make menuconfig -> Networking support -> Bluetooth subsystem support -->
進行選擇BT選項,至少選擇如下幾項:
CONFIG_BT=y
CONFIG_BT_RFCOMM=y
#
# Bluetooth device drivers
#
CONFIG_BT_HCIBTUSB=y
ONFIG_BT_HCIBFUSB=y
其它的根據平台特性增減
此內核是否配置成功,可以在代碼 system\bluetooth\bluedroid下的bluetooth.c文件
中加打印:
init_rfkill() 函數
如果沒有配置ok的話則:
snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id);
fd = open(path, O_RDONLY);
if (fd < 0) {
LOGW("open(%s) failed: %s (%d)\n", path, strerror(errno), errno);
return -1;
}
會打開文件失敗的。
2、android系統配置
build\target\board\generic下面的generic.mk增加:
BOARD_HAVE_BLUETOOTH := true
這個是由於編譯相關藍牙代碼時需要這個宏,請看:\system\bluetooth\android.mk
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
include $(all-subdir-makefiles)
endif
在 external\bluetooth 也同樣存在此宏起作用
3、啟動項修改 init.rc
system\core\rootdir下init.rc文件增加:
service hciattach /system/bin/hciattach -n -s 115200 /dev/ttyS2 bcm2035 115200
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
請放在 service bluetoothd /system/bin/bluetoothd -n 類似這種語句的后面任意位置即可
4、代碼修改
system\bluetooth\bluedroid下的bluetooth.c文件
這里由於在機頂盒上沒有電源管理這塊,所以對於power的操作代碼需要屏蔽掉
簡單的方法就是注掉函數:set_bluetooth_power 及 check_bluetooth_power
=====================================================================================================
附加在linux平台上調試及開發詳細步驟:
1. 驅動配置與安裝
1.1 配置選項:
[*] Networking support --->
<M> Bluetooth subsystem support ---> //藍牙子系統必須選擇
<M> L2CAP protocol suppor //邏輯鏈路控制和適配協議。
<M> SCO links support //藍牙語音和耳機支持
<M> RFCOMM protocol suppor //面向流的傳輸協議,支持撥號網絡等
[*] RFCOMM TTY support
<*> BNEP protocol support //藍牙網絡封裝協議,自組網支持
[*] Multicast filter support //藍牙多播,支持支持BNEP
[*] Protocol filter support //藍牙多播,支持支持支持BNEP
<*> HIDP protocol support //基本支持協議
Bluetooth device drivers --->
<*> HCI USB driver //USB藍牙模塊支持
<M>HCI UART driver //基於串口,CF卡或PCMCIA的藍牙
<*> HCI BlueFRITZ! USB driver
<*> HCI VHCI (Virtual HCI device) driver
其余的選項,根據自己的藍牙設備進行調整。
!!!注意:將選項置於M,才可編譯出ko
1.2 安裝與卸載:
命令:insmod,rmmod
!!!注意:驅動需順序安裝 hci.ko -> btusb.ko -> l2cap.ko ->rfcomm.ko -> sco.ko
2. 配置文件
2.1 將配置文件復制到相應的目錄下。
install目錄下的文件復制到根文件系統下對應的目錄。
主要的庫文件:libbluetooth.so,libdbus-1.so,libexpat.so,libglib-2.0.so,libusb.so
2.2 需要開機啟動dbus服務。
在/kmod/load 添加 . bluez_init
!!!注意“.”與”bluez_init”之間有空格。
重啟后,執行ps
888 messageb 2928 S dbus-daemon --config-file=/usr/share/bluetooth/etc/d
889 root 3000 S sh bluetoothd_server
900 root 4364 S bluetoothd –udev
可以看到有這三個進程,表示dbus服務啟動了。
3. 耳機使用
2.1 把耳機置於可搜索狀態,(長按耳機開關鍵約10S左右,藍色背景燈會閃三下后,處於長亮狀態)
2.2 連接成功后藍色背景燈會變成閃爍狀態。
2.3耳機處於開機狀態里,藍色背景燈會不停的閃爍;若電量不足時,閃爍幾下就會停止;長時間不用的話,也會停止閃爍,處於休眠狀態,此時需要再次開機,才可使用。
4. 測試命令:
3.1設備狀態 /system/xbin/
命令:hciconfig
返回信息:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:15:83:4D:F8:51 ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:2410 acl:21 sco:0 events:119 errors:0
TX bytes:1155 acl:21 sco:0 commands:39 errors:0
說明:DOWN表示設備沒有啟動。添加-a選項查看更多信息。
3.1.啟動設備
命令:先執行hciconfig hci0 up,再執行hciconfig.
返回信息:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:15:83:4D:F8:51 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:3097 acl:21 sco:0 events:144 errors:0
TX bytes:1749 acl:21 sco:0 commands:64 errors:0
說明:UP RUNNING 表示設備已經啟動,PSCAN表設備處於可見狀態。
3.2.掃描可用接入點
命令:hcitool scan
返回信息:
00:23:78:D9:0B:AB BT2035
00:1D:FD:2E:AB:C1 Nokia 3110c
說明:00:23:78:D9:0B:AB即為藍牙耳機地址,BT2035為設備名字。
3.3.配對。
命令:agent -a hci0 0000 00:23:78:D9:0B:AB
返回信息:
Pincode request for device /org/bluez/897/hci0/dev_00_23_78_D9_0B_AB
Agent has been released
__io_canceled=0,__io_terminated=1
說明:__io_canceled=0,__io_terminated=1表示配對成功。若失敗則值為相反。
__io_canceled=1,__io_terminated=0
3.4.搜索服務。
命令:sdptool browse 00:23:78:D9:0B:AB
3.5.獲取藍牙適配器 dbus服務地址。
命令:dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter
返回信息:
method return sender=:1.0 -> dest=:1.2 reply_serial=2
object path "/org/bluez/872/hci0"
說明:/org/bluez/872/hci0 是藍牙適配器的路徑。該路徑並不是固定的。刪除的時候會用到該路徑。
3.6.查詢藍牙適配器下已經完成配對的設備。
命令:dbus-send --system --dest=org.bluez --print-reply /org/bluez/897/hci0 org.bluez.Adapter.GetProperties
返回信息:
…
dict entry(
string "Devices"
variant array [
object path "/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"
]
)
…
說明:若有object path "/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"該路徑,表示藍牙連接成功。
3.7.配對刪除命令:
命令:dbus-send --system --dest=org.bluez --print-reply /org/bluez/897/hci0 org.bluez.Adapter.RemoveDevice objpath:/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB
返回信息:
method return sender=:1.0 -> dest=:1.4 reply_serial=2
3.8.錄音測試
命令:arecord -d 10 -f cd -r 8000 -c 1 -t wav -D bluetooth /root/bluez_cap.wav或者 hstest record /root/bluez_cap.wav 00:23:78:D9:0B:AB 1
3.9.ALSA放音測試
命令:aplay -D bluetooth -c 1 /root/bluez_cap.wav 或者 hstest play /root/bluez_cap.wav 00:23:78:D9:0B:AB 1
arecord和aplay兩個命令的參數說明如下:
-D bluetooth:設備名,與單板“/root/.asoundrc”文件中的“pcm.bluetooth”對應。
-c 1:通道數,藍牙耳機通常只支持單聲道。
-d 10:錄音時間為 10 秒。
-f cd:錄音格式。
-r 8000:采樣率。
-t wav:輸出文件格式。
具體參數細節可通過“aplay –h”或“arecord –h”命令查詢。