hci_get_route

ここから、LinuxBluetooth通信をしてみる。
まず、Bluetoothを使えるように設定とか準備する。
FedoraVirtualBoxなので、Windows側で、

検索などでBluetooth設定を出す
検索などでBluetooth設定を出す

検索などでBluetooth設定を出す。

まあ、オンになっていて発見可能なら良し。
まあ、オンになっていて発見可能なら良し。

まあ、オンになっていて発見可能なら良し。
通信先はスマホなので、

Bluetooth切断になってるので
Bluetooth切断になってるので

Bluetooth切断になってるので、

この状態から右上のトグルをON
この状態から右上のトグルをON

この状態から右上のトグルをON。

ONにするとさっきのWindows側が見える
ONにするとさっきのWindows側が見える

ONにするとさっきのWindows側が見える。
Windowsに戻って、デバイスを追加するところをクリックすると、

これが出るのでBluetooth
これが出るのでBluetooth

これが出るのでBluetooth

スマホ側も出てる
スマホ側も出てる

スマホ側も出てる。

タスクトレイにも出ている
タスクトレイにも出ている

タスクトレイにも出ている。

Enabling Bluetooth in VirtualBox

Fedora31の設定
Fedora31の設定

VirtualBoxのFedora31の設定で、

USBで右の追加
USBで右の追加

USBで右の追加、

Surface系は内臓でもUSBドングルみたいにここに出てくるのか
Surface系は内臓でもUSBドングルみたいにここに出てくるのか

Surface系は内臓でもUSBドングルみたいにここに出てくるのか。

追加してこの状態で改めて起動
追加してこの状態で改めて起動

追加してこの状態で改めて起動。

ところがこの状態だと落ちてしまう。
ところがこの状態だと落ちてしまう。

ところがこの状態だと落ちてしまう。

まさかとおもってUSB2.0をUSB3.0にしてみた。
まさかとおもってUSB2.0USB3.0にしてみた。

まさかとおもってUSB2.0USB3.0にしてみた。

奇跡的に動いた。そしてそのままbg1バージョンで起動してしまった。
奇跡的に動いた。そしてそのままbg1バージョンで起動してしまった。

奇跡的に動いた。そしてそのままbg1バージョンで起動してしまった。

Linuxからもスマホが見えた
Linuxからもスマホが見えた

LinuxBluetooth設定からもスマホが見えた。
LinuxBluetoothを扱うには、BlueZを入れる必要がある。

BlueZ
C言語でBluetoothスタックを叩きたい人のBluetooth開発入門その1
http://people.csail.mit.edu/albert/bluez-intro/c404.html

Ubuntuとかだと、apt-getで、

$ sudo apt-get install libbluetooth-dev

なんだけど、Fedoraだと、yumで、

$ sudo yum install bluez-libs-devel
Fedora Modular 31 - x86_64                      8.1 kB/s | 4.9 kB     00:00    
Fedora Modular 31 - x86_64 - Updates             16 kB/s | 4.8 kB     00:00    
Fedora 31 - x86_64 - Updates                    7.7 kB/s | 4.9 kB     00:00    
Fedora 31 - x86_64                               30 kB/s | 4.9 kB     00:00    
依存関係が解決しました。
================================================================================
 Package                 Architecture  Version             Repository      Size
================================================================================
インストール:
 bluez-libs-devel        x86_64        5.55-1.fc31         updates        159 k
アップグレード:
 bluez                   x86_64        5.55-1.fc31         updates        1.3 M
 bluez-cups              x86_64        5.55-1.fc31         updates         90 k
 bluez-libs              x86_64        5.55-1.fc31         updates         90 k
 bluez-obexd             x86_64        5.55-1.fc31         updates        212 k

トランザクションの概要
================================================================================
インストール    1 パッケージ
アップグレード  4 パッケージ

ダウンロードサイズの合計: 1.9 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/5): bluez-cups-5.55-1.fc31.x86_64.rpm        126 kB/s |  90 kB     00:00    
(2/5): bluez-libs-5.55-1.fc31.x86_64.rpm        212 kB/s |  90 kB     00:00    
(3/5): bluez-5.55-1.fc31.x86_64.rpm             868 kB/s | 1.3 MB     00:01    
(4/5): bluez-obexd-5.55-1.fc31.x86_64.rpm       409 kB/s | 212 kB     00:00    
(5/5): bluez-libs-devel-5.55-1.fc31.x86_64.rpm   58 kB/s | 159 kB     00:02    
--------------------------------------------------------------------------------
合計                                            637 kB/s | 1.9 MB     00:03    
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  scriptletの実行中: bluez-libs-5.55-1.fc31.x86_64                          1/1
  アップグレード中 : bluez-libs-5.55-1.fc31.x86_64                          1/9
  アップグレード中 : bluez-5.55-1.fc31.x86_64                               2/9
  scriptletの実行中: bluez-5.55-1.fc31.x86_64                               2/9
  アップグレード中 : bluez-cups-5.55-1.fc31.x86_64                          3/9
  アップグレード中 : bluez-obexd-5.55-1.fc31.x86_64                         4/9
  scriptletの実行中: bluez-obexd-5.55-1.fc31.x86_64                         4/9
  インストール中   : bluez-libs-devel-5.55-1.fc31.x86_64                    5/9
  scriptletの実行中: bluez-obexd-5.51-1.fc31.x86_64                         6/9
  整理             : bluez-obexd-5.51-1.fc31.x86_64                         6/9
  整理             : bluez-cups-5.51-1.fc31.x86_64                          7/9
  scriptletの実行中: bluez-5.51-1.fc31.x86_64                               8/9
  整理             : bluez-5.51-1.fc31.x86_64                               8/9
  scriptletの実行中: bluez-5.51-1.fc31.x86_64                               8/9
  整理             : bluez-libs-5.51-1.fc31.x86_64                          9/9
  scriptletの実行中: bluez-libs-5.51-1.fc31.x86_64                          9/9
  検証             : bluez-libs-devel-5.55-1.fc31.x86_64                    1/9
  検証             : bluez-5.55-1.fc31.x86_64                               2/9
  検証             : bluez-5.51-1.fc31.x86_64                               3/9
  検証             : bluez-cups-5.55-1.fc31.x86_64                          4/9
  検証             : bluez-cups-5.51-1.fc31.x86_64                          5/9
  検証             : bluez-libs-5.55-1.fc31.x86_64                          6/9
  検証             : bluez-libs-5.51-1.fc31.x86_64                          7/9
  検証             : bluez-obexd-5.55-1.fc31.x86_64                         8/9
  検証             : bluez-obexd-5.51-1.fc31.x86_64                         9/9

アップグレード済み:
  bluez-5.55-1.fc31.x86_64               bluez-cups-5.55-1.fc31.x86_64          
  bluez-libs-5.55-1.fc31.x86_64          bluez-obexd-5.55-1.fc31.x86_64        

インストール済み:
  bluez-libs-devel-5.55-1.fc31.x86_64                                          

完了しました!
$

こう入る。
今回は、まずhci_get_routeでデバイスIDを取得する。

こうして、

$ vi hci_get_route.c
$ gcc -o hci_get_route hci_get_route.c -lbluetooth
$ ./hci_get_route
dev_id = 0
$

こうなる。
0だけど、負の値だと失敗なので、これで正解なのかな。

Sample/bluez/hci_get_route/hci_get_route/src/hci_get_route at master · bg1bgst333/Sample · GitHub