Ultrabook™ のセンサーの検出
この記事は、インテル® デベロッパー・ゾーンに掲載されている「Detecting Ultrabook Sensors」の日本語参考訳です。
第 3 世代インテル® Core™ プロセッサー (開発コード名: Ivy Bridge) のリリースにより、市場に変革をもたらす新しいタイプの Ultrabook™ が登場しました。第 3 世代インテル® Core™ プロセッサー・ベースの Ultrabook™ とコンバーチブルは、新しいタッチ機能およびセンサー機能に対応しています。ここでは、各種センサーと、Windows* 8 を実行する Ultrabook™ 上でそれらを検出する方法に注目します。
- Ultrabook™/コンバーチブルで利用可能なセンサー
- Ultrabook™/コンバーチブルで推奨されるセンサー/必須のセンサー
- Ultrabook™ のセンサーの検出方法
Ultrabook™/コンバーチブルで利用可能な新しいセンサー
Ultrabook™/コンバーチブルに関連するセンサーは 5 つあります。
- コンパス
- 加速度計
- ジャイロスコープ
- GPS
- 環境光センサー
Ultrabook™ で推奨されるセンサー
次の表は、Ultrabook™ で推奨される新しいセンサー (およびコンバーチブルで必須のセンサー) の一覧です。特定のモデル/用途においてどのセンサーをサポートするかは OEM の判断に委ねられています。
センサーの検出
コンバーチブルでサポートされているセンサーは簡単に判別できます。コンバーチブルでは、上記のすべてのセンサーが必須です。標準的な Ultrabook™ ではやや複雑です。Ultrabook™ には、企業向け Ultrabook と消費者向け Ultrabook™ というようにさまざまなタイプがあります。Ultrabook™ に必要な最小機能要件は決められていますが、各タイプでは OEM 間で違いが見られます。それぞれのモデルに最適なセンサーは、OEM により決定されます。
Ultrabook™ 上でセンサーを検出する
システムでサポートされているセンサーとその種類を特定する方法はいくつかあります。
- 最も基本的な方法は、Windows* 8 のスタート画面で [コンピューターの管理] を選択します (スタート画面にない場合は、スタート画面で右クリックして画面右下に表示される [すべてのアプリ] を選択し、[コンピューター] を右クリックして画面左下に表示される [コンピューターの管理] を選択します)。
- 各センサーの詳細情報を取得し、(テストのため) センサー・パラメーターを制御するには、Windows Driver Kit (WDK) に含まれる Sensor Diagnostic Tool (センサー診断ツール) を実行します。
- Windows* 8 向けにアプリケーションを開発する場合は、正しい実行パスが実行されるように、アプリケーションですべてのセンサーを照会する必要があります (つまり、対象のセンサーが存在しない場合は、別の方法でユーザー体験を提供しなければなりません)。
コンピューターの管理/デバイス・マネージャー
デバイス・マネージャーが起動したら、デバイスツリーで [センサー] を探します。Ultrabook™ 関連の新しいセンサーは [HID センサー・コレクション] にあります。残念ながら、ここではどのセンサーがシステムに存在するのかは分かりません。システムにそのセンサータイプが少なくとも 1 つ存在することが分かるだけです。HID は「ヒューマン・インターフェイス・デバイス」の略で、Ultrabook™ の5 つのセンサーが HID プロトコルを使用しています。
Sensor Diagnostic Tool (センサー診断ツール)
Sensor Diagnostic Tool は、Sensor および Location API を利用して、データの取得、イベントの処理、レポート間隔、感度の変更、プロパティーの取得を行います。また、このツールはセンサーデータを CSV ファイルに書き出すこともできます。ただし、Sensor Diagnostic Tool の本来の目的は、Windows* ドライバーの開発においてドライバーのテストと最適化を支援することです。Windows* Driver Kit をインストールすると、C:\Program Files (x86)\Windows Kits\8.0\Tools\x86 フォルダー以下に Sensor Diagnostic Tool が配置されます。
Ivy Bridge (開発コード名) ソフトウェア開発プラットフォームと USB センサーハブ上の Sensor Diagnostic Tool
Sensor API を利用してプログラムでセンサーを検出する
Sensor Diagnostic Tool はセンサーの監視とテストに役立ちますが、Ultrabook™ のセンサーを利用するソフトウェアでは、Sensor API を呼び出してプラットフォームでサポートされているセンサーを確認したほうが良いでしょう。システムが特定のセンサーをサポートしていない場合であっても、ソフトウェアは別の最適な体験を実現することができます。
特定の API について述べる前に、Windows* 8 の開発環境を見てみましょう。Windows ストア・スタイル・アプリとデスクトップ・アプリでサポートされている言語に注目してください。Windows ストア・スタイル・アプリでは、Device API は Windows* Run Time 環境に含まれています。
Windows* 8 センサー・プラットフォームは、Windows ストア・スタイル・アプリとデスクトップ・アプリの両方の環境をサポートしています。これ以降のセクションで紹介するサンプルコードは、Windows* 8 デスクトップ・アプリケーション用です。デスクトップ・アプリケーションでは、SensorManager オブジェクトを使用してセンサーにアクセスします。次の方法でセンサーを照会できます。
- タイプの照会
- カテゴリーの照会
- カテゴリー “All” の照会
タイプの照会
Gyrometer3D のように特定のタイプのセンサーを照会すると、SensorManager は、マシン上のセンサー・ハードウェアのリストから、ハードウェアにバインドされている対応するオブジェクトのコレクションを返します。センサー・コレクションに含まれるオブジェクトの数はゼロ、1、またはそれ以上になる可能性がありますが、多くの場合は 1 つです。
- メソッド: GetSensorByType
- インクルード・ファイル: InitGuid.h、SensorsApi.h、Sensors.h
ステップ:
- SensorManager オブジェクトへの COM インターフェイスを作成します。
- コンピューターの 3 軸のジャイロの値を取得します。
result = pSensorManager-> GetSensorsByType(SENSOR_TYPE_GYROMETER_3D, &pSensorCollection)
カテゴリーの照会
特定のタイプのセンサーを照会する代わりに、モーションセンサーのように特定のカテゴリーのすべてのセンサーを照会すると、SensorManager はマシン上のセンサー・ハードウェアのリストを参照し、ハードウェアにバインドされているモーション・オブジェクトのコレクションを返します。センサー・コレクションにはゼロ、1、またはそれ以上のオブジェクトが含まれます。ほとんどのマシンには、Accelerometer3D と Gyrometer3D の 2 つのモーション・オブジェクトがあります。
- メソッド: GetSensorByCategory
- インクルード・ファイル: InitGuid.h、SensorsApi.h、Sensors.h
ステップ:
- SensorManager オブジェクトへの COM インターフェイスを作成します。
- コンピューター上のすべてのモーションセンサーのコレクションを取得します。
result = pSensorManager->
GetSensorsByCategory(SENSOR_CATEGORY_MOTION, &pSensorCollection)
カテゴリー “ALL” の照会
“ALL” メソッドを利用すると、コンピューター上のすべてのセンサーを照会できます。これは、効率良い方法と言えるでしょう。ただし、記事の冒頭で述べた 5 つのセンサーだけでなく、すべてのセンサーが返されます。SensorManager は、マシン上のセンサー・ハードウェアのリストを参照し、ハードウェアにバインドされているすべてのオブジェクトのコレクションを返します。センサー・コレクションにはゼロ、1、またはそれ以上のオブジェクトが含まれます。ほとんどのマシンには、7 つ以上のオブジェクトがあります。C++ には GetAllSensors がないため、代わりに GetSensorsByCategory(SENSOR_CATEGORY_ALL, …) を使用します。
- メソッド: GetSensorsByCategory
- インクルード・ファイル: InitGuid.h、SensorsApi.h、Sensors.h
ステップ:
- SensorManager オブジェクトへの COM インターフェイスを作成します。
- コンピューター上のすべてのセンサーのコレクションを取得します。
result = pSensorManager-> GetSensorsByCategory(SENSOR_CATEGORY_ALL,&pSensorCollection)
Windows* 8 UI におけるセンサーの照会
WinRT 環境では、メソッドを利用してセンサー・オブジェクトを取得し、NULL かどうかをテストするだけで済みます。Geolocation (地理位置情報) メソッドは多少異なります。次に例を示します。
関連情報
次の Microsoft* Web サイトは、センサー対応アプリケーションの開発に役立ちます。
Windows Sensor and Location プラットフォーム
- Sensor API プログラミング ガイド
- モーションセンサーと方位センサーの統合 (http://msdn.microsoft.com/ja-jp/library/windows/hardware/br259127.aspx)
- Sensor and Location プラットフォーム・チームのブログ (http://blogs.msdn.com/b/sensorslocation/ (英語))
Ultrabook™ および Windows* 8 に関連した次のブログ/記事も参考になります。
- Ultrabook™ の開発 – パート 1 (英語)
- Windows* 8 開発入門 (英語)
- GPS を利用できない開発システムでの位置情報を使用する Metro スタイルアプリの開発 (英語)
- Ultrabook™ およびタブレット向け Windows* 8 センサーの開発ガイド
まとめ
ここでは、Windows* 8 を搭載した Ultrabook™ でサポートされているセンサーを検出する方法を紹介しました。コンバーチブル、タブレット、モバイルデバイスにおいてセンサーへの対応が求められるため、「クラムシェル型」のフォームファクターに注目して説明しました。Ultrabook™ のセンサーサポートは OEM とモデルに依存します。ローカルのツールを利用してセンサーの有無を調べることは可能ですが、ソフトウェアが存在するかどうか分からないデバイスを使用しないように、プログラムでセンサーを確認する必要があります。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。