Summary

The Extron CTR 8 is an Eight Input Contact Closure to RS-232 Converter that generates Extron Simple Instruction Set (SIS) commands. It is controlled via SIS commands over an RS-232 serial link (the Remote port) and can in turn drive a downstream Extron switcher over its COM port. The device supports a Default operating mode (single input selection) and an Advanced mode (independent contact/tally control, multi-input selection, and host monitoring of unsolicited status messages).

Transport

# The host controls the CTR 8 through the Remote RS-232 port (fixed 9600 8N1).
# A second port (COM) is used by the CTR 8 to drive a downstream Extron switcher
# and has a configurable baud rate (9600/19200/38400/57600, 8N1) - see Notes.
protocols:
  - serial
serial:
  baud_rate: 9600          # Remote RS-232 port (fixed per source)
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none       # UNRESOLVED: flow control not stated in source
auth:
  type: none  # inferred: no auth procedure in source

Traits

traits:
  - routable     # inferred: input selection commands (1!..8!) route contact/tally
  - queryable    # inferred: multiple query commands (mode, contact, tally, firmware)

Actions

# ---------------------------------------------------------------------------
# Symbol legend (verbatim from source "Symbols Used in this Guide"):
#   E   = Escape key  (0x1B)
#   ]   = carriage return + line feed (CR/LF, 0x0D 0x0A)
#   }   = carriage return, no line feed (0x0D)
#   •   = Space (0x20)
#   X)  = input number 0-8 (Default mode); 1-8 only in Advanced mode
#   X!  = operating mode: 0 = Default, 1 = Advanced
#   X@  = selection / contact / tally state: 0 = off/not-selected, 1 = on/selected
#   X#  = A/V mute mode: 0 = none (default), 1 = ch0 mute, 2 = video+audio mute, 3 = video+sync mute
#   X$  = mute LED mode: 0 = always on (default), 1 = off when muted, 2 = blink when muted
#   X2% = baud rate: 9600, 19200, 38400, 57600 (default 9600)
# Commands are NOT case-sensitive unless noted (S/s, I/i, N/n, Q/q accepted).
# ---------------------------------------------------------------------------

# --- Operating mode ---
- id: set_operating_mode
  label: Set Operating Mode
  kind: action
  command: "E{mode}"
  params:
    - name: mode
      type: integer
      description: "0 = Default mode, 1 = Advanced mode (source symbol X!)"
  notes: "E = Escape (0x1B). Response: 'Mode {mode}]'."

- id: query_operating_mode
  label: Query Operating Mode
  kind: query
  command: "E MODE }"
  params: []
  notes: "Response: '{mode}]'. E = Escape (0x1B)."

# --- Default mode: input selection ---
- id: select_input
  label: Select Input
  kind: action
  command: "{input}!"
  params:
    - name: input
      type: integer
      description: "Input number 0-8 (source symbol X)). 0 deselects."
  notes: "Response: 'Chn •{input}]'. Default mode only."

- id: view_last_selected_input
  label: View Last Selected Input
  kind: query
  command: "!"
  params: []
  notes: "Response: '{input}]'."

- id: query_contact_status_default
  label: Query Contact Closure Status (Default Mode)
  kind: query
  command: "S"
  params: []
  notes: "'s' also accepted. Response: eight X@ digits (least-significant input on far left), e.g. '01000000]' = input 2 selected."

# --- Unidirectional serial data port (COM port configuration) ---
- id: configure_com_port
  label: Configure COM Port Parameters
  kind: action
  command: "E 2*{baud},n,8,1CP }"
  params:
    - name: baud
      type: integer
      description: "Baud rate for the COM (switcher) port - 9600, 19200, 38400, or 57600 (source symbol X2%). Parity n=none, 8 data bits, 1 stop bit."
  notes: "Example from source: 'E 2* 19200,n,8,1CP }'. Response: 'Cpn2 • Ccp {baud},N,8,1 ]'."

- id: view_com_port_parameters
  label: View COM Port Parameters
  kind: query
  command: "E 2CP }"
  params: []
  notes: "Response: '{baud},N,8,1 ]'."

# --- Advanced mode: contact ports ---
- id: query_individual_contact_port
  label: Query Individual Contact Port
  kind: query
  command: "{input}S"
  params:
    - name: input
      type: integer
      description: "Port 1-8 (Advanced mode only)."
  notes: "Response: '{state}]' (X@)."

- id: query_all_contact_ports
  label: Query All Contact Ports
  kind: query
  command: "S"
  params: []
  notes: "'s' also accepted. Response: eight X@ digits.]"

# --- Advanced mode: tally ports ---
- id: set_individual_tally_port
  label: Set Individual Tally Port
  kind: action
  command: "E{input}*{state}TALY }"
  params:
    - name: input
      type: integer
      description: "Tally port 1-8 (Advanced mode)."
    - name: state
      type: integer
      description: "0 = off, 1 = on (source symbol X@)."
  notes: "Response: 'Taly {input}*{state}]'."

- id: query_individual_tally_port
  label: Query Individual Tally Port
  kind: query
  command: "E{input}TALY }"
  params:
    - name: input
      type: integer
      description: "Tally port 1-8 (Advanced mode)."
  notes: "Response: '{state}]' (X@)."

- id: set_all_tally_ports
  label: Set All Tally Ports
  kind: action
  command: "E{states8}TALY }"
  params:
    - name: states8
      type: string
      description: "Eight X@ digits (0/1), one per tally port 1-8."
  notes: "Response: 'Taly {states8}]'. UNRESOLVED: source row for 'set all tally ports' is partially garbled ('EX@X@X@X@X@X@X@X@ Taly ...'); exact command shape inferred from the query-all counterpart."

- id: query_all_tally_ports
  label: Query All Tally Ports
  kind: query
  command: "E TALY }"
  params: []
  notes: "Response: eight X@ digits.]"

# --- A/V mute mode (both modes) ---
- id: configure_av_mute_mode
  label: Configure A/V Mute Mode
  kind: action
  command: "E{mute_mode}*{led_mode}MUTM }"
  params:
    - name: mute_mode
      type: integer
      description: "X#: 0 = normal/no mute (default), 1 = channel 0 mute, 2 = video mute + audio mute, 3 = video + sync mute."
    - name: led_mode
      type: integer
      description: "X$: 0 = LED always on (default), 1 = off when muted, 2 = blink when muted. LED mode settable only when mute mode is 1, 2, or 3."
  notes: "Response: 'Mutm {mute_mode}*{led_mode}]'."

- id: view_av_mute_mode
  label: View A/V Mute Mode Setting
  kind: query
  command: "E MUTM }"
  params: []
  notes: "Response: '{mute_mode}*{led_mode}]'."

# --- Other / system ---
- id: information_request
  label: Information Request
  kind: query
  command: "I"
  params: []
  notes: "'i' also accepted. Response: 'CTR • 8 ]'."

- id: request_part_number
  label: Request Part Number
  kind: query
  command: "N"
  params: []
  notes: "'n' also accepted. Response: '60-xxxx-xx ]' (observed value 60-1408-01 in power-on banner)."

- id: query_firmware_version
  label: Query Firmware Version
  kind: query
  command: "Q"
  params: []
  notes: "'q' also accepted. Response: '{x.xx} ]' (two decimal places)."

- id: query_full_firmware_version
  label: Query Full Firmware Version
  kind: query
  command: "*Q"
  params: []
  notes: "'*q' also accepted. Response: '{x.xx.xxxx} ]'."

- id: factory_reset
  label: Reset All Device Settings to Factory
  kind: action
  command: "E zXXX }"
  params: []
  notes: "Response: 'Zpx ]'. 'XXX' is a literal confirmation string typed by the operator. E = Escape (0x1B)."

Feedbacks

- id: contact_state
  type: string
  description: "Eight-digit contact status string (X@ per input, LSB = input 1 on far left)."

- id: tally_state
  type: string
  description: "Eight-digit tally status string (X@ per port)."

- id: operating_mode
  type: enum
  values: [default, advanced]

- id: av_mute_mode
  type: enum
  values: [none, channel0_mute, video_audio_mute, video_sync_mute]

- id: com_port_parameters
  type: string
  description: "'{baud},N,8,1' (e.g. '9600,N,8,1')."

- id: error_code
  type: enum
  values: ["E10", "E13", "E14"]
  description: "E10 = invalid command; E13 = invalid value (too large); E14 = invalid for current configuration/mode."

Variables

- id: operating_mode_var
  description: "Default (0) vs Advanced (1) mode - determines available command set."
- id: av_mute_mode_var
  description: "Mute mode 0-3 (X#)."
- id: mute_led_mode_var
  description: "LED mode 0-2 (X$); settable only when mute mode != 0."
- id: com_baud_rate_var
  description: "COM port baud rate (9600/19200/38400/57600). Remote port is fixed at 9600."

Events

# Unsolicited messages the CTR 8 sends to the host (no host response required).
- id: power_on_banner
  description: >
    Sent when the CTR 8 is first switched on:
    '(c) Copyright 20{yy}, Extron Electronics, CTR 8, V{x.xx}, 60-1408-01 ]'
    where {yy} = firmware release year and {x.xx} = firmware version.
  payload_example: "(c) Copyright 20{yy}, Extron Electronics, CTR 8, V{x.xx}, 60-1408-01 ]"

- id: contact_port_status_change
  description: >
    In Advanced mode, sent on a physical contact open/close from ports 1-8.
    Format: '{X#}•{X@}]' (mute mode, space, contact state). Source labels this row 'Sts'.
  payload_example: "{X#}•{X@}]"

# UNRESOLVED: exact trigger conditions and full payload set for contact_port_status_change
# are only partially described in the source excerpt.

Macros

# UNRESOLVED: no multi-step sequences explicitly described in source.

Safety

confirmation_required_for:
  - factory_reset   # operator must type literal 'XXX' confirmation string
interlocks: []
notes: >
  Source gives general rear-panel cabling cautions only (do not connect
  "Show Me" cables to the +V tally voltage pin; ground pin optional for Show Me
  cables). No power-sequencing or interlock procedure is described.
# UNRESOLVED: no explicit safety/interlock procedures stated beyond cabling notes.

Notes

  • Two serial ports. The Remote RS-232 port is the host control interface (fixed 9600, 8N1). The COM port is an output the CTR 8 uses to drive a downstream Extron switcher; its baud rate is configurable (9600/19200/38400/57600, 8N1) via the configure_com_port action. This spec's serial block describes the Remote control port.
  • Operating modes. Default mode ties all contact/tally pins together (selecting one input deselects the rest). Advanced mode decouples them, enabling multi-input selection, independent tally control, and host monitoring of unsolicited status messages — intended for use with a control processor such as an Extron IP Link attached to the Remote port.
  • A/V muting. Triggered only by contact closure (press selected input again to mute, once more to unmute). SIS input selection (e.g. 1! twice) does not trigger the de-select/mute state. Three mute modes (1/2/3) emit different downstream SIS strings on the COM port (see source A/V mute command table: 0!, 0B/1B/2B, 0Z/1Z).
  • LED modes. LED of the selected input is always on (mode 0, default), off when muted (1), or blinking when muted (2). LED mode is settable only when A/V mute mode is 1, 2, or 3.
  • Case sensitivity. Commands are not case-sensitive unless noted; S/s, I/i, N/n, Q/q are all accepted.
  • Part number observed in the power-on banner: 60-1408-01.
  • Symbol legend for command strings is documented at the top of the Actions block (E=Escape 0x1B, ]=CR/LF, }=CR, =Space).

Spec output above. Faithful to refined excerpt; `set_all_tally_ports` + `contact_port_status_change` flagged UNRESOLVED (source rows garbled). Confidence `low` — verify against primary manual pre-promote.

## Provenance

```yaml
source_domains:
  - extron.com
  - manualshelf.com
  - support.displaymanager.net
  - github.com
source_urls:
  - https://www.extron.com/download/files/userman/68-2524-01_B.pdf
  - https://www.manualshelf.com/manual/extron-electronics/ctr-8/setup-guide-user-guide-english.html
  - https://support.displaymanager.net/hc/en-gb/articles/22750870424733-Troubleshooting-Guide-for-Extron-Control-Systems
  - https://github.com/mefranklin6/Extron-Frontend-API
  - https://www.extron.com/download/files/userman/68-2524-50_A.pdf
retrieved_at: 2026-06-15T20:44:01.634Z
last_checked_at: 2026-06-16T07:02:13.148Z
```

## Verification Summary

```yaml
verdict: verified
checked_at: 2026-06-16T07:02:13.148Z
matched_actions: 20
action_count: 20
confidence: medium
summary: "All 20 spec actions matched literally to source command table; transport parameters verified; one-to-one coverage. (7 unresolved item(s) noted in Known Gaps.)"
```

## Known Gaps

```yaml
- "full firmware version range not stated; part number 60-1408-01 observed only in the power-on banner example. Official user manual PDF URL could not be recovered (see recovery notes); this draft was generated from a refined text excerpt, so some table rows may be misaligned."
- "flow control not stated in source"
- "source row for 'set all tally ports' is partially garbled ('EX@X@X@X@X@X@X@X@ Taly ...'); exact command shape inferred from the query-all counterpart.\""
- "exact trigger conditions and full payload set for contact_port_status_change"
- "no multi-step sequences explicitly described in source."
- "no explicit safety/interlock procedures stated beyond cabling notes."
- "official user-manual PDF URL not recovered; several attempts timed out (see recovery notes). This draft relies on a refined text excerpt whose command/response table rows are partially garbled, so the exact payload shape of `set_all_tally_ports` and the `contact_port_status_change` event should be verified against the primary manual before promotion past `draft`."
```

---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0