Changeset 242
- Timestamp:
- 06/03/06 13:39:12 (16 years ago)
- Files:
-
- branches/libfreebob-2.0/src/bebob_light/bebob_light_avdevice.cpp (modified) (5 diffs)
- branches/libfreebob-2.0/src/bebob_light/bebob_light_avdevice.h (modified) (1 diff)
- branches/libfreebob-2.0/src/bounce/bounce_avdevice.cpp (modified) (8 diffs)
- branches/libfreebob-2.0/src/bounce/bounce_avdevice.h (modified) (3 diffs)
- branches/libfreebob-2.0/src/debugmodule/debugmodule.cpp (modified) (1 diff)
- branches/libfreebob-2.0/src/debugmodule/debugmodule.h (modified) (1 diff)
- branches/libfreebob-2.0/src/devicemanager.cpp (modified) (9 diffs)
- branches/libfreebob-2.0/src/freebob.cpp (modified) (1 diff)
- branches/libfreebob-2.0/src/libfreebobavc/avc_generic.cpp (modified) (1 diff)
- branches/libfreebob-2.0/src/libfreebobavc/ieee1394service.cpp (modified) (1 diff)
- branches/libfreebob-2.0/src/libstreaming/AmdtpStreamProcessor.cpp (modified) (3 diffs)
- branches/libfreebob-2.0/src/libstreaming/freebob_streaming.cpp (modified) (2 diffs)
- branches/libfreebob-2.0/src/Makefile.am (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/libfreebob-2.0/src/bebob_light/bebob_light_avdevice.cpp
r234 r242 1093 1093 AvDevice::enumerateSubUnits() 1094 1094 { 1095 bool musicSubunitFound=false; 1096 bool audioSubunitFound=false; 1097 1095 1098 SubUnitInfoCmd subUnitInfoCmd( m_1394Service ); 1096 1099 //subUnitInfoCmd.setVerbose( 1 ); … … 1105 1108 if ( !subUnitInfoCmd.fire() ) { 1106 1109 debugError( "Subunit info command failed\n" ); 1110 // shouldn't this be an error situation? 1111 return false; 1107 1112 } 1108 1113 … … 1127 1132 return false; 1128 1133 } 1134 m_subunits.push_back( subunit ); 1135 audioSubunitFound=true; 1129 1136 break; 1130 1137 case AVCCommand::eST_Music: … … 1134 1141 return false; 1135 1142 } 1143 m_subunits.push_back( subunit ); 1144 musicSubunitFound=true; 1136 1145 break; 1137 1146 default: … … 1143 1152 } 1144 1153 1145 m_subunits.push_back( subunit );1146 }1147 1148 return true;1154 } 1155 1156 // a BeBoB always has an audio and a music subunit 1157 return (musicSubunitFound && audioSubunitFound); 1149 1158 } 1150 1159 branches/libfreebob-2.0/src/bebob_light/bebob_light_avdevice.h
r234 r242 139 139 int m_transmitProcessorBandwidth; 140 140 141 // FIXME: remove this debug line142 FreebobStreaming::AmdtpReceiveStreamProcessor *m_receiveProcessor2;143 int m_receiveProcessor2Bandwidth;144 145 146 141 DECLARE_DEBUG_MODULE; 147 142 }; branches/libfreebob-2.0/src/bounce/bounce_avdevice.cpp
r199 r242 23 23 #include "configrom.h" 24 24 25 #include "libfreebobavc/avc_plug_info.h" 26 #include "libfreebobavc/avc_extended_plug_info.h" 27 #include "libfreebobavc/avc_subunit_info.h" 28 #include "libfreebobavc/avc_extended_stream_format.h" 29 #include "libfreebobavc/serialize.h" 25 30 #include "libfreebobavc/ieee1394service.h" 26 31 #include "libfreebobavc/avc_definitions.h" … … 28 33 #include "debugmodule/debugmodule.h" 29 34 35 #include <iostream> 36 #include <sstream> 37 #include <stdint.h> 38 30 39 #include <string> 31 #include <stdint.h>32 #include <iostream>33 40 #include <netinet/in.h> 34 41 35 42 namespace Bounce { 36 43 37 IMPL_DEBUG_MODULE( BounceDevice, BounceDevice, DEBUG_LEVEL_ NORMAL);44 IMPL_DEBUG_MODULE( BounceDevice, BounceDevice, DEBUG_LEVEL_VERBOSE ); 38 45 39 46 BounceDevice::BounceDevice( Ieee1394Service& ieee1394service, … … 43 50 , m_nodeId( nodeId ) 44 51 , m_verboseLevel( verboseLevel ) 45 { 46 if ( m_verboseLevel ) { 47 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 48 } 52 , m_samplerate (44100) 53 , m_id(0) 54 , m_receiveProcessor ( 0 ) 55 , m_receiveProcessorBandwidth ( -1 ) 56 , m_transmitProcessor ( 0 ) 57 , m_transmitProcessorBandwidth ( -1 ) 58 { 59 setDebugLevel( m_verboseLevel ); 60 49 61 debugOutput( DEBUG_LEVEL_VERBOSE, "Created Bounce::BounceDevice (NodeID %d)\n", 50 62 nodeId ); … … 70 82 quadlet_t request[6]; 71 83 quadlet_t *resp; 84 85 debugOutput( DEBUG_LEVEL_VERBOSE, "Discovering...\n" ); 72 86 73 87 std::string vendor=std::string(FREEBOB_BOUNCE_SERVER_VENDORNAME); … … 78 92 return false; 79 93 } 80 94 /* 81 95 // AVC1394_COMMAND_INPUT_PLUG_SIGNAL_FORMAT 82 96 request[0] = htonl( AVC1394_CTYPE_STATUS | (AVC1394_SUBUNIT_TYPE_FREEBOB_BOUNCE_SERVER << 19) | (0 << 16) … … 91 105 if(resp) { 92 106 char *buffer=(char *)&resp[1]; 107 resp[resp_len-1]=0; 93 108 xmlDescription=buffer; 94 109 // hexDump((unsigned char *)resp,6*4); 95 110 } 96 111 */ 97 112 return true; 98 113 } 99 114 100 bool 101 BounceDevice::setSamplingFrequency( ESamplingFrequency samplingFrequency ) 102 { 115 int BounceDevice::getSamplingFrequency( ) { 116 return m_samplerate; 117 } 118 119 bool BounceDevice::setSamplingFrequency( ESamplingFrequency samplingFrequency ) { 120 int retval=convertESamplingFrequency( samplingFrequency ); 121 if (retval) { 122 m_samplerate=retval; 123 return true; 124 } else return false; 125 } 126 127 bool BounceDevice::setId( unsigned int id) { 128 debugOutput( DEBUG_LEVEL_VERBOSE, "Set id to %d...\n", id); 129 m_id=id; 103 130 return true; 104 131 } … … 107 134 BounceDevice::showDevice() const 108 135 { 109 printf("\nI am the bouncedevice, the bouncedevice I am...\n" );110 printf("Vendor : %s\n", m_configRom->getVendorName().c_str());111 printf("Model : %s\n", m_configRom->getModelName().c_str());112 printf("Node : %d\n", m_nodeId);113 printf("GUID : 0x%016llX\n", m_configRom->getGuid());114 printf( "ACVtest response : %s\n", xmlDescription.c_str());115 printf("\n" );136 debugOutput(DEBUG_LEVEL_NORMAL, "\nI am the bouncedevice, the bouncedevice I am...\n" ); 137 debugOutput(DEBUG_LEVEL_NORMAL, "Vendor : %s\n", m_configRom->getVendorName().c_str()); 138 debugOutput(DEBUG_LEVEL_NORMAL, "Model : %s\n", m_configRom->getModelName().c_str()); 139 debugOutput(DEBUG_LEVEL_NORMAL, "Node : %d\n", m_nodeId); 140 debugOutput(DEBUG_LEVEL_NORMAL, "GUID : 0x%016llX\n", m_configRom->getGuid()); 141 debugOutput(DEBUG_LEVEL_NORMAL, "AVC test response : %s\n", xmlDescription.c_str()); 142 debugOutput(DEBUG_LEVEL_NORMAL, "\n" ); 116 143 } 117 144 … … 119 146 BounceDevice::addXmlDescription( xmlNodePtr deviceNode ) 120 147 { 121 122 xmlDocPtr doc; 123 xmlNodePtr cur; 124 xmlNodePtr copy; 125 126 doc = xmlParseFile("freebob_bouncedevice.xml"); 127 128 if (doc == NULL ) { 129 debugError( "freebob_bouncedevice.xml not parsed successfully. \n"); 148 149 return false; 150 151 } 152 153 #define BOUNCE_NR_OF_CHANNELS 2 154 155 bool 156 BounceDevice::addPortsToProcessor( 157 FreebobStreaming::StreamProcessor *processor, 158 FreebobStreaming::AmdtpAudioPort::E_Direction direction) { 159 160 debugOutput(DEBUG_LEVEL_VERBOSE,"Adding ports to processor\n"); 161 162 int i=0; 163 for (i=0;i<BOUNCE_NR_OF_CHANNELS;i++) { 164 char *buff; 165 asprintf(&buff,"dev%d%s_Port%d",m_id,direction==FreebobStreaming::AmdtpAudioPort::E_Playback?"p":"c",i); 166 167 FreebobStreaming::Port *p=NULL; 168 p=new FreebobStreaming::AmdtpAudioPort( 169 buff, 170 direction, 171 // \todo: streaming backend expects indexing starting from 0 172 // but bebob reports it starting from 1. Decide where 173 // and how to handle this (pp: here) 174 i, 175 0, 176 FreebobStreaming::AmdtpPortInfo::E_MBLA, 177 0 178 ); 179 180 if (!p) { 181 debugOutput(DEBUG_LEVEL_VERBOSE, "Skipped port %s\n",buff); 182 } else { 183 184 if (!processor->addPort(p)) { 185 debugWarning("Could not register port with stream processor\n"); 186 free(buff); 187 return false; 188 } else { 189 debugOutput(DEBUG_LEVEL_VERBOSE, "Added port %s\n",buff); 190 191 } 192 } 193 194 free(buff); 195 196 } 197 198 return true; 199 } 200 201 bool 202 BounceDevice::prepare() { 203 204 debugOutput(DEBUG_LEVEL_NORMAL, "Preparing BounceDevice...\n" ); 205 206 m_receiveProcessor=new FreebobStreaming::AmdtpReceiveStreamProcessor( 207 m_1394Service->getPort(), 208 m_samplerate, 209 BOUNCE_NR_OF_CHANNELS); 210 211 if(!m_receiveProcessor->init()) { 212 debugFatal("Could not initialize receive processor!\n"); 130 213 return false; 131 } 132 133 cur = xmlDocGetRootElement(doc); 134 135 if (cur == NULL) { 136 debugError( "empty document\n"); 137 xmlFreeDoc(doc); 214 215 } 216 217 if (!addPortsToProcessor(m_receiveProcessor, 218 FreebobStreaming::AmdtpAudioPort::E_Capture)) { 219 debugFatal("Could not add ports to processor!\n"); 220 return false; 221 } 222 223 // do the transmit processor 224 m_transmitProcessor=new FreebobStreaming::AmdtpTransmitStreamProcessor( 225 m_1394Service->getPort(), 226 m_samplerate, 227 BOUNCE_NR_OF_CHANNELS); 228 229 m_transmitProcessor->setVerboseLevel(getDebugLevel()); 230 231 if(!m_transmitProcessor->init()) { 232 debugFatal("Could not initialize transmit processor!\n"); 138 233 return false; 139 } 140 141 if (xmlStrcmp(cur->name, (const xmlChar *) "FreeBobBounceDevice")) { 142 debugError( "document of the wrong type, root node != FreeBobBounceDevice\n"); 143 xmlFreeDoc(doc); 144 return false; 145 } 146 147 cur = cur->xmlChildrenNode; 148 while (cur != NULL) { 149 char *result; 150 151 copy=xmlCopyNode(cur,1); 152 153 // debugOutput(DEBUG_LEVEL_NORMAL,"copying %s\n",cur->name); 154 155 156 if (!copy || !xmlAddChild(deviceNode, copy)) { 157 debugError( "could not add child node\n"); 158 cur = cur->next; 159 continue; 160 } 161 162 // add the node id 163 // if (xmlStrcmp(copy->name, (const xmlChar *) "ConnectionSet")) { 164 // asprintf( &result, "%d", m_nodeId); 165 // if ( !xmlNewChild( copy, 0, 166 // BAD_CAST "Node", BAD_CAST result ) ) { 167 // debugError( "Couldn't create 'Node' node\n" ); 168 // return false; 169 // free(result); 170 // } 171 // free(result); 172 // } 173 174 cur = cur->next; 175 } 176 177 xmlFreeDoc(doc); 178 179 return true; 180 } 181 182 } 234 235 } 236 237 if (!addPortsToProcessor(m_transmitProcessor, 238 FreebobStreaming::AmdtpAudioPort::E_Playback)) { 239 debugFatal("Could not add ports to processor!\n"); 240 return false; 241 } 242 243 return true; 244 } 245 246 int 247 BounceDevice::getStreamCount() { 248 return 2; // one receive, one transmit 249 } 250 251 FreebobStreaming::StreamProcessor * 252 BounceDevice::getStreamProcessorByIndex(int i) { 253 switch (i) { 254 case 0: 255 return m_receiveProcessor; 256 case 1: 257 return m_transmitProcessor; 258 default: 259 return NULL; 260 } 261 return 0; 262 } 263 264 int 265 BounceDevice::startStreamByIndex(int i) { 266 // int iso_channel=0; 267 // int plug=0; 268 // int hostplug=-1; 269 // 270 switch (i) { 271 case 0: 272 // // do connection management: make connection 273 // iso_channel = iec61883_cmp_connect( 274 // m_1394Service->getHandle(), 275 // m_nodeId | 0xffc0, 276 // &plug, 277 // raw1394_get_local_id (m_1394Service->getHandle()), 278 // &hostplug, 279 // &m_receiveProcessorBandwidth); 280 // 281 // // set the channel obtained by the connection management 282 m_receiveProcessor->setChannel(1); 283 break; 284 case 1: 285 // // do connection management: make connection 286 // iso_channel = iec61883_cmp_connect( 287 // m_1394Service->getHandle(), 288 // raw1394_get_local_id (m_1394Service->getHandle()), 289 // &hostplug, 290 // m_nodeId | 0xffc0, 291 // &plug, 292 // &m_transmitProcessorBandwidth); 293 // 294 // // set the channel obtained by the connection management 295 // // m_receiveProcessor2->setChannel(iso_channel); 296 m_transmitProcessor->setChannel(0); 297 break; 298 default: 299 return -1; 300 } 301 302 return 0; 303 304 } 305 306 int 307 BounceDevice::stopStreamByIndex(int i) { 308 // do connection management: break connection 309 310 // int plug=0; 311 // int hostplug=-1; 312 // 313 // switch (i) { 314 // case 0: 315 // // do connection management: break connection 316 // iec61883_cmp_disconnect( 317 // m_1394Service->getHandle(), 318 // m_nodeId | 0xffc0, 319 // plug, 320 // raw1394_get_local_id (m_1394Service->getHandle()), 321 // hostplug, 322 // m_receiveProcessor->getChannel(), 323 // m_receiveProcessorBandwidth); 324 // 325 // break; 326 // case 1: 327 // // do connection management: break connection 328 // iec61883_cmp_disconnect( 329 // m_1394Service->getHandle(), 330 // raw1394_get_local_id (m_1394Service->getHandle()), 331 // hostplug, 332 // m_nodeId | 0xffc0, 333 // plug, 334 // m_transmitProcessor->getChannel(), 335 // m_transmitProcessorBandwidth); 336 // 337 // // set the channel obtained by the connection management 338 // // m_receiveProcessor2->setChannel(iso_channel); 339 // break; 340 // default: 341 // return 0; 342 // } 343 344 return 0; 345 } 346 347 348 349 } branches/libfreebob-2.0/src/bounce/bounce_avdevice.h
r199 r242 23 23 #define BOUNCEDEVICE_H 24 24 25 #include "iavdevice.h"26 27 25 #include "debugmodule/debugmodule.h" 28 26 #include "libfreebobavc/avc_definitions.h" 29 27 #include "libfreebobavc/avc_extended_cmd_generic.h" 30 28 #include "libfreebob/xmlparser.h" 29 30 #include "bebob_light/bebob_light_avplug.h" 31 #include "bebob_light/bebob_light_avdevicesubunit.h" 32 33 #include "libstreaming/AmdtpStreamProcessor.h" 34 #include "libstreaming/AmdtpPort.h" 35 #include "libstreaming/AmdtpPortInfo.h" 36 37 #include "iavdevice.h" 31 38 #include "libfreebob/freebob_bounce.h" 32 39 … … 45 52 virtual bool discover(); 46 53 virtual ConfigRom& getConfigRom() const; 54 47 55 virtual bool addXmlDescription( xmlNodePtr deviceNode ); 56 48 57 virtual bool setSamplingFrequency( ESamplingFrequency samplingFrequency ); 58 virtual int getSamplingFrequency( ); 59 60 virtual bool setId(unsigned int id); 61 62 virtual bool prepare(); 63 64 virtual int getStreamCount(); 65 66 virtual FreebobStreaming::StreamProcessor *getStreamProcessorByIndex(int i); 67 68 virtual int startStreamByIndex(int i); 69 70 virtual int stopStreamByIndex(int i); 71 49 72 virtual void showDevice() const; 50 73 … … 58 81 std::string xmlDescription; 59 82 83 unsigned int m_samplerate; 84 unsigned int m_id; 85 86 // streaming stuff 87 FreebobStreaming::AmdtpReceiveStreamProcessor *m_receiveProcessor; 88 int m_receiveProcessorBandwidth; 89 90 FreebobStreaming::AmdtpTransmitStreamProcessor *m_transmitProcessor; 91 int m_transmitProcessorBandwidth; 92 93 bool addPortsToProcessor( 94 FreebobStreaming::StreamProcessor *processor, 95 FreebobStreaming::AmdtpAudioPort::E_Direction direction); 96 60 97 61 98 DECLARE_DEBUG_MODULE; branches/libfreebob-2.0/src/debugmodule/debugmodule.cpp
r233 r242 58 58 << endl; 59 59 } 60 60 61 } 61 62 branches/libfreebob-2.0/src/debugmodule/debugmodule.h
r233 r242 31 31 32 32 /* MB_NEXT() relies on the fact that MB_BUFFERS is a power of two */ 33 #define MB_BUFFERS 1 2833 #define MB_BUFFERS 1024 34 34 #define MB_NEXT(index) ((index+1) & (MB_BUFFERS-1)) 35 35 #define MB_BUFFERSIZE 256 /* message length limit */ branches/libfreebob-2.0/src/devicemanager.cpp
r234 r242 33 33 34 34 #include <iostream> 35 #include <unistd.h> 35 36 36 37 using namespace std; … … 42 43 { 43 44 // m_probeList.push_back( probeMotu ); 44 45 //m_probeList.push_back( probeBounce );45 m_probeList.push_back( probeBeBoB ); 46 m_probeList.push_back( probeBounce ); 46 47 } 47 48 … … 147 148 if ( !avDevice->discover() ) { 148 149 delete avDevice; 150 debugOutput( DEBUG_LEVEL_VERBOSE, "Not a BeBoB device...\n" ); 151 return NULL; 152 } 153 debugOutput( DEBUG_LEVEL_VERBOSE, "BeBoB device discovered...\n" ); 154 return avDevice; 155 } 156 157 IAvDevice* 158 DeviceManager::probeBounce(Ieee1394Service& service, int id, int level) 159 { 160 IAvDevice* avDevice = new Bounce::BounceDevice( service, id, level ); 161 if ( !avDevice ) { 149 162 return NULL; 150 163 } 164 165 if ( !avDevice->discover() ) { 166 debugOutput( DEBUG_LEVEL_VERBOSE, "Not a Bounce device...\n"); 167 168 delete avDevice; 169 return NULL; 170 } 171 debugOutput( DEBUG_LEVEL_VERBOSE, "Bounce device discovered...\n"); 172 151 173 return avDevice; 152 174 } 153 175 154 // IAvDevice*155 // DeviceManager::probeBounce(Ieee1394Service& service, int id, int level)156 // {157 // IAvDevice* avDevice = new Bounce::BounceDevice( service, id, level );158 // if ( !avDevice ) {159 // return NULL;160 // }161 //162 // if ( !avDevice->discover() ) {163 // delete avDevice;164 // return NULL;165 // }166 // return avDevice;167 // }168 //169 176 // IAvDevice* 170 177 // DeviceManager::probeMotu(Ieee1394Service& service, int id, int level) … … 288 295 { 289 296 debugError( "Couldn't create 'NodeId' node" ); 297 free(result); 290 298 return false; 291 299 } … … 303 311 xmlFreeDoc( doc ); 304 312 xmlCleanupParser(); 313 free(result); 305 314 return 0; 306 315 } … … 315 324 xmlFreeDoc( doc ); 316 325 xmlCleanupParser(); 326 free(result); 317 327 return 0; 318 328 } … … 327 337 xmlFreeDoc( doc ); 328 338 xmlCleanupParser(); 339 free(result); 329 340 return 0; 330 341 } … … 338 349 xmlFreeDoc( doc ); 339 350 xmlCleanupParser(); 351 free(result); 340 352 return false; 341 353 } … … 345 357 xmlFreeDoc( doc ); 346 358 xmlCleanupParser(); 347 return 0; 348 } 359 free(result); 360 return 0; 361 } 362 363 free(result); 349 364 } 350 365 branches/libfreebob-2.0/src/freebob.cpp
r233 r242 54 54 { 55 55 delete DebugModuleManager::instance(); 56 56 57 } 57 58 #ifdef __cplusplus branches/libfreebob-2.0/src/libfreebobavc/avc_generic.cpp
r185 r242 50 50 getSubunitType(), getSubunitId() ); 51 51 se.write( m_subunit, buf ); 52 free(buf); 52 53 se.write( m_opcode, "AVCCommand opcode" ); 53 54 return true; branches/libfreebob-2.0/src/libfreebobavc/ieee1394service.cpp
r185 r242 37 37 Ieee1394Service::~Ieee1394Service() 38 38 { 39 if (m_handle) { 40 raw1394_destroy_handle(m_handle); 41 } 39 42 } 40 43 branches/libfreebob-2.0/src/libstreaming/AmdtpStreamProcessor.cpp
r235 r242 718 718 unsigned char channel, unsigned char tag, unsigned char sy, 719 719 unsigned int cycle, unsigned int dropped) { 720 720 721 721 enum raw1394_iso_disposition retval=RAW1394_ISO_OK; 722 722 … … 724 724 assert(packet); 725 725 726 // how are we going to get this right??? 727 m_running=true; 728 726 729 if((packet->fmt == 0x10) && (packet->fdf != 0xFF) && (packet->dbs>0) && (length>=2*sizeof(quadlet_t))) { 727 730 unsigned int nevents=((length / sizeof (quadlet_t)) - 2)/packet->dbs; 728 731 729 732 // signal that we're running 730 if(nevents) m_running=true;733 // if(nevents) m_running=true; 731 734 732 735 // don't process the stream when it is not enabled. … … 734 737 return (int)RAW1394_ISO_OK; 735 738 } 736 737 739 738 740 unsigned int write_size=nevents*sizeof(quadlet_t)*m_dimension; branches/libfreebob-2.0/src/libstreaming/freebob_streaming.cpp
r235 r242 117 117 118 118 // discover the devices on the bus 119 if(!dev->m_deviceManager->discover(DEBUG_LEVEL_ NORMAL)) {119 if(!dev->m_deviceManager->discover(DEBUG_LEVEL_VERBOSE)) { 120 120 debugOutput(DEBUG_LEVEL_VERBOSE, "Could not discover devices\n"); 121 121 return 0; … … 134 134 for(j=0; j<device->getStreamCount();j++) { 135 135 StreamProcessor *streamproc=device->getStreamProcessorByIndex(j); 136 137 136 debugOutput(DEBUG_LEVEL_VERBOSE, "Registering stream processor %d of device %d with processormanager\n",j,i); 138 137 if (!dev->processorManager->registerProcessor(streamproc)) { branches/libfreebob-2.0/src/Makefile.am
r222 r242 30 30 fbtypes.h \ 31 31 bebob_light/bebob_light_avdevice.h \ 32 bebob_light/bebob_light_avdevicesubunit.h 32 bebob_light/bebob_light_avdevicesubunit.h \ 33 33 bebob_light/bebob_light_avplug.h \ 34 bounce/bounce_avdevice.h 34 35 # bebob/bebob_avdevice.h \ 35 36 # bebob/bebob_avdevice_subunit.h \ 36 37 # bebob/bebob_avplug.h \ 37 38 # bebob/bebob_functionblock.h \ 38 # bounce/bounce_avdevice.h \39 39 # motu/motu_avdevice.h 40 40 … … 47 47 bebob_light/bebob_light_avdevice.cpp \ 48 48 bebob_light/bebob_light_avdevicesubunit.cpp \ 49 bebob_light/bebob_light_avplug.cpp 49 bebob_light/bebob_light_avplug.cpp \ 50 bounce/bounce_avdevice.cpp 50 51 # bebob/bebob_avdevice.cpp \ 51 52 # bebob/bebob_avdevice_xml.cpp \ … … 54 55 # bebob/bebob_avplug_xml.cpp \ 55 56 # bebob/bebob_functionblock.cpp \ 56 # bounce/bounce_avdevice.cpp \57 57 # motu/motu_avdevice.cpp 58 58