diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-09-30 20:19:01 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-09-30 20:19:01 -0400 |
commit | dee55cbc0757fef391b9073df8565bbd435d0ff6 (patch) | |
tree | 671f93ec4b4dd9a7aeb5596bfe81d40494d4ffff | |
parent | 7a29151a08306a59715d670bf8fbf2ee16d54185 (diff) | |
download | jack1-dee55cbc0757fef391b9073df8565bbd435d0ff6.tar.gz |
set up property change notification structures and calls
-rw-r--r-- | include/internal.h | 10 | ||||
-rw-r--r-- | jackd/clientengine.c | 1 | ||||
-rw-r--r-- | libjack/local.h | 2 | ||||
-rw-r--r-- | libjack/metadata.c | 16 |
4 files changed, 24 insertions, 5 deletions
diff --git a/include/internal.h b/include/internal.h index bd9b3c8..55982d6 100644 --- a/include/internal.h +++ b/include/internal.h @@ -59,6 +59,7 @@ extern void jack_info (const char *fmt, ...); #include <jack/transport.h> #include <jack/session.h> #include <jack/thread.h> +#include <jack/metadata.h> #include "port.h" @@ -221,7 +222,8 @@ typedef enum { ClientRegistered, ClientUnregistered, SaveSession, - LatencyCallback + LatencyCallback, + PropertyCallback } JackEventType; const char* jack_event_type_name (JackEventType); @@ -233,12 +235,17 @@ typedef struct { char name[JACK_PORT_NAME_SIZE]; jack_port_id_t port_id; jack_port_id_t self_id; + jack_uuid_t property_owner; } x; union { uint32_t n; jack_port_type_id_t ptid; jack_port_id_t other_id; + uint32_t key_size; /* key data will follow the event structure */ } y; + union { + jack_property_change_t property_change; + } z; } POST_PACKED_STRUCTURE jack_event_t; typedef enum { @@ -301,6 +308,7 @@ typedef volatile struct { volatile uint8_t thread_cb_cbset; volatile uint8_t session_cbset; volatile uint8_t latency_cbset; + volatile uint8_t property_cbset; } POST_PACKED_STRUCTURE jack_client_control_t; diff --git a/jackd/clientengine.c b/jackd/clientengine.c index 311f4e3..4ab8417 100644 --- a/jackd/clientengine.c +++ b/jackd/clientengine.c @@ -609,6 +609,7 @@ jack_setup_client_control (jack_engine_t *engine, int fd, ClientType type, const client->control->client_register_cbset = FALSE; client->control->thread_cb_cbset = FALSE; client->control->session_cbset = FALSE; + client->control->property_cbset = FALSE; #if 0 if (type != ClientExternal) { diff --git a/libjack/local.h b/libjack/local.h index 864d199..6a6f5ae 100644 --- a/libjack/local.h +++ b/libjack/local.h @@ -77,6 +77,8 @@ struct _jack_client { void *session_cb_arg; JackLatencyCallback latency_cb; void *latency_cb_arg; + JackPropertyChangeCallback property_cb; + void *property_cb_arg; /* external clients: set by libjack * internal clients: set by engine */ diff --git a/libjack/metadata.c b/libjack/metadata.c index 2b22d90..ff1b45f 100644 --- a/libjack/metadata.c +++ b/libjack/metadata.c @@ -24,6 +24,7 @@ #include <jack/uuid.h> #include "internal.h" +#include "local.h" static DB* db = NULL; @@ -374,11 +375,18 @@ jack_get_all_descriptions (jack_description_t** descs) return 0; } -int jack_set_property_change_callback (jack_client_t* client, - JackPropertyChangeCallback callback, - void *arg) +int +jack_set_property_change_callback (jack_client_t *client, + JackPropertyChangeCallback callback, void *arg) { - return 0; + if (client->control->active) { + jack_error ("You cannot set callbacks on an active client."); + return -1; + } + client->property_cb = callback; + client->property_cb_arg = arg; + client->control->property_cbset = (callback != NULL); + return 0; } int |