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

Revision 661, 8.6 kB (checked in by ppalmers, 16 years ago)

- Implement more complete mixer support for the saffire pro
- fix some cleanup issues with control elements

Line 
1 /*
2  * Copyright (C) 2005-2007 by Daniel Wagner
3  * Copyright (C) 2005-2007 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 library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License version 2.1, as published by the Free Software Foundation;
13  *
14  * This library 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 GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22  * MA 02110-1301 USA
23  */
24
25 #ifndef BEBOB_FOCUSRITE_SAFFIRE_PRO_DEVICE_H
26 #define BEBOB_FOCUSRITE_SAFFIRE_PRO_DEVICE_H
27
28 #include "debugmodule/debugmodule.h"
29 #include "focusrite_generic.h"
30
31 #include "libcontrol/BasicElements.h"
32 #include "libcontrol/MatrixMixer.h"
33
34 #include <vector>
35 #include <string>
36
37 #define FR_SAFFIREPRO_CMD_ID_SAMPLERATE         84
38 #define FR_SAFFIREPRO_CMD_ID_SAMPLERATE_MIRROR  115
39
40 #define FOCUSRITE_CMD_SAMPLERATE_44K1   1
41 #define FOCUSRITE_CMD_SAMPLERATE_48K    2
42 #define FOCUSRITE_CMD_SAMPLERATE_88K2   3
43 #define FOCUSRITE_CMD_SAMPLERATE_96K    4
44 #define FOCUSRITE_CMD_SAMPLERATE_176K4  5
45 #define FOCUSRITE_CMD_SAMPLERATE_192K   6
46
47 #define FR_SAFFIREPRO_CMD_ID_STREAMING          90
48
49 #define FR_SAFFIREPRO_CMD_ID_PHANTOM14          98
50 #define FR_SAFFIREPRO_CMD_ID_PHANTOM58          99
51 #define FR_SAFFIREPRO_CMD_ID_INSERT1            100
52 #define FR_SAFFIREPRO_CMD_ID_INSERT2            101
53 #define FR_SAFFIREPRO_CMD_ID_AC3_PASSTHROUGH    103
54 #define FR_SAFFIREPRO_CMD_ID_MIDI_TRU           104
55
56 #define FR_SAFFIREPRO_CMD_ID_DIM_INDICATOR      88
57 #define FR_SAFFIREPRO_CMD_ID_MUTE_INDICATOR      88
58
59 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_OUT12      80
60 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_OUT34      81
61 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_OUT56      82
62 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_OUT78      83
63
64 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_BIT_MUTE      24
65 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_BIT_HWCTRL    26
66 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_BIT_PAD       27
67 #define FR_SAFFIREPRO_CMD_ID_BITFIELD_BIT_DIM       28
68
69
70 #define FR_SAFFIREPRO_CMD_ID_AN1_TO_IMIXL        0
71 #define FR_SAFFIREPRO_CMD_ID_AN1_TO_IMIXR        1
72 #define FR_SAFFIREPRO_CMD_ID_AN2_TO_IMIXL        2
73 #define FR_SAFFIREPRO_CMD_ID_AN2_TO_IMIXR        3
74 #define FR_SAFFIREPRO_CMD_ID_AN3_TO_IMIXL        4
75 #define FR_SAFFIREPRO_CMD_ID_AN3_TO_IMIXR        5
76 #define FR_SAFFIREPRO_CMD_ID_AN4_TO_IMIXL        6
77 #define FR_SAFFIREPRO_CMD_ID_AN4_TO_IMIXR        7
78 #define FR_SAFFIREPRO_CMD_ID_AN5_TO_IMIXL        8
79 #define FR_SAFFIREPRO_CMD_ID_AN5_TO_IMIXR        9
80 #define FR_SAFFIREPRO_CMD_ID_AN6_TO_IMIXL       10
81 #define FR_SAFFIREPRO_CMD_ID_AN6_TO_IMIXR       11
82 #define FR_SAFFIREPRO_CMD_ID_AN7_TO_IMIXL       12
83 #define FR_SAFFIREPRO_CMD_ID_AN7_TO_IMIXR       13
84 #define FR_SAFFIREPRO_CMD_ID_AN8_TO_IMIXL       14
85 #define FR_SAFFIREPRO_CMD_ID_AN8_TO_IMIXR       15
86 #define FR_SAFFIREPRO_CMD_ID_SPDIFL_TO_IMIXL    16
87 #define FR_SAFFIREPRO_CMD_ID_SPDIFL_TO_IMIXR    17
88 #define FR_SAFFIREPRO_CMD_ID_SPDIFR_TO_IMIXL    18
89 #define FR_SAFFIREPRO_CMD_ID_SPDIFR_TO_IMIXR    19
90
91 #define FR_SAFFIREPRO_CMD_ID_ADAT11_TO_IMIXL    20
92 #define FR_SAFFIREPRO_CMD_ID_ADAT11_TO_IMIXR    21
93 #define FR_SAFFIREPRO_CMD_ID_ADAT12_TO_IMIXL    22
94 #define FR_SAFFIREPRO_CMD_ID_ADAT12_TO_IMIXR    23
95 #define FR_SAFFIREPRO_CMD_ID_ADAT13_TO_IMIXL    24
96 #define FR_SAFFIREPRO_CMD_ID_ADAT13_TO_IMIXR    25
97 #define FR_SAFFIREPRO_CMD_ID_ADAT14_TO_IMIXL    26
98 #define FR_SAFFIREPRO_CMD_ID_ADAT14_TO_IMIXR    27
99 #define FR_SAFFIREPRO_CMD_ID_ADAT15_TO_IMIXL    28
100 #define FR_SAFFIREPRO_CMD_ID_ADAT15_TO_IMIXR    29
101 #define FR_SAFFIREPRO_CMD_ID_ADAT16_TO_IMIXL    30
102 #define FR_SAFFIREPRO_CMD_ID_ADAT16_TO_IMIXR    31
103 #define FR_SAFFIREPRO_CMD_ID_ADAT17_TO_IMIXL    32
104 #define FR_SAFFIREPRO_CMD_ID_ADAT17_TO_IMIXR    33
105 #define FR_SAFFIREPRO_CMD_ID_ADAT18_TO_IMIXL    34
106 #define FR_SAFFIREPRO_CMD_ID_ADAT18_TO_IMIXR    35
107
108 #define FR_SAFFIREPRO_CMD_ID_ADAT21_TO_IMIXL    36
109 #define FR_SAFFIREPRO_CMD_ID_ADAT21_TO_IMIXR    37
110 #define FR_SAFFIREPRO_CMD_ID_ADAT22_TO_IMIXL    38
111 #define FR_SAFFIREPRO_CMD_ID_ADAT22_TO_IMIXR    39
112 #define FR_SAFFIREPRO_CMD_ID_ADAT23_TO_IMIXL    40
113 #define FR_SAFFIREPRO_CMD_ID_ADAT23_TO_IMIXR    41
114 #define FR_SAFFIREPRO_CMD_ID_ADAT24_TO_IMIXL    42
115 #define FR_SAFFIREPRO_CMD_ID_ADAT24_TO_IMIXR    43
116 #define FR_SAFFIREPRO_CMD_ID_ADAT25_TO_IMIXL    44
117 #define FR_SAFFIREPRO_CMD_ID_ADAT25_TO_IMIXR    45
118 #define FR_SAFFIREPRO_CMD_ID_ADAT26_TO_IMIXL    46
119 #define FR_SAFFIREPRO_CMD_ID_ADAT26_TO_IMIXR    47
120 #define FR_SAFFIREPRO_CMD_ID_ADAT27_TO_IMIXL    48
121 #define FR_SAFFIREPRO_CMD_ID_ADAT27_TO_IMIXR    49
122 #define FR_SAFFIREPRO_CMD_ID_ADAT28_TO_IMIXL    50
123 #define FR_SAFFIREPRO_CMD_ID_ADAT28_TO_IMIXR    51
124
125 #define FR_SAFFIREPRO_CMD_ID_PC1_TO_OUT1    52
126 #define FR_SAFFIREPRO_CMD_ID_PC2_TO_OUT2    54
127 #define FR_SAFFIREPRO_CMD_ID_MIX1_TO_OUT1   53
128 #define FR_SAFFIREPRO_CMD_ID_MIX2_TO_OUT2   55
129
130 #define FR_SAFFIREPRO_CMD_ID_PC1_TO_OUT3    56
131 #define FR_SAFFIREPRO_CMD_ID_PC2_TO_OUT4    59
132 #define FR_SAFFIREPRO_CMD_ID_PC3_TO_OUT3    57
133 #define FR_SAFFIREPRO_CMD_ID_PC4_TO_OUT4    60
134 #define FR_SAFFIREPRO_CMD_ID_MIX1_TO_OUT3   58
135 #define FR_SAFFIREPRO_CMD_ID_MIX2_TO_OUT4   61
136
137 #define FR_SAFFIREPRO_CMD_ID_PC1_TO_OUT5    62
138 #define FR_SAFFIREPRO_CMD_ID_PC2_TO_OUT6    65
139 #define FR_SAFFIREPRO_CMD_ID_PC5_TO_OUT5    63
140 #define FR_SAFFIREPRO_CMD_ID_PC6_TO_OUT6    66
141 #define FR_SAFFIREPRO_CMD_ID_MIX1_TO_OUT5   64
142 #define FR_SAFFIREPRO_CMD_ID_MIX2_TO_OUT6   67
143
144 #define FR_SAFFIREPRO_CMD_ID_PC1_TO_OUT7    68
145 #define FR_SAFFIREPRO_CMD_ID_PC2_TO_OUT8    71
146 #define FR_SAFFIREPRO_CMD_ID_PC7_TO_OUT7    69
147 #define FR_SAFFIREPRO_CMD_ID_PC8_TO_OUT8    72
148 #define FR_SAFFIREPRO_CMD_ID_MIX1_TO_OUT7   70
149 #define FR_SAFFIREPRO_CMD_ID_MIX2_TO_OUT8   73
150
151 #define FR_SAFFIREPRO_CMD_ID_PC1_TO_OUT9    74
152 #define FR_SAFFIREPRO_CMD_ID_PC2_TO_OUT10   77
153 #define FR_SAFFIREPRO_CMD_ID_PC9_TO_OUT9    75
154 #define FR_SAFFIREPRO_CMD_ID_PC10_TO_OUT10  78
155 #define FR_SAFFIREPRO_CMD_ID_MIX1_TO_OUT9   76
156 #define FR_SAFFIREPRO_CMD_ID_MIX2_TO_OUT10  79
157
158 namespace BeBoB {
159 namespace Focusrite {
160
161 class SaffireProDevice;
162
163 class SaffireProMatrixMixer : public Control::MatrixMixer
164 {
165 public:
166     enum eMatrixMixerType {
167         eMMT_InputMix,
168         eMMT_OutputMix
169     };
170    
171 public:
172     SaffireProMatrixMixer(SaffireProDevice& parent, enum eMatrixMixerType type);
173     SaffireProMatrixMixer(SaffireProDevice& parent, enum eMatrixMixerType type, std::string n);
174     virtual ~SaffireProMatrixMixer() {};
175
176     virtual void show();
177
178     virtual std::string getRowName( const int );
179     virtual std::string getColName( const int );
180     virtual int canWrite( const int, const int );
181     virtual double setValue( const int, const int, const double );
182     virtual double getValue( const int, const int );
183     virtual int getRowCount( );
184     virtual int getColCount( );
185
186 private:
187     struct sSignalInfo {
188         std::string name;
189         std::string label;
190         std::string description;
191     };
192     struct sCellInfo {
193         int row;
194         int col;
195         // indicates whether a cell can be valid, this
196         // doesn't mean that it is writable. Just that it can be.
197         bool valid;
198         // the address to use when manipulating this cell
199         int address;
200     };
201    
202     void init(enum eMatrixMixerType type);
203     void addSignalInfo(std::vector<struct sSignalInfo> &target,
204                        std::string name, std::string label, std::string descr);
205     void setCellInfo(int row, int col, int addr, bool valid);
206
207     std::vector<struct sSignalInfo> m_RowInfo;
208     std::vector<struct sSignalInfo> m_ColInfo;
209     std::vector< std::vector<struct sCellInfo> > m_CellInfo;
210    
211     SaffireProDevice&       m_Parent;
212     enum eMatrixMixerType   m_type;
213 };
214
215
216 class SaffireProDevice : public FocusriteDevice
217 {
218 public:
219     SaffireProDevice( Ieee1394Service& ieee1394Service,
220               std::auto_ptr<ConfigRom>( configRom ));
221     virtual ~SaffireProDevice();
222
223     virtual void showDevice();
224     virtual void setVerboseLevel(int l);
225
226     virtual bool setSamplingFrequency( int );
227     virtual int getSamplingFrequency( );
228
229     virtual bool buildMixer();
230     virtual bool destroyMixer();
231
232 private:
233     virtual bool setSamplingFrequencyDo( int );
234     virtual int getSamplingFrequencyMirror( );
235
236     bool isStreaming();
237
238     Control::Container *m_MixerContainer;
239 };
240
241 } // namespace Focusrite
242 } // namespace BeBoB
243
244 #endif
Note: See TracBrowser for help on using the browser.