Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This topic describes how to verify that a sensor can provide a particular set of data fields.
After you have retrieved a sensor object, you can call ISensor::GetSupportedDataFields to determine whether the sensor can provide the data you need.
The following example code creates a helper function that tests whether the sensor can provide all three of the sample data fields. The function takes a pointer to a sensor as its input and returns a Boolean value, where TRUE indicates that the sensor can provide all the data fields required.
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;
}
Related topics