65.9K
CodeProject 正在变化。 阅读更多。
Home

检测 Ultrabook 传感器

2012 年 10 月 1 日

CPOL

7分钟阅读

viewsIcon

28850

在本篇博客中,我们将重点介绍传感器以及如何在运行 Windows 8 的超极本上检测它们的存在。

随着第三代英特尔酷睿处理器最近的推出,英特尔推出了一类新型超极本,它们将改变游戏规则。基于第三代英特尔酷睿处理器的超极本和可变形设备配备了新的触摸和传感器功能。在本篇博客中,我们将重点介绍传感器以及如何在运行 Windows 8 的超极本上检测它们的存在: 

  1. 超极本/可变形设备有哪些可用传感器?
  2. 超极本/可变形设备推荐/必需的传感器有哪些?
  3. 如何确定超极本上有哪些传感器?

超极本/可变形设备新增可用传感器

有五种与超极本/可变形设备相关的传感器。

  1. 指南针
  2. 加速度计
  3. 陀螺仪
  4. GPS
  5. 环境光传感器

推荐用于超极本的传感器

下表提供了有关推荐用于超极本(可变形设备必需)的新传感器的信息。OEM 将自行决定在其特定型号/用途中包含哪些传感器。

传感器检测

确定可变形设备上有什么传感器很容易。上述所有传感器都是必需的。对于基本款超极本,情况并非如此简单。将有不同类别的超极本:商务超极本和消费级超极本。尽管 OEM 已获得规定超极本应具备的功能的最低规格,但 OEM 在不同类别的计算机之间仍会有一些差异。OEM 将决定哪些传感器最适合其各种型号。

检测超极本上的传感器

有几种方法可以确定系统是否支持传感器,以及支持哪些传感器。

  • 第一种最基本的方法是,在 Windows UI 开始菜单中找到“计算机管理”应用程序(如果找不到,可以通过右键单击窗口并选择窗口右下角的“所有应用”图标来查看“所有应用”)。
  • 如果您想了解关于每个传感器的更详细信息,甚至可能对某些传感器参数进行一些控制(用于测试目的),可以运行“传感器诊断工具”——它是 Windows 驱动程序工具包 ( WDK) 的一部分。
  • 第三,如果您正在为 Windows 8 编写应用程序,您将需要让您的应用程序查询所有传感器,以便采取正确的执行路径(例如,如果您想要的传感器不存在,您将需要找到一种替代方法来提供用户体验)。

计算机管理/设备管理器

设备管理器启动后,在设备树中查找“传感器”。“HID 传感器集合”包含与超极本相关的新传感器。不幸的是,它没有提供关于系统中哪些传感器可用,只是说明至少有一个传感器存在。HID 是“人类接口设备”,五个超极本传感器都使用 HID 协议。

传感器诊断工具

传感器诊断工具使用传感器和位置 API 进行数据检索、事件处理、报告间隔、更改灵敏度和属性检索。该工具还可以用于将传感器数据写入 CSV 文件。不过,我应该指出,传感器诊断工具实际上是为了帮助开发 Windows 驱动程序而存在的;它的真正用途是帮助测试和优化 Windows 驱动程序。安装 Windows 驱动程序工具包后,您可以在以下文件夹中找到此工具:C:\Program Files (x86)\Windows Kits\8.0\Tools\x86。

在 Ivy Bridge 软件开发平台 + USB 传感器集线器上运行的传感器诊断工具

使用传感器 API 以编程方式检测传感器

传感器诊断工具对于监视和测试传感器很有用;但是,在利用超极本传感器编写的软件中,最好在代码中调用传感器 API,以确保平台支持这些传感器。如果系统不支持特定传感器,软件仍应能够为最终用户提供不同但引人入胜的体验。

在讨论特定 API 之前,让我们先看看 Windows 8 的开发环境是什么样的。请注意 Windows UI 样式应用和桌面应用支持的语言。同时请注意,对于 Windows UI 样式应用,设备 API 包含在 Windows 运行时环境中。

还有一个 Windows 8 传感器平台,它同时支持 Windows UI 样式应用和桌面开发。下面的示例适用于 Windows 8 桌面环境。对于桌面应用程序,通过 SensorManager 对象访问传感器。传感器可以通过以下方式进行查询:

  • 按类型查询
  • 按类别查询
  • 按类别“全部”查询

按类型查询

如果您对特定类型的传感器感兴趣,例如“Gyrometer3D”,SensorManager 将会查询计算机上存在的传感器硬件列表,并返回与该硬件绑定的匹配对象的集合。Sensor Collection 可能包含零个或多个对象,但通常只有一个。

  • 方法:GetSensorByType
  • 包含文件:InitGuid.h, SensorsApi.h, Sensors.h
步骤
  1. 创建 SensorManager 对象的 COM 接口
  2. 获取计算机上所有 3 轴陀螺仪的集合
result = pSensorManager-> GetSensorsByType(SENSOR_TYPE_GYROMETER_3D, &pSensorCollection)

按类别查询

与查找特定类型的传感器不同,您可能对查找特定类别的所有传感器感兴趣,例如“运动”传感器。SensorManager 将查询计算机上的传感器硬件列表,并返回与该硬件绑定的 Motion 对象的集合。SensorCollection 可能包含零个或多个对象。在大多数计算机上,该集合将有两个 Motion 对象:Accelerometer3D 和 Gyrometer3D。

  • 方法:GetSensorByCategory
  • 包含文件:InitGuid.h, SensorsApi.h, Sensors.h
步骤
  1. 创建 SensorManager 对象的 COM 接口
  2. 获取计算机上所有运动传感器的集合
result = pSensorManager-> GetSensorsByCategory(SENSOR_CATEGORY_MOTION, &pSensorCollection)

按类别“全部”查询

最后,您可能希望通过使用“全部”方法来获取计算机上的所有传感器。这可能是查询系统上传感器的首选方式;但是,它将返回所有传感器,而不仅仅是上面列出的五个。再次,SensorManager 将查询计算机上的传感器硬件列表,并返回与该硬件绑定的所有对象的集合。SensorCollection 可能包含零个或多个对象。在大多数计算机上,该集合将包含七个或更多对象。请注意,C++ 没有 GetAllSensors 调用,因此您必须改用 GetSensorsByCategory(SENSOR_CATEGORY_ALL, …)

  • 方法:GetSensorsByCategory
  • 包含文件:InitGuid.h, SensorsApi.h, Sensors.h
步骤
  1. 创建 SensorManager 对象的 COM 接口
  2. 获取计算机上所有传感器的集合
result = pSensorManager-> GetSensorsByCategory(SENSOR_CATEGORY_ALL,&pSensorCollection)

在 Windows UI/WinRT 中查询传感器

对于 Windows UI/WinRT,您只需使用相应的方法获取传感器对象并检查是否为 NULL。Geolocation 方法略有不同。以下是一些示例:

资源

以下是一些来自 Microsoft 网站的关于开发传感器应用的好资源:

此外,这里还有一些关于超极本和 Windows 8 的博客/文章可能有用:

结论

这篇博客的主要目标是教育读者如何检测 Windows 8 超极本所需的传感器支持。重点主要放在“翻盖式”外形设计上,因为可变形设备、平板电脑和移动设备将需要所有传感器。需要注意的是,超极本的传感器支持取决于 OEM 和型号。虽然可以使用本地工具来确定传感器是否存在,但软件开发人员需要能够以编程方式检查传感器,以便他们的软件不会尝试使用可能存在也可能不存在的设备。

© . All rights reserved.