Windowsセンサ開発の使用センサマネージャオブジェクト

4158 ワード

アプリケーションがセンサを使用できるようにするには、Microsoft Sensor Frameworkは、オブジェクトを実際のハードウェアに「バインド」する必要があります.Sensor Manager Object(センサマネージャオブジェクト)と呼ばれる特殊なツールを使用している「プラグアンドプレイ」方式を採用しています.
タイプによる問い合わせ
1つのアプリケーションは、Gyrometer 3 Dなどの特定のタイプのセンサを探すことができます.センサマネージャは、コンピュータに表示されているセンサハードウェアのリストを尋ね、そのハードウェアにバインドされているマッチングオブジェクトのセットを返します.センサセットには0、1、または複数のオブジェクトがある場合がありますが、通常は1つしかありません.以下のC++サンプルコードは、センサマネージャオブジェクトのGetSensorsByTypeメソッドを使用して3軸ジャイロを検索し、センサセットで検索結果を返します.まず、センサマネージャオブジェクトの「CoCreateInstance()」を作成する必要があります.
// Additional includes for sensors
#include <InitGuid.h>
#include <SensorsApi.h>
#include <Sensors.h>
// Create a COM interface to the SensorManager object.
ISensorManager* pSensorManager = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_SensorManager, NULL, CLSCTX_INPROC_SERVER, 
    IID_PPV_ARGS(&pSensorManager));
if (FAILED(hr))
{
    ::MessageBox(NULL, _T("Unable to CoCreateInstance() the SensorManager."), 
        _T("Sensor C++ Sample"), MB_OK | MB_ICONERROR);
    return -1;
}
// Get a collection of all 3-axis Gyros on the computer.
ISensorCollection* pSensorCollection = NULL;
hr = pSensorManager->GetSensorsByType(SENSOR_TYPE_GYROMETER_3D, &pSensorCollection);
if (FAILED(hr))
{
    ::MessageBox(NULL, _T("Unable to find any Gyros on the computer."), 
        _T("Sensor C++ Sample"), MB_OK | MB_ICONERROR);
    return -1;
}
 

カテゴリによる問い合わせ
1つのアプリケーションは、運動センサなどのセンサをカテゴリで探すことができる.センサマネージャは、コンピュータに表示されているセンサハードウェアのリストを尋ね、そのハードウェアにバインドされたモーションオブジェクトのセットを返します.SensorCollectionには0、1、または複数のオブジェクトがあります.ほとんどのコンピュータでは、集合には2つのモーションオブジェクトがあります.Accelerometer 3 DとGyrometer 3 D.
次のC++サンプルコードは、センサマネージャオブジェクトを使用した GetSensorsByCategory メソッドは、モーションセンサを検索し、センサセットに検索結果を返します.
// Additional includes for sensors
#include <InitGuid.h>
#include <SensorsApi.h>
#include <Sensors.h>
// Create a COM interface to the SensorManager object.
ISensorManager* pSensorManager = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_SensorManager, NULL, CLSCTX_INPROC_SERVER, 
    IID_PPV_ARGS(&pSensorManager));
if (FAILED(hr))
{
    ::MessageBox(NULL, _T("Unable to CoCreateInstance() the SensorManager."), 
        _T("Sensor C++ Sample"), MB_OK | MB_ICONERROR);
    return -1;
}
// Get a collection of all 3-axis Gyros on the computer.
ISensorCollection* pSensorCollection = NULL;
hr = pSensorManager->GetSensorsByCategory(SENSOR_CATEGORY_MOTION, &pSensorCollection);
if (FAILED(hr))
{
    ::MessageBox(NULL, _T("Unable to find any Motion sensors on the computer."), 
        _T("Sensor C++ Sample"), MB_OK | MB_ICONERROR);
    return -1;
}
 

「すべて」カテゴリで問い合わせる
実際、1つのアプリケーションがコンピュータ上ですべてのセンサを同時に探すことができれば、最高の効率を実現することができます.センサマネージャは、コンピュータに表示されているセンサハードウェアのリストを尋ね、そのハードウェアにバインドされているすべてのオブジェクトのセットを返します.センサセットには0、1、または複数のオブジェクトがある可能性があります.ほとんどのコンピュータでは、コレクションには7つ以上のオブジェクトがあります.
C++ができないため GetAllSensors を呼び出します.したがって、次のサンプルコードに示すように、GetSensorsByCategory(SENSOR_CATEGORY_ALL,...)を使用する必要があります.
C++ does not have a GetAllSensors call, so you must use GetSensorsByCategory(SENSOR_CATEGORY_ALL, …) instead as shown in the sample code below.
// Additional includes for sensors
#include <InitGuid.h>
#include <SensorsApi.h>
#include <Sensors.h>
// Create a COM interface to the SensorManager object.
ISensorManager* pSensorManager = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_SensorManager, NULL, CLSCTX_INPROC_SERVER, 
    IID_PPV_ARGS(&pSensorManager));
if (FAILED(hr))
{
    ::MessageBox(NULL, _T("Unable to CoCreateInstance() the SensorManager."), 
        _T("Sensor C++ Sample"), MB_OK | MB_ICONERROR);
    return -1;
}
// Get a collection of all 3sensors on the computer.
ISensorCollection* pSensorCollection = NULL;
hr = pSensorManager->GetSensorsByCategory(SENSOR_CATEGORY_ALL, &pSensorCollection);
if (FAILED(hr))
{
    ::MessageBox(NULL, _T("Unable to find any sensors on the computer."), 
        _T("Sensor C++ Sample"), MB_OK | MB_ICONERROR);
    return -1;
}