Skip to content

Commit f56c2d7

Browse files
author
build
committed
Do not increase max_report_size by one if not using report numbers
1 parent 8271508 commit f56c2d7

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

libusb/hid.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ static size_t get_max_report_size(uint8_t * report_descriptor, int desc_size, en
297297
size_t cur_size = 0;
298298
size_t max_size = 0;
299299

300+
int report_id_used = 0;
301+
300302
while (i < desc_size) {
301303
int key = report_descriptor[i];
302304
int key_cmd = key & 0xfc;
@@ -336,6 +338,7 @@ static size_t get_max_report_size(uint8_t * report_descriptor, int desc_size, en
336338
cur_size += (report_count * report_size);
337339
}
338340
if (key_cmd == 0x84) { /* Report ID */
341+
report_id_used = 1;
339342
if (cur_size > max_size) {
340343
max_size = cur_size;
341344
}
@@ -355,8 +358,8 @@ static size_t get_max_report_size(uint8_t * report_descriptor, int desc_size, en
355358
return 0;
356359
} else {
357360
/* report_size is in bits. Determine the total size convert to bytes
358-
(rounded up), and add one byte for the report number. */
359-
return ((max_size + 7) / 8) + 1;
361+
(rounded up), and add one byte for the report number (if used). */
362+
return ((max_size + 7) / 8) + report_id_used;
360363
}
361364
}
362365

0 commit comments

Comments
 (0)