Skip to content

hid_enumerate() gives unexpected device instances #155

@devspectre

Description

@devspectre

hid_enumerate() works well on Windows and was able to find the correct port by dev->product_string.
However, on Mac, hid_enumerate() gives three instances of hid_device_info and they all include same product_string and none of them are what I expected.
This is the code.

struct hid_device_info *devs, *cur_dev;
    devs = hid_enumerate(0x0, 0x0);
    cur_dev = devs;
    while (cur_dev) {
        struct hid_device_info *dev = cur_dev;
        cur_dev = cur_dev->next;

        if (dev->vendor_id != VID || dev->product_id != PID) {
            continue;
        }
        if (szPath && szPath[0] != 0x00) {
            // only check for the existence of device
            if (strcmp(dev->path, szPath) == 0) {
                ret = true;
                break;
            }
        } else {
            if (std::wstring(dev->product_string) == L"transport") {
                ret = true;
                if (szPath && size > 0) {
                    // save path
                    strncpy(szPath, dev->path, size);
                    break;
                }
            }
        }
    }

I debugged the app and found that string "transport" in dev->path as a substring in it.

Of course, windows code is a little bit different but logic is same as this.
I'd like to know what the problem is and how I can solve this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    macOSRelated to macOS backend

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions