| 1 |
/* |
|---|
| 2 |
* Copyright (C) 2005-2008 by Pieter Palmers |
|---|
| 3 |
* |
|---|
| 4 |
* This file is part of FFADO |
|---|
| 5 |
* FFADO = Free Firewire (pro-)audio drivers for linux |
|---|
| 6 |
* |
|---|
| 7 |
* FFADO is based upon FreeBoB. |
|---|
| 8 |
* |
|---|
| 9 |
* This program is free software: you can redistribute it and/or modify |
|---|
| 10 |
* it under the terms of the GNU General Public License as published by |
|---|
| 11 |
* the Free Software Foundation, either version 2 of the License, or |
|---|
| 12 |
* (at your option) version 3 of the License. |
|---|
| 13 |
* |
|---|
| 14 |
* This program is distributed in the hope that it will be useful, |
|---|
| 15 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 16 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 17 |
* GNU General Public License for more details. |
|---|
| 18 |
* |
|---|
| 19 |
* You should have received a copy of the GNU General Public License |
|---|
| 20 |
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|---|
| 21 |
* |
|---|
| 22 |
*/ |
|---|
| 23 |
|
|---|
| 24 |
#include "focusrite_saffire.h" |
|---|
| 25 |
#include "focusrite_cmd.h" |
|---|
| 26 |
|
|---|
| 27 |
namespace BeBoB { |
|---|
| 28 |
namespace Focusrite { |
|---|
| 29 |
|
|---|
| 30 |
SaffireDevice::SaffireDevice( DeviceManager& d, std::auto_ptr<ConfigRom>( configRom )) |
|---|
| 31 |
: FocusriteDevice( d, configRom) |
|---|
| 32 |
, m_MixerContainer( NULL ) |
|---|
| 33 |
{ |
|---|
| 34 |
debugOutput( DEBUG_LEVEL_VERBOSE, "Created BeBoB::Focusrite::SaffireDevice (NodeID %d)\n", |
|---|
| 35 |
getConfigRom().getNodeId() ); |
|---|
| 36 |
|
|---|
| 37 |
if(getConfigRom().getGuid() < 0x130e0100040000LL) { |
|---|
| 38 |
m_isSaffireLE = false; |
|---|
| 39 |
} else { |
|---|
| 40 |
m_isSaffireLE = true; |
|---|
| 41 |
} |
|---|
| 42 |
} |
|---|
| 43 |
|
|---|
| 44 |
bool |
|---|
| 45 |
SaffireDevice::buildMixer() |
|---|
| 46 |
{ |
|---|
| 47 |
bool result=true; |
|---|
| 48 |
debugOutput(DEBUG_LEVEL_VERBOSE, "Building a Focusrite Saffire mixer...\n"); |
|---|
| 49 |
|
|---|
| 50 |
destroyMixer(); |
|---|
| 51 |
|
|---|
| 52 |
// create the mixer object container |
|---|
| 53 |
m_MixerContainer = new Control::Container(this, "Mixer"); |
|---|
| 54 |
|
|---|
| 55 |
if (!m_MixerContainer) { |
|---|
| 56 |
debugError("Could not create mixer container...\n"); |
|---|
| 57 |
return false; |
|---|
| 58 |
} |
|---|
| 59 |
|
|---|
| 60 |
if(m_isSaffireLE) { |
|---|
| 61 |
// create control objects for the saffire LE |
|---|
| 62 |
result &= m_MixerContainer->addElement( |
|---|
| 63 |
new BinaryControl(*this, |
|---|
| 64 |
FR_SAFFIRELE_CMD_ID_SPDIF_TRANSPARENT, 0, |
|---|
| 65 |
"SpdifTransparent", "S/PDIF Transparent", "S/PDIF Transparent")); |
|---|
| 66 |
result &= m_MixerContainer->addElement( |
|---|
| 67 |
new BinaryControl(*this, |
|---|
| 68 |
FR_SAFFIRELE_CMD_ID_MIDITHRU, 0, |
|---|
| 69 |
"MidiThru", "MIDI Thru", "MIDI Thru")); |
|---|
| 70 |
result &= m_MixerContainer->addElement( |
|---|
| 71 |
new BinaryControl(*this, |
|---|
| 72 |
FR_SAFFIRELE_CMD_ID_SAVE_SETTINGS, 0, |
|---|
| 73 |
"SaveSettings", "Save Settings", "Save Settings")); |
|---|
| 74 |
result &= m_MixerContainer->addElement( |
|---|
| 75 |
new BinaryControl(*this, |
|---|
| 76 |
FR_SAFFIRELE_CMD_ID_HIGH_GAIN_LINE3, 0, |
|---|
| 77 |
"HighGainLine3", "High Gain Line-in 3", "High Gain Line-in 3")); |
|---|
| 78 |
result &= m_MixerContainer->addElement( |
|---|
| 79 |
new BinaryControl(*this, |
|---|
| 80 |
FR_SAFFIRELE_CMD_ID_HIGH_GAIN_LINE4, 0, |
|---|
| 81 |
"HighGainLine4", "High Gain Line-in 4", "High Gain Line-in 4")); |
|---|
| 82 |
|
|---|
| 83 |
// output mute controls |
|---|
| 84 |
result &= m_MixerContainer->addElement( |
|---|
| 85 |
new BinaryControl(*this, |
|---|
| 86 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 87 |
"Out12Mute", "Out1/2 Mute", "Output 1/2 Mute")); |
|---|
| 88 |
result &= m_MixerContainer->addElement( |
|---|
| 89 |
new BinaryControl(*this, |
|---|
| 90 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 91 |
"Out34Mute", "Out3/4 Mute", "Output 3/4 Mute")); |
|---|
| 92 |
result &= m_MixerContainer->addElement( |
|---|
| 93 |
new BinaryControl(*this, |
|---|
| 94 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 95 |
"Out56Mute", "Out5/6 Mute", "Output 5/6 Mute")); |
|---|
| 96 |
|
|---|
| 97 |
// output front panel hw volume control |
|---|
| 98 |
result &= m_MixerContainer->addElement( |
|---|
| 99 |
new BinaryControl(*this, |
|---|
| 100 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 101 |
"Out12HwCtrl", "Out1/2 HwCtrl", "Output 1/2 Front Panel Hardware volume control")); |
|---|
| 102 |
result &= m_MixerContainer->addElement( |
|---|
| 103 |
new BinaryControl(*this, |
|---|
| 104 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 105 |
"Out34HwCtrl", "Out3/4 HwCtrl", "Output 3/4 Front Panel Hardware volume control")); |
|---|
| 106 |
result &= m_MixerContainer->addElement( |
|---|
| 107 |
new BinaryControl(*this, |
|---|
| 108 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 109 |
"Out56HwCtrl", "Out5/6 HwCtrl", "Output 5/6 Front Panel Hardware volume control")); |
|---|
| 110 |
|
|---|
| 111 |
// dac ignore |
|---|
| 112 |
result &= m_MixerContainer->addElement( |
|---|
| 113 |
new BinaryControl(*this, |
|---|
| 114 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 115 |
"Out12DacIgnore", "Out1/2 Dac Ignore", "Output 1/2 Dac Ignore")); |
|---|
| 116 |
result &= m_MixerContainer->addElement( |
|---|
| 117 |
new BinaryControl(*this, |
|---|
| 118 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 119 |
"Out34DacIgnore", "Out3/4 Dac Ignore", "Output 3/4 Dac Ignore")); |
|---|
| 120 |
result &= m_MixerContainer->addElement( |
|---|
| 121 |
new BinaryControl(*this, |
|---|
| 122 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 123 |
"Out56DacIgnore", "Out5/6 Dac Ignore", "Output 5/6 Dac Ignore")); |
|---|
| 124 |
|
|---|
| 125 |
// output level controls |
|---|
| 126 |
result &= m_MixerContainer->addElement( |
|---|
| 127 |
new VolumeControlLowRes(*this, |
|---|
| 128 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 129 |
"Out12Level", "Out1/2 Level", "Output 1/2 Level")); |
|---|
| 130 |
result &= m_MixerContainer->addElement( |
|---|
| 131 |
new VolumeControlLowRes(*this, |
|---|
| 132 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 133 |
"Out34Level", "Out3/4 Level", "Output 3/4 Level")); |
|---|
| 134 |
result &= m_MixerContainer->addElement( |
|---|
| 135 |
new VolumeControlLowRes(*this, |
|---|
| 136 |
FR_SAFFIRELE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 137 |
"Out56Level", "Out5/6 Level", "Output 5/6 Level")); |
|---|
| 138 |
|
|---|
| 139 |
} else { |
|---|
| 140 |
// create control objects for the saffire |
|---|
| 141 |
result &= m_MixerContainer->addElement( |
|---|
| 142 |
new BinaryControl(*this, |
|---|
| 143 |
FR_SAFFIRE_CMD_ID_INPUT_SOURCE, 0, |
|---|
| 144 |
"SpdifSwitch", "S/PDIF Switch", "S/PDIF Switch")); |
|---|
| 145 |
result &= m_MixerContainer->addElement( |
|---|
| 146 |
new BinaryControl(*this, |
|---|
| 147 |
FR_SAFFIRE_CMD_ID_MONO_MODE, 0, |
|---|
| 148 |
"MonoMode", "Mono Mode", "Toggle Mono Mode")); |
|---|
| 149 |
result &= m_MixerContainer->addElement( |
|---|
| 150 |
new BinaryControl(*this, |
|---|
| 151 |
FR_SAFFIRE_CMD_ID_DEVICE_MODE, 0, |
|---|
| 152 |
"DeviceMode", "Device Mode", "Toggle Device Mode")); |
|---|
| 153 |
result &= m_MixerContainer->addElement( |
|---|
| 154 |
new BinaryControl(*this, |
|---|
| 155 |
FR_SAFFIRE_CMD_ID_EXTERNAL_LOCK, 0, |
|---|
| 156 |
"ExternalLock", "External Lock", "Has external lock?")); |
|---|
| 157 |
result &= m_MixerContainer->addElement( |
|---|
| 158 |
new BinaryControl(*this, |
|---|
| 159 |
FR_SAFFIRE_CMD_ID_AUDIO_ON_STATUS, 0, |
|---|
| 160 |
"AudioOnStatus", "Audio On Status", "Audio On Status")); |
|---|
| 161 |
result &= m_MixerContainer->addElement( |
|---|
| 162 |
new BinaryControl(*this, |
|---|
| 163 |
FR_SAFFIRE_CMD_ID_SAVE_SETTINGS, 0, |
|---|
| 164 |
"SaveSettings", "Save Settings", "Save Settings")); |
|---|
| 165 |
|
|---|
| 166 |
// output mute controls |
|---|
| 167 |
result &= m_MixerContainer->addElement( |
|---|
| 168 |
new BinaryControl(*this, |
|---|
| 169 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 170 |
"Out12Mute", "Out1/2 Mute", "Output 1/2 Mute")); |
|---|
| 171 |
result &= m_MixerContainer->addElement( |
|---|
| 172 |
new BinaryControl(*this, |
|---|
| 173 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 174 |
"Out34Mute", "Out3/4 Mute", "Output 3/4 Mute")); |
|---|
| 175 |
result &= m_MixerContainer->addElement( |
|---|
| 176 |
new BinaryControl(*this, |
|---|
| 177 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 178 |
"Out56Mute", "Out5/6 Mute", "Output 5/6 Mute")); |
|---|
| 179 |
result &= m_MixerContainer->addElement( |
|---|
| 180 |
new BinaryControl(*this, |
|---|
| 181 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT78, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 182 |
"Out78Mute", "Out7/8 Mute", "Output 7/8 Mute")); |
|---|
| 183 |
result &= m_MixerContainer->addElement( |
|---|
| 184 |
new BinaryControl(*this, |
|---|
| 185 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT910, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE, |
|---|
| 186 |
"Out910Mute", "Out9/10 Mute", "Output 9/10 Mute")); |
|---|
| 187 |
|
|---|
| 188 |
// output front panel hw volume control |
|---|
| 189 |
result &= m_MixerContainer->addElement( |
|---|
| 190 |
new BinaryControl(*this, |
|---|
| 191 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 192 |
"Out12HwCtrl", "Out1/2 HwCtrl", "Output 1/2 Front Panel Hardware volume control")); |
|---|
| 193 |
result &= m_MixerContainer->addElement( |
|---|
| 194 |
new BinaryControl(*this, |
|---|
| 195 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 196 |
"Out34HwCtrl", "Out3/4 HwCtrl", "Output 3/4 Front Panel Hardware volume control")); |
|---|
| 197 |
result &= m_MixerContainer->addElement( |
|---|
| 198 |
new BinaryControl(*this, |
|---|
| 199 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 200 |
"Out56HwCtrl", "Out5/6 HwCtrl", "Output 5/6 Front Panel Hardware volume control")); |
|---|
| 201 |
result &= m_MixerContainer->addElement( |
|---|
| 202 |
new BinaryControl(*this, |
|---|
| 203 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT78, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_HWCTRL, |
|---|
| 204 |
"Out78HwCtrl", "Out7/8 HwCtrl", "Output 7/8 Front Panel Hardware volume control")); |
|---|
| 205 |
|
|---|
| 206 |
// output level dim |
|---|
| 207 |
result &= m_MixerContainer->addElement( |
|---|
| 208 |
new BinaryControl(*this, |
|---|
| 209 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DIM, |
|---|
| 210 |
"Out12Dim", "Out1/2 Dim", "Output 1/2 Level Dim")); |
|---|
| 211 |
|
|---|
| 212 |
// dac ignore |
|---|
| 213 |
result &= m_MixerContainer->addElement( |
|---|
| 214 |
new BinaryControl(*this, |
|---|
| 215 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 216 |
"Out12DacIgnore", "Out1/2 Dac Ignore", "Output 1/2 Dac Ignore")); |
|---|
| 217 |
result &= m_MixerContainer->addElement( |
|---|
| 218 |
new BinaryControl(*this, |
|---|
| 219 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 220 |
"Out34DacIgnore", "Out3/4 Dac Ignore", "Output 3/4 Dac Ignore")); |
|---|
| 221 |
result &= m_MixerContainer->addElement( |
|---|
| 222 |
new BinaryControl(*this, |
|---|
| 223 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 224 |
"Out56DacIgnore", "Out5/6 Dac Ignore", "Output 5/6 Dac Ignore")); |
|---|
| 225 |
result &= m_MixerContainer->addElement( |
|---|
| 226 |
new BinaryControl(*this, |
|---|
| 227 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT78, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DACIGNORE, |
|---|
| 228 |
"Out78DacIgnore", "Out7/8 Dac Ignore", "Output 7/8 Dac Ignore")); |
|---|
| 229 |
|
|---|
| 230 |
// output level controls |
|---|
| 231 |
result &= m_MixerContainer->addElement( |
|---|
| 232 |
new VolumeControlLowRes(*this, |
|---|
| 233 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT12, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 234 |
"Out12Level", "Out1/2 Level", "Output 1/2 Level")); |
|---|
| 235 |
result &= m_MixerContainer->addElement( |
|---|
| 236 |
new VolumeControlLowRes(*this, |
|---|
| 237 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT34, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 238 |
"Out34Level", "Out3/4 Level", "Output 3/4 Level")); |
|---|
| 239 |
result &= m_MixerContainer->addElement( |
|---|
| 240 |
new VolumeControlLowRes(*this, |
|---|
| 241 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT56, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 242 |
"Out56Level", "Out5/6 Level", "Output 5/6 Level")); |
|---|
| 243 |
result &= m_MixerContainer->addElement( |
|---|
| 244 |
new VolumeControlLowRes(*this, |
|---|
| 245 |
FR_SAFFIRE_CMD_ID_BITFIELD_OUT78, FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DAC, |
|---|
| 246 |
"Out78Level", "Out7/8 Level", "Output 7/8 Level")); |
|---|
| 247 |
|
|---|
| 248 |
result &= m_MixerContainer->addElement( |
|---|
| 249 |
new DialPositionControl(*this, |
|---|
| 250 |
FR_SAFFIRE_CMD_ID_MONITOR_DIAL, 0, |
|---|
| 251 |
"MonitorDial", "Monitor Dial", "Monitor Dial Value")); |
|---|
| 252 |
|
|---|
| 253 |
// metering |
|---|
| 254 |
result &= m_MixerContainer->addElement( |
|---|
| 255 |
new MeteringControl(*this, |
|---|
| 256 |
FR_SAFFIRE_CMD_ID_METERING_IN1, |
|---|
| 257 |
"MeteringIn1", "Metering Input 1", "Metering on Input 1")); |
|---|
| 258 |
result &= m_MixerContainer->addElement( |
|---|
| 259 |
new MeteringControl(*this, |
|---|
| 260 |
FR_SAFFIRE_CMD_ID_METERING_IN2, |
|---|
| 261 |
"MeteringIn2", "Metering Input 2", "Metering on Input 2")); |
|---|
| 262 |
result &= m_MixerContainer->addElement( |
|---|
| 263 |
new MeteringControl(*this, |
|---|
| 264 |
FR_SAFFIRE_CMD_ID_METERING_IN3, |
|---|
| 265 |
"MeteringIn3", "Metering Input 3", "Metering on Input 3")); |
|---|
| 266 |
result &= m_MixerContainer->addElement( |
|---|
| 267 |
new MeteringControl(*this, |
|---|
| 268 |
FR_SAFFIRE_CMD_ID_METERING_IN4, |
|---|
| 269 |
"MeteringIn4", "Metering Input 4", "Metering on Input 4")); |
|---|
| 270 |
|
|---|
| 271 |
result &= m_MixerContainer->addElement( |
|---|
| 272 |
new MeteringControl(*this, |
|---|
| 273 |
FR_SAFFIRE_CMD_ID_METERING_PC1, |
|---|
| 274 |
"MeteringPc1", "Metering PC 1", "Metering on PC Channel 1")); |
|---|
| 275 |
result &= m_MixerContainer->addElement( |
|---|
| 276 |
new MeteringControl(*this, |
|---|
| 277 |
FR_SAFFIRE_CMD_ID_METERING_PC2, |
|---|
| 278 |
"MeteringPc2", "Metering PC 2", "Metering on PC Channel 2")); |
|---|
| 279 |
result &= m_MixerContainer->addElement( |
|---|
| 280 |
new MeteringControl(*this, |
|---|
| 281 |
FR_SAFFIRE_CMD_ID_METERING_PC3, |
|---|
| 282 |
"MeteringPc3", "Metering PC 3", "Metering on PC Channel 3")); |
|---|
| 283 |
result &= m_MixerContainer->addElement( |
|---|
| 284 |
new MeteringControl(*this, |
|---|
| 285 |
FR_SAFFIRE_CMD_ID_METERING_PC4, |
|---|
| 286 |
"MeteringPc4", "Metering PC 4", "Metering on PC Channel 4")); |
|---|
| 287 |
result &= m_MixerContainer->addElement( |
|---|
| 288 |
new MeteringControl(*this, |
|---|
| 289 |
FR_SAFFIRE_CMD_ID_METERING_PC5, |
|---|
| 290 |
"MeteringPc5", "Metering PC 5", "Metering on PC Channel 5")); |
|---|
| 291 |
result &= m_MixerContainer->addElement( |
|---|
| 292 |
new MeteringControl(*this, |
|---|
| 293 |
FR_SAFFIRE_CMD_ID_METERING_PC6, |
|---|
| 294 |
"MeteringPc6", "Metering PC 6", "Metering on PC Channel 6")); |
|---|
| 295 |
result &= m_MixerContainer->addElement( |
|---|
| 296 |
new MeteringControl(*this, |
|---|
| 297 |
FR_SAFFIRE_CMD_ID_METERING_PC7, |
|---|
| 298 |
"MeteringPc7", "Metering PC 7", "Metering on PC Channel 7")); |
|---|
| 299 |
result &= m_MixerContainer->addElement( |
|---|
| 300 |
new MeteringControl(*this, |
|---|
| 301 |
FR_SAFFIRE_CMD_ID_METERING_PC8, |
|---|
| 302 |
"MeteringPc8", "Metering PC 8", "Metering on PC Channel 8")); |
|---|
| 303 |
result &= m_MixerContainer->addElement( |
|---|
| 304 |
new MeteringControl(*this, |
|---|
| 305 |
FR_SAFFIRE_CMD_ID_METERING_PC9, |
|---|
| 306 |
"MeteringPc9", "Metering PC 9", "Metering on PC Channel 9")); |
|---|
| 307 |
result &= m_MixerContainer->addElement( |
|---|
| 308 |
new MeteringControl(*this, |
|---|
| 309 |
FR_SAFFIRE_CMD_ID_METERING_PC10, |
|---|
| 310 |
"MeteringPc10", "Metering PC 10", "Metering on PC Channel 10")); |
|---|
| 311 |
|
|---|
| 312 |
} |
|---|
| 313 |
|
|---|
| 314 |
// matrix mix controls |
|---|
| 315 |
if(m_isSaffireLE) { |
|---|
| 316 |
result &= m_MixerContainer->addElement( |
|---|
| 317 |
new SaffireMatrixMixer(*this, SaffireMatrixMixer::eMMT_LEMix48, "LEMix48")); |
|---|
| 318 |
|
|---|
| 319 |
result &= m_MixerContainer->addElement( |
|---|
| 320 |
new SaffireMatrixMixer(*this, SaffireMatrixMixer::eMMT_LEMix96, "LEMix96")); |
|---|
| 321 |
|
|---|
| 322 |
result &= m_MixerContainer->addElement( |
|---|
| 323 |
new BinaryControl(*this, |
|---|
| 324 |
FR_SAFFIRELE_CMD_ID_SWAP_OUT4_OUT1_48K, 0, |
|---|
| 325 |
"Swap41_48", "Swap41_48", "Swap41_48")); |
|---|
| 326 |
result &= m_MixerContainer->addElement( |
|---|
| 327 |
new BinaryControl(*this, |
|---|
| 328 |
FR_SAFFIRELE_CMD_ID_SWAP_OUT4_OUT1_96K, 0, |
|---|
| 329 |
"Swap41_96", "Swap41_96", "Swap41_96")); |
|---|
| 330 |
} else { |
|---|
| 331 |
result &= m_MixerContainer->addElement( |
|---|
| 332 |
new SaffireMatrixMixer(*this, SaffireMatrixMixer::eMMT_SaffireStereoMatrixMix, "MatrixMixerStereo")); |
|---|
| 333 |
result &= m_MixerContainer->addElement( |
|---|
| 334 |
new SaffireMatrixMixer(*this, SaffireMatrixMixer::eMMT_SaffireMonoMatrixMix, "MatrixMixerMono")); |
|---|
| 335 |
} |
|---|
| 336 |
|
|---|
| 337 |
if (!result) { |
|---|
| 338 |
debugWarning("One or more control elements could not be created."); |
|---|
| 339 |
// clean up those that were created |
|---|
| 340 |
destroyMixer(); |
|---|
| 341 |
return false; |
|---|
| 342 |
} |
|---|
| 343 |
|
|---|
| 344 |
if (!addElement(m_MixerContainer)) { |
|---|
| 345 |
debugWarning("Could not register mixer to device\n"); |
|---|
| 346 |
// clean up |
|---|
| 347 |
destroyMixer(); |
|---|
| 348 |
return false; |
|---|
| 349 |
} |
|---|
| 350 |
|
|---|
| 351 |
// add a direct register access element |
|---|
| 352 |
if (!addElement(new RegisterControl(*this, "Register", "Register Access", "Direct register access"))) { |
|---|
| 353 |
debugWarning("Could not create register control element."); |
|---|
| 354 |
// clean up those that were created |
|---|
| 355 |
destroyMixer(); |
|---|
| 356 |
return false; |
|---|
| 357 |
} |
|---|
| 358 |
|
|---|
| 359 |
return true; |
|---|
| 360 |
} |
|---|
| 361 |
|
|---|
| 362 |
bool |
|---|
| 363 |
SaffireDevice::destroyMixer() |
|---|
| 364 |
{ |
|---|
| 365 |
debugOutput(DEBUG_LEVEL_VERBOSE, "destroy mixer...\n"); |
|---|
| 366 |
|
|---|
| 367 |
if (m_MixerContainer == NULL) { |
|---|
| 368 |
debugOutput(DEBUG_LEVEL_VERBOSE, "no mixer to destroy...\n"); |
|---|
| 369 |
return true; |
|---|
| 370 |
} |
|---|
| 371 |
|
|---|
| 372 |
if (!deleteElement(m_MixerContainer)) { |
|---|
| 373 |
debugError("Mixer present but not registered to the avdevice\n"); |
|---|
| 374 |
return false; |
|---|
| 375 |
} |
|---|
| 376 |
|
|---|
| 377 |
// remove and delete (as in free) child control elements |
|---|
| 378 |
m_MixerContainer->clearElements(true); |
|---|
| 379 |
delete m_MixerContainer; |
|---|
| 380 |
return true; |
|---|
| 381 |
} |
|---|
| 382 |
|
|---|
| 383 |
std::vector<int> |
|---|
| 384 |
SaffireDevice::getSupportedSamplingFrequencies() |
|---|
| 385 |
{ |
|---|
| 386 |
std::vector<int> frequencies; |
|---|
| 387 |
frequencies.push_back(44100); |
|---|
| 388 |
frequencies.push_back(48000); |
|---|
| 389 |
frequencies.push_back(88200); |
|---|
| 390 |
frequencies.push_back(96000); |
|---|
| 391 |
return frequencies; |
|---|
| 392 |
} |
|---|
| 393 |
|
|---|
| 394 |
void |
|---|
| 395 |
SaffireDevice::showDevice() |
|---|
| 396 |
{ |
|---|
| 397 |
if(m_isSaffireLE) { |
|---|
| 398 |
debugOutput(DEBUG_LEVEL_NORMAL, "This is a BeBoB::Focusrite::SaffireDevice (Saffire LE)\n"); |
|---|
| 399 |
} else { |
|---|
| 400 |
debugOutput(DEBUG_LEVEL_NORMAL, "This is a BeBoB::Focusrite::SaffireDevice (Saffire)\n"); |
|---|
| 401 |
} |
|---|
| 402 |
FocusriteDevice::showDevice(); |
|---|
| 403 |
} |
|---|
| 404 |
|
|---|
| 405 |
void |
|---|
| 406 |
SaffireDevice::setVerboseLevel(int l) |
|---|
| 407 |
{ |
|---|
| 408 |
debugOutput( DEBUG_LEVEL_VERBOSE, "Setting verbose level to %d...\n", l ); |
|---|
| 409 |
|
|---|
| 410 |
FocusriteDevice::setVerboseLevel(l); |
|---|
| 411 |
} |
|---|
| 412 |
|
|---|
| 413 |
// Saffire pro matrix mixer element |
|---|
| 414 |
|
|---|
| 415 |
SaffireMatrixMixer::SaffireMatrixMixer(SaffireDevice& p, |
|---|
| 416 |
enum eMatrixMixerType type) |
|---|
| 417 |
: FocusriteMatrixMixer(p, "MatrixMixer") |
|---|
| 418 |
, m_type(type) |
|---|
| 419 |
{ |
|---|
| 420 |
init(); |
|---|
| 421 |
} |
|---|
| 422 |
|
|---|
| 423 |
SaffireMatrixMixer::SaffireMatrixMixer(SaffireDevice& p, |
|---|
| 424 |
enum eMatrixMixerType type, std::string n) |
|---|
| 425 |
: FocusriteMatrixMixer(p, n) |
|---|
| 426 |
, m_type(type) |
|---|
| 427 |
{ |
|---|
| 428 |
init(); |
|---|
| 429 |
} |
|---|
| 430 |
|
|---|
| 431 |
void SaffireMatrixMixer::init() |
|---|
| 432 |
{ |
|---|
| 433 |
if (m_type==eMMT_SaffireStereoMatrixMix) { |
|---|
| 434 |
m_RowInfo.clear(); |
|---|
| 435 |
addSignalInfo(m_RowInfo, "PC910", "PC 9/10", "PC Channel 9/10"); |
|---|
| 436 |
addSignalInfo(m_RowInfo, "PC12", "PC 1/2", "PC Channel 1/2"); |
|---|
| 437 |
addSignalInfo(m_RowInfo, "PC34", "PC 3/4", "PC Channel 3/4"); |
|---|
| 438 |
addSignalInfo(m_RowInfo, "PC56", "PC 5/6", "PC Channel 5/6"); |
|---|
| 439 |
addSignalInfo(m_RowInfo, "PC78", "PC 7/8", "PC Channel 7/8"); |
|---|
| 440 |
addSignalInfo(m_RowInfo, "IN12", "Input 1/2", "Hardware Inputs 1/2"); |
|---|
| 441 |
addSignalInfo(m_RowInfo, "IN34", "Input 3/4", "Hardware Inputs 3/4 (dry / S/PDIF)"); |
|---|
| 442 |
addSignalInfo(m_RowInfo, "FX", "Effect return", "Effect return"); |
|---|
| 443 |
|
|---|
| 444 |
m_ColInfo.clear(); |
|---|
| 445 |
addSignalInfo(m_ColInfo, "OUT910", "OUT 9/10", "Output 9/10"); |
|---|
| 446 |
addSignalInfo(m_ColInfo, "OUT12", "OUT 1/2", "Output 1/2"); |
|---|
| 447 |
addSignalInfo(m_ColInfo, "OUT34", "OUT 3/4", "Output 3/4"); |
|---|
| 448 |
addSignalInfo(m_ColInfo, "OUT56", "OUT 5/6", "Output 5/6 (HP1)"); |
|---|
| 449 |
addSignalInfo(m_ColInfo, "OUT78", "OUT 7/8", "Output 7/8 (HP2)"); |
|---|
| 450 |
|
|---|
| 451 |
// init the cell matrix |
|---|
| 452 |
#define FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_COLS 5 |
|---|
| 453 |
#define FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_ROWS 8 |
|---|
| 454 |
#define FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_OFFSET 0 |
|---|
| 455 |
|
|---|
| 456 |
std::vector<struct sCellInfo> tmp_cols( FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_COLS ); |
|---|
| 457 |
std::vector< std::vector<struct sCellInfo> > tmp_all(FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_ROWS, tmp_cols); |
|---|
| 458 |
m_CellInfo = tmp_all; |
|---|
| 459 |
|
|---|
| 460 |
struct sCellInfo c; |
|---|
| 461 |
c.row=-1; |
|---|
| 462 |
c.col=-1; |
|---|
| 463 |
c.valid=false; |
|---|
| 464 |
c.address=0; |
|---|
| 465 |
|
|---|
| 466 |
// all cells are valid |
|---|
| 467 |
for (int i=0; i < FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_ROWS; i++) { |
|---|
| 468 |
for (int j=0; j < FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_COLS; j++) { |
|---|
| 469 |
c.row = i; |
|---|
| 470 |
c.col = j; |
|---|
| 471 |
c.valid = true; |
|---|
| 472 |
c.address = FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_OFFSET + c.row * FOCUSRITE_SAFFIRE_STEREO_MATRIXMIX_NB_COLS + c.col; |
|---|
| 473 |
m_CellInfo.at(i).at(j) = c; |
|---|
| 474 |
} |
|---|
| 475 |
} |
|---|
| 476 |
} else if (m_type==eMMT_SaffireMonoMatrixMix) { |
|---|
| 477 |
m_RowInfo.clear(); |
|---|
| 478 |
addSignalInfo(m_RowInfo, "IN1", "Input 1", "Hardware Inputs 1"); |
|---|
| 479 |
addSignalInfo(m_RowInfo, "IN3", "Input 3", "Hardware Inputs 3"); |
|---|
| 480 |
addSignalInfo(m_RowInfo, "FX1", "Effect return 1", "Effect return 1"); |
|---|
| 481 |
addSignalInfo(m_RowInfo, "IN2", "Input 2", "Hardware Inputs 2"); |
|---|
| 482 |
addSignalInfo(m_RowInfo, "IN4", "Input 4", "Hardware Inputs 4"); |
|---|
| 483 |
addSignalInfo(m_RowInfo, "FX2", "Effect return 2", "Effect return 2"); |
|---|
| 484 |
addSignalInfo(m_RowInfo, "PC910", "PC 9/10", "PC Channel 9/10"); |
|---|
| 485 |
addSignalInfo(m_RowInfo, "PC12", "PC 1/2", "PC Channel 1/2"); |
|---|
| 486 |
addSignalInfo(m_RowInfo, "PC34", "PC 3/4", "PC Channel 3/4"); |
|---|
| 487 |
addSignalInfo(m_RowInfo, "PC56", "PC 5/6", "PC Channel 5/6"); |
|---|
| 488 |
addSignalInfo(m_RowInfo, "PC78", "PC 7/8", "PC Channel 7/8"); |
|---|
| 489 |
|
|---|
| 490 |
m_ColInfo.clear(); |
|---|
| 491 |
addSignalInfo(m_ColInfo, "OUT910", "OUT 9/10", "Output 9/10"); |
|---|
| 492 |
addSignalInfo(m_ColInfo, "OUT12", "OUT 1/2", "Output 1/2"); |
|---|
| 493 |
addSignalInfo(m_ColInfo, "OUT34", "OUT 3/4", "Output 3/4"); |
|---|
| 494 |
addSignalInfo(m_ColInfo, "OUT56", "OUT 5/6", "Output 5/6 (HP1)"); |
|---|
| 495 |
addSignalInfo(m_ColInfo, "OUT78", "OUT 7/8", "Output 7/8 (HP2)"); |
|---|
| 496 |
|
|---|
| 497 |
// init the cell matrix |
|---|
| 498 |
#define FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_COLS 5 |
|---|
| 499 |
#define FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_ROWS 11 |
|---|
| 500 |
#define FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_OFFSET 0 |
|---|
| 501 |
|
|---|
| 502 |
std::vector<struct sCellInfo> tmp_cols( FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_COLS ); |
|---|
| 503 |
std::vector< std::vector<struct sCellInfo> > tmp_all(FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_ROWS, tmp_cols); |
|---|
| 504 |
m_CellInfo = tmp_all; |
|---|
| 505 |
|
|---|
| 506 |
struct sCellInfo c; |
|---|
| 507 |
c.row=-1; |
|---|
| 508 |
c.col=-1; |
|---|
| 509 |
c.valid=false; |
|---|
| 510 |
c.address=0; |
|---|
| 511 |
|
|---|
| 512 |
// all cells are valid |
|---|
| 513 |
for (int i=0; i < FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_ROWS; i++) { |
|---|
| 514 |
for (int j=0; j < FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_COLS; j++) { |
|---|
| 515 |
c.row = i; |
|---|
| 516 |
c.col = j; |
|---|
| 517 |
c.valid = true; |
|---|
| 518 |
c.address = FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_OFFSET + c.row * FOCUSRITE_SAFFIRE_MONO_MATRIXMIX_NB_COLS + c.col; |
|---|
| 519 |
m_CellInfo.at(i).at(j) = c; |
|---|
| 520 |
} |
|---|
| 521 |
} |
|---|
| 522 |
} else if (m_type == eMMT_LEMix48) { |
|---|
| 523 |
addSignalInfo(m_RowInfo, "IN1", "Input 1", "Analog Input 1"); |
|---|
| 524 |
addSignalInfo(m_RowInfo, "IN2", "Input 2", "Analog Input 2"); |
|---|
| 525 |
addSignalInfo(m_RowInfo, "IN3", "Input 3", "Analog Input 3"); |
|---|
| 526 |
addSignalInfo(m_RowInfo, "IN4", "Input 4", "Analog Input 4"); |
|---|
| 527 |
addSignalInfo(m_RowInfo, "SPDIFL", "SPDIF L", "S/PDIF Left Input"); |
|---|
| 528 |
addSignalInfo(m_RowInfo, "SPDIFR", "SPDIF R", "S/PDIF Right Input"); |
|---|
| 529 |
|
|---|
| 530 |
addSignalInfo(m_RowInfo, "PC1", "PC 1", "PC Channel 1"); |
|---|
| 531 |
addSignalInfo(m_RowInfo, "PC2", "PC 2", "PC Channel 2"); |
|---|
| 532 |
addSignalInfo(m_RowInfo, "PC3", "PC 3", "PC Channel 3"); |
|---|
| 533 |
addSignalInfo(m_RowInfo, "PC4", "PC 4", "PC Channel 4"); |
|---|
| 534 |
addSignalInfo(m_RowInfo, "PC5", "PC 5", "PC Channel 5"); |
|---|
| 535 |
addSignalInfo(m_RowInfo, "PC6", "PC 6", "PC Channel 6"); |
|---|
| 536 |
addSignalInfo(m_RowInfo, "PC7", "PC 7", "PC Channel 7"); |
|---|
| 537 |
addSignalInfo(m_RowInfo, "PC8", "PC 8", "PC Channel 8"); |
|---|
| 538 |
|
|---|
| 539 |
addSignalInfo(m_ColInfo, "OUT1", "OUT 1", "Output 1"); |
|---|
| 540 |
addSignalInfo(m_ColInfo, "OUT2", "OUT 2", "Output 2"); |
|---|
| 541 |
addSignalInfo(m_ColInfo, "OUT3", "OUT 3", "Output 3"); |
|---|
| 542 |
addSignalInfo(m_ColInfo, "OUT4", "OUT 4", "Output 4"); |
|---|
| 543 |
|
|---|
| 544 |
// init the cell matrix |
|---|
| 545 |
#define FOCUSRITE_SAFFIRELE_48KMIX_NB_COLS 4 |
|---|
| 546 |
#define FOCUSRITE_SAFFIRELE_48KMIX_NB_ROWS 14 |
|---|
| 547 |
|
|---|
| 548 |
std::vector<struct sCellInfo> tmp_cols( FOCUSRITE_SAFFIRELE_48KMIX_NB_COLS ); |
|---|
| 549 |
std::vector< std::vector<struct sCellInfo> > tmp_all(FOCUSRITE_SAFFIRELE_48KMIX_NB_ROWS,tmp_cols); |
|---|
| 550 |
m_CellInfo = tmp_all; |
|---|
| 551 |
|
|---|
| 552 |
struct sCellInfo c; |
|---|
| 553 |
c.row=-1; |
|---|
| 554 |
c.col=-1; |
|---|
| 555 |
c.valid=false; |
|---|
| 556 |
c.address=0; |
|---|
| 557 |
|
|---|
| 558 |
for (int i=0;i<FOCUSRITE_SAFFIRELE_48KMIX_NB_ROWS;i++) { |
|---|
| 559 |
for (int j=0;j<FOCUSRITE_SAFFIRELE_48KMIX_NB_COLS;j++) { |
|---|
| 560 |
m_CellInfo.at(i).at(j) = c; |
|---|
| 561 |
} |
|---|
| 562 |
} |
|---|
| 563 |
|
|---|
| 564 |
// now set the cells that are valid |
|---|
| 565 |
setCellInfo(0,0,FR_SAFFIRELE_CMD_ID_IN1_TO_OUT1, true); |
|---|
| 566 |
setCellInfo(0,1,FR_SAFFIRELE_CMD_ID_IN1_TO_OUT2, true); |
|---|
| 567 |
setCellInfo(0,2,FR_SAFFIRELE_CMD_ID_IN1_TO_OUT3, true); |
|---|
| 568 |
setCellInfo(0,3,FR_SAFFIRELE_CMD_ID_IN1_TO_OUT4, true); |
|---|
| 569 |
setCellInfo(1,0,FR_SAFFIRELE_CMD_ID_IN2_TO_OUT1, true); |
|---|
| 570 |
setCellInfo(1,1,FR_SAFFIRELE_CMD_ID_IN2_TO_OUT2, true); |
|---|
| 571 |
setCellInfo(1,2,FR_SAFFIRELE_CMD_ID_IN2_TO_OUT3, true); |
|---|
| 572 |
setCellInfo(1,3,FR_SAFFIRELE_CMD_ID_IN2_TO_OUT4, true); |
|---|
| 573 |
setCellInfo(2,0,FR_SAFFIRELE_CMD_ID_IN3_TO_OUT1, true); |
|---|
| 574 |
setCellInfo(2,1,FR_SAFFIRELE_CMD_ID_IN3_TO_OUT2, true); |
|---|
| 575 |
setCellInfo(2,2,FR_SAFFIRELE_CMD_ID_IN3_TO_OUT3, true); |
|---|
| 576 |
setCellInfo(2,3,FR_SAFFIRELE_CMD_ID_IN3_TO_OUT4, true); |
|---|
| 577 |
setCellInfo(3,0,FR_SAFFIRELE_CMD_ID_IN4_TO_OUT1, true); |
|---|
| 578 |
setCellInfo(3,1,FR_SAFFIRELE_CMD_ID_IN4_TO_OUT2, true); |
|---|
| 579 |
setCellInfo(3,2,FR_SAFFIRELE_CMD_ID_IN4_TO_OUT3, true); |
|---|
| 580 |
setCellInfo(3,3,FR_SAFFIRELE_CMD_ID_IN4_TO_OUT4, true); |
|---|
| 581 |
|
|---|
| 582 |
setCellInfo(4,0,FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT1, true); |
|---|
| 583 |
setCellInfo(4,1,FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT2, true); |
|---|
| 584 |
setCellInfo(4,2,FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT3, true); |
|---|
| 585 |
setCellInfo(4,3,FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT4, true); |
|---|
| 586 |
setCellInfo(5,0,FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT1, true); |
|---|
| 587 |
setCellInfo(5,1,FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT2, true); |
|---|
| 588 |
setCellInfo(5,2,FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT3, true); |
|---|
| 589 |
setCellInfo(5,3,FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT4, true); |
|---|
| 590 |
setCellInfo(6,0,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT1, true); |
|---|
| 591 |
setCellInfo(6,1,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT2, true); |
|---|
| 592 |
setCellInfo(6,2,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT3, true); |
|---|
| 593 |
setCellInfo(6,3,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT4, true); |
|---|
| 594 |
setCellInfo(7,0,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT1, true); |
|---|
| 595 |
setCellInfo(7,1,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT2, true); |
|---|
| 596 |
setCellInfo(7,2,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT3, true); |
|---|
| 597 |
setCellInfo(7,3,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT4, true); |
|---|
| 598 |
setCellInfo(8,0,FR_SAFFIRELE_CMD_ID_PC3_TO_OUT1, true); |
|---|
| 599 |
setCellInfo(8,1,FR_SAFFIRELE_CMD_ID_PC3_TO_OUT2, true); |
|---|
| 600 |
setCellInfo(8,2,FR_SAFFIRELE_CMD_ID_PC3_TO_OUT3, true); |
|---|
| 601 |
setCellInfo(8,3,FR_SAFFIRELE_CMD_ID_PC3_TO_OUT4, true); |
|---|
| 602 |
setCellInfo(9,0,FR_SAFFIRELE_CMD_ID_PC4_TO_OUT1, true); |
|---|
| 603 |
setCellInfo(9,1,FR_SAFFIRELE_CMD_ID_PC4_TO_OUT2, true); |
|---|
| 604 |
setCellInfo(9,2,FR_SAFFIRELE_CMD_ID_PC4_TO_OUT3, true); |
|---|
| 605 |
setCellInfo(9,3,FR_SAFFIRELE_CMD_ID_PC4_TO_OUT4, true); |
|---|
| 606 |
setCellInfo(10,0,FR_SAFFIRELE_CMD_ID_PC5_TO_OUT1, true); |
|---|
| 607 |
setCellInfo(10,1,FR_SAFFIRELE_CMD_ID_PC5_TO_OUT2, true); |
|---|
| 608 |
setCellInfo(10,2,FR_SAFFIRELE_CMD_ID_PC5_TO_OUT3, true); |
|---|
| 609 |
setCellInfo(10,3,FR_SAFFIRELE_CMD_ID_PC5_TO_OUT4, true); |
|---|
| 610 |
setCellInfo(11,0,FR_SAFFIRELE_CMD_ID_PC6_TO_OUT1, true); |
|---|
| 611 |
setCellInfo(11,1,FR_SAFFIRELE_CMD_ID_PC6_TO_OUT2, true); |
|---|
| 612 |
setCellInfo(11,2,FR_SAFFIRELE_CMD_ID_PC6_TO_OUT3, true); |
|---|
| 613 |
setCellInfo(11,3,FR_SAFFIRELE_CMD_ID_PC6_TO_OUT4, true); |
|---|
| 614 |
setCellInfo(12,0,FR_SAFFIRELE_CMD_ID_PC7_TO_OUT1, true); |
|---|
| 615 |
setCellInfo(12,1,FR_SAFFIRELE_CMD_ID_PC7_TO_OUT2, true); |
|---|
| 616 |
setCellInfo(12,2,FR_SAFFIRELE_CMD_ID_PC7_TO_OUT3, true); |
|---|
| 617 |
setCellInfo(12,3,FR_SAFFIRELE_CMD_ID_PC7_TO_OUT4, true); |
|---|
| 618 |
setCellInfo(13,0,FR_SAFFIRELE_CMD_ID_PC8_TO_OUT1, true); |
|---|
| 619 |
setCellInfo(13,1,FR_SAFFIRELE_CMD_ID_PC8_TO_OUT2, true); |
|---|
| 620 |
setCellInfo(13,2,FR_SAFFIRELE_CMD_ID_PC8_TO_OUT3, true); |
|---|
| 621 |
setCellInfo(13,3,FR_SAFFIRELE_CMD_ID_PC8_TO_OUT4, true); |
|---|
| 622 |
|
|---|
| 623 |
} else if (m_type == eMMT_LEMix96) { |
|---|
| 624 |
addSignalInfo(m_RowInfo, "IN1", "Input 1", "Analog Input 1"); |
|---|
| 625 |
addSignalInfo(m_RowInfo, "IN2", "Input 2", "Analog Input 2"); |
|---|
| 626 |
addSignalInfo(m_RowInfo, "IN3", "Input 3", "Analog Input 3"); |
|---|
| 627 |
addSignalInfo(m_RowInfo, "IN4", "Input 4", "Analog Input 4"); |
|---|
| 628 |
addSignalInfo(m_RowInfo, "SPDIFL", "SPDIF L", "S/PDIF Left Input"); |
|---|
| 629 |
addSignalInfo(m_RowInfo, "SPDIFR", "SPDIF R", "S/PDIF Right Input"); |
|---|
| 630 |
|
|---|
| 631 |
addSignalInfo(m_RowInfo, "PC1", "PC 1", "PC Channel 1"); |
|---|
| 632 |
addSignalInfo(m_RowInfo, "PC2", "PC 2", "PC Channel 2"); |
|---|
| 633 |
addSignalInfo(m_RowInfo, "PC3", "PC 3", "PC Channel 3"); |
|---|
| 634 |
addSignalInfo(m_RowInfo, "PC4", "PC 4", "PC Channel 4"); |
|---|
| 635 |
addSignalInfo(m_RowInfo, "PC5", "PC 5", "PC Channel 5"); |
|---|
| 636 |
addSignalInfo(m_RowInfo, "PC6", "PC 6", "PC Channel 6"); |
|---|
| 637 |
addSignalInfo(m_RowInfo, "PC7", "PC 7", "PC Channel 7"); |
|---|
| 638 |
addSignalInfo(m_RowInfo, "PC8", "PC 8", "PC Channel 8"); |
|---|
| 639 |
addSignalInfo(m_RowInfo, "RECMIXRETURN", "RECMIXRETURN", "Record mix (mono) return"); |
|---|
| 640 |
|
|---|
| 641 |
addSignalInfo(m_ColInfo, "OUT1", "OUT 1", "Output 1"); |
|---|
| 642 |
addSignalInfo(m_ColInfo, "OUT2", "OUT 2", "Output 2"); |
|---|
| 643 |
addSignalInfo(m_ColInfo, "OUT3", "OUT 3", "Output 3"); |
|---|
| 644 |
addSignalInfo(m_ColInfo, "OUT4", "OUT 4", "Output 4"); |
|---|
| 645 |
addSignalInfo(m_ColInfo, "RECMIX", "RECMIX", "Record mix (mono)"); |
|---|
| 646 |
|
|---|
| 647 |
// init the cell matrix |
|---|
| 648 |
#define FOCUSRITE_SAFFIRELE_96KMIX_NB_COLS 5 |
|---|
| 649 |
#define FOCUSRITE_SAFFIRELE_96KMIX_NB_ROWS 15 |
|---|
| 650 |
|
|---|
| 651 |
std::vector<struct sCellInfo> tmp_cols( FOCUSRITE_SAFFIRELE_96KMIX_NB_COLS ); |
|---|
| 652 |
std::vector< std::vector<struct sCellInfo> > tmp_all(FOCUSRITE_SAFFIRELE_96KMIX_NB_ROWS,tmp_cols); |
|---|
| 653 |
m_CellInfo = tmp_all; |
|---|
| 654 |
|
|---|
| 655 |
struct sCellInfo c; |
|---|
| 656 |
c.row=-1; |
|---|
| 657 |
c.col=-1; |
|---|
| 658 |
c.valid=false; |
|---|
| 659 |
c.address=0; |
|---|
| 660 |
|
|---|
| 661 |
for (int i=0;i<FOCUSRITE_SAFFIRELE_96KMIX_NB_ROWS;i++) { |
|---|
| 662 |
for (int j=0;j<FOCUSRITE_SAFFIRELE_96KMIX_NB_COLS;j++) { |
|---|
| 663 |
m_CellInfo.at(i).at(j) = c; |
|---|
| 664 |
} |
|---|
| 665 |
} |
|---|
| 666 |
|
|---|
| 667 |
// now set the cells that are valid |
|---|
| 668 |
setCellInfo(0,4,FR_SAFFIRELE_CMD_ID_IN1_TO_RECMIX_96K, true); |
|---|
| 669 |
setCellInfo(1,4,FR_SAFFIRELE_CMD_ID_IN2_TO_RECMIX_96K, true); |
|---|
| 670 |
setCellInfo(2,4,FR_SAFFIRELE_CMD_ID_IN3_TO_RECMIX_96K, true); |
|---|
| 671 |
setCellInfo(3,4,FR_SAFFIRELE_CMD_ID_IN4_TO_RECMIX_96K, true); |
|---|
| 672 |
setCellInfo(4,4,FR_SAFFIRELE_CMD_ID_SPDIF1_TO_RECMIX_96K, true); |
|---|
| 673 |
setCellInfo(5,4,FR_SAFFIRELE_CMD_ID_SPDIF2_TO_RECMIX_96K, true); |
|---|
| 674 |
|
|---|
| 675 |
setCellInfo(14,0,FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT1_96K, true); |
|---|
| 676 |
setCellInfo(14,1,FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT2_96K, true); |
|---|
| 677 |
setCellInfo(14,2,FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT3_96K, true); |
|---|
| 678 |
setCellInfo(14,3,FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT4_96K, true); |
|---|
| 679 |
|
|---|
| 680 |
setCellInfo(7,0,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT1_96K, true); |
|---|
| 681 |
setCellInfo(7,1,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT2_96K, true); |
|---|
| 682 |
setCellInfo(7,2,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT3_96K, true); |
|---|
| 683 |
setCellInfo(7,3,FR_SAFFIRELE_CMD_ID_PC1_TO_OUT4_96K, true); |
|---|
| 684 |
setCellInfo(8,0,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT1_96K, true); |
|---|
| 685 |
setCellInfo(8,1,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT2_96K, true); |
|---|
| 686 |
setCellInfo(8,2,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT3_96K, true); |
|---|
| 687 |
setCellInfo(8,3,FR_SAFFIRELE_CMD_ID_PC2_TO_OUT4_96K, true); |
|---|
| 688 |
} else { |
|---|
| 689 |
debugError("Invalid mixer type\n"); |
|---|
| 690 |
} |
|---|
| 691 |
} |
|---|
| 692 |
|
|---|
| 693 |
void SaffireMatrixMixer::show() |
|---|
| 694 |
{ |
|---|
| 695 |
debugOutput(DEBUG_LEVEL_NORMAL, "Saffire Matrix mixer type %d\n"); |
|---|
| 696 |
} |
|---|
| 697 |
|
|---|
| 698 |
} // Focusrite |
|---|
| 699 |
} // BeBoB |
|---|