Jan 2020 update. We discovered that the HID report descriptor used in our virtual HID device was causing some of the multi-touch inconsistencies (described below) in some more recent versions of Windows 10 so we updated the HID RD in UPDD version 6.0.563. With this new HIDRD in place many of the MT inconsistencies disappeared and worked with MT data which is now delivered in hybrid protocol HID Touch mode. Therefore , with 563 and above, we believe many of these issues discussed below are now resolved.
Multi-touch data can be delivered to Windows system using serial or parallel protocols. Serial delivers touch data in one HID packet per contact (stylus), parallel delivers touch data with multiple contacts per HID Touch packet.
In cases where the parallel HID Touch packet is a fixed size as defined in the device's HID Report Descriptor, say 5 contacts, but the device supports 10 contacts, thus requiring two parallel packets to deliver touch data for 6 or more simultaneous touches, this is referred to as hybrid packets (>1 parallel packet)
The UPDD driver will receive touch data from a device in either serial or parallel data format. The driver pre-processes individual contacts so touch data arriving in parallel touch packets is automatically converted to serial HID Touch packets, processed and then posted into the system as serial HID touch packets, via the driver's Virtual HID device.
Therefore, irrespective of the format of the incoming touch data from the device, serial or parallel/hybrid, the touch data is posted by the driver into the system as a serial HID touch packet, with each packet specifying the specific contact id.
Until recently this has never caused issues but it has been seen on some Windows systems with specific characteristics, such as overloaded resources, AMD processors, that multi-touch processing has been inconsistent in its functionality, such as Microsoft Paint OK whereas gestures are not OK and do not work.
In these cases we have found that, for an unknown reason, the system is not working well with data delivered in serial HID Touch packets but works fine with data delivered in parallel HID Touch packets.
To cater for this we have introduced two settings:
hybrid_multi_touch (up to UPDD build 6.0.559 this was called serial_multi_touch but was changed to be less confusing)
As discussed above, by default the driver injects multi touch data using a serial protocol (one packet per contact / stylus).
Setting this on (1) directs the driver to use a hybrid protocol (each packet carries up to 10 touches. Since updd 6.0.563 this is 5 touches per packet)
This is a global (no device) setting. Set using ‘upddutils nodevice set hybrid_multi_touch n’ – n = 0 or 1
Note: If the device is sending data to the driver in a parallel data format the driver can reconstruct the hybrid packet based on ‘known’ characteristics of the received parallel data. If the devices sends touch data in serial data format then also enable legacy.serial_touch_protocol below.
In cases where the device is sending serial data packets to the driver it needs to determine certain characteristics about the incoming data that is used in the construction of the parallel data packets if hybrid_multi_touch is enabled.
A value of 1 in this setting indicates a device working with a serial touch protocol and directs the driver to pre-process the serial data into a parallel format in readiness for later processing if hybrid_multi_touch is enabled.
For known serial protocol devices this setting may be enabled by default.
This is a device setting. Set using ‘upddutils setall legacy.serial_touch_protocol n’ – n = 0 or 1