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 が含まれています。version フィールドには、メッセージの内容が準拠するこの仕様のバージョンを指定します。この仕様の現在のバージョンは 1
です。異なるバージョンのデバイス間でバージョニングがどのように使用されるかについては、バージョニングをご覧ください。ヘッダーはさまざまなバージョンで下位互換性を維持します。つまり、ユースケースでは常にヘッダーを解析して、メッセージのバージョンと ID を特定できます。
ヘッダーの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | バージョン | 0x1 - 現在のバージョン |
1 | unit8 | メッセージ ID |
|
ペイロード
サイズ: さまざま(メッセージの種類によって異なります)
説明: ペイロードは、ヘッダーの後のメッセージの最後の部分です。ペイロードはメッセージの種類によって異なります。各メッセージ タイプのペイロードの形式は、次のセクションで定義します。
測距機能リクエスト メッセージ ペイロード
サイズ(ヘッダー サイズを除く): 2 バイト
説明: メッセージ交換を開始するために開始側のデバイスから送信されます。このメッセージは、通信チャネルがアドバタイズに基づいている場合は省略可能です。この場合、レスポンダー デバイスは最初のステップとして Ranging
Capability
メッセージをアドバタイズする必要があります。開始デバイス(最初のスキャナ)は広告を読み取り、Ranging Capability
メッセージで直接応答するため、このメッセージは必要ありません。
Ranging Capability Request
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | リクエストされた測距技術のビットフィールド |
|
測距機能応答メッセージ ペイロード
サイズ(ヘッダーサイズは含まない): 変動(共通部分 2 バイト + 含まれる各測距技術のバイトサイズ)
説明: Ranging Capability
Request
メッセージへのレスポンスとして回答者から送信されます。このメッセージ ペイロードは、次の表に示すように、共通部分と測距技術固有の部分(BLE CS、Wi-Fi NAN RTT CS、BLE RSSI)で構成されています。各測距技術固有の部分は、その測距技術がレスポンダー デバイスでサポートされており、Ranging Capability Request
メッセージでリクエストされている場合にのみ追加する必要があります。広告通信チャネルの場合は、サポートされている測距技術をすべて含める必要があります。
一般的な Ranging Capability Response
メッセージ ペイロードを次の表にまとめます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | サポートされている測距技術のビットフィールド。ペイロードの残りの部分で続く測距技術の機能セットを示します。 |
|
2 | バイト配列 | 測位技術の機能バイト。 | テクノロジーごとに定義された構造体の繰り返しブロック。 |
UWB Ranging Capability Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測位技術 ID | 0x0 - UWB |
1 | uint8 | サイズ | UWB 機能のサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位)。 |
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 | サポートされている最小測距間隔 | サポートされている最短の測距間隔をミリ秒単位で示します。使用できる値(ms):
|
18 | uint8 | サポートされている最小スロット時間 | サポートされている最小スロット期間をミリ秒単位で示します。たとえば、デバイスが 1 ms を返した場合、2 ms 以上のスロット時間もサポートしていると見なされます。使用できる値(ms):
|
19 | サポートされている UWB デバイスのロール ビットフィールド | サポートされている UWB ロールのビットフィールド。たとえば、両方がサポートされている場合、最終的なフィールド値は 0x3 になります。
|
BLE CS Ranging Capability Request
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
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 CS Ranging Capability Request
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測位技術 ID | 0x2 - Wi-Fi NAN RTT |
1 | uint8 | サイズ | BLE RSSI 機能のバイトサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位)。 |
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 Request
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測位技術 ID | 0x3 - BLE CS |
1 | uint8 | サイズ | BLE RSSI 機能のサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位) |
2 | uint8*6 | デバイスの住所 | BLE RSSI に使用されるデバイスのアドレス(ビッグ エンディアン順) |
測距構成メッセージ ペイロード
サイズ(ヘッダーサイズは含まない): 変動(共通部分 4 バイト + 含まれる各測距技術のバイトサイズ)。
説明: このメッセージは開始側から送信され、各測距技術で測距を開始できる構成が含まれています。レスポンダー デバイスは、このメッセージを受信すると、指定された各測距技術で測距を開始しようとする必要があります。このメッセージ ペイロードは、次の表に示すように、共通部分と測距技術固有の部分(UWB、BLE CS、Wi-Fi NAN RTT、BLE RSSI)で構成されています。
一般的な Ranging Configuration
メッセージ ペイロードを次の表にまとめます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | 測距技術の構成セットのビットフィールド | このメッセージに構成データが含まれ、構成パラメータを設定する必要がある測距技術のビットフィールド。
|
2 | uint8*2 | ビットフィールド | RFU。[Ranging technologies configuration set bitfield] フィールドと同じ値に設定する必要があります。 |
4 | バイト配列 | 測位技術の構成バイト | テクノロジーごとに定義された構造体の繰り返しブロック |
UWB Ranging Configuration
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8 | 測位技術 ID | 0x0 - UWB |
1 | uint8 | サイズ | UWB 構成のサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位) |
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 | 選択した測距間隔 | 選択した測距間隔レート(ミリ秒単位)。使用できる値(ms):
|
13 | uint8 | 選択した時間枠の長さ | 選択したスロットの時間(ミリ秒単位)。使用できる値(ms):
|
14 | uint8 | セッション キーの長さ | セッション キーの長さ(バイト単位) |
15 | バイト配列 | セッションキー | セッションキー。S-STS が使用されている場合、最初の 2 バイトはベンダー ID、次の 6 バイトは静的 STS IV です。P-STS が使用されている場合、これは 16 バイトまたは 32 バイトのセッション キーです。使用されるセキュリティのタイプは、構成 ID によって決まります。 |
変動 | uint8*2 | 国コード | 2 つの ASCII 文字で表される ISO 3166-1 alpha-2 の国コード |
変動 | 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 構成のサイズ(Technology ID フィールドと Size フィールドを含む)(バイト単位) |
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 に使用されるデバイスのアドレス(ビッグ エンディアン順) |
測距構成レスポンス メッセージ ペイロード
サイズ(ヘッダー サイズを除く): 2 バイト
説明: このメッセージは、Ranging Configuration
メッセージへのレスポンスとして回答者から送信されます。このメッセージは省略可能です。使用している通信チャネルでリクエストごとに明示的なレスポンスが必要な場合にのみ必要です。
Ranging Configuration Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | 測位技術の設定が正常に設定されたビットフィールド | 正常に設定された測距技術のビットフィールド。ビットフィールドでは、技術がリクエストされ、正常に設定された場合は測距技術ビットを 1 に設定し、それ以外の場合は 0 に設定します。
|
測距停止メッセージ ペイロード
サイズ(ヘッダー サイズを除く): 2 バイト
説明: このメッセージは、指定された測距技術による測距を停止するタイミングで、開始側のデバイスから送信されます。
Stop Ranging
メッセージ ペイロードを次の表にまとめます。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | ビットフィールドを停止する測距技術 | 測距を停止する必要がある測距技術のビットフィールド。ビットが 1 に設定されている場合、測距技術は測距を停止する必要があります。0 に設定されている場合、測距技術は最初から測距していないか、すでに測距している場合は測距を継続する必要があります。一部の測距技術(CS など)では、測距は開始側でのみ開始および停止されるため、これは無効です。
|
測距停止応答メッセージ ペイロード
サイズ(ヘッダー サイズを除く): 2 バイト
説明: このメッセージは、Stop Ranging
メッセージへのレスポンスとして回答者から送信されます。このメッセージは省略可能です。使用している通信チャネルでリクエストごとに明示的なレスポンスが必要な場合にのみ必要です。
Stop Ranging Response
メッセージ ペイロードの概要を次の表に示します。
オクテット | データ型 | 説明 | 値 |
---|---|---|---|
0 | uint8*2 | 測距技術が正常に停止したビットフィールド | 測距を正常に停止した測距技術のビットフィールド。このビットフィールドでは、技術の停止がリクエストされ、技術が正常に停止した場合は測距技術ビットを 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
メッセージ ペイロードでこの仕様の次のバージョンに追加される新しいフィールドは、ペイロードの末尾に追加する必要があります。既存のフィールドを変更することはできません。構成を解析するときに、指定されたサイズが想定よりも大きい場合、古いバージョンの仕様しか理解できないデバイスは、追加のフィールドを無視する必要があります。
断片化
この仕様は通信チャネルに依存しないため、単一のメッセージが大きすぎて使用している通信チャネルの転送パケットに収まらない場合のメッセージ ペイロードの断片化方法は定義されていません。測距モジュールは、各メッセージを完全な形式で受信することを想定しています。断片化の責任は、OOB 通信チャネルの実装者に帰属します。
測位技術固有
このセクションでは、測距技術に固有の詳細について説明します。
超広帯域無線(UWB)の詳細
このセクションでは、ウルトラワイドバンド固有の詳細について説明します。
構成 ID
UWB で交換される OOB 構成データには、UWB が UWB 測定セッションを開始するために必要な、使用可能な構成パラメータの完全なセットが含まれていません。これは、一部のパラメータが選択した構成 ID によって暗黙的に選択されるためです。
各 config ID は、UwbRangingParams
に記載されている事前定義された UWB 構成パラメータのセットです。レスポンダー デバイスは、機能レスポンス メッセージの一部としてサポートされているすべての構成 ID のリストを送信し、イニシエーターは、使用されるサポートされている構成 ID のいずれかを選択します。これにより、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 を点滅させたりできます。