Summary

8x8 matrix switcher controlled via RS-232, RS-485, or Ethernet. Default protocol is Kramer Protocol 3000 (ASCII, 115200 baud serial, TCP port 5000, UDP port 50000). Protocol 2000 (hex, 9600 baud) also supported, switchable via #P2000<CR>. This spec covers Protocol 3000 and Protocol 2000 commands.

Transport

protocols:
  - serial
  - tcp
  - udp
serial:
  rs232:
    baud_rate_p3000: 115200
    baud_rate_p2000: 9600
    data_bits: 8
    parity: none
    stop_bits: 1
    flow_control: null  # UNRESOLVED: flow control not stated in source
  rs485:
    description: "RS-485 port (A+, B-, G) on rear panel. Machine number 1-16 set via DIP-switches 1-3 (default=1). DIP-switch 4 = bus termination (default off)."
addressing:
  port: 5000
  udp_port: 50000
auth:
  type: null  # UNRESOLVED: ERR004 mentions "login" but no login procedure documented in source

Traits

traits:
  - routable    # inferred: AV/VID/AUD switching commands present
  - queryable   # inferred: VID?, AUD?, SIGNAL?, INFO-IO?, etc. query commands present
  - levelable   # inferred: AUD-LVL audio gain control present
  - powerable   # inferred: RESET (restart) command present

Actions

actions:
  # ===== Protocol 3000 (ASCII, default) =====
  - id: protocol_handshake
    label: Protocol Handshaking
    kind: query
    command: "#"
    params: []
    response: "~OK"

  - id: switch_av
    label: Switch Audio & Video
    kind: action
    command: "AV {in}>{out}"
    params:
      - name: in
        type: integer
        description: "Input number (1-8, 0 to disconnect)"
      - name: out
        type: integer
        description: "Output number (1-8, 0 for all outputs)"
    notes: "Multiple routing pairs comma-separated. Short form none."

  - id: switch_video
    label: Switch Video Only
    kind: action
    command: "VID {in}>{out}"
    params:
      - name: in
        type: integer
        description: "Input number (1-8, 0 to disconnect)"
      - name: out
        type: integer
        description: "Output number (1-8, 0 for all outputs)"
    notes: "Short form: V. In AFV mode also switches audio."

  - id: switch_audio
    label: Switch Audio Only
    kind: action
    command: "AUD {in}>{out}"
    params:
      - name: in
        type: integer
        description: "Input number (1-8, 0 to disconnect)"
      - name: out
        type: integer
        description: "Output number (1-8, 0 for all outputs)"
    notes: "Short form: A. In AFV mode also switches video."

  - id: read_video_connection
    label: Read Video Connection
    kind: query
    command: "VID? {out}"
    params:
      - name: out
        type: integer
        description: "Output number (1-8, or * for all outputs)"
    response: "VID IN>OUT"
    notes: "Short form: V?"

  - id: read_audio_connection
    label: Read Audio Connection
    kind: query
    command: "AUD? {out}"
    params:
      - name: out
        type: integer
        description: "Output number (1-8, or * for all outputs)"
    response: "AUD IN>OUT"
    notes: "Short form: A?"

  - id: set_signal_status
    label: Set Signal Status
    kind: action
    command: "SIGNAL {input},{status}"
    params:
      - name: input
        type: integer
        description: "Input number (1-8, or * for all)"
      - name: status
        type: string
        description: "Signal state: 0/off for no signal, 1/on for signal present"

  - id: get_signal_status
    label: Get Signal Status
    kind: query
    command: "SIGNAL? {input}"
    params:
      - name: input
        type: integer
        description: "Input number (1-8, or * for all)"
    response: "SIGNAL INPUT,STATUS"

  - id: store_preset
    label: Store Preset
    kind: action
    command: "PRST-STO {preset}"
    params:
      - name: preset
        type: integer
        description: Preset number
    notes: "Short form: PSTO"

  - id: recall_preset
    label: Recall Preset
    kind: action
    command: "PRST-RCL {preset}"
    params:
      - name: preset
        type: integer
        description: Preset number
    notes: "Short form: PRCL"

  - id: delete_preset
    label: Delete Preset
    kind: action
    command: "PRST-DEL {preset}"
    params:
      - name: preset
        type: integer
        description: Preset number
    notes: "Short form: PDEL"

  - id: read_preset_video
    label: Read Video Connections from Preset
    kind: query
    command: "PRST-VID? {preset},{out}"
    params:
      - name: preset
        type: integer
        description: Preset number
      - name: out
        type: integer
        description: "Output number (or * for all)"
    response: "PRST-VID PRESET,IN>OUT"
    notes: "Short form: PVID?"

  - id: read_preset_audio
    label: Read Audio Connections from Preset
    kind: query
    command: "PRST-AUD? {preset},{out}"
    params:
      - name: preset
        type: integer
        description: Preset number
      - name: out
        type: integer
        description: "Output number (or * for all)"
    response: "PRST-AUD PRESET,IN>OUT"
    notes: "Short form: PAUD?"

  - id: read_presets_list
    label: Read Saved Presets List
    kind: query
    command: "PRST-LST?"
    params: []
    response: "PRST-LST PRESET,PRESET,..."
    notes: "Short form: PLST?"

  - id: lock_front_panel
    label: Lock Front Panel
    kind: action
    command: "LOCK-FP {lock_mode}"
    params:
      - name: lock_mode
        type: string
        description: "0 or off to unlock, 1 or on to lock"
    notes: "Short form: LCK"

  - id: get_front_panel_lock
    label: Get Front Panel Lock State
    kind: query
    command: "LOCK-FP?"
    params: []
    response: "LOCK-FP LOCK-MODE"

  - id: restart_device
    label: Restart Device
    kind: action
    command: "RESET"
    params: []
    response: "RESET OK"

  - id: switch_protocol_2000
    label: Switch to Protocol 2000
    kind: action
    command: "P2000"
    params: []
    response: "P2000 OK"
    notes: "Switches from Protocol 3000 (ASCII, 115200 baud) to Protocol 2000 (hex, 9600 baud)."

  - id: set_audio_level
    label: Set Audio Level
    kind: action
    command: "AUD-LVL {stage},{channel},{volume}"
    params:
      - name: stage
        type: string
        description: "In, Out, or numeric (0=Input level, 1=Pre-Amp, 2=Amp/Out)"
      - name: channel
        type: integer
        description: "Input or output number (1-8)"
      - name: volume
        type: integer
        description: "Level in dB. Input range -63 to +7. Output range -30 to +20. Precede with minus for negative. ++ increase, -- decrease."
    notes: "Short form: ADL"

  - id: read_audio_level
    label: Read Audio Volume Level
    kind: query
    command: "AUD-LVL? {stage},{channel}"
    params:
      - name: stage
        type: string
        description: "In, Out, or numeric stage value"
      - name: channel
        type: integer
        description: "Input or output number"
    response: "AUD-LVL STAGE,CHANNEL,VOLUME"
    notes: "Short form: ADL?"

  - id: mute_audio
    label: Mute Audio
    kind: action
    command: "MUTE {mute_mode}"
    params:
      - name: mute_mode
        type: integer
        description: "1 to mute, 0 to unmute"
    response: "MUTE MUTE-MODE RESULT"

  - id: read_io_count
    label: Read I/O Count
    kind: query
    command: "INFO-IO?"
    params: []
    response: "INFO-IO: IN INPUTS_COUNT,OUT OUTPUTS_COUNT"

  - id: read_max_presets
    label: Read Max Presets Count
    kind: query
    command: "INFO-PRST?"
    params: []
    response: "INFO-PRST: VID PRESET_VIDEO_COUNT PRESET_AUDIO_COUNT"

  - id: factory_reset
    label: Factory Reset
    kind: action
    command: "FACTORY"
    params: []
    response: "FACTORY RESULT"

  - id: read_model
    label: Read Device Model
    kind: query
    command: "MODEL?"
    params: []
    response: "MODEL MACHINE_MODEL"

  - id: read_serial_number
    label: Read Serial Number
    kind: query
    command: "SN?"
    params: []
    response: "SN SERIAL_NUMBER"

  - id: read_firmware_version
    label: Read Firmware Version
    kind: query
    command: "VERSION?"
    params: []
    response: "VERSION MAJOR.MINOR.BUILD.REVISION"

  - id: set_machine_name
    label: Set Machine Name
    kind: action
    command: "NAME {machine_name}"
    params:
      - name: machine_name
        type: string
        description: "Up to 14 alphanumeric characters"
    response: "NAME MACHINE_NAME RESULT"

  - id: read_machine_name
    label: Read Machine Name
    kind: query
    command: "NAME?"
    params: []
    response: "NAME MACHINE_NAME"

  - id: reset_machine_name
    label: Reset Machine Name to Factory Default
    kind: action
    command: "NAME-RST"
    params: []
    response: "NAME-RST MACHINE_FACTORY_NAME RESULT"
    notes: "Factory name = model name + last 4 digits of serial number."

  - id: set_machine_id
    label: Set Machine ID Number
    kind: action
    command: "MACH-NUM {machine_number}"
    params:
      - name: machine_number
        type: integer
        description: "Machine number (1-16 for RS-485 daisy chain)"
    response: "MACH-NUM OLD_NUMBER,NEW_NUMBER RESULT"
    notes: "Response header uses NEW machine number. For RS-485 multi-unit setups."

  - id: set_ip_address
    label: Set IP Address
    kind: action
    command: "NET-IP {ip_address}"
    params:
      - name: ip_address
        type: string
        description: IP address
    notes: "Short form: NTIP"

  - id: read_ip_address
    label: Read IP Address
    kind: query
    command: "NET-IP?"
    params: []
    response: "NET-IP IP_ADDRESS"
    notes: "Short form: NTIP?"

  - id: read_mac_address
    label: Read MAC Address
    kind: query
    command: "NET-MAC?"
    params: []
    response: "NET-MAC MAC_ADDRESS"
    notes: "Short form: NTMC"

  - id: set_subnet_mask
    label: Set Subnet Mask
    kind: action
    command: "NET-MASK {subnet_mask}"
    params:
      - name: subnet_mask
        type: string
        description: Subnet mask
    notes: "Short form: NTMSK"

  - id: read_subnet_mask
    label: Read Subnet Mask
    kind: query
    command: "NET-MASK?"
    params: []
    response: "NET-MASK SUBNET_MASK"
    notes: "Short form: NTMSK?"

  - id: set_gateway
    label: Set Gateway Address
    kind: action
    command: "NET-GATE {gateway}"
    params:
      - name: gateway
        type: string
        description: Gateway IP address
    notes: "Short form: NTGT"

  - id: read_gateway
    label: Read Gateway Address
    kind: query
    command: "NET-GATE?"
    params: []
    response: "NET-GATE GATEWAY_ADDRESS"
    notes: "Short form: NTGT?"

  - id: set_dhcp_mode
    label: Set DHCP Mode
    kind: action
    command: "NET-DHCP {dhcp_mode}"
    params:
      - name: dhcp_mode
        type: integer
        description: DHCP mode value
    notes: "Short form: NTDH"

  - id: read_dhcp_mode
    label: Read DHCP Mode
    kind: query
    command: "NET-DHCP?"
    params: []
    response: "NET-DHCP DHCP_MODE"
    notes: "Short form: NTDH?"

  - id: set_eth_port
    label: Set Ethernet Protocol Port
    kind: action
    command: "ETH-PORT {protocol}"
    params:
      - name: protocol
        type: integer
        description: "Protocol value"  # UNRESOLVED: valid protocol values not explicitly listed in source
    response: "ETH-PORT PROTOCOL PORT RESULT"
    notes: "Short form: ETHP"

  - id: read_eth_port
    label: Read Ethernet Protocol Port
    kind: query
    command: "ETH-PORT?"
    params: []
    response: "ETH-PORT PROTOCOL PORT"
    notes: "Short form: ETHP?"

  - id: set_afv_mode
    label: Set Audio Follow Video Mode
    kind: action
    command: "AFV {afv_mode}"
    params:
      - name: afv_mode
        type: string
        description: "AFV mode value"  # UNRESOLVED: valid AFV-MODE values not explicitly enumerated in source
    response: "AFV AFV-MODE RESULT"
    notes: "Affects front-panel mode and AUD/VID command behavior."

  - id: read_afv_mode
    label: Read Audio Follow Video Mode
    kind: query
    command: "AFV?"
    params: []
    response: "AFV AFV-MODE"

  # ===== Protocol 2000 (hex, 9600 baud) =====
  # Frame format: 4 bytes [DEST|INSTR bits 0:6] [1|INPUT 0:6] [1|OUTPUT 0:6] [1|OVR|X|MACHINE 0:4]
  # Machine #1 single-unit: 4th byte = 0x81. OVR (broadcast): set bit 6.

  - id: p2000_switch_video
    label: "P2000: Switch Video"
    kind: action
    command: "01 8{in_hex} 8{out_hex} 81"
    params:
      - name: in_hex
        type: string
        description: "Input byte = 0x80 + input number (1-8). E.g. IN 1 = 0x81."
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number (1-8). E.g. OUT 1 = 0x81. 0x80 = all outputs."
    notes: "Source Table 11. Example IN 1 to OUT 1: 01 81 81 81."

  - id: p2000_switch_audio
    label: "P2000: Switch Audio"
    kind: action
    command: "02 8{in_hex} 8{out_hex} 81"
    params:
      - name: in_hex
        type: string
        description: "Input byte = 0x80 + input number (1-8). E.g. IN 1 = 0x81."
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number (1-8). E.g. OUT 1 = 0x81. 0x80 = all outputs."
    notes: "Source Table 11. Example IN 1 to OUT 1: 02 81 81 81."

  - id: p2000_reset_video
    label: "P2000: Reset Video"
    kind: action
    command: "00 80 80 81"
    params: []
    notes: "Source Table 18 instruction code 0. Resets video to power-down settings."

  - id: p2000_audio_input_gain_increase
    label: "P2000: Increase Audio Input Gain"
    kind: action
    command: "18 8{in_hex} 86 81"
    params:
      - name: in_hex
        type: string
        description: "Input byte = 0x80 + input number (1-8). E.g. IN 1 = 0x81."
    notes: "Source Table 12. Example IN 1: 18 81 86 81."

  - id: p2000_audio_input_gain_decrease
    label: "P2000: Decrease Audio Input Gain"
    kind: action
    command: "18 8{in_hex} 87 81"
    params:
      - name: in_hex
        type: string
        description: "Input byte = 0x80 + input number (1-8). E.g. IN 1 = 0x81."
    notes: "Source Table 12. Example IN 1: 18 81 87 81."

  - id: p2000_audio_input_gain_set
    label: "P2000: Set Audio Input Gain"
    kind: action
    command: "2A 86 80 81 | 16 8{in_hex} 8{gain_hex} 81"
    params:
      - name: in_hex
        type: string
        description: "Input byte = 0x80 + input number (1-8). E.g. IN 1 = 0x81."
      - name: gain_hex
        type: string
        description: "Gain byte = 0x80 + gain value 0x00-0x46. 0x00 = -63dB (mute), 0x46 = +7dB (max)."
    notes: "Source Table 13. Preamble 2A 86 80 81 must be sent first, then the set command. Example IN 1 at 0dB: 2A 86 80 81 then 16 81 BF 81."

  - id: p2000_audio_output_gain_increase
    label: "P2000: Increase Audio Output Gain"
    kind: action
    command: "18 8{out_hex} 80 81"
    params:
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number (1-8). E.g. OUT 1 = 0x81."
    notes: "Source Table 14. Example OUT 1: 18 81 80 81."

  - id: p2000_audio_output_gain_decrease
    label: "P2000: Decrease Audio Output Gain"
    kind: action
    command: "18 8{out_hex} 81 81"
    params:
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number (1-8). E.g. OUT 1 = 0x81."
    notes: "Source Table 14. Example OUT 1: 18 81 81 81."

  - id: p2000_audio_output_gain_set
    label: "P2000: Set Audio Output Gain"
    kind: action
    command: "2A 87 80 81 | 16 8{out_hex} 8{gain_hex} 81"
    params:
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number (1-8). E.g. OUT 1 = 0x81."
      - name: gain_hex
        type: string
        description: "Gain byte = 0x80 + gain value 0x00-0x32. 0x00 = -30dB, 0x32 = +20dB."
    notes: "Source Table 15. Preamble 2A 87 80 81 must be sent first, then the set command. Example OUT 1 at 0dB: 2A 87 80 81 then 16 81 9E 81."

  - id: p2000_breakaway_setting
    label: "P2000: Set Breakaway Setting"
    kind: action
    command: "08 80 8{mode_hex} 81"
    params:
      - name: mode_hex
        type: string
        description: "Mode byte: 0x80 = audio-follow-video, 0x81 = audio breakaway."
    notes: "Source Table 18 instruction code 8."

  - id: p2000_request_breakaway
    label: "P2000: Request Breakaway Setting"
    kind: query
    command: "0B 80 80 81"
    params: []
    response: "4B 80 8{mode_hex} 81"
    notes: "Source Table 18 instruction code 11. Reply mode byte: 0x80 = AFV, 0x81 = breakaway."

  - id: p2000_lock_front_panel
    label: "P2000: Lock Front Panel"
    kind: action
    command: "1E 8{mode_hex} 80 81"
    params:
      - name: mode_hex
        type: string
        description: "Lock byte: 0x80 = unlocked, 0x81 = locked."
    notes: "Source Table 18 instruction code 30."

  - id: p2000_request_panel_lock
    label: "P2000: Request Panel Lock State"
    kind: query
    command: "1F 80 80 81"
    params: []
    response: "4F 80 8{mode_hex} 81"
    notes: "Source Table 18 instruction code 31. Reply mode byte: 0x80 = unlocked, 0x81 = locked."

  - id: p2000_request_video_output_status
    label: "P2000: Request Video Output Status"
    kind: query
    command: "05 8{setup_hex} 8{out_hex} 81"
    params:
      - name: setup_hex
        type: string
        description: "SETUP # byte = 0x80 + setup number (0 = current, 1+ = stored preset)."
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number whose status is required."
    notes: "Source Table 18 instruction code 5."

  - id: p2000_request_audio_output_status
    label: "P2000: Request Audio Output Status"
    kind: query
    command: "06 8{setup_hex} 8{out_hex} 81"
    params:
      - name: setup_hex
        type: string
        description: "SETUP # byte = 0x80 + setup number (0 = current, 1+ = stored preset)."
      - name: out_hex
        type: string
        description: "Output byte = 0x80 + output number whose status is required."
    notes: "Source Table 18 instruction code 6."

  - id: p2000_store_video_status
    label: "P2000: Store Video Status to Setup"
    kind: action
    command: "03 8{setup_hex} 8{mode_hex} 81"
    params:
      - name: setup_hex
        type: string
        description: "SETUP # byte = 0x80 + setup number (1+ for store)."
      - name: mode_hex
        type: string
        description: "Mode byte: 0x80 = store, 0x81 = delete."
    notes: "Source Table 18 instruction code 3."

  - id: p2000_recall_video_status
    label: "P2000: Recall Video Status from Setup"
    kind: action
    command: "04 8{setup_hex} 80 81"
    params:
      - name: setup_hex
        type: string
        description: "SETUP # byte = 0x80 + setup number (1+ for recall)."
    notes: "Source Table 18 instruction code 4."

  - id: p2000_change_to_ascii
    label: "P2000: Switch to Protocol 3000 (ASCII)"
    kind: action
    command: "38 80 83 81"
    params: []
    notes: "Source Table 18 instruction code 56. Inverse of P3000 '#P2000' command. Machine will respond to ASCII command set."

  - id: p2000_identify_machine
    label: "P2000: Identify Machine"
    kind: query
    command: "3D 8{info_type_hex} 8{output_type_hex} 81"
    params:
      - name: info_type_hex
        type: string
        description: "INPUT byte: 0x81 = video machine name, 0x82 = audio machine name, 0x83 = video software version, 0x84 = audio software version."
      - name: output_type_hex
        type: string
        description: "OUTPUT byte: 0x80 = first 4 digits, 0x81-0x83 = suffix 1-3, 0x8A-0x8C = prefix 1-3."
    notes: "Source Table 18 instruction code 61."

  - id: p2000_define_machine
    label: "P2000: Define Machine I/O Count"
    kind: query
    command: "3E 8{param_hex} 8{type_hex} 81"
    params:
      - name: param_hex
        type: string
        description: "INPUT byte: 0x81 = number of inputs, 0x82 = number of outputs, 0x83 = number of setups."
      - name: type_hex
        type: string
        description: "OUTPUT byte: 0x81 = for video, 0x82 = for audio."
    notes: "Source Table 18 instruction code 62."

  - id: p2000_request_setup_validity
    label: "P2000: Request Setup/Input Validity"
    kind: query
    command: "0F 8{setup_hex} 8{mode_hex} 81"
    params:
      - name: setup_hex
        type: string
        description: "SETUP # or Input # byte = 0x80 + number."
      - name: mode_hex
        type: string
        description: "Mode byte: 0x80 = check if setup defined, 0x81 = check if input is valid."
    notes: "Source Table 18 instruction code 15."

  - id: p2000_request_audio_parameter
    label: "P2000: Request Audio Parameter"
    kind: query
    command: "19 8{channel_hex} 80 81"
    params:
      - name: channel_hex
        type: string
        description: "Input/Output byte = 0x80 + channel number (0 = all). Requires instruction 42 preamble to select gain/bass/treble/midrange/mix."
    notes: "Source Table 18 instruction code 25. Send instruction 42 (2A 84 80 81 for right input #9) first to specify parameter."

  - id: p2000_audio_parameter_settings
    label: "P2000: Audio Parameter Settings (Preamble)"
    kind: action
    command: "2A 8{input_bits_hex} 8{param_hex} 81"
    params:
      - name: input_bits_hex
        type: string
        description: "INPUT byte: I0=0 for input, 1 for output; I1=Left; I2=Right. Byte = 0x80 + bits. E.g. 0x84 = input Right, 0x81 = output."
      - name: param_hex
        type: string
        description: "OUTPUT byte: 0x80 = Gain, 0x81 = Bass, 0x82 = Treble, 0x83 = Midrange, 0x84 = MixOn."
    notes: "Source Table 18 instruction code 42. Preamble sent before instructions 22 (SET), 24 (INC/DEC), or 25 (REQUEST) to specify the audio parameter and channel. NOTE 24 examples: 2A 84 80 81 = right input gain, then 19 89 81 81 (instruction 25). 2A 81 84 81 = output MixOn, then 16... (instruction 22)."

Feedbacks

feedbacks:
  - id: error_code
    type: enum
    values: [ERR001, ERR002, ERR003, ERR004]
    description: "ERR001=Syntax Error, ERR002=Command not available for this device, ERR003=Parameter out of range, ERR004=Unauthorized access"

  - id: command_result
    type: enum
    values: [OK]
    description: "Command succeeded. Returned as RESULT in response."

  - id: audio_level
    type: integer
    description: "Audio level in dB returned by AUD-LVL? query"

  - id: video_connection
    type: string
    description: "Video routing state IN>OUT returned by VID? query"

  - id: audio_connection
    type: string
    description: "Audio routing state IN>OUT returned by AUD? query"

  - id: signal_status
    type: enum
    values: ["0", "1"]
    description: "0/off=no signal, 1/on=signal present"

  - id: front_panel_lock
    type: enum
    values: ["0", "1"]
    description: "0=unlocked, 1=locked"

  - id: afv_mode
    type: string
    description: "Audio follow video mode state"

  - id: p2000_error_busy
    type: enum
    values: ["ERR0", "ERR1", "ERR2", "ERR3", "ERR4", "ERR5", "ERR6"]
    description: "P2000 instruction 16 reply codes: 0=error, 1=invalid instruction, 2=out of range, 3=machine busy, 4=invalid input, 5=valid input, 6=RX buffer overflow. Hex: 0x10 0x8{input} 0x84/85 0x81."

Variables

variables:
  - id: audio_input_gain
    type: integer
    min: -63
    max: 7
    unit: dB
    description: "Audio input gain level (-63dB mute to +7dB max). Set via AUD-LVL stage=In. P2000 gain byte = 0x80 + value 0x00-0x46."

  - id: audio_output_gain
    type: integer
    min: -30
    max: 20
    unit: dB
    description: "Audio output gain level (-30dB to +20dB). Set via AUD-LVL stage=Out. P2000 gain byte = 0x80 + value 0x00-0x32."

Events

events:
  - id: av_switched
    description: "Unsolicited notification when audio-video channel switches via front panel (AFV mode)"
    format: "AV IN>OUT"

  - id: video_switched
    description: "Unsolicited notification when video channel switches via front panel (breakaway mode)"
    format: "VID IN>OUT"

  - id: audio_switched
    description: "Unsolicited notification when audio channel switches via front panel (breakaway mode)"
    format: "AUD IN>OUT"

  - id: start_message
    description: "Sent on power-up. Format: Kramer Electronics LTD., Version SOFTWARE_VERSION Device Model"
    format: "~Kramer Electronics LTD., Version X.X DEVICE_MODEL"

  - id: error_busy
    description: "Error notification for invalid instruction, out of range, or busy state"
    format: "ERR###"

  - id: p2000_front_panel_switch
    description: "P2000 unsolicited echo from front-panel switch: byte1 sets DEST bit (0x40), byte2 = 0x80 + input, byte3 = 0x80 + output, byte4 = machine. Example: 41 81 87 83 = machine 3, input 1, output 7."
    format: "4{instr_hex} 8{in_hex} 8{out_hex} 8{machine_hex}"

  - id: p2000_input_validity
    description: "P2000 unsolicited notification (instruction 16) when device detects a change in video input validity in real-time. Byte 2 = 0x80 + input number. Byte 3: 0x84 = invalid input, 0x85 = valid input. Example: 10 83 84 81 = input 3 invalid. 10 87 85 81 = input 7 valid."
    format: "10 8{in_hex} 8{status_hex} 81"

Macros

# UNRESOLVED: no multi-step sequences explicitly described in source beyond command chaining

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures found in source

Notes

  • Device is an 8-input, 8-output matrix switcher for video and audio.
  • Default Protocol 3000 (ASCII) serial config: 115200 baud, 8N1. Protocol 2000 (hex, Version 0.5) uses 9600 baud, 8N1.
  • Default IP address: 192.168.1.39, subnet mask: 255.255.255.0, gateway: 192.168.1.1.
  • Up to 8 units can be daisy-chained via RS-485. Machine numbers 1-8 set via DIP-switches 1-3; DIP-switch 4 sets bus termination (off=default).
  • RS-232 connection: straight 9-pin D-sub cable (pin 2→2, pin 3→3, pin 5→5).
  • RS-485 connection: A+ to A+, B- to B-, G to G on rear panel terminal block.
  • Front panel protocol switch: P3000→P2000 = hold Output 1 + Output 2; P2000→P3000 = hold Output 1 + Output 3.
  • Command chaining supported: separate multiple commands with pipe | character. Max input string: 64 characters.
  • Knet device addressing supported: prefix command with #<machine_id>@. Example: #6@VID 4>2<CR> addresses machine 6.
  • Protocol 2000 frame: 4 bytes [DEST|INSTR] [1|INPUT] [1|OUTPUT] [1|OVR|X|MACHINE]. Bit 7 of bytes 2-4 is always 1. For single-unit: byte 4 = 0x81 (machine 1).
  • Protocol 2000 audio gain set requires preamble: 2A 86 80 81 before input gain set, 2A 87 80 81 before output gain set.
  • AFV mode: when active, VID command also switches audio; AUD command also switches video.
  • Input 0 = disconnect. Output 0 or * = all outputs.
  • Short forms documented: V=VID, A=AUD, PSTO=PRST-STO, PRCL=PRST-RCL, PDEL=PRST-DEL, PVID?=PRST-VID?, PAUD?=PRST-AUD?, PLST?=PRST-LST?, LCK=LOCK-FP, ADL=AUD-LVL, NTIP=NET-IP, NTMC=NET-MAC, NTMSK=NET-MASK, NTGT=NET-GATE, NTDH=NET-DHCP, ETHP=ETH-PORT.

Provenance

source_domains:
  - k.kramerav.com
  - manualslib.com
source_urls:
  - https://k.kramerav.com/downloads/manuals/vp-81ksi.pdf
  - https://www.manualslib.com/manual/890173/Kramer-Vp-81ksi.html
retrieved_at: 2026-06-01T20:24:09.674Z
last_checked_at: 2026-07-21T23:18:54.787Z

Verification Summary

verdict: verified
checked_at: 2026-07-21T23:18:54.787Z
matched_actions: 67
action_count: 67
confidence: medium
summary: "All 67 spec actions matched with literal wire-level tokens in source across Protocol 3000 and Protocol 2000; transport parameters verified; complete bidirectional coverage at spec granularity. (13 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "login/authentication procedure hinted at by ERR004 (\"unauthorized access, running command without the match login\") but no login command documented in source"
- "serial flow control setting not stated in source"
- "flow control not stated in source"
- "ERR004 mentions \"login\" but no login procedure documented in source"
- "valid protocol values not explicitly listed in source"
- "valid AFV-MODE values not explicitly enumerated in source"
- "no multi-step sequences explicitly described in source beyond command chaining"
- "no safety warnings or interlock procedures found in source"
- "ETH-PORT valid protocol values not enumerated in source"
- "AFV-MODE valid values not explicitly enumerated in source"
- "DHCP_MODE valid values not enumerated in source"
- "maximum preset count not stated (only queryable via INFO-PRST?)"
- "login/authentication procedure (ERR004 references \"login\" but no login command documented)"

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