Signed-off-by: David Henningsson <david.henningsson at canonical.com> --- src/pulsecore/core.h | 1 + src/pulsecore/device-port.c | 17 +++++++++++++++-- src/pulsecore/device-port.h | 5 +++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h index d4639e0..72f39c5 100644 --- a/src/pulsecore/core.h +++ b/src/pulsecore/core.h @@ -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_PORT_AVAILABLE_CHANGED, PA_CORE_HOOK_MAX } pa_core_hook_t; diff --git a/src/pulsecore/device-port.c b/src/pulsecore/device-port.c index 9e6ad43..5e6a492 100644 --- a/src/pulsecore/device-port.c +++ b/src/pulsecore/device-port.c @@ -20,11 +20,24 @@ USA. ***/ - -#include "device-port.h" +#include <pulsecore/device-port.h> PA_DEFINE_PUBLIC_CLASS(pa_device_port, pa_object); +void pa_device_port_set_available(pa_device_port *p, pa_port_available_t status, pa_core *core) +{ + pa_assert(p); + + if (p->available == status) + return; + + pa_assert(status != PA_PORT_AVAILABLE_UNKNOWN); + p->available = status; + pa_log_debug("Setting port %s to status %s", p->name, status == PA_PORT_AVAILABLE_YES ? "yes" : "no"); + pa_hook_fire(&core->hooks[PA_CORE_HOOK_PORT_AVAILABLE_CHANGED], p); +} + + static void device_port_free(pa_object *o) { pa_device_port *p = PA_DEVICE_PORT(o); pa_assert(p); diff --git a/src/pulsecore/device-port.h b/src/pulsecore/device-port.h index 23f6444..355a4a1 100644 --- a/src/pulsecore/device-port.h +++ b/src/pulsecore/device-port.h @@ -57,4 +57,9 @@ pa_device_port *pa_device_port_new(const char *name, const char *description, si void pa_device_port_hashmap_free(pa_hashmap *h); +#include <pulsecore/core.h> + +/* The port's available status has changed */ +void pa_device_port_set_available(pa_device_port *p, pa_port_available_t available, pa_core *core); + #endif -- 1.7.5.4