Summary

The BSS Audio Blu 8V2Blk is a Soundweb London device controlled via the London Direct Inject (DI) protocol over Ethernet (TCP) or serial RS-232. The DI protocol supports two-way communication: a third party controller can set, bump, subscribe to, or recall presets for any parameter or meter on the device. This spec covers the DI message structure, message types, addressing scheme, and parameter value encoding documented for Soundweb London devices.

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 1023
serial:
  baud_rate: null  # UNRESOLVED: baud rate not stated in source (configured via Audio Architect Properties window)
  data_bits: null  # UNRESOLVED: not stated in source
  parity: null  # UNRESOLVED: not stated in source
  stop_bits: null  # UNRESOLVED: not stated in source
  flow_control: null  # UNRESOLVED: not stated in source
  connector: "9-pin D-type (pins 2, 3, 5 used)"
auth:
  type: none  # inferred: no auth procedure in source

Traits

traits:
  - queryable  # inferred: SUBSCRIBE / SUBSCRIBE PERCENT return parameter values
  - levelable  # inferred: SET PERCENT / BUMP PERCENT control percentage values

Actions

# Protocol-level message types. Each opcode is one action. Parameter addressing
# (Node/VirtualDevice/ObjectID/ParameterID) is a parameter set, not separate rows.
# All commands share framing: start 0x02, body, checksum (XOR of body), end 0x03.
# Body undergoes byte substitution (0x02→0x1B 0x82, 0x03→0x1B 0x83, 0x06→0x1B 0x86,
# 0x15→0x1B 0x95, 0x1B→0x1B 0x9B) AFTER checksum computed.

- id: set_raw
  label: Set Parameter (Raw)
  kind: action
  command: "0x02 0x88 {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {val_b0} {val_b1} {val_b2} {val_b3} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (0x0001 - 0xFFFE, i.e. 1-65534), two bytes
    - name: virtual_device
      type: integer
      description: Processing object category (Audio 0x03, Logic 0x02), one byte
    - name: object_id
      type: integer
      description: Processing Object ID (e.g. Mixer, EQ, Source Selector), three bytes
    - name: parameter_id
      type: integer
      description: Parameter within object (e.g. Gain, Mute, Source), two bytes
    - name: value
      type: integer
      description: 32-bit signed raw value (4 bytes); range/scale depends on parameter type

- id: subscribe
  label: Subscribe to Parameter
  kind: query
  command: "0x02 0x89 {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category (Audio 0x03, Logic 0x02)
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID
  notes: Returns SET or SET STRING immediately and on subsequent value changes until UNSUBSCRIBE or reboot.

- id: unsubscribe
  label: Unsubscribe from Parameter
  kind: action
  command: "0x02 0x8A {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID
  notes: Stops the device returning SET messages for the parameter.

- id: recall_preset
  label: Recall Parameter Preset
  kind: action
  command: "0x02 0x8C {preset_id_b0} {preset_id_b1} {preset_id_b2} {preset_id_b3} {checksum} 0x03"
  params:
    - name: preset_id
      type: integer
      description: Preset ID (4 bytes), as displayed in Parameter Preset window
  notes: No addressing used. Cannot subscribe to a Parameter Preset.

- id: set_percent
  label: Set Parameter (Percent)
  kind: action
  command: "0x02 0x8D {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {val_b0} {val_b1} {val_b2} {val_b3} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID
    - name: value
      type: integer
      description: 32-bit signed percentage raw value (Raw = percentage × 65536; 0%-100%)

- id: subscribe_percent
  label: Subscribe to Parameter (Percent)
  kind: query
  command: "0x02 0x8E {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID
  notes: Returns SET PERCENT messages. If parameter changed via BUMP PERCENT, no message returned per bump - must re-subscribe.

- id: unsubscribe_percent
  label: Unsubscribe from Parameter (Percent)
  kind: action
  command: "0x02 0x8F {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID

- id: bump_percent
  label: Bump Parameter (Percent)
  kind: action
  command: "0x02 0x90 {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {val_b0} {val_b1} {val_b2} {val_b3} {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID
    - name: value
      type: integer
      description: 32-bit signed bump amount in percentage raw units
  notes: Bumped subscribed parameters do not return SET messages automatically.

- id: set_string
  label: Set Parameter (String)
  kind: action
  command: "0x02 0x91 {node_hi} {node_lo} {virtual_device} {obj_id_1} {obj_id_2} {obj_id_3} {param_id_hi} {param_id_lo} {length_byte} {ascii_bytes_up_to_32} 0x00 {checksum} 0x03"
  params:
    - name: node_address
      type: integer
      description: Physical device address (1-65534)
    - name: virtual_device
      type: integer
      description: Processing object category
    - name: object_id
      type: integer
      description: Processing Object ID
    - name: parameter_id
      type: integer
      description: Parameter ID
    - name: value
      type: string
      description: ASCII string up to 32 bytes, prefixed by length byte, suffixed with 0x00

Feedbacks

- id: ack_positive
  type: enum
  values: ["0x06"]
  notes: Serial only. Returned when RS-232 message received with valid checksum. Not used on Ethernet (TCP is reliable).

- id: ack_negative
  type: enum
  values: ["0x15"]
  notes: Serial only. Returned when checksum invalid. Soundweb retransmits if 0x06/0x15 not received within 1 second.

- id: subscribed_set
  type: message
  notes: SET message returned on subscribe or on parameter value change. Carries 4-byte 32-bit signed raw value.

- id: subscribed_set_percent
  type: message
  notes: SET PERCENT message returned on subscribe percent or on value change.

- id: subscribed_set_string
  type: message
  notes: SET STRING message returned on subscribe for string parameters.

Variables

# Parameter value encoding (applies to SET / SET PERCENT / BUMP PERCENT values):
# - Two-state (e.g. mute): 0 and 1 (0% and 100%)
# - Multi-state (e.g. source selector, input card gain): 0,1,2,3,4... per enumeration count
# - Variable gain params: -280617 (-80dB) to 100000 (+10dB); unity gain = 0 (73.73%); log scale -inf to -10dB, linear above -10dB
# - Variable meter params: -800000 (-80dB) to 400000 (+40dB); 0dB = 0 (66.66%); dB = Raw / 10000 (linear)
# - Percent raw = percentage value × 65536
# UNRESOLVED: no per-device parameter address table in source (addresses are assigned per Audio Architect configuration).

Events

# Unsolicited SET / SET PERCENT / SET STRING messages pushed for subscribed parameters when their values change.
# No event catalogue beyond subscribe-driven push messages documented in source.

Macros

# UNRESOLVED: no multi-step sequences documented in source.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing requirements stated in source.

Notes

  • Source document is the generic Soundweb London "London Direct Inject protocol" reference. It applies to all Soundweb London devices; the Blu 8V2Blk is one such device. Per-device parameter addresses are not fixed — they are assigned within Audio Architect and displayed in Venue Explorer / Properties / Parameter Preset windows.
  • BLU-Link, Dante, CobraNet, and AVB network connections are explicitly NOT used for any form of control.
  • Soundweb devices are always listening; no enable step required for third-party control.
  • TCP control: port 1023, multiple connections accepted. A controller normally opens a socket and leaves it open indefinitely.
  • Serial RS-232: 9-pin D-type connector, only pins 2, 3, 5 used. Acknowledgement (0x06/0x15) and baud rate are configured in Audio Architect Properties window.
  • Byte substitution is applied to the message body AFTER the checksum is computed and WILL increase message length. Special bytes 0x02, 0x03, 0x06, 0x15, 0x1B must each be escaped (see Actions comment).
  • Checksum = single-byte XOR of all body bytes BEFORE substitution.
  • Crown, JBL, AKG devices do not respond to this protocol.

Provenance

source_domains:
  - bssaudio.com
  - adn.harmanpro.com
source_urls:
  - https://bssaudio.com/en/site_elements/soundweb-london-third-party-control-application-guide
  - https://adn.harmanpro.com/site_elements/resources/515_1414083576/HiQnet_Third_Party_Programmers_Guide_v2_original.pdf
  - https://bssaudio.com/en/site_elements/hiqnet-communication-on-a-routed-network
  - https://bssaudio.com/en
retrieved_at: 2026-07-01T14:00:12.400Z
last_checked_at: 2026-07-07T11:07:17.652Z

Verification Summary

verdict: verified
checked_at: 2026-07-07T11:07:17.652Z
matched_actions: 9
action_count: 9
confidence: medium
summary: "All 9 spec actions matched exactly with source opcodes (0x88-0x91); complete coverage of London DI protocol message types; port 1023 and serial connector verified. (10 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source is the generic London DI protocol document; device-specific command catalogue (per-parameter addresses) not enumerated. Crown, JBL, AKG devices do not respond to this protocol."
- "baud rate not stated in source (configured via Audio Architect Properties window)"
- "not stated in source"
- "no per-device parameter address table in source (addresses are assigned per Audio Architect configuration)."
- "no multi-step sequences documented in source."
- "no safety warnings, interlock procedures, or power-on sequencing requirements stated in source."
- "baud rate, data bits, parity, stop bits, flow control for RS-232 not stated in source."
- "no device-specific parameter address catalogue — addresses must be read from Audio Architect per configuration."
- "firmware version compatibility not stated in source."
- "precise byte layout of each message type (header/footer beyond 0x02/0x03 framing) depicted only in omitted figures — field ordering assumed from opcode + addressing + value description."

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