summaryrefslogtreecommitdiffstats
path: root/polyp
diff options
context:
space:
mode:
Diffstat (limited to 'polyp')
-rw-r--r--polyp/mainloop-api.h3
-rw-r--r--polyp/mainloop-signal.h18
-rw-r--r--polyp/mainloop.h22
-rw-r--r--polyp/native-common-internal.h133
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