UPDD V7 introduction


As with all software, changes are inevitable to add more features, address support issues, cater for technical debt or to utilise the latest development tools.

Often, when utilising the latest development tools, you will lose compatibility with older versions of the target OS, hence we have not upgraded UPDD V6 development environment such that we can retain support for older versions of Windows and macOS. Instead, we decided to create a new version of the driver, UPDD V7. This supports Window 10 (1809) and above and macOS 10.14 and above, both 64 bit only.

At the same time as using the latest software development tools, we have also made some technical changes and added some new features, as describe below:

Change Description 
Utilising QT6  QT is a popular development tool. Version 6 is the latest version.
New USB interfaces  UPDD V6 uses a 3rd party USB interface library, called LIBUSB. Due to various USB support issues that are difficult to identify and address within a 3rd party library, we have written our own USB interfaces.
Under Windows there are two new interfaces, one that interfaces with the native HID driver to support HID touch/Pen/Tablet devices and one that interfaces with old legacy, non HID compatible USB interfaces. Under macOS, we have written a USB interface using IOKit.
i2c hardware Adds support for Windows i2c devices
Native pen support UPDD V7 introduces a Virtual HID Pen device in the device manager so that Windows native pen functionality is enabled. Touch/Pen data from whatever hardware interface (HID, USB, Serial) can now be posted into the OS as pen data, as well as posted as touch or mouse data.  
Keyboard interface UPDD V7 retains the newly introduced Virtual HID Keyboard  device. This allows UPDD Commander to post keystoke actions into the OS.
Driver Reset Offers the ability to totally reset the driver in situations where a fault may have locked up touch functionality. This can be invoked on the command line or manually from within the UPDD Console.
New commands Two new upddutils commands: 
hiddevices: List all HID devices and shows the topology of a device and it’s interfaces.
hardreset: Removes and reinstates all drivers.

Windows HID touch hardware support

With UPDD V6, a USB device is identified by its USB vendor and product id and takes full control of the USB device. This means that for HID compatible USB devices, UPDD replaces the native HID driver for the target device

In V7, for non HID compatible USB devices the driver still takes full control of the device. However, for HID compatible devices, the driver leaves the native Windows HID driver in place but implements a HID filter driver to filter out the required data for the target interface and collection delivering the touch, pen or mouse data. This leaves any other interfaces and collections not delivering data required by UPDD to still be processed by the native HID driver.

However, this does mean that for an HID device to be configured and supported by UPDD the device definition needs to specify the appropriate USB configuration settings.

For HID devices we now define four elements when configuring the device, being; USB Vendor id, Product id, Interface and Collection.

To help identify these values for a given device, we have created a utility to list out a system's HID device layout and identify the devices that could be configured and supported by UPDD V7.

It is important that the utility is run on a system that does not have UPDD installed, as UPDD driver creates virtual HID devices for supported USB devices and this distorts the HID report.

Download and run the HIDTool installer that in turn runs the utility that generates a HID device report on the desktop.

The report will indicate devices you may wish to support with UPDD (**) and others, such as mice, as unlikely to require support (??).

The 4 components are identified as vid_nnnn&pid_nnnn&mi_nn&colnn

The 'Matching string(s) in the report indicate the configuration string used in UPDD to configure the device.

 In theory, the HIDtool should be able to identify the following Windows devices as ones that could be configured and supported by UPDD V7:

  • HID-compliant digitizer
  • HID-compliant touch screen
  • HID-compliant touch pad
  • HID-compliant pen
  • HID-compliant light pen
  • HID-compliant whiteboard

In the example below, there are two touchscreen connected and neither touchscreen specifies a specific col value. The mouse entry specifies both interface and collection.

Some will only show Vid and Pid values and others will show all four values:

....Logitech USB Input Device:             usb\vid_046d&pid_c52b&mi_00\7&210a67fb&0&0000
........HID Keyboard Device:                   hid\vid_046d&pid_c52b&mi_00\8&38e5ab49&0&0000
....USB Input Device:                      usb\vid_046d&pid_c52b&mi_01\7&210a67fb&0&0001
........HID-compliant mouse:                   hid\vid_046d&pid_c52b&mi_01&col01\8&21221f04&0&0000 ??
........HID-compliant consumer control device: hid\vid_046d&pid_c52b&mi_01&col02\8&21221f04&0&0001
........HID-compliant system controller:       hid\vid_046d&pid_c52b&mi_01&col03\8&21221f04&0&0002
........HID-compliant vendor-defined device:   hid\vid_046d&pid_c52b&mi_01&col04\8&21221f04&0&0003
....USB Input Device:                      usb\vid_046d&pid_c52b&mi_02\7&210a67fb&0&0002
........HID-compliant vendor-defined device:   hid\vid_046d&pid_c52b&mi_02&col01\8&8364525&0&0000
........HID-compliant vendor-defined device:   hid\vid_046d&pid_c52b&mi_02&col02\8&8364525&0&0001
........HID-compliant vendor-defined device:   hid\vid_046d&pid_c52b&mi_02&col03\8&8364525&0&0002

    Matching string(s)
    046d;c52b;01;01 ??
....USB Input Device:                      usb\vid_0d8c&pid_013c&mi_03\7&319cdafe&0&0003
........HID-compliant consumer control device: hid\vid_0d8c&pid_013c&mi_03\8&35b0dd53&0&0000
....USB Input Device:                      usb\vid_2149&pid_2316&mi_00\8&3a5f015&20c&0000
........HID-compliant touch screen:            hid\vid_2149&pid_2316&mi_00\9&a9a898b&0&0000 **
....USB Input Device:                      usb\vid_2149&pid_2316&mi_01\8&3a5f015&20c&0001
........HID-compliant vendor-defined device:   hid\vid_2149&pid_2316&mi_01\9&765dfa7&0&0000

    Matching string(s)
....USB Input Device:                      usb\vid_2149&pid_270b&mi_00\7&1f77683c&14&0000
........HID-compliant touch screen:            hid\vid_2149&pid_270b&mi_00\8&a1d870f&0&0000 **
....USB Input Device:                      usb\vid_2149&pid_270b&mi_01\7&1f77683c&14&0001
........HID-compliant vendor-defined device:   hid\vid_2149&pid_270b&mi_01\8&2e489914&0&0000

    Matching string(s)

HID_DEVICE_DIGITIZER =                   "HID-compliant digitizer"
HID_DEVICE_TOUCH_SCREEN =                "HID-compliant touch screen"
HID_DEVICE_TOUCH_PAD =                   "HID-compliant touch pad"
HID_DEVICE_PEN =                         "HID-compliant pen"
HID_DEVICE_LIGHT_PEN =                   "HID-compliant light pen"
HID_DEVICE_WHITE_BOARD =                 "HID-compliant whiteboard"
HID_DEVICE_DIGITIZER =                   "HID-compliant digitizer"
HID_DEVICE_TOUCH_SCREEN =                "HID-compliant touch screen"
HID_DEVICE_TOUCH_PAD =                   "HID-compliant touch pad"
HID_DEVICE_PEN =                         "HID-compliant pen"
HID_DEVICE_LIGHT_PEN =                   "HID-compliant light pen"
HID_DEVICE_WHITE_BOARD =                 "HID-compliant whiteboard"
HID_DEVICE_DIGITIZER =                   "HID-compliant digitizer"
HID_DEVICE_TOUCH_SCREEN =                "HID-compliant touch screen"
HID_DEVICE_TOUCH_PAD =                   "HID-compliant touch pad"
HID_DEVICE_PEN =                         "HID-compliant pen"
HID_DEVICE_LIGHT_PEN =                   "HID-compliant light pen"
HID_DEVICE_WHITE_BOARD =                 "HID-compliant whiteboard"