Summary
The Rotel RDV-1092 is a DVD-Audio/Video player with a Computer I/O (RS-232) control port. This spec covers the RS-232 protocol used by an external controller to operate the unit's transport, playback, OSD, and disc-handling functions. Frames are fixed-length byte sequences with sync byte 0xFE, count, device ID (0x01 decoder -> controller, 0x02 controller -> decoder), opcode, optional two data bytes, and a checksum. The protocol is shared with the RDV-1093 sibling; the underlying byte-level command set is the CS98200 reference design (Videon Central, Serial Interface Design Specification rev 1.22, 2005/05/19).
Transport
protocols:
- serial
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: UNRESOLVED # source does not state authentication requirements
Traits
- powerable # inferred from Power On / Power Off commands
- queryable # inferred from Get Status and unsolicited status messages
Actions
# Standard commands (5-byte frames). All hex bytes verbatim from Rotel
# RDV 1092 / RDV 1093 RS232 Controller Command List. Source: Videon Central
# Serial Interface Design Specification rev 1.22 (2005/05/19), CS98200.
- id: eject
label: Eject
kind: action
command: "FE 02 02 01 05"
params: []
- id: power_on
label: Power On
kind: action
command: "FE 02 02 02 06"
params: []
- id: power_off
label: Power Off
kind: action
command: "FE 02 02 03 07"
params: []
- id: play
label: Play
kind: action
command: "FE 02 02 04 08"
params: []
- id: stop
label: Stop
kind: action
command: "FE 02 02 05 09"
params: []
- id: pause
label: Pause
kind: action
command: "FE 02 02 06 0A"
params: []
- id: track_up
label: Track Up
kind: action
command: "FE 02 02 07 0B"
params: []
- id: track_down
label: Track Down
kind: action
command: "FE 02 02 08 0C"
params: []
- id: slow_forward
label: Slow Forward
kind: action
command: "FE 02 02 09 0D"
params: []
- id: fast_forward
label: Fast Forward
kind: action
command: "FE 02 02 0A 0E"
params: []
- id: angle_toggle
label: Angle Toggle
kind: action
command: "FE 02 02 0C 10"
params: []
- id: display
label: Display (OSD status bar)
kind: action
command: "FE 02 02 0D 11"
params: []
- id: restore_factory_defaults
label: Restore Factory Defaults
kind: action
command: "FE 02 02 0E 12"
params: []
- id: frame_forward
label: Frame Forward
kind: action
command: "FE 02 02 10 14"
params: []
- id: slow_reverse
label: Slow Reverse
kind: action
command: "FE 02 02 11 15"
params: []
- id: fast_reverse
label: Fast Reverse
kind: action
command: "FE 02 02 12 16"
params: []
- id: cursor_up
label: Cursor Up
kind: action
command: "FE 02 02 13 17"
params: []
- id: cursor_left
label: Cursor Left
kind: action
command: "FE 02 02 14 18"
params: []
- id: cursor_right
label: Cursor Right
kind: action
command: "FE 02 02 15 19"
params: []
- id: cursor_down
label: Cursor Down
kind: action
command: "FE 02 02 16 1A"
params: []
- id: enter
label: Enter
kind: action
command: "FE 02 02 17 1B"
params: []
- id: disc_menu
label: Disc Menu
kind: action
command: "FE 02 02 18 1C"
params: []
- id: repeat_cycle
label: Repeat (cycle)
kind: action
command: "FE 02 02 19 1D"
params: []
- id: repeat_track
label: Repeat Track
kind: action
command: "FE 02 02 1A 1E"
params: []
- id: random_toggle
label: Random (toggle)
kind: action
command: "FE 02 02 1B 1F"
params: []
- id: audio_next
label: Audio (next track)
kind: action
command: "FE 02 02 1C 20"
params: []
- id: subtitle_next
label: Subtitle (next)
kind: action
command: "FE 02 02 1D 21"
params: []
- id: help
label: Help
kind: action
command: "FE 02 02 1F 23"
params: []
- id: return
label: Return
kind: action
command: "FE 02 02 20 24"
params: []
- id: title_menu
label: Title Menu
kind: action
command: "FE 02 02 21 25"
params: []
- id: repeat_chapter
label: Repeat Chapter
kind: action
command: "FE 02 02 22 26"
params: []
- id: repeat_title
label: Repeat Title
kind: action
command: "FE 02 02 23 27"
params: []
- id: repeat_disc
label: Repeat Disc
kind: action
command: "FE 02 02 24 28"
params: []
- id: ab_repeat
label: A-B Repeat
kind: action
command: "FE 02 02 25 29"
params: []
- id: repeat_off
label: Repeat Off
kind: action
command: "FE 02 02 26 2A"
params: []
- id: random_on
label: Random On
kind: action
command: "FE 02 02 27 2B"
params: []
- id: random_off
label: Random Off
kind: action
command: "FE 02 02 28 2C"
params: []
- id: number_0
label: Number 0
kind: action
command: "FE 02 02 29 2D"
params: []
- id: number_1
label: Number 1
kind: action
command: "FE 02 02 2A 2E"
params: []
- id: number_2
label: Number 2
kind: action
command: "FE 02 02 30 34"
params: []
- id: number_3
label: Number 3
kind: action
command: "FE 02 02 31 35"
params: []
- id: number_4
label: Number 4
kind: action
command: "FE 02 02 32 36"
params: []
- id: number_5
label: Number 5
kind: action
command: "FE 02 02 33 37"
params: []
- id: number_6
label: Number 6
kind: action
command: "FE 02 02 34 38"
params: []
- id: number_7
label: Number 7
kind: action
command: "FE 02 02 35 39"
params: []
- id: number_8
label: Number 8
kind: action
command: "FE 02 02 36 3A"
params: []
- id: number_9
label: Number 9
kind: action
command: "FE 02 02 37 3B"
params: []
- id: zoom
label: Zoom
kind: action
command: "FE 02 02 2E 32"
params: []
- id: plus_10
label: +10
kind: action
command: "FE 02 02 2F 33"
params: []
- id: page_up
label: Page Up
kind: action
command: "FE 02 02 38 3C"
params: []
- id: page_down
label: Page Down
kind: action
command: "FE 02 02 39 3D"
params: []
- id: set_tv_mode
label: Set TV Mode
kind: action
command: "FE 03 02 3B {mode} {checksum}"
params:
- name: mode
type: integer
description: "0 = interlaced, 1 = progressive"
- name: checksum
type: integer
description: "Sum of count (0x03) + ID (0x02) + opcode (0x3B) + mode, masked to 0xFF"
- id: osd_menu_toggle
label: OSD Setup Menu (toggle)
kind: action
command: "FE 02 02 41 45"
params: []
- id: osd_menu_hide
label: OSD Menu Hide (internal)
kind: action
command: "FE 02 02 42 46"
params: []
- id: configure_serial_interface
label: Configure Serial Interface
kind: action
command: "FE 06 02 43 {rx_status_ms} {req_timeout_ms} {status_bar_s} {menu_s} {checksum}"
params:
- name: rx_status_ms
type: integer
description: "Receive status interval in 100 ms units. 0xFF = default (500 ms)."
- name: req_timeout_ms
type: integer
description: "Response timeout in 100 ms units. 0xFF = default (1000 ms)."
- name: status_bar_s
type: integer
description: "Status bar view time in seconds. Default 5."
- name: menu_s
type: integer
description: "Menu view time in seconds. Default 30."
- name: checksum
type: integer
description: "Sum of count + ID + opcode + 4 data bytes, masked to 0xFF"
- id: set_volume_level
label: Set Volume Level
kind: action
command: "FE 03 02 45 {level} {checksum}"
params:
- name: level
type: integer
description: "0-100. Per source note: only updates the OSD status bar, does not actually set decoder-board analog volume."
- name: checksum
type: integer
description: "Sum of count + ID + opcode + level, masked to 0xFF"
- id: set_mute_mode
label: Set Mute Mode
kind: action
command: UNRESOLVED
description: "UNRESOLVED: source 6.1.64 lists count 3, ID 0x01 and opcode 0x4B, but sections 5.1.3 and 6.1 identify controller commands with ID 0x02. The Rotel command list does not resolve this conflict. The applicable ID byte and complete wire command remain unresolved."
params:
- name: mode
type: integer
description: "0 = mute, 1 = un-mute. Per source note: only updates OSD status bar, does not actually set decoder mute state."
- name: checksum
type: integer
description: "Sum of count + ID + opcode + mode, masked to 0xFF. UNRESOLVED: the ID byte used in this calculation is disputed in the source."
- id: clear_osd
label: Clear (OSD)
kind: action
command: "FE 02 02 4C 50"
params: []
- id: initialize_external_data
label: Initialize External Data
kind: action
command: "FE {count} 02 4D {data...} {checksum}"
params:
- name: data
type: bytes
description: "Source marks payload as <TBD>; all parameters stored external to decoder board. UNRESOLVED: exact payload length and bytes not specified in source."
- id: parental_lock
label: Parental Lock (internal)
kind: action
command: "FE 02 02 4E 52"
params: []
- id: display_password
label: Display Password
kind: action
command: "FE 02 02 4F 53"
params: []
- id: get_software_version
label: Get Software Version
kind: query
command: "FE 02 02 50 54"
params: []
- id: disable_auto_status
label: Disable Auto-Status
kind: action
command: "FE 02 02 51 55"
params: []
- id: get_status
label: Get Status
kind: query
command: "FE 02 02 52 56"
params: []
- id: enable_auto_status
label: Enable Auto-Status
kind: action
command: "FE 02 02 53 57"
params: []
- id: request_acknowledgement
label: Request Acknowledgement
kind: action
command: "FE 04 02 54 {status} {opcode} {checksum}"
params:
- name: status
type: integer
description: "0 = pass, 1 = fail"
- name: opcode
type: integer
description: "Opcode of the request being acknowledged"
- name: checksum
type: integer
description: "Sum of count + ID + opcode + 2 data bytes, masked to 0xFF"
- id: set_audio_format
label: Set Audio Format
kind: action
command: "FE 03 02 5B {format} {checksum}"
params:
- name: format
type: integer
description: "Audio format code 0-102 (e.g. 0=Direct, 2=Stereo, 11=Dolby Digital, 73=DVD, 91=DVD-A, 102=Auto)."
- name: checksum
type: integer
description: "Sum of count + ID + opcode + format, masked to 0xFF"
- id: time_search
label: Time Search
kind: action
command: "FE 02 02 5C 60"
params: []
- id: dlist_next
label: DLIST Next
kind: action
command: "FE 02 02 78 7B"
params: []
- id: dlist_previous
label: DLIST Previous
kind: action
command: "FE 02 02 79 7C"
params: []
- id: dlist_goto
label: DLIST Go-To
kind: action
command: "FE 04 02 7A {dlist_msb} {dlist_lsb} {checksum}"
params:
- name: dlist_msb
type: integer
description: "DLIST number MSB"
- name: dlist_lsb
type: integer
description: "DLIST number LSB"
- name: checksum
type: integer
description: "Sum of count + ID + opcode + 2 data bytes, masked to 0xFF"
- id: dlist_home
label: DLIST Home
kind: action
command: "FE 02 02 7B 7F"
params: []
- id: memset
label: MemSet (DVDV bookmark)
kind: action
command: "FE 02 02 7C 80"
params: []
- id: memrecall
label: MemRecall (DVDV bookmark)
kind: action
command: "FE 02 02 7D 81"
params: []
- id: is_alive
label: Is Alive
kind: query
command: "FE 02 02 80 84"
params: []
- id: repeat_last_message
label: Repeat Last Message
kind: action
command: "FE 02 02 81 85"
params: []
- id: memory_write
label: Memory Write (debug)
kind: action
command: "FE 0A 02 82 {addr_msb} {addr2} {addr3} {addr_lsb} {data_msb} {data2} {data3} {data_lsb} {checksum}"
params:
- name: addr_msb
type: integer
description: "Address MSB"
- name: addr2
type: integer
description: "Address byte 2"
- name: addr3
type: integer
description: "Address byte 3"
- name: addr_lsb
type: integer
description: "Address LSB"
- name: data_msb
type: integer
description: "Data MSB"
- name: data2
type: integer
description: "Data byte 2"
- name: data3
type: integer
description: "Data byte 3"
- name: data_lsb
type: integer
description: "Data LSB"
- name: checksum
type: integer
description: "Sum of count + ID + opcode + 8 data bytes, masked to 0xFF"
- id: memory_read
label: Memory Read (debug)
kind: query
command: "FE 06 02 83 {addr_msb} {addr2} {addr3} {addr_lsb} {checksum}"
params:
- name: addr_msb
type: integer
description: "Address MSB"
- name: addr2
type: integer
description: "Address byte 2"
- name: addr3
type: integer
description: "Address byte 3"
- name: addr_lsb
type: integer
description: "Address LSB"
- name: checksum
type: integer
description: "Sum of count + ID + opcode + 4 data bytes, masked to 0xFF"
- id: device_set
label: Device Set
kind: action
command: "FE {count} 02 2B {device_id} {parameter} {data_length} {data...} {checksum}"
params:
- name: device_id
type: integer
description: "0 = CS98200, 1 = Scalar, 3 = MCU"
- name: parameter
type: integer
description: "Device parameter selector"
- name: data_length
type: integer
description: "Length of data payload"
- name: data
type: bytes
description: "Device-specific data"
- name: checksum
type: integer
description: "Sum of count + ID + opcode + data bytes, masked to 0xFF"
- id: device_get
label: Device Get
kind: query
command: "FE {count} 02 2C {device_id} {parameter} {checksum}"
params:
- name: device_id
type: integer
description: "0 = CS98200, 1 = Scalar, 3 = MCU"
- name: parameter
type: integer
description: "Device parameter selector"
- name: checksum
type: integer
description: "Sum of count + ID + opcode + 2 data bytes, masked to 0xFF"
- id: jump
label: Jump (chapter/track/title)
kind: action
command: "FE 04 02 1E {data1} {data2} {checksum}"
params:
- name: data1
type: integer
description: "DVDV: chapter. DVDA/CD/MP3: track. MSB; low byte typically 0x00 for 1-255."
- name: data2
type: integer
description: "DVDV: title. DVDA: group. CD/MP3: index (not referenced)."
- name: checksum
type: integer
description: "Sum of count (0x04) + ID (0x02) + opcode (0x1E) + data1 + data2, masked to 0xFF"
- id: un_rated_disc
label: Un-Rated Disc
kind: action
command: "0xFE 2 0x02 0x0B ------- 0x0F"
description: "Source 6.1.11 table copied verbatim; ------- denotes no data. Internal use when the decoder manages the OSD; external use when the external controller manages the OSD."
params: []
- id: status_timer_expired
label: Status Timer Expired
kind: action
command: "0xFE 2 0x02 0x5D ------- 0x61"
description: "Source 6.1.82 table copied verbatim; ------- denotes no data. Internal use only. The command table specifies ID 0x02."
params: []
- id: show_source
label: Show Source
kind: action
command: "0xFE 2 0x02 0x5E ------- 0x62"
description: "Source 6.1.83 table copied verbatim; ------- denotes no data. Internal use only. The command table specifies ID 0x02."
params: []
- id: mcu_set_mp3_track_name
label: MCU Set MP3 Track Name
kind: action
command: "0xFE 13 0x01 0x6D Data Varies"
description: "Source 6.2.13 table copied verbatim. Decoder -> controller request. Data and Varies are source table placeholders. UNRESOLVED: table count 13 conflicts with the described variable track-name payload."
params:
- name: data
type: bytes
description: "Data[0-50]: MP3 Track Name (includes the terminating null character)"
- name: checksum
type: integer
description: "UNRESOLVED: complete wire encoding must resolve the source count/payload conflict."
- id: mcu_command_acknowledgement
label: MCU Command Acknowledgement
kind: action
command: "0xFE 4 0x01 0x70 Data Varies"
description: "Source 6.2.16 table copied verbatim. Decoder -> controller acknowledgement. Data and Varies are source table placeholders."
params:
- name: status
type: integer
description: "Pass (command in processing queue) =0; Fail (incorrect check sum) =1; Busy (processing queue is full) =2; Not Supported (command invalid) =3"
- name: opcode
type: integer
description: "Opcode of the command being acknowledged. UNRESOLVED: parameter range not stated."
- name: checksum
type: integer
description: "UNRESOLVED: source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it."
- id: mcu_unsolicited_status
label: MCU Unsolicited Status
kind: action
command: "0xFE 16 0x01 0x72 Data Varies"
description: "Source 6.2.17 table copied verbatim. Decoder -> controller status; no acknowledgement expected. Data and Varies are source table placeholders. See Feedbacks.unsolicited_status for the 14-byte payload."
params:
- name: data
type: bytes
description: "14 data bytes. See Feedbacks.unsolicited_status and its decoded fields."
- name: checksum
type: integer
description: "UNRESOLVED: source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it."
- id: mcu_send_software_version
label: MCU Send Software Version
kind: action
command: "0xFE 6 0x01 0x73 Version Varies"
description: "Source 6.2.18 table copied verbatim. Decoder -> controller reply to Get Software Version. Version and Varies are source table placeholders."
params:
- name: version
type: bytes
description: "Four data bytes: Cirrus Code Version First Number, Cirrus Code Version Middle Number, Cirrus Code Version Last Number, Revision Number. UNRESOLVED: version-component ranges not stated."
- name: checksum
type: integer
description: "UNRESOLVED: source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it."
- id: mcu_menu_up
label: MCU Menu Up
kind: action
command: "0xFE 2 0x01 0x74 ------- 0x77"
description: "Source 6.2.19 table copied verbatim; ------- denotes no data. Internal use only."
params: []
- id: mcu_status_bar_up
label: MCU Status Bar Up
kind: action
command: "0xFE 2 0x01 0x75 ------- 0x78"
description: "Source 6.2.20 table copied verbatim; ------- denotes no data. Internal use only."
params: []
- id: mcu_restrict_content_on
label: MCU Restrict Content On
kind: action
command: "0xFE 2 0x01 0x76 ------- 0x79"
description: "Source 6.2.21 table copied verbatim; ------- denotes no data. Internal use only."
params: []
- id: mcu_restrict_content_off
label: MCU Restrict Content Off
kind: action
command: "0xFE 2 0x01 0x77 ------- 0x7A"
description: "Source 6.2.22 table copied verbatim; ------- denotes no data. Internal use only."
params: []
- id: mcu_send_memory_read_result
label: MCU Send Memory Read Result
kind: action
command: "0xFE 6 0x01 0x84 Data Varies"
description: "Source 6.2.23 table copied verbatim. Decoder -> controller reply to Memory Read; debugging only. Data and Varies are source table placeholders."
params:
- name: data
type: bytes
description: "Data[0-3]: Contents of memory location, where Data[0] is the MSB and Data[3] is the LSB. UNRESOLVED: memory-content range not stated."
- name: checksum
type: integer
description: "UNRESOLVED: source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it."
- id: mcu_set_unsolicited_error
label: MCU Set Unsolicited Error
kind: action
command: "0xFE 3 0x01 0x7E Data Varies"
description: "Source 6.2.24 table copied verbatim. Decoder -> controller unsolicited error. Data and Varies are source table placeholders."
params:
- name: error_code
type: integer
description: "Invalid Region Code =0; Operation Not Possible =1; Unsupported Disc =2"
- name: checksum
type: integer
description: "UNRESOLVED: source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it."
- id: device_send_get_result
label: Device Send Get Result
kind: action
command: "0xFE Varies 0x01/0x02 0x2D Data Varies"
description: "Source 6.3.3 table copied verbatim. Sends the result of the previous Device Get in either direction. Varies, 0x01/0x02, and Data are source table notation requiring substitution."
params:
- name: device_id
type: integer
description: "DEVICE_98200 = 0, DEVICE_SCALAR = 1, RESERVED = 2, DEVICE_MCU = 3"
- name: parameter
type: integer
description: "Parameter (Output Format, Video Format, etc.). UNRESOLVED: complete parameter range not stated."
- name: data_length
type: integer
description: "Device data length. UNRESOLVED: range depends on the device and parameter."
- name: data
type: bytes
description: "Device data. UNRESOLVED: contents depend on the requested device and parameter."
- name: checksum
type: integer
description: "UNRESOLVED: source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it."
Feedbacks
- id: command_ack
label: Command Acknowledgement
type: object
description: "Decoder -> controller. ID 0x01, opcode 0x70. Data[0] = status (0=pass queued, 1=fail bad checksum, 2=busy queue full, 3=not supported). Data[1] = opcode being acknowledged. Sent after every received command."
- id: unsolicited_status
label: Unsolicited Status
type: object
description: "Decoder -> controller. ID 0x01, opcode 0x72. 14 data bytes: system status byte (byte 1), disc type (byte 2), sampling frequency (byte 3), transport state (byte 4), audio format (byte 5), chapter (byte 6), title/track (byte 7), time hours/format (byte 8), time minutes (byte 9), time seconds (byte 10), angle (byte 11), repeat/random mode (byte 12), audio channel config (byte 13), video status (byte 14). Sent periodically when auto-status is enabled (default). Decoder does not expect ack."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: software_version
label: Software Version
type: object
description: "Decoder -> controller. ID 0x01, opcode 0x73. Four bytes: Cirrus code major, middle, minor, revision number (e.g. 1.2.3.4 = Cirrus 1.2.3, revision 4). Sent in response to Get Software Version."
query_command: "0xFE 2 0x02 0x50 ------- 0x54"
- id: mp3_track_name
label: MP3 Track Name
type: string
description: "Decoder -> controller. ID 0x01, opcode 0x6D. Up to 50 data bytes plus null terminator (Data[0-50]). Sent to controller for VFD display during MP3 playback."
- id: memory_read_result
label: Memory Read Result
type: object
description: "Decoder -> controller. ID 0x01, opcode 0x84. Four data bytes (MSB..LSB) containing memory contents from previous Memory Read command. Sent in response to Memory Read (debug)."
query_command: "0xFE 6 0x02 0x83 Data Varies"
- id: device_get_result
label: Device Get Result
type: object
description: "Source 6.3.3: opcode 0x2D sends the result of a previous Device Get in either direction (ID 0x01 from decoder, ID 0x02 from controller). Data[0] = device ID, Data[1] = parameter, Data[2] = device data length, Data[3...n] = device data. Count varies with payload length. Device-specific result contents depend on the requested parameter; unspecified contents remain UNRESOLVED."
query_command: "0xFE Varies 0x01/0x02 0x2C Data Varies"
- id: unsolicited_error
label: Unsolicited Error
type: enum
values: [invalid_region_code, operation_not_possible, unsupported_disc]
description: "Decoder -> controller. ID 0x01, opcode 0x7E. Data[0] error code: 0=Invalid Region Code, 1=Operation Not Possible, 2=Unsupported Disc."
- id: transport_state
label: Transport State
type: enum
values: [stop, play, pause, forward_step, reverse_step, forward_1_8, reverse_1_8, forward_1_4, reverse_1_4, forward_1_2, reverse_1_2, forward_2x, reverse_2x, forward_4x, reverse_4x, forward_8x, reverse_8x, forward_16x, reverse_16x, forward_30x, reverse_30x, forward_60x, reverse_60x, reading_new_disc]
description: "From unsolicited status byte 4 of data payload. Codes 0-23."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: disc_type
label: Disc Type
type: enum
values: [dvd_video, dvd_audio, cdda, file, file_urd, update, bad, none, unknown, vcd]
description: "From unsolicited status byte 2 of data payload. Codes 0-9."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: audio_sampling_frequency
label: Audio Sampling Frequency
type: enum
values: [unknown, fs_8000, fs_11025, fs_12000, fs_16000, fs_22050, fs_24000, fs_32000, fs_44100, fs_48000, fs_64000, fs_88200, fs_96000, fs_128000, fs_176400, fs_192000, spdif]
description: "From unsolicited status byte 3 of data payload. Codes 0-16."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: audio_format
label: Audio Format
type: enum
values: [unknown, ac3, mpeg1, mpeg2, pcm, dts, sdds, mp3, wma, dvd_audio_pcm, mlp, aac, png, hdcd, mp3enc, none]
description: "From unsolicited status byte 5 of data payload. Codes 0-15."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: repeat_random_mode
label: Repeat / Random Mode
type: enum
values: [off, repeat_set_a, repeat_ab, repeat_disc, repeat_title, repeat_chapter, repeat_track, random_title, random_chapter, random_track]
description: "From unsolicited status byte 12 of data payload. Codes 0-9."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: audio_channel_configuration
label: Audio Channel Configuration
type: object
description: "From unsolicited status byte 13 of data payload. Bits 0-3 = input channel configuration (0=dual mono 1/0+1/0, 1=mono 1/0, 2=L,R 2/0, 3=L,C,R 3/0, 4=L,R,S 2/1, 5=L,C,R,S 3/1, 6=L,R,Ls,Rs 2/2, 7=L,C,R,Ls,Rs 3/2). Bit 7 = LFE input (0=absent, 1=present)."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: video_status
label: Video Status
type: object
description: "From unsolicited status byte 14 of data payload. Bits 0-1 = aspect ratio (0=16:9 WS, 1=4:3 LB, 2=4:3 PS). Bit 2 = composite (0=off, 1=on). Bit 3 = output format (0=NTSC, 1=PAL). Bit 4 = CDDA navigator queue (0=empty, 1=full)."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
- id: system_status
label: System Status
type: object
description: "From unsolicited status byte 1 of data payload. Bit 0 = power (0=off, 1=on). Bit 1 = disc (0=no disc, 1=disc). Bit 2 = drawer (0=open, 1=closed). Bit 3 = OSD slider bar (0=off, 1=on). Bit 4 = OSD status bar (0=off, 1=on). Bit 5 = digital audio output (0=DVD audio, 1=encoded). Bit 6 = skipping (0=not skipping, 1=skipping). Bit 7 = OSD menu (0=off, 1=on)."
query_command: "0xFE 2 0x02 0x52 ------- 0x56"
Events
- id: command_ack_event
label: Command Acknowledgement
description: "Sent by decoder after every received command. Status: pass / fail (bad checksum) / busy (queue full) / not supported. See Feedbacks.command_ack."
- id: unsolicited_status_event
label: Periodic Status Update
description: "Sent by decoder when auto-status is enabled (default). 14 data bytes describing system, disc, audio, time, repeat, video state. Decoder does not require ack. See Feedbacks.unsolicited_status."
- id: mp3_track_name_event
label: MP3 Track Name
description: "Sent by decoder to controller for VFD display during MP3 playback. Up to 50 bytes + null. See Feedbacks.mp3_track_name."
- id: unsolicited_error_event
label: Unsolicited Error
description: "Sent by decoder for region, operation, or disc errors. See Feedbacks.unsolicited_error."
- id: software_version_event
label: Software Version Reply
description: "Sent by decoder in response to Get Software Version command. Four bytes (Cirrus major/minor/minor + revision)."
- id: status_timer_expired_internal
label: Status Timer Expired
description: "Internal use only. Decoder -> decoder serial task notification that auto-status timer fired (ID 0x01, opcode 0x5D)."
- id: show_source_internal
label: Show Source
description: "Internal use only. Decoder -> decoder serial task notification that the active source was set (ID 0x01, opcode 0x5E)."
- id: mcu_menu_up_internal
label: MCU Menu Up
description: "Internal use only. Decoder -> decoder serial task notification that OSD menu is active (ID 0x01, opcode 0x74)."
- id: mcu_status_bar_up_internal
label: MCU Status Bar Up
description: "Internal use only. Decoder -> decoder serial task notification that OSD status bar is active (ID 0x01, opcode 0x75)."
- id: mcu_restrict_content_on_internal
label: MCU Restrict Content On
description: "Internal use only. Decoder -> decoder serial task notification to begin restricting un-rated content (ID 0x01, opcode 0x76)."
- id: mcu_restrict_content_off_internal
label: MCU Restrict Content Off
description: "Internal use only. Decoder -> decoder serial task notification to stop restricting content (ID 0x01, opcode 0x77)."
- id: unrated_disc_inserted
label: Un-rated Disc Inserted
description: "Controller -> decoder (ID 0x02, opcode 0x0B). Notifies of un-rated disc insertion. Internal use only when OSD is on the decoder board; external use when OSD is on the external controller."
Macros
- id: system_startup_sync
label: System Startup Synchronization
description: "External controller sends repeated 'Is Alive' commands until a Command Acknowledgement is received. Only then may normal commands proceed. Default behavior is auto-status ON (decoder emits periodic unsolicited status)."
steps:
- send: "FE 02 02 80 84"
- wait_for: command_ack_event
- on_timeout: "Retry 'Is Alive' until response. Source 7.4: if no ack after pre-determined timeout interval, begin re-issuing 'Is Alive' to verify decoder health; if no response after a pre-determined count, assume decoder is offline. Exception: decoder in firmware update mode will not ack any command."
Safety
confirmation_required_for:
- restore_factory_defaults # source 6.1.14: only valid when no disc in drive
interlocks:
- "Do not reset decoder board during firmware update; it will not acknowledge commands and will appear unresponsive. (Source 6.1.86 / 7.4)"
- "Frame Forward command requires system to be in Pause mode; ignored otherwise. (Source 6.1.15)"
- "Restore Factory Defaults only valid when no disc is in the drive. (Source 6.1.14)"
- "Angle Toggle command is only valid for DVDV discs with multi-angle scenes; ignored if any OSD is present. (Source 6.1.12)"
- "External controller must receive a Command Acknowledgement for each issued command; if not, time out and re-issue Is Alive to confirm decoder health. (Source 7.4)"
- "If decoder does not acknowledge a request, it times out and re-issues the request; meanwhile it rejects new commands and ACKs them with 'busy' status. (Source 7.5)"
- "Set Volume Level and Set Mute Mode only update the OSD status bar; they do not actually change decoder-board analog volume or mute state. (Source 6.1.61, 6.1.64)"
- "Help command only valid when the settings-level OSD menu is active. (Source 6.1.30)"
Notes
- Source documents: Rotel first-party RS232 protocol PDF (
RDV1092 Protocol.pdf, 200 OK on rotel.com) plus the embedded Videon Central CS98200 Serial Interface Design Specification (rev 1.22, 2005/05/19). The Rotel-published "RDV 1092 / RDV 1093 RS232 Controller Command List" is a subset of the underlying CS98200 command space; this spec enumerates both Rotel's published subset and the full CS98200 command set with hex bytes verbatim from the spec, except that the conflicting Set Mute Mode wire command remains UNRESOLVED. - Frame format:
0xFE | COUNT | ID | OPCODE | [DATA1..DATA_n] | CHECKSUM. Standard commands = 5 bytes (count = 0x02, no data); Data commands vary by data length. Checksum = sum of COUNT through last data byte, masked to 0xFF. - ID byte: 0x01 = decoder -> controller, 0x02 = controller -> decoder. 0x00 reserved. Set Mute Mode is UNRESOLVED because its table in source 6.1.64 lists ID 0x01 despite its placement in the controller-to-decoder command list; the Rotel table supplies no resolving entry.
- Rotel RS232 command list omits: Help (0x1F), Un-rated Disc (0x0B), OSD Menu Hide internal (0x42), Configure Serial Interface (0x43), Set Volume Level (0x45), Set Mute Mode (0x4B), Initialize External Data (0x4D), Parental Lock internal (0x4E), Display Password (0x4F), Get Software Version (0x50), Disable Auto-Status (0x51), Get Status (0x52), Enable Auto-Status (0x53), Request Acknowledgement (0x54), Set Audio Format (0x5B), Status Timer Expired internal (0x5D), Show Source internal (0x5E), Is Alive (0x80), Repeat Last Message (0x81), Memory Write debug (0x82), Memory Read debug (0x83), DLIST Next/Previous/Go-To/Home (0x78/0x79/0x7A/0x7B), MemSet/MemRecall (0x7C/0x7D), Device Set/Get (0x2B/0x2C), Device Send Get Result (0x2D), and the Set TV Mode (0x3B). These are included here per the underlying CS98200 spec, with Device Send Get Result represented as Feedbacks.device_get_result and Set Mute Mode's wire command UNRESOLVED, but a Rotel-published integrator should be aware that the unit's response surface may be narrower.
- RDV-1092 shares the Computer I/O behavior with RDV-1093 (Rotel table covers both models).
- UART electrical: LVTTL RS-232 via MAX232 transceiver; RX and TX only, no CTS/RTS (source 8.1).
- Several "internal use only" messages (0x42, 0x4E, 0x5D, 0x5E, 0x74, 0x75, 0x76, 0x77) are decoder-internal signals and are not useful to a third-party controller.
- "Initialize External Data" (0x4D) source marks payload as
<TBD>- exact data length and bytes not specified. - "Device Set" / "Device Get" (0x2B / 0x2C) use generic device/parameter addressing; parameter list and behaviors are in the CS98200 Device Interface Specification, not in the Serial Interface Design Specification. Only Video Format, Memory Access, Audio Hardware Status, and Video DAC Control are explicitly enumerated in the supplied source.
- Auto-status default is ON. Disable via Disable Auto-Status (0x51); re-enable via Enable Auto-Status (0x53); one-shot poll via Get Status (0x52).
Provenance
source_domains:
- rotel.com
source_urls:
- "https://www.rotel.com/sites/default/files/product/rs232/RDV1092%20Protocol.pdf"
- https://www.rotel.com/manuals-resources/rs232-protocols
retrieved_at: 2026-07-25T13:57:27.838Z
last_checked_at: 2026-10-07T16:11:48.124Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T16:11:48.124Z
matched_actions: 107
action_count: 107
confidence: medium
summary: "All 107 action units match source opcodes and checksums and serial parameters are confirmed; only device-parameter sub-tables (about 4) are unmodeled, within the 0.9 floor. (19 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "IP/Ethernet control, network port, and any other transport interfaces are not documented in the supplied source."
- "authentication requirements and any control-interface login procedure are not described in the supplied source."
- "source 6.1.64 lists count 3, ID 0x01 and opcode 0x4B, but sections 5.1.3 and 6.1 identify controller commands with ID 0x02. The Rotel command list does not resolve this conflict. The applicable ID byte and complete wire command remain unresolved.\""
- "the ID byte used in this calculation is disputed in the source.\""
- "exact payload length and bytes not specified in source.\""
- "table count 13 conflicts with the described variable track-name payload.\""
- "complete wire encoding must resolve the source count/payload conflict.\""
- "parameter range not stated.\""
- "source 5.1.6 omits opcode from its checksum prose, while fixed-command tables include it.\""
- "version-component ranges not stated.\""
- "memory-content range not stated.\""
- "complete parameter range not stated.\""
- "range depends on the device and parameter.\""
- "contents depend on the requested device and parameter.\""
- "IP/Ethernet control not documented in the supplied source."
- "Port number, auth credentials, and network configuration are not described in the supplied source."
- "Voltage, current, and power specifications not stated."
- "Firmware version compatibility range not stated."
- "Initialize External Data (0x4D) payload length and bytes marked <TBD> in source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0