« 4方向回転を止め、ホームを縦画面固定にする | トップページ | Voosoo VPad V7 android 2.3 アップデート »

2011年12月 6日 (火)

android で USB Bluetoothドングルを試す

手持ちにあるBluetooth USBアダプタは、Bluetooth ver2.1対応 USBアダプタ BT-MicroEDR2X

これがandroidタブレットで使えるか調べてみた。

調べてみようと思ったのは、何故か、EM51にはBluetooth関係のファイルがそろっているからである。

/system/bin/sdptool
/system/bin/bluetoothd
/system/lib/libbluedroid.so
/system/lib/libbluetooth.so
/system/lib/libbluetoothd.so

等々... 出来そうな感じ。しかし・・・

①カーネルにBluetoothドライバモジュールが入っていない

②androidの設定に「Bluetooth」の項目が存在しない。

この2点をクリアしなければならない。

以下からはクリアするために行ったメモ。

①ドライバモジュールの構築

TCC8902のカーネル2.6.29のソースを入手し、モジュールだけビルドした。
sdカードに出来上がったbluetooth.ko, btusb.ko を入れて、adbコマンドで確認

------------------------------------------------------------------
# insmod /sdcard/bluetooth.ko
# insmod /sdcard/btusb.ko
------------------------------------------------------------------

Bluetooth USBアダプタを差し込んでみてdmesgで確認する

# dmesg
------------------------------------------------------------------
<6>Bluetooth: Core ver 2.15
<6>NET: Registered protocol family 31
<6>Bluetooth: HCI device and connection manager initialized
<6>Bluetooth: HCI socket layer initialized
<6>Bluetooth: Generic Bluetooth USB driver ver 0.5
<6>usbcore: registered new interface driver btusb
------------------------------------------------------------------
きちんとロードされてる!

/proc でも確認する。
---------------------------------------------------------------------
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
--------------------------------------------------------------------
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0a12 ProdID=0001 Rev=48.39
---------------------------------------------------------------------
OK。

hciconfigでBluetoothアドレスが有効か確認する。

# hciconfig
---------------------------------------------------------------------
hci0:   Type: USB
        BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
        DOWN
        RX bytes:0 acl:0 sco:0 events:0 errors:0
        TX bytes:0 acl:0 sco:0 commands:0 errors:0
---------------------------------------------------------------------

まだこの時点では、有効になっていない。起動するには、upを指定する

---------------------------------------------------------------------
# hciconfig hci0 up
---------------------------------------------------------------------

再度hciconfigを実行
---------------------------------------------------------------------
# hciconfig
hci0:   Type: USB
        BD Address: 00:1B:DC:0F:89:4B ACL MTU: 310:10 SCO MTU: 64:8
        UP RUNNING
        RX bytes:354 acl:0 sco:0 events:12 errors:0
        TX bytes:38 acl:0 sco:0 commands:11 errors:0
---------------------------------------------------------------------
UP RUNNING と表示され、bluetoothのアドレスが変化した。
カーネルレベルでは成功している。

ついでに他のデバイスが見えるか確認してみた。
---------------------------------------------------------------------
# hcitool scan
Scanning ...
        6C:23:B9:XX:XX:XX       SO-01B
---------------------------------------------------------------------
近くに置いていたXperiaが表示された。成功。

後は、このモジュールは、/sdcardでは、都合が悪いので、別な場所へコピーしておく
--------------------------------------------------------------------
# cp /sdcard/bluetooth.ko  /system/etc
# cp /sdcard/btusb.ko      /system/etc
-------------------------------------------------------------------

②Bluetoothの有効化

/init.rcスクリプトを調べてみると、bluetoothdサービス起動部分がdisableになっている。

disabledの行をコメントアウトする必要がある。

変更前
--------------------------------------------------------------------------------
service bluetoothd /system/bin/bluetoothd -n
    socket bluetooth stream 660 bluetooth bluetooth
    socket dbus_bluetooth stream 660 bluetooth bluetooth
    # init.rc does not yet support applying capabilities, so run as root and
    # let bluetoothd drop uid to bluetooth with the right linux capabilities
    group bluetooth net_bt_admin misc
    disabled
--------------------------------------------------------------------------------

変更後
--------------------------------------------------------------------------------
service bluetoothd /system/bin/bluetoothd -n
    socket bluetooth stream 660 bluetooth bluetooth
    socket dbus_bluetooth stream 660 bluetooth bluetooth
    # init.rc does not yet support applying capabilities, so run as root and
    # let bluetoothd drop uid to bluetooth with the right linux capabilities
    group bluetooth net_bt_admin misc
#    disabled
--------------------------------------------------------------------------------

しかしルートファイルなので、adbコマンドで直接書き換えが出来ない orz

じゃあ、ファームウェアアップデートファイル update.zip の中のboot.imgファイルを
分解して、ルートファイルの/init.rcを書き換えることにした。

手順)以下のサイトから以下のファイルをダウンロードする。

http://fei-yen.jp/maya/wordpress/2010/08/30/android2-1%E7%AB%AF%E6%9C%AB%E3%82%92%E5%85%A5%E6%89%8B%EF%BC%81%EF%BC%88%E6%9B%B8%E3%81%84%E3%81%A6%E3%82%8B%E9%80%94%E4%B8%AD%E3%81%A0%E3%81%91%E3%81%A9%E5%85%AC%E9%96%8B%EF%BC%89/

split_bootimg.zip
replace_ramdisk.php

zipファイルは解凍して、Linux上で作業する。

書き換え作業は、上記のURLを参考に行う。

Bluetoothの設定は?

andoridの「設定」はファイルSettings.apkが行っている。
これはメーカーのオリジナルのプログラム。
メーカーのSettings.apkのソースをもらわない限り不可能。

でも、androidアプリ SuperBoxでBluetoothの呼び出しが出来る

SuperBoxでBluetoothの設定呼び出しが出来たが、それでもBluetoothは、有効にならない。orz

原因は、下記のサイトを読むとandroidのソースにパッチを当てる必要があった。

http://www.kumikomi.net/archives/2009/09/beagleboardandroid_wii1.php?page=1

AndroidではBluetoothモジュールの電源制御にRF KillというKernelの機能
(Switch Class)を使用している。しかし、Bluetooth USBアダプタは、この仕組みに対応していない。

Bluetoothの電源制御はlibbluedroidライブラリで実施しており,このソース・コードを修正する必要がある。

結局、androidのビルドをしなければならない。orz

|

« 4方向回転を止め、ホームを縦画面固定にする | トップページ | Voosoo VPad V7 android 2.3 アップデート »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/531329/53415768

この記事へのトラックバック一覧です: android で USB Bluetoothドングルを試す:

« 4方向回転を止め、ホームを縦画面固定にする | トップページ | Voosoo VPad V7 android 2.3 アップデート »