擷取感應器資料值
本主題描述如何以同步和非同步方式從感應器擷取資料。
同步擷取資料
您可以呼叫 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;
}