Summary

The BLU-8V2Wht is a Soundweb London device controllable via the London Direct Inject protocol, a two-way binary protocol allowing a third-party controller to set, request (subscribe), bump, and recall parameters/presets on any Soundweb London processing object. The device exposes a 100 Mb/s RJ-45 Ethernet port (TCP) and a 9-pin D-type RS-232 serial port. This spec covers the generic Soundweb London DI command set documented for the product family.

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 1023  # Soundweb London devices listen on TCP port 1023, accept multiple connections
serial:
  baud_rate: null  # UNRESOLVED: "baud rate ... found in Audio Architect Properties window" - value not stated in source
  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 / SET PERCENT / BUMP PERCENT drive gain and percentage parameters

Actions

# London Direct Inject protocol. All messages framed 0x02 ... 0x03, with
# single-byte XOR checksum over body bytes BEFORE byte substitution.
# Byte substitution (applied after checksum): 0x02->1B 82, 0x03->1B 83,
# 0x06->1B 86, 0x15->1B 95, 0x1B->1B 9B.
#
# Addressing (SET/SUBSCRIBE/BUMP families):
#   node_address : 2 bytes  (0x0001 - 0xFFFE)
#   virtual_device : 1 byte (Audio 0x03, Logic 0x02)
#   object_id : 3 bytes
#   parameter_id : 2 bytes
# Value (raw/percent/bump): 4 bytes (32-bit signed).
# checksum = XOR of all body bytes (opcode..value) before substitution.
# Message structure pictures were OMITTED from refined source; templates
# below assembled from the textual field-width descriptions.

- id: set_raw
  label: Set Parameter (Raw)
  kind: action
  command: "02 88 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {val_b1} {val_b2} {val_b3} {val_b4} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID (Mixer, EQ, Source Selector...), 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object (Gain, Mute, Source...), 2 bytes"
    - name: value
      type: integer
      description: "Raw 32-bit signed value. Gain params -280617 (-80dB) to 100000 (+10dB), unity 0. Two-state use 0/1. Multi-state use 0,1,2,3..."

- id: set_percent
  label: Set Parameter (Percent)
  kind: action
  command: "02 8D {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {val_b1} {val_b2} {val_b3} {val_b4} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"
    - name: value
      type: integer
      description: "Percentage as raw: percent x 65536 (0%-100%)"

- id: set_string
  label: Set Parameter (String)
  kind: action
  command: "02 91 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {len} {string_bytes} 00 {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"
    - name: string
      type: string
      description: "Up to 32 ASCII bytes; value carries length prefix and 0x00 termination suffix"

- id: bump_percent
  label: Bump Parameter (Percent)
  kind: action
  command: "02 90 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {val_b1} {val_b2} {val_b3} {val_b4} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"
    - name: value
      type: integer
      description: "4-byte signed value encoding bump direction and percentage amount"
  notes: "If a subscribed parameter is changed via BUMP PERCENT the device does NOT return SET/SET PERCENT after every bump; a new subscribe must be sent to read the value."

- id: recall_preset
  label: Recall Parameter Preset
  kind: action
  command: "02 8C {preset_b1} {preset_b2} {preset_b3} {preset_b4} {checksum} 03"
  params:
    - name: preset_id
      type: integer
      description: "Preset ID (4-byte value) as shown in the Parameter Preset window. No addressing used."
  notes: "Cannot subscribe to a Parameter Preset."

- id: subscribe
  label: Subscribe to Parameter (Raw)
  kind: query
  command: "02 89 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"
  notes: "Immediately returns current value as a SET (or SET STRING) message, then a SET message on every subsequent value change until UNSUBSCRIBE or reboot."

- id: subscribe_percent
  label: Subscribe to Parameter (Percent)
  kind: query
  command: "02 8E {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"
  notes: "Immediately returns current value as a SET PERCENT message, then SET PERCENT on subsequent changes until UNSUBSCRIBE PERCENT or reboot."

- id: unsubscribe
  label: Unsubscribe from Parameter (Raw)
  kind: action
  command: "02 8A {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"

- id: unsubscribe_percent
  label: Unsubscribe from Parameter (Percent)
  kind: action
  command: "02 8F {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {param_hi} {param_lo} {checksum} 03"
  params:
    - name: node_address
      type: integer
      description: "Physical device Node Address (0x0001-0xFFFE), 2 bytes"
    - name: virtual_device
      type: integer
      description: "Processing object category (Audio 0x03, Logic 0x02), 1 byte"
    - name: object_id
      type: integer
      description: "Processing Object ID, 3 bytes"
    - name: parameter_id
      type: integer
      description: "Parameter within object, 2 bytes"

Feedbacks

- id: serial_ack
  type: enum
  values: ["0x06"]
  description: "RS-232 only: 0x06 confirms receipt and valid checksum."

- id: serial_nak
  type: enum
  values: ["0x15"]
  description: "RS-232 only: 0x15 returned when checksum is invalid."

# Ethernet/TCP does not use 0x06/0x15 - TCP provides reliable delivery.

Variables

# Parameter addressing is fully dynamic (configured per-project in Audio
# Architect). No fixed variable table exists in the protocol source.
# UNRESOLVED: per-device parameter enumeration not documented in source.

Events

# Subscription-driven: a SUBSCRIBE causes the device to emit unsolicited
# SET / SET PERCENT messages on every subsequent value change until
# UNSUBSCRIBE or reboot. Treat these as push notifications.
- id: parameter_update
  type: message
  description: "Unsolicited SET / SET PERCENT / SET STRING message pushed on subscribed parameter value change."

Macros

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

Safety

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

Notes

  • Protocol applies to all Soundweb London devices; Crown, JBL, AKG devices do NOT respond to this protocol.
  • Devices are always listening — no enable step required for third-party control.
  • BLU-Link, Dante, CobraNet, AVB carry no control traffic.
  • Control messages may be unicast to one device or multicast to many; messages for other devices are auto-forwarded over the network.
  • Serial retransmit: if 0x06/0x15 not received within 1 second, Soundweb re-transmits (when acknowledgement mode is enabled in Audio Architect Properties).
  • Checksum = single-byte XOR of all body bytes (opcode through value), computed BEFORE byte substitution.
  • Gain scaling: logarithmic from -inf to -10dB, linear above -10dB; unity gain = raw 0 (73.73%).
  • Meter scaling: linear, Raw/10000 = dB; 0dB = raw 0 (66.66%).

## Provenance

```yaml
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-06-30T04:06:47.176Z
last_checked_at: 2026-06-30T06:58:25.644Z
```

## Verification Summary

```yaml
verdict: verified
checked_at: 2026-06-30T06:58:25.644Z
matched_actions: 9
action_count: 9
confidence: medium
summary: "All 9 spec actions matched literally to source Message Types; transport parameters (TCP 1023, D-type pins 2/3/5) verified; coverage is complete. (10 unresolved item(s) noted in Known Gaps.)"
```

## Known Gaps

```yaml
- "per-device object/parameter IDs are configured in Audio Architect and not enumerated in this protocol source. Exact byte-layout diagrams (message structure pictures) were omitted from the refined source; structure below reconstructed from the textual field descriptions."
- "\"baud rate ... found in Audio Architect Properties window\" - value not stated in source"
- "not stated in source"
- "per-device parameter enumeration not documented in source."
- "no multi-step sequences described in source."
- "no safety warnings, interlock procedures, or power-on"
- "baud rate / data bits / parity / stop bits not stated (set in Audio Architect Properties)."
- "exact BUMP PERCENT direction/amount bit encoding within the 4-byte value not detailed."
- "message-structure byte-layout diagrams omitted from refined source; templates reconstructed from textual field-width descriptions."
- "per-device Node/Virtual Device/Object/Parameter IDs are project-specific, not enumerated in protocol doc."
```

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