Summary

The BSS Audio Tr1616 is a Soundweb London DSP device controllable via the London Direct Inject (DI) protocol over Ethernet (TCP port 1023) or serial RS-232. The protocol allows a third-party controller to SET, BUMP, SUBSCRIBE to, and recall Presets for any parameter or meter on the device using binary messages framed with 0x02/0x03 and XOR checksummed.

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 1023
serial:
  baud_rate: null  # UNRESOLVED: baud rate not stated in source ("found in Audio Architect Properties window" - value not given)
  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  # inferred: only pins 2,3,5 (TX/RX/GND) used on D-Type - no hardware flow control lines
  connector: 9-pin D-type (pins 2, 3, 5 only)
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 / gain parameter scaling documented

Actions

# All 9 documented London DI message types are enumerated below, one action per
# opcode row in the source. Command templates show the binary message structure
# with parameterized address/value fields; the leading 0x02 frame byte, trailing
# 0x03 frame byte, and final XOR-checksum byte are documented in Notes.
#
# Addressing layout (8 bytes after opcode, before value):
#   Node Address (2 bytes, 0x0001-0xFFFE)
#   Virtual Device (1 byte: Audio=0x03, Logic=0x02)
#   Object ID (3 bytes)
#   Parameter ID (2 bytes)
# Value (4 bytes, 32-bit signed) for SET / SET PERCENT / BUMP PERCENT.
# RECALL PRESET uses no addressing - Value bytes carry the Preset ID.

- id: set_raw
  label: SET (Raw Value)
  kind: action
  command: "02 88 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {val_b1} {val_b2} {val_b3} {val_b4} {checksum} 03"
  params:
    - name: node
      type: integer
      description: Node Address (1-65534)
    - name: virtual_device
      type: integer
      description: Virtual Device byte (Audio=0x03, Logic=0x02)
    - name: object_id
      type: integer
      description: Object ID (3 bytes)
    - name: parameter_id
      type: integer
      description: Parameter ID (2 bytes)
    - name: value
      type: integer
      description: 32-bit signed raw value

- id: subscribe
  label: SUBSCRIBE
  kind: query
  command: "02 89 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
      description: Node Address
    - name: virtual_device
      type: integer
      description: Virtual Device byte
    - name: object_id
      type: integer
      description: Object ID (3 bytes)
    - name: parameter_id
      type: integer
      description: Parameter ID (2 bytes)

- id: unsubscribe
  label: UNSUBSCRIBE
  kind: action
  command: "02 8A {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: integer
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer

- 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 bytes) shown in the Parameter Preset window

- id: set_percent
  label: SET PERCENT
  kind: action
  command: "02 8D {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {val_b1} {val_b2} {val_b3} {val_b4} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: integer
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
    - name: value
      type: integer
      description: 32-bit signed value; raw = percentage × 65536

- id: subscribe_percent
  label: SUBSCRIBE PERCENT
  kind: query
  command: "02 8E {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: integer
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer

- id: unsubscribe_percent
  label: UNSUBSCRIBE PERCENT
  kind: action
  command: "02 8F {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: integer
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer

- id: bump_percent
  label: BUMP PERCENT
  kind: action
  command: "02 90 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {val_b1} {val_b2} {val_b3} {val_b4} {checksum} 03"
  params:
    - name: node
      type: integer
    - name: virtual_device
      type: integer
    - name: object_id
      type: integer
    - name: parameter_id
      type: integer
    - name: delta
      type: integer
      description: 32-bit signed percentage delta (positive = up, negative = down)

- id: set_string
  label: SET STRING
  kind: action
  command: "02 91 {node_hi} {node_lo} {vd} {obj_b1} {obj_b2} {obj_b3} {pid_hi} {pid_lo} {len} {ascii_bytes..32} 00 {checksum} 03"
  params:
    - name: node
      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; length-prefixed, 0x00-terminated

Feedbacks

# Serial-line acknowledgements (RS-232 only; TCP uses TCP reliability)
- id: ack_positive
  type: enum
  values: [0x06]
  description: Positive acknowledgement - message received and checksum valid (serial only)

- id: ack_negative
  type: enum
  values: [0x15]
  description: Negative acknowledgement - checksum invalid (serial only)

# SUBSCRIBE / SUBSCRIBE PERCENT return unsolicited SET / SET PERCENT messages
# on every subsequent value change until UNSUBSCRIBE or device reboot.
- id: subscribed_value_update
  type: object
  description: SET (0x88) or SET PERCENT (0x8D) message returned by device on parameter change for an active subscription

Variables

# Parameter values are addressed hierarchically (Node/VirtualDevice/Object/Parameter)
# and discovered at runtime via Audio Architect - not enumerated as named variables here.
# Raw value scaling laws documented in Notes for reference.

Events

# Unsolicited SET / SET PERCENT messages generated by active subscriptions are
# the only events. See Feedbacks.subscribed_value_update.

Macros

# None documented in source.

Safety

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

Notes

  • Protocol name: London Direct Inject (DI) protocol. Crown, JBL, AKG devices do not respond to it; Soundweb London devices only.
  • Devices always listening — no enable/disable step for third-party control.
  • TCP: listens on port 1023, accepts multiple simultaneous connections. No application-level acknowledgement on TCP (TCP provides reliability). Client normally holds socket open indefinitely.
  • RS-232: 9-pin D-type, pins 2/3/5 only. Positive ack 0x06 / negative ack 0x15 per message. Device re-transmits if no ack within 1 second (when ack-wait enabled). Baud + ack settings live in Audio Architect Properties window — values NOT stated in source.
  • Framing: every message begins 0x02, ends 0x03. Final body byte is single-byte XOR checksum of all body bytes (computed before byte substitution).
  • Byte substitution (applied after checksum, increases message length):
    • 0x020x1B 0x82
    • 0x030x1B 0x83
    • 0x060x1B 0x86
    • 0x150x1B 0x95
    • 0x1B0x1B 0x9B
  • Addressing hierarchy (8 bytes): Node Address (2B, 0x0001–0xFFFE) · Virtual Device (1B: Audio=0x03, Logic=0x02) · Object ID (3B) · Parameter ID (2B). All discovered at runtime in Venue Explorer / Properties window — no static table in source.
  • Value scaling (4-byte signed):
    • Percentage: raw = percentage × 65536; range 0–100%.
    • Two-state (mute): 0 / 1 (0% / 100%).
    • Multi-state (source selector, card gain): discrete 0,1,2,3…
    • Gain: −280,617 (0%, −80 dB) to 100,000 (100%, +10 dB); unity = 0 (73.73%); log scale −∞→−10 dB, linear above −10 dB.
    • Meter: −800,000 (0%, −80 dB) to 400,000 (100%, +40 dB); 0 dB = 0 (66.66%); dB = raw / 10,000.
  • String values: up to 32 ASCII bytes, length-prefixed, 0x00-terminated.
  • SUBSCRIBE quirk: if a subscribed parameter is bumped via BUMP PERCENT, the device does not return SET/SET PERCENT after every bump — a fresh SUBSCRIBE must be issued to read the new value.
  • RECALL PRESET carries no addressing; the 4-byte Value is the Preset ID. Parameter Presets cannot be subscribed to.
  • Message-structure diagrams in the source PDF are raster images (omitted here) — the byte layouts above are reconstructed from the textual descriptions of message types, addressing, and values.

Spec built. 9 message-type actions enumerated (one per source opcode row). Framing/checksum/byte-substitution in Notes. Baud + serial config marked UNRESOLVED (source says "Audio Architect Properties window" — no value given). No port assumed beyond stated 1023. Tr1616 model string absent from source text → flagged in unresolved markers.

## Provenance

```yaml
source_domains:
  - bssaudio.com
  - help.harmanpro.com
source_urls:
  - https://bssaudio.com/el/site_elements/soundweb-london-third-party-control-application-guide
  - https://help.harmanpro.com/soundweb-london-third-party-control
  - https://bssaudio.com/hi/site_elements/soundweb-london-di-kit
  - https://help.harmanpro.com/bss
retrieved_at: 2026-07-06T18:48:14.145Z
last_checked_at: 2026-07-07T11:07:20.415Z

Verification Summary

verdict: verified
checked_at: 2026-07-07T11:07:20.415Z
matched_actions: 9
action_count: 9
confidence: medium
summary: "All 9 message-type opcodes matched literally; framing, addressing, value scaling, and transport parameters verified against source text. (9 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "Device-specific parameter addresses (Node/Virtual Device/Object/Parameter IDs) are not enumerated in this source — they are discovered at runtime via the Audio Architect Venue Explorer / Properties window. Model \"Tr1616\" itself is not named in the source text; this source documents the Soundweb London family protocol generically."
- "baud rate not stated in source (\"found in Audio Architect Properties window\" - value not given)"
- "not stated in source"
- "source contains no safety warnings, interlock procedures, or"
- "exact baud/data/parity/stop bits for RS-232 — source says they live in Audio Architect Properties window but does not state values."
- "device-specific Node/VirtualDevice/ObjectID/ParameterID table for the Tr1616 — must be enumerated at runtime via Audio Architect; not in this source."
- "firmware version compatibility range not stated."
- "protocol version number not stated."
- "the literal model string \"Tr1616\" does not appear in this source text — it documents the Soundweb London DI family generically. Confirm the Tr1616 is a Soundweb London member before publishing."

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