For USB interfaces the driver supports both HID compatible and legacy, non HID, USB devices.
If a device is HID compatible the driver will read all the necessary configuration data from the device's HID Report Descriptor. All being well the device should just work and be calibrated based on the X and Y range defined in the HIDRD. In rare cases the co-ordinate range has been incorrect and therefore manual calibration has been required after install.
Further, some HID devices determine they are plugged into a non Windows system and set up the HIDRD to be a 'mouse' device with single stylus data, albeit the device is capable of running in multi-touch mode. In these cases we can manually embed the multi-touch HIDRD (as extracted from the device when plugged into a Windows system in the driver for the specific device and not read the HID RD data from the device), thus reverting the device back to multi-touch operation in non Windows systems.
The driver also supports multiple devices on the same USB vendor and product id but with different end points.
This is mainly used when a touch device utilises both a touch screen and a pen with the same USB vendor and product id.
In this case a driver is configured for a single USB device but the software will list two separate devices, as in this example for a Wacom device supporting both touch and pen. This allows the driver to cater for separate device co-ordinate ranges.
Non - HID compatible
For old USB devices that are not HID compatible, hence no HID Report Descriptor exists in the device, we can manually set up the individual configuration settings based on the USB data packets generated from the device.
USB interface architecture
For standardisation purposes across all supported platforms the driver utilises a user mode 3rd party library libUSB to interface with USB devices. This library will in turn interface with the system's low level USB services, as in this Windows example:
LibUSB is available under Windows as a kernel mode component, libusb-k, which we have experimented with but found no material difference so currently all platform implementations utilise the user mode version.
Under Windows we also have an experimental alternative USB interface for use in very specialsed cases.