aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrisztian Litkey <krisztian.litkey@nokia.com>2010-11-25 18:12:47 +0200
committerKrisztian Litkey <krisztian.litkey@nokia.com>2010-11-25 18:12:47 +0200
commit7a7e131d30aa8c95c50644a479ad5a45862bf1c9 (patch)
tree52b39d021cb8ede54532b783e16613f19c5a5d28
parentf81a38022bcd2ee96833510493dccfa48dc69d1d (diff)
parent00217a97622ede06191513124da2d4ddea65ce6b (diff)
Merge branch 'master' of kli@karma:/u/repositories/libresource
-rw-r--r--client/client.c9
-rw-r--r--src/res-conn.c2
-rw-r--r--src/resource.c22
-rw-r--r--src/resource.h2
4 files changed, 33 insertions, 2 deletions
diff --git a/client/client.c b/client/client.c
index f9b1184..07408eb 100644
--- a/client/client.c
+++ b/client/client.c
@@ -566,6 +566,7 @@ static void create_manager(void)
resproto_set_handler(rconn, RESMSG_UNREGISTER, manager_receive_message);
resproto_set_handler(rconn, RESMSG_GRANT , manager_receive_message);
resproto_set_handler(rconn, RESMSG_ADVICE , manager_receive_message);
+ resproto_set_handler(rconn, RESMSG_RELEASE , manager_receive_message);
connect_to_manager(rconn);
}
@@ -738,6 +739,14 @@ static void manager_receive_message(resmsg_t *msg, resset_t *rs, void *data)
print_input();
break;
+ case RESMSG_RELEASE:
+ print_message("release request from manager");
+ memset(&req, 0, sizeof(resmsg_t));
+ req.possess.type = RESMSG_RELEASE;
+ manager_send_message(&req);
+ print_input();
+ break;
+
default:
if (config.verbose) {
print_message("%s(): unexpected message type %d (%s)",
diff --git a/src/res-conn.c b/src/res-conn.c
index 46efe83..3ecbeb6 100644
--- a/src/res-conn.c
+++ b/src/res-conn.c
@@ -50,7 +50,7 @@ static int client_valid_message[RESMSG_MAX] = {
[RESMSG_UNREGISTER] = VALID ,
[RESMSG_UPDATE ] = INVALID ,
[RESMSG_ACQUIRE ] = INVALID ,
- [RESMSG_RELEASE ] = INVALID ,
+ [RESMSG_RELEASE ] = VALID ,
[RESMSG_GRANT ] = VALID ,
[RESMSG_ADVICE ] = VALID ,
[RESMSG_AUDIO ] = INVALID ,
diff --git a/src/resource.c b/src/resource.c
index c82c05a..3006a4f 100644
--- a/src/resource.c
+++ b/src/resource.c
@@ -119,6 +119,7 @@ static void connect_to_manager(resconn_t *, resource_set_t *);
static void disconnect_from_manager(resmsg_t *, resset_t *,void *);
static void receive_grant_message(resmsg_t *, resset_t *, void *);
static void receive_advice_message(resmsg_t *, resset_t *, void *);
+static void receive_release_message(resmsg_t *, resset_t *, void *);
static int send_register_message(resource_set_t *, uint32_t);
static int send_unregister_message(resource_set_t *, uint32_t);
static int send_update_message(resource_set_t *, uint32_t);
@@ -330,6 +331,11 @@ EXPORT int resource_set_release(resource_set_t *rs)
}
+EXPORT int resource_set_is_acquiring(resource_set_t *rs)
+{
+ return (rs && rs->acquire) ? TRUE : FALSE;
+}
+
static DBusConnection *get_dbus(void)
{
@@ -370,6 +376,7 @@ static resconn_t *get_manager(DBusConnection *dbus)
resproto_set_handler(mgr, RESMSG_UNREGISTER, disconnect_from_manager);
resproto_set_handler(mgr, RESMSG_GRANT , receive_grant_message );
resproto_set_handler(mgr, RESMSG_ADVICE , receive_advice_message );
+ resproto_set_handler(mgr, RESMSG_RELEASE , receive_release_message);
}
return mgr;
@@ -431,6 +438,9 @@ static void receive_grant_message(resmsg_t *msg, resset_t *resset, void *data)
if (rs != NULL && resset == rs->resset) {
resource_log("recived grant %u (resources 0x%x)", rn, gr);
+ if (!gr && (resset->mode & RESOURCE_AUTO_RELEASE))
+ rs->acquire = FALSE;
+
rs->grantcb.function(rs, gr, rs->grantcb.data);
}
}
@@ -449,6 +459,18 @@ static void receive_advice_message(resmsg_t *msg, resset_t *resset, void *data)
}
}
+static void receive_release_message(resmsg_t *msg,resset_t *resset,void *data)
+{
+ resource_set_t *rs = resset->userdata;
+
+ (void)data;
+
+ if (rs != NULL && resset == rs->resset) {
+ rs->acquire = FALSE;
+ push_request(rs, RESMSG_RELEASE, NULL,NULL);
+ }
+}
+
static int send_register_message(resource_set_t *rs, uint32_t rn)
{
resset_t *resset;
diff --git a/src/resource.h b/src/resource.h
index d0c006b..9722903 100644
--- a/src/resource.h
+++ b/src/resource.h
@@ -77,7 +77,7 @@ int resource_set_configure_audio(resource_set_t *resource_set,
int resource_set_acquire(resource_set_t *resource_set);
int resource_set_release(resource_set_t *resource_set);
-
+int resource_set_is_acquiring(resource_set_t *resource_set);
#ifdef __cplusplus