mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-03 09:01:50 -05:00
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.
This commit is contained in:
parent
95f28393ab
commit
aebe4787f2
3 changed files with 238 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue