Summary

HiQnet third-party programmer protocol spec applied to the BSS Audio Blu 10Blk. Control via TCP/IP (HiQnet port 3804) and optionally UDP datagram; transport-agnostic binary message protocol with message-ID-addressed methods. Note: source is the generic HiQnet Third Party Programmer Documentation (Rev 2.2, Feb 2013) which states BSS Soundweb London devices should instead refer to the dedicated "BSS Soundweb London Third Party Control Document" — this spec is therefore a generic HiQnet mapping and may miss device-specific Blu commands.

Transport

protocols:
  - tcp
  - udp  # source documents a UDP datagram packet service alongside TCP (port 3804/udp)
addressing:
  port: 3804  # IANA "HiQnet-port 3804/tcp Harman HiQnet Port" and "3804/udp", stated in source
auth:
  type: none  # inferred: no login/password/auth procedure described in source (sessions are optional for 3rd-party control)
# Protocol version: 0x02 (HiQnet revision 2.0). Multi-byte types are Big Endian.
# For TCP/IP connections no frame-start/frame-count/checksum/PING/ACK/resync bytes are used
# (those apply only to the RS232 packet service). Source: section 6 "IP Connections" + Appendix.
# UNRESOLVED: device-specific network interface details (MAC/IP/DHCP) not stated for Blu 10Blk.

Traits

traits:
  - queryable   # inferred: MultiParamGet / GetAttributes / GetVDList query methods documented
  - levelable   # inferred: ParamSetPercent + parameter min/max/control-law model documented
  # No explicit power on/off routing/source-select commands appear at the device level in this
  # generic protocol doc; powerable/routable not inferred here.

Actions

# HiQnet Message-ID catalog documented in the source. Each entry carries its verbatim
# MESSAGE ID (UWORD). Payloads are binary; TCP/IP transport omits RS232 framing bytes.
# Parameter addresses are device/object-specific (HiQnet 48-bit address: Device.VD.Object.Param)
# and are NOT documented for the Blu 10Blk in this generic source → UNRESOLVED per action.

# --- Routing Layer messages (section 4.3) ---
- id: disco_info
  label: DiscoInfo
  kind: action
  command: "MESSAGE_ID 0x0000"  # locate devices + exchange routing info (Query/Info forms)
  params:
    - name: hiqnet_device
      type: integer
      description: UWORD device address of sender
    - name: network_id
      type: integer
      description: "UBYTE network type (1 = TCP/IP, 4 = RS232)"

- id: get_network_info
  label: GetNetworkInfo
  kind: query
  command: "MESSAGE_ID 0x0002"
  params: []

- id: request_address
  label: RequestAddress
  kind: action
  command: "MESSAGE_ID 0x0004"  # request use of a specific HiQnet address
  params:
    - name: hiqnet_device_address
      type: integer
      description: UWORD requested address

- id: address_used
  label: AddressUsed
  kind: action
  command: "MESSAGE_ID 0x0005"  # notify an address is in use
  params: []

- id: set_address
  label: SetAddress
  kind: action
  command: "MESSAGE_ID 0x0006"  # set HiQnet + network address
  params:
    - name: serial_number
      type: string
      description: BLOCK 128-bit GUID
    - name: new_device_address
      type: integer
      description: UWORD new HiQnet address

- id: goodbye
  label: Goodbye
  kind: action
  command: "MESSAGE_ID 0x0007"  # notify sender is shutting down; cancels all subscriptions
  params:
    - name: device_address
      type: integer
      description: UWORD device address

- id: hello
  label: Hello (Query / Info)
  kind: action
  command: "MESSAGE_ID 0x0008"  # open a session; FLAGS 0x0020 (guaranteed) required
  params:
    - name: session_number
      type: integer
      description: UWORD non-zero session number
    - name: flag_mask
      type: integer
      description: UWORD supported header flags (min 0x01FF)

# --- Parameter messages (section 3.6 - 3.12) ---
- id: multi_param_set
  label: MultiParamSet
  kind: action
  command: "MESSAGE_ID 0x0100"  # set NumParam parameter values within an object/VD
  params:
    - name: num_param
      type: integer
      description: UWORD count of parameters
    - name: entries
      type: string
      description: repeated Param_ID + data-type + value triples

- id: multi_object_param_set
  label: MultiObjectParamSet
  kind: action
  command: "MESSAGE_ID 0x0101"  # parameter values from multiple objects (subscription push)
  params:
    - name: num_objects
      type: integer
      description: UWORD object count

- id: param_set_percent
  label: ParamSetPercent
  kind: action
  command: "MESSAGE_ID 0x0102"  # set param via 1.15 signed fixed-point percentage (UWORD)
  params:
    - name: num_param
      type: integer
      description: UWORD count
    - name: param_value
      type: integer
      description: UWORD 1.15 fixed point (0x8000=-100%, 0x7FFF≈+100%)

- id: multi_param_get
  label: MultiParamGet
  kind: query
  command: "MESSAGE_ID 0x0103"  # get NumParam parameter values
  params:
    - name: num_param
      type: integer
      description: UWORD count

- id: multi_param_subscribe
  label: MultiParamSubscribe
  kind: action
  command: "MESSAGE_ID 0x010F"  # subscribe to param changes
  params:
    - name: sensor_rate
      type: integer
      description: UWORD period in ms (fastest sensor update)

- id: param_subscribe_percent
  label: ParamSubscribePercent
  kind: action
  command: "MESSAGE_ID 0x0111"  # percentage-based subscription
  params:
    - name: sensor_rate
      type: integer
      description: UWORD period in ms

- id: multi_param_unsubscribe
  label: MultiParamUnsubscribe
  kind: action
  command: "MESSAGE_ID 0x0112"
  params:
    - name: number_of_subscriptions
      type: integer
      description: UWORD count

- id: parameter_subscribe_all
  label: ParameterSubscribeAll
  kind: action
  command: "MESSAGE_ID 0x0114"  # subscribe to every SV under an object/VD
  params:
    - name: subscription_type
      type: integer
      description: "UBYTE 0=ALL, 1=Non-Sensor, 2=Sensor"

- id: parameter_unsubscribe_all
  label: ParameterUnSubscribeAll
  kind: action
  command: "MESSAGE_ID 0x0114"  # source lists MSG_ID 0x0114 for unsubscribe-all (verbatim); may be a doc typo
  params:
    - name: subscription_type
      type: integer
      description: "UBYTE 0=ALL, 1=Non-Sensor, 2=Sensor"

# --- Event Log messages (section 3.4) ---
- id: subscribe_event_log
  label: SubscribeEventLog
  kind: action
  command: "MESSAGE_ID 0x0115"
  params:
    - name: max_data_size
      type: integer
      description: UWORD max additional-data size
    - name: category_filter
      type: integer
      description: ULONG bitmask of categories

- id: unsubscribe_event_log
  label: UnsubscribeEventLog
  kind: action
  command: "MESSAGE_ID 0x012B"
  params:
    - name: category
      type: integer
      description: ULONG bitmask of categories to unsubscribe

- id: request_event_log
  label: RequestEventLog
  kind: query
  command: "MESSAGE_ID 0x012C"
  params: []

# --- Device level methods (section 3.3) ---
- id: get_attributes
  label: GetAttributes
  kind: query
  command: "MESSAGE_ID 0x010D"  # get n attribute values from object/VD
  params:
    - name: no_of_attributes
      type: integer
      description: UWORD count
    - name: aids
      type: integer
      description: repeated UWORD attribute IDs

- id: get_vd_list
  label: GetVDList
  kind: query
  command: "MESSAGE_ID 0x011A"  # list virtual devices in a device
  params:
    - name: workgroup_path
      type: string
      description: workgroup asked to respond

- id: store
  label: Store
  kind: action
  command: "MESSAGE_ID 0x0124"  # store performance data to non-volatile storage
  params:
    - name: store_action
      type: integer
      description: "UBYTE 0=Params,1=Subs,2=Scenes,3=Snapshots,4=Presets,5=Venue"
    - name: store_number
      type: integer
      description: UWORD local storage slot

- id: recall
  label: Recall
  kind: action
  command: "MESSAGE_ID 0x0125"  # recall performance data (scene/preset/venue)
  params:
    - name: recall_action
      type: integer
      description: "UBYTE 0=Params,1=Subs,2=Scenes,3=Snapshots,4=Presets,5=Venue"
    - name: recall_number
      type: integer
      description: UWORD scene/preset/venue number

- id: locate
  label: Locate
  kind: action
  command: "MESSAGE_ID 0x0129"  # flash locate LEDs (2Hz); compulsory for Device Manager VD
  params:
    - name: time
      type: integer
      description: "UWORD ms; 0x0000=off, 0xFFFF=on, 0x0001-0xFFFE=flash period"

Feedbacks

# Query responses use the same MESSAGE_ID with the Information flag set in the header.
- id: multi_param_get_info
  type: block
  description: "MultiParamGet response (MESSAGE_ID 0x0103, Info flag): NumParam + Param_Value list"
  # UNRESOLVED: value shapes are device/object-specific; not enumerated for Blu 10Blk in source

- id: get_attributes_info
  type: block
  description: "GetAttributes response (0x010D, Info): AID + data-type + value triples"

- id: get_vd_list_info
  type: block
  description: "GetVDList response (0x011A, Info): WorkgroupPath + NumVDs + VD entries"

- id: request_event_log_info
  type: block
  description: "RequestEventLog response (0x012C, Info): event entries (category/event-id/priority/time/date)"
  values:
    - fault      # priority 0
    - warning    # priority 1
    - information # priority 2

- id: param_change_push
  type: block
  description: "Unsolicited MultiParamSet (0x0100) / MultiObjectParamSet (0x0101) pushes from subscribed parameter changes"

Variables

# HiQnet parameters are addressed via 48-bit HiQnet address (Device.VD.Object.ParamIndex)
# with per-parameter min/max/control-law/flags attributes retrieved via GetAttributes.
# Actual variable set for Blu 10Blk is NOT documented in this generic source.
# UNRESOLVED: device-specific parameter catalog (object/param IDs, ranges) not present in source.

Events

# Event Log: each device has an event log; subscribed events arrive via RequestEventLog(Info).
# Categories (section 3.4.1.1): 0 Unassigned,1 Application,2 Configuration,3 Audio Network,
# 4 Control Network,5 Vendor Network,6 Startup,7 DSP,8 Misc,9 Control Logic,
# 10 Foreign Protocol,11 Digital I/O,14 Control Surface.
# Control-Network protocol errors (section 3.4.1.3) are ALWAYS returned to sender regardless
# of subscription: 0x0001 InvalidVersion ... 0x0011 NotARouter (see source for full table).
# UNRESOLVED: device-specific (0x8000-0xFFFF) custom event IDs for Blu 10Blk not in source.

Macros

# No multi-step sequences explicitly authored in source. Closed-loop TCP/IP control use case
# (section 4.5.5) documents an 8-step DiscoQuery→DiscoInfo→Hello→Subscribe→ParamSet flow;
# treated as a connection-establishment procedure, not an authored macro.
# UNRESOLVED: no device-specific macros documented.

Safety

confirmation_required_for: []
interlocks: []
# Source contains no safety warnings, interlock procedures, or power-on sequencing for the
# Blu 10Blk. Only note: a Goodbye cancels all subscriptions; resync (RS232) drops connection.
# UNRESOLVED: no safety/interlock material present in source.

Notes

  • Source is generic HiQnet Third Party Programmer Documentation (Rev 2.2, 19 Feb 2013), not Blu 10Blk-specific. Section 1 explicitly redirects Soundweb London devices to the separate "BSS Soundweb London Third Party Control Document."
  • TCP/IP framing: NO frame-start (0x64), frame-count, CCITT checksum, PING (0xF0 0x8C), RESYNC (0xFF/0xF0), or ACK (0xA5) bytes — those belong only to the RS232 packet service. TCP/IP relies on TCP/UDP link-layer reliability.
  • Port 3804 registered with IANA for both tcp and udp.
  • Big Endian byte order for all multi-byte types.
  • Sessions are OPTIONAL for third-party control (section 7).
  • HiQnet addresses: 16-bit Device + 8-bit VD + 24-bit Object + 16-bit ParamIndex.
  • Recall example (Device Preset 1) verbatim from source section 6.3: 0xF0 0x64 0x00 0x02 0x19 0x00 0x00 0x00 0x21 0x00 0x33 0x00 0x00 0x00 0x00 0x00 0x20 0x00 0x00 0x00 0x00 0x01 0x25 0x00 0x20 0x05 0x00 0x00 0x03 0x00 0x01 0x00 0x02 0x00 0x00 0x00 0x01 (checksum byte) — note this is RS232-framed; TCP/IP omits leading 0xF0/0x64/0x00 frame bytes and trailing checksum.

Provenance

source_domains:
  - audioarchitect.harmanpro.com
  - help.harmanpro.com
  - bssaudio.com
source_urls:
  - https://audioarchitect.harmanpro.com/resource/audio-architect-hiqnet-third-party-programmers-guide.pdf
  - https://help.harmanpro.com/soundweb-london-third-party-control
  - https://help.harmanpro.com/using-telnet-with-soundweb-london
  - https://bssaudio.com/en/site_elements/soundweb-london-third-party-control-application-guide
retrieved_at: 2026-06-30T03:24:48.519Z
last_checked_at: 2026-06-30T06:55:47.265Z

Verification Summary

verdict: verified
checked_at: 2026-06-30T06:55:47.265Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec actions matched their documented MESSAGE IDs verbatim in the source; transport port 3804 confirmed; only 0x0113 (subscribe feedback response) is extra in source. (10 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- 0x0113
- "source is generic HiQnet protocol doc, not the Blu 10Blk-specific Soundweb London control document it points to. No device-specific parameter/object table for the Blu 10Blk is present."
- "device-specific network interface details (MAC/IP/DHCP) not stated for Blu 10Blk."
- "value shapes are device/object-specific; not enumerated for Blu 10Blk in source"
- "device-specific parameter catalog (object/param IDs, ranges) not present in source."
- "device-specific (0x8000-0xFFFF) custom event IDs for Blu 10Blk not in source."
- "no device-specific macros documented."
- "no safety/interlock material present in source."
- "device-specific object/parameter IDs, preset/scene counts, and Blu 10Blk capabilities not in this generic source."
- "firmware version compatibility range not stated."
- "ParameterUnSubscribeAll MSG_ID 0x0114 duplicates SubscribeAll in source — likely typo, unverified."

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