Summary

Xilica XP series DSP processors (XP2040, XP3060, XP4080, XP8080) controlled via RS-232 serial using the XConsole binary communication protocol (April 2008). The protocol uses SOH/STX-framed ASCII-hex packets with a modulo-96 checksum and supports read/write operations for audio processing parameters including EQ, dynamics, routing, and system configuration.

Transport

protocols:
  - serial
serial:
  baud_rate: 115200
  data_bits: 8
  parity: none
  stop_bits: 2
  flow_control: none
auth:
  type: none  # inferred: no auth procedure in source

Traits

- levelable    # inferred: LVL0, MIC0, EQL0, EQL1, gain/level commands present
- queryable    # inferred: Read ('R') operations return parameter values; MTR0 meter query
- routable     # inferred: MIX0 mixer command routes inputs to outputs

Actions

# Protocol frame structure (common to all commands):
#   <01><W/R><SENDER><03><CMD_4BYTES><08>{device}<09>{io}<0A>{channel}<0B>{aux}<HEADER>{data}<1F><CHECKSUM><02>
# <01> = SOH, <02> = STX (frame delimiters)
# W/R = <57>/<52> (Write/Read)
# <SENDER> = <7F> normally
# <03> = command header (4-byte command ID follows)
# <08> = device header, <09> = I/O header, <0A> = channel header, <0B> = aux header
# <10>-<18> = data headers (1-9 bytes)
# <1F> = process byte (triggers execution)
# Checksum: sum all bytes SOH..before checksum, mod 0x60, + 0x20
# Device/I/O/Channel/Aux values are zero-based (<20> = 0, <21> = 1, etc.)

- id: meter
  label: Meter
  kind: query
  command: "<03><4D><54><52><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based, <20>=0...<2F>=15)"
    - name: io
      type: integer
      description: "0=<20> for Input, 1=<21> for Output"
    - name: channel
      type: integer
      description: "Channel number (0-based, <20>=0...<27>=7)"

- id: mute_set
  label: Mute Set
  kind: action
  command: "<03><4D><55><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: mute_on
      type: integer
      description: "0=OFF (<20>), 1=ON (<21>)"

- id: mute_query
  label: Mute Query
  kind: query
  command: "<03><4D><55><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: mix_gain_set
  label: Mix Gain Set
  kind: action
  command: "<03><4D><49><43><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: gain
      type: integer
      description: "0-15 (0dB to 45dB, 3dB steps)"

- id: mix_gain_query
  label: Mix Gain Query
  kind: query
  command: "<03><4D><49><43><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: signal_level_set
  label: Signal Level Set
  kind: action
  command: "<03><4C><56><4C><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: level
      type: integer
      description: "0-220 (-40dB to +15dB, 0.25dB steps)"

- id: signal_level_query
  label: Signal Level Query
  kind: query
  command: "<03><4C><56><4C><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: signal_polarity_set
  label: Signal Polarity Set
  kind: action
  command: "<03><50><4F><4C><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: polarity
      type: integer
      description: "0=+ (<20>), 1=- (<21>)"

- id: signal_polarity_query
  label: Signal Polarity Query
  kind: query
  command: "<03><50><4F><4C><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: signal_delay_set
  label: Signal Delay Set
  kind: action
  command: "<03><44><4C><59><33>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: delay
      type: integer
      description: "0-62400 (0ms to 650ms, 1/96ms steps)"

- id: signal_delay_query
  label: Signal Delay Query
  kind: query
  command: "<03><44><4C><59><33>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: eq_type_set
  label: EQ Type Set
  kind: action
  command: "<03><45><51><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"
    - name: eq_type
      type: integer
      description: "0=PEQ, 1=LO-SH, 2=HI-SH, 3=AP-1, 4=AP-2"

- id: eq_type_query
  label: EQ Type Query
  kind: query
  command: "<03><45><51><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"

- id: eq_frequency_set
  label: EQ Frequency Set
  kind: action
  command: "<03><45><51><46><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"
    - name: frequency
      type: integer
      description: "0-29980 (20Hz to 30000Hz, 1Hz steps)"

- id: eq_frequency_query
  label: EQ Frequency Query
  kind: query
  command: "<03><45><51><46><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"

- id: eq_bandwidth_set
  label: EQ Bandwidth Set
  kind: action
  command: "<03><45><51><42><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"
    - name: bandwidth
      type: integer
      description: "0-359 (0.02oct to 3.61oct, 0.01oct steps)"

- id: eq_bandwidth_query
  label: EQ Bandwidth Query
  kind: query
  command: "<03><45><51><42><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"

- id: eq_level_set
  label: EQ Level Set
  kind: action
  command: "<03><45><51><4C><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"
    - name: level
      type: integer
      description: "0-180 (-30dB to +15dB, 0.25dB steps)"

- id: eq_level_query
  label: EQ Level Query
  kind: query
  command: "<03><45><51><4C><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"

- id: eq_bypass_set
  label: EQ Bypass Set
  kind: action
  command: "<03><45><51><62><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"
    - name: bypass
      type: integer
      description: "0=OFF (<20>), 1=ON (<21>)"

- id: eq_bypass_query
  label: EQ Bypass Query
  kind: query
  command: "<03><45><51><62><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "EQ number (0-based)"

- id: geq_level_set
  label: GEQ Level Set
  kind: action
  command: "<03><45><51><4C><31>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "GEQ band number (0-based)"
    - name: level
      type: integer
      description: "0-180 (-30dB to +15dB, 0.25dB steps)"

- id: geq_level_query
  label: GEQ Level Query
  kind: query
  command: "<03><45><51><4C><31>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "GEQ band number (0-based)"

- id: geq_bypass_set
  label: GEQ Bypass Set
  kind: action
  command: "<03><45><51><62><31>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "GEQ band number (0-based)"
    - name: bypass
      type: integer
      description: "0=OFF (<20>), 1=ON (<21>)"

- id: geq_bypass_query
  label: GEQ Bypass Query
  kind: query
  command: "<03><45><51><62><31>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "GEQ band number (0-based)"

- id: crossover_type_set
  label: Crossover Type Set
  kind: action
  command: "<03><58><52><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: xover_type
      type: integer
      description: "0=OFF, 1=BUTWRTH, 2=LINK-RI, 3=BESSEL"

- id: crossover_type_query
  label: Crossover Type Query
  kind: query
  command: "<03><58><52><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: crossover_frequency_set
  label: Crossover Frequency Set
  kind: action
  command: "<03><58><52><46><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: frequency
      type: integer
      description: "0-29980 (20Hz to 30000Hz, 1Hz steps)"

- id: crossover_frequency_query
  label: Crossover Frequency Query
  kind: query
  command: "<03><58><52><46><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: crossover_slope_set
  label: Crossover Slope Set
  kind: action
  command: "<03><58><52><53><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: slope
      type: integer
      description: "0-7 (6dB to 48dB, 6dB steps)"

- id: crossover_slope_query
  label: Crossover Slope Query
  kind: query
  command: "<03><58><52><53><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: fir_type_set
  label: FIR Type Set
  kind: action
  command: "<03><58><46><45><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: fir_type
      type: integer
      description: "0=OFF, 1=FIR"

- id: fir_type_query
  label: FIR Type Query
  kind: query
  command: "<03><58><46><45><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: fir_frequency_set
  label: FIR Frequency Set
  kind: action
  command: "<03><58><46><46><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: frequency
      type: integer
      description: "0-29980 (20Hz to 30000Hz, 1Hz steps)"

- id: fir_frequency_query
  label: FIR Frequency Query
  kind: query
  command: "<03><58><46><46><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: compressor_threshold_set
  label: Compressor Threshold Set
  kind: action
  command: "<03><43><4D><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: threshold
      type: integer
      description: "0-80 (-20dBu to +20dBu, 0.5dBu steps)"

- id: compressor_threshold_query
  label: Compressor Threshold Query
  kind: query
  command: "<03><43><4D><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: compressor_attack_set
  label: Compressor Attack Set
  kind: action
  command: "<03><43><4D><41><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: attack
      type: integer
      description: "0-106 (0.3ms to 100ms, 0.1ms/1ms steps)"

- id: compressor_attack_query
  label: Compressor Attack Query
  kind: query
  command: "<03><43><4D><41><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: compressor_release_set
  label: Compressor Release Set
  kind: action
  command: "<03><43><4D><52><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: release
      type: integer
      description: "0-4 (2x/4x/8x/16x/32x)"

- id: compressor_release_query
  label: Compressor Release Query
  kind: query
  command: "<03><43><4D><52><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: compressor_ratio_set
  label: Compressor Ratio Set
  kind: action
  command: "<03><43><4D><58><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: ratio
      type: integer
      description: "0-39 (ratio 1 to 40, step 1)"

- id: compressor_ratio_query
  label: Compressor Ratio Query
  kind: query
  command: "<03><43><4D><58><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: limiter_threshold_set
  label: Limiter Threshold Set
  kind: action
  command: "<03><4C><4D><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: threshold
      type: integer
      description: "0-80 (-20dBu to +20dBu, 0.5dBu steps)"

- id: limiter_threshold_query
  label: Limiter Threshold Query
  kind: query
  command: "<03><4C><4D><54><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: limiter_attack_set
  label: Limiter Attack Set
  kind: action
  command: "<03><4C><4D><41><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: attack
      type: integer
      description: "0-106 (0.3ms to 100ms, 0.1ms/1ms steps)"

- id: limiter_attack_query
  label: Limiter Attack Query
  kind: query
  command: "<03><4C><4D><41><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: limiter_release_set
  label: Limiter Release Set
  kind: action
  command: "<03><4C><4D><52><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: release
      type: integer
      description: "0-4 (2x/4x/8x/16x/32x)"

- id: limiter_release_query
  label: Limiter Release Query
  kind: query
  command: "<03><4C><4D><52><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: mixer_set
  label: Mixer Set
  kind: action
  command: "<03><4D><49><58><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: mix_level
      type: integer
      description: "0-161 (OFF to 0.0dB, 0.25dB steps)"

- id: mixer_query
  label: Mixer Query
  kind: query
  command: "<03><4D><49><58><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: channel_name_set
  label: Channel Name Set
  kind: action
  command: "<03><43><48><4E><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: aux
      type: integer
      description: "Character index (0-based)"
    - name: char_code
      type: integer
      description: "Character code per source code map (0-84)"

- id: channel_name_query
  label: Channel Name Query
  kind: query
  command: "<03><43><48><4E><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"

- id: level_increment
  label: Level Increment
  kind: action
  command: "<03><23><4C><56><4C>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: steps
      type: integer
      description: "Number of 0.25dB steps to increment"
  notes: "Column value = <21> (1) for increment"

- id: level_decrement
  label: Level Decrement
  kind: action
  command: "<03><23><4C><56><4C>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: io
      type: integer
      description: "0=Input, 1=Output"
    - name: channel
      type: integer
      description: "Channel number (0-based)"
    - name: steps
      type: integer
      description: "Number of 0.25dB steps to decrement"
  notes: "Column value = <20> (0) for decrement"

- id: down_sync
  label: Down Sync
  kind: action
  command: "<03><25><53><44><30>"
  params:
    - name: data
      type: integer
      description: "<21>=ON (start sync), <20>=OFF (end sync)"

- id: up_sync
  label: Up Sync
  kind: action
  command: "<03><25><53><55><30>"
  params: []

- id: lock_password_set
  label: Lock Password Set
  kind: action
  command: "<03><25><4C><50><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: char_index
      type: integer
      description: "Aux value = character position (0-based)"
    - name: char_code
      type: integer
      description: "Character code per source code map"
  notes: "Each character sent individually with Aux header; see Password procedure in source"

- id: lock_key_set
  label: Lock Key Set
  kind: action
  command: "<03><25><4C><4B><30>"
  params:
    - name: data
      type: integer
      description: "Lock/unlock value (source does not enumerate values)"

- id: channel_in_number_query
  label: Channel In Number Query
  kind: query
  command: "<03><25><6E><49><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: channel_out_number_query
  label: Channel Out Number Query
  kind: query
  command: "<03><25><6E><4F><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: company_query
  label: Company Query
  kind: query
  command: "<03><25><4E><43><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: sampling_frequency_query
  label: Sampling Frequency Query
  kind: query
  command: "<03><25><6E><53><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: product_name_query
  label: Product Name Query
  kind: query
  command: "<03><25><4E><50><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: version_query
  label: Version Query
  kind: query
  command: "<03><25><4E><56><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: device_name_set
  label: Device Name Set
  kind: action
  command: "<03><25><4E><44><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: char_index
      type: integer
      description: "Aux value = character position (0-based)"
    - name: char_code
      type: integer
      description: "Character code per source code map"

- id: device_name_query
  label: Device Name Query
  kind: query
  command: "<03><25><4E><44><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: device_number_query
  label: Device Number Query
  kind: query
  command: "<03><25><6E><44><30>"
  params: []

- id: program_number_query
  label: Program Number Query
  kind: query
  command: "<03><25><50><6E><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: program_name_set
  label: Program Name Set
  kind: action
  command: "<03><25><50><4E><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: char_index
      type: integer
      description: "Aux value = character position (0-based)"
    - name: char_code
      type: integer
      description: "Character code per source code map"

- id: program_name_query
  label: Program Name Query
  kind: query
  command: "<03><25><50><4E><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: program_recall
  label: Program Recall
  kind: action
  command: "<03><25><50><52><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: program
      type: integer
      description: "Program number (0-based, 0-29)"

- id: program_store
  label: Program Store
  kind: action
  command: "<03><25><50><53><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"
    - name: program
      type: integer
      description: "Program number (0-based, 0-29)"

- id: program_download
  label: Program Download
  kind: action
  command: "<03><25><50><44><30>"
  params:
    - name: data
      type: integer
      description: "<21>=ON (start download), <20>=OFF (end download)"
  notes: "Advanced procedure: send parameters for each program then store. See Program Download procedure in source."

- id: program_upload
  label: Program Upload
  kind: action
  command: "<03><25><50><55><30>"
  params:
    - name: data
      type: integer
      description: "<21>=ON (start upload), <20>=OFF (end upload)"
  notes: "Advanced procedure: recall each program then upsync. See Program Upload procedure in source."

- id: reset
  label: Reset
  kind: action
  command: "<03><25><52><53><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: ethernet_info_query
  label: Ethernet Info Query
  kind: query
  command: "<03><25><45><4E><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

- id: xpanel_info_query
  label: XPanel Info Query
  kind: query
  command: "<03><25><58><50><30>"
  params:
    - name: device
      type: integer
      description: "Device number (0-based)"

Feedbacks

# Device echoes received commands back as acknowledgement.
# Read ('R') operations return current parameter values in the same frame format.
# Downsync OFF (%SD0 data=<20>) echoed as acknowledgement.
# Program Store (%PS0) echoed with same data as acknowledgement.
# Meter (MTR0) response returns signal level data.
# UNRESOLVED: exact response byte format for each query not fully documented in source

Variables

# UNRESOLVED: source does not define persistent variable storage separate from actions

Events

# UNRESOLVED: source does not document unsolicited notification events

Macros

# UNRESOLVED: source describes Program Download/Upload multi-step procedures but
# these are host-driven sequences, not device-side macros

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures documented in source

Notes

  • All values use zero-based indexing: Device 1 in the system menu = Device 0 (<20>) in the protocol. Channel 1 = <20>, Aux 1 = <20>.
  • Data values > 96 decimal must be encoded in base-96, with each digit offset by <20> (+0x20) to keep bytes in the printable ASCII range (<20>-<7F>).
  • Multiple <HEADER><VALUE> pairs can be packed in a single frame before <PROCESS> (<1F>). Total frame must be < 256 bytes.
  • <PROCESS> (<1F>) can appear multiple times per frame to batch operations (e.g. mute multiple channels).
  • The device number in the system menu is 1-based; protocol Device# is 0-based.
  • Character code map for string parameters (password, device name, program name, channel name): _ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz-<>?,./~!@#$%^&*()=+'; (index 0 = '_', index 84 = ';').
  • The source document is the XConsole Communication Protocol dated April 2008. The XP series is legacy; current Xilica products use the Solaro line with a different protocol.

Provenance

source_domains:
  - web.archive.org
  - cn.xilica.com
  - la-bs.com
source_urls:
  - https://web.archive.org/web/20190713025353/http://xilica.com/wp-content/uploads/2013/06/Xilica-XConsole_communication_protocol-manual.pdf
  - https://cn.xilica.com/wp-content/uploads/2022/01/210630054214_XIL003_UserManual_XP.pdf
  - https://www.la-bs.com/Objets/XP3060_me.pdf
  - https://web.archive.org/web/20181228194537/http://xilica.com/products/xp/
  - "https://web.archive.org/web/2018*/xilica.com/products/xp/"
retrieved_at: 2026-06-12T20:32:59.374Z
last_checked_at: 2026-06-14T16:16:25.648Z

Verification Summary

verdict: verified
checked_at: 2026-06-14T16:16:25.648Z
matched_actions: 78
action_count: 78
confidence: medium
summary: "All 78 spec actions match source commands literally; all transport parameters supported; complete command coverage. (11 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "no TCP/IP control documented for XP series; the Third-party-Control-Manual covers Neutrino/Uno only"
- "no power on/off command in source"
- "exact response byte format for each query not fully documented in source"
- "source does not define persistent variable storage separate from actions"
- "source does not document unsolicited notification events"
- "source describes Program Download/Upload multi-step procedures but"
- "no safety warnings or interlock procedures documented in source"
- "no TCP/IP or Ethernet control protocol documented despite %EN0 (Ethernet Info) query existing"
- "no power on/off command; device presumably powered via front panel only"
- "exact data byte encoding for DLY3 (delay) — source shows 3-byte data header (<12>?) but this is unclear"
- "MTR0 meter response format not specified"

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