Windows 7 Sensor & Location Platformを使ってみよう!! - その1
さて、前々から書こう書こうと思っていて、書けなかった、Sensor & Location Platfromの使い方をいよいよ、紹介していこうと思います。
まず、始めるに前の準備として、Windows 7 SDKをインストールするか、Visual Studio 2010 Beta 2をインストールしてください。これで、必要なヘッダーファイルやライブラリが、c:\Program Files\Microsoft SDKs\Windows\v7.0A (x64の場合は、Program Files(x86))の下の、Include、Libに、それぞれインストールされます。Sensor & Location PlatformのAPIは、COMで、ダイレクトに使う場合は、VC++ Native Codeでの開発になります。
Includeの下に、Sensorsapi.h, Sensors.hというファイルがあって、Sensorsapi.hには、センサーを扱うためのCOM IFの定義が、そして、Sensors.hには、このプラットフォームがデフォルトで想定している各種センサーのカテゴリ、センサー種別、各センサーが供給するプロパティが定義されています。
とはいえ、Native Codeでの説明はちょっと煩雑なので、Managed Codeで概要は説明します。そのために、
https://code.msdn.microsoft.com/WindowsAPICodePack
から、Windows API Code Packをダウンロードして、適当な場所に展開してください。(ZIPファイルのプロパティで”ブロック”を解除するのを忘れずに)
Code Packの中に、COM Interopの機能を通してSensor & Location PlatformのAPIを使うためのWrapperライブラリーが入っています。
COMをそのまま使いたい場合には、Code Packの中のSensors、Coreプロジェクトを覗けば、それぞれ対応する、COM IF、メソッドがわかるので、そちらを参考にしてくださいね。
そして、実際にセンサーを使ったアプリを開発するためのプロジェクトを作成しましょう。Visual Studio 2008でもVisual Studio 2010でも構いません。(単に試すだけなら、せっかくなので、Visual Studio 2010を使おう)。プロジェクトは、C#、WPF Applicationを選択したものとして、今後の話はすすめます。
あっ・・・っと、もちろん、センサーデバイスとそのデバイス向けのデバイスドライバーのインストールも必要なので、お忘れなく。
プロジェクト作成時にできたソリューションに、ソリューションエクスプローラ上で、Code PackのCore、Sensorsプロジェクトを既存のプロジェクトとして追加してください。そして、新しく作成したプロジェクトに、その二つを参照プロジェクトとして追加します。そして、センサー機能を使いたいコードファイルには、
using Microsoft.WindowsAPICodePack.Sensors; |
を追加しておきましょう。ちなみに、VC++ Native Codeでプログラムを作成する場合には、先ほど紹介したSDKのディレクトリのLibディレクトリにある、Sensorsapi.lib、もしくは、Sensorsapi.dllを、リンク時に必要なライブラリとして追加してください。そして、ソースコードでは、Sensorsapi.h、Sensors.hをインクルードすれば利用可能です。
Code PackのManagedライブラリを使った場合の話に戻すと、Microsoft.WindowsAPICodePack.Sensors名前空間の
- SensorManager
- SensorChangedEventHandler
- Sensor
- DataReportChangedEventHandler
- SensorReport
といった、クラスを頻繁に使います。ちなみに、Code PackのSensorsプロジェクトには、AmbientLightSensor、Accelerometer3D、BooleanSwitchArrayといった、センサーに特化したクラスも用意されています。これらは、Freescaleさんが提供している、サンプルボードについている、それぞれ、照度センサー、加速度センサー、タッチセンサーアレイを使うためのクラスです。実は、BooleanSwitchArrayセンサーは、Sensor & Location Platformに標準で定義されたセンサーではなく、標準で定義されていないセンサーを使う場合のサンプルとしても利用可能です。
今日はこれまで。各クラスの使い方は、次回の投稿で説明します。