Summary
DHD External Control Protocol (ECP) for RM4200D DSP frames, 52/XC/XD/XS/XR cores and controllers. Provides routing, fader, monitor, IO gain, logic, metering, snapshot and CleanFeed control over RS-232/RS-422 serial or TCP/IP on port 2008. ECP is deprecated as of firmware 10.2; new integrations should use the Control API.
Transport
protocols:
- serial
- tcp
serial:
baud_rate: 38400
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
addressing:
port: 2008
auth:
type: none # inferred: no auth procedure in source
Traits
- routable # inferred from routing command examples
- levelable # inferred from fader/monitor level commands
- queryable # inferred from request/notification commands
Actions
- id: route_output_16bit_request_all
label: Route Output 16bit - Request All Crosspoints
kind: query
command: "01F50000,0"
params: []
- id: route_output_16bit_request_one
label: Route Output 16bit - Request One Crosspoint
kind: query
command: "01F5xxxx,2,OutputHi,OutputLo"
params:
- name: slot
type: integer
description: Controller module number (xxxx), 0 transmits - name: output
type: integer
description: Output address 0x0180..0x1EFF (HiByte=slot 1..30, LoByte=port 0..7)
- id: route_output_16bit_set
label: Route Output 16bit - Set Crosspoint
kind: action
command: "01F5xxxx,4,OutputHi,OutputLo,InputHi,InputLo"
params:
- name: slot
type: integer
description: Controller module number (xxxx)
- name: output
type: integer
description: Physical output 0x0180..0x1EFF
- name: input
type: integer
description: Physical input 0x0100..0x1E7F, summation 0x4000..0x7FFF, or 0xFFFF mute
- id: route_output_32bit_crosspoint_notification
label: Route Output 32bit - Activate/Deactivate Crosspoint Notification
kind: action
command: "01F50000,1,D0"
params:
- name: state
type: integer
description: 0x00 deactivate, 0x01 activate (TCP only)
- id: route_output_32bit_request_one
label: Route Output 32bit - Request One Crosspoint
kind: query
command: "01F50000,5,OutputId_b0,OutputId_b1,OutputId_b2,OutputId_b3"
params:
- name: output_id_32bit
type: integer
description: 32bit Output AudioID (see AudioID description)
- id: route_output_32bit_set
label: Route Output 32bit - Set Crosspoint
kind: action
command: "01F50000,8,OutputId_b0,OutputId_b1,OutputId_b2,OutputId_b3,InputId_b0,InputId_b1,InputId_b2,InputId_b3"
params:
- name: output_id_32bit
type: integer
description: 32bit Output AudioID
- name: input_id_32bit
type: integer
description: 32bit Input AudioID; 0x00000000 to mute
- id: arbitration_request
label: Set Arbitration - Request Owner
kind: query
command: "01F90000,4,AudioId_b0,AudioId_b1,AudioId_b2,AudioId_b3"
params:
- name: audio_id_32bit
type: integer
description: 32bit Output/Input AudioID
- id: arbitration_set
label: Set Arbitration - Set Owner
kind: action
command: "01F90000,5,AudioId_b0,AudioId_b1,AudioId_b2,AudioId_b3,DeviceId"
params:
- name: audio_id_32bit
type: integer
description: 32bit Output/Input AudioID
- name: device_id
type: integer
description: 0x00 no owner, 0x40..0x60 owning DeviceID
- id: set_monitor_channel_request
label: Set Monitor Channel - Request Current Inputs
kind: query
command: "11000000,3,00,00,Number"
params:
- name: monitor_number
type: integer
description: Monitor selector channel 0..5 (firmware 05.xx.xx) or 0..199 (06.xx.xx+)
- id: set_monitor_channel_set
label: Set Monitor Channel - Set
kind: action
command: "11000000,6,InputHiL,InputLoL,Number,InputHiR,InputLoR,0"
params:
- name: input_left
type: integer
description: Left input 0x0000..0x0027 (prefader) or 0x0100..0x1E7F (mixer) or 0x4000..0x7FFF (summation)
- name: monitor_number
type: integer
description: Monitor selector channel 0..5 or 0..199
- name: input_right
type: integer
description: Right input (same ranges as Left)
- id: set_fader_on_off
label: Switch Fader/Channel On/Off
kind: action
command: "11020000,3,FaderHi,FaderLo,On"
params:
- name: fader_hi
type: integer
description: 0x00..0x03 VirtualMixer1..4 (LogicFader), or 0x10 FaderChannelNumber
- name: fader_lo
type: integer
description: 0x00..0x27 (05.xx) or 0x00..0x2F LogicFader / 0x00..0x95 FaderChannel (06.xx+)
- name: on
type: integer
description: 1=on, 0=off
- id: set_fader_level_notification
label: Set Fader Level - Activate/Deactivate Notification
kind: action
command: "11030000,1,D0"
params:
- name: state
type: integer
description: 0x00 deactivate, 0x01 activate (firmware 07.02.09+)
- id: set_fader_level_request
label: Set Fader Level - Request
kind: query
command: "11030000,2,FaderHi,FaderLo"
params:
- name: fader_hi
type: integer
description: 0x00..0x03 VirtualMixer (LogicFader) or 0x10 FaderChannelNumber
- name: fader_lo
type: integer
description: Fader number per DHD spec
- id: set_fader_level_set
label: Set Fader Level - Set Instantly
kind: action
command: "11030000,4,FaderHi,FaderLo,LevelHi,LevelLo"
params:
- name: fader_hi
type: integer
description: VirtualMixer or FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- name: level
type: integer
description: 0x8000..0x7FFF (-327.68..+327.67 dB)
- id: set_fader_level_set_with_time
label: Set Fader Level - Set Within Time
kind: action
command: "11030000,7,FaderHi,FaderLo,LevelHi,LevelLo,TimeHi,TimeLo,Type"
params:
- name: fader_hi
type: integer
description: VirtualMixer or FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- name: level
type: integer
description: 0x8000..0x7FFF dB
- name: time_ms
type: integer
description: 0x0000..0x2000 ms
- name: type
type: integer
description: 0 level linear fade, 1 fader linear fade
- id: set_fader_access_request
label: Set Fader Access - Request Status
kind: query
command: "11040000,0"
- id: set_fader_access_set
label: Set Fader Access - Set
kind: action
command: "11040000,7,FaderHi,FaderLo,On,Type,ChannelHi,ChannelLo,AccGroup"
params:
- name: fader_hi
type: integer
description: VirtualMixer / FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- name: on
type: integer
description: 0 off, 1 on
- name: type
type: integer
description: 0 GAIN, 1 PAN/BAL, 2 INPUTSELECT
- name: channel
type: integer
description: 1..150 (status answer only)
- name: acc_group
type: integer
description: 0..5 (status answer only)
- id: set_channel_input_number_request_all
label: Set Channel Input Number - Request All
kind: query
command: "110D0000,0"
- id: set_channel_input_number_request
label: Set Channel Input Number - Request Input For Fader
kind: query
command: "110D0000,2,FaderHi,FaderLo"
params:
- name: fader_hi
type: integer
description: VirtualMixer / FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- id: set_channel_input_number_set
label: Set Channel Input Number - Input Select
kind: action
command: "110D0000,4,FaderHi,FaderLo,ChannelHi,ChannelLo"
params:
- name: fader_hi
type: integer
description: VirtualMixer / FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- name: channel
type: integer
description: 0x0001..0x00BA Fader Channel Number (1..250)
- id: set_internal_logic_states_request
label: Set Internal Logic States - Request
kind: query
command: "110E0000,2,LogicIdHi,LogicIdLo"
params:
- name: logic_id
type: integer
description: 16-bit LogicID per DHD spec
- id: set_internal_logic_states_set
label: Set Internal Logic States - Set
kind: action
command: "110E0000,3,LogicIdHi,LogicIdLo,On"
params:
- name: logic_id
type: integer
description: 16-bit LogicID
- name: on
type: integer
description: 0 off/false, 1 on/true
- id: set_monitor_level_request
label: Set Monitor Level - Request
kind: query
command: "11100000,2,PotHi,PotLo"
params:
- name: pot
type: integer
description: Potentiometer 0x0000..0x0077 (1..120)
- id: set_monitor_level_set
label: Set Monitor Level - Set Instantly
kind: action
command: "11100000,4,PotHi,PotLo,LevelHi,LevelLo"
params:
- name: pot
type: integer
description: Potentiometer 1..120
- name: level
type: integer
description: 0x8000..0x7FFF (-327.68..+327.67 dB)
- id: set_monitor_level_set_with_time
label: Set Monitor Level - Set Within Time
kind: action
command: "11100000,7,PotHi,PotLo,LevelHi,LevelLo,TimeHi,TimeLo,Type"
params:
- name: pot
type: integer
description: Potentiometer 1..120
- name: level
type: integer
description: dB level
- name: time_ms
type: integer
description: 0x0000..0x2000 ms
- name: type
type: integer
description: 0 level linear fade, 1 fader linear fade
- id: set_display_channel_label_reproduce
label: Set Display/Channel Label - Reproduce Original Text
kind: action
command: "11140000,2,ChannelHi,ChannelLo"
- id: set_display_channel_label_request
label: Set Display/Channel Label - Request
kind: query
command: "11140000,3,ChannelHi,ChannelLo,DisplayNr"
params:
- name: channel
type: integer
description: 0x0001..0x00BA channel or 0x8001..0x800C central panel
- name: display_nr
type: integer
description: 0x00..0x7F
- id: set_display_channel_label_set
label: Set Display/Channel Label - Set
kind: action
command: "11140000,8,ChannelHi,ChannelLo,DisplayNr,ASCII1,ASCII2,ASCII3,ASCII4"
params:
- name: channel
type: integer
description: Channel or central panel module
- name: display_nr
type: integer
description: 0x00..0x7F
- name: ascii1
type: integer
description: 0x00..0x7F
- name: ascii2
type: integer
description: 0x00..0x7F
- name: ascii3
type: integer
description: 0x00..0x7F
- name: ascii4
type: integer
description: 0x00..0x7F
- id: set_pfl_switch_off_all
label: Set PFL - Switch Off All
kind: action
command: "11160000,0"
- id: set_pfl_switch_off_all_virtual_mixer
label: Set PFL - Switch Off All On Virtual Mixer
kind: action
command: "11160000,1,VirtualMixer"
params:
- name: virtual_mixer
type: integer
description: 0x00..0x03 VirtualMixer1..4 (firmware 06.xx+)
- id: set_pfl_request
label: Set PFL - Request State
kind: query
command: "11160000,2,FaderHi,FaderLo"
params:
- name: fader_hi
type: integer
description: VirtualMixer / FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- id: set_pfl_set
label: Set PFL - Set
kind: action
command: "11160000,4,FaderHi,FaderLo,On,AutoMute"
params:
- name: fader_hi
type: integer
description: VirtualMixer / FaderChannel selector
- name: fader_lo
type: integer
description: Fader number
- name: on
type: integer
description: 1 PFL on, 0 PFL off
- name: auto_mute
type: integer
description: 1 mute all others, 0 leave unchanged
- id: load_save_setups_load_channel
label: Load/Save Setups - Load Channel Snapshot
kind: action
command: "111C0000,4,00,SnapshotNumber,MixerID,FaderChannel"
params:
- name: snapshot_number
type: integer
description: 0..250 channel snapshot
- name: mixer_id
type: integer
description: 0x00..0x03 VirtualMixer1..4 or 0x10 Channel
- name: fader_channel
type: integer
description: 0..47 fader or 0..250 channel
- id: load_save_setups_save_channel
label: Load/Save Setups - Save Channel Snapshot
kind: action
command: "111C0000,4,01,SnapshotNumber,MixerID,FaderChannel"
params:
- name: snapshot_number
type: integer
description: 0..250 channel snapshot
- name: mixer_id
type: integer
description: 0x00..0x03 VirtualMixer1..4 or 0x10 Channel
- name: fader_channel
type: integer
description: 0..47 fader or 0..250 channel
- id: load_save_setups_load_mixer
label: Load/Save Setups - Load Mixer Snapshot
kind: action
command: "111C0000,3,0a,SnapshotNumber,MixerID"
params:
- name: snapshot_number
type: integer
description: 0..20 mixer snapshot
- name: mixer_id
type: integer
description: 0x00..0x03 VirtualMixer1..4
- id: load_save_setups_save_mixer
label: Load/Save Setups - Save Mixer Snapshot
kind: action
command: "111C0000,3,0b,SnapshotNumber,MixerID"
params:
- name: snapshot_number
type: integer
description: 0..20 mixer snapshot
- name: mixer_id
type: integer
description: 0x00..0x03 VirtualMixer1..4
- id: set_io_gain_16bit_request
label: Set IO Gain 16bit - Request
kind: query
command: "112D0000,2,IoHi,IoLo"
params:
- name: io
type: integer
description: Output 0x0180..0x1EFF or Input 0x0100..0x1E7F / 0x4000..0x7FFF
- id: set_io_gain_16bit_set
label: Set IO Gain 16bit - Set
kind: action
command: "112D0000,4,IoHi,IoLo,ValueHi,ValueLo"
params:
- name: io
type: integer
description: Output or Input address
- name: value
type: integer
description: 0x8000..0x7FFF (-327.68..+327.67 dB); 0xFFFF mute
- id: set_io_gain_32bit_request
label: Set IO Gain 32bit - Request
kind: query
command: "112D0000,4,AudioId_b0,AudioId_b1,AudioId_b2,AudioId_b3"
params:
- name: audio_id_32bit
type: integer
description: 32bit AudioID
- id: set_io_gain_32bit_set
label: Set IO Gain 32bit - Set
kind: action
command: "112D0000,6,AudioId_b0,AudioId_b1,AudioId_b2,AudioId_b3,ValueHi,ValueLo"
params:
- name: audio_id_32bit
type: integer
description: 32bit AudioID
- name: value
type: integer
description: 0x8000..0x7FFF dB
- id: metering_set_notification
label: Metering - Activate/Deactivate
kind: action
command: "111D0000,2,Leveldetect,ON"
params:
- name: leveldetect
type: integer
description: 1..48 Leveldetect/TruePeak/Loudness position from TB8 config
- name: on
type: integer
description: 0 deactivate, 1 activate
- id: cf_in_parameter_request
label: CleanFeed Input Parameter - Request
kind: query
command: "11810000,4,ChannelHi,ChannelLo,00,24"
params:
- name: channel
type: integer
description: 0x0001..0x00BA (1..250)
- id: cf_in_parameter_set
label: CleanFeed Input Parameter - Set
kind: action
command: "11810000,8,ChannelHi,ChannelLo,00,24,Param_b0,Param_b1,Param_b2,Param_b3"
params:
- name: channel
type: integer
description: 0x0001..0x00BA
- name: cf_input_gain_db
type: integer
description: Byte00xD8..0x00..0x0F (-40..0..+15 dB), upper bytes0
- id: cf_out_parameter_request
label: CleanFeed Output Parameter - Request
kind: query
command: "11810000,4,ChannelHi,ChannelLo,00,25"
params:
- name: channel
type: integer
description: 0x0001..0x00BA- id: cf_out_parameter_set
label: CleanFeed Output Parameter - Set
kind: action
command: "11810000,8,ChannelHi,ChannelLo,00,25,Param_b0,Param_b1,Param_b2,Param_b3"
params:
- name: channel
type: integer
description: 0x0001..0x00BA
- name: param_bits
type: integer
description: Bits:18 N-Mix, 17 AltSrc, 16 CFMute, 15..8 AltSrcListPos, 7..0 Gain 0xD2..0x00..0x0A (-30..0..+10 dB)
Feedbacks
- id: route_output_16bit_crosspoint_notification
type: object
description: 16-bit crosspoint notification (firmware 06.xx+) - length 1- id: route_output_32bit_crosspoint_notification
type: object
description: 32-bit crosspoint notification - length 8; sent when DHD-internal routing changes (TCP only)
- id: arbitration_answer
type: object
description: Arbitration answer - length 5; Output/Input AudioID + owning DeviceID
- id: fader_value_notification
type: object
description: Fader value notification (firmware 07.02.09+) - length 4
- id: pfl_state_notification
type: object
description: PFL state answer (length 4) - VirtualMixer/Fader + On/AutoMute
- id: motorfader_touched
type: object
description: 0x11820000 - ChannelNr0x01..0xFA + Touch 0/1
- id: metering_notification
type: object
description: 0x111D0000 - length 6; Correlation + LevelL + LevelR
- id: cf_in_value_info
type: object
description: CleanFeed input value information when value changes internally - length 8
- id: cf_out_value_info
type: object
description: CleanFeed output value information when value changes internally - length 8
Variables
# UNRESOLVED: section omitted - all per-command parameter values are encoded in action params
Events
# UNRESOLVED: section omitted - see Feedbacks for unsolicited notifications
Macros
# UNRESOLVED: source documents single commands only; no multi-step macro sequences described
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings beyond general "IO Gain changes persist until restart" note
Notes
ECP is deprecated as of firmware 10.2; new integrations should use the DHD Control API. Per-command firmware applicability varies significantly across 05.xx.xx, 06.xx.xx, 07.xx.xx, 08.xx.xx and 09.00.xx versions — consult the per-command tables in the source. All data is Motorola-format (MSB first). Serial block format uses STX/Length/29-bit ID/Data/Checksum/EOT framing with 38400,8,N,1 and a DLE-escape scheme for bytes 0x00-0x1F. ACK/NAK handshake within 80 ms; up to 3 retries per block; up to 100 blocks buffered.
Provenance
source_domains:
- developer.dhd.audio
- dhd.audio
source_urls:
- https://developer.dhd.audio/docs/API/ECP/
- https://developer.dhd.audio/docs/API/ECP/communication
- https://developer.dhd.audio/docs/API/ECP/commands
- https://dhd.audio/systems/rm-4200d/
- https://developer.dhd.audio/
retrieved_at: 2026-08-18T00:03:30.571Z
last_checked_at: 2026-08-19T09:18:31.672Z
Verification Summary
verdict: verified
checked_at: 2026-08-19T09:18:31.672Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 spec action units have opcode/length/structure matches in the refined source; transport parameters (38400,8,N,1; port 2008) are verbatim; source command catalogue is fully represented. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "command-level firmware applicability varies across 05.xx.xx, 06.xx.xx, 07.xx.xx, 08.00.xx, 08.01.xx, 08.02.xx and 09.00.xx versions; see source per-command tables for exact availability"
- "section omitted - all per-command parameter values are encoded in action params"
- "section omitted - see Feedbacks for unsolicited notifications"
- "source documents single commands only; no multi-step macro sequences described"
- "source contains no explicit safety warnings beyond general \"IO Gain changes persist until restart\" note"
- "32-bit AudioID bit fields differ between Series52 v1 (RM4200D/XR) and v2 (XS/XC/XD); source documents both layouts but spec does not enumerate them as separate fields"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0