訳註: これは作業してる最中のもので、本来、訳作業者以外は見えぬべきものです。 訳作業者以外は見ないでください。意味が反対になったりとか当然にあるから、 内容は利用しないでください。この言語への変換作業(翻訳作業)物に関しては、現在、オープンなライセンス条件ではありません。 十進240のコードのキャラクターを<240>に置換してる場合あり
Chapter21.Bluetooth on NetBSD

Table of Contents

21.1. Introduction
21.2. Supported Hardware
21.3. System Configuration
21.4. Human Interface Devices
21.4.1. Mice
21.4.2. Keyboards
21.5. Personal Area Networking
21.5.1. Personal Area Networking User
21.6. Serial Connections
21.7. Audio
21.7.1. SCO Audio Headsets
21.7.2. SCO Audio Handsfree
21.8. Object Exchange
21.9. Troubleshooting

日本語(のような言語)版訳者註:
そもそも、まだ作業そのもの最中ですし、
査読などの他の人による検証も何も、まだ、されていません。
訳者は英文のままだと、"どうにも"読む事ができないから訳しています。
学校でも赤点取ったほど、英語はわからないので、残念ながら誤訳があってもあたりまえです。
内容柄、誤解し、間違った理解/操作/対応等をすると、非常に危険ですから、
原文や、(訳者の過去の作業(がある章がある)以外の)誰かが
公開しているかもしれない日本語訳を利用してください。
(これは日本語"(のような言語)"版で、"日本語"そのものではありません)

日本語(のような言語)版訳者註おわり。

21.1.Introduction

Bluetooth は近距離範囲で 低出力の通信に使われるデジタル無線プロトコルです。 NetBSD 4.0 に Bluetooth プロトコルスタックのサポートが導入され、 NetBSD デバイスフレームワーク中に いくつか service profiles の統合がされました。

Bluetooth プロトコルスタックの下層は Bluetooth Controller 内部で handled されるデバイス間の実際の無線 links に属し、 raw packet BTPROTO_HCI ソケットインターフェース経由でアクセスできる Host Controller Interface (HCI) プロトコルを用いて Host computer と通信します。

Link Layer Control and Adaptation Protocol (L2CAP) の頂上に有る[atop] ほとんどの Bluetooth プロトコルやサービスは BTPROTO_L2CAP ソケット インターフェースを経由してアクセスできます。 これは、リモートデバイスへの 64k チャネルまでのシーケンシャルパケット接続を提供します。 L2CAP チャネルが開くと、要求されたプロトコルやサービスは Protocol/Service Multiplexer (PSM) 値によって識別されます。

Bluetooth 環境の Service Discovery には sdp(3) ライブラリーおよび sdpd(8) デーモンが提供されていて (共に FreeBSD からの移植)、これによってプログラムにサービスの登録ができ、 queries をする remote デバイスの利用できる情報を作ります。 Limited queries は sdpquery(1) プログラムですることができます。

Bluetooth links 上の Security は暗号化を有効にし、 コントローラーが作る全 baseband links に適用される btconfig(8) への認証オプションで出来、あるいは、暗号化および 認証は要求された個々の RFCOMM および L2CAP links にできます。 認証が要求されると, PIN は各 side によって presented (通常、オペレーターによって entered され、いくつか 限られた入力デバイスだけが固定の PIN です)。コントローラーは この PIN を Link Key の生成に使い、引き続く接続を認証するために、 これを asked かもしれない Host に reports します。 NetBSD では、 bthcid(8) デーモンが link keys を蓄え、 Link Key Requests に返答する責任を持ち、特権の無いユーザーが btpin(1) のような PIN client で PIN を指定することを許すためのインターフェースもまた提供します。

21.2.Supported Hardware

Bluetooth コントローラーはホストとの通信に、通常 Bluetooth 2.0 Core ドキュメンテーションに規定されている標準 HCI プロトコルを使いますんで、 NetBSD Bluetooth スタックはインターフェースドライバーを必要とするだけで、 ほとんどのコントローラーと互換が有り、次のドライバーが NetBSD 5.0 で利用可能で:

  • bcsp(4)BlueCore Serial Protocol (BCSP) 規定に記述された BlueCore Serial Protocol パケット over a serial line の送受信を統制する tty(4) line を提供します。

  • bt3c(4) は 3Com Bluetooth PC Card, model 3CRWB6096-A へのインターフェースを提供します。

  • btbc(4) は AnyCom BlueCard (LSE041, LSE039, LSE139) PCMCIA デバイスへのサポートを提供します。

  • btuart(4)Bluetooth Host Controller Interface [Transport Layer] specification, Vol 4 part A に記述された Bluetooth packets over a serial line の送受信を統合する tty(4) line を提供します。

  • ubt(4)HCI USB Transport Layer 仕様に適合する全 USB Bluetooth コントローラーを インターフェースします。

もしカーネルが NetBSD Bluetooth スタックのサポートが有効なら、 自動設定メッセージが dmesg 出力に現れ、例えば:

bt3c0 at pcmcia0 function 0: <3COM, 3CRWB60-A, Bluetooth PC Card>

ubt0 at uhub1 port 4 configuration 1 interface 0
ubt0: Cambridge Silicon Radio Bluetooth USB Adapter, rev 2.00/19.58, addr 4

ubt1 at uhub1 port 2 configuration 1 interface 0
ubt1: Broadcom Belkin Bluetooth Device, rev 1.10/0.01, addr 5
    

サポートが既にコンパイルされて入っていなければ、 USB および/または PCMCIA (Section19.9, “Kernel Tuning” をご覧ください) を サポートするどんなプラットホームにもカーネル設定ファイルを加えることが出来て、 以下の宣言を用い、要求されるもんは:

# Bluetooth Controller and Device support

pseudo-device   bcsp                   # BlueCore Serial Protocol
pseudo-device   btuart                 # Bluetooth HCI UART

# Bluetooth PCMCIA Controllers
bt3c* at pcmcia? function ?             # 3Com 3CRWB6096-A
btbc* at pcmcia? function ?             # AnyCom BlueCard LSE041/039/139

# Bluetooth USB Controllers
ubt* at uhub? port ?

# Bluetooth Device Hub
bthub* at bcsp?
bthub* at bt3c?
bthub* at btbc?
bthub* at btuart?
bthub* at ubt?

# Bluetooth HID support
bthidev* at bthub?

# Bluetooth Mouse
btms* at bthidev? reportid ?
wsmouse* at btms? mux 0

# Bluetooth Keyboard
btkbd* at bthidev? reportid ?
wskbd* at btkbd? console ? mux 1

# Bluetooth Audio support
btsco* at bthub?
    

BCM2033 チップをベースとした、幾つかの古めの USB Bluetooth dongles は 機能する前にファームウェアーのロードを要求し、 それからこれらのデバイスは ugen(4) に接続されます。 ファームウェアーのロードとそれらの有効化には、NetBSD パッケージコレクションから sysutils/bcmfw パッケージを使ってください。

21.3.System Configuration

NetBSD で Bluetooth サービスを完全に有効にするには、 /etc/rc.conf ファイルに次の行を加える必要があります。

btconfig=YES
btconfig_args="up pscan switch class 0x02010c"
btdevctl=YES
bthcid=YES
sdpd=YES
    

そして reboot または次のコマンドの実行をし:

# /etc/rc.d/btconfig start
# /etc/rc.d/bthcid start
# /etc/rc.d/btdevctl start
# /etc/rc.d/sdpd start
    

Bluetooth コントローラーの設定は btconfig(8) プログラムでされ、上の引数は 基本機能だけ提供するもので、他の便利なオプションについては manual page を御覧ください。

重要

bthcid(8) が リモートデバイスとの認証された接続をするために走っていることが 必要 で、そして 認証は多分、両方のデバイスから要求されます。

21.4.Human Interface Devices

Human Interface Devices (HIDs) のサポート、これは bthidev(4) ドライバーによって提供される L2CAP チャンネルの a pair を越える USB HID プロトコルを用いて操作します。 現在、キーボードおよびマウスは wscons(4) のために普通に作られ、また普通に接続されます。

21.4.1.Mice

Bluetooth マウスはシステムに、 btdevctl(8) を使って btms(4) ドライバーで接続されます。

最初に、デバイスの BDADDR を見つけなければなりません。 これは箱に書いてあるでしょうが、しかし、いちばん簡単な方法は デバイスを discoverable mode にし、 適切なコントローラーに device inquiry をさせて:

% btconfig ubt0 inquiry
Device Discovery on ubt0 .... 1 response
  1: bdaddr 00:14:51:c1:b9:2d (unknown)
   : name "Mighty Mouse"
   : class: [0x002580] Peripheral Mouse <Limited Discoverable>
   : page scan rep mode 0x01
   : page scan period mode 0x02
   : page scan mode 0x00
   : clock offset 6944
      

簡単に使うには、 /etc/bluetooth/hosts ファイルにアドレスを追加し、 それで alias でマウスを参照できるようになり:

# echo "00:14:51:c1:b9:2d mouse" >>/etc/bluetooth/hosts
      

さて、マウスを query でき、接続を受け入れるまえにおそらく認証要求します。固定 PIN はドキュメンテーション中にリストされているはずですが、ですが、 0000がよく使われます。 btpin(1) プログラムを用いて最初に PIN を Set し:

% btpin -d ubt0 -a mouse -p 0000
# btdevctl -d ubt0 -a mouse -s HID
local bdaddr: 00:08:1b:8d:ba:6d
remote bdaddr: 00:14:51:c1:b9:2d
link mode: auth
device type: bthidev
control psm: 0x0011
interrupt psm: 0x0013
Collection page=Generic_Desktop usage=Mouse
  Input id=2 size=1 count=1 page=Button usage=Button_1 Variable, logical range 0..1
  Input id=2 size=1 count=1 page=Button usage=Button_2 Variable, logical range 0..1
  Input id=2 size=1 count=1 page=Button usage=Button_3 Variable, logical range 0..1
  Input id=2 size=1 count=1 page=Button usage=Button_4 Variable, logical range 0..1
  Input id=2 size=4 count=1 page=0x0000 usage=0x0000 Const Variable, logical range 0..1
Collection page=Generic_Desktop usage=Pointer
  Input id=2 size=8 count=1 page=Generic_Desktop usage=X Variable Relative, logical range -127..127
  Input id=2 size=8 count=1 page=Generic_Desktop usage=Y Variable Relative, logical range -127..127
  Input id=2 size=8 count=1 page=Consumer usage=AC_Pan Variable Relative, logical range -127..127
  Input id=2 size=8 count=1 page=Generic_Desktop usage=Wheel Variable Relative, logical range -127..127
End collection
  Input id=2 size=8 count=1 page=0x00ff usage=0x00c0 Variable, logical range -127..127
Feature id=71 size=8 count=1 page=0x0006 usage=0x0020 Variable NoPref Volatile, logical range 0..100
End collection
      

これは、マウスが SDP query に応答して、デバイス capabilities を示した と言うことです。註として 認証は Bluetooth マウスには default で有効であるということです。 システムにつなぐことができて:

# btdevctl -d ubt0 -a mouse -s HID -A
      

これはシステムコンソールに何らかのメッセージを生成するはずで:

bthidev0 at bthub0 remote-bdaddr 00:14:51:c1:b9:2d link-mode auth
btms0 at bthidev1 reportid 2: 4 buttons, W and Z dirs.
wsmouse1 at btms0 mux 0
bthidev1: reportid 71 not configured
bthidev1: connected
      

そしてマウスは働くはずです。

デバイス capabilities は btdevctl(8) にキャッシュされ、そして、 システム起動時にマウスを再接続するため、 /etc/bluetooth/btdevctl.conf にエントリーを 入れ、 /etc/rc.confbtdevctl=YES を入れます。 bthidev(4) ドライバー は一度接続を試みますが、だけど、 マウスはいつも居眠りするので、起こすには肩をポンと叩くことが要請されるでしょう。 その場合には、ホストコンピューターとの接続を開始するはずです。

21.4.2.Keyboards

Bluetooth キーボードは btdevctl(8) を用い、 btkbd(4) ドライバーでシステムに接続できます。

最初に、デバイスの BDADDR を見つけなければなりません。 これは箱に書いてあるでしょうが、しかし、いちばん簡単な方法は デバイスを discoverable mode にし、適切なコントローラーにデバイス inquiry をさせることで:

% btconfig ubt0 inquiry
Device Discovery on ubt0 .... 1 response
  1: bdaddr 00:0a:95:45:a4:a0 (unknown)
   : name "Apple Wireless Keyboard"
   : class: [0x002540] Peripheral Keyboard <Limited Discoverable>
   : page scan rep mode 0x01
   : page scan period mode 0x00
   : page scan mode 0x00
   : clock offset 18604
      

簡単に使うには、 /etc/bluetooth/hosts ファイルにアドレスを追加し、 それで alias でキーボードを参照できるようになり:

# echo "00:0a:95:45:a4:a0 keyboard" >>/etc/bluetooth/hosts
      

ここでキーボードを query できます。 接続を受け入れる前におそらく 認証を要求するでしょう。 PIN はキーボード上で入力する必要があり、 btpin(1) プログラムを使って random PIN を生成することができます。

% btpin -d ubt0 -a keyboard -r -l 8
PIN: 18799632
# btdevctl -d ubt0 -a keyboard -s HID

    < ENTER PIN ON BLUETOOTH KEYBOARD NOW >

local bdaddr: 00:08:1b:8d:ba:6d
remote bdaddr: 00:0a:95:45:a4:a0
link mode: encrypt
device type: bthidev
control psm: 0x0011
interrupt psm: 0x0013
Collection page=Generic_Desktop usage=Keyboard
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftControl Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftShift Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftAlt Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_Left_GUI Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightControl Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightShift Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightAlt Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_Right_GUI Variable, logical range 0..1
  Input id=1 size=8 count=1 page=0x0000 usage=0x0000 Const, logical range 0..1
 Output id=1 size=1 count=1 page=LEDs usage=Num_Lock Variable, logical range 0..1
 Output id=1 size=1 count=1 page=LEDs usage=Caps_Lock Variable, logical range 0..1
 Output id=1 size=1 count=1 page=LEDs usage=Scroll_Lock Variable, logical range 0..1
 Output id=1 size=1 count=1 page=LEDs usage=Compose Variable, logical range 0..1
 Output id=1 size=1 count=1 page=LEDs usage=Kana Variable, logical range 0..1
 Output id=1 size=3 count=1 page=0x0000 usage=0x0000 Const, logical range 0..1
  Input id=1 size=8 count=6 page=Keyboard usage=No_Event, logical range 0..255
  Input id=1 size=1 count=1 page=Consumer usage=Eject Variable Relative, logical range 0..1
  Input id=1 size=1 count=1 page=Consumer usage=Mute Variable Relative, logical range 0..1
  Input id=1 size=1 count=1 page=Consumer usage=Volume_Up Variable, logical range 0..1
  Input id=1 size=1 count=1 page=Consumer usage=Volume_Down Variable, logical range 0..1
  Input id=1 size=1 count=4 page=0x0000 usage=0x0000 Const, logical range 0..1
End collection
      

これが言ってることは、キーボードが SDP query に応答していて、デバイス capabilities を示したよということです。註として 暗号化は default で有効で、というのも暗号化接続の サポートは Bluetooth キーボードには強制されているからです。さて システムに接続するでしょうて:

# btdevctl -d ubt0 -a keyboard -s HID -A
      

これはシステムコンソールに何らかのメッセージを生成するはずで:

bthidev1 at bthub0 remote-bdaddr 00:0a:95:45:a4:a0 link-mode encrypt
btkbd0 at bthidev0 reportid 1
wskbd1 at btkbd0 mux 1
wskbd1: connecting to wsdisplay0
bthidev1: connected
      

そしてキーボードは work するはずです。

デバイス capabilities は btdevctl(8) にキャッシュされ、 システム起動時にキーボードを再接続するために、 /etc/bluetooth/btdevctl.conf 中に エントリーを入れ、 /etc/rc.confbtdevctl=YES を入れます。 bthidev(4) ドライバー が[訳註:物理層側の]接続時に一度[訳註:上位層側の]接続を試みますが、しかし そのときキーボードが利用可能でないなら、 キーを押すことで起き上がり、 最後に paired したホストに 接続を始めます。

21.5.Personal Area Networking

Personal Area Networking services over Bluetooth は PAN profile からの全役割を仮定できる btpand(8) デーモンによって提供され、 tap(4) 仮想 Ethernet インターフェースを通してリモートデバイスをシステムに接続します。

21.5.1.Personal Area Networking User

"Personal Area Networking User" の役割は 他のデバイス上で Network services にアクセスするクライアントです。例えば、 NAP profile でのスマートホン経由でのインターネットの接続のためには、 phone が discoverable であることを確かめて、 それから:

% btconfig ubt0 inquiry
Device Discovery from device: ubt0 .... 1 response
  1: bdaddr 00:17:83:30:bd:5e (unknown)
   : name "HTC Touch"
   : class: [0x5a020c] Smart Phone <Networking> <Capturing> <Object Transfer>
	<Telephony>
   : page scan rep mode 0x01
   : clock offset 9769
   : rssi -42

# echo "00:17:83:30:bd:5e phone" >>/etc/bluetooth/hosts
      

the phone の Device の Class 中に <Networking> フラグが設定されているのが見えるはずです NAP サービスの確認には:

% sdpquery -a phone search NAP

Record Handle: 0x00010000
Service Class ID List:
        0x00001116-0000-1000-8000-00805f9b34fb
Protocol Descriptor List:
	L2CAP (0x0100)
		Protocol specific parameter #1: u/int/uuid16 15
	BNEP (0x000f)
		Protocol specific parameter #1: u/int/uuid16 256
		Protocol specific parameter #2: 0x09 0x08 00 0x09 0x08 0x06 0x09 0x86 0xdd
Bluetooth Profile Descriptor List:
	0x00001116-0000-1000-8000-00805f9b34fb ver. 1.0
      

眼識の高い人には暴露されます事に、 NAP サービスが PSM 15 で利用可能で、それは、プロトコルタイプ 0x0800 (IPv4) 、 0x0806 (ARP) および 0x86dd (IPv6) を提供することです。

Most likely, the phone は NAP サービスへの接続を許す前に認証を要求するでしょうて、それで 最初の接続のまえに PIN を provide することが必要で、 randomly に生成できます。それから btpand(8) を起動し:

% btpin -d ubt0 -a phone -r -l 6
PIN: 862048
# btpand -d ubt0 -a phone -s NAP

    < ENTER PIN ON PHONE NOW >

Searching for NAP service at 00:17:83:30:bd:5e
Found PSM 15 for service NAP
Opening connection to service 0x1116 at 00:17:83:30:bd:5e
Using interface tap0 with addr 00:10:60:e1:50:3d
      

最後に、 tap(4) インターフェースの設定が必要ですが、 the phone には DHCP サーバーが入ってるはずですんで、んでもって dhclient(8) がやってくれるでしょう。

# dhclient -q -o -w -nw tap0
      

さて、 World Wide Web を surf できます、ですが、 わかりのいいデータプランを使っていない場合は、データ利用は監視してください。

21.6.Serial Connections

Bluetooth 上のシリアル接続は、 RFCOMM プロトコルによるために提供されていて、これは単一 L2CAP チャネル上での 30 チャネルまでの重畳 を提供します。この streamed データプロトコルは BTPROTO_RFCOMM ソケットインターフェースを用いて、あるいは rfcomm_sppd(1) プログラム経由でアクセスできます。

例えば、 PPP でインターネットに接続するために、携帯電話の Dial Up Networking (DUN) サービスへのシリアル接続ができます。 最初に the phone の BDADDR を見つけ、簡単に使うため、これを /etc/bluetooth/hosts に加え なければなりません。 the phone を Discoverable mode にして、 適切なコントローラーから inquiry をして:

% btconfig ubt0 inquiry
Device Discovery from device: ubt0 ..... 1 response
  1: bdaddr 00:16:bc:00:e8:48 (unknown)
   : name "Nokia 6103"
   : class: [0x520204] Cellular Phone <Networking> <Object Transfer> <Telephony>
   : page scan rep mode 0x01
   : page scan period mode 0x02
   : page scan mode 0x00
   : clock offset 30269

# echo "00:16:bc:00:e8:48 phone" >>/etc/bluetooth/hosts
    

ここで、 phone に対して DUN profile をサポートしているか確認の問い合わせをすることができます:

% sdpquery -d ubt0 -a phone search DUN

Record Handle: 0x00010000
Service Class ID List:
        Dial-Up Networking (0x1103)
        Generic Networking (0x1201)
Protocol Descriptor List:
        L2CAP (0x0100)
        RFCOMM (0x0003)
                Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
        Dial-Up Networking (0x1103) ver. 1.0
    

Most likely, the phone は DUN サービスへの接続が許される前に認証を要求し、それで 最初の接続をする前に PIN の provide が必要で、 randomly に生成できます。 接続が ok に働くかのチェックには、 stdio mode で rfcomm_sppd が使え、 disconnect し シェルに戻るには ^C を押し、例えば:

% btpin -d ubt0 -a phone -r -l 6
PIN: 904046
% rfcomm_sppd -d ubt0 -a phone -s DUN

    < ENTER PIN ON PHONE NOW >

rfcomm_sppd[24635]: Starting on stdio...
at
OK
ati
Nokia

OK
ati3
Nokia 6103

OK
at&v
ACTIVE PROFILE:
E1 Q0 V1 X5 &C1 &D2 &S0 &Y0
+CMEE=0 +CSTA=129 +CBST=0,0,1 +CRLP=61,61,48,6 +CR=0 +CRC=0 +CLIP=0,2
+CLIR=0,2 +CSNS=0 +CVHU=1 +DS=0,0,2048,32 +DR=0 +ILRR=0
+CHSN=0,0,0,0 +CHSR=0 +CPBS="SM"
S00:000 S01:000 S02:043 S03:013 S04:010 S05:008 S07:060 S08:002
S10:100 S12:050 S25:000

OK
^C
rfcomm_sppd[24635]: Completed on stdio
    

outbound 接続をする時に your phone を自動的に DUN サービス に pppd(8) 接続 させるには、 次の行を /etc/ppp/options ファイルに加え、通常の tty 宣言の場所に:

pty "rfcomm_sppd -d ubt0 -a phone -s DUN -m encrypt"
    

21.7.Audio

BTPROTO_SCO ソケット インターフェースを用いても btsco(4) オーディオデバイスドライバーでも baseband radio link 上に Isochronous (SCO) オーディオ接続が作れます。 仕様ではデバイス間とのそのようなリンクは3つまでとなっていますが、 現在の Bluetooth stack は いかなる品位[dignity] でも、一つ handle できるだけです。

重要

SCO Audio を USB Bluetooth コントローラーで使うときは、 isochronous data を有効にして、デバイスが利用する MTU を計算する必要が有ります。 ubt(4) および btconfig(8) をご覧ください。

SCO Audio は bt3c(4) ドライバーではきちんと動作しません。ベストな結果のためには USB コントローラーを使ってください。

SCO Audio は ehci(4) USB コントローラーでは動作しません、 ってのも、 NetBSD では EHCI 上の Isochronous data 対応が 無いからです。

21.7.1.SCO Audio Headsets

Bluetooth Headsets への Audio 接続 は btsco(4) オーディオドライバーと bthset(1) プログラムを用いて可能です。最初に、 headset の BDADDR を発見する必要があり、 簡単に使うために /etc/bluetooth/hosts ファイル中に alias を 作りたくなることでしょう。 headset を discoverable mode にして 適切なコントローラーに inquiry をさせて:

% btconfig ubt0 inquiry
Device Discovery from device: ubt0 ..... 1 response
 1: bdaddr 00:07:a4:23:10:83 (unknown)
  : name "JABRA 250"
  : class: [0x200404] Wearable Headset <Audio>
  : page scan rep mode 0x01
  : page scan period mode 0x00
  : page scan mode 0x00
  : clock offset 147

# echo "00:07:a4:23:10:83 headset" >>/etc/bluetooth/hosts
      

headset と始めて接続するとき、 pair にする必要があって、 固定 PIN はマニュアルに listed されているはずです (大抵 0000 が使われてます)。 btdevctl(8) が デバイスに query し、 btsco(4) オーディオドライバーを attach します。

% btpin -d ubt0 -a headset -p 0000
# btdevctl -d ubt0 -a headset -s HSET -A
local bdaddr: 00:08:1b:8d:ba:6d
remote bdaddr: 00:07:a4:23:10:83
link mode: none
device type: btsco
mode: connect
channel: 1
      

これはシステムコンソール上に何かのメッセージを生成するはずで:

btsco0 at bthub0 remote-bdaddr 00:07:a4:23:10:83 channel 1
audio1 at btsco0: full duplex
      

オーディオデバイスを使うためには、ミキサーデバイスにボリューム情報を伝える bthset(1) でコントロール接続を 開く必要が有ります。

% bthset -m /dev/mixer1 -v
Headset Info:
        mixer: /dev/mixer1
        laddr: 00:08:1b:8d:ba:6d
        raddr: 00:07:a4:23:10:83
        channel: 1
        vgs.dev: 0, vgm.dev: 1
      

これで audioplay(1)audiorecord(1) のような、オーディオを supports する any program を用い、 /dev/audio1 から/へ、 8khz samples で転送する事ができます。あなたが気づくかもしれないけど、接続を開いたとき 再生時のミキサー値の調節は働くはずで、 headset は volume を最後に覚えた設定に reset します。

% audiorecord -d /dev/audio1 voice.au

        < TALK NONSENSE NOW >

^C
% audioplay -d /dev/audio voice.au

        < THATS REALLY WHAT YOU SOUND LIKE >

% audioplay -d /dev/audio1 voice.au

        < IN THE HEADSET >
      

デバイス capabilities は btdevctl(8) にキャッシュされ、 そして、システム起動時、 btsco(4) ドライバーを reattach するため、 /etc/bluetooth/btdevctl.conf にエントリーを追加し、 /etc/rc.confbtdevctl=YES を入れます。

21.7.2.SCO Audio Handsfree

Handsfree profile を使っての Bluetooth 携帯電話へのオーディオ接続は NetBSD パッケージコレクションから comms/bthfp プログラムで可能です。

最初に、 the phone の BDADDR を見つける事が必要で、簡単に使うため、 alias を /etc/bluetooth/hosts ファイルに 作りたいと思うことでしょう。 phone を discoverable mode にして 適切なコントローラーに inquiry させて:

% btconfig ubt0 inquiry
Device Discovery from device: ubt0 ..... 1 response
  1: bdaddr 00:16:bc:00:e8:48 (unknown)
   : name "Nokia 6103"
   : class: [0x520204] Cellular Phone <Networking;gt; <Object Transfer;gt; <Telephony;gt;
   : page scan rep mode 0x01
   : page scan period mode 0x02
   : page scan mode 0x00
   : clock offset 10131

# echo "00:16:bc:00:e8:48 phone" >>/etc/bluetooth/hosts
      

ここで、 phone に対して Handsfree profile をサポートしているか確認の問い合わせをすることができるはずで:

% sdpquery -d ubt0 -a phone search HF

Record Handle: 0x00010003
Service Class ID List:
        Handsfree Audio Gateway (0x111f)
        Generic Audio (0x1203)
Protocol Descriptor List:
        L2CAP (0x0100)
        RFCOMM (0x0003)
                Protocol specific parameter #1: u/int8/bool 13
Bluetooth Profile Descriptor List:
        Handsfree (0x111e) ver. 1.1
      

そして Handsfree profile に access するのに bthfp プログラムが利用できます。初回接続、 phone と pair にするのに PIN を使う必要が有りますが、 これは btpin(1) によって randomly に生成できて:

% btpin -d ubt0 -a phone -r -l 6
PIN: 349163
% bthfp -d ubt0 -a phone -v

      < ENTER PIN ON PHONE NOW >
Handsfree channel: 13
Press ? for commands
Connecting.. ok
< AT+BRSF=20
> +BRSF: 47
Features: [0x002f] <3 way calling> <EC/NR> <Voice Recognition> <In-band ringtone> <reject ability>
> OK
< AT+CIND=?
> +CIND: ("call",(0,1)),("service",(0,1)),("call_setup",(0-3)),("callsetup",(0-3))
> OK
< AT+CIND?
> +CIND: 0,1,0,0
> OK
< AT+CMER=3,0,0,1
> OK
< AT+CLIP=1
> OK
Service Level established
      

電話が鳴ったとき、単に a を 押して応答し、 audio は /dev/audio デバイスを通して routed されます。 註として、 remote パーティーと話すためにマイクロホーン接続が必要です。

21.8.Object Exchange

NetBSD は現在、なんらの native OBEX capability がなくて、 NetBSD パッケージコレクションから comms/obexapp あるいは comms/obexftp パッケージをご覧ください。

21.9.Troubleshooting

何にも起こっていないように見えるときは、 NetBSD パッケージコレクションの sysutils/hcidump パッケージから hcidump プログラムを試してみると 有用でしょう。これは NetBSD 上で Bluetooth コントローラーを出入りするパケットを dump する能力が有って、 pinpointing 問題に非常に役立ちます。