Linux コンピューターで Bluetooth Low Energy Peripheral を作成する実験を行っています (目標は、iPhone から Bluetooth 経由でデータを送信することです)。私は現在ツールhciconfig
、hcitool
およびを使用していますhcidump
。
私の現在の実験は、iOS CoreBluetooth ライブラリが取得する特定の UUID を持つサービスを宣伝することです。(注: iBeacon を作成しようとしているわけではありません)。
現在、私を悩ませているのは、実際には 1 つのコマンドと同じくらい簡単です。
hcitool -i hci0 cmd 0x08 0x0008 15 02 01 1a 11 07 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50
私がすべきだと思うことは次のとおりです。
- 0x08: グループを BLE に設定
- 0x0008: コマンドを HCI_LE_Set_Advertising_Data に設定
- 0x15: ヘッダーの有効バイトの長さを 21 に設定します。 (フラグ パケットに 3 バイト、サービス構造に 18 バイト)
- 0x02: Flags 構造体の長さを 2 バイトに設定
- 0x01: 構造体の Type を AD Flags に設定
0x1a: フラグ値:
bit 0 (OFF) LE Limited Discoverable Mode bit 1 (ON) LE General Discoverable Mode bit 2 (OFF) BR/EDR Not Supported bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller) bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
(旗の終わり)
- 0x11 サービス構造の長さを 17 バイトに設定
- 0x07 構造タイプを 128 ビットに設定 完全なサービス UUID リスト
- 0x41 ... 0x50 テスト サービスの UUID を ABCDEFGHIJKLMNOP に設定
で見る限り、hcidump
適切に実行され、希望どおりに見えます。しかし、それはエラーで拒否されました:
LE Set Advertising Data (0x08|0x0008) ncmd 1
status 0x12
Error: Invalid HCI Command Parameters
そして、私はそれを正しくするために丸一日を費やしました. 熟練した誰かが私が間違ったことを見ていますか? そして、これはサービスを宣伝する正しい方法ですか?
(興味のある読者へのコンテキスト: NodeJs で Bleno ライブラリを使用してやりたいことを成功裏に達成しました。しかし、これはシステムの全体像には当てはまりません。広告のために HCITool を直接使用することは、実験のためだけであり、記述されます。後で Python で)