Summary
RS-232 and IP control protocol for Arcam AV receivers (AVR390/AVR550/AVR850/AV860) and stereo receiver SR250. Transport: 38400 bps 8N1 serial null-modem, and TCP port 50000 for IP control. Commands use a framed byte protocol 0x21 {zone} {cc} {dl} {data} 0x0D and most device functions are reachable via the Simulate RC5 IR command (0x08). Also supports AMX Duet "AMX\r" discovery.
Transport
protocols:
- serial
- tcp
serial:
baud_rate: 38400
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
addressing:
port: 50000
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred from power command examples (0x00 query, RC5 power on/off)
- routable # inferred from input select commands (0x0A, 0x0B, source map 0x1D)
- queryable # inferred from extensive state query commands
- levelable # inferred from volume (0x0D), treble/bass (0x35/0x36), balance (0x3B), sub trim (0x3F/0x45) commands
Actions
# Each command is a framed byte sequence:
# 0x21 {zone} {cc} {dl} {data...} 0x0D
# where {zone} = 0x01 (Zone 1 / master) or 0x02 (Zone 2)
# {cc} = command code (hex)
# {dl} = data length byte (number of data bytes that follow, excludes ETR)
# {data...} = command-specific payload
# 0x0D = end of transmission
#
# Response format:
# 0x21 {zone} {cc} {ac} {dl} {data...} 0x0D
# where {ac} = answer code: 0x00 status, 0x82 zone invalid, 0x83 cmd unknown,
# 0x84 param unknown, 0x85 invalid at this time,
# 0x86 invalid data length
# AV responds within 3 seconds per command.
# Commands 0xF0-0xFF are reserved (test) and must not be used.
- id: power_state_request
label: Request Power State (Zone)
kind: query
command: "0x21 {zone} 0x00 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: display_brightness_request
label: Request Display Brightness
kind: query
command: "0x21 {zone} 0x01 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: headphones_status_request
label: Request Headphone Connection Status
kind: query
command: "0x21 {zone} 0x02 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: fm_genre_request
label: Request FM Programme Type
kind: query
command: "0x21 {zone} 0x03 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: software_version_request
label: Request Software Version
kind: query
command: "0x21 {zone} 0x04 0x01 {selector} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: selector
type: integer
description: "0xF0=RS232 protocol, 0xF1=Host, 0xF2=OSD, 0xF3=DSP, 0xF4=NET, 0xF5=IAP"
- id: restore_factory_defaults
label: Restore Factory Default Settings
kind: action
command: "0x21 0x01 0x05 0x02 0xAA 0xAA 0x0D"
params: []
- id: save_restore_secure_settings
label: Save/Restore Secure Copy of Settings
kind: action
command: "0x21 0x01 0x06 0x07 {mode} 0x55 0x55 {d1} {d2} {d3} {d4} 0x0D"
params:
- name: mode
type: integer
description: "0x00=Save secure backup, 0x01=Restore secure backup"
- name: d1
type: integer
description: PIN digit 1
- name: d2
type: integer
description: PIN digit 2
- name: d3
type: integer
description: PIN digit 3
- name: d4
type: integer
description: PIN digit 4
- id: simulate_rc5_ir
label: Simulate RC5 IR Command
kind: action
command: "0x21 {zone} 0x08 0x02 {rc5_system} {rc5_command} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: rc5_system
type: integer
description: RC5 system code (e.g. 0x10 for AV system, 0x17 for Zone 2)
- name: rc5_command
type: integer
description: RC5 command code (see RC5 table in source)
- id: display_info_type
label: Set/Request VFD Display Information Type
kind: action
command: "0x21 {zone} 0x09 0x01 {info_type} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: info_type
type: integer
description: "0x00=Processing, 0xE0=Cycle, 0xF0=Request; FM: 0x01=Radio text, 0x02=Programme type, 0x03=Signal strength; DAB: 0x01=Radio text, 0x02=Genre, 0x03=Signal quality, 0x04=Bit rate; NET/USB: 0x01=Track, 0x02=Artist, 0x03=Album, 0x04=Audio type, 0x05=Rate"
- id: request_current_source
label: Request Current Source
kind: query
command: "0x21 {zone} 0x1D 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: headphone_override
label: Headphone Over-ride (Mute Relays)
kind: action
command: "0x21 {zone} 0x1F 0x01 {state} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: state
type: integer
description: "0x00=Clear (speakers muted if headphones present), 0x01=Set (speakers unmuted if headphones present)"
- id: video_selection
label: Video Selection
kind: action
command: "0x21 0x01 0x0A 0x01 {source} 0x0D"
params:
- name: source
type: integer
description: "0x00=BD, 0x01=SAT, 0x02=AV, 0x03=PVR, 0x04=VCR, 0x05=Game, 0x06=STB, 0xF0=Request current input"
- id: select_audio_input
label: Select Analogue/Digital/HDMI Audio Input
kind: action
command: "0x21 {zone} 0x0B 0x01 {mode} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: mode
type: integer
description: "0x00=Analogue, 0x01=Digital, 0x02=HDMI, 0xF0=Request audio type"
- id: set_request_volume
label: Set/Request Volume
kind: action
command: "0x21 {zone} 0x0D 0x01 {level} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: level
type: integer
description: "0x00-0x63 (0-99) volume in dB; 0xF0=Request current volume"
- id: request_mute_status
label: Request Mute Status
kind: query
command: "0x21 {zone} 0x0E 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_direct_mode_status
label: Request Direct Mode Status
kind: query
command: "0x21 0x01 0x0F 0x01 0xF0 0x0D"
params: []
- id: request_decode_mode_2ch
label: Request Decode Mode (2ch)
kind: query
command: "0x21 0x01 0x10 0x01 0xF0 0x0D"
params: []
- id: request_decode_mode_mch
label: Request Decode Mode (MCH)
kind: query
command: "0x21 0x01 0x11 0x01 0xF0 0x0D"
params: []
- id: request_rds_information
label: Request RDS Information (FM)
kind: query
command: "0x21 {zone} 0x12 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_video_output_resolution
label: Request Video Output Resolution
kind: query
command: "0x21 0x01 0x13 0x01 0xF0 0x0D"
params: []
- id: request_menu_status
label: Request Open Menu Status
kind: query
command: "0x21 0x01 0x14 0x01 0xF0 0x0D"
params: []
- id: request_tuner_preset
label: Request/Set Tuner Preset
kind: action
command: "0x21 {zone} 0x15 0x01 {preset} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: preset
type: integer
description: "0x01-0x32 (1-50) preset number; 0xF0=Request current preset"
- id: tune_frequency
label: Tune (Increment/Decrement/Request FM)
kind: action
command: "0x21 {zone} 0x16 0x01 {direction} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: direction
type: integer
description: "0x00=Decrement 1 step (0.05 MHz), 0x01=Increment 1 step, 0xF0=Request current frequency"
- id: request_dab_station
label: Request Current DAB Station
kind: query
command: "0x21 {zone} 0x18 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_dab_programme_type
label: Request DAB Programme Type
kind: query
command: "0x21 {zone} 0x19 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_dls_pdt
label: Request DLS/PDT Information (DAB)
kind: query
command: "0x21 {zone} 0x1A 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_preset_details
label: Request Preset Details
kind: action
command: "0x21 {zone} 0x1B 0x01 {preset} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: preset
type: integer
description: "0x01-0x32 (1-50) preset number to query"
- id: request_network_playback_status
label: Request Network Playback Status
kind: query
command: "0x21 {zone} 0x1C 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: imax_enhanced
label: IMAX Enhanced Control
kind: action
command: "0x21 {zone} 0x0C 0x01 {state} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: state
type: integer
description: "0xF0=Request, 0xF1=Auto, 0xF2=On, 0xF3=Off"
- id: treble_equalisation
label: Treble Equalisation
kind: action
command: "0x21 {zone} 0x35 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x0C = 0dB to +12dB; 0x81-0x8C = -1dB to -12dB; 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: bass_equalisation
label: Bass Equalisation
kind: action
command: "0x21 {zone} 0x36 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x0C = 0dB to +12dB; 0x81-0x8C = -1dB to -12dB; 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: room_equalisation
label: Room Equalisation On/Off
kind: action
command: "0x21 {zone} 0x37 0x01 {state} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: state
type: integer
description: "0xF0=Request, 0xF1=On, 0xF2=Off"
- id: dolby_volume
label: Dolby Volume On/Off
kind: action
command: "0x21 {zone} 0x38 0x01 {state} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: state
type: integer
description: "0x00=Off, 0x01=On, 0xF0=Request"
- id: dolby_leveller
label: Dolby Leveller
kind: action
command: "0x21 {zone} 0x39 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x0A = setting 0-10; 0xF0=Request, 0xF1=Increment, 0xF2=Decrement, 0xFF=Off"
- id: dolby_volume_calibration_offset
label: Dolby Volume Calibration Offset
kind: action
command: "0x21 {zone} 0x3A 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x0F = 0dB to +15dB; 0x80-0x8F = -1dB to -15dB; 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: balance
label: Balance
kind: action
command: "0x21 {zone} 0x3B 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x06 = 0 to 6; 0x81-0x86 = -1 to -6; 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: subwoofer_trim
label: Subwoofer Trim
kind: action
command: "0x21 {zone} 0x3F 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x14 = positive 0.5dB steps (e.g. 0x02=+1.0dB); 0x81-0x94 = negative 0.5dB steps (e.g. 0x82=-1.0dB); 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: lipsync_delay
label: Lipsync Delay
kind: action
command: "0x21 {zone} 0x40 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00-0x32 = delay in 5ms steps (e.g. 0x08=40ms); 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: compression
label: Dynamic Range Compression
kind: action
command: "0x21 {zone} 0x41 0x01 {level} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: level
type: integer
description: "0x00=Off, 0x01=Medium, 0x02=High, 0xF0=Request"
- id: request_incoming_video_parameters
label: Request Incoming Video Parameters
kind: query
command: "0x21 {zone} 0x42 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_incoming_audio_format
label: Request Incoming Audio Format
kind: query
command: "0x21 {zone} 0x43 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: request_incoming_audio_sample_rate
label: Request Incoming Audio Sample Rate
kind: query
command: "0x21 {zone} 0x44 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: set_request_sub_stereo_trim
label: Sub Stereo Trim
kind: action
command: "0x21 {zone} 0x45 0x01 {value} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: value
type: integer
description: "0x00 = 0dB; 0x81-0x94 = -0.5dB to -10.0dB in 0.5dB steps; 0xF0=Request, 0xF1=Increment, 0xF2=Decrement"
- id: set_request_zone1_osd
label: Zone 1 OSD On/Off
kind: action
command: "0x21 0x01 0x4E 0x01 {state} 0x0D"
params:
- name: state
type: integer
description: "0xF0=Request, 0xF1=On, 0xF2=Off"
- id: set_request_video_output_switching
label: HDMI Video Output Switching
kind: action
command: "0x21 {zone} 0x4F 0x01 {output} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: output
type: integer
description: "0x02=HDMI Out 1, 0x03=HDMI Out 2, 0x04=HDMI Out 1 & 2, 0xF0=Request"
- id: set_request_input_name
label: Set/Request Input Name
kind: action
command: "0x21 {zone} 0x20 0x{n} {mode_or_chars} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: n
type: integer
description: "Data length: 0x01 for query, or ASCII length (max 10) for setting"
- name: mode_or_chars
type: string
description: "0xF0 to query, or ASCII bytes of the new name (max 10 chars)"
- id: fm_scan
label: FM Scan Up/Down
kind: action
command: "0x21 {zone} 0x23 0x01 {direction} 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- name: direction
type: integer
description: "0x01=Scan up, 0x02=Scan down"
- id: dab_scan
label: DAB Scan
kind: action
command: "0x21 {zone} 0x24 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: heartbeat
label: Heartbeat
kind: action
command: "0x21 {zone} 0x25 0x01 0xF0 0x0D"
params:
- name: zone
type: integer
description: Zone number (0x01 or 0x02)
- id: reboot
label: Reboot Unit
kind: action
command: "0x21 0x01 0x26 0x06 0x52 0x45 0x42 0x4F 0x4F 0x54 0x0D"
params: []
- id: amx_duet_discovery
label: AMX Duet Discovery
kind: action
command: '"AMX\r"'
params: []
notes: "ASCII text command. Response is a single ASCII line beginning with AMXB<Device-SDKClass=Receiver><Device-Make=ARCAM><Device-Model={AV860|AVR850|AVR550|AVR390|SR250}><Device-Revision=x.y.z> terminated by 0x0D. x.y.z is the RS232 protocol version."
Feedbacks
- id: power_state
type: enum
values: [standby, on]
notes: "From 0x00 response Data: 0x00=standby, 0x01=powered on"
- id: display_brightness
type: enum
values: [off, l1, l2]
notes: "From 0x01 response Data: 0x00=Off, 0x01=L1, 0x02=L2"
- id: headphones_connected
type: enum
values: [disconnected, connected]
notes: "From 0x02 response Data: 0x00=Not connected, 0x01=Connected"
- id: fm_programme_type
type: string
notes: "From 0x03 response: ASCII string, padded to data length"
- id: software_version
type: string
notes: "From 0x04 response: Data2=major, Data3=minor (echo of request selector in Data1)"
- id: headphone_override_state
type: enum
values: [clear, set]
notes: "From 0x1F response Data1"
- id: video_source
type: enum
values: [bd, sat, av, pvr, vcr, game, stb]
notes: "From 0x0A response; 0xF0=Request"
- id: audio_input_type
type: enum
values: [analogue, digital, hdmi]
notes: "From 0x0B response Data: 0x00=Analogue, 0x01=Digital, 0x02=HDMI"
- id: current_source
type: enum
values: [follow_zone1, cd, bd, av, sat, pvr, vcr, aux, display, tuner_fm, tuner_dab, net, usb, stb, game]
notes: "From 0x1D response Data: 0x00=Follow Z1, 0x01=CD, 0x02=BD, 0x03=AV, 0x04=SAT, 0x05=PVR, 0x06=VCR, 0x08=AUX, 0x09=Display, 0x0B=TUNER FM, 0x0C=TUNER DAB, 0x0E=NET, 0x0F=USB, 0x10=STB, 0x11=GAME"
- id: volume
type: integer
notes: "From 0x0D response Data1: 0x00-0x63 (0-99 dB)"
- id: mute_status
type: enum
values: [muted, unmuted]
notes: "From 0x0E response Data: 0x00=Muted, 0x01=Not muted"
- id: direct_mode
type: enum
values: [off, on]
notes: "From 0x0F response Data: 0x00=Off, 0x01=On"
- id: decode_mode_2ch
type: enum
values: [stereo, dolby_surround, neo6_cinema, neo6_music, stereo_5_7_ch, dts_neural_x, reserved, dts_virtual_x]
notes: "From 0x10 response Data: 0x01=Stereo, 0x04=Dolby Surround, 0x07=Neo:6 Cinema, 0x08=Neo:6 Music, 0x09=5/7 Ch Stereo, 0x0A=DTS Neural:X, 0x0B=Reserved, 0x0C=DTS Virtual:X"
- id: decode_mode_mch
type: enum
values: [stereo_downmix, multichannel, dts_es_neural_x, dolby_surround, reserved, dts_virtual_x]
notes: "From 0x11 response Data: 0x01=Stereo down-mix, 0x02=Multi-channel, 0x03=DTS-ES/Neural:X, 0x06=Dolby Surround, 0x0B=Reserved, 0x0C=DTS Virtual:X"
- id: rds_text
type: string
notes: "From 0x12 response: ASCII string, variable length"
- id: video_output_resolution
type: enum
values: [sd_progressive, 720p, 1080i, 1080p, preferred, bypass, 4k]
notes: "From 0x13 response Data: 0x02=SD Progressive, 0x03=720p, 0x04=1080i, 0x05=1080p, 0x06=Preferred, 0x07=Bypass, 0x08=4k"
- id: open_menu
type: enum
values: [none, setup, trim, bass, treble, sync, sub, tuner, network, usb]
notes: "From 0x14 response Data: 0x00=None, 0x02=Setup, 0x03=Trim, 0x04=Bass, 0x05=Treble, 0x06=Sync, 0x07=Sub, 0x08=Tuner, 0x09=Network, 0x0A=USB"
- id: tuner_preset_number
type: integer
notes: "From 0x15 response Data: 0xFF=no preset, 0x01-0x32 (1-50) preset number"
- id: fm_frequency
type: string
notes: "From 0x16 response: Data1=MHz byte, Data2=10s of kHz byte (e.g. 0x55 0x05 = 85.05 MHz)"
- id: dab_station_name
type: string
notes: "From 0x18 response: 16-byte ASCII service label, space-padded"
- id: dab_programme_type
type: string
notes: "From 0x19 response: 16-byte ASCII programme type, space-padded"
- id: dab_dls_text
type: string
notes: "From 0x1A response: 128-byte ASCII digital radio text, space-padded"
- id: preset_details
type: string
notes: "From 0x1B response: preset#, type (1=FM freq, 2=FM RDS name, 3=DAB), freq bytes, ASCII name"
- id: network_playback_status
type: object
notes: "From 0x1C response: Data1=state (0x00=Navigating, 0x01=Playing, 0x02=Paused, 0xFF=Busy); Data2..n = folder (navigating) or file (playing/paused) name in ASCII"
- id: imax_enhanced_state
type: enum
values: [off, on, auto]
notes: "From 0x0C response Data1: 0x00=Off, 0x01=On, 0x02=Auto"
- id: treble_value
type: integer
notes: "From 0x35 response: 0x00-0x0C = 0dB to +12dB; 0x81-0x8C = -1dB to -12dB"
- id: bass_value
type: integer
notes: "From 0x36 response: same encoding as treble"
- id: room_eq_state
type: enum
values: [off, on, not_calculated]
notes: "From 0x37 response: 0x00=Off, 0x01=On, 0x02=Not calculated (off)"
- id: dolby_volume_state
type: enum
values: [off, on]
notes: "From 0x38 response: 0x00=Off, 0x01=On"
- id: dolby_leveller
type: integer
notes: "From 0x39 response: 0x00-0x0A (0-10); 0xFF=Off"
- id: dolby_volume_calibration_offset
type: integer
notes: "From 0x3A response: 0x00-0x0F = 0dB to +15dB; 0x80-0x8F = -1dB to -15dB"
- id: balance
type: integer
notes: "From 0x3B response: 0x00-0x06 = 0 to 6; 0x81-0x86 = -1 to -6"
- id: subwoofer_trim
type: string
notes: "From 0x3F response: 0x00-0x14 in 0.5dB positive steps; 0x81-0x94 in 0.5dB negative steps"
- id: lipsync_delay
type: integer
notes: "From 0x40 response: 0x00-0x32 in 5ms steps (e.g. 0x10=80ms)"
- id: compression
type: enum
values: [off, medium, high]
notes: "From 0x41 response: 0x00=Off, 0x01=Medium, 0x02=High"
- id: incoming_video_parameters
type: object
notes: "From 0x42 response: H-res MSB/LSB, V-res MSB/LSB, refresh rate Hz, interlace flag (0x00=Progressive, 0x01=Interlaced), aspect ratio (0x00=Undefined, 0x01=4:3, 0x02=16:9)"
- id: incoming_audio_format
type: object
notes: "From 0x43 response: Data1=stream format enum (0x00=PCM, 0x01=Analogue Direct, 0x02=Dolby Digital, 0x05=DD Plus, 0x06=DD TrueHD, 0x07=DTS, 0x0D=DTS HD MA, 0x0E=DTS HD HRA, 0x16=Dolby Atmos, 0x17=DTS:X, 0x18=IMAX ENHANCED, etc.); Data2=channel configuration enum"
- id: incoming_audio_sample_rate
type: enum
values: [khz_32, khz_44_1, khz_48, khz_88_2, khz_96, khz_176_4, khz_192, unknown, undetected]
notes: "From 0x44 response: 0x00=32kHz, 0x01=44.1kHz, 0x02=48kHz, 0x03=88.2kHz, 0x04=96kHz, 0x05=176.4kHz, 0x06=192kHz, 0x07=Unknown, 0x08=Undetected"
- id: sub_stereo_trim
type: string
notes: "From 0x45 response: 0x00 = 0dB; 0x81-0x94 = -0.5dB to -10.0dB in 0.5dB steps"
- id: zone1_osd_state
type: enum
values: [on, off]
notes: "From 0x4E response: 0x00=On, 0x01=Off"
- id: video_output_selection
type: enum
values: [hdmi_out_1, hdmi_out_2, hdmi_out_1_and_2]
notes: "From 0x4F response: 0x02=HDMI 1, 0x03=HDMI 2, 0x04=Both"
- id: input_name
type: string
notes: "From 0x20 response: 10-byte ASCII input name"
- id: amx_duet_response
type: string
notes: "ASCII response to AMX\\r: AMXB<Device-SDKClass=Receiver><Device-Make=ARCAM><Device-Model={model}><Device-Revision=x.y.z>\\r"
Events
- id: state_change_unsolicited
description: |
The AV relays state changes caused by front-panel buttons or the IR remote
to the controller using the appropriate message (e.g. display brightness
change via DISPLAY button). Most IR commands sent through Simulate RC5 IR
(0x08) generate an additional status message back to the controller.
Safety
confirmation_required_for:
- restore_factory_defaults # requires 0xAA 0xAA confirmation pattern
- reboot # requires ASCII "REBOOT" confirmation string
- save_restore_secure_settings # requires 0x55 0x55 confirmation pattern + 4-digit PIN
interlocks: []
# UNRESOLVED: source does not document additional safety warnings or
# interlock procedures beyond the confirmation-byte conventions above.
Notes
- Source document covers Arcam AVR390 / AVR550 / AVR850 / AV860 / SR250 only. The Arcam DT91 (DAB/FM tuner) is a separate product; this spec should NOT be assumed to apply to it. The tuner-relevant commands (0x03, 0x12, 0x15, 0x16, 0x18, 0x19, 0x1A, 0x1B, 0x23, 0x24) are the most likely subset if a DT91-specific document is later found.
- The Simulate RC5 IR command (0x08) is the canonical way to invoke front-panel / IR-remote functions. The full RC5 code table is in the source document (pages 26+); only a representative subset is included here. RC5 system 0x10 = main AV system, 0x17 = Zone 2. Example: Power On =
0x21 0x01 0x08 0x02 0x10 0x7B 0x0D, Power Off =0x21 0x01 0x08 0x02 0x10 0x7C 0x0D, Standby =0x21 0x01 0x08 0x02 0x10 0x0C 0x0D, Vol+ =0x21 0x01 0x08 0x02 0x10 0x10 0x0D, Vol- =0x21 0x01 0x08 0x02 0x10 0x11 0x0D, Mute =0x21 0x01 0x08 0x02 0x10 0x0D 0x0D. - IP control is via TCP port 50000 on the unit's IP address. RS-232 must be enabled first: hold front-panel DIRECT for 4s ("RS232 CONTROL ON" on VFD) or set Control=On in the General Setup menu (press A then U on the remote).
- Source explicitly notes the EuP standby timer is reset by the Heartbeat command (0x25) — devices behind EuP regulations should poll it.
- Commands 0xF0–0xFF are reserved for test functions; never transmit.
- Many commands fail with answer code 0x85 if the OSD Setup Menu is open, or for tuner commands when the tuner input is not the active source.
- Serial cable is a null modem: pin 2↔3 crossed, pin 5↔5 ground. No hardware flow control.
Provenance
source_domains:
- arcam.co.uk
source_urls:
- https://www.arcam.co.uk/ugc/tor/avr390/RS232/RS232_860_850_550_390_250_SH274E_D_181018.pdf
retrieved_at: 2026-04-29T08:49:54.633Z
last_checked_at: 2026-06-02T21:39:51.022Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:39:51.022Z
matched_actions: 51
action_count: 51
confidence: medium
summary: "All 51 spec actions match exact command codes in the source with correct opcodes, params, and transport values verified. (5 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "device name requested was Arcam DT91 but the supplied source document covers the AVR390/AVR550/AVR850/AV860/SR250 family; no DT91-specific protocol is in this source."
- "full RC5 IR code table is large; only referenced as parameters to the Simulate RC5 IR command (0x08) — see Notes."
- "source does not document additional safety warnings or"
- "full RC5 code table not transcribed; only representative codes listed."
- "device name DT91 in input does not match source's AVR/SR product family."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0