root/trunk/libffado/src/bebob/focusrite/focusrite_saffire.h

Revision 2802, 10.5 kB (checked in by jwoithe, 3 years ago)

Cosmetic: "Firewire" becomes "FireWire?".

Officially both the "F" and "W" were capitalised in the FireWire? name, so
reflect this throughout FFADO's source tree. This mostly affects comments.

This patch originated from pander on the ffado-devel mailing list. To
maintain consistency, the committed version has been expanded to include
files not originally included in the original patch.

Line 
1 /*
2  * Copyright (C) 2005-2008 by Daniel Wagner
3  * Copyright (C) 2005-2008 by Pieter Palmers
4  *
5  * This file is part of FFADO
6  * FFADO = Free FireWire (pro-)audio drivers for linux
7  *
8  * FFADO is based upon FreeBoB.
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 2 of the License, or
13  * (at your option) version 3 of the License.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  *
23  */
24
25 #ifndef BEBOB_FOCUSRITE_SAFFIRE_DEVICE_H
26 #define BEBOB_FOCUSRITE_SAFFIRE_DEVICE_H
27
28 #include "focusrite_generic.h"
29
30 #include "libcontrol/BasicElements.h"
31 #include "libcontrol/MatrixMixer.h"
32
33 // -- Original Saffire --
34
35 // no need for control id's, we can directly compute the addresses of the matrix mixer
36 /*
37
38 MIXER LAYOUT ():
39
40 OFFSET: 30
41
42    |-- Out9/10--| |-- Out1/2 --| |-- Out3/4 --| |-- Out5/6 --| |-- Out7/8 --|
43 P5  0:    0/    0  1:  110/  110  2:    0/    0  3:    0/    0  4:    0/    0
44 P1  5:    0/    0  6:32767/32767  7:    0/    0  8:    0/    0  9:    0/    0
45 P2 10:    0/    0 11:    0/    0 12:32767/32767 13:    0/    0 14:    0/    0
46 P3 15:    0/    0 16:    0/    0 17:    0/    0 18:32767/32767 19:    0/    0
47 P4 20:    0/    0 21:    0/    0 22:    0/    0 23:    0/    0 24:32767/32767
48 R1 25:    0/    0 26:    0/    0 27:    0/    0 28:    0/    0 29:    0/    0
49 R2 30:    0/    0 31:    0/    0 32:    0/    0 33:    0/    0 34:    0/    0
50 Fx 35:    0/    0 36:    0/    0 37:    0/    0 38:    0/    0 39:    0/    0
51
52 P5: DAW ch 9/10
53 P1: DAW ch 1/2
54 P2: DAW ch 3/4
55 P3: DAW ch 5/6
56 P4: DAW ch 7/8
57 R1: HW INPUT ch 1/2 / Reverb ch 1
58 R2: HW INPUT ch 3/4 / Reverb ch 2
59 Fx: reverb/fx return? / input mix
60
61 */
62
63 // the control ID's
64 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT12      55
65 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT34      56
66 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT56      57
67 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT78      58
68 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT910     59
69
70 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DIM       24
71 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE      25
72 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DACIGNORE 26
73 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_HWCTRL    27
74 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DAC        0
75
76 // other stuff
77 #define FR_SAFFIRE_CMD_ID_MONITOR_DIAL      61
78
79 #define FR_SAFFIRE_CMD_ID_INPUT_SOURCE      62
80 #define FR_SAFFIRE_CMD_ID_INPUT_SOURCE_SPDIF  1
81 #define FR_SAFFIRE_CMD_ID_INPUT_SOURCE_ANALOG 0
82
83 #define FR_SAFFIRE_CMD_ID_MONO_MODE         63
84 #define FR_SAFFIRE_CMD_ID_MONO_MODE_STEREO   0
85 #define FR_SAFFIRE_CMD_ID_MONO_MODE_MONO     1
86
87 #define FR_SAFFIRE_CMD_ID_METERING_IN1      64
88 #define FR_SAFFIRE_CMD_ID_METERING_IN2      65
89 #define FR_SAFFIRE_CMD_ID_METERING_IN3      66
90 #define FR_SAFFIRE_CMD_ID_METERING_IN4      67
91
92 #define FR_SAFFIRE_CMD_ID_METERING_PC1      68
93 #define FR_SAFFIRE_CMD_ID_METERING_PC2      69
94 #define FR_SAFFIRE_CMD_ID_METERING_PC3      70
95 #define FR_SAFFIRE_CMD_ID_METERING_PC4      71
96 #define FR_SAFFIRE_CMD_ID_METERING_PC5      72
97 #define FR_SAFFIRE_CMD_ID_METERING_PC6      73
98 #define FR_SAFFIRE_CMD_ID_METERING_PC7      74
99 #define FR_SAFFIRE_CMD_ID_METERING_PC8      75
100 #define FR_SAFFIRE_CMD_ID_METERING_PC9      76
101 #define FR_SAFFIRE_CMD_ID_METERING_PC10     77
102
103 #define FR_SAFFIRE_CMD_ID_DEVICE_MODE       78
104 #define FR_SAFFIRE_CMD_ID_DEVICE_MODE_NORMAL 0
105 #define FR_SAFFIRE_CMD_ID_DEVICE_MODE_SCARD  1
106
107 #define FR_SAFFIRE_CMD_ID_EXTERNAL_LOCK     79
108 #define FR_SAFFIRE_CMD_ID_AUDIO_ON_STATUS   80
109 #define FR_SAFFIRE_CMD_ID_SAVE_SETTINGS     82
110
111 #define FR_SAFFIRELE_CMD_ID_DSP_REVISION        1022
112 #define FR_SAFFIRELE_CMD_ID_DSP_VERSION         1023
113
114 // -- Saffire LE --
115
116 // The ID's for the hardware input matrix mixer
117 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT1       0
118 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT3       1
119 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT2       2
120 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT4       3
121 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT1       4
122 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT3       5
123 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT2       6
124 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT4       7
125 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT1       8
126 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT3       9
127 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT2       10
128 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT4       11
129 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT1       12
130 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT3       13
131 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT2       14
132 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT4       15
133 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT1       16
134 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT3       17
135 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT2       18
136 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT4       19
137 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT1       20
138 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT3       21
139 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT2       22
140 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT4       23
141 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT1       24
142 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT3       25
143 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT2       26
144 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT4       27
145 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT1       28
146 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT3       29
147 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT2       30
148 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT4       31
149
150 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT1       32
151 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT3       33
152 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT2       34
153 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT4       35
154 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT1       36
155 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT3       37
156 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT2       38
157 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT4       39
158 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT1    40
159 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT3    41
160 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT2    42
161 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT4    43
162 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT1       44
163 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT3       45
164 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT2       46
165 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT4       47
166 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT1       48
167 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT3       49
168 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT2       50
169 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT4       51
170 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT1    52
171 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT3    53
172 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT2    54
173 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT4    55
174
175 #define FR_SAFFIRELE_CMD_ID_SWAP_OUT4_OUT1_48K   64
176
177 // 96kHz controls
178 #define FR_SAFFIRELE_CMD_ID_IN1_TO_RECMIX_96K        66
179 #define FR_SAFFIRELE_CMD_ID_IN3_TO_RECMIX_96K        67
180 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_RECMIX_96K     68
181 #define FR_SAFFIRELE_CMD_ID_IN2_TO_RECMIX_96K        69
182 #define FR_SAFFIRELE_CMD_ID_IN4_TO_RECMIX_96K        70
183 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_RECMIX_96K     71
184
185 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT1_96K       72
186 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT1_96K          73
187 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT1_96K          74
188 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT3_96K       75
189 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT3_96K          76
190 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT3_96K          77
191 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT2_96K       78
192 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT2_96K          79
193 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT2_96K          80
194 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT4_96K       81
195 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT4_96K          82
196 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT4_96K          83
197
198 #define FR_SAFFIRELE_CMD_ID_SWAP_OUT4_OUT1_96K   84
199
200 // metering
201 #define FR_SAFFIRELE_CMD_ID_METERING_IN1      90
202 #define FR_SAFFIRELE_CMD_ID_METERING_IN3      91
203 #define FR_SAFFIRELE_CMD_ID_METERING_SPDIF1   92
204 #define FR_SAFFIRELE_CMD_ID_METERING_IN2      93
205 #define FR_SAFFIRELE_CMD_ID_METERING_IN4      94
206 #define FR_SAFFIRELE_CMD_ID_METERING_SPDIF2   95
207
208 #define FR_SAFFIRELE_CMD_ID_METERING_OUT1      96
209 #define FR_SAFFIRELE_CMD_ID_METERING_OUT3      97
210 #define FR_SAFFIRELE_CMD_ID_METERING_OUT5      98
211 #define FR_SAFFIRELE_CMD_ID_METERING_OUT7      99
212 #define FR_SAFFIRELE_CMD_ID_METERING_OUT2      100
213 #define FR_SAFFIRELE_CMD_ID_METERING_OUT4      101
214 #define FR_SAFFIRELE_CMD_ID_METERING_OUT6      102
215 #define FR_SAFFIRELE_CMD_ID_METERING_OUT8      103
216
217 #define FR_SAFFIRELE_CMD_ID_METERING_PC1       104
218 #define FR_SAFFIRELE_CMD_ID_METERING_PC3       105
219 #define FR_SAFFIRELE_CMD_ID_METERING_PC2       106
220 #define FR_SAFFIRELE_CMD_ID_METERING_PC4       107
221
222 // other stuff
223 #define FR_SAFFIRELE_CMD_ID_HIGH_GAIN_LINE3   85
224 #define FR_SAFFIRELE_CMD_ID_HIGH_GAIN_LINE4   86
225
226 #define FR_SAFFIRELE_CMD_ID_BITFIELD_OUT12      87
227 #define FR_SAFFIRELE_CMD_ID_BITFIELD_OUT34      88
228 #define FR_SAFFIRELE_CMD_ID_BITFIELD_OUT56      89
229
230
231 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DIM       24
232 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_MUTE      25
233 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DACIGNORE 26
234 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_HWCTRL    27
235 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_DAC        0
236
237 #define FR_SAFFIRELE_CMD_ID_EXT_CLOCK_LOCK       108
238 #define FR_SAFFIRELE_CMD_ID_AUDIO_ON             109
239 #define FR_SAFFIRELE_CMD_ID_SAVE_SETTINGS        110
240 #define FR_SAFFIRELE_CMD_ID_MIDITHRU             111
241 #define FR_SAFFIRELE_CMD_ID_SPDIF_TRANSPARENT    112
242
243
244 namespace BeBoB {
245 namespace Focusrite {
246
247 class SaffireDevice;
248
249 class SaffireMatrixMixer : public FocusriteMatrixMixer
250 {
251 public:
252     enum eMatrixMixerType {
253         eMMT_SaffireStereoMatrixMix,
254         eMMT_SaffireMonoMatrixMix,
255         eMMT_LEMix48,
256         eMMT_LEMix96,
257     };
258 public:
259     SaffireMatrixMixer(SaffireDevice& parent, enum eMatrixMixerType type);
260     SaffireMatrixMixer(SaffireDevice& parent, enum eMatrixMixerType type, std::string n);
261     virtual ~SaffireMatrixMixer() {};
262
263     virtual void show();
264
265 protected:
266     void init();
267     enum eMatrixMixerType m_type;
268 };
269
270 class SaffireDevice : public FocusriteDevice {
271 public:
272     SaffireDevice(DeviceManager& d, ffado_smartptr<ConfigRom>( configRom ));
273     virtual ~SaffireDevice() {};
274
275     virtual void showDevice();
276     virtual void setVerboseLevel(int l);
277
278     virtual bool buildMixer();
279     virtual bool destroyMixer();
280     virtual std::vector<int> getSupportedSamplingFrequencies();
281
282 private:
283     Control::Container *m_MixerContainer;
284     bool m_isSaffireLE;
285 };
286
287 } // namespace Focusrite
288 } // namespace BeBoB
289
290 #endif
Note: See TracBrowser for help on using the browser.