58 | | {0x00000f, 0x00010065, "Mackie", "Onyx Firewire"}, |
---|
59 | | |
---|
60 | | {0x0003db, 0x00010048, "Apogee Electronics", "Rosetta 200"}, |
---|
61 | | |
---|
62 | | {0x0007f5, 0x00010048, "BridgeCo", "RD Audio1"}, |
---|
63 | | |
---|
64 | | {0x000a92, 0x00010000, "PreSonus", "FIREBOX"}, |
---|
65 | | {0x000a92, 0x00010066, "PreSonus", "FirePOD"}, |
---|
66 | | |
---|
67 | | {0x000aac, 0x00000003, "TerraTec Electronic GmbH", "Phase 88 FW"}, |
---|
68 | | {0x000aac, 0x00000004, "TerraTec Electronic GmbH", "Phase X24 FW (model version 4)"}, |
---|
69 | | {0x000aac, 0x00000007, "TerraTec Electronic GmbH", "Phase X24 FW (model version 7)"}, |
---|
70 | | |
---|
71 | | {0x000f1b, 0x00010064, "ESI", "Quatafire 610"}, |
---|
72 | | |
---|
73 | | {0x00130e, 0x00000000, "Focusrite", "Saffire (LE)"}, |
---|
74 | | {0x00130e, 0x00000003, "Focusrite", "Saffire Pro26IO"}, |
---|
75 | | {0x00130e, 0x00000006, "Focusrite", "Saffire Pro10IO"}, |
---|
76 | | |
---|
77 | | {0x0040ab, 0x00010048, "EDIROL", "FA-101"}, |
---|
78 | | {0x0040ab, 0x00010049, "EDIROL", "FA-66"}, |
---|
79 | | |
---|
80 | | {0x000d6c, 0x00010062, "M-Audio", "FW Solo"}, |
---|
81 | | {0x000d6c, 0x00010081, "M-Audio", "NRV10"}, |
---|
| 68 | {FW_VENDORID_MACKIE, 0x00010065, "Mackie", "Onyx Firewire"}, |
---|
| 69 | |
---|
| 70 | {FW_VENDORID_APOGEE, 0x00010048, "Apogee Electronics", "Rosetta 200"}, |
---|
| 71 | |
---|
| 72 | {FW_VENDORID_BRIDGECO, 0x00010048, "BridgeCo", "RD Audio1"}, |
---|
| 73 | |
---|
| 74 | {FW_VENDORID_PRESONUS, 0x00010000, "PreSonus", "FIREBOX"}, |
---|
| 75 | {FW_VENDORID_PRESONUS, 0x00010066, "PreSonus", "FirePOD"}, |
---|
| 76 | |
---|
| 77 | {FW_VENDORID_TERRATEC, 0x00000003, "TerraTec Electronic GmbH", "Phase 88 FW"}, |
---|
| 78 | {FW_VENDORID_TERRATEC, 0x00000004, "TerraTec Electronic GmbH", "Phase X24 FW (model version 4)"}, |
---|
| 79 | {FW_VENDORID_TERRATEC, 0x00000007, "TerraTec Electronic GmbH", "Phase X24 FW (model version 7)"}, |
---|
| 80 | |
---|
| 81 | {FW_VENDORID_ESI, 0x00010064, "ESI", "Quatafire 610"}, |
---|
| 82 | |
---|
| 83 | {FW_VENDORID_FOCUSRITE, 0x00000000, "Focusrite", "Saffire (LE)"}, |
---|
| 84 | {FW_VENDORID_FOCUSRITE, 0x00000003, "Focusrite", "Saffire Pro26IO"}, |
---|
| 85 | {FW_VENDORID_FOCUSRITE, 0x00000006, "Focusrite", "Saffire Pro10IO"}, |
---|
| 86 | |
---|
| 87 | {FW_VENDORID_EDIROL, 0x00010048, "EDIROL", "FA-101"}, |
---|
| 88 | {FW_VENDORID_EDIROL, 0x00010049, "EDIROL", "FA-66"}, |
---|
| 89 | |
---|
| 90 | {FW_VENDORID_MAUDIO, 0x00010062, "M-Audio", "FW Solo"}, |
---|
| 91 | {FW_VENDORID_MAUDIO, 0x00010081, "M-Audio", "NRV10"}, |
---|
| 108 | } |
---|
| 109 | |
---|
| 110 | bool |
---|
| 111 | AvDevice::probe( ConfigRom& configRom ) |
---|
| 112 | { |
---|
| 113 | unsigned int vendorId = configRom.getNodeVendorId(); |
---|
| 114 | unsigned int modelId = configRom.getModelId(); |
---|
| 115 | |
---|
| 116 | //GenericAVC::VendorModel vendorModel( "/home/wagi/src/libffado/src/bebob/ffado_driver_bebob.txt" ); |
---|
| 117 | |
---|
| 118 | for ( unsigned int i = 0; |
---|
| 119 | i < ( sizeof( supportedDeviceList )/sizeof( GenericAVC::VendorModelEntry ) ); |
---|
| 120 | ++i ) |
---|
| 121 | { |
---|
| 122 | if ( ( supportedDeviceList[i].vendor_id == vendorId ) |
---|
| 123 | && ( supportedDeviceList[i].model_id == modelId ) ) |
---|
| 124 | { |
---|
| 125 | return true; |
---|
| 126 | } |
---|
| 127 | } |
---|
| 128 | return false; |
---|
| 129 | } |
---|
| 130 | |
---|
| 131 | FFADODevice * |
---|
| 132 | AvDevice::createDevice( Ieee1394Service& ieee1394Service, |
---|
| 133 | std::auto_ptr<ConfigRom>( configRom )) |
---|
| 134 | { |
---|
| 135 | unsigned int vendorId = configRom->getNodeVendorId(); |
---|
| 136 | unsigned int modelId = configRom->getModelId(); |
---|
| 137 | return new Focusrite::SaffireProDevice(ieee1394Service, configRom); |
---|
| 138 | |
---|
| 139 | switch (vendorId) { |
---|
| 140 | case FW_VENDORID_TERRATEC: |
---|
| 141 | return new Terratec::PhaseSeriesDevice(ieee1394Service, configRom); |
---|
| 142 | case FW_VENDORID_FOCUSRITE: |
---|
| 143 | switch(modelId) { |
---|
| 144 | case 0x00000003: |
---|
| 145 | case 0x00000006: |
---|
| 146 | return new Focusrite::SaffireProDevice(ieee1394Service, configRom); |
---|
| 147 | default: // return a plain BeBoB device |
---|
| 148 | return new AvDevice(ieee1394Service, configRom); |
---|
| 149 | } |
---|
| 150 | default: |
---|
| 151 | return new AvDevice(ieee1394Service, configRom); |
---|
| 152 | } |
---|
| 153 | return NULL; |
---|
| 154 | } |
---|
| 155 | |
---|
| 156 | bool |
---|
| 157 | AvDevice::discover() |
---|
| 158 | { |
---|
| 159 | unsigned int vendorId = m_pConfigRom->getNodeVendorId(); |
---|
| 160 | unsigned int modelId = m_pConfigRom->getModelId(); |
---|
| 161 | |
---|
| 162 | for ( unsigned int i = 0; |
---|
| 163 | i < ( sizeof( supportedDeviceList )/sizeof( GenericAVC::VendorModelEntry ) ); |
---|
| 164 | ++i ) |
---|
| 165 | { |
---|
| 166 | if ( ( supportedDeviceList[i].vendor_id == vendorId ) |
---|
| 167 | && ( supportedDeviceList[i].model_id == modelId ) |
---|
| 168 | ) |
---|
| 169 | { |
---|
| 170 | m_model = &(supportedDeviceList[i]); |
---|
| 171 | break; |
---|
| 172 | } |
---|
| 173 | } |
---|
| 174 | |
---|
| 175 | if (m_model != NULL) { |
---|
| 176 | debugOutput( DEBUG_LEVEL_VERBOSE, "found %s %s\n", |
---|
| 177 | m_model->vendor_name, m_model->model_name); |
---|
| 178 | } else return false; |
---|
| 179 | |
---|
| 180 | if ( !Unit::discover() ) { |
---|
| 181 | debugError( "Could not discover unit\n" ); |
---|
| 182 | return false; |
---|
| 183 | } |
---|
| 184 | |
---|
| 185 | if((getAudioSubunit( 0 ) == NULL)) { |
---|
| 186 | debugError( "Unit doesn't have an Audio subunit.\n"); |
---|
| 187 | return false; |
---|
| 188 | } |
---|
| 189 | if((getMusicSubunit( 0 ) == NULL)) { |
---|
| 190 | debugError( "Unit doesn't have a Music subunit.\n"); |
---|
| 191 | return false; |
---|
| 192 | } |
---|
| 193 | |
---|
| 194 | // create a Mixer |
---|
| 195 | // this removes the mixer if it already exists |
---|
| 196 | // note: a mixer self-registers to it's parent |
---|
| 197 | if(m_Mixer != NULL) { |
---|
| 198 | delete m_Mixer; |
---|
| 199 | } |
---|
| 200 | |
---|
| 201 | // create the mixer & register it |
---|
| 202 | if(getAudioSubunit(0) == NULL) { |
---|
| 203 | debugWarning("Could not find audio subunit, mixer not available.\n"); |
---|
| 204 | m_Mixer = NULL; |
---|
| 205 | } else { |
---|
| 206 | m_Mixer = new Mixer(*this); |
---|
| 207 | } |
---|
| 208 | return true; |
---|
149 | | } |
---|
150 | | |
---|
151 | | bool |
---|
152 | | AvDevice::probe( ConfigRom& configRom ) |
---|
153 | | { |
---|
154 | | unsigned int vendorId = configRom.getNodeVendorId(); |
---|
155 | | unsigned int modelId = configRom.getModelId(); |
---|
156 | | |
---|
157 | | //GenericAVC::VendorModel vendorModel( "/home/wagi/src/libffado/src/bebob/ffado_driver_bebob.txt" ); |
---|
158 | | |
---|
159 | | for ( unsigned int i = 0; |
---|
160 | | i < ( sizeof( supportedDeviceList )/sizeof( GenericAVC::VendorModelEntry ) ); |
---|
161 | | ++i ) |
---|
162 | | { |
---|
163 | | if ( ( supportedDeviceList[i].vendor_id == vendorId ) |
---|
164 | | && ( supportedDeviceList[i].model_id == modelId ) ) |
---|
165 | | { |
---|
166 | | return true; |
---|
167 | | } |
---|
168 | | } |
---|
169 | | return false; |
---|
170 | | } |
---|
171 | | |
---|
172 | | FFADODevice * |
---|
173 | | AvDevice::createDevice( Ieee1394Service& ieee1394Service, |
---|
174 | | std::auto_ptr<ConfigRom>( configRom )) |
---|
175 | | { |
---|
176 | | return new AvDevice(ieee1394Service, configRom ); |
---|
177 | | } |
---|
178 | | |
---|
179 | | bool |
---|
180 | | AvDevice::discover() |
---|
181 | | { |
---|
182 | | unsigned int vendorId = m_pConfigRom->getNodeVendorId(); |
---|
183 | | unsigned int modelId = m_pConfigRom->getModelId(); |
---|
184 | | |
---|
185 | | for ( unsigned int i = 0; |
---|
186 | | i < ( sizeof( supportedDeviceList )/sizeof( GenericAVC::VendorModelEntry ) ); |
---|
187 | | ++i ) |
---|
188 | | { |
---|
189 | | if ( ( supportedDeviceList[i].vendor_id == vendorId ) |
---|
190 | | && ( supportedDeviceList[i].model_id == modelId ) |
---|
191 | | ) |
---|
192 | | { |
---|
193 | | m_model = &(supportedDeviceList[i]); |
---|
194 | | break; |
---|
195 | | } |
---|
196 | | } |
---|
197 | | |
---|
198 | | if (m_model != NULL) { |
---|
199 | | debugOutput( DEBUG_LEVEL_VERBOSE, "found %s %s\n", |
---|
200 | | m_model->vendor_name, m_model->model_name); |
---|
201 | | } else return false; |
---|
202 | | |
---|
203 | | if ( !Unit::discover() ) { |
---|
204 | | debugError( "Could not discover unit\n" ); |
---|
205 | | return false; |
---|
206 | | } |
---|
207 | | |
---|
208 | | if((getAudioSubunit( 0 ) == NULL)) { |
---|
209 | | debugError( "Unit doesn't have an Audio subunit.\n"); |
---|
210 | | return false; |
---|
211 | | } |
---|
212 | | if((getMusicSubunit( 0 ) == NULL)) { |
---|
213 | | debugError( "Unit doesn't have a Music subunit.\n"); |
---|
214 | | return false; |
---|
215 | | } |
---|
216 | | |
---|
217 | | // create a Mixer |
---|
218 | | // this removes the mixer if it already exists |
---|
219 | | // note: a mixer self-registers to it's parent |
---|
220 | | if(m_Mixer != NULL) { |
---|
221 | | delete m_Mixer; |
---|
222 | | } |
---|
223 | | |
---|
224 | | // create the mixer & register it |
---|
225 | | if(getAudioSubunit(0) == NULL) { |
---|
226 | | debugWarning("Could not find audio subunit, mixer not available.\n"); |
---|
227 | | m_Mixer = NULL; |
---|
228 | | } else { |
---|
229 | | m_Mixer = new Mixer(*this); |
---|
230 | | } |
---|
231 | | return true; |
---|