Summary
Remote control spec for the JBL Synthesis SDP-75 surround processor. Supports both TCP/IP (port 44100) and RS-232 serial control using a simple ASCII line protocol, with the processor echoing state-change messages back to connected clients.
Transport
protocols:
- tcp
- serial
addressing:
port: 44100
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # UNRESOLVED: flow control not stated in source
auth:
type: none # inferred: source explicitly states TCP `id` is identification only, not authentication; RS-232 has no login
Traits
# - powerable # inferred from `power off SECURED FHZMCH48FE`, Wake-on-LAN, and trigger-input power-on
# - routable # inferred from `profile <source>` and `tac preset <source>` source-selection commands
# - queryable # inferred from `get current preset`, `get label`, `get all label`, `get current profile`, `get profile name`
# - levelable # inferred from `volume`, `dvolume`, `volume_ramp`, `mute`, `dim`, `bypass` commands
Actions
# TCP identification - must be sent after connect before any other command is processed.
# Not present over RS-232.
- id: identify
label: Identify Client (TCP)
kind: action
command: "id <client_name>"
params:
- name: client_name
type: string
description: Free-form client identifier string
notes: |
TCP only. Not authentication. Source example: `id my_automation_system`.
# Volume / level
- id: volume_set
label: Set Main Volume
kind: action
command: "volume <volume>"
params:
- name: volume
type: number
description: Main volume in dB
- id: volume_delta
label: Adjust Volume (Delta)
kind: action
command: "dvolume <delta>"
params:
- name: delta
type: number
description: Delta in dB to add to current main volume (may be negative)
- id: volume_ramp
label: Volume Ramp
kind: action
command: "volume_ramp <target> <duration>"
params:
- name: target
type: number
description: Target volume in dB
- name: duration
type: integer
description: Ramp duration in milliseconds
# Mute / dim / bypass (each accepts 0=off, 1=on, 2=toggle)
- id: mute
label: Mute
kind: action
command: "mute <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable mute, 1=enable mute, 2=invert current state
- id: dim
label: Dim
kind: action
command: "dim <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable dim, 1=enable dim, 2=invert current state
- id: bypass
label: Bypass
kind: action
command: "bypass <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable bypass, 1=enable bypass, 2=invert current state
- id: send_volume_state
label: Request Volume State
kind: action
command: "send_volume"
notes: Asks the SDP-75 to emit current VOLUME / MUTE / DIM / BYPASS messages.
# Processing / correction modes
- id: remapping_mode
label: Set Remapping Mode
kind: action
command: "remapping_mode <mode>"
params:
- name: mode
type: enum
values: [none, 2D, 3D, autoroute, manual]
description: Remapping mode to enable
- id: use_acoustics_correction
label: Acoustic Correction
kind: action
command: "use_acoustics_correction <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable, 1=enable, 2=invert
- id: use_level_alignment
label: Level Alignment
kind: action
command: "use_level_alignment <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable, 1=enable, 2=invert
- id: use_time_alignment
label: Time Alignment
kind: action
command: "use_time_alignment <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable, 1=enable, 2=invert
- id: quick_optimized
label: Quick Optimization
kind: action
command: "quick_optimized <action>"
params:
- name: action
type: enum
values: [0, 1, 2]
description: 0=disable, 1=enable, 2=invert
# GUI navigation
- id: change_page
label: Change GUI Page
kind: action
command: "change_page <delta>"
params:
- name: delta
type: integer
description: Number of pages to advance (positive=next, negative=previous)
# Preset / profile
- id: loadp
label: Load Preset
kind: action
command: "loadp <preset>"
params:
- name: preset
type: string
description: |
Preset number (1..N for user presets; 0 = built-in preset) OR a
filename of the form `Config_<n>.xml` for legacy compatibility.
Note the capital C in `Config` - command lines are case sensitive.
- id: get_current_preset
label: Get Current Preset
kind: query
command: "get_current_preset"
- id: get_label
label: Get Preset Label
kind: query
command: "get_label <n>"
params:
- name: n
type: integer
description: Preset number
- id: get_all_label
label: Get All Preset Labels
kind: query
command: "get_all_label"
- id: profile
label: Select Source / Profile
kind: action
command: "profile <source>"
params:
- name: source
type: integer
description: Source number (first source is 0)
- id: tac_preset
label: Select Source (alias of profile)
kind: action
command: "tac_preset <source>"
params:
- name: source
type: integer
description: Source number (first source is 0)
notes: Old alias of `profile`. Retained for backward compatibility.
- id: upmixer
label: Set / Step Upmixer Mode
kind: action
command: "upmixer <mode>"
params:
- name: mode
type: string
description: |
Upmixer mode. Empty = query current. `+` or `1` = next mode.
`-` or `0` = previous mode. Named values: auro3d, dts, dolby,
auto, native, legacy, upmix_on_native.
- id: fav_light
label: Favorites / Light Button
kind: action
command: "fav_light"
notes: Equivalent of the Light button on the remote control.
- id: get_current_profile
label: Get Current Source / Profile
kind: query
command: "get_current_profile"
- id: get_profile_name
label: Get Source Name
kind: query
command: "get_profile_name <n>"
params:
- name: n
type: integer
description: Source number
# Connection / power
- id: bye
label: Close Connection
kind: action
command: "bye"
notes: |
Aliases: `exit`, `quit`. Server replies `BYE` and closes the socket.
Must NOT be used on RS-232.
- id: power_off
label: Power Off
kind: action
command: "power_off SECURED FHZMCH48FE"
notes: |
Switches off the SDP-75. The token `SECURED FHZMCH48FE` is part of
the literal command string and must be sent verbatim. Powering
back on is only possible via Wake-on-LAN or the trigger input
(5-12 V), not via this protocol.
# Power-on (out-of-band - listed for completeness even though the regular
# protocol cannot power the unit on)
- id: wake_on_lan
label: Wake on LAN
kind: action
command: "" # UNRESOLVED: WoL magic-packet payload format not described in this source
notes: |
Send a Wake-on-LAN magic packet to the SDP-75's MAC address. The MAC
is shown on the network information page of the GUI. Both the
automation server and SDP-75 must be on the same IPv4 subnet.
- id: trigger_power_on
label: Power On via Trigger Input
kind: action
command: "" # UNRESOLVED: trigger is a hardware signal, not a protocol command
notes: Apply 5-12 V to the trigger input of the SDP-75.
Feedbacks
# State messages emitted by the SDP-75 to all connected clients on
# every state change (not just in response to queries).
- id: volume
type: number
description: Main volume in dB (e.g. `VOLUME -12.000000`)
- id: dim
type: enum
values: [0, 1]
description: Dim state (0=disabled, 1=enabled)
- id: mute
type: enum
values: [0, 1]
description: Mute state (0=disabled, 1=enabled)
- id: bypass
type: enum
values: [0, 1]
description: Bypass state (0=disabled, 1=enabled)
- id: meta_preset_loaded
type: string
description: Active profile / source, e.g. `META PRESET LOADED <profile>`
- id: srate
type: number
description: Current sampling rate, e.g. `SRATE <srate>`
- id: audiosync_status
type: enum
values: [0, 1]
description: Audio-source sync status (1 = synchronized)
- id: audiosync
type: enum
values: [Master, Slave]
description: Current audio sync mode
- id: speaker_info
type: object
description: |
Per-speaker calibration data emitted on preset load:
`SPEAKER_INFO <spk_number> <r_m> <theta_deg> <phi_deg>`.
Speaker numbers begin at 0.
- id: label
type: string
description: |
Preset label, e.g. `LABEL <n>: <name>`. Emitted as the answer to
`get_label` / `get_all_label` requests.
Variables
# Settable parameters that are not themselves discrete actions.
# UNRESOLVED: source does not list variable ranges or step sizes - all
# numbers are sent verbatim. Marking as "the raw payload the source
# accepts" rather than fabricating a domain.
- id: main_volume_db
type: number
description: Master volume level in dB, set by `volume <vol>` / `dvolume <delta>` / `volume_ramp`.
- id: current_preset
type: integer
description: Active preset number; 0 = built-in preset, 1..N = user presets.
- id: current_profile
type: integer
description: Active source / profile number (first source is 0).
- id: sampling_rate
type: number
description: Current sampling rate as reported via `SRATE` message.
Events
# Unsolicited messages from the SDP-75.
- id: start_running
description: |
`START_RUNNING` - emitted shortly after a `loadp` command, once the
SDP-75 is ready to make sound (typically a few tenths of a second).
- id: labels_clear
description: |
`LABELS CLEAR` - emitted just before a fresh preset list (e.g.
after `get_all_label`). Clients maintaining a cached preset list
should clear it on receipt.
- id: command_ack_ok
description: `OK` - command succeeded.
- id: command_ack_error
description: |
`ERROR` followed by a human-readable description - command failed.
May arrive before, after, or interleaved with other state messages.
- id: bye
description: |
`BYE` - server-side close acknowledgement (only on TCP, in
response to `bye` / `exit` / `quit`).
- id: welcome
description: |
TCP-only. Sent immediately on connect, format:
`Welcome on Trinnov Optimizer (Version <ver>, ID <id>)`.
The 32-bit `ID` encodes machine type in the high bits and a serial
number in the low 20 bits.
Macros
# Source section 8 contains a worked telnet session. Not part of the
# protocol surface; do not treat as built-in macros.
# UNRESOLVED: no device-defined multi-step macros documented in source.
Safety
confirmation_required_for:
- power_off # destructive, ends protocol control of the unit until WoL/trigger power-on
interlocks: []
# UNRESOLVED: source contains no electrical-safety, thermal, or
# interlock procedure text beyond the trigger-input voltage range
# (5-12 V) and the 12 V trigger-output voltage mentioned in section 7.
# No fault-recovery or error-clear sequences are described.
Notes
- All command and message lines are ASCII, terminated with
\n(0x0A),\r(0x0D), or\r\n(0x0D 0x0A). Both Unix, Mac, and Windows line endings are accepted. - Commands and arguments are case sensitive (
profileandPROFILEare different). - Every command is answered with
OKon success orERROR <description>on failure. The SDP-75 also emits state-change messages (e.g.VOLUME,MUTE) on any state change regardless of what caused the change. - The stream is continuously bidirectional, not a strict request/response model. Clients should not poll by repeated connect/disconnect cycles; the SDP-75 pushes all relevant state to connected clients.
- The protocol was authored by Trinnov Audio (the underlying Altitude32 platform) and is re-used verbatim by JBL's SDP-75; the welcome banner reads
Welcome on Trinnov Optimizer (...). Support contact in the source:csupport@harman.com. - The TCP
idcommand is identification only, not authentication. The SDP-75 will not process any further commands untilidis received on a new TCP connection. RS-232 has no equivalent step. - Wake-on-LAN is the standard way to power the unit on; the regular TCP / RS-232 protocol cannot power on a unit that is off. Power-off via the protocol requires the literal token
SECURED FHZMCH48FEafterpower_off— drop it and the command will not work. - The
tac_presetcommand is an old alias ofprofile, retained for compatibility; new integrations should useprofile. - The
bye/exit/quitcommands only affect the client/server connection; they do not affect the SDP-75 itself. The source explicitly forbids usingbyeover RS-232.
Provenance
source_domains:
- jblsynthesis.com
source_urls:
- "https://www.jblsynthesis.com/on/demandware.static/-/Sites-masterCatalog_Harman/default/dw45d0257f/pdfs/JBL%20Synthesis%20SDP-75_Automation%20Protocol%20Guide.pdf"
- https://www.jblsynthesis.com/on/demandware.static/-/Sites-masterCatalog_Harman/default/dw07c644ac/pdfs/RS232_SDR35_38_SDP55_58_SH289E_E_2Jun21.pdf
retrieved_at: 2026-05-12T19:04:37.910Z
last_checked_at: 2026-06-02T17:22:38.988Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T17:22:38.988Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions matched literally in source; transport parameters verified; bidirectional coverage confirmed. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "this document is labeled \"SDP Series\" in the family record but the source only describes the SDP-75. Other SDP models (e.g. SDP-40, SDP-25) are not covered."
- "flow control not stated in source"
- "WoL magic-packet payload format not described in this source"
- "trigger is a hardware signal, not a protocol command"
- "source does not list variable ranges or step sizes - all"
- "no device-defined multi-step macros documented in source."
- "source contains no electrical-safety, thermal, or"
- "- Firmware compatibility range for this protocol not stated (source example shows versions 4.0.0 and 3.8.7 in welcome banners but no published min/max)."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0