From cc988b02a3c127473da33cc14c9c41b797f027f5 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 21 Oct 2014 13:24:43 +0300 Subject: [PATCH] android/hog: Fix report lookup The lookup should use the report types from HoG not from uHID since bt_hog_send_report expect those to be used. --- android/hog.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/android/hog.c b/android/hog.c index 51c7c6476..edee73f8c 100644 --- a/android/hog.c +++ b/android/hog.c @@ -404,20 +404,7 @@ static struct report *find_report(struct bt_hog *hog, uint8_t type, uint8_t id) struct report cmp; GSList *l; - switch (type) { - case UHID_FEATURE_REPORT: - cmp.type = HOG_REPORT_TYPE_FEATURE; - break; - case UHID_OUTPUT_REPORT: - cmp.type = HOG_REPORT_TYPE_OUTPUT; - break; - case UHID_INPUT_REPORT: - cmp.type = HOG_REPORT_TYPE_INPUT; - break; - default: - return NULL; - } - + cmp.type = type; cmp.id = hog->has_report_id ? id : 0; l = g_slist_find_custom(hog->reports, &cmp, report_cmp); @@ -438,10 +425,25 @@ static void forward_report(struct uhid_event *ev, void *user_data) { struct bt_hog *hog = user_data; struct report *report; + uint8_t type; void *data; int size; - report = find_report(hog, ev->u.output.rtype, ev->u.output.data[0]); + switch (ev->u.output.rtype) { + case UHID_FEATURE_REPORT: + type = HOG_REPORT_TYPE_FEATURE; + break; + case UHID_OUTPUT_REPORT: + type = HOG_REPORT_TYPE_OUTPUT; + break; + case UHID_INPUT_REPORT: + type = HOG_REPORT_TYPE_INPUT; + break; + default: + return; + } + + report = find_report(hog, type, ev->u.output.data[0]); if (!report) return; -- 2.47.3