Summary
Unified TCP API spec for Global Caché networked control devices (GC-100, iTach, Flex, Global Connect families). Covers IR, serial, relay, sensor, and HDMI matrix/switch control via raw TCP socket on port 4998. Serial-bridging uses dedicated TCP port 4999.
Transport
protocols:
- tcp
addressing:
port: 4998 # API control port
auth:
type: none # inferred: no auth procedure in source
# Secondary TCP service for transparent serial bridging (per Section 4.4.2)
protocols:
- tcp
- serial
addressing:
port: 4999 # Serial bridge port (5000 also used on GC-100-12/18)
serial:
baud_rate: 9600 # default; configurable via set_SERIAL
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: no auth procedure in source
Traits
- queryable # inferred from getversion, getdevices, get_NET, get_IR, get_SERIAL, get_RELAY, getstate, get_SENSORNOTIFY, getactive queries
- routable # inferred from getstate/setstate on HDMI matrix/switch module
- powerable # inferred indirectly (relay/switch state controls power on attached loads)
Actions
# ===== COMMON COMMANDS =====
- id: getversion
label: Get device firmware version
kind: query
command: "getversion[,{module}]\r"
params:
- name: module
type: integer
required: false
description: Module number 0-9 (omit for default module)
notes: "Terminate with CR (ASCII 13). Response: version,<module>,<version>"
- id: getdevices
label: Enumerate device capabilities
kind: query
command: "getdevices\r"
params: []
notes: "Returns device list with module, ports, type, subtype"
- id: blink
label: Blink power LED (GC-100 only)
kind: action
command: "blink,{mode}\r"
params:
- name: mode
type: enum
values: [0, 1]
description: "0=blink disabled, 1=blink enabled"
notes: "GC-100 only; no response"
- id: get_NET
label: Get network configuration
kind: query
command: "get_NET,{module}:{port}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
notes: "Response: NET,<module>:<port>,<cfglock>,<IPconfig>,<IPaddr>,<subnet>,<gateway>"
- id: set_NET
label: Set network configuration
kind: action
command: "set_NET,{module}:{port},{cfglock},{IPconfig},{IPaddr},{subnet},{gateway}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: cfglock
type: enum
values: [UNLOCKED, LOCKED]
- name: IPconfig
type: enum
values: [STATIC, DHCP]
- name: IPaddr
type: string
description: IPv4 address
- name: subnet
type: string
description: IPv4 subnet
- name: gateway
type: string
description: IPv4 gateway
notes: "Not currently supported for iTach, Flex, or Global Connect"
# ===== IR COMMANDS =====
- id: get_IR
label: Get IR port mode
kind: query
command: "get_IR,{module}:{port}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
notes: "Response: IR,<module>:<port>,<mode>"
- id: set_IR
label: Set IR port mode
kind: action
command: "set_IR,{module}:{port},{mode}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: mode
type: enum
values: [IR, BL2_BLASTER, IR_NOCARRIER, IR_BLASTER, IRTRIPORT, IRTRIPORT_BLASTER, SENSOR, SENSOR_NOTIFY, SERIAL, RECEIVER, LED_LIGHTING]
notes: "GC-100 resets after successful set_IR"
- id: sendir
label: Transmit IR code
kind: action
command: "sendir,{module}:{port},{ID},{freq},{repeat},{offset},{on1},{off1},...,{onN},{offN}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: ID
type: integer
description: "0-65535, echoed in completeir response"
- name: freq
type: integer
description: "Carrier frequency Hz. GC-100: 20000-500000; others: 15000-500000"
- name: repeat
type: integer
description: "GC-100: 1-31; iTach: 1-50; Flex/Global Connect: 1-20"
- name: offset
type: integer
description: "Preamble offset (odd). GC-100: 1-255; others: 1-383"
- name: on_pulses
type: array
description: "Variable number of on pulse counts (1-50000 GC-100; 4-50000 Flex/Global Connect)"
- name: off_pulses
type: array
description: "Variable number of off pulse counts (1-50000 GC-100; 4-50000 Flex/Global Connect)"
notes: "Response: completeir,<module>:<port>,<ID> or busyir"
- id: stopir
label: Stop IR transmission
kind: action
command: "stopir,{module}:{port}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- id: get_IRL
label: Enable IR learner
kind: action
command: "get_IRL\r"
params: []
notes: "Streams IR code strings until stop_IRL or connection close"
- id: stop_IRL
label: Disable IR learner
kind: action
command: "stop_IRL\r"
params: []
- id: receiveIR
label: Enable/disable IR input
kind: action
command: "receiveIR,{module}:{port},{mode}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: mode
type: enum
values: [enabled, disabled]
notes: "iTach, Flex, Global Connect only"
# ===== SERIAL COMMANDS =====
- id: get_SERIAL
label: Get serial port configuration
kind: query
command: "get_SERIAL,{module}:{port}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
notes: "Response: SERIAL,<module>:<port>,<baudrate>,<flowcontrol/duplex>,<parity>[,stopbits][,cable_id]"
- id: set_SERIAL
label: Set serial port configuration
kind: action
command: "set_SERIAL,{module}:{port},{baudrate},{flow_or_duplex},{parity}[,{stopbits}][,{cable_id}]\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: baudrate
type: enum
values: [1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200]
- name: flow_or_duplex
type: enum
values: [FLOW_NONE, FLOW_HARDWARE, DUPLEX_HALF, DUPLEX_FULL]
- name: parity
type: enum
values: [PARITY_NO, PARITY_ODD, PARITY_EVEN]
- name: stopbits
type: enum
required: false
values: [STOPBITS_1, STOPBITS_2]
- name: cable_id
type: enum
required: false
values: [CABLE_3, CABLE_4]
description: "Flex only. CABLE_3=RS232, CABLE_4=RS485"
# ===== RELAY COMMANDS =====
- id: get_RELAY
label: Get relay type
kind: query
command: "get_RELAY,{module}:{address}\r"
params:
- name: module
type: integer
required: true
- name: address
type: integer
required: true
description: "1-4"
notes: "Flex with Flex Link Relay & Sensor Cable only"
- id: set_RELAY
label: Set relay type
kind: action
command: "set_RELAY,{module}:{address},{type}\r"
params:
- name: module
type: integer
required: true
- name: address
type: integer
required: true
- name: type
type: enum
values: [SPST, SPDT, DPDT, Disabled]
- id: setstate_relay
label: Set relay/sensor state
kind: action
command: "setstate,{module}:{port},{state}[,{period}]\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: state
type: enum
values: [0, 1, 2]
description: "0=off/open, 1=on/closed SPST or on1 SPDT/DPDT, 2=on2 SPDT/DPDT"
- name: period
type: integer
required: false
description: "1-4294967295 ms pulse period"
notes: "State not persistent through reset/power-cycle (reverts to 0)"
# ===== SENSOR COMMANDS =====
- id: getstate_sensor
label: Get sensor input state
kind: query
command: "getstate,{module}:{port}[,{mode}]\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: mode
type: enum
required: false
values: [notify]
description: "Enable state change notification"
notes: "Response: state,<module>:<port>,<state> where state is 0=off/open, 1=on/closed"
- id: get_SENSORNOTIFY
label: Get sensor-notify settings
kind: query
command: "get_SENSORNOTIFY,{module}:{port}\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
notes: "Flex/Global Connect only"
- id: set_SENSORNOTIFY
label: Set sensor-notify settings
kind: action
command: "set_SENSORNOTIFY,{module}:{port},{n_port},{n_interval}[,{debounce}]\r"
params:
- name: module
type: integer
required: true
- name: port
type: integer
required: true
- name: n_port
type: integer
description: "0=disable all notifications; 1-65535=UDP port"
- name: n_interval
type: integer
description: "0=disable periodic; 1-65535 seconds"
- name: debounce
type: string
required: false
description: "Minimum duration 10us-1s. Default 100ms. Units: us, ms, s"
notes: "Flex/Global Connect only"
# ===== HDMI MATRIX / SWITCH COMMANDS =====
- id: getstate_matrix
label: Get matrix switcher input-output state
kind: query
command: "getstate,{module}:{in_port}[,{mode}]\r"
params:
- name: module
type: integer
required: true
- name: in_port
type: integer
required: true
description: "1-3 input port; 0 to disable"
- name: mode
type: enum
required: false
values: [notify]
notes: "Global Connect (HM) only"
- id: setstate_matrix
label: Set matrix switcher input-output
kind: action
command: "setstate,{module}:{in_port},{out_port}\r"
params:
- name: module
type: integer
required: true
- name: in_port
type: integer
required: true
- name: out_port
type: integer
required: true
description: "1-N output port; 0 to disable"
notes: "Global Connect (HM) only. Selecting new input/output disables previous."
- id: getactive
label: Get active state of matrix ports
kind: query
command: "getactive,{module}\r"
params:
- name: module
type: integer
required: true
notes: "Global Connect (HM) only. Returns true/false per port based on connected device power"
# ===== CEC COMMANDS =====
- id: CEC_TX
label: Send HDMI CEC message
kind: action
command: "CEC,{module}:{out_port},TX,{message}\r"
params:
- name: module
type: integer
required: true
- name: out_port
type: integer
required: true
description: "Always 1"
- name: message
type: string
required: true
description: "Colon-delimited ASCII hex bytes (N<=16)"
notes: "Global Connect (SW) only. Response: ACK, !ACK, NACK, or none"
- id: CEC_RX
label: Enable/disable CEC receive monitoring
kind: action
command: "CEC,{module}:{out_port},RX,{enable}\r"
params:
- name: module
type: integer
required: true
- name: out_port
type: integer
required: true
- name: enable
type: enum
values: [enabled, on, "1", disabled, off, "0"]
notes: "Global Connect (SW) only"
Feedbacks
- id: version
type: string
description: "Firmware version string from getversion response"
- id: devices
type: array
description: "Port capability list from getdevices response"
- id: network_config
type: object
description: "NET fields: cfglock, IPconfig, IPaddr, subnet, gateway"
- id: ir_mode
type: enum
values: [IR, BL2_BLASTER, IR_NOCARRIER, IR_BLASTER, IRTRIPORT, IRTRIPORT_BLASTER, SENSOR, SENSOR_NOTIFY, SERIAL, RECEIVER, LED_LIGHTING]
description: "Current IR port mode"
- id: serial_config
type: object
description: "SERIAL fields: baudrate, flowcontrol/duplex, parity, stopbits, cable_id"
- id: relay_type
type: enum
values: [SPST, SPDT, DPDT, Disabled, Unavailable]
description: "Logical relay type"
- id: io_state
type: integer
description: "0=off/open, 1=on/closed, 2=on2 for SPDT/DPDT"
- id: completeir
type: string
description: "IR transmit completion notification with module:port,ID"
- id: busyir
type: string
description: "Returned when port busy with different IR code"
- id: sensor_notify
type: object
description: "SENSORNOTIFY fields: n_port, n_interval, debounce"
- id: matrix_active
type: object
description: "Active state per HDMI port: IN/OUT lists with true/false"
- id: cec_ack
type: enum
values: [ACK, "!ACK", NACK, "none"]
description: "CEC transmit acknowledge result"
- id: statechange
type: string
description: "Unsolicited TCP state change notification: statechange,<module>:<port>,<state>"
Variables
- id: serial_baudrate
type: enum
values: [1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200]
description: "Serial port baud rate (Flex supports 300-115200)"
- id: serial_flow_duplex
type: enum
values: [FLOW_NONE, FLOW_HARDWARE, DUPLEX_HALF, DUPLEX_FULL]
- id: serial_parity
type: enum
values: [PARITY_NO, PARITY_ODD, PARITY_EVEN]
- id: serial_stopbits
type: enum
values: [STOPBITS_1, STOPBITS_2]
- id: serial_cable
type: enum
values: [CABLE_3, CABLE_4]
description: "Flex only. CABLE_3=RS232, CABLE_4=RS485"
- id: ir_carrier_freq
type: integer
description: "IR carrier Hz. GC-100: 20000-500000; others: 15000-500000"
- id: ir_repeat
type: integer
description: "GC-100: 1-31; iTach: 1-50; Flex/Global Connect: 1-20"
- id: sensor_debounce
type: string
description: "10us-1s, default 100ms. Units: us, ms, s"
Events
- id: statechange
description: "Unsolicited TCP state change: statechange,<module>:<port>,<state>. GC-100 supports this for sensor class only. iTach/Flex/Global Connect requires getstate with mode=notify first."
- id: udp_sensor_notify
description: "UDP multicast change notification (IGMP) for sensor class modules. Sent to configured n_port at n_interval. Format matches getstate response."
- id: completeir
description: "IR transmission complete: completeir,<module>:<port>,<ID>"
- id: ir_code_received
description: "Learned IR code stream: IR,<IR_code> (after get_IRL or receiveIR enabled)"
Macros
# UNRESOLVED: source documents no multi-step sequences beyond individual command examples
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on sequencing requirements
Notes
All requests terminate with carriage return (ASCII 13). Commands and parameters case-sensitive. Connections can be momentary or persistent.
GC-100 supports 1 simultaneous TCP connection; iTach, Flex, and Global Connect support up to 8. Devices acquire IP via DHCP with static fallback.
Serial bridge uses dedicated TCP port 4999 (and 5000 on GC-100-12/18) for transparent raw data passthrough, separate from the control API on 4998. Flex and Global Connect serial also support stop bits 2; GC-100 and iTach are STOPBITS_1 only.
IR port mode set persists per port. GC-100 resets device after successful set_IR. Flex port parameter for set_IR is always 1.
Relay state is non-persistent: setstate output reverts to 0 (off/open) on reset or power-cycle. Pulse mode (period parameter) is transient.
CEC unicast messages are retried up to 2 additional times (3 total) before returning !ACK. Broadcast messages use logical address F.
Change notification requires mode=notify parameter on getstate for iTach/Flex/Global Connect. Notification persists for the life of the TCP connection. GC-100 requires web config enablement.
Provenance
source_domains:
- globalcache.com
- gcapi.docs.apiary.io
source_urls:
- https://www.globalcache.com/files/docs/api-gc-unifiedtcp.pdf
- https://gcapi.docs.apiary.io/
- https://www.globalcache.com/downloads/
retrieved_at: 2026-05-27T13:27:53.895Z
last_checked_at: 2026-06-02T21:41:46.549Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:41:46.549Z
matched_actions: 25
action_count: 25
confidence: medium
summary: "All 25 spec actions matched verbatim to source command entries; transport parameters (ports 4998, 4999) confirmed; bidirectional coverage complete. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "per-product port counts and per-product feature availability require source lookup against each model variant"
- "source documents no multi-step sequences beyond individual command examples"
- "source contains no safety warnings, interlock procedures, or power-on sequencing requirements"
- "per-product command support matrix requires cross-referencing the Product Family column in the source against each listed compatible model; this spec captures the unified command surface but cannot guarantee every command works on every model without per-model verification."
- "maximum simultaneous TCP connections per serial port (Flex/Global Connect = 8; iTach = 4 if multiport mode enabled; GC-100 = 1) is per-product and not encoded in Transport."
- "error code prefix varies by product (GC-100 uses `unknowncommand ` and `ERR_<module>:<port>,`; iTach/Flex/Global Connect use `ERR `). Error responses documented in source Section 5."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0