MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / create_device_info

Function create_device_info

lib/hidapi/mac/hid.c:653–698  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

651}
652
653static struct hid_device_info *create_device_info(IOHIDDeviceRef device)
654{
655 const int32_t primary_usage_page = get_int_property(device, CFSTR(kIOHIDPrimaryUsagePageKey));
656 const int32_t primary_usage = get_int_property(device, CFSTR(kIOHIDPrimaryUsageKey));
657
658 /* Primary should always be first, to match previous behavior. */
659 struct hid_device_info *root = create_device_info_with_usage(device, primary_usage_page, primary_usage);
660 struct hid_device_info *cur = root;
661
662 if (!root)
663 return NULL;
664
665 CFArrayRef usage_pairs = get_usage_pairs(device);
666
667 if (usage_pairs != NULL) {
668 struct hid_device_info *next = NULL;
669 for (CFIndex i = 0; i < CFArrayGetCount(usage_pairs); i++) {
670 CFTypeRef dict = CFArrayGetValueAtIndex(usage_pairs, i);
671 if (CFGetTypeID(dict) != CFDictionaryGetTypeID()) {
672 continue;
673 }
674
675 CFTypeRef usage_page_ref, usage_ref;
676 int32_t usage_page, usage;
677
678 if (!CFDictionaryGetValueIfPresent((CFDictionaryRef)dict, CFSTR(kIOHIDDeviceUsagePageKey), &usage_page_ref) ||
679 !CFDictionaryGetValueIfPresent((CFDictionaryRef)dict, CFSTR(kIOHIDDeviceUsageKey), &usage_ref) ||
680 CFGetTypeID(usage_page_ref) != CFNumberGetTypeID() ||
681 CFGetTypeID(usage_ref) != CFNumberGetTypeID() ||
682 !CFNumberGetValue((CFNumberRef)usage_page_ref, kCFNumberSInt32Type, &usage_page) ||
683 !CFNumberGetValue((CFNumberRef)usage_ref, kCFNumberSInt32Type, &usage)) {
684 continue;
685 }
686 if (usage_page == primary_usage_page && usage == primary_usage)
687 continue; /* Already added. */
688
689 next = create_device_info_with_usage(device, usage_page, usage);
690 cur->next = next;
691 if (next != NULL) {
692 cur = next;
693 }
694 }
695 }
696
697 return root;
698}
699
700struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id, unsigned short product_id)
701{

Callers 2

hid_enumerateFunction · 0.85
hid.cFile · 0.85

Calls 3

get_int_propertyFunction · 0.85
get_usage_pairsFunction · 0.85

Tested by

no test coverage detected