Summary
This spec covers control of BSS Soundweb London family devices via the London Direct Inject protocol. Two transports are supported: TCP (port 1023) and RS-232 (9-pin D-type, pins 2/3/5). Messages are framed with start byte 0x02, end byte 0x03, and a trailing single-byte XOR checksum of the body. The protocol offers set / subscribe / unsubscribe / bump / recall-preset operations on any device parameter or meter.
Transport
protocols:
- tcp
- serial
addressing:
port: 1023
serial:
connector: "9-pin D-type" # source states pins 2, 3, 5 only are used
pins_used: [2, 3, 5]
baud_rate: null # UNRESOLVED: baud rate not stated in source; configurable 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
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred: power state is a settable/queryable parameter in the Soundweb object model
- routable # inferred: source-selector processing objects are explicitly addressed by Object ID
- queryable # inferred: SUBSCRIBE / GET message types documented
- levelable # inferred: gain, threshold, pan parameters documented with specific scaling laws
Actions
- id: set_parameter_raw
label: Set Parameter (Raw Value)
kind: action
command: "0x02 0x88 {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {val_b3} {val_b2} {val_b1} {val_b0} {xor} 0x03"
params:
- name: node_addr
type: integer
description: Node Address (0x0001 to 0xFFFE)
- name: virtual_device
type: integer
description: Virtual Device byte (0x03 Audio, 0x02 Logic)
- name: object_id
type: integer
description: Processing Object ID (3 bytes, big-endian)
- name: parameter_id
type: integer
description: Parameter ID within the object (2 bytes, big-endian)
- name: value
type: integer
description: 32-bit signed raw value (big-endian)
notes: |
Message Type 0x88. Body bytes 2..N-1 (between start 0x02 and trailing XOR + end 0x03) are XOR'd
to produce the checksum. Apply byte substitution to the body before transmitting: 0x02→0x1B 0x82,
0x03→0x1B 0x83, 0x06→0x1B 0x86, 0x15→0x1B 0x95, 0x1B→0x1B 0x9B.
- id: subscribe_parameter
label: Subscribe (Raw)
kind: action
command: "0x02 0x89 {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
notes: |
Message Type 0x89. Returns SET or SET STRING messages on value change until UNSUBSCRIBE or reboot.
Source figure groups SET / SUBSCRIBE / SUBSCRIBE PERCENT / BUMP PERCENT into one structural diagram
(diagram intentionally omitted from refined source).
- id: unsubscribe_parameter
label: Unsubscribe (Raw)
kind: action
command: "0x02 0x8A {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
notes: Message Type 0x8A. Stops returning SET messages for the subscribed parameter.
- id: recall_preset
label: Recall Parameter Preset
kind: action
command: "0x02 0x8C {preset_id_b3} {preset_id_b2} {preset_id_b1} {preset_id_b0} {xor} 0x03"
params:
- name: preset_id
type: integer
description: Parameter Preset ID number (4 bytes, big-endian)
notes: |
Message Type 0x8C. No addressing; preset ID is the entire value payload.
Subscribing to a Parameter Preset is not supported by the protocol.
- id: set_parameter_percent
label: Set Parameter (Percent)
kind: action
command: "0x02 0x8D {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {pct_b3} {pct_b2} {pct_b1} {pct_b0} {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
- name: percent
type: number
description: 0-100 percentage (fractions allowed); raw = percent × 65536
notes: Message Type 0x8D.
- id: subscribe_parameter_percent
label: Subscribe (Percent)
kind: action
command: "0x02 0x8E {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
notes: Message Type 0x8E. Returns SET PERCENT messages on value change.
- id: unsubscribe_parameter_percent
label: Unsubscribe (Percent)
kind: action
command: "0x02 0x8F {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
notes: Message Type 0x8F.
- id: bump_parameter_percent
label: Bump Parameter (Percent)
kind: action
command: "0x02 0x90 {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {pct_b3} {pct_b2} {pct_b1} {pct_b0} {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
- name: delta_percent
type: number
description: Signed percentage delta
notes: |
Message Type 0x90. Bumps the parameter up or down by the given percentage.
Device will NOT auto-return SET / SET PERCENT after every bump; re-subscribe to read the new value.
- id: set_parameter_string
label: Set Parameter (String)
kind: action
command: "0x02 0x91 {node_hi} {node_lo} {vdev} {obj_id_hi} {obj_id_mid} {obj_id_lo} {param_id_hi} {param_id_lo} {len} {ascii_bytes...} 0x00 {xor} 0x03"
params:
- name: node_addr
type: integer
- name: virtual_device
type: integer
- name: object_id
type: integer
- name: parameter_id
type: integer
- name: value
type: string
description: Up to 32 ASCII characters
notes: |
Message Type 0x91. Value field is a single length byte followed by ASCII bytes and a 0x00 terminator.
- id: serial_ack
label: Serial ACK (received from device)
kind: feedback
command: "0x06"
notes: Acknowledges a correctly framed message with valid checksum on the RS-232 port.
- id: serial_nack
label: Serial NACK (received from device)
kind: feedback
command: "0x15"
notes: Returned when the checksum is invalid. Device will re-transmit if 0x06 / 0x15 not received within 1 second (only when ack-wait is enabled in Audio Architect Properties).
Feedbacks
- id: subscribed_value_raw
type: object
description: SET message (0x88) returned on value change of a subscribed parameter. Carries the new 4-byte raw value.
- id: subscribed_value_percent
type: object
description: SET PERCENT message (0x8D) returned on value change of a percent-subscribed parameter. Carries the new 4-byte percent value.
- id: subscribed_value_string
type: object
description: SET STRING message (0x91) returned for subscribed string parameters. Length byte + ASCII + 0x00 terminator.
- id: serial_ack
type: enum
values: [0x06, 0x15]
description: Acknowledgement byte returned on RS-232. 0x06 = receipt + checksum OK. 0x15 = checksum invalid.
Variables
# All device parameters are exposed through the generic SET / SUBSCRIBE / BUMP actions above.
# Specific parameter instances (gain, mute, source-select, threshold, pan, meter, etc.) are
# identified by their {node_addr, virtual_device, object_id, parameter_id} tuple.
- name: virtual_device_audio
value: 0x03
description: Virtual Device byte identifying Audio processing objects
- name: virtual_device_logic
value: 0x02
description: Virtual Device byte identifying Logic processing objects
- name: gain_raw_min
value: -280617
description: Gain parameter raw value at 0% (-80 dB). Scale is logarithmic from -inf to -10 dB, linear above.
- name: gain_raw_unity
value: 0
description: Gain parameter raw value at unity (0 dB). Corresponds to 73.73%.
- name: gain_raw_max
value: 100000
description: Gain parameter raw value at 100% (+10 dB)
- name: meter_raw_min
value: -800000
description: Meter raw value at 0% (-80 dB)
- name: meter_raw_zero
value: 0
description: Meter raw value at 0 dB (66.66%)
- name: meter_raw_max
value: 400000
description: Meter raw value at 100% (+40 dB). Scale is linear; dB = raw / 10000.
- name: percent_to_raw_multiplier
value: 65536
description: Raw = percent × 65536
- name: node_addr_min
value: 0x0001
description: Minimum Node Address (1 decimal)
- name: node_addr_max
value: 0xFFFE
description: Maximum Node Address (65,534 decimal)
- name: string_param_max_length
value: 32
description: Maximum length of a string parameter value in ASCII bytes (excludes length-prefix and 0x00 terminator)
Events
# The protocol is request/response only (with subscription-driven unsolicited updates). The
# following are the unsolicited updates a subscribed parameter produces:
- id: subscribed_set
description: Returned when a raw-subscribed parameter changes value. Same message shape as set_parameter_raw.
- id: subscribed_set_percent
description: Returned when a percent-subscribed parameter changes value. Same shape as set_parameter_percent.
- id: subscribed_set_string
description: Returned when a string-subscribed parameter changes value.
- id: serial_retransmit
description: Device re-transmits the last message if 0x06 / 0x15 is not received within 1 second (only when ack-wait enabled in Audio Architect Properties).
Macros
# UNRESOLVED: source does not document any multi-step sequences or panel macros.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on sequencing
# requirements beyond general network/serial cabling guidance.
Notes
- All Soundweb London devices listen on TCP port 1023 and accept multiple simultaneous connections.
- BLU-Link, Dante, CobraNet, and AVB are explicitly NOT used for control; only the 100 Mb/s RJ-45 control port and the 9-pin D-type serial port carry control traffic.
- Serial messages acknowledged with 0x06 (good) or 0x15 (bad checksum). Ethernet uses TCP reliability instead — no application-layer acknowledgement.
- A third-party controller typically opens a TCP socket and leaves it open indefinitely.
- Messages framed as
0x02 <body> <xor_checksum> 0x03. The checksum is a single-byte XOR of all body bytes (BEFORE byte substitution). - Byte substitution is applied to the body AFTER checksum calculation and INCREASES the message length. Substitutions: 0x02→0x1B 0x82, 0x03→0x1B 0x83, 0x06→0x1B 0x86, 0x15→0x1B 0x95, 0x1B→0x1B 0x9B.
- Soundweb devices automatically forward messages destined for other Soundweb devices on the network.
- After BUMP PERCENT, the device will NOT send SET / SET PERCENT updates on a subscribed parameter — a fresh SUBSCRIBE is required to read the new value.
- Baud rate and acknowledgement-on-serial-transmit settings are configured in the Audio Architect Properties window; the document does not state defaults.
- Crown, JBL, and AKG devices do not respond to the London Direct Inject protocol.
- String parameter values: up to 32 ASCII bytes, length-prefix byte + ASCII + 0x00 terminator.
- Multi-state parameters (e.g. source selector, input-card gain) use discrete raw values 0, 1, 2, 3, ... each mapping to a uniform percent of the range.
- Two-state parameters (e.g. mute) use values 0 and 1 only (0% and 100%).
- Variable parameters (gain, threshold, pan, meters) use device-specific scaling laws — gain is logarithmic below -10 dB and linear above; meters are linear with dB = raw / 10,000.
- The Parameter Preset ID used by recall_preset is displayed in the Parameter Preset window in Audio Architect.
- Node Address, Virtual Device, and Object ID for each processing object are displayed in the Audio Architect Properties window and Venue Explorer; Parameter IDs are displayed in Venue Explorer.
- Source figure grouping: SET / SUBSCRIBE / SUBSCRIBE PERCENT / BUMP PERCENT share one structural diagram (intentionally omitted from refined source); UNSUBSCRIBE / UNSUBSCRIBE PERCENT share a shorter diagram; PARAMETER PRESET RECALL has the smallest diagram (no addressing fields).
Provenance
source_domains:
- bssaudio.com
source_urls:
- https://bssaudio.com/en/site_elements/soundweb-london-third-party-control-application-guide
retrieved_at: 2026-04-30T04:34:55.903Z
last_checked_at: 2026-06-02T21:41:07.927Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:41:07.927Z
matched_actions: 11
action_count: 11
confidence: medium
summary: "All 11 spec actions (9 message types + 2 serial acknowledgement codes) match verbatim in source; transport parameters verified or properly marked UNRESOLVED. (5 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "BLU-Link, Dante, CobraNet, AVB are explicitly not used for control; firmware version not stated."
- "baud rate not stated in source; configurable via Audio Architect Properties window"
- "not stated in source"
- "source does not document any multi-step sequences or panel macros."
- "source contains no safety warnings, interlock procedures, or power-on sequencing"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0