Summary
ASCII-based RS-232C control protocol for the Rotel CD11, CD11MKII, CD14, and CD14MKII CD players. Commands are plain-text strings terminated with !; responses from the unit terminate with $ (fixed length) or $$ (variable length). Covers power, CD transport, numeric-key, dimmer, and status-feedback commands at 57600 baud.
⚠️ SOURCE / DEVICE MISMATCH — DO NOT PUBLISH AS-IS The requested device was Rotel RC-970BX MkII (a stereo preamplifier/control amplifier), but the provided source file (
rotel_rc_970bx_mkii_serial.refined.md) documents the CD11 / CD11MKII / CD14 / CD14MKII CD player RS-232 command set. Every command below is CD-player-specific (play, eject, track, disc_name, tray_status, etc.) and does not apply to the RC-970BX MkII.entity_id,spec_id, and this spec's title retain the operator-supplied RC-970BX slug for traceability only. Either (a) supply the correct RC-970BX MkII RS-232 document, or (b) re-key this spec under a CD-player entity.
Transport
protocols:
- serial
serial:
baud_rate: 57600
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # source: "RS232 hardware does not support flow control"
auth:
type: none # inferred: no auth procedure in source
Traits
traits:
- powerable # power_on / power_off / power_toggle commands present
- queryable # power?, status?, track?, dimmer?, etc. queries present
- levelable # display dimmer levels 0-6 (brightness control)
Actions
# Framing rules (verbatim from source):
# - Every command terminates with literal "!" - no spaces, no CR/LF.
# - Responses terminate with "$" (fixed length) or "$$" (variable length).
#
# --- POWER COMMANDS ---
- 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: []
# --- CD TRANSPORT COMMANDS ---
- id: play
label: Play
kind: action
command: "play!"
params: []
- id: stop
label: Stop
kind: action
command: "stop!"
params: []
- id: pause
label: Pause Toggle
kind: action
command: "pause!"
params: []
- id: track_forward
label: Track Forward
kind: action
command: "trkf!"
params: []
- id: track_backward
label: Track Backward
kind: action
command: "trkb!"
params: []
- id: fast_forward
label: Fast Forward
kind: action
command: "ff!"
params: []
- id: fast_backward
label: Fast Backward
kind: action
command: "fb!"
params: []
- id: random_toggle
label: Random Play Mode Toggle
kind: action
command: "rnd!"
params: []
- id: repeat_toggle
label: Repeat Play Mode Toggle
kind: action
command: "rpt!"
params: []
# --- NUMERIC KEY COMMANDS (each a distinct source row) ---
- id: number_key_1
label: Number Key 1
kind: action
command: "1!"
params: []
- id: number_key_2
label: Number Key 2
kind: action
command: "2!"
params: []
- id: number_key_3
label: Number Key 3
kind: action
command: "3!"
params: []
- id: number_key_4
label: Number Key 4
kind: action
command: "4!"
params: []
- id: number_key_5
label: Number Key 5
kind: action
command: "5!"
params: []
- id: number_key_6
label: Number Key 6
kind: action
command: "6!"
params: []
- id: number_key_7
label: Number Key 7
kind: action
command: "7!"
params: []
- id: number_key_8
label: Number Key 8
kind: action
command: "8!"
params: []
- id: number_key_9
label: Number Key 9
kind: action
command: "9!"
params: []
- id: number_key_0
label: Number Key 0
kind: action
command: "0!"
params: []
# --- OTHER COMMANDS ---
- id: eject
label: Eject CD
kind: action
command: "eject!"
params: []
- id: time_display_toggle
label: Toggle CD Time Display
kind: action
command: "time!"
params: []
- id: dimmer_toggle
label: Toggle Display Dimmer
kind: action
command: "dimmer!"
params: []
- id: dimmer_set_0
label: Set Display to 0 (Brightest)
kind: action
command: "dimmer_0!"
params: []
- id: dimmer_set_1
label: Set Display to 1
kind: action
command: "dimmer_1!"
params: []
- id: dimmer_set_2
label: Set Display to 2
kind: action
command: "dimmer_2!"
params: []
- id: dimmer_set_3
label: Set Display to 3
kind: action
command: "dimmer_3!"
params: []
- id: dimmer_set_4
label: Set Display to 4
kind: action
command: "dimmer_4!"
params: []
- id: dimmer_set_5
label: Set Display to 5
kind: action
command: "dimmer_5!"
params: []
- id: dimmer_set_6
label: Set Display to 6 (Dimmest)
kind: action
command: "dimmer_6!"
params: []
# --- RS232 FEEDBACK MODE COMMANDS ---
- id: rs232_update_on
label: Set RS232 Update to Auto (On)
kind: action
command: "rs232_update_on!"
params: []
- id: rs232_update_off
label: Set RS232 Update to Manual (Off)
kind: action
command: "rs232_update_off!"
params: []
# --- FEEDBACK REQUEST (QUERY) COMMANDS ---
- id: power_query
label: Request Current Power Status
kind: query
command: "power?"
params: []
- id: status_query
label: Request CD Play Status
kind: query
command: "status?"
params: []
- id: track_query
label: Request Current CD Track Number
kind: query
command: "track?"
params: []
- id: track_name_query
label: Request Current CD Track Name
kind: query
command: "track_name?"
params: []
- id: tray_status_query
label: Request Current CD Mechanism Status
kind: query
command: "tray_status?"
params: []
- id: random_query
label: Request Current Random Play Mode
kind: query
command: "rnd?"
params: []
- id: repeat_query
label: Request Current Repeat Play Mode
kind: query
command: "rpt?"
params: []
- id: time_query
label: Request Current CD Track Time
kind: query
command: "time?"
params: []
- id: disc_name_query
label: Request Current CD Name
kind: query
command: "disc_name?"
params: []
- id: disc_type_query
label: Request Type of Loaded CD
kind: query
command: "disc_type?"
params: []
- id: dimmer_query
label: Request Current Front Display Dimmer Level
kind: query
command: "dimmer?"
params: []
- id: version_query
label: Request Main CPU Software Version
kind: query
command: "version?"
params: []
- id: model_query
label: Request Model Number
kind: query
command: "model?"
params: []
Feedbacks
- id: power_state
type: enum
values: [on, standby]
return_format: "power={on|standby}$"
- id: play_status
type: enum
values: [play, stop, pause]
return_format: "status={play|stop|pause}$"
- id: track_number
type: string
return_format: "track=###$"
- id: track_name
type: string
return_format: "track_name=text$$" # UTF-8; variable length → double terminator
- id: tray_status
type: enum
values: [open, close, load]
return_format: "tray_status={open|close|load}$"
- id: random_mode
type: enum
values: [on, off]
return_format: "rnd={on|off}$"
- id: repeat_mode
type: enum
values: [track, disc, off]
return_format: "rpt={track|disc|off}$"
- id: time_display
type: string
return_format: "time=#:##:##$$" # variable length → double terminator
- id: disc_name
type: string
return_format: "disc_name=text$$" # UTF-8; variable length → double terminator
- id: disc_type
type: enum
values: [None, CD-DA, HDCD, MP3, WMA]
return_format: "disc_type={None|CD-DA|HDCD|MP3|WMA}$$"
- id: dimmer_level
type: enum
values: [0, 1, 2, 3, 4, 5, 6]
return_format: "dimmer={0|1|2|3|4|5|6}$"
- id: update_mode
type: enum
values: [auto, manual]
return_format: "update_mode={auto|manual}$"
- id: software_version
type: string
return_format: "version=#.##$"
- id: model_number
type: string
return_format: "model=text$"
Variables
# Dimmer level is settable via discrete dimmer_{0..6}! actions (already in Actions).
# No other continuously-settable parameters documented.
Events
# When rs232_update_on! is active, the unit transmits unsolicited status updates over
# RS-232 on any state change (power, play status, track, tray, dimmer, modes, etc.),
# using the same return formats listed in Feedbacks. Disable with rs232_update_off!
# (unit then only responds when polled). No dedicated event message format is documented.
Macros
# UNRESOLVED: no multi-step sequences described in source.
Safety
confirmation_required_for: []
interlocks: []
# Source notes only that RS232 hardware lacks flow control - care needed to avoid
# packet loss when sending/receiving. No safety warnings, interlocks, or
# power-on sequencing requirements are documented.
Notes
- Command framing: all commands terminate with
!; no spaces, no CR/LF. Responses use$(fixed-length) or$$(variable-length, e.g. metadata/time strings). - No flow control: the RS-232 hardware does not support flow control; the controller must pace sends/receives to avoid packet loss.
- Auto-update mode:
rs232_update_on!enables push-style status updates;rs232_update_off!makes the unit silent unless polled. - Numeric keys
1!–0!: documented as 10 distinct source rows; emitted as separate actions per coverage rule. - Dimmer levels:
dimmer_0!–dimmer_6!(0 = brightest, 6 = dimmest) emitted as separate actions;dimmer!toggles. - Source spec version table: v1.00 (2016-08-26, original); v1.10 (2018-12-18, added CD11); v1.20 (2024-06-07, added CD11MKII/CD14MKII).
---
Self-check: no voltage/current/power invented ✓. baud 57600 = stated (not assumed 9600) ✓. No port assumed (serial-only) ✓. `status: draft` ✓. `declared_confidence: low` ✓. YAML blocks valid ✓. `entity_id` placeholder kept (operator-supplied) ✓. UNRESOLVED markers present ✓.
**47 actions** enumerated (3 power + 9 transport + 10 numeric + 3 other + 7 dimmer-set + 2 update-mode + 13 queries). Full source coverage.
Blocker before ingest: **wrong device**. Source = CD player protocol. Need correct RC-970BX MkII RS-232 doc, or re-key spec under CD-player entity. Want me (a) keep CD spec as-is under new entity, or (b) wait for real RC-970BX source?
## Provenance
```yaml
source_domains:
- rotel.com
source_urls:
- "https://rotel.com/sites/default/files/product/rs232/CD14-CD14MKII-CD11-CD11MKII%20Protocol.pdf"
retrieved_at: 2026-07-01T14:28:48.897Z
last_checked_at: 2026-07-07T12:32:43.211Z
Verification Summary
verdict: verified
checked_at: 2026-07-07T12:32:43.211Z
matched_actions: 47
action_count: 47
confidence: medium
summary: "All 47 spec actions matched verbatim in source; 100% coverage; all transport parameters confirmed. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source document does not match the requested device (RC-970BX MkII). See mismatch warning above."
- "firmware version compatibility not stated in source."
- "no safety, interlock, or power-sequencing content in source."
- "no multi-step sequences described in source."
- "PRIMARY ISSUE — source document covers CD11/CD11MKII/CD14/CD14MKII CD players, NOT the requested Rotel RC-970BX MkII preamplifier. entity_id/spec_id retain the operator slug for traceability only; this spec does NOT describe the RC-970BX MkII. Re-source or re-key before ingest."
- "firmware version compatibility range not stated in source."
- "no voltage/current/power specs, fault behavior, or error recovery sequences in source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0