From 37e82cec0ad13923a5db259a88bd00a2840112c6 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sat, 27 Jun 2009 22:08:07 +0100 Subject: device-manager: Add an untested protocol extension. This is effectively copied from the stream restore extension. --- src/pulse/ext-device-manager.h | 106 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/pulse/ext-device-manager.h (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h new file mode 100644 index 00000000..eed0c50c --- /dev/null +++ b/src/pulse/ext-device-manager.h @@ -0,0 +1,106 @@ +#ifndef foopulseextdevicemanagerhfoo +#define foopulseextdevicemanagerhfoo + +/*** + This file is part of PulseAudio. + + Copyright 2008 Lennart Poettering + Copyright 2009 Colin Guthrie + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, + or (at your option) any later version. + + PulseAudio 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 Lesser General Public License + along with PulseAudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#include +#include + +/** \file + * + * Routines for controlling module-stream-restore + */ + +PA_C_DECL_BEGIN + +/** Stores information about one device in the device database that is + * maintained by module-device-manager. \since 0.9.17 */ +typedef struct pa_ext_device_manager_info { + const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */ + const char *description; /**< The description of the device when it was last seen, if applicable and saved */ +} pa_ext_device_manager_info; + +/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.17 */ +typedef void (*pa_ext_device_manager_test_cb_t)( + pa_context *c, + uint32_t version, + void *userdata); + +/** Test if this extension module is available in the server. \since 0.9.17 */ +pa_operation *pa_ext_device_manager_test( + pa_context *c, + pa_ext_device_manager_test_cb_t cb, + void *userdata); + +/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.17 */ +typedef void (*pa_ext_device_manager_read_cb_t)( + pa_context *c, + const pa_ext_device_manager_info *info, + int eol, + void *userdata); + +/** Read all entries from the device database. \since 0.9.17 */ +pa_operation *pa_ext_device_manager_read( + pa_context *c, + pa_ext_device_manager_read_cb_t cb, + void *userdata); + +/** Store entries in the device database. \since 0.9.17 */ +pa_operation *pa_ext_device_manager_write( + pa_context *c, + pa_update_mode_t mode, + const pa_ext_device_manager_info data[], + unsigned n, + int apply_immediately, + pa_context_success_cb_t cb, + void *userdata); + +/** Delete entries from the device database. \since 0.9.17 */ +pa_operation *pa_ext_device_manager_delete( + pa_context *c, + const char *const s[], + pa_context_success_cb_t cb, + void *userdata); + +/** Subscribe to changes in the device database. \since 0.9.17 */ +pa_operation *pa_ext_device_manager_subscribe( + pa_context *c, + int enable, + pa_context_success_cb_t cb, + void *userdata); + +/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.17 */ +typedef void (*pa_ext_device_manager_subscribe_cb_t)( + pa_context *c, + void *userdata); + +/** Set the subscription callback that is called when + * pa_ext_device_manager_subscribe() was called. \since 0.9.17 */ +void pa_ext_device_manager_set_subscribe_cb( + pa_context *c, + pa_ext_device_manager_subscribe_cb_t cb, + void *userdata); + +PA_C_DECL_END + +#endif -- cgit From 464e1a89868b7c68927d7c95b4ff7d8fe3dbb0f0 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sun, 5 Jul 2009 19:40:06 +0100 Subject: device-manager: Fix copy+paste leftover --- src/pulse/ext-device-manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index eed0c50c..422691fe 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -28,7 +28,7 @@ /** \file * - * Routines for controlling module-stream-restore + * Routines for controlling module-device-manager */ PA_C_DECL_BEGIN -- cgit From 9357bdf4e7c069e29d2fa403a01a892d80d2d89f Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sat, 19 Sep 2009 15:32:13 +0100 Subject: device-manager: Update docs version -> 0.9.19 (predicted) --- src/pulse/ext-device-manager.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index 422691fe..33bcbfa8 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -34,38 +34,38 @@ PA_C_DECL_BEGIN /** Stores information about one device in the device database that is - * maintained by module-device-manager. \since 0.9.17 */ + * maintained by module-device-manager. \since 0.9.19 */ typedef struct pa_ext_device_manager_info { const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */ const char *description; /**< The description of the device when it was last seen, if applicable and saved */ } pa_ext_device_manager_info; -/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.17 */ +/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.19 */ typedef void (*pa_ext_device_manager_test_cb_t)( pa_context *c, uint32_t version, void *userdata); -/** Test if this extension module is available in the server. \since 0.9.17 */ +/** Test if this extension module is available in the server. \since 0.9.19 */ pa_operation *pa_ext_device_manager_test( pa_context *c, pa_ext_device_manager_test_cb_t cb, void *userdata); -/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.17 */ +/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.19 */ typedef void (*pa_ext_device_manager_read_cb_t)( pa_context *c, const pa_ext_device_manager_info *info, int eol, void *userdata); -/** Read all entries from the device database. \since 0.9.17 */ +/** Read all entries from the device database. \since 0.9.19 */ pa_operation *pa_ext_device_manager_read( pa_context *c, pa_ext_device_manager_read_cb_t cb, void *userdata); -/** Store entries in the device database. \since 0.9.17 */ +/** Store entries in the device database. \since 0.9.19 */ pa_operation *pa_ext_device_manager_write( pa_context *c, pa_update_mode_t mode, @@ -75,27 +75,27 @@ pa_operation *pa_ext_device_manager_write( pa_context_success_cb_t cb, void *userdata); -/** Delete entries from the device database. \since 0.9.17 */ +/** Delete entries from the device database. \since 0.9.19 */ pa_operation *pa_ext_device_manager_delete( pa_context *c, const char *const s[], pa_context_success_cb_t cb, void *userdata); -/** Subscribe to changes in the device database. \since 0.9.17 */ +/** Subscribe to changes in the device database. \since 0.9.19 */ pa_operation *pa_ext_device_manager_subscribe( pa_context *c, int enable, pa_context_success_cb_t cb, void *userdata); -/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.17 */ +/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.19 */ typedef void (*pa_ext_device_manager_subscribe_cb_t)( pa_context *c, void *userdata); /** Set the subscription callback that is called when - * pa_ext_device_manager_subscribe() was called. \since 0.9.17 */ + * pa_ext_device_manager_subscribe() was called. \since 0.9.19 */ void pa_ext_device_manager_set_subscribe_cb( pa_context *c, pa_ext_device_manager_subscribe_cb_t cb, -- cgit From 103897a1e33fe83f6ba0b7d521ccc2e36da43881 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sat, 19 Sep 2009 16:13:25 +0100 Subject: device-manager: Provide a way for clients to enable/disable role-based device-priority routing. The routing logic itself does not yet exist, but the command currently will unload/load module-stream-restore as approriate. (module-stream-restore would conflict with the role-based priority-routing). --- src/pulse/ext-device-manager.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index 33bcbfa8..29d56ba4 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -82,6 +82,13 @@ pa_operation *pa_ext_device_manager_delete( pa_context_success_cb_t cb, void *userdata); +/** Subscribe to changes in the device database. \since 0.9.19 */ +pa_operation *pa_ext_device_manager_enable_role_device_priority_routing( + pa_context *c, + int enable, + pa_context_success_cb_t cb, + void *userdata); + /** Subscribe to changes in the device database. \since 0.9.19 */ pa_operation *pa_ext_device_manager_subscribe( pa_context *c, -- cgit From aebe4787f293cc6810c54db751bee7df3a5d1ea2 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sat, 19 Sep 2009 17:48:10 +0100 Subject: device-manager: Provide a method for prefering/defering a device. This allows clients to edit the priroity order. What is not yet in place is the initialisation of that priority list when new devices are detected or the cleaning (remove holes) when devices are removed. In order to keep the storage transparent I will likely remove the write functionality and replace it with a simple rename method. I also still need to expose the priority itself when reading the data. --- src/pulse/ext-device-manager.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index 29d56ba4..d6de1320 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -89,6 +89,22 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing( pa_context_success_cb_t cb, void *userdata); +/** Subscribe to changes in the device database. \since 0.9.19 */ +pa_operation *pa_ext_device_manager_prefer_device( + pa_context *c, + const char* role, + const char* device, + pa_context_success_cb_t cb, + void *userdata); + +/** Subscribe to changes in the device database. \since 0.9.19 */ +pa_operation *pa_ext_device_manager_defer_device( + pa_context *c, + const char* role, + const char* device, + pa_context_success_cb_t cb, + void *userdata); + /** Subscribe to changes in the device database. \since 0.9.19 */ pa_operation *pa_ext_device_manager_subscribe( pa_context *c, -- cgit From f8ec8f382ff1e9a05296b5a656195d44e8d05b44 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sun, 20 Sep 2009 12:44:02 +0100 Subject: device-manager: Change the write function to a rename function. The structure itself will contain various bits of info so exposing this fully to the client is a bad idea. By keeping to a rename operation we keep what we do store abstracted from the clients. Also fix some doxy comments. --- src/pulse/ext-device-manager.h | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index d6de1320..686c8d22 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -65,13 +65,11 @@ pa_operation *pa_ext_device_manager_read( pa_ext_device_manager_read_cb_t cb, void *userdata); -/** Store entries in the device database. \since 0.9.19 */ -pa_operation *pa_ext_device_manager_write( +/** Sets the description for a device. \since 0.9.19 */ +pa_operation *pa_ext_device_manager_set_device_description( pa_context *c, - pa_update_mode_t mode, - const pa_ext_device_manager_info data[], - unsigned n, - int apply_immediately, + const char* device, + const char* description, pa_context_success_cb_t cb, void *userdata); @@ -82,14 +80,14 @@ pa_operation *pa_ext_device_manager_delete( pa_context_success_cb_t cb, void *userdata); -/** Subscribe to changes in the device database. \since 0.9.19 */ +/** Enable the role-based device-priority routing mode. \since 0.9.19 */ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing( pa_context *c, int enable, pa_context_success_cb_t cb, void *userdata); -/** Subscribe to changes in the device database. \since 0.9.19 */ +/** Prefer a given device in the priority list. \since 0.9.19 */ pa_operation *pa_ext_device_manager_prefer_device( pa_context *c, const char* role, @@ -97,7 +95,7 @@ pa_operation *pa_ext_device_manager_prefer_device( pa_context_success_cb_t cb, void *userdata); -/** Subscribe to changes in the device database. \since 0.9.19 */ +/** Defer a given device in the priority list. \since 0.9.19 */ pa_operation *pa_ext_device_manager_defer_device( pa_context *c, const char* role, -- cgit From 8b2cc4def30327a72d95365c671d2adcae1a77a8 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sat, 26 Sep 2009 14:36:36 +0100 Subject: device-manager: Expose the priority lists in the protocol extension. Also leave space for 'icon' and 'available' details too, althought currently this info is dummy. --- src/pulse/ext-device-manager.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index 686c8d22..bd52331c 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -33,11 +33,20 @@ PA_C_DECL_BEGIN +typedef struct pa_ext_device_manager_role_priority_info { + const char *role; + uint32_t priority; +} pa_ext_device_manager_role_priority_info; + /** Stores information about one device in the device database that is * maintained by module-device-manager. \since 0.9.19 */ typedef struct pa_ext_device_manager_info { const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */ const char *description; /**< The description of the device when it was last seen, if applicable and saved */ + const char *icon; /**< The icon given to the device */ + uint8_t available; /**< Is the device currently available? */ + uint32_t n_role_priorities; /**< How many role priorities do we have? */ + pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */ } pa_ext_device_manager_info; /** Callback prototype for pa_ext_device_manager_test(). \since 0.9.19 */ -- cgit From f9b2d6500b75445b66c83ad1d6700e042f2f8d2a Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Thu, 1 Oct 2009 01:27:02 +0100 Subject: device-manager: Change the prefer/defer options to a single 'reorder' command. We put in the devices from the wire into a hashmap and then add all like type device in the database and then order them based on priority (with the ones specified on the wire always being in that order at the top of the list. --- src/pulse/ext-device-manager.h | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'src/pulse/ext-device-manager.h') diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h index bd52331c..13538f0c 100644 --- a/src/pulse/ext-device-manager.h +++ b/src/pulse/ext-device-manager.h @@ -97,18 +97,10 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing( void *userdata); /** Prefer a given device in the priority list. \since 0.9.19 */ -pa_operation *pa_ext_device_manager_prefer_device( +pa_operation *pa_ext_device_manager_reorder_devices_for_role( pa_context *c, const char* role, - const char* device, - pa_context_success_cb_t cb, - void *userdata); - -/** Defer a given device in the priority list. \since 0.9.19 */ -pa_operation *pa_ext_device_manager_defer_device( - pa_context *c, - const char* role, - const char* device, + const char** devices, pa_context_success_cb_t cb, void *userdata); -- cgit