Multi-monitor and device support


UPDD supports both multi-monitor and multiple pointer device configurations. This means that UPDD can cater with a system that has more than one monitor or more than one pointer device and any combination thereof can be supported.

This document describes the multi-monitor and device considerations for each of the supported desktop operating systems.

The driver utilises a specific, cross-platform, graphics function to retrieve monitor layout information. For successful UPDD multi-monitor operation this layout information must correctly reflect your monitor setup. Therefore the UPDD driver can only support configurations that are identifiable by this function and in most cases we would expect this to handle most multi-monitor configurations.

To view the monitor layout as retrieved by our driver using this function use the monitors option of our command line utility.

When using UPDD in a multi-monitor environment the following issues need to be considered.

Multi-monitor or device configurations
There are a number of possible multi-monitor / multiple device configurations.

Configuration Description 
Cloned Identical displays on all monitors. In this case UPDD associates all the touch devices with the same monitor.
Extended The desktop supports individual monitor(s) and lists each monitor in the desktop properties and individual touch screens are to be associated with the full monitor video area. In this case each UPDD supported device is associated with an individual monitor; monitor 1, monitor 2 etc or a specified device name.
Segmented The desktop supports individual monitor(s) but lists virtual monitor(s) in the desktop properties (e.g. as implemented by specialist hardware and custom video driver) which may relate to two or more physical monitors and individual touch screens are to be associated with the full monitor video area. In this case each UPDD supported device is associated with a video segment of the virtual monitor that relates to the physical monitor.
Stretched The desktop supports individual monitor(s) but lists virtual monitor(s) in the desktop properties (as implemented by a stretched driver) which may relate to 2 or more physical monitors and individual touch screens are to be associated with the full monitor video area. In this case each UPDD supported device is associated with a video segment.
Custom The touch is to be restricted to an area on the monitor and does not cover the full display area.
Span A single touch device spans 2 or more physical monitors as described here.

Limitations
UPDD supports up to 32 monitors but has no restriction on the number of devices it can handle. As long as the device can be connected via one of the supported hardware ports UPDD can be configured to support it.

Desktop /Device associations

Based on the monitor layout this table indicates the how the touch devices are associated with the desktop area:

Layout Desktop / Device association
Cloned Where desktops are cloned across all the monitors, irrespective of the number of monitors seen by the OS, the touch devices are all associated with the same monitor.
Extended In the case where the operating system lists all the physical monitors, and the desktop is extended across all the monitors, then the touch device is associated with a physical monitor in a number of ways:
1. If the setting monitor_bind.display_name defines a display name that matches (or part matches) a display name listed on the system then the touch device will be associated with this monitor.
2. Run the UPDD configure function can be used to make the correct associations.
3. Manually set the setting Monitor_Number for the device.
Segmented In the case where there are more physical monitors than listed by the operating system then for each logical monitor listed you need to inform the driver of the relationship between each 'logical' monitor and the actual physical monitors.

This relationship is defined in the setting 'monitor_segment_map[.N]'. This is a UPDD global setting so needs the 'NoDevice' specification in the set command.

The [.N] option indicates the segmentation layout applies only to the specific logical monitor.  If this is not defined the segmented layout applies to all logical monitors.

This is useful for example when using specialist graphic card hardware such as Matrox eXpansion cards, Eyefinity and NVIDIA Mosaic and their custom video drivers to connect multiple physical devices that are seen as a single logical device by the operating system.

This setting has a number of formats as follows:

 Value  Description
H:V N:N where the 1st number represents the horizontal layout and the 2nd number the vertical layout.  

Each segment is allocated a number and these are unary based (start at one) for the top left segment and increasing to the right and then down.
Taking 2x2 as an example the segments are numbered thus.
1 2 
3 4
This straight-forward layout can be defined in the UPDD Console, Advanced, General, under 'All Devices' or set on the device entry.

x:n:[l,t,r,b]
Define custom segmentation. Allows for unusual size / shape segments on the individual monitors.
x = extended, n=no. of segments, l=left, t=top, r=right, b=bottom (based on internal video mapping range of 65535 dec / FFFF hex)
example - monitor_segment_map=x:2:0,0,5555,ffff:5556,0,ffff,ffff
in this example x = extended
2 = number of segments.
remainder is the arrangement of the 2 segments.

Example 1

A Windows system has 3 logical monitors listed in the desktop properties but 9 physical monitors. Each logical monitor is associated with 3 physical monitors in a horizontal layout:

In this case the setting monitor_segment_map is set to 3x1 to indicate the setting applies to all logical monitors:

Example 2

A multi-monitor system has a number of logical monitors with the 2nd logical monitor supporting 4 physical touch monitors. In this case the command would be :

Segment desktop/ device association

Once the logical/physical relationship is defined the UPDD Configure function can be used to setup the desktop / device association.

The UPDD Configure function will set up the appropriate UPDD settings, such as these settings for a 1 logical / 3 physical layout with the UPDD touch device 1 associated with the 3rd segment and device 2 associated with the 1st segment and device 3 associated with the 2nd segment:

upddutils nodevice set monitor_segment_map 3x1 - set manually to define segment layout
upddutils device 1 set monitor_segment 3 - set by the configure function
upddutils device 2 set monitor_segment 1 - set by the configure function
upddutils device 3 set monitor_segment 2 - set by the configure function

The above configuration is listed in the UPDD Status screen as follows:

In some strange desktop layout definitions, such as the task bar on the side, it is possible for the calibration window to be offset when displayed in a segmented configuration, thus giving inaccurate calibration on one of the axis. In this case it may be necessary to set the calibration.force_geometry setting as appropriate.

Edge case segmentation

In cases where monitor segmentation is giving unpredictable results, i.e. a calculated monitor_segment_map does not work as expected, UPDD Calibrate can be used to determine the correct monitor_segment_map.

In ths example we are trying to determine the correct right side boundary values for each segment in a horizontal monitor layout, e.g. 1x3 

Run the commands listed below ( within c:\Program Files\UPDD)

upddutils set calibration_margin 0

upddutils set calibration_margin.next 0

upddutils set calibration_points 4

upddutils global set monitor_segment_map "x:1:0,0,ffff,7fff"

upddutils set monitor_segment 1

In this mode, when you run calibrate an arrow is shown in each corner of the segment and you can use this to determine if the segment is defined correctly or to adjust the setting accordingly.

The procedure below will determine a correct setting for the right boundary (the 7fff value in the above example). Once you have done this you should be able to adapt it for the other boundary settings.

The aim of this exercise is to determine the segmentation values for a specific monitor, the “target monitor” in the description below.

The following steps should be repeated until the arrow points exactly to the monitor edge in question.

Now run the command:

"UDPP Calibrate.exe" device=1

Touch the calibration screen twice so the third calibration point is shown:

Note that it can be difficult to get touch to react at the corner of the screen, but for the purpose of this exercise you can touch anywhere the aim is to only advance to a specific calibration point, not take an accurate calibration.

Make a note of the position of the arrow relative to the edge of the target monitor you are determining, in this case the right edge.

Now choose a new value for the boundary, if the arrow was shown to the right of the target monitor edge choose a value half way between the lowest previously chosen value (0 on the first step) and the current value if it's to the left choose a value half way between the highest previously chosen value (ffff on the first step) and the current value.

Set this value e.g.

upddutils global set monitor_segment_map "x:1:0,0,ffff,3fff"

and repeat the test.

Following this exact sequence will determine the correct value in a just a few iterations.

Custom  To follow
Virtual device and monitor setup

Under Windows, the driver creates virtial HID devices that are used to post touch data into the system. There is one virtual HID touch (and pen - UPDD V7) device for each connected monitor, and these are used to post co-ordinate touch data into the system.

When these virtual devices are created, either at driver installation or if the display settings or monitor layout is changed (a monitor is added or removed) the driver needs to map each virtual device to the corresponding video layout for the monitor (monitor co-ordinate metrics) so that it can accurately post touches into the correct video location.

To map the monitor video layout with virtual device that driver moves the cursor to the corner of each monitor and notes the co-ord locations. When this function is active a notification is issued indicating the monitor layout is being set and requesting that no mouse or touches are perform during this procedure. A notification is issued once the procedue is complete. It takes about 2 seconds per connected monitor.

Since UPDD version 7.1.43, this function can be disabled and run manually as and when required.

For more information see Monitor Metrics document.

Display binding

It can be useful to bind a touch device with a monitor so that the relationship will be retained even of there are changes to the monitor metrics, such as a new monitor being added to the system or if the monitor layout is reported differently over a reboot. We have implemented a few ways of defining this association.

Monitor name

​If monitor binding is employed and two monitors of the same name are connected then binding is likely to be incorrect. However, in this situation using the Configure utility should correctly assign the touch / desktop association.
A touch screen monitor is two totally independent devices, a video display and a touchscreen, with no known relationship between the devices.

Therefore when a touch screen monitor is connected to a system, with the independent video and touch device cables, two devices will appear on the system.  The video driver will handle the display and UPDD will handle the touch.

When a touch device is initially discovered then by default touch will be used to move the cursor on the primary monitor, 'monitor 1', because there is no foolproof way for the driver to determine what monitor/desktop is associated with the touchscreen.  On a single monitor system then obviously the touch/desktop association will be correct but in a multi-monitor layout it is likely that the association is incorrect, hence the need to run Configure to make the correct association.

However, in situations where the monitor is listed in the OS with a unique display name, this name can be preset against the touch device such that the driver will automatically associate the touch device with the named monitor.  With version 6.0.277 we have introduced a setting, monitor_bind.display_name, to allow this automatic binding of a touchscreen to a display name such that the association will be made between the touchscreen and the monitor whenever it is discovered on the system.

This is best understood by the example below.  We have a Lenono, ThinkVision LT1423 touch monitor.  In UPDD we have configured this device with the same name.  When this device is plugged into a Mac system the monitor is listed in the display properties as LEN LT1423pwC so we have set this name in the monitor bind key setting. Now, when the monitor and touch screen are plugged in to a Mac system the touch device will automatically be associated with the correct monitor/desktop.  In the example below, the monitor is a secondary monitor, monitor 2, and the touch / desktop association has been correctly made.

     

The UPDD Console and the command line interface functions devices or monitors can be used to list the monitor names.

Note that the monitor_bind.display_name specifies a display (screen) name substring.  If a value is specified then the device will associate itself with a screen with a name containing that value. The matching is case insensitive.

e.g. if the value is 'XYZ' and a display named 'XYZ Multi touch' is found, this will be used.

This binding is checked every time there is a setting change notification; so the binding is dynamic, i.e. will track monitor layout changes.

Note that in some cases the name of a monitor as reported by the OS to the driver might differ from that seen in various system tools so you need to set the name as listed by the driver's functions, such as listed in the UPDD Status.

Currently only supported in Windows and MacOS.

This feature is especially useful when the value is preset in the driver package as delivered to the end user such that the touch / desktop association will be correctly made when the device is connected to the system.

Monitor role

Under Windows a monitor will be designated the primary monitor. In dual systems the 2nd monitor is also referred to as the secondary monitor. You can bind a touchscreen to the role associated to the monitor.

upddutils device <A> set monitor_bind.display_name disp=primary

upddutils device <B> set monitor_bind.display_name disp=secondary

where <A> and <B> are the UPDD device handles of the devices to be associated with the primary / secondary monitors.

A primary monitor is defined as that having it's origin at 0,0

A secondary monitor is defined as the first not having it's origin at 0,0

A secondary monitor binding is only useful in a two monitor system.

Hardware port binding

In a multi-device environment a hardware port will be required for each pointer device.
In a multi-monitor / multi-touch device environment it is important to be able to associate a specific touch device with a given monitor or desktop segment and ensure that the monitor/touch device association is retained over a reboot and, as best as possible, if devices switch ports or additional similar devices are added.
Each USB device handled by the driver is allocated a connection key.  The format of this key is dependent on the characteristics of the controller, the port or hub on which it is physically connected and other settings, as seen in these two examples:

The UPDD device setting 'bindmode' is a bit mask setting that indicates the components that are used to construct a bindkey. By default this is set to 32767 (7FFF) so all standard components are used in the bindkey.

#define BIND_VIDPID 0x01
#define BIND_USB_SERIAL 0x02
#define BIND_USB_LOCATION 0x04

Currently not all bits represent a component and are reserved for future use.

For USB devices the device/desktop binding method is different depending on the number of devices in use and the characteristics of the USB device as follows:

Single device
In all cases the binding between the controller and desktop will be maintained based on the USB vendor and product identification.

Unique devices
In all cases where the USB device holds a unique serial number the binding between the controller and desktop will be maintained based on the USB vendor, product id and the serial number.

Multiple devices
The main issue arises when the USB devices are identical in that they all share the same vendor and product id but have no unique serial number. In this instance as long as the device remains in the same port the desktop and device association will be retained.  This cannot be guaranteed in cases when, for whatever reason, the port number switches.

API considerations
When using the UPDD API in a multi-monitor environment you may need to associate received touch data with the source monitor in which case you need to be aware of the UPDD monitor metrics setting.

Interlock functionality
When dealing with multiple touch devices in desktop systems that are designed for single user usage the driver needs to cater for simultaneous touches being made on different devices and ensure there is a clean switch between one device and another.

The driver implements an interlock feature as described here.

It is catered for if UPDD Gestures / UPDD Commander is used in Mac OS X or UPDD Virtual HID interface in Windows and implements an interlock feature such that control can only be given to a device if there is currently no touch data being received from a different device.

Operating system specifics

Please now select the appropriate link for further details on multi-monitor usage within each different operating system: