Index: /branches/libffado-scons_porting_work/src/libstreaming/AmdtpStreamProcessor.cpp =================================================================== --- /branches/libffado-scons_porting_work/src/libstreaming/AmdtpStreamProcessor.cpp (revision 494) +++ /branches/libffado-scons_porting_work/src/libstreaming/AmdtpStreamProcessor.cpp (revision 547) @@ -80,12 +80,22 @@ unsigned char *tag, unsigned char *sy, int cycle, unsigned int dropped, unsigned int max_length) { - + struct iec61883_packet *packet = (struct iec61883_packet *) data; - if (cycle<0) return RAW1394_ISO_OK; - - m_last_cycle=cycle; - + + if (cycle<0) { + debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Xmit handler for cycle %d, (running=%d, enabled=%d,%d)\n", + cycle, m_running, m_disabled, m_is_disabled); + + *tag = 0; + *sy = 0; + *length=0; + return RAW1394_ISO_OK; + + } + debugOutput(DEBUG_LEVEL_VERY_VERBOSE,"Xmit handler for cycle %d, (running=%d, enabled=%d,%d)\n", cycle, m_running, m_disabled, m_is_disabled); + + m_last_cycle=cycle; #ifdef DEBUG Index: /branches/libffado-scons_porting_work/src/libstreaming/IsoHandler.cpp =================================================================== --- /branches/libffado-scons_porting_work/src/libstreaming/IsoHandler.cpp (revision 445) +++ /branches/libffado-scons_porting_work/src/libstreaming/IsoHandler.cpp (revision 547) @@ -569,5 +569,6 @@ bool IsoXmitHandler::start(int cycle) { - debugOutput( DEBUG_LEVEL_VERBOSE, "start on cycle %d\n", cycle); + debugOutput( DEBUG_LEVEL_VERBOSE, "start on cycle %d, %d prebuffers\n", + cycle, m_prebuffers); if(!(IsoHandler::start(cycle))) { Index: /branches/libffado-scons_porting_work/src/bebob/bebob_avdevice.cpp =================================================================== --- /branches/libffado-scons_porting_work/src/bebob/bebob_avdevice.cpp (revision 516) +++ /branches/libffado-scons_porting_work/src/bebob/bebob_avdevice.cpp (revision 547) @@ -60,4 +60,5 @@ {0x000f1b, 0x00010064, "ESI", "Quatafire 610"}, + {0x00130e, 0x00000000, "Focusrite", "Saffire (LE)"}, {0x00130e, 0x00000003, "Focusrite", "Saffire Pro26IO"}, {0x00130e, 0x00000006, "Focusrite", "Saffire Pro10IO"}, @@ -436,7 +437,19 @@ } - AvPlugVector digitalPCRInputPlugs = getPlugsByType( m_externalPlugs, + AvPlugVector digitalExternalInputPlugs = getPlugsByType( m_externalPlugs, AvPlug::eAPD_Input, AvPlug::eAPT_Digital ); + if ( !digitalExternalInputPlugs.size() ) { + debugOutput( DEBUG_LEVEL_VERBOSE, "No external digital input plugs found\n" ); + + } + + AvPlugVector syncExternalInputPlugs = getPlugsByType( m_externalPlugs, + AvPlug::eAPD_Input, + AvPlug::eAPT_Sync ); + if ( !syncExternalInputPlugs.size() ) { + debugOutput( DEBUG_LEVEL_VERBOSE, "No external sync input plugs found\n" ); + + } AvPlugVector syncMSUInputPlugs = m_pPlugManager->getPlugsByType( @@ -472,6 +485,8 @@ debugOutput( DEBUG_LEVEL_VERBOSE, "PCR Iso Output Plugs:\n" ); showAvPlugs( isoPCROutputPlugs ); - debugOutput( DEBUG_LEVEL_VERBOSE, "PCR digital Input Plugs:\n" ); - showAvPlugs( digitalPCRInputPlugs ); + debugOutput( DEBUG_LEVEL_VERBOSE, "External digital Input Plugs:\n" ); + showAvPlugs( digitalExternalInputPlugs ); + debugOutput( DEBUG_LEVEL_VERBOSE, "External sync Input Plugs:\n" ); + showAvPlugs( syncExternalInputPlugs ); debugOutput( DEBUG_LEVEL_VERBOSE, "MSU Sync Input Plugs:\n" ); showAvPlugs( syncMSUInputPlugs ); @@ -503,7 +518,13 @@ "Internal (CSP)" ); - // Check all external PCR digital input to MSU input connections + // Check all external digital input to MSU input connections // -> SPDIF/ADAT sync - checkSyncConnectionsAndAddToList( digitalPCRInputPlugs, + checkSyncConnectionsAndAddToList( digitalExternalInputPlugs, + syncMSUInputPlugs, + "Digital Input Sync" ); + + // Check all external sync input to MSU input connections + // -> SPDIF/ADAT sync + checkSyncConnectionsAndAddToList( syncExternalInputPlugs, syncMSUInputPlugs, "Digital Input Sync" ); @@ -1160,5 +1181,5 @@ return false; } - + if (!addPlugToProcessor(*outputPlug,p, Streaming::Port::E_Capture)) { @@ -1281,4 +1302,15 @@ case ExtendedPlugInfoClusterInfoSpecificData::ePT_MADI: case ExtendedPlugInfoClusterInfoSpecificData::ePT_Digital: + p=new Streaming::AmdtpAudioPort( + portname.str(), + direction, + // \todo: streaming backend expects indexing starting from 0 + // but bebob reports it starting from 1. Decide where + // and how to handle this (pp: here) + channelInfo->m_streamPosition - 1, + channelInfo->m_location - 1, + Streaming::AmdtpPortInfo::E_MBLA + ); + break; case ExtendedPlugInfoClusterInfoSpecificData::ePT_NoType: default: