root/branches/libffado-2.0/src/bebob/focusrite/focusrite_saffire.h

Revision 1413, 10.5 kB (checked in by ppalmers, 15 years ago)

hardcode saffire (LE) supported sample rates

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, std::auto_ptr<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.