Abrufen von Sensordatenwerten
In diesem Thema wird beschrieben, wie Daten aus einem Sensor synchron und asynchron abgerufen werden.
Abrufen von Daten synchron
Sie können Sensordaten synchron abrufen, indem Sie ISensor::GetData aufrufen.
Der folgende Beispielcode ruft einen Sensordatenbericht ab, und ruft dann drei einzelne Datenfeldwerte ab. Der Beispielsensor stellt benutzerdefinierte Daten über die aktuelle lokale Uhrzeit in Stunden, Minuten und zweiten Datenfeldern bereit. Die Variable mit dem Namen pSensor enthält einen Zeiger auf ISensor , der den Sensor darstellt, der die Daten bereitstellt.
if(SUCCEEDED(hr))
{
// Get the data report.
hr = pSensor->GetData(&pReport);
}
if(SUCCEEDED(hr))
{
PROPVARIANT var = {};
hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_HOUR, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulHour = var.ulVal;
}
}
PropVariantClear(&var);
hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_MINUTE, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulMinute = var.ulVal;
}
}
PropVariantClear(&var);
hr = pReport->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_SECOND, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulSecond = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
// Print the local time to the console window.
wprintf_s(L"\nCurrent local time is: \n");
wprintf_s(L"%02d:%02d:%02d (synchronous)\n\n", ulHour, ulMinute, ulSecond);
}
Abrufen von Daten asynchron
Sie können Sensordaten asynchron empfangen, indem Sie sich registrieren, um das ISensorEvents::OnDataUpdated-Ereignis zu erhalten. Informationen zum Empfangen von Sensorereignisanrufen finden Sie unter Verwenden von Sensor-API-Ereignissen.
Der folgende Beispielcode zeigt eine Implementierung von ISensorEvents::OnDataUpdated , die Datenwerte aus dem vom Ereignis bereitgestellten Datenbericht abruft. Der Beispielsensor stellt benutzerdefinierte Daten über die aktuelle lokale Uhrzeit in Stunden, Minuten und zweiten Datenfeldern bereit.
STDMETHODIMP OnDataUpdated(
ISensor *pSensor,
ISensorDataReport *pNewData)
{
HRESULT hr = S_OK;
if(NULL == pNewData ||
NULL == pSensor)
{
return E_INVALIDARG;
}
ULONG ulHour = 0;
ULONG ulMinute = 0;
ULONG ulSecond = 0;
PROPVARIANT var = {};
hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_HOUR, &var);
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulHour = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_MINUTE, &var);
}
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulMinute = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
hr = pNewData->GetSensorValue(SAMPLE_SENSOR_DATA_TYPE_SECOND, &var);
}
if(SUCCEEDED(hr))
{
if(var.vt == VT_UI4)
{
// Get the hour value.
ulSecond = var.ulVal;
}
}
PropVariantClear(&var);
if(SUCCEEDED(hr))
{
// Print
wprintf_s(L"Current local time is: \n");
wprintf_s(L"%02d:%02d:%02d (asynchronous)\n", ulHour, ulMinute, ulSecond);
}
return hr;
}