[[freebsd-bluetooth]] ---- FreeBSD 7 Release において。\\ usb bluetooth を利用。利用可能なデバイスは Release note 参照。ただし、usb bluetooth はリストに載っていなくても利用できた。チップが rel note に載っているものを利用しているのかもしれない。未調査。 ====== インストール ====== ===== カーネルモジュールをロードする。 ===== * /boot/loader.conf に以下の記述。ブート時に必要なモジュールがロードされるようになる。 ng_ubt_load="YES" * コマンドでやる場合は、次のようにやる。 # kldload ng_ubt ===== いろんなものの起動 ===== # /etc/rc.d/bluetooth start * この後に usb bluetooth を刺す。 ===== hcsecd の準備 ===== * /boot/rc.conf に追加 hcsecd_enable="YES" * pin コードを使うデバイスのために必要なデーモン ===== sdpd の準備 ===== * サービス発見のためのデーモン.後述の obexapp -s でサーバをあげる場合には、これが動いていないと、obexapp は起動しない. * /etc/rc.conf に追加 sdpd_enable="YES" * 自分でデーモンを起動するなら、以下のコマンド # /etc/rc.d/sdpd start ====== スタック ====== ===== HCI ===== * host controller interface * 周辺機器の捜索、自分のアドレス管理、bdアドレスに対応した名前の取得など、デバイスに近いことを司るレイヤー。 ===== l2cap ===== * logical link control and adaptation protocol * アドレスの管理、パケットのセグメンテーション、リアセンブリなど、アドレスとデータグラムの操作を司るレイヤー。 * Maximum Transfer Unit(MTU) サイズはデフォルトで 672bytes. * 最小:48 bytes, 最大:65535 bytes ====== プロファイル ====== * ハンズフリーとヘッドセットは未対応.(2008/07現在) ====== コマンドとか ====== ===== hccontrol ===== * HCI レイヤーに対して命令するためのコマンド ==== hccontrol -n ubt0hci read_bd_addr ==== * 自分の bluetooth address を表示。 ==== hccontrol -n ubt0hci inquiry ==== * 周辺機器を検索。 ==== hccontrol -n ubt0hci read_remote_name_request ==== * 機器の名前を取得。 ===== obexapp ===== * comms/obexapp をインストール * ファイル転送を行うのに使われるプロトコル。 ==== サーバモード ==== * サーバを起動しておくと、obex でのファイル転送を受け付けられる. # obexapp -s -C 1 -r /var/spool/obex/ * -C * -r * -s : サーバモードであることを指定. ==== クライアントモード ==== * ファイル転送 # obexapp -c -a -C -n put * -n 以下を省略すると、ftp のインタラクティブモードに類似したモードになる。そこで、put とするとファイル転送が可能となる. ====== プログラミング ====== ===== socket ===== * raw socket 利用 socket(PF_BLUETOOTH, SOCK_RAW, BLUETOOTH_PROTO_HCI); ===== inquiry ===== * 近隣 bluetooth ノードを検索する * デバイスに対して、inquiry することを伝える。 * デバイスが検索してきた結果を受け取る。 ===== 関数 ===== ==== bt_gethostbyaddr() ==== * /etc/bluetooth/hosts をルックアップする。 ===== データ構造 ===== ==== バイトオーダー ==== * bluetooth のバイトオーダは,little endian * (TCP/IP の場合は big endian) ==== 自分のホストのbdアドレスを取得する場合 ==== * socket へは以下のようなデータ構造 +----------------+ |ng_hci_cmd_pkt_t| +----------------+ * socket からは以下のようなデータ構造が返ってくる +-----------------------+ |ng_hci_event_pkt_t | +-----------------------+ |ng_hci_command_compl_ep| +-----------------------+ |ng_hci_read_bdaddr_rp | +-----------------------+ * ng_hci_read_bdaddr_rp #define NG_HCI_OCF_READ_BDADDR 0x0009 typedef struct { u_int8_t status; /* 0x00 - success */ bdaddr_t bdaddr; /* unit address */ } __attribute__ ((packed)) ng_hci_read_bdaddr_rp; ===== ドキュメント ===== * 基本 man とソースコード.freebsd 上での bluetooth programming の資料なんか web には転がってません。 ==== man ==== * man ng_btsocket * bluetooth socket に関するドキュメント