传感器驱动程序逻辑

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

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

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

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

缩写和变量

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

缩写 说明
CRI 指定的当前报表间隔 (以毫秒为单位)
CS 更改敏感度 (值依赖于传感器类型)
CS [] 区分的所有数据字段的 change 数组的数组 (例如,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
}

Windows 中的传感器和位置平台简介