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 Divine device, defined in the file Divine.h.
struct Status
The status structure extends Gs::Status
(file GsStatus.h)
The following fields are specific to Divine:
uint8_t reportGenerations[4]
The first byte is the report generation number of the device-specific report. The remaining 3 bytes are used for padding.
uint8_t meters[8]
Audio meter values:
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
uint8_t potValue
Pot position 0 - 127. It indicates the relative angle of the pot and not the volume.
uint8_t volume
Master volume index 0 - 127
int8_t temperature
Internal unit temperature in Celsius, T = 0.5 * temperature + 44. The unit automatically enters standby mode if the temperature is too high (about 90 Celsius).
The following standard commands are supported (file GsCommands.h):
Command::DacSettings
Command::RestoreDefaults
Command::ChannelName
Divine-specific commands are:
Command::MixSelection
Selects the active mix from the set of currently enabled mixes. The command uses the
MixSelectionMsg
structure.
Command::MixEnable
Enables or disables a mix. Disabled mixes can't be selected. Behaviour is undefined if all mixes are disabled. For sample rate of 96 kHz only the first two channels and their sum are allowed (CH1, CH2 and CH1+2). The command uses the
MixEnableMsg
structure.
Command::ChannelDelay
Sets delay in milliseconds for an input channel. The value is in range 0 to 40. The command uses the
ControlMsg
structure, whereval1
is the channel number andval2
is the delay.
Command::ChannelTrim
Sets the gain trim value for an input channel. The value is a signed byte in the range of -64 to 63 and it corresponds to a gain range from -32 to +15.75 dB. In the range -64 to 0 attenuation step is 0.5 dB and in the range 1 to 63 it is 0.25 dB. The command uses the
ChannelTrimMsg
structure.
Command::ChannelFilter
Enables or disables speech filter for an input channel. The command uses the
ChannelFilterMsg
structure.
Command::ChannelPriority
Sets the input channel number (or a value of None) for a given announcement priority. The command uses the
ChannelPriorityMsg
structure.
Command::SoloDim
Sets the amount of volume dimming for input channels that have a lower priority than the current announcement channel. The value must be in the range 0 to 5 and it is the SoloDim enumeration (-6, -12, -18, -24, -30 and -Inf dB). The message uses the
SoloDimMsg
structure.
Command::MinSolo
Sets the minimum speaker volume during an announcement. The value must be in the range 0 to 7 and is the MinSolo enumeration (-24, -30, -36, -42, -48, -54, -58 and -Inf dB). The command uses the
MinSoloMsg
structure.
Command::Lineup
Sets the audio lineup level for all input channels. The value must be in the range 0 to 2 and is the Lineup enumeration (-18, -20 and -24 dB). The command uses the
LineupMsg
structure.
Command::Volume
Sets the speaker volume. The value must be in the range 0 to 127 and it linearly maps to percentage of the maximum volume from 0 to 100. The actual speaker loudness has a non-linear law, affected by compression and other factors. The resulting volume index is limited at both ends by the MinVolume and VolumeLimit settings. The command uses the
ControlMsg
structure whereval1
is the volume.
Command::MinVolume
Sets the minimum speaker volume. The value must be in the range 0 to 5 and it is the MinVolume enumeration (-Inf, -52, -46, -40, -34 and -28 dB). The command uses the
MinVolumeMsg
structure.
Command::VolumeLimit
Sets the maximum speaker volume. The value must be in the range 0 to 4 and it is the VolumeLimit enumeration (0, -3, -6, -9 and -12 dB). The command uses the
VolumeLimitMsg
structure.
Command::VolumeBoost
Sets the additional gain applied to the speaker volume before the output compressor (effectively determining the compression threshold). The value must be in the range 0 to 4 and it is the VolumeBoost enumeration (0, +6, +12, +18 and +24 dB). The command uses the
VolumeBoostMsg
structure.
Command::EqType
Sets the equalization type. The value must be in the range 0 to 3 and it is the EqType enumeration (Off, Natural, Normal and Pop). The command uses the
EqTypeMsg
structure. Themix
field of EqTypeMsg must be set to zero.
Command::LfCut
Enables or disables low frequency cut for the speaker. The command uses the
OffOnMsg
structure.
Command::PotEnable
Enables or disables the operation of the volume potentiometer. If disabled, volume can only be changed remotely. The command uses the
OffOnMsg
structure.
Command::MixSelectionEnable
Enables or disables the operation of the front panel button. If disabled, mixes can only be selected remotely. The command uses the
OffOnMsg
structure.
Command::RearButtonsEnable
Enables or disables the operation of the rear panel buttons. If disabled, the rear display and menu can't be activated. The command uses the
OffOnMsg
structure.
Command::RearPasswordEnable
Enables or disables the password prompt in the rear panel display. If enabled, the menu can only be accessed after entering a valid password using the left and right buttons. The command uses the
OffOnMsg
structure.
Command::SetPassword
Allows changing of the rear panel display password. The password value must be in the range 0 to 255. Each bit in the password indicates which button (left or right) should be pressed in order of the bit's position. The command uses the
ControlMsg
structure whereval1
is the password.
Command::DarkMode
Enables or disables low-light mode, where the brightness of the front LEDs is reduced. The command uses the
OffOnMsg
structure.
Command::PowerSave
Sets the power saving delay, or the time it takes for the speaker to enter standby mode after detecting no signal. The delay value must be in the range 0 to 7 and it is the PowerSave enumeration (Never, 10 s, 30 s, 60 s, 5 min, 15 min, 30 min or 60 min). The command uses the
PowerSaveMsg
structure.
Command::MeterMode
Sets the audio meter mode. The value must be in the range 0 to 2 and is the MeterMode enumeration (Off, Bar or Colours). The command uses the MeterModeMsg structure.
Command::DisplayBrightness
Sets the rear display brightness in percent. The value must be in the range 0 to 100. The command uses the
ControlMsg
structure whereval1
is the brightness.
Command::SpeakerGroup
Sets the number of the speaker group this speaker belongs to. The value must be in the range 0 to 10, where 0 means "none". The command uses the
ControlMsg
structure whereval1
is the group number.
Command::PeerMixSelection
Selects the active mix, similar to the MixSelection command. The difference is that if the speaker belongs to a speaker group (with a non-zero ID) after receiving the MixSelection command it forwards a PeerMixSelection command to other speakers in the same group. After receiving the PeerMixSelection command the speaker does not forward the message. The command uses the
MixSelection
structure.
Command::PeerVolume
Sets the speaker volume, similar to the Volume command. The difference is that if the speaker belongs to a speaker group (with a non-zero ID) after receiving the Volume command the speaker forwards a PeerVolume command to other speakers in the same group. After receiving the PeerVolume command the speaker does not forward the message. The command uses the
MixSelection
structure.
Command::PhaseInvert
Enables or disables audio phase inversion of the speaker. The command uses the
OffOnMsg
structure.