Disclaimer

Copyright © Glensound Electronics Ltd and individual contributors. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Glensound nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Content based on github.com/github/opensource.guide used under the CC-BY-4.0 license.

Binary protocol for Divine speaker

Getting device information

The GetInfo message can be sent to any device, regardless of its connection state. The message header must not include any password.

This should be done only once, when the device is discovered on the network. The device returns an Info structure containing various items, of which most important are Product ID and device name. The Divine's PID is 49.

1) Host controller sends a GetInfo message to the device.

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 10 00 05 00 90 09 89 03   GS Ctrl.........
------------------------------------------------------

GS Header:
0000   47 53 20 43 74 72 6c 00                           Magic
                               10 00                     Size
                                     05                  Opcode
                                        00               Flags
                                           90 09 89 03   Controller ID

    Magic: 4753204374726c00                              (Must not use password)
    Size: 0x0010 (Payload 0 bytes)                       Packet size, including this header
        .000 0000 0001 0000 = Packet size: 16
        0... .... .... .... = Multipacket: False         Message has one packet (this one)
    Opcode: 5 (GetInfo)
    Flags: 0x00                                          (set to zero)
    Controller ID: 0x03890990                            Unique value on this network, identifies the sender

2) Divine responds with Info.

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 90 00 04 0c 00 91 e9 80   GS Ctrl.........
0010   00 24 17 df ef fe 32 7b 31 00 00 01 02 00 00 00   .$....2{1.......
0020   00 1d c1 ff fe 91 e9 80 44 49 56 2d 30 31 2d 39   ........DIV-01-9
0030   31 65 39 38 30 00 00 00 00 00 00 00 00 00 00 00   1e980...........
0040   00 00 00 00 00 00 00 00 44 69 76 69 6e 65 2d 4d   ........Divine-M
0050   61 72 63 69 6e 00 00 00 00 00 00 00 00 00 00 00   arcin...........
0060   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0070   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0080   00 00 00 00 00 00 00 00 02 10 00 00 00 00 00 00   ................
------------------------------------------------------

GS Header:
0000   47 53 20 43 74 72 6c 00 90 00 04 0c 00 91 e9 80

    Magic: 4753204374726c00
    Size: 0x0090 (Payload 128 bytes)
        .000 0000 1001 0000 = Packet size: 144
        0... .... .... .... = Multipacket: False
    Opcode: 4 (Info)
    Flags: 0x0c                                          (ignore)
    Sequence: 0                                          Sequence number for Info packets
    Device ID: 91e980

Info:
0010   00 24                                             Firmware version
             17 df                                       Status port
                   ef fe 32 7b                           Status IP
                               31 00                     Product ID
                                     00                  Variant ID
                                        01               Protocol version
                                           02 00         Flags
                                                 00 00   Dante process ID
0020   00 1d c1 ff fe 91 e9 80                           Dante ID
                               44 49 56 2d 30 31 2d 39   Host name
0030   31 65 39 38 30 00 00 00 00 00 00 00 00 00 00 00
0040   00 00 00 00 00 00 00 00
                               44 69 76 69 6e 65 2d 4d   Friendly name
0050   61 72 63 69 6e 00 00 00 00 00 00 00 00 00 00 00
0060   00 00 00 00 00 00 00 00
                               00 00 00 00 00 00 00 00   Domain name
0070   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080   00 00 00 00 00 00 00 00
                               02 10                     DNT version
                                     00 00               DFU2 version
                                           00 00 00 00   reserved

    Firmware version: 0x2400                             Version of the main DFU firmware file (2.4.0)
    Status port: 6111                                    The port to which the device sends multicast packets
    Status IP: 239.254.50.123                            The multicast group address the device sends to
    Product ID: 49 (Divine)                              Product identifier (49 = Divine)
    Variant ID: 0                                        Product variant
    Protocol version: 1                                  Network protocol version
    Flags: 0x0002
        .... .... .... ...0 = DNT updateable: False      Capability to update the main DNT file online (no)
        .... .... .... ..1. = DFU updateable: True       Capability to update the main DFU file online (yes)
        .... .... .... .0.. = DFU2 updateable: False     Capability to update the secondary DFU file online (no)
    Dante process ID: 0x0000                             (Audinate process ID, in practice always zero)
    Dante ID: 0x001dc1fffe91e980                         Globally unique device identifier
    Host name: DIV-01-91e980                             Fixed device name
    Friendly name: Divine-Marcin                         User-assignable device name
    Domain name:                                         Dante domain name (none)
    DNT version: 0x1002                                  DNT file version (1.0.2)
    DFU2 version: 0x0000                                 Secondary DFU file version (unused)

Maintaining connection state

If the host controller wants to keep the device connected it should send it messages (other than GetInfo) at least every 5-6 seconds. While connected, the device sends periodic Status messages and state change reports to the controller. If the device doesn't receive a message (other than GetInfo) for 7 seconds it disconnects and stops sending any data.

Typically a controller sends a GetConfig message every 5-6 seconds as keepalive, because the Config response indicates the connection state. The GetConfig message also contains bits that indicate whether the controller wishes to establish an exclusive connection and whether it wants the Status messages sent 10 times per second or once per second.

If the controller prefers to send ad-hoc commands to the device it doesn't need to keep the device connected. Sending any command, other than GetInfo, will set the device in Connected state (if access is granted) for 7 seconds.

The device responds with a Config message, which contains bits indicating the connection state.

1) Host controller sends a GetConfig command to the device.

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 10 00 07 01 90 09 89 03   GS Ctrl.........
------------------------------------------------------

GS Header:
    Magic: 4753204374726c00
    Size: 0x0010 (Payload 0 bytes)
        .000 0000 0001 0000 = Packet size: 16
        0... .... .... .... = Multipacket: False
    Opcode: 7 (GetConfig)
    Flags: 0x01
        .... ...1 = Exclusive: True                      Desired exclusive connection (unicast responses)
        .... ..0. = No meter: False                      Desired Status period of 10 Hz
    Controller ID: 0x03890990

2) Device responds with a Config message.

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 18 00 06 0d 01 91 e9 80   GS Ctrl.........
0010   ef fe 32 7b 17 df 00 00                           ..2{....
------------------------------------------------------

GS Header:
0000   47 53 20 43 74 72 6c 00 18 00 06 0d 00 91 e9 80

    Magic: 4753204374726c00                              Can be XORed with a 8-byte password value
    Size: 0x0018 (Payload 8 bytes)
        .000 0000 0001 1000 = Packet size: 24
        0... .... .... .... = Multipacket: False
    Opcode: 6 (Config)
    Flags: 0x0d
        .... ...1 = Exclusive: True                      Device is in Exclusive connection mode
        .... .1.. = Password valid: True                 Password used in GetConfig was valid
        .... 1... = Access granted: True                 Access granted to this host controller
    Sequence: 0                                          Sequence number for Config packets
    Device ID: 91e980

Config:
0010   ef fe 32 7b                                       Status IP, if in Shared mode
                   17 df                                 Status port, if in Shared mode
                         00 00                           reserved

    Status IP: 239.254.50.123
    Status port: 6111

Receiving periodic Status messages

When the device is in Connected state it sends periodic Status messages. In Exclusive connection mode it unicasts the packets to the host controller which has the connection granted. In Shared connection mode the device multicasts the packets to the group address and port indicated in the Config message.

The frequency of the Status messages is controlled by the NoMeter bit in the GetConfig command. If the bit is cleared, the device sends Status 10 times per seconds. This is useful if the host controller displays live audio metering data provided in the Status messages. If NoMeter is set, the device sends Status once per second.

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 28 00 01 00 0c 91 e9 80   GS Ctrl.(.......
0010   02 00 00 00 00 01 02 00 00 00 00 00 fe fe fe fe   ................
0020   fe fe fe fe 13 6c fc 00                           .....l..
------------------------------------------------------

GS Header:
0000   47 53 20 43 74 72 6c 00 28 00 01 00 0c 91 e9 80

    Magic: 4753204374726c00
    Size: 0x0028 (Payload 24 bytes)
        .000 0000 0010 1000 = Packet size: 40
        0... .... .... .... = Multipacket: False
    Opcode: 1 (Status)
    Flags: 0x00                                          (ignore)
    Sequence: 12
    Device ID: 91e980

GS Status:
0010   02 00 00 00                                       Flags
                   00                                    Preset report generation
                      01                                 Device report generation
                         02                              In channel names report generation
                            00                           Out channel names report generation

    Flags: 0x00000002
        .... .... .... .... .... .... .... ...0 = Identify: False
        .... .... .... .... .... .... .... ..1. = Clock locked: True
    Preset rep. gen.: 0
    Device rep. gen.: 1
    In ch. names rep. gen.: 2
    Out ch. names rep. gen.: 0

Divine status:
0010                           00                        Report generation
                                  00 00 00               reserved
                                           fe fe fe fe   Meters
0020   fe fe fe fe
                   13                                    Pot value
                      6c                                 Volume
                         fc                              Temperature
                            00                           reserved

    Report gen.: 0
    Meters: fefefefefefefefe
    Pot value: 19                                        Pot value is in range 0 - 127
    Volume: 108                                          Volume is in range 0 - 127
    Temperature: 0xfc (42)                               Temperature is 0.5 * (-4) + 44 = 42 Celsius

Audio meter values are in Dante format. The value is interpreted as the number of half-decibel steps below 0 dBFS. For example:

00 = 0 dBFs
01 = -0.5 dBFS
02 = -1 dBFs
...
fe = -127 dBFs
ff is reserved

Audio meters ordering for Divine:

0: IN 1
1: IN 2
2: IN 3
3: IN 4
4: IN 1+2
5: IN 3+4
6: IN 1+2+3+4
7: speaker output

Temperature is expressed as signed 8-bit value. To convert it to Celsius use the following formula:

T = 0.5 * Temperature + 44

Receiving device state reports

If the device is in Connected state it sends a report whenever its internal state has changed, or as a response to an explicit Query message. The internal state may change as a result of a user manually operating the units UI, a command received from a controller, or an independent event.

Reports are sent using one or more packets of type Report. If the message size is greater than the packet size the Multipacket bit is set in the GS header and the message has to be re-assembled from multiple packets (Divine only sends single-packet messages). A Report message may contain one or more reports. Each report is prefixed with a Block Header indicating its type and size.

The example below shows the full report, consisting of a Device, Input Channel Names, Output Channel names and Divine-specific report (type 4). In practice, the device can send any of these reports in any combination, so the host controller must parse the message and extract the reports from it.

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 60 00 0a 00 78 91 e9 80   GS Ctrl.`...x...
0010   01 01 04 00 80 bb 00 00 00 00 00 00 00 00 00 00   ................
0020   01 00 00 00 02 02 03 00 02 30 31 02 30 32 02 30   .........01.02.0
0030   33 02 30 34 03 00 00 00 04 2f 09 00 56 00 00 00   3.04...../..V...
0040   02 00 00 00 00 00 02 02 16 00 00 00 05 00 00 00   ................
0050   06 02 02 02 01 00 02 02 1e 01 33 00 00 00 00 00   ..........3.....
------------------------------------------------------

GS Header:
0000   47 53 20 43 74 72 6c 00 60 00 0a 00 78 00 00 00

    Magic: 4753204374726c00
    Size: 96 (Payload 80 bytes)
        .000 0000 0110 0000 = Packet size: 96
        0... .... .... .... = Multipacket: False
    Opcode: 10 (Report)
    Flags: 0x00                                          (ignore)
    Sequence: 120
    Device ID: 91e980

Block Header:
0010   01                                                Type
          01                                             Generation
             04 00                                       Length in words

    Type: 1 (Device)
    Generation: 1
    Length in words: 4 (16 bytes)

Device Report:
0010               80 bb 00 00                           Sample rate in Hz
                               00                        Srate choice (N.A. for Divine)
                                  00                     Clock source (N.A. for Divine)
                                     00                  Clock source choice (N.A. for Divine)
                                        00               ADC filter code (N.A. for Divine)
                                           00            DAC filter code (N.A. for Divine)
                                              00 00 00   reserved
0020   01 00 00 00                                       Flags

    Sample rate: 48000
    Sample rate choice: 0 (Unknown)
    Clock source: 0 (Dante)
    Clock source choice: 0 (Dante)
    ADC filter: 0 (Normal)
    DAC filter: 0 (Normal)
    Flags: 0x00000001
        .... .... .... .... .... .... .... ...1 = Link 1: True
        .... .... .... .... .... .... .... ..0. = Link 2: False
        .... .... .... .... .... .... .... .0.. = PSU 1: False
        .... .... .... .... .... .... .... 0... = PSU 2: False
        .... .... .... .... .... .... ...0 .... = POE 1: False
        .... .... .... .... .... .... ..0. .... = POE 2: False

Block Header:
0020               02                                    Type
                      02                                 Generation
                         03 00                           Length in words

    Type: 2 (In Channel Names)
    Generation: 2
    Length in words: 3 (12 bytes)

In Channel Names Report:
0020                           02 30 31 02 30 32 02 30
0030   33 02 30 34

Block Header:
0030               03                                    Type
                      00                                 Generation
                         00 00                           Length in words

    Type: 3 (Out Channel Names)
    Generation: 0
    Length in words: 0 (0 bytes)                         (no data follows)

Block Header:
0030                            04                       Type
                                   2f                    Generation
                                      09 00              Length in words

    Type: 4 (Divine 4)
    Generation: 47
    Length in words: 9 (36 bytes)

Divine Report (type 4):
0030                                       56 00 00 00   Flags
0040   02 00 00 00                                       EQ type
                   00 00                                 Priorities
                         02                              Solo dim
                            02                           Min solo
                               16 00 00 00               Trims
                                           05 00 00 00   Delays
0050   06                                                Password
          02                                             Meter mode
             02                                          Volume boost
                02                                       Volume limit
                   01                                    Min volume
                      00                                 Lineup
                         02                              Power save
                            02                           Mix select
                               1e                        Mix enables
                                  01                     Filter enables
                                     33                  Display brightness
                                        00               Speaker group
                                           00 00 00 00   reserved

    Flags: 0x00000056
        .... .... .... .... .... .... .... ...0 = LF cut: False
        .... .... .... .... .... .... .... ..1. = Pot enable: True
        .... .... .... .... .... .... .... .1.. = Mix sel enable: True
        .... .... .... .... .... .... .... 0... = Dark mode: False
        .... .... .... .... .... .... ...1 .... = Rear buttons enable: True
        .... .... .... .... .... .... ..0. .... = Rear passw. enable: False
        .... .... .... .... .... .... .1.. .... = Phase invert: True
    EQ type: 2 (Normal)
    Priorities: 0x0000
        .... .... .... .000 = Priority 1: 0
        .... .... ..00 0... = Priority 2: 0
        .... ...0 00.. .... = Priority 3: 0
    Solo dim: 2 (-18 dB)
    Min solo: 2 (-36 dB)
    Trims: 0x16000000
    Delays: 0x05000000
    Password: 0x06
    Meter mode: 2 (Colours)
    Volume boost: 2 (12 dB)
    Volume limit: 2 (-6 dB)
    Min volume: 1 (-52 dB)
    Lineup: 0 (-18 dB)
    Power save: 2 (30 s)
    Mix select: 2
    Mix enables: 0x1e
    Filter enables: 0x01
    Display brightness: 51
    Speaker group: 0

Sending commands

Commands are contained in messages with opcode 3 (SetControl). A SetControl message may include one or more commands. The message header indicates the desired connection type and status update frequency.

The structure of a SetControl message is:

GS Header
Command
Command
... (up to the packet capacity)

Mix Selection (5)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   05 02 00 00                                       ....
------------------------------------------------------

GS Header:
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03

    Magic: 4753204374726c00                              Can be XORed with a 8-byte password value
    Size: 20 (Payload 4 bytes)
        .000 0000 0001 0100 = Packet size: 20
        0... .... .... .... = Multipacket: False         Must be 0 (only single-packet message allowed)
    Opcode: 3 (SetControl)
    Flags: 0x01
        .... ...1 = Exclusive: True                      Desired connection type
        .... ..0. = No meter: False                      Status frequency request (10 Hz)
    Controller ID: 0x03890990                            Unique value on this network, identifies the sender

Command:
0010   05                                                Opcode
          02                                             Mix select
             00 00                                       reserved

    Opcode: 5
    Mix select: 2                                        Must be in range 1 to 7

Mix select:
1: Ch1
2: Ch2
3: Ch3
4: Ch4
5: Ch12
6: Ch3
4
7: Ch1_4

Mix Enable (6)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   06 01 01 00                                       ....
------------------------------------------------------

Command:
0010   06                                                Opcode
          01                                             Mix type
             01                                          Enable
                00                                       reserved

    Opcode: 6
    Mix type: 1                                          Must be in range 1 to 7
    Enable: 1 (Enabled)                                  Must be 0 or 1

Mix type:
1: Ch1
2: Ch2
3: Ch3
4: Ch4
5: Ch12
6: Ch3
4
7: Ch1_4

Channel delay (7)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   07 00 05 00                                       ....
------------------------------------------------------

Command:
0010   07                                                Opcode
          00                                             Channel
             05                                          Delay
                00                                       reserved

    Opcode: 7
    Channel: 0                                           Must be in range 0 to 3 (input channel 1 to 4)
    Delay: 5                                             Must be in range 0 to 40 (milliseconds)

Channel gain trim (8)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   08 00 07 00                                       ....
------------------------------------------------------

Command:
0010   08                                                Opcode
          00                                             Channel
             07                                          Trim value
                00                                       reserved

    Opcode: 8
    Channel: 0                                           Must be in range 0 to 3 (input channel 1 to 4)
    Trim: 7                                              Signed byte, must be in range -64 to 63 (dB)

Channel speech filter (9)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   09 00 01 00                                       ....
------------------------------------------------------

Command:
0010   09                                                Opcode
          00                                             Channel
            01                                           Filter
               00                                        reserved

    Opcode: 9
    Channel: 0                                           Must be in range 0 to 3 (input channel 1 to 4)
    Filter: 1 (Enabled)                                  Must be 0 or 1

Channel priority (10)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   0a 00 02 00                                       ....
------------------------------------------------------

Command:
0010   0a                                                Opcode
          00                                             Priority
            02                                           Channel
               00                                        reserved

    Opcode: 10
    Priority: 0                                          Must be in range 0 to 2
    Channel: 2                                           Must be in range 0 to 3 (input channel 1 to 4)

Solo (announcement) dimming (11)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   0b 03 00 00                                       ....
------------------------------------------------------

Command:
0010   0b                                                Opcode
          03                                             Dim code
            00 00                                        reserved

    Opcode: 11
    Solo dim: 3 (-24 dB)                                 Must be in range 0 to 5

Dim code:
0: -6 dB
1: -12 dB
2: -18 dB
3: -24 dB
4: -30 dB
5: Mute

Minimum solo (announcement) volume (12)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   0c 02 00 00                                       ....
------------------------------------------------------

Command:
0010   0c                                                Opcode
          02                                             Min solo code
            00 00                                        reserved

    Opcode: 12
    Min solo: 2 (-36 dB)                                 Must be in range 0 to 7

Min solo code:
0: -24 dB
1: -30 dB
2: -36 dB
3: -42 dB
4: -48 dB
5: -52 dB
6: -58 dB
7: Mute

Level lineup (13)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   0d 01 00 00                                       ....
------------------------------------------------------

Command:
0010   0d                                                Opcode
          01                                             Lineup code
            00 00                                        reserved

    Opcode: 13
    Lineup: 1 (-20 dB)                                   Must be in range 0 to 2

Lineup code:
0: -18 dB
1: -20 dB
2: -24 dB

Volume (14)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   0e 58 00 00                                       .X..
------------------------------------------------------

Command:
0010   0e                                                Opcode
          58                                             Volume
            00 00                                        reserved

    Opcode: 14
    Volume: 88                                           Must be in range 0 to 127 (maps to 0 to 100%)

Minimum volume (15)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   0f 01 00 00                                       ....
------------------------------------------------------

Command:
0010   0f                                                Opcode
          01                                             Min volume code
            00 00                                        reserved

    Opcode: 15
    Min volume: 1 (-52 dB)                               Must be in range 0 to 5

Min volume code:
0: Mute
1: -52 dB
2: -46 dB
3: -40 dB
4: -34 dB
5: -28 dB

Volume limit (16)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   10 02 00 00                                       ....
------------------------------------------------------

Command:
0010   10                                                Opcode
          02                                             Volume limit code
            00 00                                        reserved

    Opcode: 16
    Volume limit: 2 (-6 dB)                              Must be in range 0 to 4

Volume limit code:
0: 0 dB
1: -3 dB
2: -6 dB
3: -9 dB
4: -12 dB

Volume boost (17)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   11 02 00 00                                       ....
------------------------------------------------------

Command:
0010   11                                                Opcode
          02                                             Volume boost code
            00 00                                        reserved

    Opcode: 17
    Volume boost: 2 (12 dB)                              Must be in range 0 to 4

Volume boost code:
0: 0 dB
1: 6 dB
2: 12 dB
3: 18 dB
4: 24 dB

EQ type (18)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   12 00 02 00                                       ....
------------------------------------------------------

Command:
0010   12                                                Opcode
          00                                             reserved
            02                                           EQ type code
               00                                        reserved

    Opcode: 18
    EQ type: 2 (Normal)                                  Must be in range 0 to 3

EQ type code:
0: None
1: Natural
2: Normal
3: Pop

LF cut (19)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   13 01 00 00                                       ....
------------------------------------------------------

Command:
0010   13                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 19
    Enable: 1 (Enabled)                                  Must be 0 or 1

Pot enable (20)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   14 01 00 00                                       ....
------------------------------------------------------

Command:
0010   14                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 20
    Enable: 1 (Enabled)                                  Must be 0 or 1

Mix selection (front button) enable (21)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   15 01 00 00                                       ....
------------------------------------------------------

Command:
0010   15                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 21
    Enable: 1 (Enabled)                                  Must be 0 or 1

Rear buttons enable (22)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   16 01 00 00                                       ....
------------------------------------------------------

Command:
0010   16                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 22
    Enable: 1 (Enabled)                                  Must be 0 or 1

Rear password required (23)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   17 01 00 00                                       ....
------------------------------------------------------

Command:
0010   17                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 23
    Enable: 1 (Enabled)                                  Must be 0 or 1

Set rear password (24)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   18 06 00 00                                       ....
------------------------------------------------------

Command:
0010   18                                                Opcode
          06                                             Password
            00 00                                        reserved

    Opcode: 24
    Password: 0x06

Dark mode (25)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   19 01 00 00                                       ....
------------------------------------------------------

Command:
0010   19                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 25
    Enable: 1 (Enabled)                                  Must be 0 or 1

Power save timeout (26)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   1a 02 00 00                                       ....
------------------------------------------------------

Command:
0010   1a                                                Opcode
          02                                             Power save code
            00 00                                        reserved

    Opcode: 26
    Power save: 2 (30 s)                                 Must be in range 0 to 7

Power save code:
0: Never
1: 10 s
2: 30 s
3: 60 s
4: 5 min
5: 15 min
6: 30 min
7: 60 min

Meter mode (27)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   1b 02 00 00                                       ....
------------------------------------------------------

Command:
0010   1b                                                Opcode
          02                                             Meter mode code
            00 00                                        reserved

    Opcode: 27
    Meter mode: 2 (Colours)                              Must be in range 0 to 2

Meter mode code:
0: Off
1: Bar
2: Colours

Display brightness (28)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   1c 30 00 00                                       .0..
------------------------------------------------------

Command:
0010   1c                                                Opcode
          30                                             Brightness
            00 00                                        reserved

    Opcode: 28
    Display brightness: 48                               Must be in range 0 to 100

Speaker (peer) group (29)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   1d 01 00 00                                       ....
------------------------------------------------------

Command:
0010   1d                                                Opcode
          01                                             Speaker group
            00 00                                        reserved

    Opcode: 29
    Speaker group: 1                                     Must be in range 0 to 10

Phase invert (32)

------------------------------------------------------
0000   47 53 20 43 74 72 6c 00 14 00 03 01 90 09 89 03   GS Ctrl.........
0010   20 01 00 00                                        ...
------------------------------------------------------

Command:
0010   20                                                Opcode
          01                                             Enable
            00 00                                        reserved

    Opcode: 32
    Enable: 1 (Enabled)                                  Must be 0 or 1

Updated: 16/Jun/2023