传感器驱动程序逻辑
本部分将关键驱动程序逻辑或任务描述为伪代码。 这些任务包括驱动程序对以下客户端操作的支持:
- 客户端连接
- 客户端订阅事件
- 客户端取消订阅事件
- 客户端断开连接
当桌面应用程序调用 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
}
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈