Tangent Control Surface Extension
API Version: TUBE Version 3.2  TIPC Rev 4 (22nd February 2017)
This plugin allows Hammerspoon to communicate with Tangent's range of panels, such as their Element, Virtual Element Apps, Wave, Ripple and any future panels.
The Tangent Unified Bridge Engine (TUBE) is made up of two software elements, the Mapper and the Hub. The Hub communicates with your application via the TUBE Inter Process Communications (TIPC). TIPC is a standardised protocol to allow any application that supports it to communicate with any current and future panels produced by Tangent via the TUBE Hub.
You can download the Tangent Developer Support Pack & Tangent Hub Installer for Mac here.
This extension was thrown together by Chris Hocking, then dramatically improved by David Peterson for CommandPost.
Signature  hs.tangent.reserved.action > table 

Type  Constant 
Description  Definitions for reserved action IDs. 
Notes 

Source  extensions/tangent/tangent.lua line 109 
Signature  hs.tangent.fromHub > table 

Type  Constant 
Description  Definitions for IPC Commands from the HUB to Hammerspoon. 
Notes 

Source  extensions/tangent/tangent.lua line 37 
Signature  hs.tangent.panelType > table 

Type  Constant 
Description  Tangent Panel Types. 
Source  extensions/tangent/tangent.lua line 169 
Signature  hs.tangent.reserved.parameter > table 

Type  Constant 
Description  A table of reserved parameter IDs. 
Notes 

Source  extensions/tangent/tangent.lua line 152 
Signature  hs.tangent.toHub > table 

Type  Constant 
Description  Definitions for IPC Commands from Hammerspoon to the HUB. 
Source  extensions/tangent/tangent.lua line 90 
Signature  hs.tangent.automaticallySendApplicationDefinition > boolean 

Type  Variable 
Description  Automatically send the "Application Definition" response. Defaults to `true`. 
Source  extensions/tangent/tangent.lua line 1008 
Signature  hs.tangent.ipAddress > number 

Type  Variable 
Description  IP Address that the Tangent Hub is located at. Defaults to 127.0.0.1. 
Source  extensions/tangent/tangent.lua line 998 
Signature  hs.tangent.port > number 

Type  Variable 
Description  The port that Tangent Hub monitors. Defaults to 64246. 
Source  extensions/tangent/tangent.lua line 1003 
Signature  hs.tangent.callback() > boolean 

Type  Function 
Description  Sets a callback when new messages are received. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1044 
Signature  hs.tangent.connect(applicationName, systemPath[, userPath]) > boolean, errorMessage 

Type  Function 
Description  Connects to the Tangent Hub. 
Parameters 

Returns 

Source  extensions/tangent/tangent.lua line 1726 
Signature  hs.tangent.connected() > boolean 

Type  Function 
Description  Checks to see whether or not you're successfully connected to the Tangent Hub. 
Parameters 

Returns 

Source  extensions/tangent/tangent.lua line 1128 
Signature  hs.tangent.disconnect() > none 

Type  Function 
Description  Disconnects from the Tangent Hub. 
Parameters 

Returns 

Source  extensions/tangent/tangent.lua line 1657 
Signature  hs.tangent.isTangentHubInstalled() > boolean 

Type  Function 
Description  Checks to see whether or not the Tangent Hub software is installed. 
Parameters 

Returns 

Source  extensions/tangent/tangent.lua line 1027 
Signature  hs.tangent.send(byteString) > boolean, string 

Type  Function 
Description  Sends a "bytestring" message to the Tangent Hub. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1141 
Signature  hs.tangent.sendAllChange() > boolean, string 

Type  Function 
Description  Tells the Hub that a large number of softwarecontrols have changed. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1295 
Signature  hs.tangent.sendApplicationDefinition([appName, systemPath, userPath]) > boolean, string 

Type  Function 
Description  Sends the application details to the Tangent Hub. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1168 
Signature  hs.tangent.sendDisplayText(messages[, doubleHeight]) > boolean, string 

Type  Function 
Description  Updates the Hub with a number of character strings that will be displayed on connected panels if there is space. 
Parameters 

Returns 

Notes 

Examples  
Source  extensions/tangent/tangent.lua line 1342 
Signature  hs.tangent.sendHighlightControl(targetID, active) > boolean, string 

Type  Function 
Description  Highlights the control on any panel where this feature is available. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1544 
Signature  hs.tangent.sendIndicateControl(targetID, indicated) > boolean, string 

Type  Function 
Description  Sets the Indicator of the control on any panel where this feature is available. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1574 
Signature  hs.tangent.sendMenuString(menuID, value[, atDefault]) > boolean, string 

Type  Function 
Description  Updates the Hub with a menu value. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1256 
Signature  hs.tangent.sendModeValue(modeID) > boolean, string 

Type  Function 
Description  Updates the Hub with a mode value. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1315 
Signature  hs.tangent.sendPanelConnectionStatesRequest()) 

Type  Function 
Description  Requests the Hub to respond with a sequence of PanelConnectionState (0x35) commands to report the connected/disconnected status of each configured panel 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1607 
Signature  hs.tangent.sendParameterValue(paramID, value[, atDefault]) > boolean, string 

Type  Function 
Description  Updates the Hub with a parameter value. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1218 
Signature  hs.tangent.sendRenameControl(targetID, newName) > boolean, string 

Type  Function 
Description  Renames a control dynamically. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1507 
Signature  hs.tangent.sendUnmanagedDisplayWrite(panelID, displayID, lineNum, pos, message) > boolean, string 

Type  Function 
Description  Updates the Hub with text that will be displayed on a specific panel at the given line and starting position where supported by the panel capabilities. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1452 
Signature  hs.tangent.sendUnmanagedPanelCapabilitiesRequest(panelID) > boolean, string 

Type  Function 
Description  Requests the Hub to respond with an UnmanagedPanelCapabilities (0x30) command. 
Parameters 

Returns 

Notes 

Source  extensions/tangent/tangent.lua line 1425 
Signature  hs.tangent.setLogLevel(loglevel) > none 

Type  Function 
Description  Sets the Log Level. 
Parameters 

Returns 

Source  extensions/tangent/tangent.lua line 1013 