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".
Примечание: длинный вывод, лучше всего перенаправить его в файл.