android bluetooth藍牙移植

http://blog.csdn.net/zhengmeifu/article/details/7705172

前段時間移植神念系統須要使用到bluetooth功能,現將移植過程當中碰到的問題簡要列一下,備忘而已。

一、內核增長配置
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;
      }
會打開文件失敗的。

二、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 也一樣存在此宏起做用

三、啓動項修改 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 相似這種語句的後面任意位置便可

四、代碼修改
system\bluetooth\bluedroid下的bluetooth.c文件

這裏因爲在機頂盒上沒有電源管理這塊,因此對於power的操做代碼須要屏蔽掉

簡單的方法就是注掉函數:set_bluetooth_power 及 check_bluetooth_powerlinux


=====================================================================================================android

附加在linux平臺上調試及開發詳細步驟:網絡

1. 驅動配置與安裝

   1.1 配置選項:函數

[*] Networking support  --->                測試

<M>   Bluetooth subsystem support  ---> //藍牙子系統必須選擇ui

<M>   L2CAP protocol suppor        //邏輯鏈路控制和適配協議。spa

<M>   SCO links support            //藍牙語音和耳機支持.net

<M>   RFCOMM protocol suppor       //面向流的傳輸協議,支持撥號網絡等調試

[*]   RFCOMM TTY support          code

<*>   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

arecordaplay兩個命令的參數說明以下: 

  -D bluetooth:設備名,與單板「/root/.asoundrc」文件中的「pcm.bluetooth」對應。 

  -c 1:通道數,藍牙耳機一般只支持單聲道。 

  -d 10:錄音時間爲 10 秒。 

  -f cd:錄音格式。 

  -r 8000:採樣率。 

  -t wav:輸出文件格式。 

  具體參數細節可經過「aplay h」或「arecord h」命令查詢。

相關文章
相關標籤/搜索