FreeBSDでbluetoothを使う

以前書いたはずのメモがどこかにいってしまったので、メモ代りに。

FreeBSDbluetoothを使う。目標は、ビデオチャット(skype/ekiga)のために使うこと。

まず、USB接続のbluetoothレシーバを用意。公式をよく読む。http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-bluetooth.html

# kldload uhci
# kldload ng_ubt
# /etc/rc.d/bluetooth start ubt0

そしてbluetoothレシーバをUSB端子に差す。認識されているか、dmesg(8)で確認。

手元にWiiリモコンがあったので、これでテスト。Wiiリモコンの電池ボックス付近の赤いSyncボタンを押して、

# hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
	BD_ADDR: 00:17:ab:xx:xx:xx
	Page Scan Rep. Mode: 0x1
	Page Scan Period Mode: 0x2
	Page Scan Mode: 00
	Class: 00:25:04
	Clock offset: 0x16fd
Inquiry result, num_responses=1
Inquiry complete. Status: No error [00]

とすると、BlueToothバイスが反応を返す。Wiiリモコン以外のものも、もしかしたら拾うかもしれない。デバイスIDを指定すると名前が返って来る。

# hccontrol -n ubt0hci remote_name_request 00:17:ab:xx:xx:xx
BD_ADDR: 00:17:ab:xx:xx:xx
Name: Nintendo RVL-CNT-01

pingはl2pingである。Wiiリモコンの場合は、Syncボタンを押すこと。

# l2ping -a 00:17:ab:xx:xx:xx
0 bytes from 00:17:ab:xx:xx:xx seq_no=0 time=4563.491 ms result=0 
0 bytes from 00:17:ab:xx:xx:xx seq_no=1 time=5.462 ms result=0 

この後、Plantronicsのイヤーピースにl2pingするところまで同様にうまくいったが、l2controlで応答がない。ソケットがない。hcsecdでうまく認証(?)できない。

とりあえず、

# sdpcontrol -a 00:23:7f:xx:xx:xx search HSET

Record Handle: 0x00010001
Service Class ID List:
	Headset (0x1108)
	Generic Audio (0x1203)
Protocol Descriptor List:
	L2CAP (0x0100)
	RFCOMM (0x0003)
		Protocol specific parameter #1: u/int8/bool 2
Bluetooth Profile Descriptor List:
	Headset (0x1108) ver. 1.0

などと反応はあった。HSETはヘッドセット類を表すらしい。