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 common Glensound protocol is documented in GsProtocol.html and defined in common header files Gs*.h. This document refers to device-specific details of the Glensound DARK1616M device, defined in the file Dark1616M.h.
Analogue inputs feature discrete gain control. Gain values are expressed as indices to internal gain tables. The range and number of available gain steps depends on the input mode as follows:
Index range of 0 to 6 maps to gain of -9.0 to +9.0 dB, in 3 dB steps
Index range of 0 to 17 maps to gain of +10.0 to +61.0 dB, in 3 dB steps
Audio channels are groupped in pairs of adjacent channel numbers. Channels 1-2 is the first pair, 3-4 is the second pair, etc. Input signal type (analogue or digital) can only be set per channel pair - meaning that both inputs of a pair can be either analogue or digital, but not mixed. Each channel pair can be set in stereo mode, in which both channels share a common mode and gain selection.
Pairing settings apply simultaneously to an input pair and output pair of the same index. This means that both the input pair 1-2 and output pair 1-2 use the same pairing mode (mono or stereo).
NOTE: Channel and channel pair numbers used in binary protocol are zero-based. This means that the first channel pair is referred to as 0-1.
The status structure extends Gs::Status
(file GsStatus.h). The generations
table in the base status uses four entries, indexed with
ReportId::Preset
,
ReportId::Device
,
ReportId::InChannelNames
, and
ReportId::OutChannelNames
.
The following status fields are specific to DARK1616M:
uint8_t reportGenerations[cMaxReportTypes]
Four entries for report generation numbers, of which the first two are used, for Io Board and Mic Input Board generation numbers.
uint8_t meters[cNumMeterChannels]
Meter values of all the Dante output channels, followed by meter values for all the Dante input channels, ordered by channel index.
Note that Dante output channels transmit audio taken from the local device inputs so the output meters reflect the levels on the device inputs. Similarly, because audio from Dante input channels is sent to the local device outputs, the input meters reflect the levels on the device outputs.
Meter values are in Dante format; that is the meter value is the number of 0.5 dB steps below 0 dBFS. For example, 0 means 0 dBFS, 1 means -0.5 dBFs.
uint8_t aes3LockStates
Lock states of all the AES3 inputs. It is reported regardless of whether the input is currently in digital mode. The value has 8 one-bit fields of the type
Lock
packed in an integer as follows:
bit 0: inputs 1-2
bit 1: inputs 3-4
...
bit 7: inputs 15-16A bit of 1 indicates the input pair is locked.
uint8_t selectedInputs
Actually selected signal types of all the inputs (most useful in Auto selection mode). The value has 8 one-bit fields of the type
SignalType
packed in an integer as follows:
bit 0: inputs 1-2
bit 1: inputs 3-4
...
bit 7: inputs 15-16A bit of 1 indicates digital input.
The following standard commands are supported (file GsCommands.h):
Command::AdcSettings
Command::DacSettings
Command::RestoreDefaults
Command::ChannelName
Device-specific commands are:
Dark1616M::Command::GainIndex
Sets gain index for the specified analogue input. This works regardless of the current input's signal type (analogue or digital). Each input stores gain indices for all three analogue modes (line, mic and phantom). This command only sets the gain for the current mode of the input. As stated in [Analogue Gain Indices] the valid range of gain indices depend on the mode. The device will coerce the values if they are out of range.
The message is a
GainIndexMsg
structure with the following fields:command = Dark1616M::Command::GainIndex index = input index (0 to 15) gainIndex = gain index value
Dark1616M::Command::InputMode
Sets analogue input mode for an input. This works regardless of the current input's signal type (analogue or digital). When switching analogue input modes the device will automatically apply the gain index stored for this mode.
The message is a
InputModeMsg
structure with the following fields:command = Dark1616M::Command::InputMode index = input index (0 to 15) mode = the selected mode (enum AnalogueInputMode)
Dark1616M::Command::InputTypeChoice
Sets signal type choice for an input pair. It can be Analogue, Digital or Auto. If Auto is chosen the inputs will automatically switch to digital if the AES3 input clock is locked, and to analogue otherwise.
The message is a
InputChoiceMsg
structure with the following fields:command = Dark1616M::Command::InputTypeChoice index = input pair index (0 to 7) choice = the signal type choice (enum SignalTypeChoice)
Dark1616M::Command::ChannelPairing
Sets channel pairing for an input pair and its corresponding output pair.
The message is an
ChannelPairingMsg
structure with the following fields:command = Dark1616M::Command::ChannelPairing index = pair index (0 to 7) mode = the selected mode (enum Pairing)
The following standard reports are supported (file GsReports.h):
ReportId::Device
ReportId::Preset
ReportId::InChannelNames
ReportId::OutChannelNames
In addition, DARK1616M supports the following device-specific reports:
The report data structure is IoBoardReportData
with the following fields:
uint16_t inputChoices
User choices of input signal types. The value has 8 two-bit fields of the type
SignalTypeChoice
packed in an integer as follows:
bits 0..1: inputs 1-2
...
bits 14..15: inputs 15-16
The report data structure is MicInBoardReportData
with the following fields:
uint8_t gains[16][4]
An array of gain indices. There are 16 entries (one per analogue input) and each entry has four values equal to gain indices for each analogue input mode. The first value of the four is zero as it corresponds to the reserved mode.
uint32_t inputModes
Current modes of all the analogue inputs. The value has 16 two-bit fields of the type
AnalogueInputMode
packed in an integer as follows:
bits 0..1: input 1
bits 2..3: input 2
...
bits 30..31: input 16
uint8_t pairings
Channel pairings. The value has 8 one-bit fields of the type
Pairing
packed in an integer as follows:
bit 0: pair 1-2
bit 1: pair 3-4
...
bit 7: pair 15-16
The following standard presets are supported (file GsPresets.h):
PresetType::Device
PresetType::ChannelNames
The following device-specific preset types are defined:
Dark1616M::PresetType::InputChoices
Sets input signal type choices for all the inputs.
Dark1616M::PresetType::InputSettings
Sets analogue input modes, gains, and channel pairings of all the channels.
The following standard factory defaults are supported:
SettingsPart::Device
SettingsPart::ChannelNames
The following device-specific settings parts are defined:
Dark1616M::SettingsPart::Channels
Restores all settings for all the channels: input type choices, modes and gains, and channel pairings.
Updated 02/Apr/2019