summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-30 20:19:01 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-30 20:19:01 -0400
commitdee55cbc0757fef391b9073df8565bbd435d0ff6 (patch)
tree671f93ec4b4dd9a7aeb5596bfe81d40494d4ffff
parent7a29151a08306a59715d670bf8fbf2ee16d54185 (diff)
downloadjack1-dee55cbc0757fef391b9073df8565bbd435d0ff6.tar.gz
set up property change notification structures and calls
-rw-r--r--include/internal.h10
-rw-r--r--jackd/clientengine.c1
-rw-r--r--libjack/local.h2
-rw-r--r--libjack/metadata.c16
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