Summary

Renkus-Heinz Iconyx R / IC-Live R powered loudspeaker columns. RS-485 control protocol at 57600 8-N-1. Each column individually addressed by last 3 octets of its MAC address. Commands framed AA <addr3> <payload> CC (header AA, footer CC). Some commands master-only (M), some required for all units (A), some require ADC disable/enable wrapper (D). RS-485 control mode must first be enabled per column from RHAON software.

Transport

protocols:
  - serial
serial:
  baud_rate: 57600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none  # UNRESOLVED: flow control not explicitly stated; source says "RS-485, 57,600/8-N-1"
  variant: rs485
addressing:
  framing:
    header: "0xAA"
    footer: "0xCC"
    address_bytes: 3  # last 3 octets of column MAC (first 3 always 00:1B:DE)
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable    # inferred from RemotePowerON / RemotePowerOFF
- queryable    # inferred from Status request command
- levelable    # inferred from Sendvolume / gain encoding table
- routable     # inferred from AES/EBU input switching commands

Actions

- id: status_request
  label: Status Request
  kind: query
  command: "AA <addr3> 01 02 CC"
  scope: all_units
  notes: Returns 7 status messages (gain, delay, speaker open coil, supply voltages, temperature, P/S temperature, last loaded preset). See Feedbacks.

- id: led_on
  label: LED On (Wink)
  kind: action
  command: "AA <addr3> 02 07 CC"
  scope: all_units

- id: led_off
  label: LED Off
  kind: action
  command: "AA <addr3> 02 08 CC"
  scope: all_units

- id: board_reset
  label: Board Reset
  kind: action
  command: "AA <addr3> 02 09 CC"
  scope: all_units

- id: micro_version_hw_rev_query
  label: Microcontroller Firmware / Hardware Assembly Revision Query
  kind: query
  command: "AA <addr3> 02 0A CC"
  scope: all_units
  notes: Response = <Header><Address><5 bytes FW Ver><32 bytes HW Rev><32 bytes Password><Footer>. ASCII, HW Rev/Password terminated with 0xFF.

- id: disable_adc
  label: Disable ADC
  kind: action
  command: "AA <addr3> 02 98 CC"
  scope: all_units
  notes: Wait 100ms after issuing before sending an ADC-restricted command.

- id: enable_adc
  label: Enable ADC
  kind: action
  command: "AA <addr3> 02 99 CC"
  scope: all_units
  notes: Wait 200ms after issuing.

- id: set_7segment_digit
  label: Set 7-Segment to Digit
  kind: action
  command: "AA <addr3> 02 8{x} CC"
  scope: all_units
  params:
    - name: x
      type: integer
      description: Digit value (low nibble of second payload byte; 0x80..0x8F range)

- id: decimal_points_on
  label: Decimal Points On
  kind: action
  command: "AA <addr3> 02 94 CC"
  scope: all_units

- id: decimal_points_off
  label: Decimal Points Off
  kind: action
  command: "AA <addr3> 02 95 CC"
  scope: all_units

- id: save_decimal_points_default
  label: Save Decimal Points Default Status
  kind: action
  command: "AA <addr3> 02 AE CC"
  scope: all_units

- id: enable_7segment_display
  label: Enable 7-Segment Display
  kind: action
  command: "AA <addr3> 02 9E CC"
  scope: all_units

- id: disable_7segment_display
  label: Disable 7-Segment Display
  kind: action
  command: "AA <addr3> 02 9F CC"
  scope: all_units

- id: save_7segment_default
  label: Save 7-Segment Default Status
  kind: action
  command: "AA <addr3> 02 A7 CC"
  scope: all_units

- id: disable_crestron_comms_saved
  label: Disable Crestron Comms (Saved)
  kind: action
  command: "AA <addr3> 02 10 CC"
  scope: all_units
  notes: Returns column to CobraNet/RHAON mode and persists state.

- id: disable_crestron_comms_not_saved
  label: Disable Crestron Comms (Not Saved)
  kind: action
  command: "AA <addr3> 02 AC CC"
  scope: all_units

- id: read_preset_metadata_2
  label: Read 2nd Set of Preset Metadata
  kind: query
  command: "AA <addr3> 09 {preset} CC"
  scope: all_units
  requires_adc_disable: true
  params:
    - name: preset
      type: integer
      description: Preset index (single byte)
  notes: Response = <Header><Address><128 bytes metadata><Footer>. Metadata layout = 1 byte audience-area count, 48 bytes audience-area dimensions (floats), 4 bytes array X, 4 bytes array Y, 4 bytes array angle, 63 bytes ASCII preset name (0xFF-terminated). Unused dimension bytes filled 0xFF.

- id: begin_test_tone_scan
  label: Begin Test Tone Channel Scan
  kind: action
  command: "AA <addr3> 02 A8 CC"
  scope: all_units

- id: end_test_tone_scan
  label: End Test Tone Channel Scan
  kind: action
  command: "AA <addr3> 02 A9 CC"
  scope: all_units

- id: enter_button_press
  label: Enter Button Press
  kind: action
  command: "AA <addr3> 02 90 CC"
  scope: all_units
  requires_adc_disable: true
  notes: Wait 15 seconds after issuing for preset to load.

- id: remote_power_on
  label: Remote Power On
  kind: action
  command: "AA <addr3> 02 12 CC"
  scope: master_only

- id: remote_power_off
  label: Remote Power Off
  kind: action
  command: "AA <addr3> 02 13 CC"
  scope: master_only

- id: toggle_mute
  label: Toggle Mute
  kind: action
  command: "AA <addr3> 02 16 CC"
  scope: master_only

- id: toggle_analog_pad
  label: Toggle Analog Pad
  kind: action
  command: "AA <addr3> 02 17 CC"
  scope: master_only

- id: lock_buttons
  label: Lock Front-Panel Buttons
  kind: action
  command: "AA <addr3> 02 0B CC"
  scope: master_only

- id: unlock_buttons
  label: Unlock Front-Panel Buttons
  kind: action
  command: "AA <addr3> 02 0C CC"
  scope: master_only

- id: send_delay
  label: Send Delay (R and L channels)
  kind: action
  command: "AA <addr3> 07 {Rhi} {Rlo} {Lhi} {Llo} CC"
  scope: master_only
  params:
    - name: Rhi
      type: integer
      description: Right-channel delay high byte (16-bit value = delay_ms * sample_rate_Hz / 1000)
    - name: Rlo
      type: integer
      description: Right-channel delay low byte
    - name: Lhi
      type: integer
      description: Left-channel delay high byte
    - name: Llo
      type: integer
      description: Left-channel delay low byte
  notes: Max 170 ms per channel @ 48 kHz, 85 ms @ 96 kHz. Example payload "07 1F E0 0D B0" = R=170ms L=73ms @ 48 kHz.

- id: save_delay
  label: Save Delay
  kind: action
  command: "AA <addr3> 02 1A CC"
  scope: master_only

- id: aes_off
  label: AES/EBU Input Off
  kind: action
  command: "AA <addr3> 02 96 CC"
  scope: master_only

- id: aes_on
  label: AES/EBU Input On
  kind: action
  command: "AA <addr3> 02 97 CC"
  scope: master_only

- id: phase_inversion_off
  label: Phase Inversion Off
  kind: action
  command: "AA <addr3> 02 A5 CC"
  scope: master_only

- id: phase_inversion_on
  label: Phase Inversion On
  kind: action
  command: "AA <addr3> 02 A6 CC"
  scope: master_only

- id: send_volume
  label: Send Volume
  kind: action
  command: "AA <addr3> 06 {gain_byte} {gain_counter} CC"
  scope: master_only
  params:
    - name: gain_byte
      type: integer
      description: Gain byte (hex) per Gain Encoding table; e.g. 0xC8 = 0.0 dB
    - name: gain_counter
      type: integer
      description: Gain counter (hex) per Gain Encoding table; e.g. 0xC9 = 0.0 dB
  notes: Range 0.0 dB (C8 C9) down to -100.0 dB (00 00) in 0.5 dB steps. See Gain Encoding table in source.

- id: save_volume
  label: Save Volume
  kind: action
  command: "AA <addr3> 02 18 CC"
  scope: master_only

- id: test_tone_set_freq_440hz_amp1
  label: Test Tone Set Frequency 440 Hz (D2Audio amp 1)
  kind: action
  command: "AA <addr3> 2A 54 B2 00 00 3F 01 2C 60 CC"
  scope: all_units
  notes: Low-frequency driver test tone.

- id: test_tone_set_freq_440hz_amp2
  label: Test Tone Set Frequency 440 Hz (D2Audio amp 2)
  kind: action
  command: "AA <addr3> 2A 54 B4 00 00 3F 01 2C 60 CC"
  scope: all_units

- id: test_tone_set_freq_5khz_amp1
  label: Test Tone Set Frequency 5 kHz (D2Audio amp 1)
  kind: action
  command: "AA <addr3> 2A 54 B2 00 00 3F 0D 55 57 CC"
  scope: all_units
  notes: High-frequency driver test tone.

- id: test_tone_set_freq_5khz_amp2
  label: Test Tone Set Frequency 5 kHz (D2Audio amp 2)
  kind: action
  command: "AA <addr3> 2A 54 B4 00 00 3F 0D 55 57 CC"
  scope: all_units

- id: test_tone_set_level_neg12db_amp1
  label: Test Tone Set Level -12 dB (D2Audio amp 1)
  kind: action
  command: "AA <addr3> 2A 54 B2 00 00 42 DF D9 0D CC"
  scope: all_units

- id: test_tone_set_level_neg12db_amp2
  label: Test Tone Set Level -12 dB (D2Audio amp 2)
  kind: action
  command: "AA <addr3> 2A 54 B4 00 00 42 DF D9 0D CC"
  scope: all_units

- id: test_tone_engage_amp1
  label: Engage Sine Tone Generator (D2Audio amp 1)
  kind: action
  command: "AA <addr3> 2A 54 B2 00 00 40 80 00 00 CC"
  scope: all_units

- id: test_tone_engage_amp2
  label: Engage Sine Tone Generator (D2Audio amp 2)
  kind: action
  command: "AA <addr3> 2A 54 B4 00 00 40 80 00 00 CC"
  scope: all_units

- id: test_tone_disengage_amp1
  label: Disengage Sine Tone Generator (D2Audio amp 1)
  kind: action
  command: "AA <addr3> 2A 54 B2 00 00 40 00 00 00 CC"
  scope: all_units

- id: test_tone_disengage_amp2
  label: Disengage Sine Tone Generator (D2Audio amp 2)
  kind: action
  command: "AA <addr3> 2A 54 B4 00 00 40 00 00 00 CC"
  scope: all_units

Feedbacks

- id: status_msg1_gain_flags
  label: Status Message 1 (Gain + Flags)
  frame: "AA <addr3> 2C <gain> <flags> CC"
  fields:
    - name: gain
      description: Current gain byte (see Gain Encoding table)
    - name: flags
      description: Bit-packed (bit 1=mute, 2=input pad, 3=remote power, 4=fault relay, 5=front LED, 6=alarm pin high/low, 7=alarm pin connected, 8=button lock)

- id: status_msg2_delay
  label: Status Message 2 (Delay)
  frame: "AA <addr3> <Rhi> <Rlo> <Lhi> <Llo> CC"

- id: status_msg3_speaker_coil_flags
  label: Status Message 3 (Speaker Open Coil + I/O Flags)
  frame: "AA <addr3> 2D <speaker_open_coil> <flags> CC"
  fields:
    - name: speaker_open_coil
      description: Each bit = 1 speaker. 0=OK, 1=open. Bit 1 = top speaker, bit 8 = bottom speaker.
    - name: flags
      description: Bit 1=ext RH-switch attached, 2=7-segment display status, 3=AES/EBU input status, 4=Ethernet connected, 5=fault relay default behavior, 6=signal present, 7=signal clip, 8=phase inversion.

- id: status_msg4_7seg_supply
  label: Status Message 4 (7-Segment Digits + Supply Voltages)
  frame: "AA <addr3> 29 <7seg_digits> <flags> CC"
  fields:
    - name: flags
      description: Bit 1=+5V OK, 2=+12V OK, 3=+1.8V OK, 4=-12V OK, 5=+3.3V OK, 6/7=unassigned, 8=D2Audio amp fault (1=BAD).

- id: status_msg5_column_temperature
  label: Status Message 5 (Column Temperature, F)
  frame: "AA <addr3> 2F <tenc_hi> <tenc_lo> CC"
  notes: "Temperature_F = ((((tenc * 2.4) / 1024) * 1000) + 500) / 10"

- id: status_msg6_psu_temperature
  label: Status Message 6 (Power Supply Temperature, F)
  frame: "AA <addr3> 31 <tenc_hi> <tenc_lo> CC"
  notes: Same encoding as msg 5.

- id: status_msg7_last_preset
  label: Status Message 7 (Last Loaded Preset + Mode Flags)
  frame: "AA <addr3> 32 <last_preset> <flags> CC"
  fields:
    - name: last_preset
      description: 0xFF if no preset has been loaded.
    - name: flags
      description: Bit 1=RS-485 mode status, 2=7-segment display default status, 3=7-segment decimal point default status, 4-8 unassigned.

- id: preset_metadata_response
  label: Preset Metadata (Set 2) Response
  frame: "AA <addr3> <128 bytes metadata> CC"
  notes: Returned in response to read_preset_metadata_2.

- id: firmware_hw_response
  label: Microcontroller Firmware / Hardware Revision Response
  frame: "AA <addr3> <5 bytes FW Ver ASCII> <32 bytes HW Rev ASCII> <32 bytes Password ASCII> CC"
  notes: HW Rev and Password strings 0xFF-terminated.

Variables

- id: gain_db
  label: Output Gain (dB)
  type: float
  range: [-100.0, 0.0]
  step: 0.5
  encoding: gain_encoding_table
  setter: send_volume
  persist: save_volume
  notes: See full Gain Encoding table in source (0.0 dB = C8 C9 ... -100.0 dB = 00 00).

- id: delay_ms_right
  label: Delay Right Channel (ms)
  type: integer
  range_48k: [0, 170]
  range_96k: [0, 85]
  encoding: "delay_int = delay_ms * sample_rate_Hz / 1000 (16-bit)"
  setter: send_delay
  persist: save_delay

- id: delay_ms_left
  label: Delay Left Channel (ms)
  type: integer
  range_48k: [0, 170]
  range_96k: [0, 85]
  encoding: "delay_int = delay_ms * sample_rate_Hz / 1000 (16-bit)"
  setter: send_delay
  persist: save_delay

Events

# UNRESOLVED: source does not describe unsolicited/asynchronous notifications.
# All response frames are reply-to-request only (see Feedbacks).

Macros

- id: open_coil_test_sequence
  label: Open-Coil Driver Test Sequence
  steps:
    - Stop polling status messages.
    - Issue Toggle Mute on master column (if necessary).
    - Send begin_test_tone_scan.
    - Send test_tone_set_freq_440hz_amp1 + test_tone_set_freq_440hz_amp2 (LF drivers) OR 5 kHz variants (HF drivers).
    - Send test_tone_set_level_neg12db_amp1 + test_tone_set_level_neg12db_amp2.
    - Send test_tone_engage_amp1 + test_tone_engage_amp2.
    - Wait 10 seconds.
    - Send status_request and decode Message 3 speaker_open_coil byte.
    - Send test_tone_disengage_amp1 + test_tone_disengage_amp2.
    - Send end_test_tone_scan.
    - Toggle Mute master column back (if necessary).

- id: adc_restricted_command_wrapper
  label: ADC-Restricted Command Wrapper
  steps:
    - Send disable_adc, wait 100 ms.
    - Send the ADC-restricted command (e.g. enter_button_press, read_preset_metadata_2).
    - Send enable_adc, wait 200 ms.

Safety

confirmation_required_for:
  - board_reset
  - remote_power_off
interlocks:
  - description: ADC-restricted commands (kind D) MUST be wrapped in disable_adc / enable_adc with the documented 100 ms / 200 ms waits.
    affected_commands: [enter_button_press, read_preset_metadata_2]
  - description: Open-coil test must mute master, run scan window, then unmute and stop scan before resuming normal use.
    affected_commands: [test_tone_engage_amp1, test_tone_engage_amp2]
# UNRESOLVED: voltage/current/power specs not stated in source.

Notes

  • RS-485 control mode must be enabled per column from RHAON software ("Switch Device to RS485 mode") before any of these commands work. Disabling returns control to CobraNet/RHAON; can be done either via RHAON or by issuing disable_crestron_comms_saved / disable_crestron_comms_not_saved on the bus.
  • In a multi-column array, the master column (set via on-unit DIP switches) feeds audio to slaves. Master-only (M) commands target master; All-units (A) commands must be sent individually to each column.
  • Address bytes = last 3 octets of the column's MAC address; first 3 are always 00:1B:DE.
  • Wiring: 6-pin 3.5 mm Phoenix connector J4 (bottom-left of User Interface Panel). Pin 2 = RS-485 Y, pin 3 = RS-485 X, pin 4 = DGND. Pins 1/5/6 (Vdd+, Remote LED Out, Program) reserved for Remote Controller.
  • Family covers Iconyx R Gen-3 line: IC8-R-II, IC16-R-II, IC24-R-II, IC32-R-II, and IC-Live R variants. Per-column communication required regardless of array size.
  • Test tones have two near-identical command pairs because each column has 2 D2Audio amplifiers (address byte B2 vs B4).

Provenance

source_domains:
  - renkus-heinz.com
  - legacy.renkus-heinz.com
source_urls:
  - https://www.renkus-heinz.com/wp-content/uploads/2021/03/an-ic-2-rs485-1-1.pdf
  - https://www.renkus-heinz.com/wp-content/uploads/2021/03/icr-ii-usersmanual-2.pdf
  - "https://legacy.renkus-heinz.com/downloads/Iconyx_Gen-1_Gen-2/2_Then_Look_Here/1_Seriously_Did_You_Read_This/Servicing%20Serial%20Iconyx.pdf"
  - https://www.renkus-heinz.com/downloads/
  - https://www.renkus-heinz.com/products/plugins/
retrieved_at: 2026-05-18T11:03:05.228Z
last_checked_at: 2026-06-02T17:23:54.176Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T17:23:54.176Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 spec actions matched wire-level tokens in source; transport parameters (baud, framing, addressing) verified; coverage complete. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "TCP/IP control surface (RHAON II) exists per family notes but not covered in this source — RS-485 only here."
- "flow control not explicitly stated; source says \"RS-485, 57,600/8-N-1\""
- "source does not describe unsolicited/asynchronous notifications."
- "voltage/current/power specs not stated in source."
- "TCP/IP RHAON-II control protocol (mentioned in family notes for the broader product line) is NOT in this source; this spec covers RS-485 only."
- "firmware version compatibility ranges not stated."
- "serial flow control not explicitly stated; source says \"57,600/8-N-1\" only."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0