This document describes a ConMon control protocol that uses a simple pseudo GPIO interface to manipulate control points on an AudioScience Dante Iyo. It also outlines how status returns work.
The control protocol is defined for a 32 input and 32 output Iyo Dante device. Devices that have fewer inputs and outputs use the same ConMon control layout, but ignore controls that do not apply.
The Dante Iyo devices do not support Preset Save and Restore, but any settings made are restored after a power cycle.
Throughout this document IYO is used to mean and Iyo Dante device with a Dante module installed.
ConMon Protocol
Header Structure
This section is reproduced here from Symetrix document ComMon_Control_Interface_V2.doc.
What we refer to below as the “header” is actually the first few bytes of the message body or payload in terms of Audinate’s terminology. It does not include the Dante “opaque” header. It consists of a 32-bit message type identifier field, 16-bit header version, 16-bit message length, and 32 bits of reserved data.
uint16 message_version; // 0x0001 for the first AudioScience version
uint16 message_type; // pseudo-GPIO command/response = 0x8000, asynchronous response = 0x8001
uint16 header_version; // 0x0000 for now
uint16 byte_count; // number of bytes in message, including this header
uint32 reserved; // future expansion, set to zero
char data[]; // payload data
For pseudo-GPIO messages, the payload data looks like this:
uint16 gpio_count; // number of 32-bit GPIO mask/value pairs in this message
uint16 gpio_offset; // offset into the total number of 32-bit GPIO words supported by this device
uint32 mask0; // mask of values that are “significant” in this packet (active high)
uint32 value0; // values of the bits that are set to 0x1 in the mask
uint32 mask1; // similar for words 1 through N
uint32 value1;
…
uint32 maskN;
uint32 valueN;
|
Note
|
gpio_offset is typically 0 but can be set to a non-zero offset to address a subset of the complete address space. |
|
Note
|
All fields are in network byte order. Hence macros such as ntohs() and ntohl() may be necessary. |
The offset field provides a way to expand to more GPIO words than can fit into a single 500-byte packet. (Ultimo limits all packets to 500 bytes.) It is not anticipated that this will be needed, but is added to match the Dante GPIO command set. It could also be used to change just word 1, for example. This field is unused by the IYO.
An identical packet format is used for communication in both directions. When a ConMon Control interface wishes to change a parameter, it sends a message type 0x8000 with the appropriate mask bits set. The IYO responds with the complete status, with mask bits set for each parameter that is valid. For example, the bits for things such as presets would not be set, but most everything else (phantom, switch state, LED status, version, etc.) would be set. This creates a way for a ConMon Control interface to query the complete device state. It could send a command with mask with all zeros, and would receive the complete status in return.
Asynchronous responses can be sent from the IYO to a ConMon Control interface. The main use for these is switch changes. Asynchronous changes are indicated with message type 0x8001. The mask field will indicate what value was changed. (It may be possible to integrate both responses and asynchronous changes into a single 0x8000 message. But it seems like differentiating these will simplify things and is more consistent with the Audinate query/status message pair system.)
Word and bit definitions
|
Note
|
Direction is from the perspective of the IYO ConMon device. |
| Bit | Usage | Direction |
|---|---|---|
0 |
Asynchronous response enable |
Input |
1 |
Flash/Find Unit (turns off after ~8 seconds) |
Input |
2 |
Reserved |
|
3 |
Reserved |
|
4 |
Reserved |
|
5 |
Reserved |
|
6 |
Reserved |
|
7 |
Reserved |
|
8..15 |
Minor version number as 8-bit value |
Output |
16..23 |
Major version number as 8-bit value |
Output |
24..31 |
LED brightness (percent) |
Input |
|
Note
|
Valid LED brightness values are 25, 50, 75, 100 (percent) |
| Bit | Usage | Direction |
|---|---|---|
0-15 |
AudioScience Adapter Type |
Output |
16..23 |
Audio Input Channel Count |
Output |
24..31 |
Audio Output Channel Count |
Output |
| Bit | Usage | Direction |
|---|---|---|
0 |
Phantom Power Channel 1 |
Input |
1 |
Phantom Power Channel 2 |
Input |
2 |
Phantom Power Channel 3 |
Input |
3 |
Phantom Power Channel 4 |
Input |
4 |
Phantom Power Channel 5 |
Input |
5 |
Phantom Power Channel 6 |
Input |
6 |
Phantom Power Channel 7 |
Input |
7 |
Phantom Power Channel 8 |
Input |
8 |
Phantom Power Channel 9 |
Input |
9 |
Phantom Power Channel 10 |
Input |
10 |
Phantom Power Channel 11 |
Input |
11 |
Phantom Power Channel 12 |
Input |
12 |
Phantom Power Channel 13 |
Input |
13 |
Phantom Power Channel 14 |
Input |
14 |
Phantom Power Channel 15 |
Input |
15 |
Phantom Power Channel 16 |
Input |
16 |
Phantom Power Channel 17 |
Input |
17 |
Phantom Power Channel 18 |
Input |
18 |
Phantom Power Channel 19 |
Input |
19 |
Phantom Power Channel 20 |
Input |
20 |
Phantom Power Channel 21 |
Input |
21 |
Phantom Power Channel 22 |
Input |
22 |
Phantom Power Channel 23 |
Input |
23 |
Phantom Power Channel 24 |
Input |
24 |
Phantom Power Channel 25 |
Input |
25 |
Phantom Power Channel 26 |
Input |
26 |
Phantom Power Channel 27 |
Input |
26 |
Phantom Power Channel 28 |
Input |
28 |
Phantom Power Channel 29 |
Input |
29 |
Phantom Power Channel 30 |
Input |
30 |
Phantom Power Channel 31 |
Input |
31 |
Phantom Power Channel 32 |
Input |
| Bit | Usage | Direction |
|---|---|---|
0 |
Input Mute Channel 1 |
Input |
1 |
Input Mute Channel 2 |
Input |
2 |
Input Mute Channel 3 |
Input |
3 |
Input Mute Channel 4 |
Input |
4 |
Input Mute Channel 5 |
Input |
5 |
Input Mute Channel 6 |
Input |
6 |
Input Mute Channel 7 |
Input |
7 |
Input Mute Channel 8 |
Input |
8 |
Input Mute Channel 9 |
Input |
9 |
Input Mute Channel 10 |
Input |
10 |
Input Mute Channel 11 |
Input |
11 |
Input Mute Channel 12 |
Input |
12 |
Input Mute Channel 13 |
Input |
13 |
Input Mute Channel 14 |
Input |
14 |
Input Mute Channel 15 |
Input |
15 |
Input Mute Channel 16 |
Input |
16 |
Input Mute Channel 17 |
Input |
17 |
Input Mute Channel 18 |
Input |
18 |
Input Mute Channel 19 |
Input |
19 |
Input Mute Channel 20 |
Input |
20 |
Input Mute Channel 21 |
Input |
21 |
Input Mute Channel 22 |
Input |
22 |
Input Mute Channel 23 |
Input |
23 |
Input Mute Channel 24 |
Input |
24 |
Input Mute Channel 25 |
Input |
25 |
Input Mute Channel 26 |
Input |
26 |
Input Mute Channel 27 |
Input |
26 |
Input Mute Channel 28 |
Input |
28 |
Input Mute Channel 29 |
Input |
29 |
Input Mute Channel 30 |
Input |
30 |
Input Mute Channel 31 |
Input |
31 |
Input Mute Channel 32 |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 1 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 2 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 3 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 4 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 5 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 6 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 7 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 8 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 9 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 10 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 11 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 12 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 13 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 14 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 15 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 16 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 17 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 18 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 19 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 20 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 21 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 22 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 23 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 24 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 25 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 26 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 27 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 28 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 29 Trim (signed char) -60..+24dBu |
Input |
8-15 |
Input 30 Trim (signed char) -60..+24dBu |
Input |
16-23 |
Input 31 Trim (signed char) -60..+24dBu |
Input |
24-31 |
Input 32 Trim (signed char) -60..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0 |
Output Mute Channel 1 |
Input |
1 |
Output Mute Channel 2 |
Input |
2 |
Output Mute Channel 3 |
Input |
3 |
Output Mute Channel 4 |
Input |
4 |
Output Mute Channel 5 |
Input |
5 |
Output Mute Channel 6 |
Input |
6 |
Output Mute Channel 7 |
Input |
7 |
Output Mute Channel 8 |
Input |
8 |
Output Mute Channel 9 |
Input |
9 |
Output Mute Channel 10 |
Input |
10 |
Output Mute Channel 11 |
Input |
11 |
Output Mute Channel 12 |
Input |
12 |
Output Mute Channel 13 |
Input |
13 |
Output Mute Channel 14 |
Input |
14 |
Output Mute Channel 15 |
Input |
15 |
Output Mute Channel 16 |
Input |
16 |
Output Mute Channel 17 |
Input |
17 |
Output Mute Channel 18 |
Input |
18 |
Output Mute Channel 19 |
Input |
19 |
Output Mute Channel 20 |
Input |
20 |
Output Mute Channel 21 |
Input |
21 |
Output Mute Channel 22 |
Input |
22 |
Output Mute Channel 23 |
Input |
23 |
Output Mute Channel 24 |
Input |
24 |
Output Mute Channel 25 |
Input |
25 |
Output Mute Channel 26 |
Input |
26 |
Output Mute Channel 27 |
Input |
26 |
Output Mute Channel 28 |
Input |
28 |
Output Mute Channel 29 |
Input |
29 |
Output Mute Channel 30 |
Input |
30 |
Output Mute Channel 31 |
Input |
31 |
Output Mute Channel 32 |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Output 1 Trim (signed char) -10..+24dBu |
Input |
8-15 |
Output 2 Trim (signed char) -10..+24dBu |
Input |
16-23 |
Output 3 Trim (signed char) -10..+24dBu |
Input |
24-31 |
Output 4 Trim (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Output 5 Trim (signed char) -10..+24dBu |
Input |
8-15 |
Output 6 Trim (signed char) -10..+24dBu |
Input |
16-23 |
Output 7 Trim (signed char) -10..+24dBu |
Input |
24-31 |
Output 8 Trim (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 9 Output (signed char) -10..+24dBu |
Input |
8-15 |
Input 10 Output (signed char) -10..+24dBu |
Input |
16-23 |
Input 11 Output (signed char) -10..+24dBu |
Input |
24-31 |
Input 12 Output (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 13 Output (signed char) -10..+24dBu |
Input |
8-15 |
Input 14 Output (signed char) -10..+24dBu |
Input |
16-23 |
Input 15 Output (signed char) -10..+24dBu |
Input |
24-31 |
Input 16 Output (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Input 17 Output (signed char) -10..+24dBu |
Input |
8-15 |
Input 18 Output (signed char) -10..+24dBu |
Input |
16-23 |
Input 19 Output (signed char) -10..+24dBu |
Input |
24-31 |
Input 20 Output (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Output 21 Trim (signed char) -10..+24dBu |
Input |
8-15 |
Output 22 Trim (signed char) -10..+24dBu |
Input |
16-23 |
Output 23 Trim (signed char) -10..+24dBu |
Input |
24-31 |
Output 24 Trim (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Output 25 Trim (signed char) -10..+24dBu |
Input |
8-15 |
Output 26 Trim (signed char) -10..+24dBu |
Input |
16-23 |
Output 27 Trim (signed char) -10..+24dBu |
Input |
24-31 |
Output 28 Trim (signed char) -10..+24dBu |
Input |
| Bit | Usage | Direction |
|---|---|---|
0-7 |
Output 29 Trim (signed char) -10..+24dBu |
Input |
8-15 |
Output 30 Trim (signed char) -10..+24dBu |
Input |
16-23 |
Output 31 Trim (signed char) -10..+24dBu |
Input |
24-31 |
Output 32 Trim (signed char) -10..+24dBu |
Input |
Total payload size is
21 x 4 x 2 = 168 bytes