基于Visual C++2010与windows7 SDK开发传感器应用 触觉传感器,温度传感器等等

本文主要是介绍基于Visual C++2010与windows7 SDK开发传感器应用 触觉传感器,温度传感器等等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

Windows 7操作系统提供了对传感器设备的内置支持。这包括对位置传感器的支持,如GPS设备。作为这种支持的一部分,Windows传感器和位置平台提供了一种设备制造的标准方法,以使软件开发商和客户能够正确感知传感器设备。同时,该平台为开发人员提供一个标准化的API和设备驱动程序接口(DDI)与传感器和传感器的数据协同工作。

传感器用于获取多种配置,从这个角度来看,几乎所有的东西,只要能提供有关的物理现象的数据都可以被称为一个传感器。虽然我们通常把硬件设备才认为是传感器。逻辑式传感器也可以通过在提供软件或固件传感器的功能,提供仿真的信息。此外,单一的硬件设备可以包含多个传感器。

Windows平台中,传感器和地点组织成类。而代表传感器设备的两大类是传感器和类型。例如,在视频游戏控制器,检测的位置和球员的手部动作(也许是视频保龄球游戏),传感器将被归类为导向传感器,但它的类型为三维加速度计。在代码,Windows是通过使用全局唯一标识符(GUID)来识别不同的传感器,其中有许多预定义的类别和类型。当它需要新的类别和类型,设备制造商可以通过确定和发布新的GUID

定位设备组成一个特别有趣的类别。现在,大多数人都对全球定位系统(GPS)熟悉。在Windows中,全球定位系统传感器作为位置类别的一部分,位置类还包括其他的传感器类型。这些传感器有些是基于软件的,例如IP解析器,提供以位置信息为基础的互联网地址,移动电话塔triangulator,决定在附近的塔,或者一个Wi - Fi提供的网络位置读取位置信息的定位无线网络连接的枢纽。

Windows传感器和定位平台由以下开发者和用户组成部分:

  • 直通内线使Windows以提供一个传感器设备的标准方法连接到电脑,并提供数据,其他子系统。
  • Windows API提供了传感器的方法,属性设置和活动,与相连的传感器和传感器数据。
  • Windows API的位置,它是基于Windows API的内置传感器,提供了一套包括编程对象脚本对象,与位置信息工作。
  • 地点和其他传感器控制面板,使计算机管理员设置传感器,位置传感器,包括为每个用户。

下图显示组件之间的关系。

 

 

 

设备驱动程序接口

传感器制造商可以建立连接的设备驱动程序与Windows 7传感器。传感器设备驱动程序是通过使用Windows便携设备(WPD)驱动程序模型,它是基于Windows用户模式驱动程序框架(UMDF)。许多设备驱动程序基于已通过使用这些框架编写的。由于这些技术的建立,经验丰富的设备驱动程序编写的程序员将发现的传感器驱动程序是一个熟悉的任务。该传感器DDI的使用特定的UMDF和小波包分解的数据类型和接口,还定义传感器特有的小波包分解的命令和参数,在那里是必需的。

传感器API

该传感器的API使C + +开发人员能够创建基于传感器的程序,必须使用一组COM接口。该API定义接口来执行共同的传感器编程任务,包括管理按类别,类型或身份证管理传感器的事件,传感器,与个别传感器和传感器收集工作,并与传感器的数据。

传感器API主要包含在两个头文件”Sersorsapi.h””Sensors.h”中,主要包括3个主要接口:

l   ISensorManager:包括Sersor类型列举,依附的事件和请求许可。

l   ISensor:代表传感器本身,可以获取属性,事件,报告等

l   ISensorDataReport:获取传感器的报告数据。

下图列出了这三个接口的主要方法:

      

 

下面的代码演示如何将系统支持的所有传感器类型列举出来:

#include <sensorsapi.h>
#include <sensors.h>
HRESULT hr;
CComPtr<ISensorManager> pSensorManager;
pSensorManager.CoCreateInstance(CLSID_SensorManager);
CComPtr<ISensorCollection> pALSCollection;
CComPtr<ISensor> pALSSensor;
// 获取系统中所有的ATL传感器
pSensorManager->GetSensorsByType(SENSOR_TYPE_AMBIENT_LIGHT, &pALSCollection);
hr = pSensorManager->RequestPermissions(
                    0,                // 所有者窗口 
pALSCollection,   // 传感器集合访问许可
                    TRUE);            // 模块标识
if(SUCCEEDED(hr))
{
pALSCollection->GetAt(0, &pALSSensor);
}

下面的代码演示如何获取传感器的数据,这里的例子是获取灯的亮度信息:

STDMETHODIMP CALSEventSink::OnDataUpdated(
ISensor* pSensor, ISensorDataReport* pNewData)
{
PROPVARIANT lightLevel;     
PropVariantInit(&lightLevel);      
// ISensorDataReport对象获取传感器的数据
pNewData->GetSensorValue(SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX, &lightLevel);
// 获取数值信息
float luxValue = V_FLOAT(lightLevel);
// 对数据进行归一化处理
double lightNormalized = ::pow(luxValue, 0.4) / 100.0;
UpdateUI(lightNormalized);      
PropVariantClear(&lightLevel);
return S_OK;
}

 

定位API

API的内置传感器,位置API提供了一个简单的方法来检索有关地理位置的数据,同时保护用户的隐私。 API提供的地点,通过一组COM接口,它的功能代表对象。这些对象可以使用程序员谁知道如何使用的COM通过C + +编程语言,或如JScript脚本语言。脚本支持,这使得容易获得项目的位置数据,运行在本地计算机区域中,如小工具。在Windows SDK中包含头文件(包括脚本参考文档,文档),样品和工具,帮助如何使用他们的程序中的位置信息指南网站和软件开发商。

位置和其他传感器的控制面板

视窗7包含一个控制面板,可以让计算机管理员启用或禁用传感器系统范围或为每个用户。由于一些传感器可以暴露敏感数据,该用户界面使管理员控制所有程序是否能够获得每个用户每个传感器。用户还可以查看传感器的性能,改变传感器的描述是在用户界面中显示。

控制面板还提供了一个网页的默认位置,使用户能够提供它们的位置。当没有可用传感器,该平台将使用用户提供的位置。用户可以提供公民处理领域,其中包括街道地址,城市,州或省,以及国家或地区。

 

 

本文来自作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

这篇关于基于Visual C++2010与windows7 SDK开发传感器应用 触觉传感器,温度传感器等等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/254824

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a