Extron TouchLink Pro — Panel Design and Programming
TouchLink Pro (TLP series) are Extron's PoE-powered capacitive touchpanel hardware for room control interfaces. Panel design — layout, buttons, pages, logic — is done inside Global Configurator Plus (GCP) on the same canvas as the rest of the room control program. Understanding GCP's panel designer, button types, feedback mechanisms, and the relationship between panel elements and control system logic is essential for delivering professional Extron room control interfaces.
See control-systems/extron-basics for hardware specifications and control-systems/extron-globalscripter for the GlobalScripter code that drives panel logic.
TouchLink Pro Hardware Overview
| Model | Screen | Mount | Resolution | Power | Best For |
|---|---|---|---|---|---|
| TLP Pro 520M | 5" | Wall | 800×480 | PoE (802.3af) | Simple rooms, single source |
| TLP Pro 720M | 7" | Wall | 1024×600 | PoE (802.3af) | Standard conference rooms |
| TLP Pro 520TG | 5" | Table surface | 800×480 | PoE (802.3af) | Huddle spaces |
| TLP Pro 725TG | 7" | Table surface | 1024×600 | PoE (802.3af) | Conference tables |
| TLP Pro 1025T | 10" | Table + stand | 1280×800 | PoE (802.3at) | Boardrooms, lecterns |
| TLP Pro 1725T | 17" | Table + stand | 1920×1200 | PoE (802.3at) | Executive boardrooms, auditoriums |
All TLP Pro panels connect to the IPCP Pro via 10/100 Ethernet over PoE — a single Cat 6 cable handles power and communication. No separate power supply. Panels are assigned to the IPCP Pro in GCP by IP address.
PoE requirements: 5" and 7" panels use 802.3af (15.4W); 10" and 17" panels require 802.3at (30W). Confirm switch port PoE budget when specifying multiple larger panels from the same switch.
GCP Panel Designer Workflow
Accessing the Panel Designer
In GCP, the Pages tab opens the panel designer. The canvas shows the TouchLink Pro screen at native resolution. Multiple pages are managed in the page list on the left side of the Pages view.
Setting panel resolution: The canvas resolution must match the target TLP model. Set this when creating the project (System tab → Add TouchLink Pro → select model). If the resolution is wrong, buttons placed on the canvas may not align with the physical panel's touch zones.
Page Management
A GCP project can have as many pages as needed. Pages are numbered sequentially (Page 1, Page 2, etc.) and referenced by number in GlobalScripter button navigation commands.
| Page Type | Purpose | Example |
|---|---|---|
| Home page | Primary room control; shown on power-on | Source select, volume, display on/off |
| Sub-page | Secondary controls reached from home | Advanced settings, camera control |
| Popup page | Overlay shown on top of current page | Confirmation dialogs, volume overlay |
| Password page | PIN entry; unlocks other pages | Tech/admin access |
Recommended page structure for a conference room:
Page 1 — Home
[Display On] [Display Off] [AV Mute]
[HDMI 1] [HDMI 2] [Wireless] [Camera]
Volume slider + mute button
[→ Conference Page] [→ Settings Page]
Page 2 — Conference
[Start Call] [End Call]
[Mic Mute] (large, prominent)
[Camera On/Off]
[← Back to Home]
Page 3 — Settings (PIN protected)
Individual zone volumes
Display brightness control
System shutdown
[← Back]
Button Types and Configuration
Standard Button
The most common element. Sends a command on press and/or release. In GCP, a button is wired to a device module action port or a GlobalScripter virtual button port.
Button properties:
- Legend — text displayed on the button (static string or dynamic binding)
- Active Color / Inactive Color — colors for the two visual states
- Image — optional icon overlay on the button
- Button Type — Toggle, Momentary, or Radio (see below)
Toggle Button
Alternates between active and inactive state with each press. Used for on/off controls (display power, mute, AV blank). Feedback from the device (RS-232 power status response) updates the toggle state independently from button presses — the button reflects actual device state, not just the last command sent.
Momentary Button
Active only while held; returns to inactive on release. Used for PTZ camera control (press-hold to pan, release to stop), volume ramp hold, or any action that should stop when touch ends.
Radio Button Group
A set of buttons where only one can be active at a time — pressing one deactivates the others. Used for source selection (only one input is active), room mode selection, or any mutually exclusive choice. In GCP, group buttons as a radio group in the button properties dialog.
Slider
Linear fader for volume, brightness, or any continuous value. The slider position maps to a value range defined in the device module. GCP sliders can be horizontal or vertical.
Slider feedback: Bind a feedback signal from the device (current volume level) to the slider position — the slider reflects actual device state. Without feedback binding, the slider shows the last sent value, not the current device value (which may differ if the device was adjusted via remote control or another input).
Label (Static and Dynamic)
Static label: Fixed text — section headers, room name, instruction text ("Press SOURCE to begin").
Dynamic label: Bound to a GlobalScripter string variable. Updates in real time as the variable changes. Common uses:
- Current source name ("Now showing: HDMI 1")
- Meeting title from room booking system ("Staff Meeting — ends 3:00 PM")
- System status ("System warming up..." / "Ready")
- Current time (using the IPCP Pro's system clock)
Images and Backgrounds
Background images: JPG or PNG placed behind all buttons on a page. Common uses: company logo, room photo, architectural rendering of the room layout. Import via GCP → Pages → Page Properties → Background Image.
Button images: Icon overlay on a button (power icon, speaker icon, camera icon). Makes buttons self-explanatory without requiring text labels. Extron provides an icon library in GCP; custom icons can be imported as PNG.
File size: Keep background images under 200KB for fast page-load performance on the panel. Large images cause visible delays when navigating between pages.
Feedback — Keeping Panel State Accurate
Feedback is the mechanism that updates panel elements based on actual device state. Without feedback, buttons and sliders show what was sent, not what the device is actually doing.
Feedback Sources
- RS-232 polling response — the IPCP Pro periodically queries device status; RS232_Receive parses the response and calls SetButtonState() or SetLabel()
- Device event — device sends an unsolicited status update (power state change, input change); RS232_Receive handles it immediately
- GCP Feedback Block — for devices with defined feedback in their device module, GCP automatically wires device status ports to panel element feedback without GlobalScripter code
Feedback Code Pattern
// In GlobalScripter: update display power button based on RS-232 response
function RS232_Receive(port, data) {
if (port === rs232_display) {
// Sony display response: "POWR0000\r\n" (off) or "POWR0001\r\n" (on)
if (data.indexOf("POWR0001") !== -1) {
SetButtonState(tlp1, 1, 1, 1); // Display On button = active (green)
SetButtonState(tlp1, 1, 2, 0); // Display Off button = inactive
SetLabel(tlp1, 1, 20, "Display ON");
} else if (data.indexOf("POWR0000") !== -1) {
SetButtonState(tlp1, 1, 1, 0);
SetButtonState(tlp1, 1, 2, 1); // Display Off button = active
SetLabel(tlp1, 1, 20, "Display OFF");
}
}
}
Poll Timer for Feedback Reliability
Device state can change without the control system sending a command (someone uses the display remote). A poll timer ensures feedback stays accurate:
// Poll display power state every 30 seconds
var poll_timer;
function InitializePolling() {
poll_timer = CreateTimer();
StartRepeatingTimer(poll_timer, 30000); // 30 second interval
}
function Timer_Event(timer) {
if (timer === poll_timer) {
Send(rs232_display, "POWR?\x0D"); // query power state
}
}
Multi-Page Navigation
Page Navigation Buttons
A button that switches pages uses the GoToPage() function in GlobalScripter:
function Button_Press(tlp, page, button) {
if (button === 50) { // "Conference" button
GoToPage(tlp, 2); // go to page 2
}
if (button === 51) { // "Back" button
GoToPage(tlp, 1); // return to home
}
if (button === 52) { // "Settings" (PIN protected)
GoToPage(tlp, 10); // PIN entry page
}
}
Auto-Return to Home
A common requirement: if no button is pressed for 60 seconds, return to the home page automatically:
var inactivity_timer;
function ResetInactivityTimer() {
StopTimer(inactivity_timer);
StartTimer(inactivity_timer, 60000); // restart 60-second countdown
}
// Called on every button press
function Button_Press(tlp, page, button) {
ResetInactivityTimer();
// ... rest of button logic
}
function Timer_Event(timer) {
if (timer === inactivity_timer) {
GoToPage(tlp1, 1); // return to home page
}
}
Popup Pages
Popup pages overlay the current page without replacing it. Used for:
- Volume sliders (appear over whatever page is active, dismiss on tap outside)
- Confirmation dialogs ("Are you sure you want to end the meeting?")
- Status overlays ("System shutting down — please wait")
// Show a popup
ShowPopup(tlp1, 5); // show page 5 as popup
// Hide the popup
HidePopup(tlp1, 5);
// Auto-dismiss popup after 5 seconds
ShowPopup(tlp1, 5);
StartTimer(popup_dismiss_timer, 5000);
function Timer_Event(timer) {
if (timer === popup_dismiss_timer) {
HidePopup(tlp1, 5);
}
}
PIN Protection
A PIN-protected page restricts access to advanced settings:
var entered_pin = "";
var CORRECT_PIN = "1234";
// Digit buttons (1–9, 0) on PIN entry page
function Button_Press(tlp, page, button) {
if (page === 10) { // PIN page
if (button >= 1 && button <= 10) { // digit buttons 1–10 (10 = "0")
var digit = (button === 10) ? "0" : String(button);
entered_pin += digit;
SetLabel(tlp1, 10, 20, RepeatChar("*", entered_pin.length));
if (entered_pin.length === 4) {
if (entered_pin === CORRECT_PIN) {
entered_pin = "";
GoToPage(tlp1, 3); // go to settings page
} else {
entered_pin = "";
SetLabel(tlp1, 10, 20, "Incorrect PIN");
StartTimer(clear_label_timer, 2000);
}
}
}
if (button === 11) { // Clear button
entered_pin = "";
SetLabel(tlp1, 10, 20, "");
}
}
}
function RepeatChar(ch, n) {
var s = "";
for (var i = 0; i < n; i++) { s += ch; }
return s;
}
Panel Commissioning
Assigning Panel to IPCP Pro in GCP
- System tab → IPCP Pro → Properties → IP Devices
- Add TouchLink Pro by IP address
- Set the panel's IP address in its own network settings (via panel front-screen settings or DHCP reservation)
- Panel connects to the IPCP Pro automatically when both are on the same network
Panel Software Version
Verify the TLP Pro firmware matches the GCP version used to program it:
- In Toolbelt, check the TLP Pro firmware version
- In GCP, check Help → About for the GCP version and its compatible TLP firmware range
- Update TLP firmware via Toolbelt if needed before final upload
Testing Panel Layout on Hardware
The GCP panel designer shows a preview at the design-stage resolution, but the only reliable test is on the physical panel. Finger-sized touch zones that look sufficient at 100% zoom on a monitor may be too small in practice. Key checks:
- Touch every button — confirm all register reliably with a finger (not a stylus)
- Check button spacing — adjacent buttons should have at least 8px gap; larger for primary actions
- Verify dynamic labels update as expected
- Confirm page navigation goes to the correct page
- Test inactivity timer returns to home page
Common Pitfalls
-
Panel resolution mismatch. Building a 7" panel UI at 1024×600 and deploying to a 5" panel at 800×480 crops the right side and bottom of the page. Always set the canvas resolution to match the target panel before starting layout. If the project uses multiple panel sizes, create separate page sets for each resolution.
-
Feedback not wired — buttons show incorrect state. A "Display On" button that lights up when pressed but doesn't reflect the display turning off (via remote control or auto-off timer) confuses operators. Every toggle button should have feedback from the device bound to it. Without feedback, the panel lies — it shows what was sent, not what's actually happening.
-
Touchpanel IP address conflict. Two TLP panels on the same IP address causes both to behave erratically — one or both panels show incorrect states, button presses may not register, or one panel takes control while the other stops responding. Assign static IPs (or DHCP reservations by MAC address) to every TLP panel in the project and document them in the system IP list.
-
Page navigation button on wrong page number. GoToPage(tlp1, 2) in GlobalScripter references page 2 in the GCP page list. If pages are reordered, renumbered, or new pages are inserted between existing ones, GoToPage calls go to the wrong page silently. Always verify page numbers in the GCP page list after any page structure changes.
-
Large background images slow page transitions. A background image over 500KB causes a noticeable pause when navigating to that page on older TLP models. Optimize images to JPEG at 80% quality and resize to the panel's native resolution before import. The operator experience of a 1-second black screen during page transition is unacceptable and avoidable.
-
PoE budget not calculated for 10" and 17" panels. TLP Pro 1025T and 1725T require 802.3at (30W) PoE. A switch provisioned for only 802.3af (15.4W) per port will not fully power these panels — symptoms include panels that partially power on, display dimly, or reboot randomly. Confirm switch port PoE class (af vs. at) before finalizing the design and specification.