访问传感器类扩展

模块 类/接口
设备 .cpp CMyDevice

Microsoft 支持两个传感器 Api。 这两个简化访问设备、检索数据和设置属性:

  • 适用于传统桌面应用的桌面 API () -使用 COM/Win32;可在 c + + 中编写应用。
  • 用于 Windows 应用的WinRT API () -在 HtML 和 JavaScript 中编写应用程序,或 XAML 和 Visual Basic、c # 或 c + +。

传感器类扩展 (ISensorClassExtension) 链接传感器驱动程序和传感器 api。 驱动程序使用它来完成以下操作:

  • 初始化并 unitialize 传感器类扩展
  • 引发事件
  • 处理 WPD 输入/输出控制代码 (IOCTLs)
  • 关闭 UMDF 文件句柄

初始化类扩展

当 WUDFx.dll (Windows 用户模式驱动程序框架) 调用CMyDevice:: OnPrepareHardware的组件时,SpbAccelerometer 示例将初始化类扩展:

if (SUCCEEDED(hr))
{
    // Initialize the sensor class extension
    hr = m_spClassExtension->Initialize(pWdfDevice, spUnknown);
}

释放类扩展

调用 CMyDevice:: OnReleaseHardware 时,示例驱动程序会取消初始化并释放类扩展:

if (m_spClassExtension != nullptr)
{
   hr = m_spClassExtension->Uninitialize();
}

通过类扩展支持数据事件

当传感器应用为数据事件注册事件处理程序时,示例驱动程序将使用 ISensorClassExtension::P ostevent发送事件通知。 这会在 CSensorDdi 中发生 ::P ostdataevent

if (SUCCEEDED(hr))
{
   hr = m_spClassExtension->PostEvent(SensorId, spCollection);
}

支持具有类扩展的状态更改事件

当传感器应用为状态更改事件注册事件处理程序时,示例驱动程序将使用 ISensorClassExtension::P oststatechange发布事件通知。 这会在 CSensorDdi 中发生 ::P oststatechange

HRESULT hr = m_spClassExtension->PostStateChange(SensorId, state);