Summary
ASCII-based RS-232 and TCP/IP control spec for the Rotel X430 stereo amplifier. Commands terminate with !; status responses terminate with $. Covers power, volume, mute, source selection, transport, tone (bass/treble/bypass), balance, speaker A/B, RS232 feedback mode, and a set of status queries.
Transport
protocols:
- tcp
- serial
addressing:
port: 9596
serial:
baud_rate: 115200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: no auth procedure in source
Traits
traits:
- powerable # inferred: power_on/off/toggle commands present
- levelable # inferred: volume/bass/treble/balance set commands present
- queryable # inferred: status query commands (power?, source?, volume?, etc.) present
Actions
# All commands terminate with literal "!". Copy payload verbatim including "!".
actions:
# --- POWER & VOLUME ---
- id: power_on
label: Power On
kind: action
command: "power_on!"
params: []
- id: power_off
label: Power Off
kind: action
command: "power_off!"
params: []
- id: power_toggle
label: Power Toggle
kind: action
command: "power_toggle!"
params: []
- id: vol_up
label: Volume Up
kind: action
command: "vol_up!"
params: []
- id: vol_dwn
label: Volume Down
kind: action
command: "vol_dwn!"
params: []
- id: vol_set
label: Set Volume
kind: action
command: "vol_{level}!"
params:
- name: level
type: integer
description: "Volume level 00-96 (2 digit, zero padded)"
- id: mute_toggle
label: Mute Toggle
kind: action
command: "mute!"
params: []
- id: mute_on
label: Mute On
kind: action
command: "mute_on!"
params: []
- id: mute_off
label: Mute Off
kind: action
command: "mute_off!"
params: []
# --- SOURCE SELECTION (each source = distinct source row) ---
- id: source_cd
label: Source CD
kind: action
command: "cd!"
params: []
- id: source_coax1
label: Source Coax 1
kind: action
command: "coax1!"
params: []
- id: source_coax2
label: Source Coax 2
kind: action
command: "coax2!"
params: []
- id: source_coax3
label: Source Coax 3
kind: action
command: "coax3!"
params: []
- id: source_opt1
label: Source Optical 1
kind: action
command: "opt1!"
params: []
- id: source_opt2
label: Source Optical 2
kind: action
command: "opt2!"
params: []
- id: source_opt3
label: Source Optical 3
kind: action
command: "opt3!"
params: []
- id: source_aux
label: Source Aux
kind: action
command: "aux!"
params: []
- id: source_tuner
label: Source Tuner
kind: action
command: "tuner!"
params: []
- id: source_phono
label: Source Phono
kind: action
command: "phono!"
params: []
- id: source_bluetooth
label: Source Bluetooth
kind: action
command: "bluetooth!"
params: []
- id: source_bal_xlr
label: Source XLR
kind: action
command: "bal_xlr!"
params: []
- id: source_pcusb
label: Source PC-USB
kind: action
command: "pcusb!"
params: []
- id: source_arc
label: Source ARC
kind: action
command: "arc!"
params: []
# --- SOURCE CONTROL (transport) ---
- id: play
label: Play Source
kind: action
command: "play!"
params: []
- id: stop
label: Stop Source
kind: action
command: "stop!"
params: []
- id: pause
label: Pause Source
kind: action
command: "pause!"
params: []
- id: trkf
label: Track Forward / Tune Up
kind: action
command: "trkf!"
params: []
- id: trkb
label: Track Backward / Tune Down
kind: action
command: "trkb!"
params: []
# --- TONE CONTROL (bass_-nn / bass_000 / bass_+nn = separate rows) ---
- id: bypass_on
label: Tone Bypass On
kind: action
command: "bypass_on!"
params: []
- id: bypass_off
label: Tone Bypass Off
kind: action
command: "bypass_off!"
params: []
- id: bass_up
label: Bass Up
kind: action
command: "bass_up!"
params: []
- id: bass_down
label: Bass Down
kind: action
command: "bass_down!"
params: []
- id: bass_set_neg
label: Set Bass Negative
kind: action
command: "bass_-{level}!"
params:
- name: level
type: integer
description: "Bass level 01-10 (2 digit, zero padded)"
- id: bass_set_zero
label: Set Bass to 0
kind: action
command: "bass_000!"
params: []
- id: bass_set_pos
label: Set Bass Positive
kind: action
command: "bass_+{level}!"
params:
- name: level
type: integer
description: "Bass level 01-10 (2 digit, zero padded)"
- id: treble_up
label: Treble Up
kind: action
command: "treble_up!"
params: []
- id: treble_down
label: Treble Down
kind: action
command: "treble_down!"
params: []
- id: treble_set_neg
label: Set Treble Negative
kind: action
command: "treble_-{level}!"
params:
- name: level
type: integer
description: "Treble level 01-10 (2 digit, zero padded)"
- id: treble_set_zero
label: Set Treble to 0
kind: action
command: "treble_000!"
params: []
- id: treble_set_pos
label: Set Treble Positive
kind: action
command: "treble_+{level}!"
params:
- name: level
type: integer
description: "Treble level 01-10 (2 digit, zero padded)"
# --- BALANCE (lnn / 000 / rnn = separate rows) ---
- id: balance_right_step
label: Balance Right Step
kind: action
command: "balance_r!"
params: []
- id: balance_left_step
label: Balance Left Step
kind: action
command: "balance_l!"
params: []
- id: balance_set_left
label: Set Balance Left
kind: action
command: "balance_l{level}!"
params:
- name: level
type: integer
description: "Balance left 01-15 (2 digit, zero padded)"
- id: balance_set_zero
label: Set Balance to 0
kind: action
command: "balance_000!"
params: []
- id: balance_set_right
label: Set Balance Right
kind: action
command: "balance_r{level}!"
params:
- name: level
type: integer
description: "Balance right 01-15 (2 digit, zero padded)"
# --- SPEAKER ---
- id: speaker_a_toggle
label: Toggle Speaker A
kind: action
command: "speaker_a!"
params: []
- id: speaker_b_toggle
label: Toggle Speaker B
kind: action
command: "speaker_b!"
params: []
# --- RS232 FEEDBACK MODE ---
- id: rs232_update_on
label: RS232 Update Auto On
kind: action
command: "rs232_update_on!"
params: []
- id: rs232_update_off
label: RS232 Update Manual Off
kind: action
command: "rs232_update_off!"
params: []
# --- STATUS QUERIES (Section 2) ---
- id: query_power
label: Query Power Status
kind: query
command: "power?"
params: []
- id: query_source
label: Query Source
kind: query
command: "source?"
params: []
- id: query_source_name
label: Query Source Name
kind: query
command: "name?"
params: []
- id: query_volume
label: Query Volume
kind: query
command: "volume?"
params: []
- id: query_mute
label: Query Mute
kind: query
command: "mute?"
params: []
- id: query_bypass
label: Query Tone Bypass
kind: query
command: "bypass?"
params: []
- id: query_bass
label: Query Bass Level
kind: query
command: "bass?"
params: []
- id: query_treble
label: Query Treble Level
kind: query
command: "treble?"
params: []
- id: query_balance
label: Query Balance
kind: query
command: "balance?"
params: []
- id: query_speaker
label: Query Active Speaker Outputs
kind: query
command: "speaker?"
params: []
- id: query_freq
label: Query Digital Input Frequency
kind: query
command: "freq?"
params: []
- id: query_pcusb_class
label: Query PC-USB Class
kind: query
command: "pcusb?"
params: []
- id: query_version
label: Query Software Version
kind: query
command: "version?"
params: []
- id: query_pc_version
label: Query PC-USB Software Version
kind: query
command: "pc_version?"
params: []
- id: query_ip
label: Query IP Address
kind: query
command: "ip?"
params: []
- id: query_mac
label: Query MAC Address
kind: query
command: "mac?"
params: []
- id: query_model
label: Query Model Number
kind: query
command: "model?"
params: []
- id: query_discover
label: Discover Device on Network
kind: query
command: "discover?"
params: []
Feedbacks
# Observable state strings emitted by the device (terminate with "$").
feedbacks:
- id: power_state
type: enum
values: [on, standby]
- id: volume_level
type: string
description: "volume=##$ (2 digit 00-96)"
- id: mute_state
type: enum
values: [on, off]
- id: source_state
type: enum
values: [cd, coax1, coax2, coax3, opt1, opt2, opt3, tuner, phono, aux, pc_usb, bal_xlr, bluetooth, arc]
- id: source_name
type: string
description: "name=custom_input_name$"
- id: bypass_state
type: enum
values: [on, off]
- id: bass_level
type: string
description: "bass=###$ (+01-10, -01-10, 000)"
- id: treble_level
type: string
description: "treble=###$ (+01-10, -01-10, 000)"
- id: balance_level
type: string
description: "balance=###$ (l01-15, r01-15, 000)"
- id: speaker_state
type: enum
values: [a, b, a_b, off]
- id: update_mode
type: enum
values: [auto, manual]
- id: freq_value
type: enum
values: [off, "32", "44.1", "48", "88.2", "96", "176.4", "192", "384", "2.8m", not_support]
- id: pcusb_class
type: enum
values: ["1", "2"]
- id: software_version
type: string
description: "version=#.##$"
- id: pc_usb_version
type: string
description: "pc_version=#.##$"
- id: ip_address
type: string
description: "ipaddress=###.###.###.###$"
- id: mac_address
type: string
description: "mac=############$ (uppercase)"
- id: model_name
type: string
description: "model=text$"
- id: discover_response
type: string
description: "discover=ip=###.###.###.### port=#### mac=############$"
Variables
# No settable continuous variables beyond those exposed as parameterized actions above.
Events
# Unsolicited status updates sent when rs232_update_on is active. Format identical
# to query response strings (e.g. power=on$, volume=40$, source=cd$). No separate
# event opcodes documented.
# UNRESOLVED: full enumeration of which state changes trigger unsolicited updates
# not exhaustively listed in source.
Macros
# No multi-step command sequences documented in source.
Safety
confirmation_required_for: []
interlocks: []
# Source notes RS232 hardware has no flow control - care needed to avoid packet
# loss when sending/receiving. Not an interlock, but relevant transport caveat.
Notes
- Command terminator: literal
!. No spaces, no CR/LF after command. - Status terminator: literal
$. - RS232 hardware lacks flow control — pace sends to avoid packet loss.
- IP control uses same ASCII command set on TCP port 9596.
rs232_update_on!enables unsolicited status push on any state change;rs232_update_off!requires polling.- Source set response uses
pc_usbtoken; the select command ispcusb!(no underscore). Verbatim per source.
## Provenance
```yaml
source_domains:
- rotel.com
source_urls:
- https://www.rotel.com/sites/default/files/product/rs232/X430_Protocol.pdf
- https://www.rotel.com/manuals-resources/rs232-protocols
retrieved_at: 2026-06-30T16:36:25.253Z
last_checked_at: 2026-07-07T12:41:17.611Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-07T12:41:17.611Z
matched_actions: 67
action_count: 67
confidence: medium
summary: "All 67 spec actions matched; transport parameters verified against protocol and connection settings. (5 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "firmware version compatibility not stated in source"
- "full enumeration of which state changes trigger unsolicited updates"
- "error/fault response strings beyond the documented value enums not enumerated"
- "command timing / inter-command spacing limits not specified"
- "max concurrent TCP connections not stated"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0