LinuxマシンでBlueZスタックを使用して、カスタムサービスと特性を備えたGATTサーバーを作成しようとしています。最終的な目標は、任意の中央デバイス(iOSまたはAndroidデバイスなど)を使用してGATTサーバーに接続し、サービスと特性を検出し、特性内のデータを操作することです。
例:
中央デバイスから、周辺デバイスを確認して接続し、3つの特性(0xAAAA、0xBBBB、0xCCCC)を持つ1つのサービス(0xFFFF)を検出する必要があります。これで、0xAAAAの値を読み取り、0xBBBBの値を読み書きして、0xCCCCで通知を有効にできるはずです。
同様の質問 が存在することは承知していますが、これは周辺機器を広告主として使用する方法を説明しているにすぎないことに注意してください。 別の解決済みの質問 GATTサーバーの作成方法は説明していますが、特性のプロパティ(読み取り可能、通知可能など)の操作方法は説明していません。または、何かが足りない可能性があります。
前もって感謝します。
Gatt-exampleプラクティス、またはalert /server.cなどのprofile /ディレクトリの下に定義されたプロファイルを確認できます。基本的には、既存のコードに従って、gatt_service_add()関数を使用してサービスを登録する必要があります。例えば :
gatt_service_add(adapter, GATT_PRIM_SVC_UUID, 0xFFFF,
/* Char 1 */
GATT_OPT_CHR_UUID16, 0xAAAA,
GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ,
GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, read_func_callback,
/* Char 2 Define here */
...
/* Char 3 Define here */
...
GATT_OPT_INVALID);
}
また、詳細を忘れましたが、アラートサーバーを機能させるには、構成中に「--enable-maintainer-mode」と「--enable-experimental」を追加して、実験的(およびメンテナーモード?)を有効にする必要があります。
実行するには、コンパイルされた「bluetoothd」を-nおよび-dオプションを指定して実行し、デバッグします(実験サービスを有効にする場合は-Eも使用します)。 bluetoothdを実行した後、アダプタを再度リセットすることをお勧めします。そして、gatttoolを使用してリモートデバイスから接続できます(リモートデバイスでbluetoothdを実行する場合も同様です)。
1)Bluezフォルダに移動します
2)Sudo ./configure --prefix =/usr --mandir =/usr/share/man --sysconfdir =/etc --localstatedir =/var --disable-systemd --enable-experimental --enable-maintainer-モード
3)Sudoがすべてを作る
4)接続可能なパケットをアドバタイズします
# activate bluetooth
Sudo hciconfig hci0 up
# set advertise data: "hello world"
Sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
# start advertising as connectable
Sudo hciconfig hci0 leadv 0
5)SudoサービスBluetoothストップ
6)Sudo src/bluetoothd -d -n
7)他のPCから、(MAC ID gatt server macの変更)と入力します。
gatttool -b gatt_server_mac --interactive
ステップ6は、コンパイルする場合のためのものですplugins/gatt-example.c
コンパイルする場合server .c from profile/timeまたはprofle/alert(replace with alert with place時間の)またはプロファイルフォルダのその他のファイルの置換ステップ6
Sudo src/bluetoothd --plugin = time -n
Bluetoothctlコマンドラインツールを使用した別のソリューションが存在します。これの詳細はここで見つけることができます:-
BlueZ:コマンドラインからGATTサーバーを設定する方法
Bluetoothctlがいつ導入されたかはわかりませんが、この記事の執筆時点では比較的最近のものであるため、以前のバージョンのBlueZには存在しませんでした。私はBlueZv5.50を使用しており、これは私がテストしたバージョンです。