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.
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)
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
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
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
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)
------------------------------------------------------
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: Ch34
7: Ch1_4
------------------------------------------------------
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: Ch34
7: Ch1_4
------------------------------------------------------
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)
------------------------------------------------------
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)
------------------------------------------------------
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
------------------------------------------------------
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)
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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%)
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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
------------------------------------------------------
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