summaryrefslogtreecommitdiff
path: root/attrib
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2012-09-19 16:37:56 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2012-09-20 14:10:54 +0300
commitea4ff5109b2eab060493dc7d6fdf705a26b8d9fe (patch)
tree4cbfa899fc81bef210c49104b3fdc0fbdc3cf6f6 /attrib
parent7cc3243d868840e025798e95ffcd46294a9a5b93 (diff)
downloadbluez-ea4ff5109b2eab060493dc7d6fdf705a26b8d9fe.tar.gz
gatttool: Fix Characteristic descriptor discovery
This patch fixes end condition for Characteristic Descriptor Discovery. This sub-procedure is complete when the Error Response is received and the Error Code is set to Attribute Not Found or the Find Information Response has an Attribute Handle that is equal to the Ending Handle of the request.
Diffstat (limited to 'attrib')
-rw-r--r--attrib/interactive.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/attrib/interactive.c b/attrib/interactive.c
index c96df3eda..38ac30f06 100644
--- a/attrib/interactive.c
+++ b/attrib/interactive.c
@@ -48,6 +48,8 @@ static gchar *opt_dst_type = NULL;
static gchar *opt_sec_level = NULL;
static int opt_psm = 0;
static int opt_mtu = 0;
+static int start;
+static int end;
struct characteristic_data {
uint16_t orig_start;
@@ -237,11 +239,12 @@ static void char_desc_cb(guint8 status, const guint8 *pdu, guint16 plen,
{
struct att_data_list *list;
guint8 format;
+ uint16_t handle = 0xffff;
int i;
if (status != 0) {
- printf("Discover all characteristic descriptors failed: "
- "%s\n", att_ecode2str(status));
+ printf("Discover descriptors finished: %s\n",
+ att_ecode2str(status));
return;
}
@@ -252,7 +255,6 @@ static void char_desc_cb(guint8 status, const guint8 *pdu, guint16 plen,
printf("\n");
for (i = 0; i < list->num; i++) {
char uuidstr[MAX_LEN_UUID_STR];
- uint16_t handle;
uint8_t *value;
bt_uuid_t uuid;
@@ -270,7 +272,10 @@ static void char_desc_cb(guint8 status, const guint8 *pdu, guint16 plen,
att_data_list_free(list);
- rl_forced_update_display();
+ if (handle != 0xffff && handle < end)
+ gatt_find_info(attrib, handle + 1, end, char_desc_cb, NULL);
+ else
+ rl_forced_update_display();
}
static void char_read_cb(guint8 status, const guint8 *pdu, guint16 plen,
@@ -469,9 +474,6 @@ static void cmd_char(int argcp, char **argvp)
static void cmd_char_desc(int argcp, char **argvp)
{
- int start = 0x0001;
- int end = 0xffff;
-
if (conn_state != STATE_CONNECTED) {
printf("Command failed: disconnected\n");
return;
@@ -483,7 +485,8 @@ static void cmd_char_desc(int argcp, char **argvp)
printf("Invalid start handle: %s\n", argvp[1]);
return;
}
- }
+ } else
+ start = 0x0001;
if (argcp > 2) {
end = strtohandle(argvp[2]);
@@ -491,7 +494,8 @@ static void cmd_char_desc(int argcp, char **argvp)
printf("Invalid end handle: %s\n", argvp[2]);
return;
}
- }
+ } else
+ end = 0xffff;
gatt_find_info(attrib, start, end, char_desc_cb, NULL);
}