The driver is configured in MacOS as follows.
A codeless kernel extension (tbupddmxhid.kext) / system extension (UPDD System Extension.app) is used to specify the hardware to be supported. This file contains the list of USB vendor and product ids supported by the driver. Its purpose to register the driver for the supported USB device (s) so that UPDD can take control. This also prevents HID taking control of HID devices to be supported by UPDD.
The main three permanently active UPDD components are the Driver, Daemon and Commander. The driver is invoked via a Launch Daemon and UPDD Commander and Daemon are invoked via Launch Agents such that, should they fail, they will automatically be launched.
Launch agents and launch daemons are managed by "launchd" which is macOS's system for running processes automatically, especially background processes.
If required the components can be invoked from the terminal window, especially to see if there are any errors being issued that are preventing them running, such as this command to launch the driver:
sudo /Library/Application\ Support/UPDD/updd.app/Contents/MacOS/updd -e
The driver uses TCP/IP port 4146 to communicate between components using the API.
Interface
The driver uses a number of interfaces to post co-ordinate data into the system:
Interface |
Type |
Description |
Simpletouch |
Single touch mouse interface |
Default interface that offers a basic touch interface as implemented by the driver itself. In a Mac OS X environment the older IOHID interface is used to post ‘mouse’ messages into the system. Uses an old API that may be deprecated in future releases of MacOS. |
Simpletouch_cg |
Single touch mouse interface |
Alternative interface that offers a basic touch interface as implemented by the driver itself. In a Mac OS X environment the newer core graphics interface is used to post ‘mouse’ messages into the system. |
Gestures
or
Commander |
Multi-touch gesture interface |
Interfaces with the gesture capability of the Mac OS system and gesture aware applications. This is particularly useful for dual and multi-touch touch devices as it allows common gestures to be performed via the touch screen.
|
When Gestures/Commander is loaded its interface into the system will take precedence over the simple touch interface. If gestures/commander is quit the simple touch interface becomes active.
Processes
In normal circumstances once installation has completed there will be a number of processes enabled and running.
If any of the processes are disabled or indicated as disabled when using the upddprocesses command to start them, they will need to be enabled as per this article.
The actual number will be dependent on the installed components held in the installer. The core driver utilises two processes updd (the user mode driver service) and updd daemon (the background task). If Commander is installed this application will also be running. Gestures or TUIO may be seen if running older versions of the software.
Some transitional applications, like the UPDD Test, Calibration and Identify will be listed in the Activity Monitor when they are running. However, some core UPDD applications will be permanently listed once they are running:
Process |
Purpose |
UPDD |
The driver and the API interface. |
UPDD Daemon |
The driver's daemon task offering a number functions relating to the driver and user interface. |
UPDD Commander |
Offers full MacOS gesture support at an individual application level and enhanced gesture API interface. Includes TUIO interface. |
UPDD TUIO |
Obsolete - The UPDD TUIO server that reads co-ordinated data from the driver and broadcasts it to and waiting TUIO client application.
|
UPDD Gestures
|
Obsolete - Offers full MacOS gesture support and gesture API interface. |
Stopping and starting UPDD processes
In some cases, an end user may wish to start / stop UPDD related processes such that they are only running when required. To allow for this, we have created a utility, named upddprocesses, which can be used to start and stop the various processes.
upddprocesses must be run under root (precede the command with sudo - password will be required) if you want to stop the driver.
It can be used from the command line, a script, or process by executing it thusly:
[sudo] upddprocesses start
[sudo] upddprocesses stop
sudo (gives superuser privilegdes) will be needed to stop / start the driver
Command line arguments can be passed for ignoring errors and being able to specify specific UPDD processes as described below:
Usage: upddprocesses start|stop <options>
Options: |
|
-h or --help |
Show this help message and exit |
-I or --ignore-errors |
Attempt to start or stop all specified processes; do not stop on errors |
Processes: |
All processes are affected by default. If one or more of these options are used, only the selected processes will be affected. |
-d or --driver |
Start/stop UPDD - superuser priviledges needed to stop/start the driver |
-c or --commander |
Start/stop UPDD Commander |
-a or --daemon |
Start/stop UPDD Daemon |
-g or --gestures |
Start/stop UPDD Gestures |
-t or --tuio |
Start/stop UPDD TUIO |
--all-users |
Starting with MacOS 10.10, it is possible to start UPDD Daemon, Gestures, and TUIO for user accounts that are already logged in. For this reason you can specify --all-users command line argument when starting processes. If it's used in macOS 10.9 or earlier it is ignored and processes are only started for the current user. |
Automatically start / stopping the driver
With some devices touch is lost after return from deep sleep. In our investigations we could see there was an outstanding read on the device, but no data was being sent.
Stopping and starting the driver at this point (which in turn would perform driver startup USB communications) kickstarted the device and touch function resumed.
To automate the restart of the driver we added a setting 'power.stop_after_wake'. This can be set in UPDD Console, Advanced, Settings or with the command 'upddutils set power.stop_after_wake 1'
Quitting UPDD processes
UPDD Daemon, Commander, Gestures and TUIO run as launch agent processes in that should they fail they will automatically be restarted. The launch agent mechanism is also used to start the processes at system startup.
Should you want to quit one of these processes such that it does not run at startup you need to move or delete or rename the appropriate file from the launch agent folder:
UPDD |
/Library/LaunchDaemons/com.touch-base.updd.plist |
Daemon |
/Library/LaunchAgents/com.touch-base.updddaemon.plist |
Commander |
/Library/LaunchAgents/com.touch-base.upddcommander.plist |
Gestures |
/Library/LaunchAgents/com.touch-base.upddgestures.plist |
TUIO |
/Library/LaunchAgents/com.touch-base.upddtuio.plist |