Summary
Cloud 46/120 mixer-amplifier (model 46-120MK2) controlled via the CDI-46 serial control card. The CDI-46 protocol is a text message protocol carried over RS-232 or over Ethernet (TCP, default port 4999). Messages set/clear mute, source select, level, microphone paging, zone defaults, parent-amplifier power state, and system parameters (baud, text field, boot loader, reset).
Transport
protocols:
- tcp
- serial
# Source: "This protocol may be used for sending commands to the RS232 interface
# or to the Ethernet interface on the port dedicated to the CDI-46 (default 4999)."
addressing:
port: 4999 # default Ethernet port dedicated to the CDI-46
serial:
baud_rate: null # UNRESOLVED: factory default baud rate not stated in source
# Available baud rates (settable via <SY.RS,B{rate}/>): 4800, 9600, 19200, 38400, 57600, 115200
data_bits: null # UNRESOLVED: data bits not stated in source
parity: null # UNRESOLVED: parity not stated in source
stop_bits: null # UNRESOLVED: stop bits not stated in source
flow_control: null # UNRESOLVED: flow control not stated in source
auth:
type: UNRESOLVED # source does not state this (was inferred none: no connection-level login procedure in source.)
# NOTE: a 4-digit numeric password exists for boot loader unlock (<SY,BU{pin}/>)
# and password change (<SY,K{old}{new}/>), default "1234" after reset.
# The web management interface is separately password protected (out of scope).
Traits
traits:
- powerable # inferred: parent amplifier power up/down commands (<SY.PA,PU/PD/>)
- routable # inferred: source select + microphone paging across zones
- queryable # inferred: query modifiers (Q, SQ, LQ, PQ, MQ, *V,Q)
- levelable # inferred: music level commands (L/LU/LD) in dB steps
Actions
# Message envelope: header "<", destination+command, terminator "/>". Control
# messages are UPPER CASE; responses are lower case. Destinations:
# Zones: Z1, Z2, Z3, Z4 (each with sub-destination .MU music, .M1/.M2/.MI mic)
# Global music: MU
# Microphones: MI (both), M1, M2
# System: SY (sub: .RS, .TX, .HV, .SV, .PV, .PA)
# External: EX
# "D" prefix on a destination sets the stored default value.
# --- Mute / Open (music + microphone destinations) ---
- id: mute
label: Mute
kind: action
command: "<{dst},M/>"
params:
- name: dst
type: string
description: "Destination token, e.g. Z1.MU, Z1.M1, Z1.MI, MI, M1, M2, MU"
- id: open
label: Open (unmute)
kind: action
command: "<{dst},O/>"
params:
- name: dst
type: string
description: "Destination token, e.g. Z1.MU, Z1.M1, Z1.MI, MI, M1, M2, MU"
- id: general_query
label: General Query
kind: query
command: "<{dst},Q/>"
params:
- name: dst
type: string
description: "Destination token (music or microphone). Returns mute/source-enable/level-enable set."
# --- Music source (destination: {zone}.MU or MU) ---
- id: source_up
label: Source Up
kind: action
command: "<{dst},SU/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- id: source_down
label: Source Down
kind: action
command: "<{dst},SD/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- id: source_set
label: Source Select (absolute)
kind: action
command: "<{dst},S{n}/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- name: n
type: integer
description: "Line input 1-6, or 0 for none"
- id: source_enable
label: Source Enable
kind: action
command: "<{dst},SE/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- id: source_disable
label: Source Disable
kind: action
command: "<{dst},SX/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- id: source_query
label: Source Query
kind: query
command: "<{dst},SQ/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
# --- Music level (destination: {zone}.MU or MU) ---
- id: level_up
label: Level Up
kind: action
command: "<{dst},LU{step}/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- name: step
type: integer
description: "dB increase (e.g. 10 = +10dB)"
- id: level_down
label: Level Down
kind: action
command: "<{dst},LD{step}/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- name: step
type: integer
description: "dB decrease (e.g. 10 = -10dB)"
- id: level_set
label: Level Set (absolute)
kind: action
command: "<{dst},L{value}/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- name: value
type: integer
description: "Attenuation 0-90 dB (value of 20 = -20dB)"
- id: level_enable
label: Level Enable
kind: action
command: "<{dst},LE/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- id: level_disable
label: Level Disable
kind: action
command: "<{dst},LX/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
- id: level_query
label: Level Query
kind: query
command: "<{dst},LQ/>"
params:
- name: dst
type: string
description: "{zone}.MU (zone) or MU (global music)"
# --- Microphone 1 paging (destination M1 only) ---
- id: page_access
label: Page Access
kind: action
command: "<M1,PA{value}/>"
params:
- name: value
type: string
description: "1-4 char list; X=routed to zone, O=un-routed. Position = zone (1..4). Truncatable."
- id: page_release
label: Page Release
kind: action
command: "<M1,PR/>"
params: []
- id: page_query
label: Page Query
kind: query
command: "<M1,PQ/>"
params: []
# --- Default-value commands (D prefix on destination) ---
- id: default_level_set
label: Default Level Set
kind: action
command: "<D{dst},L{value}/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, MU"
- name: value
type: integer
description: "Attenuation 0-90 dB"
- id: default_source_set
label: Default Source Set
kind: action
command: "<D{dst},S{n}/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, MU"
- name: n
type: integer
description: "Line input 1-6, or 0"
- id: default_mute
label: Default Mute
kind: action
command: "<D{dst},M/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, Z1..Z4.M1/M2/MI, MI, M1, M2, MU"
- id: default_open
label: Default Open
kind: action
command: "<D{dst},O/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, Z1..Z4.M1/M2/MI, MI, M1, M2, MU"
- id: default_level_enable
label: Default Level Enable
kind: action
command: "<D{dst},LE/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, MU"
- id: default_source_enable
label: Default Source Enable
kind: action
command: "<D{dst},SE/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, MU"
- id: default_level_disable
label: Default Level Disable
kind: action
command: "<D{dst},LX/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, MU"
- id: default_source_disable
label: Default Source Disable
kind: action
command: "<D{dst},SX/>"
params:
- name: dst
type: string
description: "Z1..Z4.MU, MU"
# --- External ---
- id: spot_announcer_trigger
label: Spot Announcer Trigger
kind: action
command: "<EX,SA{n}/>"
params:
- name: n
type: integer
description: "PMSA message group number (e.g. 2)"
# --- System ---
- id: system_reset
label: System Reset
kind: action
command: "<SY,R/>"
params: []
- id: init_mode_default
label: Init Mode Default
kind: action
command: "<SY,ID/>"
params: []
- id: init_mode_previous
label: Init Mode Previous
kind: action
command: "<SY,IP/>"
params: []
- id: init_mode_factory
label: Init Mode Factory
kind: action
command: "<SY,IF/>"
params: []
- id: rs232_baud_set
label: RS232 Baud Set
kind: action
command: "<SY.RS,B{rate}/>"
params:
- name: rate
type: integer
description: "One of 4800, 9600, 19200, 38400, 57600, 115200"
- id: password_set
label: Password Set
kind: action
command: "<SY,K{oldnew}/>"
params:
- name: oldnew
type: string
description: "Exactly 8 numeric chars: first 4 = old password, last 4 = new password"
- id: ping
label: Ping
kind: action
command: "<SY,?/>"
params: []
- id: system_music_mute_socket_query
label: System Music Mute Socket Query
kind: query
command: "<SY,MQ/>"
params: []
- id: software_version_query
label: Software Version Query
kind: query
command: "<SY.SV,Q/>"
params: []
- id: hardware_version_query
label: Hardware Version Query (CDI-46)
kind: query
command: "<SY.HV,Q/>"
params: []
- id: parent_version_query
label: Parent Amplifier Version Query
kind: query
command: "<SY.PV,Q/>"
params: []
- id: parent_amp_power_down
label: Parent Amplifier Power Down
kind: action
command: "<SY.PA,PD/>"
params: []
- id: parent_amp_power_up
label: Parent Amplifier Power Up
kind: action
command: "<SY.PA,PU/>"
params: []
- id: parent_amp_power_query
label: Parent Amplifier Power Query
kind: query
command: "<SY.PA,Q/>"
params: []
- id: text_field_set
label: Text Field Set
kind: action
command: "<SY.TX,S={text}/>"
params:
- name: text
type: string
description: "Up to 32 ASCII characters"
- id: text_field_query
label: Text Field Query
kind: query
command: "<SY.TX,Q/>"
params: []
- id: bootload_unlock
label: Boot Load Unlock
kind: action
command: "<SY,BU{pin}/>"
params:
- name: pin
type: string
description: "4-digit numeric password (default 1234 after reset)"
- id: bootload_enable
label: Boot Load Enable
kind: action
command: "<SY,BE/>"
params: []
- id: bootload_disable
label: Boot Load Disable
kind: action
command: "<SY,BD/>"
params: []
- id: bootload_reset
label: Boot Load Reset
kind: action
command: "<SY,BR/>"
params: []
- id: bootload_lock
label: Boot Load Lock
kind: action
command: "<SY,BL/>"
params: []
- id: bootload_query
label: Boot Load Query
kind: query
command: "<SY,BQ/>"
params: []
Feedbacks
# All responses are lower-case echoes of the sent message. Level/source commands
# return the new absolute value; global-music responses return a semicolon-
# separated list of per-zone values.
- id: power_state
type: enum
values: [pu, pd] # response to <SY.PA,Q/>: "q = pu" or "q = pd"
query_command: "<SY.PA,Q/>"
- id: music_mute_state
type: enum
values: [m, o] # mute / open
query_command: "<Z1.MU,Q/>"
- id: microphone_mute_state
type: enum
values: [m, o]
query_command: "<MI,Q/>"
- id: music_level
type: integer
# absolute attenuation 0-90 dB
query_command: "<Z1.MU,LQ/>"
- id: music_source
type: integer
# 0-6
query_command: "<Z1.MU,SQ/>"
- id: text_field
type: string
query_command: "<SY.TX,Q/>"
- id: cdi_hardware_version
type: string
query_command: "<SY.HV,Q/>"
- id: cdi_software_version
type: string
query_command: "<SY.SV,Q/>"
- id: parent_hardware_version
type: string
query_command: "<SY.PV,Q/>"
- id: bootload_state
type: string
# response form: "<sy,bq = {lock}{enabled}/> e.g. ld (locked+disabled), ue (unlocked+enabled)"
query_command: "<SY,BQ/>"
- id: error
type: enum
values: [B, E, I, N, A, P, T]
# Buffer full, Execution, Interrupted, NVM-not-ready, Overrun, Parse, Token
Variables
# Settable parameters already exposed as actions (level, source, baud rate,
# password, text field, init mode, defaults). No additional non-action
# variables identified in source.
Events
# No unsolicited notifications documented. All responses are solicited replies
# to control messages.
Macros
# No multi-step sequences explicitly described in source.
Safety
confirmation_required_for:
- system_reset # <SY,R/> resets ALL parameters to factory defaults
- parent_amp_power_down # mutes all amplifier outputs (standby)
- bootload_reset # forces CDI-46 into boot loader at next power-on/reset
- rs232_baud_set # changes baud after the response is sent; can break the active session
interlocks:
- "Boot loader enable/disable/reset only available when unlocked (<SY,BU{pin}/>); reset requires unlocked AND enabled."
- "Password change (<SY,K{old}{new}/>) requires the correct current 4-digit password as the first 4 chars."
# Source text: "As a safety feature enabling or disabling is only available when
# unlocked, reset is only available when unlocked and enabled. As an extra
# safeguard the unlock modifier requires the four digit numeric password as a
# value."
Notes
- Message envelope is
<DESTINATION,COMMAND/>. A new<header aborts any in-progress message (returns an Interrupted error). Receive buffer is 64 characters; overflow yields a Buffer Full error (<!B Message Buffer Full/>) and all chars are ignored until the next<. - Control messages use UPPER CASE; response and error replies use lower case. Errors take the form
<!{ID} [returned] text/>with ID in{B,E,I,N,A,P,T}. - Global music (
MU) responses for level/source return a semicolon-separated list of the four zone values (zone1;zone2;zone3;zone4). - Default-value commands use the
Dprefix on the destination token; the last default sent may override earlier ones (per-zone overrides global and vice-versa). - The CDI-46 ships with DHCP enabled; the web management interface (password protected) is used to set RS-232 baud and network settings.
- Boot loader password defaults to
1234after a system reset.
## Provenance
```yaml
source_domains:
- cloud.co.uk
source_urls:
- "https://www.cloud.co.uk/uploads/2022/01/CDI-46 Control Protocol V1.2.pdf"
- https://www.cloud.co.uk/uploads/2025/04/46-120mk2-46-240_manual_en_v1.2-1.pdf
- https://www.cloud.co.uk/uploads/2022/01/5ddbebf156ced526e8366bbe586b8501.pdf
- https://www.cloud.co.uk
retrieved_at: 2026-07-25T20:02:16.136Z
last_checked_at: 2026-10-07T13:16:23.126Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T13:16:23.126Z
matched_actions: 59
action_count: 59
confidence: medium
summary: "All 59 action units match source commands with correct shapes; port 4999 and baud rates supported; undocumented serial/auth fields honestly UNRESOLVED. (11 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "default RS-232 baud rate not explicitly stated (available rates listed). Serial framing (data/parity/stop bits) not stated. Firmware/hardware version compatibility not stated. Web interface auth credentials not stated."
- "factory default baud rate not stated in source"
- "data bits not stated in source"
- "parity not stated in source"
- "stop bits not stated in source"
- "flow control not stated in source"
- "factory-default RS-232 baud rate not stated (only the set of valid rates)."
- "serial framing (data bits / parity / stop bits / flow control) not stated."
- "firmware and hardware version compatibility ranges not stated."
- "web interface default password not stated (only the boot-loader/protocol password default of 1234)."
- "Ethernet transport details beyond default port 4999 (TLS, keepalive, line ending) not stated."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0