센서 데이터 값 검색
이 항목에서는 센서에서 동기 및 비동기적으로 데이터를 검색하는 방법에 대해 설명합니다.
동기적으로 데이터 검색
ISensor::GetData를 호출하여 센서 데이터를 동기적으로 검색할 수 있습니다.
다음 예제 코드는 센서 데이터 보고서를 검색한 다음 세 개의 개별 데이터 필드 값을 검색합니다. 샘플 센서는 시간, 분 및 두 번째 데이터 필드의 현재 현지 시간에 대한 사용자 지정 데이터를 제공합니다. pSensor라는 변수에는 데이터를 제공하는 센서를 나타내는 ISensor 에 대한 포인터가 포함되어 있습니다.
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);
}
비동기적으로 데이터 검색
ISensorEvents::OnDataUpdated 이벤트를 수신하도록 등록하여 센서 데이터를 비동기적으로 받을 수 있습니다. 센서 이벤트 콜백을 수신하는 방법을 이해하려면 센서 API 이벤트 사용을 참조하세요.
다음 예제 코드는 이벤트에서 제공하는 데이터 보고서에서 데이터 값을 검색하는 ISensorEvents::OnDataUpdated 의 구현을 보여 줍니다. 샘플 센서는 시간, 분 및 두 번째 데이터 필드의 현재 현지 시간에 대한 사용자 지정 데이터를 제공합니다.
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;
}