Armadilloフォーラム

/dev/hci_ttyとは何でしょうか?

s.tanaka

2022年11月4日 12時19分

G3には/devにhci_ttyというファイルがありますがこれはどの様なものでしょうか?

hci_toolで任意のアドバタイズを飛ばしたいと奮闘しているのですがうまく行かず
他の手を考えているのですが、hci_ttyというデバイスファイルが気になっています。

一通り調べてはみましたがインターネットにも情報が少なく分かりませんでした。
用途・使い方など教えていただけないでしょうか?

よろしくお願いいたします。

コメント

at_dominique.m…

2022年11月4日 13時10分

s.tanakaさん

> G3には/devにhci_ttyというファイルがありますがこれはどの様なものでしょうか?

hci_tty は linux の CONFIG_ST_HCI によって作られたデバイスで、bluetooth を使ってシリアルデータを通信できるはずのデバイスです。
bluetoothctl/hcitool などで使うデバイスではないので、無視してください。

> hci_toolで任意のアドバタイズを飛ばしたいと奮闘しているのですがうまく行かず
> 他の手を考えているのですが、hci_ttyというデバイスファイルが気になっています。

デフォルト状態では、bluetoothというサービスが起動されてるはずですが、いかがでしょうか?
bluetoothctl でそのサービスに接続して、「show」で bluetooth の状態(ちゃんと認識されたか)を確認できると思います。
controller が無事に認識されたら「advertise on」でアドバタイズを有効にできます。

bluetoothctl の使い方については色々情報ありますが、例えばコマンド一覧をここで確認できます: https://qiita.com/noraworld/items/55c0cb1eb52cf8dccc12

デバイスが認識されてない場合には何かの問題ありますので、また聞いてください。

よろしくお願いします。

s.tanaka

2022年11月4日 14時39分

> hci_tty は linux の CONFIG_ST_HCI によって作られたデバイスで、bluetooth を使ってシリアルデータを通信できるはずのデバイスです。
> bluetoothctl/hcitool などで使うデバイスではないので、無視してください。

ご説明ありがとうございます。
ペアリングした相手とのttyの口なんですね。

> デフォルト状態では、bluetoothというサービスが起動されてるはずですが、いかがでしょうか?
> bluetoothctl でそのサービスに接続して、「show」で bluetooth の状態(ちゃんと認識されたか)を確認できると思います。
> controller が無事に認識されたら「advertise on」でアドバタイズを有効にできます。

現在は参考にしたページにあったiBeaconのペイロードが送信されている状態になっています。
下記のようなデータを送ろうとコマンドを打っているもののエラーは出ず、反映されない状態になっています。

#参考にした(FF以降を加工)
hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
< HCI Command: ogf 0x08, ocf 0x0008, plen 32
1E 02 01 1A 1A FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
> HCI Event: 0x0e plen 4
01 08 20 00

#本当に送りたいデータ
hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 0A 16 00 00 44 C3 06 49 6F 3D 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 0A 16 00 00 44 C3 06 49 6F 3D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 0A 16 00 00 44 C3 06 49 6F 3D 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
< HCI Command: ogf 0x08, ocf 0x0008, plen 32
1E 02 01 06 0A 16 00 00 44 C3 06 49 6F 3D 01 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
> HCI Event: 0x0e plen 4
01 08 20 00

> bluetoothctl の使い方については色々情報ありますが、例えばコマンド一覧をここで確認できます:
> https://qiita.com/noraworld/items/55c0cb1eb52cf8dccc12

参考情報ありがとうございます。
任意のペイロードを送る場合は「set-advertise-service」のあたりを使用するのでしょうか?
こちらでも書き方を探っていますが、すでに情報がございましたら教えていただきたいです。

よろしくお願いします。

at_dominique.m…

2022年11月4日 15時49分

> 現在は参考にしたページにあったiBeaconのペイロードが送信されている状態になっています。
> 下記のようなデータを送ろうとコマンドを打っているもののエラーは出ず、反映されない状態になっています。

なるほど、bluetooth が起動していますが、送信したいペイロードが送信されてないということですね。

> 参考情報ありがとうございます。
> 任意のペイロードを送る場合は「set-advertise-service」のあたりを使用するのでしょうか?
> こちらでも書き方を探っていますが、すでに情報がございましたら教えていただきたいです。

hcitool のコマンドに詳しくないのでそちらの返事はすぐできませんが、bluetoothctl の場合は「menu advertise」で service や data でペイロードを指定できます

armadillo# bluetoothctl
[bluetooth]# menu advertise
[bluetooth]# service 6E400001-B5A3-F393-E0A9-E50E24DCCA9E 0x45 0x45 
[bluetooth]# back
[bluetooth]# advertise on
[CHG] Controller 44:C3:06:31:82:D4 SupportedInstances: 0x04
[CHG] Controller 44:C3:06:31:82:D4 ActiveInstances: 0x01
 
 
パソコン# bluetoothctl
[bluetooth]# scan on
...
[CHG] Device 44:C3:06:31:82:D4 ServiceData Key: 6e400001-b5a3-f393-e0a9-e50e24dcca9e
[CHG] Device 44:C3:06:31:82:D4 ServiceData Value:
  45 45                                            EE              
...

advertise メニュー内で「help」を表示すると、uuids, service, manufacturer, data の四つの方法でパイロードを指定できます。
data についてのドキュメンテーションを見当たりませんが、恐らくそれで任意のデータを送信できると思います…こちらで実行しようとしたときに advertise on が失敗したので、私のデータのフォーマットに誤りがあると思いますが、service だけでも自分の uuid と任意なデータを送信できるように見えますのでこれでどうでしょうか?

よろしくお願いします。