Wi-Fi Direct ペアリングの実装
このセクションでは、周辺機器が Tap and Setup および Tap and Reconnect ユース ケースに参加するための設計ガイドラインと要件について説明します。
Note
このトピックで説明するペアリングの実装は、現在、Windows 8.1 では、プリンター デバイスとのペアリングでのみサポートされています。
Windows 10 以降では、Wi-Fi アライアンスの Wi-Fi P2P キャリア構成レコードを介して NFC から Wi-Fi Direct の静的接続ハンドオーバーがサポートされています。 詳細については、「Wi-Fi Alliance」を参照してください。
周辺機器 Wi-Fi ダイレクト デバイスのペアリング
タップ中に、NFP は接続デバイスからペアリング情報を受信します。 NFP はペアリング情報を Windows に渡します。 Wi-Fi ダイレクト デバイスは、Wi-Fi Alliance Out-Of-Band (OOB) ペアリング手順と NFC フォーラムの推奨事項に従います。 Windows は、以下に定義されている独自のペアリング メッセージに依存しています。
Windows はユーザーに同意を求めるメッセージを表示し、指定された場合、Windows は成功するまで、各アドレスへの接続を順番に試みます。 PC 内の NFP プロバイダーと接続デバイスとの間にそれ以上の相互作用はありません。
NFC を例として使用すると、一方向のインストールは、ペアリング情報を静的またはパッシブ NFC タグに格納することによって実現されます (静的エミュレーション モードのアクティブ NFC タグも使用できます)。 Windows は、このペアリング情報をサブスクライブします。 PC 上の NFC 対応 NFP プロバイダーは、タグから接続情報を受信し、これをサブスクライバーとして Windows に渡します。 接続情報を受信すると、Windows はデバイス クラス固有の手法を使用して、デバイスの実際のインバンド インストールを実行します。
相互運用性の要件
NFP プロバイダー間の相互運用性を確保するには、ペアリング情報をプロバイダー固有のメッセージ形式でカプセル化する必要があります。
このドキュメントの他の場所で説明されているように、NFC 対応 NFP プロバイダー以外の近接テクノロジに関する特定の要件はありません。
Windows では、NFC 対応 NFP プロバイダーが、一方向ペアリング用の Wi-Fi Direct OOB ペアリング情報を伝達するための特定の NFC フォーラム定義メカニズムをサポートする必要があります。 NDEF メッセージには、TNF フィールド値が 0x01 で TYPE フィールドが "Hs" である最初のレコードと、Wi-Fi ダイレクト キャリア構成レコードを指す代替キャリア レコードが含まれています。 このメソッドでは、NDEF レコードのペイロードのみが使用されます。
WI-Fi ダイレクトに NFC を使用した一方向ペアリング
このセクションでは、NFC、Wi-Fi Direct、Windows が連携して、プリンターなどの Wi-Fi Direct デバイスの一方向ワイヤレス ペアリングをサポートする方法について詳しく説明します。
NFP プロバイダーの参照
Wi-Fi ダイレクト ペアリングは、NFC フォーラムの標準化された接続ハンドオーバー選択メッセージの種類を使用して実現されます。 次の図は、Wi-Fi ダイレクト デバイスのペアリング (具体的には NDEF レコード 3 と 4) に接続ハンドオーバーの選択メッセージを適用する方法の概要を示しています。 Handover Select メッセージには、1 つ以上の "ac" レコードまたは "代替通信事業者" レコードが記述されています。 これらのレコードは、ハンドオーバー選択レコードに順番に従い、それぞれが明確に定義された型を持っています。 最後に、メッセージには、ペアリング操作を処理する方法に関する情報を Windows に提供する Microsoft が定義したデバイス ペアリング レコードが含まれます。
Wi-Fi ダイレクト デバイスのペアリング メッセージ
以下のサンプル ユース ケースでは、NFC タイプ 2 タグが例示の例として使用されています。 別の種類の NFC タグを使用する必要がある場合は、そのタグ定義に従って NDEF メッセージを適切にカプセル化する必要があります。
フィールド | 値 | 説明 |
---|---|---|
TNF | 0x02 | 次の Type フィールドの形式。 RFC 2046 で定義されているメディアの種類。 |
Type | 'application/vnd.ms-windows.wfd.oob' | このシナリオに対して定義する新しい型文字列。 |
OOB データのサイズ | WORD | 最大 64 KB (キロバイト)の OOB データがサポートされます。 |
Wi-Fi ダイレクト OOB データ | <前のフィールドによって示されるサイズの BLOB> | 以下に定義されている Wi-Fi ダイレクト OOB データ。 |
Wi-Fi ダイレクト OOB 形式
次の表では、WiFi Direct OOB データの形式について説明します。 OOB一方向データは、任意の一方向P2P OOBデバイスによって送信され得る。
属性 | 属性 ID | 必須/任意 | Note |
---|---|---|---|
OOB ヘッダー OOB ヘッダー属性の形式テーブルを参照してください。 |
該当なし | 必須 | OOB ヘッダー属性は P2P OOB データ BLOB に存在し、OOB 型の値が "OOB 一方向プロビジョニング データ" に設定されている必要があります。 |
OOB デバイス情報 OOB デバイス情報属性の形式テーブルを参照してください。 |
1 | 必須 | この属性が存在する必要があります。 この P2P デバイスに関する情報を提供します。 |
OOB プロビジョニング情報 | 2 | 必須 | この属性が存在する必要があります。 この P2P デバイスが使用するプロビジョニング情報を提供します。 |
OOB 構成タイムアウト | 5 | 必須 | この属性が存在する必要があります。 この P2P デバイスが Wi-Fi Direct 経由の応答を待機する期間に関する情報を提供します。 |
OOB ヘッダー属性の形式
フィールド名 | サイズ (オクテット) | 値 | 説明 |
---|---|---|---|
合計データ長 | 2 | 変数 | OOB データ BLOB 全体の長さ (ヘッダーを含む)。 |
長さ | 2 | 変数 | OOB ヘッダー内の次のフィールドの長さ。 |
バージョン | 1 | 0x10 | この P2P OOB レコードのバージョンを識別する値。 |
OOB Type | 1 | 変数 | OOB トランザクションの種類を識別する値。 特定の値は OOB トランザクションの種類テーブルで定義されています。 |
OUI | 0 または 3 | 変数 | ベンダー固有 OUI これフィールドは必須ではありません。 OOB 型がベンダー固有の場合にのみ存在する必要があります。 |
OUI Type | 0 または 1 | 変数 | ベンダー固有タイプ これフィールドは必須ではありません。 OOB 型がベンダー固有の場合にのみ存在する必要があります。 |
OOB トランザクションの種類
OOB 型 (16 進数) | 説明 |
---|---|
0x00 | OOB 一方向プロビジョニング データ |
0x01 | OOB プロビジョニング リスナー データ |
0x02 | プロビジョニング コネクタ アプリ |
0x03 | OOB Reinvoke データ |
0x04-0xDC | 予約されています。 |
0xDD | ベンダー固有 |
0xDE-0xFF | 予約されています。 |
OOB デバイス情報属性の形式
フィールド名 | サイズ (オクテット) | 値 | 説明 |
---|---|---|---|
属性 ID | 1 | 1 | P2P OOB 属性の型の識別。 特定の値は、P2P OOB 属性テーブルで定義されます。 |
長さ | 2 | 変数 | 属性内の次のフィールドの長さ。 |
P2P デバイス アドレス | 6 | P2P 仕様で定義されているとおり。 | P2P デバイスを一意に参照するために使用される識別子。 |
コーディング方法 | 2 | P2P 仕様で定義されているとおり。 | このデバイスでサポートされている WSC メソッド。 注: Config Methods フィールド内のバイト順序は big-endian でなければなりません。 |
プライマリ デバイスの種類 | 8 | P2P 仕様で定義されているとおり。 | P2P デバイスのプライマリ デバイスの種類。 WSC プライマリ デバイス タイプ属性のデータ部分のみを含みます (属性 ID フィールドと Length フィールドは除外されます)。 注: [プライマリ デバイスの種類] フィールド内のバイト順序は、ビッグ エンディアンである必要があります。 |
デバイス機能モデル | 1 | P2P 仕様で定義されているとおり。 | P2P デバイスの機能を示すパラメーターのセット。 |
デバイス名 | 変数 | P2P 仕様で定義されているとおり。 | デバイスのフレンドリ名です。 WSC デバイス名属性 TLV 形式全体が含まれます。 注: デバイス名フィールド内のバイト順序は、ビッグ エンディアンである必要があります。 |
P2P OOB 属性
OOB 型 (16 進数) | 説明 |
---|---|
0x00 | OOB ステータス |
0x01 | OOB デバイス情報 |
0x02 | OOB プロビジョニング情報 |
0x03 | OOB グループ ID |
0x04 | OOB リッスン Channel |
0x05 | OOB 構成タイムアウト |
0x06-0xDC | 予約されています。 |
0xDD | ベンダー固有の属性 |
0xDE-0xFF | 予約されています。 |
OOB プロビジョニング情報属性の形式
フィールド名 | サイズ (オクテット) | 値 | 説明 |
---|---|---|---|
属性 ID | 1 | 1 | P2P OOB 属性の型の識別。 特定の値は、P2P OOB Attributesテーブルで定義されます。 |
長さ | 2 | 変数 | 属性内の次のフィールドの長さ。 |
ビットマップ設定プロビジョニング | 1 | 変数 | プロビジョニング設定テーブルで定義されているプロビジョニング設定オプションのセット。 |
選択した構成方法 | 2 | P2P 仕様で定義されているとおり。 | プロビジョニングのためにこの P2P デバイスによって選択された WSC メソッド。 |
ピン長さ | 1 | 0 ∼ 8 | 次の PIN データ フィールドのバイト数。 このフィールドを 0 に設定すると、追加の PIN データがないことを示します。 |
ピン データ | 変数 | n | このフィールドは省略可能です。 このフィールドは、[PIN の長さ] フィールドが 0 ではなく、プロビジョニングに使用する PIN を表すオクテットの配列が含まれている場合にのみ存在します。 |
プロビジョニングの設定
ビット | 情報 | メモ |
---|---|---|
0 | 新しいグループを作成する | このプロビジョニング情報がターゲット P2P デバイスで新しいグループを形成する場合、新しいグループの作成ビットは 1 に設定されます。 それ以外の場合、このプロビジョニング情報は既存のグループに参加するための情報です。 |
1 | グループの種類の設定を適用する | 必要なグループの種類のビットを適用する必要がある場合は、[グループの種類の設定の適用] ビットが 1 に設定されます。それ以外の場合は、Desired Group Type ビットが単に優先されます。 |
2 | 目的のグループの種類 | Desired Group Type ビットは、Desired Group Type が一時的な場合は 0 に設定され、Desired Group Type が永続的な場合は 1 に設定されます。 |
3 ∼ 7 | 予約されています。 |
OOB 構成タイムアウト属性の形式
フィールド名 | サイズ (オクテット) | 値 | 説明 |
---|---|---|---|
属性 ID | 1 | 5 | P2P OOB 属性の型の識別。 特定の値は、P2P OOB Attributesテーブルで定義されます。 |
長さ | 2 | 1 | 属性内の次のフィールドの長さ。 |
リスナー構成のタイムアウト | 1 | 0 から 255 | この P2P デバイスが OOB データ転送後の Wi-Fi ダイレクト通信の待機に費やす時間 (100 ミリ秒単位)。 (最大 25.5 秒)。 |
Windows デバイス のペアリング レコード
Windows デバイス ペアリング レコードは、NDEF 仕様に従います。 接続ハンドオーバーの選択メッセージを処理する方法に関する追加情報が Windows に提供されます。 TNF フィールドと Type フィールドは、NDEF 仕様に従って指定する必要があります。 以下の他のフィールドは、NDEF レコードの Payload フィールドに順番に一覧表示されます。
フィールド名 | 値 | 長さの値 | 説明 |
---|---|---|---|
TNF | 0x02 | 3 ビット | 次の Type フィールドの形式。 RFC 2046 で定義されているメディアの種類。 |
Type | 'application/vnd.ms-windows.devicepairing' | 0x28 バイト | このシナリオに対して定義する新しい型文字列。 |
MajorVersion | 0x1 | 2 バイト | メジャー バージョンを0x1する必要があります。 |
MinorVersion | 0x0 | 2 バイト | マイナー バージョンを0x0する必要があります。 |
フラグ | 0x0 または 0x01 | 4 バイト | すべてのトランスポートを試すには、0x0に設定します。 インストールを順番に試行し、最初の成功後に停止するように0x1に設定します。 トランスポートの優先順位は、代替キャリア レコードのシーケンスによって示されます。 注: 0x0064 0x0002値は予約されています。 |
デバイスのフレンドリ名の長さ | デバイスのフレンドリ名の長さフィールド | 1 バイト | デバイスのフレンドリ名の長さ |
デバイスのフレンドリ名 | UTF-8最大255バイトのエンコードされた文字列。 | デバイスのフレンドリ名の長さ | クライアントの同意 UI に表示されるデバイスのフレンドリ名。 |
Wi-Fi ダイレクト作業式、静的接続ハンドオーバー タグ形式
たとえば、NFC パッシブ タグの一般的な実装を次に示します。 これは、Wi-Fi ダイレクト キャリア レコード、ネットワーク共有プリンター、ms-device ペアリング レコードを含む静的な接続ハンドオーバー ケースに対応します。
この最初の表は、タグの Wi-Fi Direct ペアリング部分の形式を示しています。
オフセット | コンテンツ | 長さ | 説明 |
---|---|---|---|
0 | 0x91 | 1 | NDEF レコード ヘッダー: MB (メガバイト)=1b、ME=0b、CF=0b、SR=1b、IL=0b、TNF=001b |
1 | 0x02 | 1 | レコードの種類の長さ: 2 オクテット |
2 | 0x0A | 1 | レコードの種類の長さ: 10 オクテット |
3 | 0x48 0x73 | 2 | レコード型: "Hs" |
5 | 0x12 | 1 | バージョン番号: メジャー = 1、マイナー = 2 |
6 | 0xD1 | 1 | NDEF レコード ヘッダー: MB (メガバイト)=1b、ME=0b、CF=0b、SR=1b、IL=0b、TNF=001b |
7 | 0x02 | 1 | レコードの種類の長さ: 2 オクテット |
8 | 0x04 | 1 | ペイロードの長さ: 4 オクテット |
9 | 0x61 0x63 | 2 | レコード型:"ac" |
11 | 0x01 | 1 | キャリア フラグ: CPS=1、"active" |
12 | 0x01 | 1 | キャリア データ参照長: 1 オクテット |
13 | 0x30 | 1 | キャリア データ リファレンス: "0" |
14 | 0x00 | 1 | 補助データ参照数: 0 |
15 | 0x1A | 1 | NDEF レコード ヘッダー: MB (メガバイト)=1b、ME=0b、CF=0b、SR=1b、IL=0b、TNF=001b |
16 | 0x22 | 1 | レコードの種類の長さ: 34 オクテット |
17 | 0x3E | 1 | ペイロードの長さ: 62 オクテット |
18 | 0x01 | 1 | ID の長さ: 1 オクテット |
19 | 0x61 0x70 0x70 0x6C 0x69 0x63 0x61 0x74 0x69 0x6F 0x6E 0x2F 0x76 0x6E 0x64 0x2E 0x6D 0x73 0x2D 0x77 0x69 0x6E 0x64 0x6F 0x77 0x73 0x2E 0x77 0x66 0x64 0x2E 0x6F 0x6F 0x62 |
34 | レコードの種類名: 'application/vnd.ms-windows.wfd.oob' |
53 | 0x30 | 1 | Id: "0" |
54 | 0x3E 0x00 | 2 | Wi-Fi ダイレクト OOB データの長さ: 62 オクテット。 長さは unsigned short 型 (符号なし短整数型) として読み取られ、全ブロブが含まれます。 2 つの長さのオクテットが含まれます。 この値は、リトル エンディアン形式で格納する必要があります。 |
56 | 0x02、0x00 | 2 | ヘッダーの長さ: 2 オクテット |
58 | 0x10 | 1 | バージョン: 0x10 |
59 | 0x00 | 1 | OOB 型: 0x00 (一方向) |
60 | 0x01 | 1 | 属性: 0x01 (デバイス情報属性) |
61 | 0x22 0x00 | 2 | デバイス情報の長さ: 34 オクテット |
63 | 0x01 0x23 0x34 0xab 0xcd 0xef |
6 | Wi-Fi Direct P2P デバイスの MAC アドレス: "01:23:34:ab:cd:ef" |
69 | 0x01 0x00 | 2 | 構成の種類 |
71 | 0x00 0x01 0x00 0x50 0xF2 0x00 0x00 0x00 |
8 | プライマリ デバイスの種類 |
79 | 0x12 | 1 | 機能 |
80 | 0x10 0x11 | 2 | 属性: デバイス名 |
82 | 0x00 0x0d | 2 | デバイス名の長さ: 13 オクテット |
84 | 0x43 0x6f 0x6e 0x74 0x6f 0x73 0x6f 0x20 0x4d 0x6f 0x75 0x73 0x65 |
13 | UTF-8 のデバイスフレンドリ名。 NULL 終端文字がなく、UTF-8 は 1 文字あたり 1 バイトまたは 2 バイトである可能性があることに注意してください。 この例では、"Contoso Mouse" を読み取ります。 |
97 | 0x02 | 1 | 属性: プロビジョニング情報 |
98 | 0x0c 0x00 | 2 | プロビジョニング情報の長さ: 12 オクテット |
100 | 0x07 | 1 | ビットマップの設定: 新しいグループ、永続的な適用 |
101 | 0x01 0x00 | 2 | 構成方法: 入力をピン留めする |
103 | 0x08 | 1 | ピンの長さ: 8 オクテット |
104 | 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 |
8 | ピン: "12345678" |
112 | 0x05 | 1 | 属性: 構成タイムアウト情報 |
113 | 0x01 0x00 | 2 | 構成タイムアウトの長さ |
115 | 0x64 | 1 | 10 秒 (100 ミリ秒単位) |
次の表は、タグのネットワーク プリンター ペアリング部分の形式を示しています。
オフセット | Content | Length | 説明 |
---|---|---|---|
116 | 0x12 | 1 | NDEF レコード ヘッダー: MB (メガバイト)=0b、ME=0b、CF=0b、SR=1b、IL=0b、TNF=010b |
117 | 0x29 | 1 | 型の長さフィールド |
118 | 0x19 | 1 | ペイロードの長さフィールド |
119 | 0x61 0x70 0x70 0x6c 0x69 0x63 0x61 0x74 0x69 0x6f 0x6e 0x2f 0x76 0x6e 0x64 0x2e 0x6d 0x73 0x2d 0x77 0x69 0x6e 0x64 0x6f 0x77 0x73 0x2e 0x6e 0x77 0x70 0x72 0x69 0x6e 0x74 0x69 0x6e 0x67 0x2e 0x6f 0x6f 0x62 |
41 | レコードの種類名: 'application/vnd.ms-windows.wfd.oob' |
160 | 0x5c 0x5c 0x70 0x72 0x69 0x6e 0x74 0x53 0x65 0x72 0x76 0x65 0x72 0x5c 0x70 0x72 0x69 0x6e 0x74 0x65 0x72 0x4e 0x61 0x6d 0x65 |
25 | プリンター名: "\printServer\printerName" |
次の 3 番目の表は、タグの MS-Device ペアリング部分の形式を示しています。
オフセット | Content | Length | 説明 |
---|---|---|---|
185 | 0x52 | 1 | NDEF レコード ヘッダー: MB=0b, ME=1b, CF=0b, SR=1b, IL=0b,TNF=010b |
186 | 0x28 | 1 | 型の長さフィールド |
187 | 0x15 | 1 | ペイロードの長さフィールド |
188 | 0x61 0x70 0x70 0x6c 0x69 0x63 0x61 0x74 0x69 0x6f 0x6e 0x2f 0x76 0x6e 0x64 0x2e 0x6d 0x73 0x2d 0x77 0x69 0x6e 0x64 0x6f 0x77 0x73 0x2e 0x64 0x65 0x76 0x69 0x63 0x65 0x70 0x61 0x69 0x72 0x69 0x6E 0x67 |
40 | レコードの種類名: 'application/vnd.ms-windows.wfd.oob' |
228 | 0x00 0x01 0x00 0x00 |
4 | バージョン:メジャー = 1、マイナー = 0 |
232 | 0x00 | 1 | フラグ: 0 に設定し、すべてのトランスポートを試す |
233 | 0x0F | 1 | デバイスのフレンドリ名の長さ |
234 | 0x43 0x6f 0x6e 0x74 0x6f 0x73 0x6f 0x20 0x50 0x72 0x69 0x6e 0x74 0x65 0x72 |
15 | ユーザーに表示されるデバイスフレンドリ名: "Contoso Printer" |
Wi-Fi 接続要件
デバイスとクライアントで Wi-Fi 無線が有効になっている必要があります。 そうでない場合、ペアリングは失敗します。
エッジ ケースの処理
ユーザーが以前にデバイスをペアリングしたが、デバイスの一覧からデバイスを手動で削除した場合、もう一度タップすると、インストールまたはペアリングが試行されます。
ユーザーが作動の範囲に入ったが、帯域外 (OOB) 情報が転送される前に突然離れた場合、デバイスは接続可能になる可能性がありますが、PC はデバイスを探しません。 この場合、PC からの同意 UI はなく、ユーザーはもう一度タップする必要があります。 デバイスがもう一度タップされたときに既に検出可能な場合は、再検出可能でメインタイムアウト期間をリセットする必要があります。
Wi-Fi ダイレクト デバイスの場合、Wi-Fi 無線がオフの場合、インストールは成功しません。
ユーザーが 2 つのデバイスをほぼ同時にタップすると、最初に受信した OOB 情報のペアリングのみが試行されます。
Tap to Setup または Tap to Reconnect をサポートしていないオペレーティング システムを実行しているシステムでデバイスをタップしようとすると、デバイスが接続可能モードになる可能性がありますが、ペアリングは行われません。 ユーザーは、Bluetooth 用に提供されているペアリング UI を使用し、ペアリング ボタンを使用してペアリングを開始する必要があります。