hid_parser: fix regression from dfb01e7

This commit is contained in:
Matthias Ringwald 2023-11-13 17:15:55 +01:00
parent 6707c7a1ba
commit 1a05cde175
2 changed files with 13 additions and 9 deletions

View File

@ -37,6 +37,8 @@
#define BTSTACK_FILE__ "btstack_hid_parser.c"
#define ENABLE_LOG_DEBUG
#include <string.h>
#include "btstack_hid_parser.h"
@ -226,6 +228,9 @@ static void btstack_hid_handle_global_item(btstack_hid_parser_t * parser, hid_de
}
static void hid_find_next_usage(btstack_hid_parser_t * parser){
bool have_usage_min = false;
bool have_usage_max = false;
parser->usage_range = false;
while ((parser->available_usages == 0u) && (parser->usage_pos < parser->descriptor_pos)){
hid_descriptor_item_t usage_item;
// parser->usage_pos < parser->descriptor_pos < parser->descriptor_len
@ -242,22 +247,21 @@ static void hid_find_next_usage(btstack_hid_parser_t * parser){
break;
case UsageMinimum:
parser->usage_minimum = usage_value;
parser->have_usage_min = 1;
have_usage_min = true;
break;
case UsageMaximum:
parser->usage_maximum = usage_value;
parser->have_usage_max = 1;
have_usage_max = true;
break;
default:
break;
}
if (parser->have_usage_min && parser->have_usage_max){
if (have_usage_min && have_usage_max){
parser->available_usages = parser->usage_maximum - parser->usage_minimum + 1u;
parser->usage_range = true;
if (parser->available_usages < parser->required_usages){
log_debug("Usage Min - Usage Max [%04x..%04x] < Report Count %u", parser->usage_minimum, parser->usage_maximum, parser->required_usages);
}
parser->have_usage_min = 0;
parser->have_usage_max = 0;
}
}
parser->usage_pos += usage_item.item_size;
@ -405,7 +409,7 @@ void btstack_hid_parser_get_field(btstack_hid_parser_t * parser, uint16_t * usag
if (is_variable){
parser->usage_minimum++;
parser->available_usages--;
if (parser->usage_minimum > parser->usage_maximum){
if (parser->usage_range && (parser->usage_minimum > parser->usage_maximum)){
// usage min - max range smaller than report count, ignore remaining bit in report
log_debug("Ignoring %u items without Usage", parser->required_usages);
parser->report_pos_in_bit += parser->global_report_size * parser->required_usages;

View File

@ -46,6 +46,7 @@
#define BTSTACK_HID_PARSER_H
#include <stdint.h>
#include "btstack_bool.h"
#include "btstack_hid.h"
#if defined __cplusplus
@ -137,10 +138,9 @@ typedef struct {
uint32_t usage_minimum;
uint32_t usage_maximum;
uint16_t available_usages;
uint8_t required_usages;
uint16_t required_usages;
bool usage_range;
uint8_t active_record;
uint8_t have_usage_min;
uint8_t have_usage_max;
// global
int32_t global_logical_minimum;