Recuperando um objeto sensor
Para recuperar um objeto de sensor, use a interface ISensorManager . Você pode pensar nessa interface como a interface raiz da API do Sensor. Para usar ISensorManager, primeiro você deve chamar o método COM CoCreateInstance .
O código de exemplo a seguir cria uma instância do gerenciador de sensores.
// Create the sensor manager.
hr = CoCreateInstance(CLSID_SensorManager,
NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pSensorManager));
if(hr == HRESULT_FROM_WIN32(ERROR_ACCESS_DISABLED_BY_POLICY))
{
// Unable to retrieve sensor manager due to
// group policy settings. Alert the user.
}
Depois de recuperar com êxito um ponteiro para ISensorManager, você pode recuperar sensores por categoria, tipo ou ID. Se você recuperar sensores por tipo ou categoria, receberá um ponteiro para uma interface ISensorCollection que contém todos os sensores disponíveis que pertencem à categoria ou tipo solicitado. Se você recuperar um sensor por sua ID, receberá um ponteiro para uma interface ISensor que representa o sensor exclusivo solicitado.
O código de exemplo a seguir recupera uma coleção de sensores que pertencem à categoria chamada SAMPLE_SENSOR_CATEGORY_DATE_TIME. Em seguida, o código recupera o primeiro sensor da coleção por seu índice.
// Get the sensor collection.
hr = pSensorManager->GetSensorsByCategory(SAMPLE_SENSOR_CATEGORY_DATE_TIME, &pSensorColl);
if(SUCCEEDED(hr))
{
ULONG ulCount = 0;
// Verify that the collection contains
// at least one sensor.
hr = pSensorColl->GetCount(&ulCount);
if(SUCCEEDED(hr))
{
if(ulCount < 1)
{
wprintf_s(L"\nNo sensors of the requested category.\n");
hr = E_UNEXPECTED;
}
}
}
if(SUCCEEDED(hr))
{
// Get the first available sensor.
hr = pSensorColl->GetAt(0, &pSensor);
}
Observe que você pode recuperar todos os sensores disponíveis usando SENSOR_CATEGORY_ALL.
De maneira semelhante, você pode recuperar sensores de um tipo específico.
O código de exemplo a seguir recupera uma coleção de sensores do tipo chamado SAMPLE_SENSOR_TYPE_TIME. Em seguida, o código recupera o primeiro sensor da coleção por seu índice.
// Get the sensor collection.
hr = pSensorManager->GetSensorsByType(SAMPLE_SENSOR_TYPE_TIME, &pSensorColl);
if(SUCCEEDED(hr))
{
ULONG ulCount = 0;
// Verify that the collection contains
// at least one sensor.
hr = pSensorColl->GetCount(&ulCount);
if(SUCCEEDED(hr))
{
if(ulCount < 1)
{
wprintf_s(L"\nNo sensors of the requested type.\n");
hr = E_UNEXPECTED;
}
}
}
if(SUCCEEDED(hr))
{
// Get the first available sensor.
hr = pSensorColl->GetAt(0, &pSensor);
}
Para recuperar um sensor por sua ID, você deve conhecer a ID exclusiva do sensor. Os sensores geralmente geram essa ID quando conectados pela primeira vez para permitir que você identifique vários sensores da mesma make e modelo. Isso significa que você provavelmente não saberá a ID do sensor com antecedência. No entanto, se você tiver armazenado uma cópia de uma ID de sensor específica recuperada anteriormente, por exemplo, chamando ISensor::GetID, talvez queira recuperar o mesmo sensor novamente.
O código de exemplo a seguir mostra como recuperar um sensor usando sua ID.
ISensor* pSensor = NULL;
// Get the sensor collection.
hr = pSensorManager->GetSensorByID(SAMPLE_SENSOR_TIME_ID, &pSensor);
Você também pode recuperar sensores quando eles ficam disponíveis recebendo um evento do gerenciador de sensores. Para obter mais informações, consulte ISensorManager::SetEventSink.
Tópicos relacionados