Skip to main content

Bose ControlSpace / PowerMatch

Control of Bose Professional ControlSpace ESP and EX processors, PowerMatch and PowerShare amplifiers over the ASCII serial-over-Ethernet protocol on TCP 10055. Drives named Gain and Source Selector modules, physical input/output channels, ControlSpace Groups, and Parameter Set recall, and tracks level and mute state back into GEM zones.

This is the commercial-install path: the DSP design — module labels, group numbers, parameter sets — is authored in ControlSpace Designer by the audio contractor, and this driver addresses those objects by name and number. It does not commission the DSP.

Prerequisites

  • The ControlSpace Designer project (or a printed schedule) giving the exact Module labels, Group numbers, and Parameter Set numbers you intend to control.
  • Module labels must be unique across the design. If an Output module and a PEQ module are both named Left, neither will respond correctly to module commands.
  • Network reachability from GEM to the processor on port 10055.
Enable live feedback while you are still in Designer

The processor only pushes asynchronous change notifications for modules whose label begins with # (for example renaming Hall to #Hall). Without that prefix, GEM learns about changes made from CC-16 / CC-64 wall panels only on the next poll. It costs nothing to add and it is much easier to do during commissioning than afterwards.

Setup steps

  1. Confirm third-party control is enabled and note the port. It is fixed at 10055 on ESP-00, PowerMatch and PowerShare; on 1U ESP (880/1240/4120/1600) and EX devices it can be changed or disabled in the device properties in ControlSpace Designer.
  2. Go to System → Devices → Add Device and choose the Bose ControlSpace / PowerMatch driver (registry key bose_controlspace).
  3. Set Processor IP (ip) to the device address.
  4. On a PowerMatch or PowerShare, set Maximum Level (dB) (max_db) to 0. Those outputs have no gain stage and stop at 0 dB — leaving it at the ESP default of 12 makes the top fifth of every GEM volume slider do nothing.
  5. Create one Zone per controllable point, using the address forms below.
  6. Run get_volume from the Script Console against a zone and confirm a value comes back before wiring the zone into a UI.

Zone address format

The three address forms map onto the three control surfaces the protocol exposes. Pick per zone.

Address formExampleTargetsWire commands
Module labelMain VolumeA named Gain module in the designSA / GA with index 1 (level) and 2 (mute)
slot.channel2.1A physical input or output channelSV / GV, SM / GM, SI
group:Ngroup:4A ControlSpace GroupSG / GG, SN / GN, SH
Write slot, channel and group numbers in decimal

The protocol carries these as hexadecimal ASCII, but GEM zone addresses are written in decimal and converted by the driver. Dante input 12 on slot 10 is the zone address 10.12, which the driver sends as GV a,c. You never type hex.

Bose recommends addressing inputs and outputs by Module label rather than by slot and channel where you have the choice — module commands are stable across design changes that renumber physical slots, and they take plain dB rather than encoded steps.

For slots that carry both inputs and outputs, the output channels follow the inputs in one continuous range. On a 16-channel Dante card, Dante Out 1 is channel 17.

Attribute reference

ScopeAttributeDirectionNotes
deviceiprequiredLAN address of the processor or amplifier.
deviceportoptionalDefault 10055.
devicemin_dboptionaldB mapped to 0%. Default -60 (the protocol floor).
devicemax_dboptionaldB mapped to 100%. 12 for ESP/EX, 0 for PowerMatch/PowerShare.
devicestatus_intervaloptionalPoll cadence in ms. Default 30000.
devicecommand_throttleoptionalMinimum ms between command lines. Default 100.
deviceparameter_setruntime, read-onlyLast recalled Parameter Set. 0 means none since power-up.
devicestandbyruntime, read-onlyAmplifier standby state (PowerMatch / PowerShare).
devicepower_stateruntime, read-onlyon / off, derived from standby.
deviceoutput_configurationruntime, read-onlyPowerMatch per-channel output mode reported by GC.
zonevolumeruntimeLevel as 0–100 percent, scaled between min_db and max_db.
zonegainruntimeLevel in absolute dB.
zonemute_stateruntimeon / off.
zonestateruntimeon when unmuted, off when muted.

Commands

CommandArgumentsNotes
on / offaddressUn-mute / mute. A DSP zone has no power, so on/off is mute.
mute_on / mute_off / mute_toggleaddressToggle is native on all three address forms — no cached-state emulation.
set_volumeaddress, levellevel is 0–100 percent, scaled between min_db and max_db.
set_gainaddress, gainAbsolute dB, bypassing percent scaling.
volume_up / volume_downaddress, stepssteps counts 0.5 dB increments. Default 2 (1 dB).
get_volume / get_muteaddressReplies update zone state asynchronously.
set_sourceaddress, sourceSelects input 1–16 on a Source Selector module. address must be a module label.
recall_parameter_setpresetParameter Set 1–255 in Designer numbering.
get_parameter_setQueries the last recalled Parameter Set.
standby_on / standby_off / get_standbyPowerMatch and PowerShare only. ESP and EX reject these.
get_configurationPowerMatch output configuration per channel.
get_zonesReports the zones configured in GEM and re-polls each.
rawcommandSends a raw protocol line. The trailing carriage return is added for you.

Protocol notes

Commands are ASCII lines terminated with a carriage return (0x0D). The two command families encode numbers differently, which is the single most common source of confusion when reading a packet capture:

  • System and Device commands (SS, SG, SN, SH, SV, SM, SI) use hexadecimal numerals, and levels are 0.5 dB steps anchored at −60 dB. So 0x00 is −60 dB, 0x78 is 0 dB, 0x90 is +12 dB. SV 1,3,50 sets slot 1 channel 3 to −20 dB.
  • Module commands (SA, GA) use plain decimal ASCII with the units stripped. SA"Main Volume">1=-6.5 sets that gain module to −6.5 dB.

Acknowledgement also differs by family. Module commands answer ACK (0x06) on success or NAK (0x15) plus a two-digit error code on failure:

CodeMeaning
01Invalid module name — no match, or the label is duplicated in the design
02Illegal index — wrong index value or count for that module type
03Value out of range for that parameter
99Unknown error

System and Device set commands are not acknowledged at all. The driver follows those sets with a query rather than assuming they landed, which is also why recall_parameter_set emits a GS immediately afterwards.

Because ACK and NAK arrive as bare control bytes with no carriage return, this driver frames the inbound stream itself instead of relying on a terminator split — a bare ACK sitting in the buffer would otherwise stall the next real response.

Known limitations

  • No discovery. get_zones reports what GEM already has configured. Module labels, group numbers and parameter set numbers are not enumerable over this protocol; they live in the Designer project.
  • Set Volume is ignored while a channel is muted. This is processor behaviour, not a driver limitation. Send mute_off first, or control level through a Gain module.
  • volume_up / volume_down on a Gain module is computed, not native. Groups and physical channels have real increment commands (SH, SI); Gain modules do not, so the driver steps from the last known level. If the level has never been read it returns an error and requests state — retry a moment later.
  • Only Gain and Source Selector modules are wrapped. Every other module type in the design (PEQ, compressor, matrix mixer, router, AEC, …) is reachable through the raw command using the index tables in the Bose protocol document, but has no first-class GEM command.
  • Change notifications need the # prefix. Without it, and for any change GEM itself made, state comes only from the poll loop.
  • Standby is amplifier-only. SY / GY are PowerMatch and PowerShare commands; ESP and EX processors reject them.
  • Endpoints and MSA12X are out of scope. WP/EP/EX Dante endpoints and the MSA12X steerable array use UDP on port 49494 with a different command set. This driver speaks only the TCP 10055 protocol.

Troubleshooting

SymptomCheck
Connection refusedThe device is at its connection limit — 8 on ESP-00 and PowerShare, 32 elsewhere — shared with any ControlSpace Remote clients. Close one and retry.
Connection drops when the contractor is on siteExpected. The processor closes third-party connections when ControlSpace Designer goes online to load a design. GEM reconnects automatically once Designer disconnects.
NAK 01 on every module commandThe module label does not match, or two modules share that name. Labels are case- and space-sensitive and must be unique across the design.
NAK 02Wrong index for that module type. A Gain module only has index 1 (level) and 2 (mute).
NAK 03Value out of range — most often a dB value beyond the module's limits.
Volume commands do nothingThe channel is muted. The processor ignores Set Volume while muted.
Top of the volume slider does nothingOn PowerMatch / PowerShare set max_db to 0.
Levels track, but wall-panel changes do notAdd the # prefix to the module label in Designer, or shorten status_interval.
Standby commands rejectedThe device is an ESP or EX. Standby is PowerMatch / PowerShare only.
  • Devices — device and attribute administration.
  • AV Zones — binding a DSP zone as the volume device for an AV zone.