summaryrefslogtreecommitdiffstats
path: root/src/pulse
diff options
context:
space:
mode:
authorColin Guthrie <cguthrie@mandriva.org>2009-10-01 01:27:02 +0100
committerColin Guthrie <cguthrie@mandriva.org>2009-10-01 09:08:32 +0100
commitf9b2d6500b75445b66c83ad1d6700e042f2f8d2a (patch)
tree1cb22d2795d603e06ece87dca3fc30292c81dcd5 /src/pulse
parent8977abdc840989975d79d041ffcaf48804d7a52b (diff)
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.
Diffstat (limited to 'src/pulse')
-rw-r--r--src/pulse/ext-device-manager.c53
-rw-r--r--src/pulse/ext-device-manager.h12
2 files changed, 13 insertions, 52 deletions
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index 01e4594b..138ed838 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -43,8 +43,7 @@ enum {
SUBCOMMAND_RENAME,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
- SUBCOMMAND_PREFER_DEVICE,
- SUBCOMMAND_DEFER_DEVICE,
+ SUBCOMMAND_REORDER,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -330,14 +329,14 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
return o;
}
-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,
+ const char** devices,
pa_context_success_cb_t cb,
void *userdata) {
- uint32_t tag;
+ uint32_t tag, i;
pa_operation *o = NULL;
pa_tagstruct *t = NULL;
@@ -349,52 +348,22 @@ pa_operation *pa_ext_device_manager_prefer_device(
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
pa_assert(role);
- pa_assert(device);
+ pa_assert(devices);
o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
pa_tagstruct_puts(t, "module-device-manager");
- pa_tagstruct_putu32(t, SUBCOMMAND_PREFER_DEVICE);
+ pa_tagstruct_putu32(t, SUBCOMMAND_REORDER);
pa_tagstruct_puts(t, role);
- pa_tagstruct_puts(t, device);
-
- pa_pstream_send_tagstruct(c->pstream, t);
- pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
-
- return o;
-}
-
-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) {
-
- uint32_t tag;
- pa_operation *o = NULL;
- pa_tagstruct *t = NULL;
-
- pa_assert(c);
- pa_assert(PA_REFCNT_VALUE(c) >= 1);
-
- PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
- PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
- PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
- pa_assert(role);
- pa_assert(device);
+ i = 0; while (devices[i]) i++;
+ pa_tagstruct_putu32(t, i);
- o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
-
- t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
- pa_tagstruct_putu32(t, PA_INVALID_INDEX);
- pa_tagstruct_puts(t, "module-device-manager");
- pa_tagstruct_putu32(t, SUBCOMMAND_DEFER_DEVICE);
- pa_tagstruct_puts(t, role);
- pa_tagstruct_puts(t, device);
+ i = 0;
+ while (devices[i])
+ pa_tagstruct_puts(t, devices[i++]);
pa_pstream_send_tagstruct(c->pstream, t);
pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
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);