diff options
Diffstat (limited to 'polyp')
-rw-r--r-- | polyp/mainloop-api.h | 3 | ||||
-rw-r--r-- | polyp/mainloop-signal.h | 18 | ||||
-rw-r--r-- | polyp/mainloop.h | 22 | ||||
-rw-r--r-- | polyp/native-common-internal.h | 133 |
4 files changed, 175 insertions, 1 deletions
diff --git a/polyp/mainloop-api.h b/polyp/mainloop-api.h index c1f40eae..3d5ad24a 100644 --- a/polyp/mainloop-api.h +++ b/polyp/mainloop-api.h @@ -38,9 +38,10 @@ * \li A wrapper around the GLIB main loop. Use this to embed polypaudio into your GLIB/GTK+/GNOME programs (See \ref glib-mainloop.h) * * The structure pa_mainloop_api is used as vtable for the main loop abstraction. + * + * This mainloop abstraction layer has no direct support for UNIX signals. Generic, mainloop implementation agnostic support is available throught \ref mainloop-signal.h. * */ - PA_C_DECL_BEGIN /** A bitmask for IO events */ diff --git a/polyp/mainloop-signal.h b/polyp/mainloop-signal.h index 4dd6c552..0ff20827 100644 --- a/polyp/mainloop-signal.h +++ b/polyp/mainloop-signal.h @@ -27,14 +27,32 @@ PA_C_DECL_BEGIN +/** \file + * UNIX signal support for main loops. In contrast to other + * main loop event sources such as timer and IO events, UNIX signal + * support requires modification of the global process + * environment. Due to this the generic main loop abstraction layer as + * defined in \ref mainloop-api.h doesn't have direct support for UNIX + * signals. However, you may hook signal support into an abstract main loop via the routines defined herein. + */ + +/** Initialize the UNIX signal subsystem and bind it to the specified main loop */ int pa_signal_init(struct pa_mainloop_api *api); + +/** Cleanup the signal subsystem */ void pa_signal_done(void); +/** \struct pa_signal_event + * A UNIX signal event source object */ struct pa_signal_event; +/** Create a new UNIX signal event source object */ struct pa_signal_event* pa_signal_new(int signal, void (*callback) (struct pa_mainloop_api *api, struct pa_signal_event*e, int signal, void *userdata), void *userdata); + +/** Free a UNIX signal event source object */ void pa_signal_free(struct pa_signal_event *e); +/** Set a function that is called when the signal event source is destroyed. Use this to free the userdata argument if required */ void pa_signal_set_destroy(struct pa_signal_event *e, void (*callback) (struct pa_mainloop_api *api, struct pa_signal_event*e, void *userdata)); PA_C_DECL_END diff --git a/polyp/mainloop.h b/polyp/mainloop.h index 4a4c85df..b51f4226 100644 --- a/polyp/mainloop.h +++ b/polyp/mainloop.h @@ -27,14 +27,36 @@ PA_C_DECL_BEGIN +/** \file + * + * A minimal main loop implementation based on the C library's poll() + * function. Using the routines defined herein you may create a simple + * main loop supporting the generic main loop abstraction layer as + * defined in \ref mainloop-api.h. This implementation is thread safe + * as long as you access the main loop object from a single thread only.*/ + +/** \struct pa_mainloop + * A main loop object + */ struct pa_mainloop; +/** Allocate a new main loop object */ struct pa_mainloop *pa_mainloop_new(void); + +/** Free a main loop object */ void pa_mainloop_free(struct pa_mainloop* m); +/** Run a single iteration of the main loop. Returns a negative value +on error or exit request. If block is nonzero, block for events if +none are queued. Optionally return the return value as specified with +the main loop's quit() routine in the integer variable retval points +to */ int pa_mainloop_iterate(struct pa_mainloop *m, int block, int *retval); + +/** Run unlimited iterations of the main loop object until the main loop's quit() routine is called. */ int pa_mainloop_run(struct pa_mainloop *m, int *retval); +/** Return the abstract main loop abstraction layer vtable for this main loop. This calls pa_mainloop_iterate() iteratively.*/ struct pa_mainloop_api* pa_mainloop_get_api(struct pa_mainloop*m); PA_C_DECL_END diff --git a/polyp/native-common-internal.h b/polyp/native-common-internal.h new file mode 100644 index 00000000..debb9bba --- /dev/null +++ b/polyp/native-common-internal.h @@ -0,0 +1,133 @@ +#ifndef foonativecommonhfoo +#define foonativecommonhfoo + +/* $Id$ */ + +/*** + This file is part of polypaudio. + + polypaudio is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2 of the License, + or (at your option) any later version. + + polypaudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with polypaudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#include "cdecl.h" + +PA_C_DECL_BEGIN + +enum { + PA_COMMAND_ERROR, + PA_COMMAND_TIMEOUT, /* pseudo command */ + PA_COMMAND_REPLY, + PA_COMMAND_CREATE_PLAYBACK_STREAM, + PA_COMMAND_DELETE_PLAYBACK_STREAM, + PA_COMMAND_CREATE_RECORD_STREAM, + PA_COMMAND_DELETE_RECORD_STREAM, + PA_COMMAND_EXIT, + PA_COMMAND_REQUEST, + PA_COMMAND_AUTH, + PA_COMMAND_SET_NAME, + PA_COMMAND_LOOKUP_SINK, + PA_COMMAND_LOOKUP_SOURCE, + PA_COMMAND_DRAIN_PLAYBACK_STREAM, + PA_COMMAND_PLAYBACK_STREAM_KILLED, + PA_COMMAND_RECORD_STREAM_KILLED, + PA_COMMAND_STAT, + PA_COMMAND_GET_PLAYBACK_LATENCY, + + PA_COMMAND_CREATE_UPLOAD_STREAM, + PA_COMMAND_DELETE_UPLOAD_STREAM, + PA_COMMAND_FINISH_UPLOAD_STREAM, + PA_COMMAND_PLAY_SAMPLE, + PA_COMMAND_REMOVE_SAMPLE, + + PA_COMMAND_GET_SERVER_INFO, + + PA_COMMAND_GET_SINK_INFO, + PA_COMMAND_GET_SINK_INFO_LIST, + PA_COMMAND_GET_SOURCE_INFO, + PA_COMMAND_GET_SOURCE_INFO_LIST, + PA_COMMAND_GET_MODULE_INFO, + PA_COMMAND_GET_MODULE_INFO_LIST, + PA_COMMAND_GET_CLIENT_INFO, + PA_COMMAND_GET_CLIENT_INFO_LIST, + PA_COMMAND_GET_SINK_INPUT_INFO, + PA_COMMAND_GET_SINK_INPUT_INFO_LIST, + PA_COMMAND_GET_SOURCE_OUTPUT_INFO, + PA_COMMAND_GET_SOURCE_OUTPUT_INFO_LIST, + PA_COMMAND_GET_SAMPLE_INFO, + PA_COMMAND_GET_SAMPLE_INFO_LIST, + + PA_COMMAND_SUBSCRIBE, + PA_COMMAND_SUBSCRIBE_EVENT, + + PA_COMMAND_SET_SINK_VOLUME, + PA_COMMAND_SET_SINK_INPUT_VOLUME, + + PA_COMMAND_MAX +}; + +enum { + PA_ERROR_OK, + PA_ERROR_ACCESS, + PA_ERROR_COMMAND, + PA_ERROR_INVALID, + PA_ERROR_EXIST, + PA_ERROR_NOENTITY, + PA_ERROR_CONNECTIONREFUSED, + PA_ERROR_PROTOCOL, + PA_ERROR_TIMEOUT, + PA_ERROR_AUTHKEY, + PA_ERROR_INTERNAL, + PA_ERROR_CONNECTIONTERMINATED, + PA_ERROR_KILLED, + PA_ERROR_INVALIDSERVER, + PA_ERROR_MAX +}; + +#define PA_NATIVE_COOKIE_LENGTH 256 +#define PA_NATIVE_COOKIE_FILE ".polypaudio-cookie" + +enum pa_subscription_mask { + PA_SUBSCRIPTION_MASK_NULL = 0, + PA_SUBSCRIPTION_MASK_SINK = 1, + PA_SUBSCRIPTION_MASK_SOURCE = 2, + PA_SUBSCRIPTION_MASK_SINK_INPUT = 4, + PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT = 8, + PA_SUBSCRIPTION_MASK_MODULE = 16, + PA_SUBSCRIPTION_MASK_CLIENT = 32, + PA_SUBSCRIPTION_MASK_SAMPLE_CACHE = 64, +}; + +enum pa_subscription_event_type { + PA_SUBSCRIPTION_EVENT_SINK = 0, + PA_SUBSCRIPTION_EVENT_SOURCE = 1, + PA_SUBSCRIPTION_EVENT_SINK_INPUT = 2, + PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT = 3, + PA_SUBSCRIPTION_EVENT_MODULE = 4, + PA_SUBSCRIPTION_EVENT_CLIENT = 5, + PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE = 6, + PA_SUBSCRIPTION_EVENT_FACILITY_MASK = 7, + + PA_SUBSCRIPTION_EVENT_NEW = 0, + PA_SUBSCRIPTION_EVENT_CHANGE = 16, + PA_SUBSCRIPTION_EVENT_REMOVE = 32, + PA_SUBSCRIPTION_EVENT_TYPE_MASK = 16+32, +}; + +#define pa_subscription_match_flags(m, t) (!!((m) & (1 << ((t) & PA_SUBSCRIPTION_EVENT_FACILITY_MASK)))) + +PA_C_DECL_END + +#endif |