Windows传感器编程之获取传感器数据
2015-09-24 15:33
465 查看
一、以同步方式检索数据
您可以通过调用 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))
{
wprintf_s(L"Current local time is: \n");
wprintf_s(L"%02d:%02d:%02d (asynchronous)\n", ulHour, ulMinute, ulSecond);
}
return hr;
}
相关文章推荐
- 又十个超级有用的PHP代码片段
- TP-登录
- java 关于xml的注解,自动生成xml文件 - @XML
- Java自定义异常在项目中的应用
- phpcms v9模块操作列表
- 八大排序算法的Python实现
- 搭建基于Mac 的QT IOS开发环境
- 大量的QT控件及示例发放
- [LeetCode]题解(python):016-3Sum Closest
- eclipse导入工程错误(No projects are found to import)
- 轻松征服Ruby--笔记(2)
- java学习3-选择排序对数组排序
- SpringMVC访问静态资源的三种方式
- python应用之求主析取范式,主合取范式
- PHP易混淆知识整理笔记
- 【Java语言】基础知识一
- C++编程中用put输出单个字符和cin输入流的用法
- Python try/except异常处理机制
- java byte[] 和 double以及所有数据类型的相互转换
- php $_SERVER当前完整url的写法