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

Revision 1120, 10.8 kB (checked in by ppalmers, 16 years ago)

fixes #56. Adds some extra controls for the saffire mixer. remove clock widget, is global now.

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 // The ID's for the hardware input matrix mixer
36 #define FR_SAFFIRE_CMD_ID_IN1_TO_OUT1       1
37 #define FR_SAFFIRE_CMD_ID_IN1_TO_OUT3       2
38 #define FR_SAFFIRE_CMD_ID_IN1_TO_OUT5       3
39 #define FR_SAFFIRE_CMD_ID_IN1_TO_OUT7       4
40 #define FR_SAFFIRE_CMD_ID_IN1_TO_OUT9       0
41 #define FR_SAFFIRE_CMD_ID_IN2_TO_OUT2       16
42 #define FR_SAFFIRE_CMD_ID_IN2_TO_OUT4       17
43 #define FR_SAFFIRE_CMD_ID_IN2_TO_OUT6       18
44 #define FR_SAFFIRE_CMD_ID_IN2_TO_OUT8       19
45 #define FR_SAFFIRE_CMD_ID_IN2_TO_OUT10      15
46 #define FR_SAFFIRE_CMD_ID_IN3_TO_OUT1       6
47 #define FR_SAFFIRE_CMD_ID_IN3_TO_OUT3       7
48 #define FR_SAFFIRE_CMD_ID_IN3_TO_OUT5       8
49 #define FR_SAFFIRE_CMD_ID_IN3_TO_OUT7       9
50 #define FR_SAFFIRE_CMD_ID_IN3_TO_OUT9       5
51 #define FR_SAFFIRE_CMD_ID_IN4_TO_OUT2       21
52 #define FR_SAFFIRE_CMD_ID_IN4_TO_OUT4       22
53 #define FR_SAFFIRE_CMD_ID_IN4_TO_OUT6       23
54 #define FR_SAFFIRE_CMD_ID_IN4_TO_OUT8       24
55 #define FR_SAFFIRE_CMD_ID_IN4_TO_OUT10      20
56
57 // reverb return id's (part of hardware input mixer)
58 #define FR_SAFFIRE_CMD_ID_REV1_TO_OUT1       11
59 #define FR_SAFFIRE_CMD_ID_REV2_TO_OUT2       26
60 #define FR_SAFFIRE_CMD_ID_REV1_TO_OUT3       12
61 #define FR_SAFFIRE_CMD_ID_REV2_TO_OUT4       27
62 #define FR_SAFFIRE_CMD_ID_REV1_TO_OUT5       13
63 #define FR_SAFFIRE_CMD_ID_REV2_TO_OUT6       28
64 #define FR_SAFFIRE_CMD_ID_REV1_TO_OUT7       14
65 #define FR_SAFFIRE_CMD_ID_REV2_TO_OUT8       29
66 #define FR_SAFFIRE_CMD_ID_REV1_TO_OUT9       10
67 #define FR_SAFFIRE_CMD_ID_REV2_TO_OUT10      25
68
69 // The ID's for the playback matrix mixer
70 #define FR_SAFFIRE_CMD_ID_PC12_TO_OUT12     36
71 #define FR_SAFFIRE_CMD_ID_PC12_TO_OUT34     37
72 #define FR_SAFFIRE_CMD_ID_PC12_TO_OUT56     38
73 #define FR_SAFFIRE_CMD_ID_PC12_TO_OUT79     39
74 #define FR_SAFFIRE_CMD_ID_PC12_TO_OUT910    35
75 #define FR_SAFFIRE_CMD_ID_PC34_TO_OUT12     41
76 #define FR_SAFFIRE_CMD_ID_PC34_TO_OUT34     42
77 #define FR_SAFFIRE_CMD_ID_PC34_TO_OUT56     43
78 #define FR_SAFFIRE_CMD_ID_PC34_TO_OUT79     44
79 #define FR_SAFFIRE_CMD_ID_PC34_TO_OUT910    40
80 #define FR_SAFFIRE_CMD_ID_PC56_TO_OUT12     46
81 #define FR_SAFFIRE_CMD_ID_PC56_TO_OUT34     47
82 #define FR_SAFFIRE_CMD_ID_PC56_TO_OUT56     48
83 #define FR_SAFFIRE_CMD_ID_PC56_TO_OUT79     49
84 #define FR_SAFFIRE_CMD_ID_PC56_TO_OUT910    45
85 #define FR_SAFFIRE_CMD_ID_PC78_TO_OUT12     51
86 #define FR_SAFFIRE_CMD_ID_PC78_TO_OUT34     52
87 #define FR_SAFFIRE_CMD_ID_PC78_TO_OUT56     53
88 #define FR_SAFFIRE_CMD_ID_PC78_TO_OUT79     54
89 #define FR_SAFFIRE_CMD_ID_PC78_TO_OUT910    50
90 #define FR_SAFFIRE_CMD_ID_PC910_TO_OUT12    31
91 #define FR_SAFFIRE_CMD_ID_PC910_TO_OUT34    32
92 #define FR_SAFFIRE_CMD_ID_PC910_TO_OUT56    33
93 #define FR_SAFFIRE_CMD_ID_PC910_TO_OUT79    34
94 #define FR_SAFFIRE_CMD_ID_PC910_TO_OUT910   30
95
96 // the control ID's
97 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT12      55
98 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT34      56
99 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT56      57
100 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT78      58
101 #define FR_SAFFIRE_CMD_ID_BITFIELD_OUT910     59
102
103 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_DIM       24
104 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_MUTE      25
105 #define FR_SAFFIRE_CMD_ID_BITFIELD_BIT_HWCTRL    26
106
107 // other stuff
108 #define FR_SAFFIRE_CMD_ID_MONITOR_DIAL    61
109 #define FR_SAFFIRE_CMD_ID_SPDIF_SWITCH    62
110
111 #define FR_SAFFIRE_CMD_ID_METERING_IN1      64
112 #define FR_SAFFIRE_CMD_ID_METERING_IN2      65
113 #define FR_SAFFIRE_CMD_ID_METERING_IN3      66
114 #define FR_SAFFIRE_CMD_ID_METERING_IN4      67
115
116 #define FR_SAFFIRE_CMD_ID_SPDIF_DETECT    79
117
118 // -- Saffire LE --
119
120 // The ID's for the hardware input matrix mixer
121 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT1       0
122 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT3       1
123 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT2       2
124 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT4       3
125 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT1       4
126 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT3       5
127 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT2       6
128 #define FR_SAFFIRELE_CMD_ID_PC3_TO_OUT4       7
129 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT1       8
130 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT3       9
131 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT2       10
132 #define FR_SAFFIRELE_CMD_ID_PC5_TO_OUT4       11
133 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT1       12
134 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT3       13
135 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT2       14
136 #define FR_SAFFIRELE_CMD_ID_PC7_TO_OUT4       15
137 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT1       16
138 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT3       17
139 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT2       18
140 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT4       19
141 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT1       20
142 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT3       21
143 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT2       22
144 #define FR_SAFFIRELE_CMD_ID_PC4_TO_OUT4       23
145 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT1       24
146 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT3       25
147 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT2       26
148 #define FR_SAFFIRELE_CMD_ID_PC6_TO_OUT4       27
149 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT1       28
150 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT3       29
151 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT2       30
152 #define FR_SAFFIRELE_CMD_ID_PC8_TO_OUT4       31
153
154 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT1       32
155 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT3       33
156 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT2       34
157 #define FR_SAFFIRELE_CMD_ID_IN1_TO_OUT4       35
158 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT1       36
159 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT3       37
160 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT2       38
161 #define FR_SAFFIRELE_CMD_ID_IN3_TO_OUT4       39
162 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT1    40
163 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT3    41
164 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT2    42
165 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_OUT4    43
166 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT1       44
167 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT3       45
168 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT2       46
169 #define FR_SAFFIRELE_CMD_ID_IN2_TO_OUT4       47
170 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT1       48
171 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT3       49
172 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT2       50
173 #define FR_SAFFIRELE_CMD_ID_IN4_TO_OUT4       51
174 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT1    52
175 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT3    53
176 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT2    54
177 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_OUT4    55
178
179 #define FR_SAFFIRELE_CMD_ID_SWAP_OUT4_OUT1_48K   64
180
181 // 96kHz controls
182 #define FR_SAFFIRELE_CMD_ID_IN1_TO_RECMIX_96K        66
183 #define FR_SAFFIRELE_CMD_ID_IN3_TO_RECMIX_96K        67
184 #define FR_SAFFIRELE_CMD_ID_SPDIF1_TO_RECMIX_96K     68
185 #define FR_SAFFIRELE_CMD_ID_IN2_TO_RECMIX_96K        69
186 #define FR_SAFFIRELE_CMD_ID_IN4_TO_RECMIX_96K        70
187 #define FR_SAFFIRELE_CMD_ID_SPDIF2_TO_RECMIX_96K     71
188
189 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT1_96K       72
190 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT1_96K          73
191 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT1_96K          74
192 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT3_96K       75
193 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT3_96K          76
194 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT3_96K          77
195 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT2_96K       78
196 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT2_96K          79
197 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT2_96K          80
198 #define FR_SAFFIRELE_CMD_ID_RECMIX_TO_OUT4_96K       81
199 #define FR_SAFFIRELE_CMD_ID_PC1_TO_OUT4_96K          82
200 #define FR_SAFFIRELE_CMD_ID_PC2_TO_OUT4_96K          83
201
202 #define FR_SAFFIRELE_CMD_ID_SWAP_OUT4_OUT1_96K   84
203
204 // metering
205 #define FR_SAFFIRELE_CMD_ID_METERING_IN1      90
206 #define FR_SAFFIRELE_CMD_ID_METERING_IN3      91
207 #define FR_SAFFIRELE_CMD_ID_METERING_SPDIF1   92
208 #define FR_SAFFIRELE_CMD_ID_METERING_IN2      93
209 #define FR_SAFFIRELE_CMD_ID_METERING_IN4      94
210 #define FR_SAFFIRELE_CMD_ID_METERING_SPDIF2   95
211
212 #define FR_SAFFIRELE_CMD_ID_METERING_OUT1      96
213 #define FR_SAFFIRELE_CMD_ID_METERING_OUT3      97
214 #define FR_SAFFIRELE_CMD_ID_METERING_OUT5      98
215 #define FR_SAFFIRELE_CMD_ID_METERING_OUT7      99
216 #define FR_SAFFIRELE_CMD_ID_METERING_OUT2      100
217 #define FR_SAFFIRELE_CMD_ID_METERING_OUT4      101
218 #define FR_SAFFIRELE_CMD_ID_METERING_OUT6      102
219 #define FR_SAFFIRELE_CMD_ID_METERING_OUT8      103
220
221 #define FR_SAFFIRELE_CMD_ID_METERING_PC1       104
222 #define FR_SAFFIRELE_CMD_ID_METERING_PC3       105
223 #define FR_SAFFIRELE_CMD_ID_METERING_PC2       106
224 #define FR_SAFFIRELE_CMD_ID_METERING_PC4       107
225
226 // other stuff
227 #define FR_SAFFIRELE_CMD_ID_HIGH_GAIN_LINE3   85
228 #define FR_SAFFIRELE_CMD_ID_HIGH_GAIN_LINE4   86
229
230 #define FR_SAFFIRELE_CMD_ID_BITFIELD_OUT12      87
231 #define FR_SAFFIRELE_CMD_ID_BITFIELD_OUT34      88
232 #define FR_SAFFIRELE_CMD_ID_BITFIELD_OUT56      89
233
234 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_MUTE      25
235 #define FR_SAFFIRELE_CMD_ID_BITFIELD_BIT_HWCTRL    26
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_InputMix,
254         eMMT_PCMix,
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
281 private:
282     Control::Container *m_MixerContainer;
283     bool m_isSaffireLE;
284 };
285
286 } // namespace Focusrite
287 } // namespace BeBoB
288
289 #endif
Note: See TracBrowser for help on using the browser.