btstack_hid_parser: return report id invalid on parsing error

This commit is contained in:
Matthias Ringwald 2024-03-07 12:51:51 +01:00
parent 3a1d529668
commit 0e7cc963f9
2 changed files with 10 additions and 3 deletions

View File

@ -233,7 +233,10 @@ static void hid_find_next_usage(btstack_hid_parser_t * parser){
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
btstack_hid_parse_descriptor_item(&usage_item, &parser->descriptor[parser->usage_pos], parser->descriptor_len - parser->usage_pos);
bool ok = btstack_hid_parse_descriptor_item(&usage_item, &parser->descriptor[parser->usage_pos], parser->descriptor_len - parser->usage_pos);
if (ok == false){
break;
}
if ((usage_item.item_type == Global) && (usage_item.item_tag == UsagePage)){
parser->usage_page = usage_item.item_value;
}
@ -498,7 +501,10 @@ hid_report_id_status_t btstack_hid_id_valid(int report_id, uint16_t hid_descript
int current_report_id = 0;
while (hid_descriptor_len){
hid_descriptor_item_t item;
btstack_hid_parse_descriptor_item(&item, hid_descriptor, hid_descriptor_len);
bool ok = btstack_hid_parse_descriptor_item(&item, hid_descriptor, hid_descriptor_len);
if (ok == false){
return HID_REPORT_ID_INVALID;
}
switch (item.item_type){
case Global:
switch ((GlobalItemTag)item.item_tag){

View File

@ -199,10 +199,11 @@ bool btstack_hid_parse_descriptor_item(hid_descriptor_item_t * item, const uint8
int btstack_hid_get_report_size_for_id(int report_id, hid_report_type_t report_type, uint16_t hid_descriptor_len, const uint8_t * hid_descriptor);
/**
* @brief Parses descriptor and returns report size for given report ID and report type
* @brief Parses descriptor and returns status for given report ID
* @param report_id
* @param hid_descriptor_len
* @param hid_descriptor
* @return status for report id
*/
hid_report_id_status_t btstack_hid_id_valid(int report_id, uint16_t hid_descriptor_len, const uint8_t * hid_descriptor);