summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruna Moreira <bruna.moreira@gmail.com>2013-12-17 10:43:53 -0400
committerJefferson Delfes <jefferson.delfes@gmail.com>2013-12-23 11:08:03 -0400
commit3d0582ab9457ad3751af23e19469c80873a9220a (patch)
tree6138a35bb88326cccaa1b9f3a0ec350e76331009
parent7f43bf440204c96c8c6f52410e3c2c8f14e67d43 (diff)
Add support for multiple connections in find_svc()
The connection ID is need to search for a service from a specific device.
-rw-r--r--btctl.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/btctl.c b/btctl.c
index 7ac599b..d93ff19 100644
--- a/btctl.c
+++ b/btctl.c
@@ -197,13 +197,13 @@ static void clear_list_cache(int conn_id) {
conn->svcs_size = 0;
}
-static int find_svc(btgatt_srvc_id_t *svc) {
+static int find_svc(connection_t *conn, btgatt_srvc_id_t *svc) {
uint8_t i;
- for (i = 0; i < u.svcs_size; i++)
- if (u.svcs[i].svc_id.is_primary == svc->is_primary &&
- u.svcs[i].svc_id.id.inst_id == svc->id.inst_id &&
- !memcmp(&u.svcs[i].svc_id.id.uuid, &svc->id.uuid,
+ for (i = 0; i < conn->svcs_size; i++)
+ if (conn->svcs[i].svc_id.is_primary == svc->is_primary &&
+ conn->svcs[i].svc_id.id.inst_id == svc->id.inst_id &&
+ !memcmp(&conn->svcs[i].svc_id.id.uuid, &svc->id.uuid,
sizeof(bt_uuid_t)))
return i;
return -1;
@@ -1146,6 +1146,7 @@ void get_characteristic_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id,
char uuid_str[UUID128_STR_LEN] = {0};
int svc_id;
service_info_t *svc_info;
+ connection_t *conn;
if (status != 0) {
if (status == 0x85) { /* it's not really an error, just finished */
@@ -1158,7 +1159,13 @@ void get_characteristic_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id,
return;
}
- svc_id = find_svc(srvc_id);
+ conn = get_connection(conn_id);
+ if (conn == NULL) {
+ rl_printf("%s: Invalid connection ID\n", __func__);
+ return;
+ }
+
+ svc_id = find_svc(conn, srvc_id);
if (svc_id < 0) {
rl_printf("Received invalid characteristic (service inexistent)\n");
@@ -1470,6 +1477,7 @@ void get_descriptor_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id,
int svc_id, ch_id;
service_info_t *svc_info = NULL;
char_info_t *char_info = NULL;
+ connection_t *conn;
if (status != 0) {
if (status == 0x85) { /* it's not really an error, just finished */
@@ -1482,7 +1490,13 @@ void get_descriptor_cb(int conn_id, int status, btgatt_srvc_id_t *srvc_id,
return;
}
- svc_id = find_svc(srvc_id);
+ conn = get_connection(conn_id);
+ if (conn == NULL) {
+ rl_printf("%s: Invalid connection ID\n", __func__);
+ return;
+ }
+
+ svc_id = find_svc(conn, srvc_id);
if (svc_id < 0) {
rl_printf("Received invalid descriptor (service inexistent)\n");
return;