2017-01-05 4 views
0

私は、BLE SoC (QN9021)をUARTインターフェイス経由でLinuxシステム(ビーグル・ボーン・ランopenwrt)に接続しています。私はlinuxがシステムに接続されたBLEを認識して、gatttool, hcitoolのようなコマンドを自分のBLEで動作させる必要があります。Linuxは私のBLEを識別しますか?

また、私はBluezを使用しています。BlueZライブラリを見つけて直接私のBLEと通信したいと思っています。

ソースファイルのように見えるbluezsocket()を使用して、Bluetoothアダプタと通信します。前述したように、私はUART経由BLEのSoCを接続してい

/* Open HCI device. 
* Returns device descriptor (dd). */ 
int hci_open_dev(int dev_id) 
{ 
struct sockaddr_hci a; 
int dd, err; 

/* Check for valid device id */ 
if (dev_id < 0) { 
    errno = ENODEV; 
    return -1; 
} 

/* Create HCI socket */ 
dd = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI); 
if (dd < 0) 
    return dd; 

/* Bind socket to the HCI device */ 
memset(&a, 0, sizeof(a)); 
a.hci_family = AF_BLUETOOTH; 
a.hci_dev = dev_id; 
if (bind(dd, (struct sockaddr *) &a, sizeof(a)) < 0) 
    goto failed; 

return dd; 

failed: 
err = errno; 
close(dd); 
errno = err; 

return -1; 
} 

:私は、ソケット呼び出しが含まhcitool.cソースファイルのセクションを掲載しています。私のBLEをbluetoothとして認識させるにはどうすればいいですか?socket()のような関数呼び出しは、私のBLEの記述子を開くべきですか?

+1

広範な検索はしていませんが、['hciattach'](http://manpages.ubuntu.com/manpages/trusty/man8/hciattach.8.html)を使用する必要があると思います。 – Hasturkun

+0

できますかそれはプログラムによって? – abhiarora

+1

あなたは、しかし、HCIがどこにも行かないと仮定すると、initスクリプトかあなたのコードのいずれかに 'hciattach'を実行させることができます(特定のHCIの初期化コードがあるので)。詳細については、[hciattach source](http://git.kernel.org/cgit/bluetooth/bluez.git/tree/tools/hciattach.c)を参照してください。 – Hasturkun

答えて

1

実行時に何かが表示されますか?

dmesg | grep blue 

またはあなたはそれがあなたのカーネルで利用可能だということを、このモジュール用のLinuxドライバを持っていることを確認する必要があり

lsmod | grep blue 

(NXPとTIは必ずしも一緒に遊ぶのが好きではありません)、おそらくあなたのデバイスツリーに組み込まれていることを確認します。

ドライバーをサポートしているTI BLEモジュールを使用する方がいいでしょう。

+0

QNをサポートするためのlinuxモジュールを作れます。私を案内してください。 – abhiarora

+0

私の最新の質問を見てください! [私の新しい質問](http://stackoverflow.com/questions/41944822/bluetooth-over-uart-using-hciattach) – abhiarora

関連する問題