Summary

TCP/IP control command set for the Primare Systems SPA21 amplifier, from a vendor command table (document updated 2025-06-13). Commands are ASCII strings prefixed !1 and terminated with <CR><LF> (HEX 0D 0A), covering power, preset/input selection, DSP/surround mode (SPA25 & SP25 only), mute, and volume (0–99).

Transport

protocols:
  - tcp
addressing:
  port: 50006
auth:
  type: none  # inferred: no auth procedure in source
# Command prefix: "!1" (HEX 21 31); end character: <CR><LF> (HEX 0D 0A) - stated in source header
# UNRESOLVED: serial transport suspected for SPA21 but no serial config found in source

Traits

# - powerable    (inferred: pow.1 / pow.0 commands present)
# - queryable    (inferred: ?.? status queries present for all functions)
# - levelable    (inferred: vol set 0-99 present)
# - routable     (inferred: preset/input selection commands present)
traits:
  - powerable
  - queryable
  - levelable
  - routable

Actions

# All commands sent as ASCII prefixed "!1" and terminated with <CR><LF> (0D 0A).
# HEX column shows the verbatim byte sequence from the source.

- id: power_status_query
  label: Power Get Status
  kind: query
  command: "!1pow.?"
  description: 'Get power status. HEX: 21 31 70 6F 77 2E 3F. Response: !1pow.xx (see Feedbacks).'
  params: []

- id: power_toggle
  label: Power Toggle
  kind: action
  command: "!1pow.t"
  description: 'Toggle power. HEX: 21 31 70 6F 77 2E 74. Response: !1pow.xx.'
  params: []

- id: power_on
  label: Power On
  kind: action
  command: "!1pow.1"
  description: 'Power ON. HEX: 21 31 70 6F 77 2E 31. Response echoes !1pow.1.'
  params: []

- id: power_standby
  label: Power Standby
  kind: action
  command: "!1pow.0"
  description: 'Power standby. HEX: 21 31 70 6F 77 2E 30. Response echoes !1pow.0.'
  params: []

- id: input_status_query
  label: Preset/Input Get Status
  kind: query
  command: "!1inp.?"
  description: 'Get preset/input status ("depending on model"). HEX: 21 31 69 6E 70 2E 3F. Response: !1inp.xx xx.'
  params: []

- id: input_next
  label: Next Preset/Input
  kind: action
  command: "!1inp.n"
  description: 'Next preset/input. HEX: 21 31 69 6E 70 2E 6E. Response: !1inp.xx xx.'
  params: []

- id: input_previous
  label: Previous Preset/Input
  kind: action
  command: "!1inp.p"
  description: 'Previous preset/input. HEX: 21 31 69 6E 70 2E 70. Response: !1inp.xx xx.'
  params: []

- id: select_preset_input
  label: Select Preset/Input
  kind: action
  command: "!1inp.{preset}"
  description: 'Direct preset/input select 1-17; source lists rows !1inp.1 through !1inp.17 (e.g. !1inp.10 HEX: 21 31 69 6E 70 2E 31 30). Response echoes command. "Depending on model."'
  params:
    - name: preset
      type: integer
      description: "Preset/input number, 1 to 17"

- id: surround_mode_query
  label: DSP/Surround Mode Get Status
  kind: query
  command: "!1sur.?"
  description: 'Get DSP/surround mode status. SPA25 & SP25 model only. HEX: 21 31 73 75 72 2E 3F. Response: !1sur.xx.'
  params: []

- id: surround_mode_next
  label: DSP/Surround Mode Next
  kind: action
  command: "!1sur.n"
  description: 'Next DSP/surround mode. SPA25 & SP25 model only. HEX: 21 31 73 75 72 2E 6E. Response: !1sur.xx.'
  params: []

- id: surround_mode_previous
  label: DSP/Surround Mode Previous
  kind: action
  command: "!1sur.p"
  description: 'Previous DSP/surround mode. SPA25 & SP25 model only. HEX: 21 31 73 75 72 2E 70. Response: !1sur.xx.'
  params: []

- id: set_surround_mode
  label: Set DSP/Surround Mode
  kind: action
  command: "!1sur.{mode}"
  description: 'Set DSP/surround mode; source lists named values 1-9. SPA25 & SP25 model only. Response echoes command. # UNRESOLVED: applicability to SPA21 not stated.'
  params:
    - name: mode
      type: enum
      description: "1=Auto (21 31 73 75 72 2E 31), 2=Bypass, 3=Stereo, 4=Party, 5=Dolby Digital: Movie, 6=Dolby Digital: Music, 7=Dolby Digital: Night, 8=DTS Neural:X, 9=Native"
      values: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]

- id: mute_status_query
  label: Mute Get Status
  kind: query
  command: "!1mut.?"
  description: 'Get mute status. HEX: 21 31 6D 75 74 2E 3F. Response: !1mut.xx.'
  params: []

- id: mute_toggle
  label: Mute Toggle
  kind: action
  command: "!1mut.t"
  description: 'Toggle mute. HEX: 21 31 6D 75 74 2E 74. Response: !1mut.xx.'
  params: []

- id: mute_enable
  label: Mute Enable
  kind: action
  command: "!1mut.1"
  description: 'Enable mute. HEX: 21 31 6D 75 74 2E 31. Response echoes !1mut.1.'
  params: []

- id: mute_disable
  label: Mute Disable
  kind: action
  command: "!1mut.0"
  description: 'Disable mute. HEX: 21 31 6D 75 74 2E 30. Response echoes !1mut.0.'
  params: []

- id: volume_status_query
  label: Volume Get Status
  kind: query
  command: "!1vol.?"
  description: 'Get volume status. HEX: 21 31 76 6F 6C 2E 3F. Response: !1vol.xx xx.'
  params: []

- id: volume_up
  label: Volume Up
  kind: action
  command: "!1vol.u"
  description: 'Volume up one step. HEX: 21 31 76 6F 6C 2E 75. Response: !1vol.xx xx.'
  params: []

- id: volume_down
  label: Volume Down
  kind: action
  command: "!1vol.d"
  description: 'Volume down one step. HEX: 21 31 76 6F 6C 2E 64. Response: !1vol.xx xx.'
  params: []

- id: set_volume
  label: Set Volume
  kind: action
  command: "!1vol.{level}"
  description: 'Set volume 0 to 99 by ASCII (source lists rows !1vol.0 through !1vol.99; e.g. !1vol.10 HEX: 21 31 76 6F 6C 2E 31 30). Response echoes command.'
  params:
    - name: level
      type: integer
      description: "Volume level, 0 to 99 (ASCII digits)"

Feedbacks

# Response format documented in source: prefix !1 + function + "." + value, terminated <CR><LF>.
# Set/enable commands echo back the same command; queries return current value as "xx" placeholders.
- id: power_state
  type: enum
  response_pattern: "!1pow.xx"  # HEX: 21 31 70 6F 77 2Exx
  values: [on, standby]  # inferred: xx = 1 (on) / 0 (standby) per pow.1 / pow.0 commands
- id: input_preset
  type: integer
  response_pattern: "!1inp.xx xx"  # HEX: 21 31 69 6E 70 2Exx xx; two-digit value 1-17 # UNRESOLVED: exact encoding of xx xx not stated
- id: surround_mode
  type: enum
  response_pattern: "!1sur.xx"  # HEX: 21 31 73 75 72 2Exx
  values: [auto, bypass, stereo, party, dolby_digital_movie, dolby_digital_music, dolby_digital_night, dts_neural_x, native]  # inferred from named mode values 1-9
- id: mute_state
  type: enum
  response_pattern: "!1mut.xx"  # HEX: 21 31 6D 75 74 2Exx
  values: [enabled, disabled]  # inferred: xx = 1 / 0 per mut.1 / mut.0
- id: volume_level
  type: integer
  response_pattern: "!1vol.xx xx"  # HEX: 21 31 76 6F 6C 2Exx xx; value 0-99 # UNRESOLVED: exact encoding of xx xx not stated

Variables

# No settable parameters beyond the discrete set actions above.
# UNRESOLVED: none documented in source

Events

# No unsolicited notifications documented in source.
# UNRESOLVED: none documented

Macros

# No multi-step sequences documented in source.
# UNRESOLVED: none documented

Safety

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

Notes

  • All commands: ASCII, prefix !1 (HEX 21 31), end character <CR><LF> (HEX 0D 0A). TCP port 50006 stated in source header ("TCP/IP API").
  • Source document header: "Updated: 2025-06-13".
  • Source is the vendor Prisma-style API table. Preset/input section annotated "(depending on model)"; DSP/surround section annotated "(SPA25 & SP25 model only)" — SPA21 coverage of individual sections is not explicitly confirmed. Prior research notes the Prisma API does not explicitly cover pre-Prisma SPA20/SPA21.
  • Requester states RS-232C as the known SPA21 protocol, but this source documents TCP/IP only; no serial port settings (baud, parity, etc.) appear. Treat serial transport as unconfirmed.

Provenance

source_domains:
  - primare.net
  - yumpu.com
source_urls:
  - https://primare.net/wp-content/uploads/2022/01/Primare-Prisma-API-TCPIP-and-RS232-2025-06-13.pdf
  - https://primare.net/support/documents-downloads/
  - https://www.yumpu.com/en/document/view/4275044/remote-control-keys-v22-primare
retrieved_at: 2026-09-03T02:04:38.427Z
last_checked_at: 2026-09-18T22:18:04.358Z

Verification Summary

verdict: verified
checked_at: 2026-09-18T22:18:04.358Z
matched_actions: 20
action_count: 20
confidence: medium
summary: "All 20 spec actions match source verbatim; TCP port 50006 confirmed; parameterized presets 1-17 and volumes 0-99 are enumerated rows in source, not extra commands. (8 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source does not explicitly confirm SPA21 coverage — preset/input rows are annotated \"(depending on model)\" and the DSP/surround section is annotated \"(SPA25 & SP25 model only)\". Requester states RS-232C as known protocol, but the source documents a TCP/IP API only; no RS-232 serial settings appear anywhere in the source."
- "serial transport suspected for SPA21 but no serial config found in source"
- "applicability to SPA21 not stated.'"
- "exact encoding of xx xx not stated"
- "none documented in source"
- "none documented"
- "no safety warnings or interlock procedures found in source"
- "serial (RS-232C) transport config not in source; SPA21 model applicability of this command set not explicitly stated; response value encodings for xx placeholders not defined beyond command echoes; no firmware version compatibility stated in source"

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