Verificando campos de dados do sensor com suporte
Este tópico descreve como verificar se um sensor pode fornecer um conjunto específico de campos de dados.
Depois de recuperar um objeto de sensor, você pode chamar ISensor::GetSupportedDataFields para determinar se o sensor pode fornecer os dados necessários.
O código de exemplo a seguir cria uma função auxiliar que testa se o sensor pode fornecer todos os três campos de dados de exemplo. A função usa um ponteiro para um sensor como entrada e retorna um valor booliano, em que TRUE indica que o sensor pode fornecer todos os campos de dados necessários.
BOOL CheckForSupportedDataFields(ISensor* pSensor)
{
assert(pSensor);
HRESULT hr = S_OK;
DWORD cKeys = 0; // Key count.
BOOL bRet = FALSE;
IPortableDeviceKeyCollection* pKeys = NULL; // Output
// CoCreate a key collection to store property keys.
hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pKeys));
if(SUCCEEDED(hr))
{
hr = pSensor->GetSupportedDataFields(&pKeys);
}
if(SUCCEEDED(hr))
{
hr = pKeys->GetCount(&cKeys);
}
if(SUCCEEDED(hr))
{
PROPERTYKEY pk;
BOOL bHour, bMinute, bSecond = FALSE;
for (DWORD i = 0; i < cKeys; i++)
{
hr = pKeys->GetAt(i, &pk);
if(SUCCEEDED(hr))
{
// Test for the data fields.
if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_HOUR))
{
bHour = TRUE;
}
else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_MINUTE))
{
bMinute = TRUE;
}
else if(IsEqualPropertyKey(pk, SAMPLE_SENSOR_DATA_TYPE_SECOND))
{
bSecond = TRUE;
}
}
}
// Compute the return value.
// If all three properties were found,
// bRet will resolve to TRUE.
bRet = bHour && bMinute && bSecond;
}
SafeRelease(&pKeys);
return bRet;
}
Tópicos relacionados