Summary
RS-232 ASCII control protocol for Rotel RA-11 and RA-12 V02 stereo integrated amplifiers. Commands terminated with "!". Supports power, volume, source selection, tone/balance controls, menu navigation, and front USB playback control. No flow control on RS-232 hardware.
Transport
protocols:
- serial
serial:
baud_rate: 115200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: UNRESOLVED # Source does not specify authentication
Traits
traits:
- powerable # power on/off/toggle commands
- queryable # feedback request commands return state
- levelable # volume, bass, treble, balance level control
- routable # source selection commands
Actions
actions:
- id: power_on
label: Power On
kind: action
command: power_on!
response: power=on!
params: []
- id: power_off
label: Power Off (Standby)
kind: action
command: power_off!
response: power=standby!
params: []
- id: power_toggle
label: Power Toggle
kind: action
command: power_toggle!
response: power=on! / power=standby!
params: []
- id: volume_up
label: Volume Up
kind: action
command: volume_up!
response: volume=##!
params: []
- id: volume_down
label: Volume Down
kind: action
command: volume_down!
response: volume=##!
params: []
- id: volume_max
label: Set Volume Max
kind: action
command: volume_max!
response: volume=max!
params: []
- id: volume_min
label: Set Volume Min
kind: action
command: volume_min!
response: volume=min!
params: []
- id: volume_set
label: Set Volume Level
kind: action
command: volume_{n}!
response: volume=##!
params:
- name: n
type: integer
min: 1
max: 96
description: Volume level (1-96)
- id: mute_toggle
label: Mute Toggle
kind: action
command: mute!
response: mute=on! / mute=off!
params: []
- id: mute_on
label: Mute On
kind: action
command: mute_on!
response: mute=on!
params: []
- id: mute_off
label: Mute Off
kind: action
command: mute_off!
response: mute=off!
params: []
- id: source_rcd
label: Source Rotel CD
kind: action
command: rcd!
response: source=analog_cd! / source=coax1_cd! / source=coax2_cd!
params: []
- id: source_cd
label: Source CD
kind: action
command: cd!
response: source=cd! / source=analog_cd!
params: []
- id: source_coax1
label: Source Coax 1
kind: action
command: coax1!
response: source=coax1! / source=coax1_cd!
params: []
- id: source_coax2
label: Source Coax 2
kind: action
command: coax2!
response: source=coax2! / source=coax2_cd!
params: []
- id: source_opt1
label: Source Optical 1
kind: action
command: opt1!
response: source=opt1!
params: []
- id: source_opt2
label: Source Optical 2
kind: action
command: opt2!
response: source=opt2!
params: []
- id: source_aux1
label: Source Aux 1
kind: action
command: aux1!
response: source=aux1!
params: []
- id: source_aux2
label: Source Aux 2
kind: action
command: aux2!
response: source=aux2!
params: []
- id: source_tuner
label: Source Tuner
kind: action
command: tuner!
response: source=tuner!
params: []
- id: source_phono
label: Source Phono
kind: action
command: phono!
response: source=phono!
params: []
- id: source_usb
label: Source Front USB
kind: action
command: usb!
response: source=usb!
params: []
- id: play
label: Play
kind: action
command: play!
response: play_status=play!
params: []
- id: stop
label: Stop
kind: action
command: stop!
params: []
- id: pause
label: Pause
kind: action
command: pause!
params: []
- id: track_fwd
label: Track Forward / Tune Up
kind: action
command: track_fwd!
params: []
- id: track_back
label: Track Back / Tune Down
kind: action
command: track_back!
params: []
- id: fast_fwd
label: Fast Forward
kind: action
command: fast_fwd!
params: []
- id: fast_back
label: Fast Backward
kind: action
command: fast_back!
params: []
- id: random_toggle
label: Random Play Mode Toggle
kind: action
command: random!
params: []
- id: repeat_toggle
label: Repeat Play Mode Toggle
kind: action
command: repeat!
params: []
- id: menu
label: Display Menu
kind: action
command: menu!
params: []
- id: exit
label: Exit Key
kind: action
command: exit!
params: []
- id: cursor_up
label: Cursor Up
kind: action
command: up!
params: []
- id: cursor_down
label: Cursor Down
kind: action
command: down!
params: []
- id: cursor_left
label: Cursor Left
kind: action
command: left!
params: []
- id: cursor_right
label: Cursor Right
kind: action
command: right!
params: []
- id: enter
label: Enter Key
kind: action
command: enter!
params: []
- id: num_key
label: Numeric Key
kind: action
command: "{n}!"
params:
- name: n
type: integer
min: 0
max: 9
description: Numeric key 0-9
- id: tone_on
label: Tone Controls On
kind: action
command: tone_on!
response: tone=on!
params: []
- id: tone_off
label: Tone Controls Off
kind: action
command: tone_off!
response: tone=off!
params: []
- id: bass_up
label: Bass Up
kind: action
command: bass_up!
response: bass=000/+##/-##!
params: []
- id: bass_down
label: Bass Down
kind: action
command: bass_down!
response: bass=000/+##/-##!
params: []
- id: bass_set
label: Set Bass Level
kind: action
command: ["bass_-10!", "bass_000!", "bass_+10!"]
response: bass=##!
params: []
- id: treble_up
label: Treble Up
kind: action
command: treble_up!
response: treble=000/+##/-##!
params: []
- id: treble_down
label: Treble Down
kind: action
command: treble_down!
response: treble=000/+##/-##!
params: []
- id: treble_set
label: Set Treble Level
kind: action
command: ["treble_-10!", "treble_000!", "treble_+10!"]
response: treble=##!
params: []
- id: balance_right
label: Balance Right
kind: action
command: balance_right!
response: balance=000/L##/R##!
params: []
- id: balance_left
label: Balance Left
kind: action
command: balance_left!
response: balance=000/L##/R##!
params: []
- id: balance_set
label: Set Balance
kind: action
command: ["balance_L15!", "balance_000!", "balance_R15!"]
response: balance=##!
params: []
- id: dimmer_toggle
label: Toggle Display Dimmer
kind: action
command: dimmer!
response: dimmer_#!
params: []
- id: dimmer_set
label: Set Display Dimmer Level
kind: action
command: ["dimmer_0!", "dimmer_1!", "dimmer_2!", "dimmer_3!", "dimmer_4!", "dimmer_5!", "dimmer_6!"]
params: []
- id: display_update_auto
label: Set Display Update Auto
kind: action
command: display_update_auto!
response: display_update=auto!
params: []
- id: display_update_manual
label: Set Display Update Manual
kind: action
command: display_update_manual!
response: display_update=manual!
params: []
Feedbacks
feedbacks:
- id: display_full
label: Full Display
query_command: get_display!
command: get_display!
response: display=###,text
description: "Entire display data; 3-digit byte count, comma, text (no terminating !)"
type: string
- id: display_line1
label: Display Line 1
query_command: get_display1!
command: get_display1!
response: display1=##,text
description: "Display line 1; 2-digit byte count, comma, text"
type: string
- id: display_line2
label: Display Line 2
query_command: get_display2!
command: get_display2!
response: display2=##,text
description: "Display line 2; 2-digit byte count, comma, text"
type: string
- id: product_type
label: Product Type
query_command: get_product_type!
command: get_product_type!
response: product_type=##,text
description: "Product model name (e.g. RA-12)"
type: string
- id: product_version
label: Product Version
query_command: get_product_version!
command: get_product_version!
response: product_version=##,text
description: "Main CPU software version (e.g. V2.1.0)"
type: string
- id: tc_version
label: Front USB Software Version
query_command: get_tc_version!
command: get_tc_version!
response: tc_version=##,text
description: "Front USB software version"
type: string
- id: display_size
label: Display Size
query_command: get_display_size!
command: get_display_size!
response: display_size=##,##!
description: "Display columns and rows (e.g. 20,02)"
type: string
- id: display_update_status
label: Display Update Mode
query_command: get_display_update!
command: get_display_update!
response: display_update=auto! / display_update=manual!
type: enum
values: [auto, manual]
- id: power_state
label: Power State
query_command: get_current_power!
command: get_current_power!
response: power=on! / power=standby!
type: enum
values: [on, standby]
- id: current_source
label: Current Source
query_command: get_current_source!
command: get_current_source!
response: "source=analog_cd! / source=cd! / source=coax1! / source=coax1_cd! / source=coax2! / source=coax2_cd! / source=opt1! / source=opt2! / source=tuner! / source=phono! / source=usb! / source=aux1! / source=aux2!"
type: enum
values: [analog_cd, cd, coax1, coax1_cd, coax2, coax2_cd, opt1, opt2, tuner, phono, usb, aux1, aux2]
- id: tone_state
label: Tone Control State
query_command: get_tone!
command: get_tone!
response: tone=on! / tone=off!
type: enum
values: [on, off]
- id: bass_level
label: Bass Level
query_command: get_bass!
command: get_bass!
response: bass=###! (+01-10, -01-10, 000)
type: string
- id: treble_level
label: Treble Level
query_command: get_treble!
command: get_treble!
response: treble=###! (+01-10, -01-10, 000)
type: string
- id: balance_level
label: Balance Level
query_command: get_balance!
command: get_balance!
response: balance=###! (L01-15, R01-15, 000)
type: string
- id: current_freq
label: Digital Input Frequency
query_command: get_current_freq!
command: get_current_freq!
response: freq=off! / freq=32! / freq=44.1! / freq=48! / freq=88.2! / freq=96! / freq=176.4! / freq=192!
type: enum
values: [off, "32", "44.1", "48", "88.2", "96", "176.4", "192"]
- id: play_status
label: Play Status
query_command: get_play_status!
command: get_play_status!
response: play_status=play! / play_status=stop! / play_status=pause!
type: enum
values: [play, stop, pause]
- id: volume_max
label: Max Volume
query_command: get_volume_max!
command: get_volume_max!
response: volume_max=##!
type: integer
- id: volume_min
label: Min Volume
query_command: get_volume_min!
command: get_volume_min!
response: volume_min=##!
type: integer
- id: volume_level
label: Current Volume
query_command: get_volume!
command: get_volume!
response: volume=##!
type: integer
- id: tone_max
label: Max Tone Value
query_command: get_tone_max!
command: get_tone_max!
response: tone_max=10!
type: integer
Variables
# UNRESOLVED: no continuously settable variables beyond discrete actions above
Events
# Automatic display updates sent when display_update=auto:
# - display line changes pushed on change
# - Basic status (volume, power, source) sent automatically regardless of mode
# Front USB metadata requires manual mode request
# UNRESOLVED: exact event format for unsolicited updates not fully documented
Macros
# UNRESOLVED: no multi-step sequences described in source
Safety
confirmation_required_for: []
interlocks: []
# Note: RS-232 hardware does not support flow control - care needed to avoid packet loss
# UNRESOLVED: no safety interlock procedures documented in source
Notes
- All commands must terminate with
!. No spaces, no CR/LF after command. - Responses use
!terminator OR byte-count prefix for variable-length data (byte count excludes length digits and comma). - RS-232 hardware has no flow control — sender must manage pacing to prevent packet loss.
- Rotel Link RCD feature changes source response strings for the configured input (e.g.
source=coax1_cd!vssource=coax1!). - V02 units with rear panel RS-232 only. Earlier models with mini USB rear panel do not support this protocol.
- Volume range corrected in spec v1.01: 1–96 (not 1–86).
- Special display characters map to multi-byte hex sequences (see Section 3 of source).
Provenance
source_domains:
- rotel.com
source_urls:
- "https://www.rotel.com/sites/default/files/product/rs232/RA12%20Protocol.pdf"
- https://www.rotel.com/manuals-resources/rs232-protocols
retrieved_at: 2026-05-21T20:43:11.258Z
last_checked_at: 2026-10-07T12:37:00.996Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T12:37:00.996Z
matched_actions: 74
action_count: 74
confidence: medium
summary: "All 74 action units (54 actions, 20 query feedbacks) match source commands with correct shapes; serial parameters match; source catalogue fully represented. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility range not stated"
- "earlier models with mini USB rear panel do not support this protocol — version boundary unclear"
- "no continuously settable variables beyond discrete actions above"
- "exact event format for unsolicited updates not fully documented"
- "no multi-step sequences described in source"
- "no safety interlock procedures documented in source"
- "exact firmware version range for V02 units not stated"
- "response timing / inter-command delay not specified"
- "max command queue depth not specified"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0