summaryrefslogtreecommitdiff
path: root/android/hal-map-client.c
diff options
context:
space:
mode:
authorGrzegorz Kolodziejczyk <grzegorz.kolodziejczyk@tieto.com>2014-10-03 16:04:03 +0200
committerSzymon Janc <szymon.janc@tieto.com>2014-10-08 14:45:20 +0200
commit62b8a7686842c1e8cdd2eccdb7bd00eb1b5030b2 (patch)
tree9d189e9ac45b0db5ae8a5561bd82d8c2cc4b2f14 /android/hal-map-client.c
parentca9366619bfefcadba6235f5637da9d8b8329889 (diff)
downloadbluez-62b8a7686842c1e8cdd2eccdb7bd00eb1b5030b2.tar.gz
android/hal-map-client: Add event handler
Diffstat (limited to 'android/hal-map-client.c')
-rw-r--r--android/hal-map-client.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/android/hal-map-client.c b/android/hal-map-client.c
index ac7d0310c..533b7933b 100644
--- a/android/hal-map-client.c
+++ b/android/hal-map-client.c
@@ -15,6 +15,7 @@
*
*/
+#include <stdlib.h>
#include <stdbool.h>
#include "hal-log.h"
@@ -31,9 +32,57 @@ static bool interface_ready(void)
/* Event Handlers */
+static void remote_mas_instances_to_hal(btmce_mas_instance_t *send_instance,
+ struct hal_map_client_mas_instance *instance,
+ int num_instances, uint16_t len)
+{
+ void *buf = instance;
+ char *name;
+ int i;
+
+ DBG("");
+
+ for (i = 0; i < num_instances; i++) {
+ name = (char *) instance->name;
+ if (sizeof(*instance) + instance->name_len > len ||
+ (instance->name_len != 0 &&
+ name[instance->name_len - 1] != '\0')) {
+ error("invalid remote mas instance %d, aborting", i);
+ exit(EXIT_FAILURE);
+ }
+
+ send_instance[i].id = instance->id;
+ send_instance[i].msg_types = instance->msg_types;
+ send_instance[i].scn = instance->scn;
+ send_instance[i].p_name = name;
+
+ len -= sizeof(*instance) + instance->name_len;
+ buf += sizeof(*instance) + instance->name_len;
+ instance = buf;
+ }
+
+ if (!len)
+ return;
+
+ error("invalid remote mas instances (%u bytes left), aborting", len);
+ exit(EXIT_FAILURE);
+}
+
static void handle_remote_mas_instances(void *buf, uint16_t len, int fd)
{
+ struct hal_ev_map_client_remote_mas_instances *ev = buf;
+ btmce_mas_instance_t instances[ev->num_instances];
+
+ DBG("");
+
+ len -= sizeof(*ev);
+ remote_mas_instances_to_hal(instances, ev->instances, ev->num_instances,
+ len);
+ if (cbs->remote_mas_instances_cb)
+ cbs->remote_mas_instances_cb(ev->status,
+ (bt_bdaddr_t *) ev->bdaddr,
+ ev->num_instances, instances);
}
/*