2012年5月4日金曜日

mbedでBluetoothデバイスを検出する

USBのインタラプト転送を理解するためにmbedでBluetoothデバイスを検出するだけのプログラムを書いてみた。
本来はUSBマウスを使いたかったが、なぜか認識されなかったのでインタラプト転送があるBluetoothアダプタを選んだ。
既にBlueUSBで実現されているのでBluetoothのプロトコルは参考にしています。
USBホスト機能はNetServicesSourceに含まれていたUSBホストのプログラムを改良した。
バルク転送は実装されていたので、インタラプト転送のエンドポイントのヘッドポインタを
バルクヘッド(HcBulkHeadED)ではなくインタラプトヘッド(HccaInterruptTable)に繋げる。
インタラプト転送はperiodic転送に含まれているので、HcControlのperiodic転送(PLE)を有効にする。
USBホスト初期時に HcPeriodicStart に FI*90/100 を設定する。
プログラムはmbedサイトに置いておきます。

BlueD Bluetooth device discover

使用例:
#include "mbed.h"
#include "BlueD.h"
Serial pc(USBTX, USBRX);

BlueD bd;

int main() {
    pc.baud(460800);
    printf("Bluetooth device discover\n");
    while(1) {
        set addr = bd.discover_devices();
        for (set::iterator it = addr.begin() ; it != addr.end(); it++) {
            string addr(*it);
            string name = bd.lookup_name(addr);
            printf("%s [%s]\n", addr.c_str(), name.c_str());
        }
        wait(30);
    }
}

制限事項
アダプタのUSBハブ経由の接続には対応していない。
USBに接続されているのがBluetoothアダプタなのかは確認していない。
インターバルは32msecに固定。
---

0 件のコメント: