Summary

This spec covers the CPU Link Protocol No. 1 (P1) used to control PESA Routing Switch Controllers over a serial link. It documents the RS-232 message formats, checksum, terminator, and the standard ASCII command set (B/C/D/F/H/J/L/P/R/T/V/W/Y/Z) for change-switch, status-query, salvo, lock, protect, and all-call operations. The same protocol is also supported over RS-422 on the Bobcat, LNS-8, Ocelot, 3300, 3500, and 3500Plus controllers, with a multi-drop address extension.

Transport

protocols:
  - serial
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 2
  flow_control: rts_cts
auth:
  type: none  # inferred: no auth procedure in source

Traits

# inferred from command set: switch commands (H, T, V), status queries (J, Y, Z), lock (L), protect (P)
- routable        # inferred: H/T/V perform matrix source-to-destination switches
- queryable       # inferred: J/Y/Z/W return matrix and lock state
- powerable       # UNRESOLVED: no explicit power on/off commands in source
- levelable       # UNRESOLVED: no volume/gain/brightness commands in source

Actions

# All commands are ASCII, terminated by CR+LF (Hex 0D 0A).
# Checksum (CS) is two ASCII characters computed from all preceding bytes per the
# Checksum Computation procedure in the source.
# SLV = 2-char salvo number (01-99, A0+ for 100+)
# DST = 3-char destination number (000-999, A00-J00 for 1000-1999)
# Lx  = 3-char level x source number (000-999, A00-J00 for 1000-1999)
# S   = optional 1-char switcher qualifier present on some commands
# @   = CR LF terminator

- id: display_salvo
  label: Display Salvo
  kind: query
  command: "B{SLV}{CS}@"
  params:
    - name: SLV
      type: string
      description: Salvo group number, 2 ASCII chars (01-99, A0-A9, B0-B9, ...)
  notes: "Returns G @ followed by one S DST L1 L2 L3 L4 line per salvo entry, then CS @. Not supported on RC5000, RC5500, 2400E, Ocelot, LNS-8, Bobcat."

- id: change_salvo_entry
  label: Change Salvo Entry
  kind: action
  command: "C{SLV}S{DST}{L1}{L2}{L3}{L4}{CS}@"
  params:
    - name: SLV
      type: string
      description: Salvo group number, 2 ASCII chars
    - name: DST
      type: string
      description: Destination number, 3 ASCII chars
    - name: L1
      type: string
      description: Level 1 source number, 3 ASCII chars
    - name: L2
      type: string
      description: Level 2 source number, 3 ASCII chars
    - name: L3
      type: string
      description: Level 3 source number, 3 ASCII chars
    - name: L4
      type: string
      description: Level 4 source number, 3 ASCII chars
  notes: "Length depends on number of configured switching levels. Not supported on RC5000, RC5500, 2400E, Ocelot, LNS-8, Bobcat."

- id: delete_salvo_entry
  label: Delete Salvo Entry
  kind: action
  command: "D{SLV}S{DST}{CS}@"
  params:
    - name: SLV
      type: string
      description: Salvo group number, 2 ASCII chars
    - name: DST
      type: string
      description: Destination number, 3 ASCII chars
  notes: "Not supported on RC5000, RC5500, 2400E, Ocelot, LNS-8, Bobcat."

- id: deallocate_salvo_group
  label: De-Allocate Salvo Group
  kind: action
  command: "F{SLV}{CS}@"
  params:
    - name: SLV
      type: string
      description: Salvo group number, 2 ASCII chars
  notes: "Removes entire salvo group from controller memory. Not supported on RC5000, RC5500, 2400E, Ocelot, LNS-8, Bobcat."

- id: change_switcher
  label: Change Switcher
  kind: action
  command: "H{DST}{L1}{L2}{L3}{L4}{CS}@"
  params:
    - name: DST
      type: string
      description: Destination number, 3 ASCII chars (000-999, A00-J00 for 1000-1999)
    - name: L1
      type: string
      description: Level 1 source number, 3 ASCII chars (use 000 or out-of-range for break-away)
    - name: L2
      type: string
      description: Level 2 source number, 3 ASCII chars
    - name: L3
      type: string
      description: Level 3 source number, 3 ASCII chars
    - name: L4
      type: string
      description: Level 4 source number, 3 ASCII chars
  notes: "Length depends on number of configured switching levels; all configured levels MUST be specified. 6600E/EX <V2.20 does not support break-away. RC5000/RC5500 returns lock indication if any output in destination group is locked."

- id: display_switcher_status_no_error
  label: Display Switcher Status (No Error Info)
  kind: query
  command: "J{CS}@"
  params: []
  notes: "Returns L1 L2 L3 L4 lines, one per destination, then CS @. 3300 and 3500 reject requests where response would exceed 2KB and return N @."

- id: change_lock
  label: Change Lock
  kind: action
  command: "L{S}{DST}{CS}@"
  params:
    - name: S
      type: string
      description: Switcher qualifier letter (1 char)
    - name: DST
      type: string
      description: Destination number, 3 ASCII chars
  notes: "Toggles lock status of destination. Protect response (P @) used only by 3300 and 3500."

- id: change_protect
  label: Change Protect
  kind: action
  command: "P{S}{DST}{CS}@"
  params:
    - name: S
      type: string
      description: Switcher qualifier letter (1 char)
    - name: DST
      type: string
      description: Destination number, 3 ASCII chars
  notes: "Not supported by 6600E/EX, RC5000, PCI-5000, Ocelot, LNS-8, Bobcat, and RC5500. Protect response used only by 3300, 3500, 3500Plus."

- id: restore_from_all_call
  label: Restore System From All Call
  kind: action
  command: "R{CS}@"
  params: []
  notes: "Not supported on RC5000, RC5500, Ocelot, LNS-8, Bobcat."

- id: all_call
  label: All Call
  kind: action
  command: "T{L1}{L2}{L3}{L4}{CS}@"
  params:
    - name: L1
      type: string
      description: Level 1 source number, 3 ASCII chars
    - name: L2
      type: string
      description: Level 2 source number, 3 ASCII chars
    - name: L3
      type: string
      description: Level 3 source number, 3 ASCII chars
    - name: L4
      type: string
      description: Level 4 source number, 3 ASCII chars
  notes: "Switches all destinations to specified sources. Length depends on configured switching levels. Not supported on RC5000, RC5500, Ocelot, LNS-8, Bobcat."

- id: transmit_salvo_group
  label: Transmit Salvo Group
  kind: action
  command: "V{SLV}{CS}@"
  params:
    - name: SLV
      type: string
      description: Salvo group number, 2 ASCII chars
  notes: "Fires a previously loaded salvo. Not supported on RC5000, RC5500, 2400E, Ocelot, LNS-8, Bobcat."

- id: display_lock_status
  label: Display Lock Status
  kind: query
  command: "W{S}{CS}@"
  params:
    - name: S
      type: string
      description: Optional switcher qualifier (1 char); S is optional and may be omitted
  notes: "Returns one byte per destination: 0=unlocked, 1=locked, 2=protected, then CS @. The S portion is optional; command may be sent as W{CS}@."

- id: send_switcher_status_single
  label: Send Switcher Status (Single Destination)
  kind: query
  command: "Y{DST}{CS}@"
  params:
    - name: DST
      type: string
      description: Destination number, 3 ASCII chars
  notes: "Returns DST STAT L1 L2 L3 L4 CS @. STAT field contains readback/confidence error indicators (2 ASCII chars 0x30-0x3F per level pair). Minimum of 4 levels returned in STAT."

- id: send_switcher_status_all
  label: Send Switcher Status (Entire Matrix)
  kind: query
  command: "Z{CS}@"
  params: []
  notes: "Returns DST STAT L1 L2 L3 L4 per destination, then CS @. STAT field per level pair. 3300 and 3500 reject if response would exceed 2KB. Not supported on RC5000, RC5500, 2400E, Ocelot, LNS-8, Bobcat."

Feedbacks

# Reply responses - single-character acknowledgments returned by the controller.
# These appear as the first byte of every response (E @, G @, L @, N @, P @).
- id: transmission_error
  type: enum
  values: [error]
  notes: "ASCII 'E' response: transmission error or invalid input format."
- id: good_transmission
  type: enum
  values: [ok]
  notes: "ASCII 'G' response: command accepted and performed."
- id: locked_destination
  type: enum
  values: [locked]
  notes: "ASCII 'L' response: destination was locked by an equal or higher priority device."
- id: function_not_allowed
  type: enum
  values: [rejected]
  notes: "ASCII 'N' response: requested function not allowed, equipment malfunction, or invalid destination number / format error."
- id: protected_destination
  type: enum
  values: [protected]
  notes: "ASCII 'P' response: destination was protected by an equal or higher priority device."

# Display Lock Status payload (W command) - per-destination lock byte
- id: lock_status_per_destination
  type: enum
  values: [unlocked, locked, protected]
  notes: "Per-destination status byte in W command response: 0=unlocked, 1=locked, 2=protected."

# STAT field - readback/confidence error indicators
- id: crosspoint_error_status
  type: enum
  values: [no_error, not_defined, readback_error, confidence_error]
  notes: "Per-level status in Y and Z responses. 2-bit field per level, packed two levels per ASCII char (0x30-0x3F). 00=No Error, 01=Not Defined, 10=Readback Error, 11=Confidence Error."

Variables

# UNRESOLVED: no continuous/parameterized settable variables documented; all routing state
# is set via discrete change commands. Section retained for spec completeness.

Events

# UNRESOLVED: source does not document unsolicited asynchronous notifications from the
# controller. All data transfers are master/slave in response to commands.

Macros

# UNRESOLVED: no explicit multi-step command sequences documented in source.
# Salvo groups (V command) provide a controller-side grouping mechanism but their
# contents are user-defined, not documented here.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source does not document any safety warnings, interlock procedures, or
# power-on sequencing requirements specific to the CPU link. The DSR input on 3300/3500/
# 3500Plus must be asserted to keep the CPU link port active; removal resets the port
# mechanism, but this is operational rather than a safety interlock.

Notes

Message format. All CPU link messages are 7-bit ASCII with the MSB set to 0. Format: Command [<Data>] Checksum Terminator. Terminator is CR+LF (Hex 0D 0A). The 6600E/EX V2.30+ allows dropping CR; 3300 V3.0+ and 3500/3500Plus allow CR-only, LF-only, or CR+LF.

Checksum. Two ASCII characters computed from the sum of decimal ASCII codes of all preceding bytes: mask to 8 bits, split into upper/lower nibbles, add 48 (ASCII '0') to each nibble. Example: H 0 0 1 0 0 5 sums to 366; 366 mod 256 = 110; 110 / 16 = 6 remainder 14; checksum = 6> (ASCII 54, 62). 3300 V3.0+ and all 3500/3500Plus releases also accept a standard hexadecimal checksum or checksum omission.

Source/destination numbering. Numbers 0-999 use three ASCII decimal digits. Numbers 1000-1999 use A00-J00 mapped to 1000-1999 (one letter for the 1000s digit, two digits for the remainder). The value 0 is a NULL identifier (no action); only 6600E/EX allows 0 as a silent source.

Salvo numbering. Numbers 1-99 use two ASCII decimal digits 01-99. Salvos 100+ use A0-A9, B0-B9, C0-C9, etc., as needed.

Status field (STAT). Returned by Y and Z commands. Two ASCII characters in the range 0x30-0x3F per level pair. Lower 4 bits of each char encode 2 levels (2 bits each: 00=No Error, 01=Not Defined, 10=Readback Error, 11=Confidence Error). Minimum of 4 levels returned. 2400E does not support Readback errors; Bobcat/LNS-8/Ocelot do not support Readback or Confidence errors.

Switch timing. After a change-switcher (H) command, the actual switch may not occur until the next vertical interval of the video signal. 6600E/RC5000/RC5500/PCI5000: wait at least 32 ms before requesting status. Other controllers send back desired status; readback errors are reported in the status response.

Flow control. RS-232: RTS/CTS handshake. Computer controls CTS to gate controller-to-computer data; controller drives RTS to gate computer-to-controller data. Must be able to receive at least 3 characters after CTS goes low; CTS must not float. 3300/3500/3500Plus also require DSR asserted (active) — removing DSR resets the CPU link port. Bobcat/LNS-8/Ocelot do not implement flow control; host must accept uncontrolled output. RS-422 multi-drop disables flow control entirely.

RS-422 multi-drop (Bobcat, LNS-8, Ocelot). Message format extends to ControllerID Command [<Data>] Checksum, Terminator where ControllerID is a decimal ASCII address. Only the addressed controller acts on a command and only it responds. RS-422 transmitter is tri-stated between transmissions; host must bias the bus. Multi-drop controllers do not respond to communications errors (no E @ response on error).

Status response limits. J and Z commands: 3300 and 3500 controllers reject requests when the response would exceed 2 KB and return N @.

Provenance

source_domains:
  - broadcastrepo.com
source_urls:
  - "https://www.broadcastrepo.com/Manuals/Pesa/Control%20Systems/PESA%20CPULink%20Protocol%20No.%201%20(P1),%20Rev%20C.pdf"
retrieved_at: 2026-04-30T04:33:18.676Z
last_checked_at: 2026-06-02T17:23:44.336Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T17:23:44.336Z
matched_actions: 14
action_count: 14
confidence: medium
summary: "All 14 spec actions matched literally to source commands B-Z; transport parameters (9600 baud, 8 data bits, no parity, 2 stop bits, RTS/CTS) verified. (11 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "pin-out of the CPU port is controller-specific and not documented here"
- "protocol extensions (P1E) for 3300/3500/3500Plus reserved commands are out of scope for this document"
- "no explicit power on/off commands in source"
- "no volume/gain/brightness commands in source"
- "no continuous/parameterized settable variables documented; all routing state"
- "source does not document unsolicited asynchronous notifications from the"
- "no explicit multi-step command sequences documented in source."
- "source does not document any safety warnings, interlock procedures, or"
- "P1E (Protocol 1 with Extensions) reserved commands for 3300/3500/3500Plus are listed in the source as \"reserved\" and are beyond the scope of this document."
- "Specific CPU port pin-out varies by controller; see equipment manual."
- "Salvo data returned by B (Display Salvo) uses the same S DST L1 L2 L3 L4 line format; documented above as part of the change_salvo_entry action."

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