传感器驱动程序逻辑

本部分将关键驱动程序逻辑或任务描述为伪代码。 这些任务包括驱动程序对以下客户端操作的支持:

  • 客户端连接
  • 客户端订阅事件
  • 客户端取消订阅事件
  • 客户端断开连接

当桌面应用程序调用 ISensorCollection::GetAt 方法时,客户端会连接。 此方法返回所需传感器的 ISensor 接口。 当应用程序释放此接口时,它会断开客户端的连接。

当桌面应用程序调用 ISensorManager:SetEventSink 方法时,客户端订阅事件。 当应用程序释放此方法返回的事件接收器时,客户端将取消订阅事件。

缩写和变量

本部分中的伪代码使用以下缩写。

缩写 说明
CRI 当前报告间隔 (以毫秒) 为单位指定
CS 更改敏感度 (值取决于传感器类型)
CS[] 所有数据字段的更改敏感度数组 (例如,3 轴加速计有三个条目)
Lda 所需位置准确性 (仅适用于位置)
RS 报告状态 (指示是启用或禁用事件)
PS 电源状态 (可以是关闭、低或高)

伪代码包含以下变量。

变量 说明
sensorID 给定传感器的唯一标识符
clientID 给定客户端的唯一标识符
flagCRI 如果至少有一个客户端指定了当前报告间隔,则设置为 True
flagCS 如果至少有一个客户端为设备指定了更改敏感度,则设置为 True
flagLDA 如果至少有一个客户端指定了所需位置的准确性,则设置为 True
deviceState 指示驱动程序已连接到设备

驱动程序方法

传感器驱动程序必须同时支持客户端和设备初始化。 伪代码使用以下方法演示了这一点:

  • DriverClientInitialize
  • DeviceSensorInitialize

传感器驱动程序支持平台的设备驱动程序接口 (DDI) 。 伪代码使用以下方法演示了这一点:

  • DDIOnClientConnect
  • DDIOnClientDisconnect
  • DDIOnClientSubscribeToEvents
  • DDIOnClientUnsubscribeFromEvents
  • DDIOnSetCRI
  • DDIOnSetCS
  • DDIOnSetLDA
  • DDIOnGetProperties
  • DDIOnGetDatafields
  • DDIHandleAsyncDataEvent

传感器驱动程序支持处理对当前报告间隔、更改敏感度等的更新的内部方法。 伪代码使用以下方法演示了这一点:

  • DriverUpdateCRI
  • DriverUpdateCS
  • DriverUpdateLDA
  • DriverUpdateSensorState
  • DriverUpdateDatafields

传感器驱动程序支持更新传感器设备的方法。 伪代码使用以下方法演示了这一点:

  • DriverUpdateDeviceCRI
  • DriverUpdateDeviceCS
  • DriverUpdateDeviceLDA
  • DriverUpdateDeviceRS
  • DriverUpdateDevicePS

传感器驱动程序支持与包含多个传感器的设备进行交互的方法。 伪代码使用以下方法演示了这一点:

  • DriverUpdateDeviceState

如果传感器驱动程序支持 HID 传感器,它可能支持以下方法:

  • HIDSensorPollData
  • HIDSensorDeviceEvent
  • HIDSensorSetProperties
  • HIDSensorGetProperties

如果传感器驱动程序支持 HID 传感器,则对于包含多个传感器的设备,它可能支持以下方法:

  • HIDDeviceManagePower

如果传感器驱动程序支持简单传感器 (例如 I2C 或 SPI) ,则它可能支持以下方法:

  • SpbSensorPollData
  • SpbSensorDeviceEvent

驱动程序结构和枚举

HID 驱动程序支持输入报告。 伪代码使用以下数据结构来表示报表。

struct _inputReport
{
    reportID
    senstate
    eventType
    sensorData //this varies from sensor to sensor

} buffer, pbuffer

传感器驱动程序保存客户端数据。 伪代码使用以下数据结构来保存客户端数据。

struct clientEntry
{
    clientCRI
    clientCS[]
    clientLDA
    clientSubscribed
}

传感器驱动程序需要表示设备状态。 伪代码使用以下枚举来表示设备状态。

enum deviceState
{
    deviceStateDisconnected // driver is disconnected from the device
    deviceStateConnected //driver is connected to the device
}

传感器驱动程序需要表示设备状态。 伪代码使用以下枚举来表示设备状态。

enum deviceState
{
    deviceStateDisconnected // driver is disconnected from the device
    deviceStateConnected //driver is connected to the device
}