User Requests and Synchronisation

This document introduces user requests and synchronisation methods used by device drivers.

Types of user request

User-side requests to a driver can be of three types: synchronous, asynchronous, and cancellation of an asynchronous request. User requests can be handled in two different ways, based on the logical channel model used by the device driver. A channel implementation is derived from either:

  • DLogicalChannelBase: the driver developer decides how a request is handled.

  • DLogicalChannel: this is derived from DLogicalChannelBase, and implements a basic mechanism for handling requests.

In the DLogicalChannel derived model, requests from user threads to the driver are queued as messages and handled sequentially by a single Kernel side DFC. This is the model described in this section. More details on the differences between the models can be found inLogical Channel documentation.

All requests from the user result in a call to a single function DLogicalChannelBase::Request(). In this function the driver determines the type of the request, i.e. synchronous, asynchronous, or cancel, and implements handling of the requests.

Synchronisation methods

A driver uses the following synchronisation methods.

  • Deferred Function Calls
  • Timers
  • Generated Events