Sensor driver logic
This section describes key driver logic, or tasks, as pseudocode. These tasks include the driver's support for the following client actions:
- Client connects
- Client subscribes to events
- Client unsubscribes from events
- Client disconnects
A client connects when a desktop application invokes the ISensorCollection::GetAt method. This method returns an ISensor interface for the desired sensor. When the application releases this interface, it disconnects the client.
A client subscribes to events when a desktop application invokes the ISensorManager:SetEventSink method. When the application releases the event sink returned by this method, the client unsubscribes from events.
Abbreviations and variables
The pseudocode in this section uses the following abbreviations.
Abbreviation | Explanation |
---|---|
CRI | Current report interval (specified in milliseconds) |
CS | Change sensitivity (values are dependent on sensor type) |
CS[] | Array of change sensitivities for all data fields (for example, a 3-axis accelerometer has three entries) |
LDA | Location desired accuracy (applies to location only) |
RS | Reporting state (indicates whether eventing is enabled or disabled) |
PS | Power state (can be off, low, or high) |
The pseudocode contains the following variables.
Variable | Description |
---|---|
sensorID | Unique identifier for a given sensor |
clientID | Unique identifier for a given client |
flagCRI | Set to True if at least one client has specified the current report interval |
flagCS | Set to True if at least one client has specified the change sensitivity for a device |
flagLDA | Set to True if at least one client has specified the location desired accuracy |
deviceState | Indicates the driver is connected to the device |
Driver methods
A sensor driver must support both client and device initialization. The pseudocode demonstrates this using the following methods:
- DriverClientInitialize
- DeviceSensorInitialize
A sensor driver supports the platform's device-driver interface (DDI). The pseudocode demonstrates this using the following methods:
- DDIOnClientConnect
- DDIOnClientDisconnect
- DDIOnClientSubscribeToEvents
- DDIOnClientUnsubscribeFromEvents
- DDIOnSetCRI
- DDIOnSetCS
- DDIOnSetLDA
- DDIOnGetProperties
- DDIOnGetDatafields
- DDIHandleAsyncDataEvent
A sensor driver supports internal methods that handle updates to the current report interval, change sensitivity, and so on. The pseudocode demonstrates this using the following methods:
- DriverUpdateCRI
- DriverUpdateCS
- DriverUpdateLDA
- DriverUpdateSensorState
- DriverUpdateDatafields
A sensor driver supports methods that update the sensor device. The pseudocode demonstrates this using the following methods:
- DriverUpdateDeviceCRI
- DriverUpdateDeviceCS
- DriverUpdateDeviceLDA
- DriverUpdateDeviceRS
- DriverUpdateDevicePS
A sensor driver supports methods that interface with a device containing multiple sensors. The pseudocode demonstrates this using the following method:
- DriverUpdateDeviceState
If a sensor driver supports HID sensors, it may support the following methods:
- HIDSensorPollData
- HIDSensorDeviceEvent
- HIDSensorSetProperties
- HIDSensorGetProperties
If a sensor driver supports HID sensors, it may support the following method for a device that contains multiple sensors:
- HIDDeviceManagePower
If a sensor driver supports simple sensors (for example, I2C or SPI), it may support the following methods:
- SpbSensorPollData
- SpbSensorDeviceEvent
Driver structures and enumerations
A HID driver supports input reports. The pseudocode uses the following data structure to represent a report.
struct _inputReport
{
reportID
senstate
eventType
sensorData //this varies from sensor to sensor
} buffer, pbuffer
A sensor driver saves client data. The pseudocode uses the following data structure to save client data.
struct clientEntry
{
clientCRI
clientCS[]
clientLDA
clientSubscribed
}
A sensor driver needs to represent the device state. The pseudocode uses the following enumeration to represent the device state.
enum deviceState
{
deviceStateDisconnected // driver is disconnected from the device
deviceStateConnected //driver is connected to the device
}
A sensor driver needs to represent the device state. The pseudocode uses the following enumeration to represent the device state.
enum deviceState
{
deviceStateDisconnected // driver is disconnected from the device
deviceStateConnected //driver is connected to the device
}
Related topics
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for