Android 16 では、距離測定モジュールが導入されました。このプロトコルとペイロードの仕様では、測距に参加するイニシエータ デバイスとレスポンダ デバイスの間で、測距構成の交換、測距の開始と停止に使用される帯域外(OOB)通信のメッセージ シーケンスとペイロードを定義します。
このページの主な目的は、Android 以外のデバイス プロバイダがこの仕様を実装して、デバイスを Android デバイスとの距離測定に対応できるようにすることです。
メッセージとメッセージ シーケンス
このセクションでは、メッセージとメッセージ交換のシーケンスについて説明します。
次の表に、OOB 交換に存在するすべてのメッセージを示します。
メッセージ | メッセージ ID |
---|---|
Ranging Capability Request |
0x0 |
Ranging Capability Response |
0x1 |
Ranging Configuration |
0x2 |
Ranging Configuration Response (任意) |
0x3 |
Stop Ranging |
0x6 |
Stop Ranging Response (任意) |
0x7 |
図 1 と図 2 に示すように、メッセージ交換のトリガー方法は通信チャネルによって異なります。
BLE GATT などの接続ベースの通信チャネルの場合、メッセージ交換は、イニシエータ デバイスがレスポンダ デバイスに Ranging Capability Request
を送信することから始まります。レスポンダー デバイスは、図 1 に示すように Ranging
Capability Response
を送信して応答します。
図 1. 接続ベースの通信チャネルを使用した OOB メッセージ交換。
広告ベースの通信チャネルの場合、応答側デバイスはまず Ranging Capability
をアドバタイズします。この場合、Ranging Capability Request
は開始デバイスから送信されません。代わりに、アドバタイズメントを検出した後、開始側(初期スキャナ)デバイスの準備が整うと、図 2 に示すように、最初のメッセージとして Ranging Configuration
をアドバタイズすることで応答します。
図 2. アドバタイズメント ベースの通信を使用した OOB メッセージ交換。
残りのメッセージ交換はどちらの場合も同じです。レスポンダー デバイスは、Ranging Configuration
メッセージを受信するとすぐに測距を開始します。レスポンダー デバイスは、Stop
Ranging
メッセージを受信または検出すると、距離測定を停止します。
接続ベースのフローでは、レスポンダー デバイスは Ranging Capability Request
メッセージでリクエストされた測距テクノロジーの機能のみを入力しますが、アドバタイズ フローでは、先行する機能リクエスト メッセージがないため、レスポンダー デバイスはすべての機能をリストする必要があります。
イニシエータ デバイスは、送信するリクエスト メッセージに対するレスポンスを 1 つだけ受信することを想定しています。レスポンダー デバイスは、任意の順序で任意のリクエストに応答できるように、そのような想定をしてはなりません。これにより、レスポンダー デバイスは、イニシエーター デバイスからの複数の連続した Ranging Capability Request
メッセージや、順序が異なるその他のメッセージに応答できます。
測距テクノロジー ID
次の表に、測距テクノロジーの ID を示します。
測距テクノロジー | ID |
---|---|
UWB | 0x0 |
CS | 0x1 |
Wi-Fi NAN RTT | 0x2 |
RSSI | 0x3 |
RFU | 0x4 - 0xFF |
これらの ID は、測距テクノロジー ID が必要な次の表で使用されます。レンジング テクノロジーのビットフィールドを含むフィールドの場合、そのテクノロジーがビットフィールドに含まれると、テクノロジーの ID のインデックスに対応するビットが設定されます。
たとえば、RSSI の ID 値は 3 ですが、RSSI が測距テクノロジーのビットフィールドに含まれている場合、ID(3)の位置にあるビットをオンにする必要があります(最初のビットは位置 0 にあります)。これにより、ビットフィールドの結果の値は 0x8 になります。UWB と RSSI の両方が含まれている場合、ビットフィールドの値は 0x0A(ビット 0 と 3 の両方がオン)になります。
メッセージの形式
各メッセージは、ヘッダーとペイロードで構成されます。
図 3. メッセージの形式。
ヘッダー
サイズ: 2 バイト
説明: すべてのメッセージに共通するヘッダーは、メッセージの最初の部分です。ヘッダーには、バージョンとメッセージ タイプの ID が含まれます。バージョン フィールドには、メッセージのコンテンツが準拠するこの仕様のバージョンを指定します。この仕様の現在のバージョンは 1
です。異なるバージョンのデバイス間でバージョニングがどのように使用されるかについては、バージョニングをご覧ください。ヘッダーはさまざまなバージョン間で下位互換性が維持されるため、ユースケースは常にヘッダーを解析して、メッセージのバージョンと ID を特定できます。
ヘッダーの概要は次の表のとおりです。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | バージョン | 0x1 - 現在のバージョン |
1 | unit8 | メッセージ ID |
|
ペイロード
サイズ: 可変(メッセージの種類によって異なる)
説明: ペイロードは、メッセージの最後の部分で、ヘッダーの後に続きます。ペイロードはメッセージのタイプによって異なります。各メッセージ タイプのペイロードの形式は、次のセクションで定義されています。
測距機能リクエスト メッセージ ペイロード
サイズ(ヘッダー サイズは含まれません): 2 バイト
説明: メッセージ交換を開始するために、イニシエータ デバイスから送信されます。通信チャネルが広告に基づく場合、このメッセージは省略可能です。この場合、レスポンダ デバイスは最初のステップとして Ranging
Capability
メッセージをアドバタイズする必要があります。イニシエータ デバイス(最初のスキャナ)はアドバタイズメントを読み取り、Ranging Capability
メッセージで直接応答するため、このメッセージは不要です。
次の表に、Ranging Capability Request
メッセージ ペイロードの概要を示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | リクエストされた距離測定テクノロジーのビットフィールド |
|
Ranging Capability Response メッセージ ペイロード
サイズ(ヘッダー サイズは含まれません): 可変(共通部分 2 バイトと、含まれる各測距テクノロジー バイトのサイズ)
説明: Ranging Capability
Request
メッセージへのレスポンスとしてレスポンダーによって送信されます。このメッセージ ペイロードは、次の表に示すように、共通部分と測距テクノロジー固有の部分(BLE CS、Wi-Fi NAN RTT、BLE RSSI)で構成されています。各測距技術固有の部分は、その測距技術がレスポンダ デバイスでサポートされ、Ranging Capability Request
メッセージでリクエストされている場合にのみ追加する必要があります。広告通信チャネルの場合、サポートされているすべての測距技術を含める必要があります。
一般的な Ranging Capability Response
メッセージ ペイロードを次の表にまとめます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | サポートされている測距テクノロジーのビットフィールド。ペイロードの残りの部分に続く測距テクノロジーの機能のセットを示します。 |
|
2 | バイト配列 | 測距テクノロジー機能のバイト数。 | テクノロジーごとに定義された構造体の繰り返しブロック。 |
UWB Ranging Capability Response
メッセージ ペイロードを次の表にまとめます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x0 - UWB |
1 | uint8 | サイズ | UWB 機能のサイズ(バイト単位)(テクノロジー ID フィールドとサイズ フィールドを含む)。 |
2 | uint8*2 | UWB アドレス | 2 バイトのデバイス UWB アドレス。 |
4 | uint8*4 | サポートされるチャネルのビットフィールド | サポートされているチャネルのビットフィールド。ビットが 0 に設定されている場合はサポートされていないことを示し、1 に設定されている場合はサポートされていることを示します。ビット 0 はチャンネル 0 に対応します。LSB == channel 0 MSB == channel 31 |
8 | uint8*4 | サポートされているプリアンブル インデックス ビットフィールド | サポートされているプリアンブル インデックスのビットフィールド。ビットが 0 に設定されている場合はサポートされていないことを示し、1 に設定されている場合はサポートされていることを示します。ビット 0 はプリアンブル インデックス 1 に対応します。LSB == preamble index 1 MSB == preamble index 32 |
12 | uint8*4 | サポートされている構成 ID ビットフィールド | サポートされている UWB 構成 ID のビットフィールド。ビットが 0 に設定されている場合はサポートされていないことを示し、1 に設定されている場合はサポートされていることを示します。LSB == config Id 0 > MSB == config Id 31 |
16 | uint8*2 | サポートされている最小測距間隔 | サポートされている最速の測距間隔(ミリ秒単位)を示します。使用できる値(ミリ秒単位):
|
18 | uint8 | サポートされている最小スロット期間 | サポートされている最小スロット期間(ミリ秒単位)を示します。たとえば、デバイスが 1 ミリ秒を返した場合、2 ミリ秒以上のスロット期間もサポートしていると見なされます。使用できる値(ミリ秒単位):
|
19 | サポートされている UWB デバイスの役割のビットフィールド | サポートされている UWB ロールのビットフィールド。たとえば、両方でサポートされている最終的なフィールド値は 0x3 です。
|
BLE CS Ranging Capability Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x1 - BLE CS |
1 | uint8 | サイズ | BLE CS 機能のバイト数(Technology ID フィールドと Size フィールドを含む)。 |
2 | uint8 | サポートされているセキュリティ タイプのビットフィールド | BLE CS でサポートされているセキュリティ タイプのビットフィールド。
|
3 | uint8*6 | デバイスの住所 | BLE CS に使用されるデバイスのアドレス。ビッグ エンディアン順。 |
Wi-Fi NAN RTT Ranging Capability Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x2 - Wi-Fi NAN RTT |
1 | uint8 | サイズ | BLE RSSI 機能のサイズ(バイト単位)(テクノロジー ID フィールドとサイズ フィールドを含む)。 |
2 | uint8 | サポートされている機能のビットフィールド | サポートされている機能のビットフィールド。
|
3 | uint8 | 定期的な測距をサポート |
|
4 | uint8 | サポートされている帯域幅 | この情報は、Wi-Fi NAN を使用して達成可能な測距精度を導き出すのに役立ちます。また、アプリが測距に UWB、BLE CS、BLE RSSI、Wi-Fi NAN のいずれを使用するかを判断するのにも役立ちます。
|
5 | uint8 | サポートされている受信チェーンの数 | この情報は、Wi-Fi NAN を使用して達成可能な測距精度を導き出すのに役立ちます。また、アプリが測距に UWB、BLE CS、BLE RSSI、Wi-Fi NAN のいずれを使用するかを判断するのにも役立ちます。
|
BLE RSSI Ranging Capability Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x3 - BLE RSSI |
1 | uint8 | サイズ | BLE RSSI 機能のサイズ(テクノロジー ID フィールドとサイズ フィールドを含む)(バイト単位) |
2 | uint8*6 | デバイスの住所 | BLE RSSI に使用されるデバイスのアドレス(ビッグ エンディアン順) |
Ranging Configuration メッセージ ペイロード
サイズ(ヘッダー サイズは含まれません): 可変(共通部分 4 バイトと、含まれる各測距テクノロジー バイトのサイズ)。
説明: このメッセージはイニシエータによって送信され、各測距テクノロジーが測距を開始できる構成が含まれています。レスポンダー デバイスは、このメッセージを受信すると、示された各測距テクノロジーで測距を開始しようとしなければなりません。このメッセージ ペイロードは、次の表に示すように、共通部分と測距テクノロジー固有の部分(UWB、BLE CS、Wi-Fi NAN RTT、BLE RSSI)で構成されます。
一般的な Ranging Configuration
メッセージ ペイロードを次の表にまとめます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | 距離測定テクノロジーの構成セットのビットフィールド | このメッセージに構成データが含まれ、構成パラメータを設定する必要がある測距テクノロジーのビットフィールド。
|
2 | uint8*2 | ビットフィールド | RFU。測距テクノロジー構成セット ビットフィールド フィールドと同じ値に設定する必要があります。 |
4 | バイト配列 | 距離測定技術の構成バイト | テクノロジーごとに定義された構造体の繰り返しブロック |
次の表に、UWB Ranging Configuration
メッセージ ペイロードの概要を示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x0 - UWB |
1 | uint8 | サイズ | UWB 構成のサイズ(テクノロジー ID フィールドとサイズ フィールドを含む)(バイト単位) |
2 | uint8*2 | UWB アドレス | 2 バイトのデバイス UWB アドレス |
4 | uint8*4 | セッション ID | 生成されたセッション ID。セッション ID は、スマートフォンと周辺機器間の測距セッションの一意の識別子です。 |
8 | uint8 | 選択した構成 ID | 選択された構成 ID 番号(整数)。構成 ID は、UWB 距離測定セッションで使用する必要があるタイミング パラメータとセキュリティのタイプを指定します。 |
9 | uint8 | 選択したチャンネル | UWB 距離測定セッション用に選択されたチャネル |
10 | uint8 | 選択されたプリアンブル インデックス | UWB 距離測定セッションで選択されたプリアンブル インデックス |
11 | uint8*2 | 選択した測距間隔 | 選択された測距間隔のレート(ミリ秒単位)。使用できる値(ミリ秒単位):
|
13 | uint8 | 選択した時間枠の長さ | 選択したスロットの再生時間(ミリ秒単位)。使用できる値(ミリ秒単位):
|
14 | uint8 | セッション キーの長さ | セッション キーの長さ(バイト単位) |
15 | バイト配列 | セッションキー | セッションキー。S-STS が使用されている場合、最初の 2 バイトはベンダー ID で、次の 6 バイトは静的 STS IV です。P-STS が使用されている場合、これは 16 バイトまたは 32 バイトのセッション キーです。使用されるセキュリティのタイプは、構成 ID によって決まります。 |
可変 | uint8*2 | 国コード | ISO 3166-1 alpha-2 の国コード(2 つの ASCII 文字で表される) |
可変 | uint8 | 選択したデバイスのロール |
|
可変 | uint8 | 選択したデバイスモード |
|
BLE CS Ranging Configuration
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x1 - BLE CS |
1 | uint8 | サイズ | BLE CS 構成のサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位) |
2 | uint8 | 選択したセキュリティ タイプ | 選択されたセキュリティ タイプ。指定できる値:
|
3 | uint8*6 | デバイスの住所 | BLE CS に使用されるデバイスのアドレス(ビッグ エンディアン順) |
Wi-Fi NAN RTT Ranging Configuration
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x2 - Wi-Fi NAN RTT |
1 | uint8 | サイズ | Wi-Fi NAN RTT 構成のサイズ(テクノロジー ID フィールドとサイズ フィールドを含む)(バイト単位) |
2 | uint8 | サービス名の長さ | [サービス名] フィールドの長さ(バイト単位)。Wi-Fi Aware 仕様 v4.0 セクション 1.3.3 表 1 を参照してください。定義。 |
3 | バイト配列 | サービス名 | サービス名。Wi-Fi Aware 仕様 v4.0 セクション 1.3.3 表 1 を参照してください。定義。 |
可変 | uint8 | デバイスの役割 |
|
可変 | uint8 | 定期的な測距を使用する |
|
BLE RSSI Ranging Configuration
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測距テクノロジー ID | 0x3 - BLE RSSI |
1 | uint8 | サイズ | BLE RSSI 構成のサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位) |
2 | uint8*6 | デバイスの住所 | BLE RSSI に使用されるデバイスのアドレス(ビッグ エンディアン順) |
Ranging Configuration Response メッセージ ペイロード
サイズ(ヘッダー サイズは含まれません): 2 バイト
説明: このメッセージは、Ranging Configuration
メッセージへのレスポンスとしてレスポンダーによって送信されます。このメッセージは省略可能です。使用するコミュニケーション チャネルでリクエストごとに明示的なレスポンスが必要な場合にのみ必要です。
Ranging Configuration Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | Ranging technologies configuration set successfully bitfield | 正常に設定された測距テクノロジーのビットフィールド。ビットフィールドは、テクノロジーがリクエストされ、正常に設定された場合、レンジング テクノロジー ビットを 1 に設定し、それ以外の場合は 0 に設定します。
|
Stop Ranging メッセージ ペイロード
サイズ(ヘッダー サイズは含まれません): 2 バイト
説明: このメッセージは、指定された測距テクノロジーによる測距を停止するタイミングになったときに、イニシエータ デバイスによって送信されます。
次の表に、Stop Ranging
メッセージ ペイロードの概要を示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | ビットフィールドを停止する測距テクノロジー | 測距を停止する必要がある測距テクノロジーのビットフィールド。ビットが 1 に設定されている場合は、測距テクノロジーが測距を停止する必要があることを示します。0 に設定されている場合は、測距テクノロジーがそもそも測距していなかったか、すでに測距している場合は測距を継続する必要があることを示します。一部の測距テクノロジー(CS など)では、測距はイニシエータ側でのみ開始および停止されるため、これは no-op です。
|
Stop Ranging Response メッセージ ペイロード
サイズ(ヘッダー サイズは含まれません): 2 バイト
説明: このメッセージは、Stop Ranging
メッセージへのレスポンスとしてレスポンダーによって送信されます。このメッセージは省略可能です。使用するコミュニケーション チャネルでリクエストごとに明示的なレスポンスが必要な場合にのみ必要です。
次の表に、Stop Ranging Response
メッセージ ペイロードの概要を示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | Ranging technologies stopped successfully bitfield | 測距が正常に停止した測距テクノロジーのビットフィールド。ビットフィールドは、テクノロジーの停止がリクエストされ、正常に停止した場合に、レンジング テクノロジー ビットを 1 に設定し、それ以外の場合は 0 に設定します。
|
バージョニング
仕様のバージョンは、各メッセージのヘッダーに含まれています。このセクションでは、デバイスのいずれか(イニシエータまたはレスポンダ)がもう一方のデバイスよりも古いバージョンである場合に、通信がどのように行われるかを定義します。
ケース 1: 接続ベースの通信チャネル
このセクションでは、接続ベースの通信チャネルを使用するケースについて説明します。このケースでは、Ranging Capability Request
はイニシエータ デバイスから送信される最初のメッセージです。
ケース 1.a: イニシエータは新しいバージョンの仕様をサポートし、レスポンダは古いバージョンの仕様をサポートします。
イニシエータ デバイスは、新しいバージョンの Ranging Capability Request
メッセージを送信します。レスポンダー デバイスは古いバージョンのみをサポートしているため、そのバージョンで応答します。その後、メッセージ交換の残りの部分にはレスポンダーの古いバージョンが使用されます。つまり、Ranging Capability Request
メッセージには下位互換性が必要です。
ケース 1.b: イニシエータは古いバージョンの仕様をサポートし、レスポンダは新しいバージョンの仕様をサポートします。
レスポンダー デバイスは、イニシエーター デバイスが新しいバージョンを使用できないことを認識し、イニシエーター デバイスが最初にリクエストした古いバージョンのみを使用してメッセージを送信します。
ケース 2: 広告ベースのコミュニケーション チャネル
このセクションでは、広告ベースの通信チャネルを使用するケースについて説明します。このケースでは、レスポンダ デバイスが初期リクエストなしで Ranging Capability Request
を直接アドバタイズします。
ケース 2.a: イニシエータは新しいバージョンの仕様をサポートし、レスポンダは古いバージョンの仕様をサポートしている。
Ranging Capability Response
アドバタイズメントで設定された古いバージョンが、残りの通信で使用されます。
ケース 2.b: イニシエータは古いバージョンの仕様をサポートし、レスポンダは新しいバージョンの仕様をサポートします。
Ranging Capability Response
広告の新しいバージョンは、新しいバージョンを使用している場合でもイニシエータ デバイスがメッセージを読み取れるように、下位互換性がある必要があります。イニシエータ デバイスは、サポートしている古いバージョンを使用して Ranging
Configuration
メッセージを送信します。このバージョンは、以降のコミュニケーションで使用されます。
Ranging Capability Response
の下位互換性を確保するため、Ranging
Capability Response
メッセージ ペイロードでこの仕様の次のバージョンに追加される新しいフィールドは、ペイロードの末尾に追加する必要があります。既存のフィールドは変更できません。構成を解析する際、示されたサイズが想定よりも大きい場合、古いバージョンの仕様しか理解できないデバイスは追加のフィールドを無視しなければなりません。
断片化
この仕様は通信チャネルに依存しないため、1 つのメッセージが大きすぎて使用する通信チャネルの転送パケットに収まらない場合に、メッセージ ペイロードを分割する方法は定義していません。Ranging モジュールは、各メッセージを完全な形式で受信することを想定しています。フラグメンテーションの責任は、OOB 通信チャネルの実装者にあります。
Ranging-technology-specifics
このセクションでは、測距技術に固有の詳細について説明します。
超広帯域無線(UWB)の詳細
このセクションでは、超広帯域に関する詳細について説明します。
構成 ID
UWB のために交換される OOB 構成データには、UWB 距離測定セッションを開始するために UWB が必要とする、利用可能な構成可能なパラメータの完全なセットが含まれていません。これは、選択した構成 ID によって一部のパラメータが暗黙的に選択されるためです。
各 config ID は、UwbRangingParams
に記載されている事前定義済みの UWB 構成パラメータのセットです。レスポンダー デバイスは、サポートするすべての構成 ID のリストをケーパビリティ レスポンス メッセージの一部として送信し、イニシエータは使用するサポート対象の構成 ID の 1 つを選択します。これにより、OOB 中に交換される構成パラメータのセットが小さくなります。また、UWB での距離測定に使用できるパラメータの組み合わせの数も制限されるため、許可されたパラメータの組み合わせのみをテストできます。
各 UWB セッション後にケーパビリティをリクエストする
既存の UWB セッションを停止した後、新しい UWB セッションを開始する前に、イニシエータ デバイスはレスポンダ デバイスの機能をリクエストし、構成パラメータを再度設定する必要があります。これは、現在の測距セッションが終了するとすぐに UWB アドレスがローテーションされる可能性があるためです。
BLE チャネル サウンディング(CS)の詳細
このセクションでは、チャンネル サウンディングの具体的な詳細について説明します。
デバイス間の必要なペア設定
チャネル サウンディングを使用した測距を機能させるには、イニシエータとレスポンダ デバイス間の既存のボンドが必要です。この仕様では、デバイス間のペア設定を作成する方法は規定されていません。Ranging API のユーザーは、デバイス間でこのバインドを確立する必要があります。
CS の回答者側で必要な対応
UWB では、両方のデバイスが UWB の距離測定開始 API と距離測定停止 API を明示的に呼び出す必要があります。一方、CS では、Bluetooth(BT)スタックを呼び出して CS 測距を開始するために、イニシエータ デバイスのみが必要です。レスポンダー側の残りの初期化は、BT を介してインバンドで行われます。つまり、CS の Ranging Configuration
メッセージまたは Stop Ranging
メッセージを受信したときに、BT が有効になっていれば、レスポンダー側は何もしなくてもよいということです。レスポンダ デバイスは、これらのメッセージをトリガーとして使用して、UI を更新したり、デバイスの LED を点滅させたりできます。