Summary
Serial (RS-232) control protocol for the Lexicon DC-2 surround processor, also covering the MC-1 and JBL Synthesis SDP-3. Point-to-point, full-duplex binary protocol with framed packets (SOP, DLL data count, command, app data count, data, EOP). Supports parameter get/set, effect configuration, input naming, Zone 2 control, IR passthrough, and asynchronous wake/sleep/FPD notifications.
Transport
protocols:
- serial
serial:
baud_rate: 19200
data_bits: 8
parity: odd
stop_bits: 1
flow_control: none
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred from power-on/off events (Wakeup / Sleep notifications, Restore Defaults reset)
- routable # inferred from input select, Zone 2 record input commands
- queryable # inferred from GET_* command family returning state packets
- levelable # inferred from Set System Volume, Set Zone 2 Volume, Output Level Adjustments
Actions
# All host-initiated commands (7.3.x and 7.2.x) and asynchronous notifications.
# Frame format: F1 <DLL_DC> <CMD> <AppDC> [data...] F2
# <DLL_DC> = 3 + <AppDC>. <AppDC> = number of application data bytes.
# Literal byte sequences below are copied from the source packet examples and
# Appendix A Command Codes.
- id: wakeup_notification
label: Wakeup Notification (DC-2 -> Host)
kind: event
command: "F1 02 01 F2"
params: []
- id: sleep_notification
label: Sleep Notification (DC-2 -> Host)
kind: event
command: "F1 02 02 F2"
params: []
- id: fpd_notification
label: Front Panel Display Notification (DC-2 -> Host)
kind: event
command: "F1 2D 03 2A {line1:21 ASCII bytes null-terminated} {line2:21 ASCII bytes null-terminated} F2"
params:
- name: line1
type: string
description: FPD line 1 (max 20 chars, null-terminated). Bytes Data[0]-Data[21].
- name: line2
type: string
description: FPD line 2 (max 20 chars, null-terminated). Bytes Data[22]-Data[42].
- id: parameter_change_notification
label: Parameter Change Notification (DC-2 -> Host)
kind: event
command: "F1 05 04 02 {paramId} {value} F2"
params:
- name: paramId
type: integer
description: ParamId assigned to the changing system parameter
- name: value
type: integer
description: Current value of the parameter (0..MaxValue)
- id: acknowledge
label: Acknowledge (ACK)
kind: event
command: "F1 04 E0 01 {command} F2"
params:
- name: command
type: integer
description: The DC-2 command being acknowledged (Appendix A code)
- id: no_acknowledge
label: No Acknowledge (NAK)
kind: event
command: "F1 05 E1 02 {command} {errorCode} F2"
params:
- name: command
type: integer
description: The DC-2 command being negatively acknowledged
- name: errorCode
type: integer
description: Error code from Appendix B Error Codes
- id: reset_unit
label: Reset Unit
kind: action
command: "F1 03 10 00 F2"
params: []
- id: host_wakeup
label: Host Wakeup
kind: action
command: "F1 03 11 00 F2"
params: []
- id: host_sleep
label: Host Sleep
kind: action
command: "F1 03 12 00 F2"
params: []
- id: restore_defaults
label: Restore Factory Defaults
kind: action
command: "F1 03 13 00 F2"
params: []
- id: send_ir_command
label: Send IR Command
kind: action
command: "F1 04 14 01 {keyCode} F2"
params:
- name: keyCode
type: integer
description: IR key code from Appendix C DC-2/MC-1 IR-Codes (e.g. 0x17 Volume Up, 0x16 Volume Down, 0x15 Mute, 0x12 DVD)
- id: get_unit_config
label: Get Unit Configuration
kind: query
command: "F1 03 15 00 F2"
params: []
- id: get_system_status
label: Get System Status
kind: query
command: "F1 03 16 00 F2"
params: []
- id: get_record_zone2_status
label: Get Record/Zone 2 Status
kind: query
command: "F1 03 17 00 F2"
params: []
- id: get_system_parameter_by_id
label: Get System Parameter Definition by Id
kind: query
command: "F1 04 18 01 {paramId} F2"
params:
- name: paramId
type: integer
description: Parameter Id (0..System Parameter Count - 1)
- id: get_system_parameter_by_name
label: Get System Parameter Definition by Name
kind: query
command: "F1 {len} 19 {strlen(name)+1} {name} 00 F2"
params:
- name: name
type: string
description: Parameter name (null-terminated ASCII, max PARAM_NAME_LENGTH=20)
- id: get_system_parameter_values
label: Get System Parameter Values
kind: query
command: "F1 03 1A 00 F2"
params: []
- id: get_effect_definition
label: Get Effect Definition by Id
kind: query
command: "F1 04 1B 01 {effectId} F2"
params:
- name: effectId
type: integer
description: Effect Id (0..Total Number of Effects - 1)
- id: get_effect_parameter_definition
label: Get Effect Parameter Definition
kind: query
command: "F1 05 1C 02 {effectId} {paramId} F2"
params:
- name: effectId
type: integer
description: Effect Id (0..Total Number of Effects - 1)
- name: paramId
type: integer
description: Parameter number within the effect (0..MaxParameters-1)
- id: get_effect_parameter_values
label: Get Effect Parameter Values
kind: query
command: "F1 04 1D 01 {effectId} F2"
params:
- name: effectId
type: integer
description: Effect Id (0..Total Number of Effects - 1)
- id: set_system_parameter_values
label: Set System Parameter Values (bulk)
kind: action
command: "F1 {len} 1E {sys_param_count} {sys_param_value[0]} ... {sys_param_value[sys_param_count-1]} F2"
params:
- name: values
type: array
description: Array of unsigned 8-bit integers, length = System Parameter Count from Unit Config; each value bounded by its parameter's MaxValue
- id: set_effect_parameter_values
label: Set Effect Parameter Values
kind: action
command: "F1 {len} 1F {effect_param_count+1} {effectId} {effect_param_value[0]} ... {effect_param_value[effect_param_count-1]} F2"
params:
- name: effectId
type: integer
description: Effect Id (0..Total Number of Effects - 1)
- name: values
type: array
description: Array of unsigned 8-bit integers, length = EffectParamCount for this effect; each value bounded by its MaxValue
- id: set_effect_name
label: Set Effect Name by Effect Id
kind: action
command: "F1 {len} 20 {strlen(name)+2} {effectId} {name} 00 F2"
params:
- name: effectId
type: integer
description: Effect Id (0..Total Number of Effects - 1)
- name: name
type: string
description: New effect name (null-terminated ASCII, max EFFECT_NAME_LENGTH=13)
- id: set_system_volume
label: Set System Volume
kind: action
command: "F1 04 21 01 {value} F2"
params:
- name: value
type: integer
description: Volume 0..92 (0=-80 dB, 92=+12 dB)
- id: set_main_balance
label: Set Main Left/Right Balance
kind: action
command: "F1 04 22 01 {value} F2"
params:
- name: value
type: integer
description: Balance 0..32 (0=Left, 32=Right)
- id: set_front_back_balance
label: Set Front/Back Balance (Fader)
kind: action
command: "F1 04 23 01 {value} F2"
params:
- name: value
type: integer
description: Front/Back balance 0..32 (0=Front, 32=Back)
- id: set_active_effect
label: Set Active Effect by Id
kind: action
command: "F1 04 24 01 {effectId} F2"
params:
- name: effectId
type: integer
description: Effect Id (0..Total Number of Effects - 1)
- id: set_record_zone2_input
label: Set Record/Zone 2 Input
kind: action
command: "F1 04 25 01 {inputId} F2"
params:
- name: inputId
type: integer
description: Input Id 0..7 (Appendix D: 0=Tape, 1=Tuner, 2=CD, 3=AUX, 4=TV, 5=V-Disc, 6=DVD, 7=VCR)
- id: clear_record_zone2_input
label: Clear Record/Zone 2 Input
kind: action
command: "F1 04 26 01 {inputId} F2"
params:
- name: inputId
type: integer
description: Input Id 0..7 (Appendix D)
- id: set_zone2_volume
label: Set Zone 2 Volume
kind: action
command: "F1 04 27 01 {value} F2"
params:
- name: value
type: integer
description: Zone 2 volume 0..92 (0=-80 dB, 92=+12 dB)
- id: set_zone2_balance
label: Set Zone 2 Left/Right Balance
kind: action
command: "F1 04 28 01 {value} F2"
params:
- name: value
type: integer
description: Zone 2 balance 0..32 (0=Left, 32=Right)
- id: get_fpd_control_registers
label: Get FPD Control Registers
kind: query
command: "F1 03 29 00 F2"
params: []
- id: set_fpd_control_registers
label: Set FPD Control Registers
kind: action
command: "F1 07 2A 04 {fpd_ctrlreg0} {fpd_ctrlreg1} {fpd_ctrlreg2} {fpd_minupdate} F2"
params:
- name: fpd_ctrlreg0
type: integer
description: BitPack of USER_MSG, REC_BLOCK_MSG, SYS_VOL_MSG, LOCKED_MSG, DIG_IN_NOLOCK_MSG, SPEAKER_ERR_MSG, LR_BALANCE_MSG, FB_BALANCE_MSG (Appendix F)
- name: fpd_ctrlreg1
type: integer
description: BitPack of SYS_MUTE_MSG, EQ_BASS_MSG, EQ_TREBLE_MSG, EQ_TILT_MSG, PGM_CHG_MSG, NOISE_ACTIVE_MSG, Z2_KEY_ERR_MSG, REC_SRC_ERR_MSG (Appendix F)
- name: fpd_ctrlreg2
type: integer
description: BitPack of Z2_VOLUME_MSG, Z2_BALANCE_MSG, Z2_MUTE_MSG, REC_SELECT_MSG, DIG_REC_ERR_MSG, BYPASS_ERR_MSG, MAIN_DISP_MSG, DTS_ERR_MSG (Appendix F)
- name: fpd_minupdate
type: integer
description: Minimum FPD update interval. Default 50 (100 mSec). Range 50-255 counts, 500 counts/sec.
- id: get_custom_name
label: Get Custom Name
kind: query
command: "F1 03 2B 00 F2"
params: []
- id: set_custom_name
label: Set Custom Name (Power-on Banner)
kind: action
command: "F1 {len} 2C {strlen(name)+2} {enable} {name} 00 F2"
params:
- name: enable
type: boolean
description: TRUE enables custom name banner on power-on; FALSE disables
- name: name
type: string
description: Custom name (null-terminated ASCII, max CUSTOM_NAME_LENGTH=20)
- id: get_input_name
label: Get Input Name by Id
kind: query
command: "F1 04 2D 01 {inputId} F2"
params:
- name: inputId
type: integer
description: Input Id 0..7 (Appendix D)
- id: set_input_name
label: Set Input Name by Id
kind: action
command: "F1 0D 2E 09 03 4D 59 20 49 4E 50 55 54 00 F2" # example: AUX(3) -> "MY INPUT"
params:
- name: inputId
type: integer
description: Input Id 0..7 (Appendix D)
- name: name
type: string
description: New input name (null-terminated ASCII, max INPUT_NAME_LENGTH=8)
- id: get_communication_configuration
label: Get Communication Configuration
kind: query
command: "F1 03 2F 00 F2"
params: []
- id: set_communication_configuration
label: Set Communication Configuration
kind: action
command: "F1 04 30 01 {configurationRegister0} F2"
params:
- name: acknowledgeEnable
type: boolean
description: Bit 0: TRUE enables positive ACK notifications; FALSE disables (NAK always sent)
- name: parameterChangeEnable
type: boolean
description: Bit 1: TRUE enables Parameter Change Notifications; FALSE disables
- name: ledAcknowledgeEnable
type: boolean
description: Bit 2: TRUE enables standby/overload LED traffic indication; FALSE disables
- id: set_mute
label: Set Mute State
kind: action
command: "F1 04 31 01 {muteState} F2"
params:
- name: muteState
type: enum
description: 0=UNMUTE, 1=USER MUTE (decrement by user amount), 2=FULL MUTE
- id: set_output_level_adjustment
label: Set Output Level Adjustment
kind: action
command: "F1 05 32 02 {adjustmentValue} {outputId} F2"
params:
- name: adjustmentValue
type: integer
description: 0..40 counts. 0=-10 dB, 40=+10 dB, step 0.5 dB/count
- name: outputId
type: integer
description: Speaker output: 0=Center, 1=Subwoofer, 2=Front Left, 3=Front Right, 4=Side Left, 5=Side Right, 6=Rear Left, 7=Rear Right
- id: send_display_string
label: Send Display String (OSD + FPD)
kind: action
command: "F1 {len} 33 {strlen(str)+2} {displayFlags} {str} 00 F2"
params:
- name: displayFlags
type: integer
description: Bit 0: TRUE=FPD only; FALSE=OSD+FPD. Bits 1-7 undefined.
- name: str
type: string
description: Display string (null-terminated ASCII, max 40 chars; truncated if longer)
Feedbacks
- id: power_state
type: enum
values: [on, standby]
description: "Inferred from Wakeup (0x01) and Sleep (0x02) notifications. Hard power down is not notified."
- id: front_panel_display
type: string
description: "Two 20-char null-terminated ASCII lines, transmitted on FPD updates."
- id: parameter_change
type: object
description: "ParamId + Value pair on each system parameter change (PROGRAM, MUTE, VOLUME, LR_BALANCE, INPUT, RECORD_ENABLED, Z2_VOL, Z2_BAL, Z2_MUTE, BASS, TREBLE, LOUDNESS, TILT, MENU_BKGND)."
- id: unit_config
type: object
description: "ProductId (1=DC-2, 2=MC-1, 3=SDP-3), Software Type (1=THX, 2=AC3, 3=DTS), Software Level (0=RELEASED, 1=PRE_ALPHA, 2=ALPHA, 3=BETA, 4=GAMMA, 5=UNSUPPORTED), SW Major/Minor Rev, Protocol Major/Minor Rev, Total System Parameters, Total Effects, 16-byte null-terminated ASCII timestamp 'yy/mm/dd hh:mm'."
- id: system_status
type: object
description: "SystemVolume (0=-80dB..92=+12dB), CurrentInput, CurrentEffectId, SampleRate (0=UNKNOWN,1=44.1,2=48,3=88.2,4=96 kHz), InputFormat (0=UNKNOWN,1=AC3,2=PCM,3=ANALOG,4=DTS,5=AC3_2.0,6=AC3_5.1), MuteActive, EffectBypassActive, L/R Balance (0=Left..32=Right), F/B Balance (0=Front..32=Back), VideoSynch."
- id: record_zone2_status
type: object
description: "Zone2Volume, AssignedInput, Zone2MuteActive, RecordActive, Zone2Balance (0=Left..32=Right)."
- id: system_parameter_definition
type: object
description: "ParamId, MaxValue, Value, null-terminated ParamName (max 20 chars)."
- id: system_parameter_values
type: array
description: "Array of unsigned 8-bit integers, length = System Parameter Count from Unit Config."
- id: effect_definition
type: object
description: "EffectId, MaxParameters, null-terminated EffectName (max 13 chars)."
- id: effect_parameter_definition
type: object
description: "EffectId, ParamId, MaxValue, Value."
- id: effect_parameter_values
type: array
description: "Array of unsigned 8-bit integers, length = EffectParamCount for the requested effect."
- id: custom_name
type: string
description: "Null-terminated ASCII custom name (max 20 chars)."
- id: input_name
type: object
description: "InputId (0..7) plus null-terminated ASCII name (max 8 chars)."
- id: fpd_control_registers
type: object
description: "FPD_CtrlReg0, FPD_CtrlReg1, FPD_CtrlReg2 (BitPacks per Appendix F), FPD_MinUpdate (50-255, 500 counts/sec, default 50)."
- id: communication_configuration
type: object
description: "Configuration Register 0: bit0=AcknowledgeEnable, bit1=ParameterChangeEnable, bit2=LedAcknowledgeEnable."
- id: peek_value
type: object
description: "DC_RESP_PEEK_VALUE (0x8B) - internal use only, not for external distribution."
Variables
# Documented settable system parameters (all 8-bit unsigned, 0..MaxValue):
- id: program
label: Current Effect (PROGRAM)
type: integer
description: "Effect selection. 0..MaxValue as defined per system."
- id: mute
label: Mute
type: enum
values: [unmuted, user_mute, full_mute]
description: "0=UNMUTE, 1=USER MUTE, 2=FULL MUTE"
- id: volume
label: System Volume
type: integer
description: "0..92 (0=-80 dB, 92=+12 dB)"
- id: lr_balance
label: Left/Right Balance
type: integer
description: "0..32 (0=Left, 32=Right)"
- id: fb_balance
label: Front/Back Balance
type: integer
description: "0..32 (0=Front, 32=Back)"
- id: input
label: Current Input
type: integer
description: "0..7 (Appendix D: Tape, Tuner, CD, AUX, TV, V-Disc, DVD, VCR)"
- id: record_enabled
label: Record/Zone 2 On/Off
type: boolean
description: "Enables or disables the Record/Zone 2 output path."
- id: z2_volume
label: Zone 2 Volume
type: integer
description: "0..92 (0=-80 dB, 92=+12 dB)"
- id: z2_balance
label: Zone 2 Balance
type: integer
description: "0..32 (0=Left, 32=Right)"
- id: z2_mute
label: Zone 2 Mute
type: boolean
description: "Zone 2 mute state."
- id: bass
label: Bass EQ
type: integer
description: "Bass level, 0..MaxValue per system parameter definition."
- id: treble
label: Treble EQ
type: integer
description: "Treble level, 0..MaxValue per system parameter definition."
- id: loudness
label: Loudness
type: boolean
description: "Loudness contour on/off."
- id: tilt
label: Tilt EQ
type: integer
description: "Tilt level, 0..MaxValue per system parameter definition."
- id: menu_bkgnd
label: Menu Background On/Off
type: boolean
description: "Enables/disables the menu background display."
Events
- id: wakeup
label: DC-2 Power-On / Reset
description: "DC_WAKEUP (0x01). Sent by DC-2 after power-on or reset. Waits for ACK up to ACK_TIMEOUT, otherwise continues operating. Retransmits until ACK or RETRANSMIT_COUNT is reached."
- id: sleep
label: DC-2 Entering Standby
description: "DC_SLEEP (0x02). Sent by DC-2 when shutting down into standby. No ACK required. Hard power-down is not notified."
- id: front_panel_update
label: Front Panel Display Update
description: "DC_FPD (0x03). Two null-terminated ASCII lines, 20 chars each. Transmit rate controlled by FPD control registers. No host response expected."
- id: parameter_change
label: Parameter Value Change
description: "DC_PARAM_CHG_MSG (0x04). Sent on any user or system action that changes a tracked system parameter. No host response expected."
- id: ack
label: Acknowledge
description: "DC_ACK (0xE0). Positive acknowledgment of a host command. Data byte = command being acknowledged."
- id: nak
label: No Acknowledge
description: "DC_NAK (0xE1). Data = command + error code from Appendix B (DC_ERR_PARITY 0x02, DC_ERR_FRAMING 0x03, DC_ERR_OVERRUN 0x04, DC_ERR_INVALID_PACKET 0x05, DC_ERR_TIME_OUT 0x06, DC_ERR_BUFFER_FULL 0x07, DC_INVALID_COUNT 0x10, DC_INVALID_CMD 0x11, DC_INVALID_DATA 0x12, DC_INVALID_ADDRESS 0x13, DC_INVALID_EFFECT_ID 0x14, DC_INVALID_PARAM_ID 0x15, DC_INVALID_NAME 0x16, DC_INVALID_INPUT 0x17)."
Macros
# Multi-step sequences described explicitly in section 15 (Application Notes).
- id: upload_complete_system_setup
label: Upload Complete System Setup from DC-2
steps:
- "GET_UNIT_CONFIG (0x15) - learn SW versions, param/effect counts"
- "GET_SYS_PARAM_VALUES (0x1A) - bulk system parameter values"
- "GET_SYS_PARAM_BY_ID (0x18) for each parameter - definitions"
- "GET_EFFECT (0x1B) for each effect - effect definitions"
- "GET_EFFECT_PARAM_DEF (0x1C) for each (effect,param) - effect param defs"
- "GET_INPUT_NAME (0x2D) for each of 8 inputs"
- "GET_CUST_NAME (0x2B) - custom power-on name"
- id: download_complete_system_setup
label: Download Complete System Setup to DC-2
steps:
- "Verify compatibility via GET_UNIT_CONFIG (SW levels, versions, param/effect counts)"
- "SET_CUST_NAME (0x2C)"
- "SET_INPUT_NAME (0x2E) for each of 8 inputs"
- "SET_EFFECT_NAME (0x20) for each effect"
- "SET_EFFECT_PARAM_VALUES (0x1F) for each effect"
- "SET_SYS_PARAM_VALUES (0x1E) - last; unit resets to initialize"
- id: host_initialization_handshake
label: Host Initialization Handshake
steps:
- "HOST transmits HOST_WAKEUP (0x11)"
- "DC-2 responds with ACK"
- "DC-2 transmits current FPD buffer via DC_FPD (0x03)"
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing
# requirements stated in the source.
Notes
- DB-9 female connector labeled "RS232" on the rear panel. DC-2 has 1 port; MC-1 has 2 ports (Ch A on both). Pin 2 = Tx from DC-2 perspective (Rx on host), pin 3 = Rx on DC-2 (Tx from host), pin 5 = ground. Use a male-to-female straight-through cable.
- All packets are framed:
F1 <DLL_DC> <CMD> <AppDC> [data...] F2where DLL_DC = 3 + AppDC. - Application data is composed of: Parameter Name / Input Name / Effect Name / Custom Name = null-terminated ASCII strings.
- INTER_PACKET_TIME = 200 mSec between packets (Appendix E).
- FPD_LINE_LENGTH=20, PARAM_NAME_LENGTH=20, EFFECT_NAME_LENGTH=13, CUSTOM_NAME_LENGTH=20, INPUT_NAME_LENGTH=8 (Appendix E).
- Hardware verification: install RS-232 wraparound plug (pins 2-3 shorted) on rear-panel "RS232" connector and power cycle. After ~20 seconds the VFD displays "SERIAL PORT A PASSED" / "SERIAL PORT B PASSED" (2 seconds), then enters normal mode.
- Receive buffer is 256 bytes; if full, DC-2 transmits NAK with DC_ERR_BUFFER_FULL (0x07) and ignores further data until cleared.
- 8 FPD custom character codes (ASCII 0x08-0x0F) are used for volume-bar glyphs.
- SW Level field describes the internal application software status, not a hardware revision.
- DC_PEEK (0x08), DC_POKE (0x09), DC_DEBUG_STRING (0x40), DC_DEBUG_CHAR (0x41), PEEK and POKE commands are marked "Not Supported for External Distribution" and are omitted from the Actions block.
- IR codes (Appendix C) range 0x00-0xFF; valid set is the listed table including shift functions and record/zone-2 functions.
Provenance
source_domains:
- support.harmanluxuryaudio.com
- manualslib.com
- manualshelf.com
- applicationmarket.crestron.com
source_urls:
- "https://support.harmanluxuryaudio.com/on/demandware.static/-/Sites-masterCatalog_Harman/default/dwc78d725d/pdfs/MC-1%20Serial%20Definition.pdf"
- https://www.manualslib.com/manual/291470/Lexicon-Dc-2.html
- https://www.manualshelf.com/manual/lexicon/dc-2/instruction-manual-english.html
- https://applicationmarket.crestron.com/lexicon-inc-dc2-north-america/
retrieved_at: 2026-06-03T06:41:03.384Z
last_checked_at: 2026-06-04T06:27:08.876Z
Verification Summary
verdict: verified
checked_at: 2026-06-04T06:27:08.876Z
matched_actions: 42
action_count: 42
confidence: medium
summary: "All 42 spec actions map 1-to-1 to source command codes in Appendix A; transport parameters confirmed verbatim in section 5.2; source catalogue is fully represented. (3 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility ranges not stated in source"
- "no safety warnings, interlock procedures, or power-on sequencing"
- "firmware version compatibility ranges, product safety/regulatory certifications, DC-2 vs MC-1 vs SDP-3 behavioral differences beyond the ProductId field are not stated in the source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0