]> code.delx.au - pulseaudio/commitdiff
card: Support adding profiles dynamically
authorMikel Astiz <mikel.astiz@bmw-carit.de>
Tue, 23 Oct 2012 14:41:55 +0000 (16:41 +0200)
committerTanu Kaskinen <tanuk@iki.fi>
Thu, 25 Oct 2012 09:58:29 +0000 (12:58 +0300)
Some cards might need to add profiles during their lifetime, that is,
after the card has been created.

src/pulsecore/card.c
src/pulsecore/card.h
src/pulsecore/core.h

index 492c051229f7455846c81493f9937453c2dc6c3f..3b8e8dba982d97bbc659b54d6edf3678fc32859b 100644 (file)
@@ -79,6 +79,18 @@ void pa_card_new_data_set_name(pa_card_new_data *data, const char *name) {
     data->name = pa_xstrdup(name);
 }
 
+void pa_card_add_profile(pa_card *c, pa_card_profile *profile) {
+    pa_assert(c);
+    pa_assert(profile);
+
+    /* take ownership of the profile */
+    pa_assert_se(pa_hashmap_put(c->profiles, profile->name, profile) >= 0);
+
+    pa_subscription_post(c->core, PA_SUBSCRIPTION_EVENT_CARD|PA_SUBSCRIPTION_EVENT_CHANGE, c->index);
+
+    pa_hook_fire(&c->core->hooks[PA_CORE_HOOK_CARD_PROFILE_ADDED], profile);
+}
+
 void pa_card_new_data_set_profile(pa_card_new_data *data, const char *profile) {
     pa_assert(data);
 
index 6f942e80bdf6a5297871a77b82a526ed7ee9e5cd..6c42271aa1ad04bd66ae1356d74cf4563b25167d 100644 (file)
@@ -100,6 +100,8 @@ void pa_card_new_data_done(pa_card_new_data *data);
 pa_card *pa_card_new(pa_core *c, pa_card_new_data *data);
 void pa_card_free(pa_card *c);
 
+void pa_card_add_profile(pa_card *c, pa_card_profile *profile);
+
 int pa_card_set_profile(pa_card *c, const char *name, pa_bool_t save);
 
 int pa_card_suspend(pa_card *c, pa_bool_t suspend, pa_suspend_cause_t cause);
index ba21fa909e421ee59b3fac27ca0d630f0adb6469..aec7f8063a0c409a6365d27e0c973f691e8fb6e0 100644 (file)
@@ -113,6 +113,7 @@ typedef enum pa_core_hook {
     PA_CORE_HOOK_CARD_PUT,
     PA_CORE_HOOK_CARD_UNLINK,
     PA_CORE_HOOK_CARD_PROFILE_CHANGED,
+    PA_CORE_HOOK_CARD_PROFILE_ADDED,
     PA_CORE_HOOK_PORT_AVAILABLE_CHANGED,
     PA_CORE_HOOK_MAX
 } pa_core_hook_t;