Summary

The BSS Audio BLU-800 is a Soundweb London digital signal processor controllable over Ethernet (TCP port 1023) or RS-232 serial via the London Direct Inject protocol. This protocol enables a third-party controller to SET, BUMP, GET (subscribe), and recall parameter presets on any processing object parameter. This spec covers the London DI message types as documented in the source.

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 1023
serial:
  baud_rate: null  # UNRESOLVED: source states baud rate is set in Audio Architect Properties window; value not stated
  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: none  # UNRESOLVED: not stated in source; only pins 2,3,5 (TX/RX/GND) used implies no hardware flow control
  connector: 9-pin D-type (pins 2, 3, 5 only)
auth:
  type: none  # inferred: no auth procedure in source

Traits

- queryable  # inferred from SUBSCRIBE / SUBSCRIBE PERCENT message types
- levelable  # inferred from SET / SET PERCENT / BUMP PERCENT for gain and percentage values

Actions

# London DI message types. Each opcode is one action. Parameter addressing is
# hierarchical (NodeAddr / VirtualDevice / ObjectID / ParameterID) and resolved
# at runtime via Audio Architect; values shown as templated variables.
#
# Common framing: every message starts 0x02, ends 0x03, last body byte = XOR
# checksum of all pre-substitution body bytes. Byte substitution applied to body
# after checksum: 0x02->1B 82, 0x03->1B 83, 0x06->1B 86, 0x15->1B 95, 0x1B->1B 9B.

- id: set_raw
  label: Set Parameter (Raw Value)
  kind: action
  opcode: 0x88
  command: "02 88 {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {v0} {v1} {v2} {v3} {checksum} 03"
  params:
    - name: node
      type: integer
      description: Node Address 0x0001-0xFFFE (1-65534)
    - name: virtual_device
      type: enum
      description: Audio=0x03, Logic=0x02
    - name: object_id
      type: integer
      description: Processing Object ID (3 bytes)
    - name: parameter_id
      type: integer
      description: Parameter ID (2 bytes)
    - name: value
      type: integer
      description: Raw 32-bit signed value
  notes: "Serial RS-232 acknowledged with 0x06 (OK) / 0x15 (bad checksum). No ACK over TCP."

- id: subscribe
  label: Subscribe to Parameter
  kind: query
  opcode: 0x89
  command: "02 89 {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
  notes: "Returns current value immediately as SET message, then SET on each change until UNSUBSCRIBE or reboot."

- id: unsubscribe
  label: Unsubscribe from Parameter
  kind: action
  opcode: 0x8A
  command: "02 8A {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
  notes: "Stops SET messages for the parameter."

- id: recall_preset
  label: Recall Parameter Preset
  kind: action
  opcode: 0x8C
  command: "02 8C {preset_id_0} {preset_id_1} {preset_id_2} {preset_id_3} {checksum} 03"
  params:
    - name: preset_id
      type: integer
      description: Preset ID number (4 bytes), shown in Parameter Preset window
  notes: "No addressing used. Cannot subscribe to a preset."

- id: set_percent
  label: Set Parameter (Percentage)
  kind: action
  opcode: 0x8D
  command: "02 8D {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {v0} {v1} {v2} {v3} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
    - name: value
      type: integer
      description: Percentage 0-100 encoded as raw (raw = percent x 65536)
  notes: "Two-state params use 0/1 (0%/100%). Multi-state use 0,1,2,3,4... (0%-100%)."

- id: subscribe_percent
  label: Subscribe to Parameter (Percentage)
  kind: query
  opcode: 0x8E
  command: "02 8E {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
  notes: "Returns SET PERCENT messages on value changes."

- id: unsubscribe_percent
  label: Unsubscribe from Parameter (Percentage)
  kind: action
  opcode: 0x8F
  command: "02 8F {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer

- id: bump_percent
  label: Bump Parameter (Percentage)
  kind: action
  opcode: 0x90
  command: "02 90 {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {v0} {v1} {v2} {v3} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
    - name: value
      type: integer
      description: Signed bump delta (percentage encoded)
  notes: "Subscribed parameters do NOT auto-return SET messages after a bump; re-subscribe to read new value."

- id: set_string
  label: Set Parameter (String)
  kind: action
  opcode: 0x91
  command: "02 91 {node_hi} {node_lo} {vd} {obj0} {obj1} {obj2} {pid_hi} {pid_lo} {len} {ascii...} 00 {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: enum
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
    - name: string
      type: string
      description: Up to 32 ASCII chars; prefix with byte length, suffix 0x00

Feedbacks

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

- id: serial_nack
  type: enum
  values: ["0x15"]
  description: "Serial RS-232 NACK - invalid checksum."

- id: subscribed_set
  type: raw
  description: "SET message (0x88) returned for a SUBSCRIBE; sent on each value change. 4-byte 32-bit signed raw value."

- id: subscribed_set_percent
  type: raw
  description: "SET PERCENT message (0x8D) returned for a SUBSCRIBE PERCENT; sent on each value change."

# UNRESOLVED: exact response payloads for SET STRING subscriptions not enumerated in source.

Variables

# Parameter value scales documented in source (raw/percentage encodings):
- id: gain
  description: "Logarithmic -inf to -10dB, linear above. Raw -280617 (-80dB/0%) to 100000 (+10dB/100%). Unity=0 (73.73%)."
- id: meter
  description: "Linear scale. Raw -800000 (-80dB/0%) to 400000 (+40dB/100%). 0dB=0 (66.66%). dB = raw/10000."
- id: percentage
  description: "Raw = percentage x 65536. Range 0-100%."

# UNRESOLVED: per-parameter enumeration not in this source; discovered via Audio Architect.

Events

# Unsolicited SET / SET PERCENT messages pushed for active subscriptions count
# as events (device-initiated value-change notifications).
- id: subscription_update
  trigger: "Active subscription; parameter value changed by another controller or internal logic."
  payload: "SET (0x88) or SET PERCENT (0x8D) message for the subscribed parameter."

# UNRESOLVED: no other unsolicited event types documented in source.

Macros

# No multi-step sequences explicitly described in source.
# UNRESOLVED: populate if macro documentation found elsewhere.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures stated in this source.

Notes

  • Soundweb London devices are always listening; no enable step required for third-party control.
  • Crown, JBL, AKG devices do NOT respond to the London DI protocol (Soundweb London only).
  • BLU-Link, Dante, CobraNet, AVB connections are NOT used for control - control is Ethernet RJ-45 or RS-232 only.
  • TCP: multiple concurrent connections accepted on port 1023; socket normally left open indefinitely. No ACK over TCP (TCP provides reliability).
  • Serial: device can be configured (in Audio Architect Properties) to wait for ACK per transmitted message; re-transmits if 0x06/0x15 not received within 1 second.
  • Byte substitution MUST be applied after checksum computation, before transmission - increases message length. Receiver reverses substitution.
  • Parameter addressing is hierarchical and runtime-discovered; this protocol doc does not enumerate device parameters.

## Provenance

```yaml
source_domains:
  - bssaudio.com
source_urls:
  - https://bssaudio.com/en/site_elements/soundweb-london-third-party-control-application-guide
  - https://bssaudio.com/en/site_elements/soundweb-london-di-kit
retrieved_at: 2026-06-30T07:22:14.547Z
last_checked_at: 2026-07-07T11:05:58.175Z

Verification Summary

verdict: verified
checked_at: 2026-07-07T11:05:58.175Z
matched_actions: 9
action_count: 9
confidence: medium
summary: "All 9 London DI message types matched literal opcodes; transport port and serial pins verified; baud rate correctly marked UNRESOLVED per source. (12 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source is protocol-level, not a per-parameter command catalogue. Concrete parameter addresses (Node/VirtualDevice/ObjectID/ParameterID) are discovered at runtime via Audio Architect, not enumerated in this document."
- "source states baud rate is set in Audio Architect Properties window; value not stated"
- "not stated in source"
- "not stated in source; only pins 2,3,5 (TX/RX/GND) used implies no hardware flow control"
- "exact response payloads for SET STRING subscriptions not enumerated in source."
- "per-parameter enumeration not in this source; discovered via Audio Architect."
- "no other unsolicited event types documented in source."
- "populate if macro documentation found elsewhere."
- "no safety warnings or interlock procedures stated in this source."
- "serial baud/data/parity/stop bits not stated (set via Audio Architect)."
- "exact message structure diagrams omitted from refined source (pictures intentionally removed); byte layouts above inferred from textual description of fields."
- "firmware version compatibility not stated in source."

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