IOHID: добавить трекпад в соответствующий словарь

Я пытаюсь добавить свойство трекпадов в словарь, передаваемый IOHIDManager, Этот менеджер будет смотреть на все устройства управления указателями. Это работает для мыши так:

CFArrayRef matches;
{
    CFMutableDictionaryRef mouse = myCreateDeviceMatchingDictionary(0x01, kHIDUsage_GD_Mouse); //works
    CFMutableDictionaryRef pointer   = myCreateDeviceMatchingDictionary(0x01, kHIDUsage_GD_Pointer); //does not track
    CFMutableDictionaryRef matchesList[] = {pointer, mouse};
    matches = CFArrayCreate(kCFAllocatorDefault, (const void **)matchesList, 2, NULL);
}

IOHIDManagerSetDeviceMatchingMultiple(hidManager, matches);

Я не могу заставить его забрать события трекпада. Единственный трекпад, с которым я должен тестировать, - это трекпад Apple, и это, похоже, не работает. Страница со списком всех констант находится здесь. Что мне нужно добавить в мой соответствующий словарь, чтобы получить это?

РЕДАКТИРОВАТЬ:myCreateDeviceMatchingDictionary() реализовано так:

CFMutableDictionaryRef myCreateDeviceMatchingDictionary(UInt32 usagePage,  UInt32 usage){

    CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0
                                                            , & kCFTypeDictionaryKeyCallBacks
                                                            , & kCFTypeDictionaryValueCallBacks);
    if (!dict)
        return NULL;

    CFNumberRef pageNumberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, & usagePage);
    if (!pageNumberRef) {
        CFRelease(dict);
        return NULL;
    }
    CFDictionarySetValue(dict, CFSTR(kIOHIDDeviceUsagePageKey), pageNumberRef);
    CFRelease(pageNumberRef);

    CFNumberRef usageNumberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, & usage);
    if (!usageNumberRef) {
        CFRelease(dict);
        return NULL;
    }
    CFDictionarySetValue(dict, CFSTR(kIOHIDDeviceUsageKey), usageNumberRef);
    CFRelease(usageNumberRef);
    return dict;
}

1 ответ

Тачпад на моем rMBP имеет несколько объявлений об использовании в своем дескрипторе отчета, одно из них

0x05, 0x0D,        // Usage Page (Digitizer)
0x09, 0x05,        // Usage (Touch Pad)

Я подозреваю, что это соответствует

myCreateDeviceMatchingDictionary(kHIDPage_Digitizer, kHIDUsage_Dig_TouchPad);

В зависимости от того, что именно ваш код для myCreateDeviceMatchingDictionary является.

Вы можете прочитать дескриптор отчета для всех ваших устройств HID, используя следующую команду:

ioreg -irc IOHIDDevice -w 0

И выбирая свойства "ReportDescriptor".

Примечание: длинный вывод, лучше всего перенаправить его в файл.

Другие вопросы по тегам