summaryrefslogtreecommitdiffstats
path: root/src/pulse/ext-device-manager.c
diff options
context:
space:
mode:
authorColin Guthrie <cguthrie@mandriva.org>2009-09-19 17:48:10 +0100
committerColin Guthrie <cguthrie@mandriva.org>2009-11-11 17:44:23 +0000
commit4981268738cca80a2104575d5844167346a0dcfb (patch)
tree3148457ae3fcd1376f18f6618d056802cafa10da /src/pulse/ext-device-manager.c
parenta9bd1ab69c6c23610b509ec5bb70d279f722f48a (diff)
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.
Diffstat (limited to 'src/pulse/ext-device-manager.c')
-rw-r--r--src/pulse/ext-device-manager.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index 0603a89a..a634e212 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -42,6 +42,8 @@ enum {
SUBCOMMAND_WRITE,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
+ SUBCOMMAND_PREFER_DEVICE,
+ SUBCOMMAND_DEFER_DEVICE,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -321,6 +323,78 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
return o;
}
+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) {
+
+ 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);
+
+ 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_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);
+
+ 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);
+
+ 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_subscribe(
pa_context *c,
int enable,