Skip to content

Commit

Permalink
Merge pull request jackaudio#1 from AndrewCooper/qnx
Browse files Browse the repository at this point in the history
Qnx
  • Loading branch information
shaun-tierney committed Sep 4, 2015
2 parents 460063d + 33000e7 commit d49e6e2
Show file tree
Hide file tree
Showing 23 changed files with 2,877 additions and 38 deletions.
5 changes: 5 additions & 0 deletions common/JackAudioAdapterFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define JackPlatformAdapter JackAlsaAdapter
#endif

#ifdef __QNX__
#include "JackIoAudioAdapter.h"
#define JackPlatformAdapter JackIoAudioAdapter
#endif

#if defined(__sun__) || defined(sun)
#include "JackOSSAdapter.h"
#define JackPlatformAdapter JackOSSAdapter
Expand Down
5 changes: 5 additions & 0 deletions common/JackControlAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,12 @@ jackctl_setup_signals(
sigfillset(&allsignals);
action.sa_handler = signal_handler;
action.sa_mask = allsignals;
#ifdef __QNX__
// SA_RESTART is not supported in QNX 6.6.0
action.sa_flags = SA_RESETHAND;
#else
action.sa_flags = SA_RESTART|SA_RESETHAND;
#endif

for (i = 1; i < NSIG; i++)
{
Expand Down
2 changes: 1 addition & 1 deletion common/jack/systemdeps.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#endif /* _WIN32 && !__CYGWIN__ && !GNU_WIN32 */

#if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun) || defined(__unix__) || defined(__CYGWIN__) || defined(GNU_WIN32)
#if defined(__APPLE__) || defined(__linux__) || defined(__QNX__) || defined(__sun__) || defined(sun) || defined(__unix__) || defined(__CYGWIN__) || defined(GNU_WIN32)

#if defined(__CYGWIN__) || defined(GNU_WIN32)
#include <stdint.h>
Expand Down
46 changes: 31 additions & 15 deletions common/ringbuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,21 +67,16 @@ size_t jack_ringbuffer_write_space(const jack_ringbuffer_t *rb);
LIB_EXPORT jack_ringbuffer_t *
jack_ringbuffer_create (size_t sz)
{
int power_of_two;
jack_ringbuffer_t *rb;

if ((rb = (jack_ringbuffer_t *) malloc (sizeof (jack_ringbuffer_t))) == NULL) {
return NULL;
}

for (power_of_two = 1; 1 << power_of_two < sz; power_of_two++);
rb->buf = NULL;
jack_ringbuffer_reset_size( rb, sz );

rb->size = 1 << power_of_two;
rb->size_mask = rb->size;
rb->size_mask -= 1;
rb->write_ptr = 0;
rb->read_ptr = 0;
if ((rb->buf = (char *) malloc (rb->size)) == NULL) {
if (rb->buf == NULL) {
free (rb);
return NULL;
}
Expand Down Expand Up @@ -129,17 +124,38 @@ jack_ringbuffer_reset (jack_ringbuffer_t * rb)
memset(rb->buf, 0, rb->size);
}

/* Reset the read and write pointers to zero. This is not thread
safe. */
/* Reset the size of the ringbuffer.
Reallocates the internal buffer using the next power-of-two size up from
the requested size.
If the reallocation fails, the previous buffer is left intact.
*/

LIB_EXPORT void
jack_ringbuffer_reset_size (jack_ringbuffer_t * rb, size_t sz)
{
rb->size = sz;
rb->size_mask = rb->size;
rb->size_mask -= 1;
rb->read_ptr = 0;
rb->write_ptr = 0;
/* Attempt to reallocate buffer to size sz */
int power_of_two;
for (power_of_two = 1; 1 << power_of_two < sz; power_of_two++);
size_t newsz = 1 << power_of_two;

void* newbuf = realloc (rb->buf, newsz);
if (NULL != newbuf)
{
rb->buf = newbuf;
rb->size = newsz;
rb->size_mask = rb->size;
rb->size_mask -= 1;
rb->read_ptr = 0;
rb->write_ptr = 0;
}
else
{
/* Reallocation failed. Ringbuffer is left in initial state
* so application must check ringbuffer size to see if
* the resize succeeded. */
}
}

/* Return the number of bytes available for reading. This is the
Expand Down
45 changes: 45 additions & 0 deletions common/shm.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifndef USE_POSIX_SHM
#include <sys/shm.h>
#endif
#include <sys/sem.h>
#include <stdlib.h>

Expand Down Expand Up @@ -176,6 +178,49 @@ semaphore_init () {return 0;}
static int
semaphore_add (int value) {return 0;}

#elif defined(__QNX__)
#include <semaphore.h>

static sem_t sem;

/* all semaphore errors are fatal -- issue message, but do not return */
static void
semaphore_error (char *msg)
{
jack_error ("JACK semaphore error: %s (%s)",
msg, strerror (errno));
}

static int
semaphore_init ()
{
semid = sem_init(&sem, JACK_SEMAPHORE_KEY, 1);

if( semid == -1)
{
semaphore_error("semaphore_init()");
}


return 0;
}

static inline int
semaphore_add (int value)
{
while( value > 0 )
{
sem_post( &sem );
--value;
}
while( value < 0 )
{
sem_wait( &sem );
++value;
}
return 0;
}

#else
/* all semaphore errors are fatal -- issue message, but do not return */
static void
Expand Down
49 changes: 49 additions & 0 deletions common/wscript
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ def create_jack_process_obj(bld, target, sources, uselib = None):
env_includes = ['../macosx', '../posix', '../macosx/coreaudio']
if bld.env['IS_LINUX']:
env_includes = ['../linux', '../posix', '../linux/alsa']
if bld.env['IS_QNX']:
env_includes = ['../qnx', '../posix', '../qnx/ioaudio']
if bld.env['IS_SUN']:
env_includes = ['../solaris', '../posix', '../solaris/oss']
if bld.env['IS_WINDOWS']:
Expand All @@ -36,6 +38,8 @@ def create_jack_process_obj(bld, target, sources, uselib = None):
process.source = sources
if bld.env['IS_LINUX']:
process.env.append_value("CPPFLAGS", "-fvisibility=hidden")
if bld.env['IS_QNX']:
process.env.append_value("CPPFLAGS", "-fvisibility=hidden")
if bld.env['IS_MACOSX']:
process.env.append_value("CPPFLAGS", "-mmacosx-version-min=10.4 -arch i386 -arch ppc -arch x86_64")
#process.env.append_value("LINKFLAGS", "-arch i386 -arch ppc -arch x86_64")
Expand Down Expand Up @@ -93,6 +97,22 @@ def build(bld):
uselib.append('RT')
uselib.append('DL')

if bld.env['IS_QNX']:
common_libsources += [
'JackDebugClient.cpp',
'timestamps.c',
'../posix/JackPosixThread.cpp',
'../posix/JackPosixSemaphore.cpp',
'../posix/JackPosixProcessSync.cpp',
'../posix/JackPosixMutex.cpp',
'../posix/JackSocket.cpp',
'../qnx/JackQnxTime.c',
]
includes = ['../qnx', '../posix'] + includes
uselib.append('RT')
uselib.append('DL')
uselib.append('SOCKET')

if bld.env['IS_SUN']:
common_libsources += [
'JackDebugClient.cpp',
Expand Down Expand Up @@ -158,6 +178,12 @@ def build(bld):
'../posix/JackPosixServerLaunch.cpp',
]

if bld.env['IS_QNX']:
clientlib.source += [
'../posix/JackSocketClientChannel.cpp',
'../posix/JackPosixServerLaunch.cpp',
]

if bld.env['IS_SUN']:
clientlib.source += [
'../posix/JackSocketClientChannel.cpp',
Expand All @@ -183,6 +209,9 @@ def build(bld):
if bld.env['IS_LINUX']:
clientlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")

if bld.env['IS_QNX']:
clientlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")

if bld.env['IS_MACOSX']:
clientlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")
clientlib.env.append_value("CPPFLAGS", "-mmacosx-version-min=10.4 -arch i386 -arch ppc -arch x86_64")
Expand Down Expand Up @@ -252,6 +281,14 @@ def build(bld):
'../posix/JackNetUnixSocket.cpp',
]

if bld.env['IS_QNX']:
serverlib.source += [
'../posix/JackSocketServerChannel.cpp',
'../posix/JackSocketNotifyChannel.cpp',
'../posix/JackSocketServerNotifyChannel.cpp',
'../posix/JackNetUnixSocket.cpp',
]

if bld.env['IS_SUN']:
serverlib.source += [
'../posix/JackSocketServerChannel.cpp',
Expand Down Expand Up @@ -283,6 +320,9 @@ def build(bld):
if bld.env['IS_LINUX']:
serverlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")

if bld.env['IS_QNX']:
serverlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")

if bld.env['IS_MACOSX']:
serverlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")
serverlib.env.append_value("CPPFLAGS", "-mmacosx-version-min=10.4 -arch i386 -arch ppc -arch x86_64")
Expand Down Expand Up @@ -321,6 +361,10 @@ def build(bld):
netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../linux/JackLinuxTime.c']
netlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")

if bld.env['IS_QNX']:
netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp','../posix/JackPosixMutex.cpp','../qnx/JackQnxTime.c']
netlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")

if bld.env['IS_SUN']:
netlib.source += ['../posix/JackNetUnixSocket.cpp','../posix/JackPosixThread.cpp', '../posix/JackPosixMutex.cpp', '../solaris/JackSolarisTime.c']
netlib.env.append_value("CPPFLAGS", "-fvisibility=hidden")
Expand Down Expand Up @@ -370,6 +414,11 @@ def build(bld):
process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
process.use = ['ALSA', 'SAMPLERATE']

if bld.env['BUILD_ADAPTER'] and bld.env['IS_QNX']:
audio_adapter_sources += ['../qnx/ioaudio/JackIoAudioAdapter.cpp']
process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
process.use = ['IOAUDIO', 'SAMPLERATE']

if bld.env['BUILD_ADAPTER'] and bld.env['IS_SUN']:
audio_adapter_sources += ['../solaris/oss/JackOSSAdapter.cpp', 'memops.c']
process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib)
Expand Down
4 changes: 4 additions & 0 deletions dbus/wscript
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ def build(bld):
sysdeps_dbus_include = ['../linux', '../posix']
if bld.env['IS_MACOSX']:
sysdeps_dbus_include = ['../macosx', '../posix']
if bld.env['IS_QNX']:
sysdeps_dbus_include = ['../qnx', '../posix']

obj.includes = sysdeps_dbus_include + ['.', '../', '../common', '../common/jack']
obj.defines = ['HAVE_CONFIG_H','SERVER_SIDE']
Expand All @@ -66,6 +68,8 @@ def build(bld):
obj.use += ['PTHREAD', 'DL', 'RT', 'DBUS-1', 'EXPAT', 'STDC++']
if bld.env['IS_MACOSX']:
obj.use += ['PTHREAD', 'DL', 'DBUS-1', 'EXPAT']
if bld.env['IS_QNX']:
obj.use += ['PTHREAD', 'DL', 'DBUS-1', 'EXPAT', 'STDC++']
obj.target = 'jackdbus'

# process org.jackaudio.service.in -> org.jackaudio.service
Expand Down
9 changes: 8 additions & 1 deletion example-clients/wscript
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ def build(bld):
os_incdir = ['../linux', '../posix']
if bld.env['IS_MACOSX']:
os_incdir = ['../macosx', '../posix']
if bld.env['IS_QNX']:
os_incdir = ['../qnx', '../posix']
if bld.env['IS_SUN']:
os_incdir = ['../solaris', '../posix']
if bld.env['IS_WINDOWS']:
Expand Down Expand Up @@ -75,11 +77,12 @@ def build(bld):
prog.env.append_value("LINKFLAGS", "")
if bld.env['IS_LINUX']:
prog.use += ['RT', 'M']
if bld.env['IS_QNX']:
prog.use += ['M','SOCKET']
if bld.env['IS_SUN']:
prog.use += ['M']

prog.target = example_program

if bld.env['BUILD_EXAMPLE_CLIENT_TRANSPORT']:
prog = bld(features = 'c cprogram')
prog.includes = os_incdir + ['../common/jack', '../common']
Expand All @@ -95,6 +98,8 @@ def build(bld):
prog.use += ['READLINE']
if bld.env['IS_WINDOWS']:
prog.use += ['READLINE']
if bld.env['IS_QNX']:
prog.use += ['READLINE']
prog.target = 'jack_transport'

if bld.env['BUILD_EXAMPLE_CLIENT_REC']:
Expand All @@ -109,6 +114,8 @@ def build(bld):
prog.use += ['SNDFILE']
if bld.env['IS_LINUX']:
prog.use += ['RT', 'SNDFILE']
if bld.env['IS_QNX']:
prog.use += ['SNDFILE']
if bld.env['IS_SUN']:
prog.use += ['RT', 'SNDFILE']
if bld.env['IS_WINDOWS']:
Expand Down
1 change: 1 addition & 0 deletions posix/JackNetUnixSocket.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>

using namespace std;

Expand Down
4 changes: 2 additions & 2 deletions posix/JackPosixSemaphore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ void JackPosixSemaphore::BuildName(const char* client_name, const char* server_n
char ext_client_name[SYNC_MAX_NAME_SIZE + 1];
JackTools::RewriteName(client_name, ext_client_name);
if (getenv("JACK_PROMISCUOUS_SERVER")) {
snprintf(res, size, "jack_sem.%s_%s", server_name, ext_client_name);
snprintf(res, size, "/jack_sem.%s_%s", server_name, ext_client_name);
} else {
snprintf(res, size, "jack_sem.%d_%s_%s", JackTools::GetUID(), server_name, ext_client_name);
snprintf(res, size, "/jack_sem.%d_%s_%s", JackTools::GetUID(), server_name, ext_client_name);
}
}

Expand Down
Loading

0 comments on commit d49e6e2

Please sign in to comment.