aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2012-04-30 22:44:34 -0300
committerJoão Paulo Rechi Vita <jprvita@openbossa.org>2012-06-21 18:00:18 -0300
commit4b3f92fba4d4deb14b21003895aeb15a78bf2d6f (patch)
tree71ddde50f39b624277bc027563ecd8ad6d1fcdb2
parenta4e905acf96120a04a7f1eac3f453b45fea6e319 (diff)
downloadbluez-4b3f92fba4d4deb14b21003895aeb15a78bf2d6f.tar.gz
bluez-4b3f92fba4d4deb14b21003895aeb15a78bf2d6f.tar.xz
bluez-4b3f92fba4d4deb14b21003895aeb15a78bf2d6f.zip
hog: Use hardware country code
bCountryCode is a 8-bits integer identifying hardware target country. The order of the characteristic declarations may be different on each implementation. Since GATT/ATT requests need to be serialized, HID information will be returned before report map characteristic value.
-rw-r--r--input/hog_device.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/input/hog_device.c b/input/hog_device.c
index 24728065..dbbea10b 100644
--- a/input/hog_device.c
+++ b/input/hog_device.c
@@ -296,7 +296,7 @@ static void report_map_read_cb(guint8 status, const guint8 *pdu, guint16 plen,
ev.u.create.vendor = vendor;
ev.u.create.product = product;
ev.u.create.version = version;
- ev.u.create.country = 0; /* get this info from the right place */
+ ev.u.create.country = hogdev->bcountrycode;
ev.u.create.bus = BUS_BLUETOOTH;
ev.u.create.rd_data = value;
ev.u.create.rd_size = vlen;
@@ -338,6 +338,7 @@ static void char_discovered_cb(GSList *chars, guint8 status, gpointer user_data)
bt_uuid_t report_uuid, report_map_uuid, info_uuid;
struct report *report;
GSList *l;
+ uint16_t map_handle = 0, info_handle = 0;
if (status != 0) {
const char *str = att_ecode2str(status);
@@ -369,12 +370,18 @@ static void char_discovered_cb(GSList *chars, guint8 status, gpointer user_data)
report);
discover_descriptor(hogdev->attrib, chr, next, report);
} else if (bt_uuid_cmp(&uuid, &report_map_uuid) == 0)
- gatt_read_char(hogdev->attrib, chr->value_handle, 0,
- report_map_read_cb, hogdev);
+ map_handle = chr->value_handle;
else if (bt_uuid_cmp(&uuid, &info_uuid) == 0)
- gatt_read_char(hogdev->attrib, chr->value_handle, 0,
- info_read_cb, hogdev);
+ info_handle = chr->value_handle;
}
+
+ if (info_handle)
+ gatt_read_char(hogdev->attrib, info_handle, 0,
+ info_read_cb, hogdev);
+
+ if (map_handle)
+ gatt_read_char(hogdev->attrib, map_handle, 0,
+ report_map_read_cb, hogdev);
}
static void output_written_cb(guint8 status, const guint8 *pdu,