Lines Matching refs:iterator

162 …scriptor_iterator_pretty_print_item(btstack_hid_descriptor_iterator_t * iterator, hid_descriptor_i…  in btstack_hid_descriptor_iterator_pretty_print_item()  argument
183 …/ %02x 0x%0008x", item_tag_name, type_names[item->item_type], iterator->descriptor[iterator->descr… in btstack_hid_descriptor_iterator_pretty_print_item()
184 …%02x 0x%0008x\n", item_tag_name, type_names[item->item_type], iterator->descriptor[iterator->descr… in btstack_hid_descriptor_iterator_pretty_print_item()
186 UNUSED(iterator); in btstack_hid_descriptor_iterator_pretty_print_item()
191 void btstack_hid_descriptor_iterator_init(btstack_hid_descriptor_iterator_t * iterator, const uint8… in btstack_hid_descriptor_iterator_init() argument
192 iterator->descriptor = hid_descriptor; in btstack_hid_descriptor_iterator_init()
193 iterator->descriptor_pos = 0; in btstack_hid_descriptor_iterator_init()
194 iterator->descriptor_len = hid_descriptor_len; in btstack_hid_descriptor_iterator_init()
195 iterator->item_ready = false; in btstack_hid_descriptor_iterator_init()
196 iterator->valid = true; in btstack_hid_descriptor_iterator_init()
199 bool btstack_hid_descriptor_iterator_has_more(btstack_hid_descriptor_iterator_t * iterator){ in btstack_hid_descriptor_iterator_has_more() argument
200 if ((iterator->item_ready == false) && (iterator->descriptor_len > iterator->descriptor_pos)){ in btstack_hid_descriptor_iterator_has_more()
201 uint16_t item_len = iterator->descriptor_len - iterator->descriptor_pos; in btstack_hid_descriptor_iterator_has_more()
202 const uint8_t *item_data = &iterator->descriptor[iterator->descriptor_pos]; in btstack_hid_descriptor_iterator_has_more()
203 … bool ok = btstack_hid_descriptor_parse_item(&iterator->descriptor_item, item_data, item_len); in btstack_hid_descriptor_iterator_has_more()
204 btstack_hid_descriptor_iterator_pretty_print_item(iterator, &iterator->descriptor_item); in btstack_hid_descriptor_iterator_has_more()
206 iterator->item_ready = true; in btstack_hid_descriptor_iterator_has_more()
208 iterator->valid = false; in btstack_hid_descriptor_iterator_has_more()
211 return iterator->item_ready; in btstack_hid_descriptor_iterator_has_more()
214 …or_item_t * btstack_hid_descriptor_iterator_get_item(btstack_hid_descriptor_iterator_t * iterator){ in btstack_hid_descriptor_iterator_get_item() argument
215 iterator->descriptor_pos += iterator->descriptor_item.item_size; in btstack_hid_descriptor_iterator_get_item()
216 iterator->item_ready = false; in btstack_hid_descriptor_iterator_get_item()
217 return &iterator->descriptor_item; in btstack_hid_descriptor_iterator_get_item()
220 bool btstack_hid_descriptor_iterator_valid(btstack_hid_descriptor_iterator_t * iterator){ in btstack_hid_descriptor_iterator_valid() argument
221 return iterator->valid; in btstack_hid_descriptor_iterator_valid()
239 static void btstack_hid_usage_iterator_handle_global_item(btstack_hid_usage_iterator_t * iterator, … in btstack_hid_usage_iterator_handle_global_item() argument
242 iterator->global_usage_page = item->item_value; in btstack_hid_usage_iterator_handle_global_item()
245 iterator->global_logical_minimum = item->item_value; in btstack_hid_usage_iterator_handle_global_item()
248 iterator->global_logical_maximum = item->item_value; in btstack_hid_usage_iterator_handle_global_item()
251 iterator->global_report_size = item->item_value; in btstack_hid_usage_iterator_handle_global_item()
254 iterator->global_report_id = item->item_value; in btstack_hid_usage_iterator_handle_global_item()
257 iterator->global_report_count = item->item_value; in btstack_hid_usage_iterator_handle_global_item()
279 btstack_hid_descriptor_iterator_t iterator; in btstack_usage_iterator_hid_find_next_usage() local
280 …btstack_hid_descriptor_iterator_init(&iterator, &main_iterator->descriptor[main_iterator->usage_po… in btstack_usage_iterator_hid_find_next_usage()
281 … ((main_iterator->available_usages == 0u) && btstack_hid_descriptor_iterator_has_more(&iterator) ){ in btstack_usage_iterator_hid_find_next_usage()
282 hid_descriptor_item_t usage_item = *btstack_hid_descriptor_iterator_get_item(&iterator); in btstack_usage_iterator_hid_find_next_usage()
313 main_iterator->usage_pos += iterator.descriptor_pos; in btstack_usage_iterator_hid_find_next_usage()
316 static void btstack_parser_usage_iterator_process_item(btstack_hid_usage_iterator_t * iterator, hid… in btstack_parser_usage_iterator_process_item() argument
322iterator->report_type); in btstack_parser_usage_iterator_process_item()
325 report_id_before = iterator->global_report_id; in btstack_parser_usage_iterator_process_item()
326 btstack_hid_usage_iterator_handle_global_item(iterator, item); in btstack_parser_usage_iterator_process_item()
328 if (report_id_before != iterator->global_report_id){ in btstack_parser_usage_iterator_process_item()
329 iterator->report_pos_in_bit = 0u; in btstack_parser_usage_iterator_process_item()
343 int item_bits = iterator->global_report_size * iterator->global_report_count; in btstack_parser_usage_iterator_process_item()
347 iterator->report_pos_in_bit += item_bits; in btstack_parser_usage_iterator_process_item()
351 if (iterator->global_report_count == 0u) return; in btstack_parser_usage_iterator_process_item()
353 iterator->required_usages = iterator->global_report_count; in btstack_parser_usage_iterator_process_item()
356 static void btstack_hid_usage_iterator_find_next_usage(btstack_hid_usage_iterator_t * iterator) { in btstack_hid_usage_iterator_find_next_usage() argument
357 while (btstack_hid_descriptor_iterator_has_more(&iterator->descriptor_iterator)){ in btstack_hid_usage_iterator_find_next_usage()
358iterator->descriptor_item = * btstack_hid_descriptor_iterator_get_item(&iterator->descriptor_itera… in btstack_hid_usage_iterator_find_next_usage()
360 btstack_parser_usage_iterator_process_item(iterator, &iterator->descriptor_item); in btstack_hid_usage_iterator_find_next_usage()
362 if (iterator->required_usages){ in btstack_hid_usage_iterator_find_next_usage()
363 btstack_usage_iterator_hid_find_next_usage(iterator); in btstack_hid_usage_iterator_find_next_usage()
364 if (iterator->available_usages) { in btstack_hid_usage_iterator_find_next_usage()
365 iterator->state = BTSTACK_HID_USAGE_ITERATOR_USAGES_AVAILABLE; in btstack_hid_usage_iterator_find_next_usage()
369 iterator->state = BTSTACK_HID_USAGE_ITERATOR_PARSER_COMPLETE; in btstack_hid_usage_iterator_find_next_usage()
373 if ((TagType) (&iterator->descriptor_item)->item_type == Main) { in btstack_hid_usage_iterator_find_next_usage()
375 iterator->usage_pos = iterator->descriptor_iterator.descriptor_pos; in btstack_hid_usage_iterator_find_next_usage()
376 iterator->usage_page = iterator->global_usage_page; in btstack_hid_usage_iterator_find_next_usage()
381 iterator->state = BTSTACK_HID_USAGE_ITERATOR_PARSER_COMPLETE; in btstack_hid_usage_iterator_find_next_usage()
384 void btstack_hid_usage_iterator_init(btstack_hid_usage_iterator_t * iterator, const uint8_t * hid_d… in btstack_hid_usage_iterator_init() argument
385 memset(iterator, 0, sizeof(btstack_hid_usage_iterator_t)); in btstack_hid_usage_iterator_init()
387 iterator->descriptor = hid_descriptor; in btstack_hid_usage_iterator_init()
388 iterator->descriptor_len = hid_descriptor_len; in btstack_hid_usage_iterator_init()
389 iterator->report_type = hid_report_type; in btstack_hid_usage_iterator_init()
390 iterator->state = BTSTACK_HID_USAGE_ITERATOR_STATE_SCAN_FOR_REPORT_ITEM; in btstack_hid_usage_iterator_init()
391 iterator->global_report_id = HID_REPORT_ID_UNDEFINED; in btstack_hid_usage_iterator_init()
392 …btstack_hid_descriptor_iterator_init(&iterator->descriptor_iterator, hid_descriptor, hid_descripto… in btstack_hid_usage_iterator_init()
395 bool btstack_hid_usage_iterator_has_more(btstack_hid_usage_iterator_t * iterator){ in btstack_hid_usage_iterator_has_more() argument
396 while (iterator->state == BTSTACK_HID_USAGE_ITERATOR_STATE_SCAN_FOR_REPORT_ITEM){ in btstack_hid_usage_iterator_has_more()
397 btstack_hid_usage_iterator_find_next_usage(iterator); in btstack_hid_usage_iterator_has_more()
399 return iterator->state == BTSTACK_HID_USAGE_ITERATOR_USAGES_AVAILABLE; in btstack_hid_usage_iterator_has_more()
402 void btstack_hid_usage_iterator_get_item(btstack_hid_usage_iterator_t * iterator, btstack_hid_usage… in btstack_hid_usage_iterator_get_item() argument
405 item->size = iterator->global_report_size; in btstack_hid_usage_iterator_get_item()
406 item->report_id = iterator->global_report_id; in btstack_hid_usage_iterator_get_item()
407 item->usage_page = iterator->usage_minimum >> 16; in btstack_hid_usage_iterator_get_item()
408 item->bit_pos = iterator->report_pos_in_bit; in btstack_hid_usage_iterator_get_item()
410 bool is_variable = (iterator->descriptor_item.item_value & 2) != 0; in btstack_hid_usage_iterator_get_item()
412 item->usage = iterator->usage_minimum & 0xffffu; in btstack_hid_usage_iterator_get_item()
414 iterator->required_usages--; in btstack_hid_usage_iterator_get_item()
415 iterator->report_pos_in_bit += iterator->global_report_size; in btstack_hid_usage_iterator_get_item()
418 item->descriptor_item = iterator->descriptor_item; in btstack_hid_usage_iterator_get_item()
419 item->global_logical_minimum = iterator->global_logical_minimum; in btstack_hid_usage_iterator_get_item()
423 iterator->usage_minimum++; in btstack_hid_usage_iterator_get_item()
424 iterator->available_usages--; in btstack_hid_usage_iterator_get_item()
425 if (iterator->usage_range && (iterator->usage_minimum > iterator->usage_maximum)){ in btstack_hid_usage_iterator_get_item()
427 log_debug("Ignoring %u items without Usage", iterator->required_usages); in btstack_hid_usage_iterator_get_item()
428 iterator->report_pos_in_bit += iterator->global_report_size * iterator->required_usages; in btstack_hid_usage_iterator_get_item()
429 iterator->required_usages = 0; in btstack_hid_usage_iterator_get_item()
432 if (iterator->required_usages == 0u){ in btstack_hid_usage_iterator_get_item()
433 iterator->available_usages = 0; in btstack_hid_usage_iterator_get_item()
437 if (iterator->available_usages) { in btstack_hid_usage_iterator_get_item()
440 if (iterator->required_usages == 0u){ in btstack_hid_usage_iterator_get_item()
441 iterator->state = BTSTACK_HID_USAGE_ITERATOR_STATE_SCAN_FOR_REPORT_ITEM; in btstack_hid_usage_iterator_get_item()
443 btstack_usage_iterator_hid_find_next_usage(iterator); in btstack_hid_usage_iterator_get_item()
444 if (iterator->available_usages == 0u) { in btstack_hid_usage_iterator_get_item()
445 iterator->state = BTSTACK_HID_USAGE_ITERATOR_PARSER_COMPLETE; in btstack_hid_usage_iterator_get_item()
537 btstack_hid_descriptor_iterator_t iterator; in btstack_hid_get_report_size_for_id() local
538 btstack_hid_descriptor_iterator_init(&iterator, hid_descriptor, hid_descriptor_len); in btstack_hid_get_report_size_for_id()
539 while (btstack_hid_descriptor_iterator_has_more(&iterator)) { in btstack_hid_get_report_size_for_id()
540 … const hid_descriptor_item_t *const item = btstack_hid_descriptor_iterator_get_item(&iterator); in btstack_hid_get_report_size_for_id()
585 if (btstack_hid_descriptor_iterator_valid(&iterator)){ in btstack_hid_get_report_size_for_id()
594 btstack_hid_descriptor_iterator_t iterator; in btstack_hid_report_id_valid() local
595 btstack_hid_descriptor_iterator_init(&iterator, hid_descriptor, hid_descriptor_len); in btstack_hid_report_id_valid()
597 while (btstack_hid_descriptor_iterator_has_more(&iterator)) { in btstack_hid_report_id_valid()
598 … const hid_descriptor_item_t *const item = btstack_hid_descriptor_iterator_get_item(&iterator); in btstack_hid_report_id_valid()
616 if (btstack_hid_descriptor_iterator_valid(&iterator)) { in btstack_hid_report_id_valid()
630 btstack_hid_descriptor_iterator_t iterator; in btstack_hid_report_id_declared() local
631 btstack_hid_descriptor_iterator_init(&iterator, hid_descriptor, hid_descriptor_len); in btstack_hid_report_id_declared()
632 while (btstack_hid_descriptor_iterator_has_more(&iterator)) { in btstack_hid_report_id_declared()
633 … const hid_descriptor_item_t *const item = btstack_hid_descriptor_iterator_get_item(&iterator); in btstack_hid_report_id_declared()