From 900b5757583ecf273a6f51e73c81ca15c1e7115b Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 27 Mar 2008 10:16:06 +0000 Subject: [PATCH] Pieter Palmers patch for FFADO driver. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2088 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 4 ++++ SConstruct | 2 +- linux/firewire/JackFFADODriver.cpp | 18 +++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7bdc7012..0501f083 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,10 @@ Fernando Lopez-Lezcano Jackdmp changes log --------------------------- +2008-03-27 Stephane Letz + + * Pieter Palmers patch FFADO driver. + 2008-03-26 Stephane Letz * JackWrapperAPI.cpp: use open_library in jack_client_name_size, jack_port_name_size and jack_port_type_size. diff --git a/SConstruct b/SConstruct index 4a27a4c5..be5ad0b7 100644 --- a/SConstruct +++ b/SConstruct @@ -158,7 +158,7 @@ if not env.GetOption('clean'): env['ENABLE_FREEBOB'] = False if env['BUILD_FOR_LINUX'] and env['ENABLE_FIREWIRE']: - env['FFADO_FLAGS'] = conf.GetPKGFlags('libffado', '1.999.14') + env['FFADO_FLAGS'] = conf.GetPKGFlags('libffado', '1.999.17') if env['FFADO_FLAGS'] == 0: print "--> Disabling 'firewire' backend since no useful FFADO installation found" env['ENABLE_FIREWIRE'] = False diff --git a/linux/firewire/JackFFADODriver.cpp b/linux/firewire/JackFFADODriver.cpp index 03b26213..ae051006 100644 --- a/linux/firewire/JackFFADODriver.cpp +++ b/linux/firewire/JackFFADODriver.cpp @@ -44,7 +44,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { -#define FIREWIRE_REQUIRED_FFADO_API_VERSION 7 +#define FIREWIRE_REQUIRED_FFADO_API_VERSION 8 #define jack_get_microseconds GetMicroSeconds @@ -273,7 +273,10 @@ JackFFADODriver::ffado_driver_wait (ffado_driver_t *driver, int extra_fd, int *s driver->wait_next = wait_ret + driver->period_usecs; // driver->engine->transport_cycle_start (driver->engine, wait_ret); - if (response == ffado_wait_xrun) { + if(response == ffado_wait_ok) { + // all good + *status = 0; + } else if (response == ffado_wait_xrun) { // xrun happened, but it's handled *status = 0; return 0; @@ -282,9 +285,18 @@ JackFFADODriver::ffado_driver_wait (ffado_driver_t *driver, int extra_fd, int *s // this should be fatal *status = -1; return 0; + } else if (response == ffado_wait_shutdown) { + // ffado requested shutdown (e.g. device unplugged) + // this should be fatal + *status = -1; + return 0; + } else { + // unknown response code. should be fatal + // this should be fatal + *status = -1; + return 0; } - *status = 0; fLastWaitUst = wait_ret; printExit();