4623:011а мультисенсорный монитор

На работе у нас есть мультитач-монитор, который, по-видимому, представляет собой USB-устройство с интерфейсом пользователя (HID) . Он идентифицирует себя как продукт поставщика 0x4623 0x011a, по-видимому, произведенный Beijing Honghe Technology Group , но имеющий торговую марку Newline . Он работает из коробки в Linux (очевидно, с использованием универсального драйвера мультитач HID), но не в OS X. system_profilerописывает это так:

o HHTTOUCH@14110000  <class IOUSBHostDevice, id 0x100008953, registered, matched, active, busy 0 (731 ms), retain 30>
| {
|   "USBPortType" = 0x0
|   "sessionID" = 0x180f680965f78
|   "USB Vendor Name" = "HongHeTouch"
|   "IOCFPlugInTypes" = {"9dc7b780-9ec0-11d4-a54f-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"}
|   "IOPowerManagement" = {"PowerOverrideOn"=Yes,"CapabilityFlags"=0x8000,"MaxPowerState"=0x2,"DevicePowerState"=0x2,"ChildrenPowerState"=0x1,"DriverPowerState"=0x0,"CurrentPowerState"=0x2}
|   "USBSpeed" = 0x1
|   "idProduct" = 0x11a
|   "bcdDevice" = 0x100
|   "kUSBVendorString" = "HongHeTouch"
|   "locationID" = 0x14110000
|   "USB Product Name" = "HHTTOUCH"
|   "IOGeneralInterest" = "IOCommand is not serializable"
|   "kUSBCurrentConfiguration" = 0x1
|   "IOClassNameOverride" = "IOUSBDevice"
|   "bDeviceSubClass" = 0x0
|   "idVendor" = 0x4623
|   "AppleUSBAlternateServiceRegistryID" = 0x100008955
|   "bDeviceProtocol" = 0x0
|   "bDeviceClass" = 0x0
| }
| 
+-o AppleUSBHostLegacyClient  <class AppleUSBHostLegacyClient, id 0x100008956, !registered, !matched, active, busy 0, retain 8>
|   {…}
|   
+-o AppleUSBHostCompositeDevice  <class AppleUSBHostCompositeDevice, id 0x10000897f, !registered, !matched, active, busy 0, retain 4>
|   {…}
|   
+-o IOUSBHostInterface@0  <class IOUSBHostInterface, id 0x100008980, registered, matched, active, busy 0 (411 ms), retain 11>
| | {
| |   "USBPortType" = 0x0
| |   "IOCFPlugInTypes" = {"2d9786c6-9ef3-11d4-ad51-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"}
| |   "bcdDevice" = 0x100
| |   "USBSpeed" = 0x1
| |   "idProduct" = 0x11a
| |   "bConfigurationValue" = 0x1
| |   "bInterfaceSubClass" = 0x0
| |   "locationID" = 0x14110000
| |   "IOGeneralInterest" = "IOCommand is not serializable"
| |   "IOClassNameOverride" = "IOUSBInterface"
| |   "AppleUSBAlternateServiceRegistryID" = 0x100008982
| |   "idVendor" = 0x4623
| |   "bInterfaceProtocol" = 0x0
| |   "bAlternateSetting" = 0x0
| |   "bInterfaceNumber" = 0x0
| |   "bInterfaceClass" = 0x3
| | }
| | 
| +-o IOUSBHostHIDDevice@14110000,0  <class IOUSBHostHIDDevice, id 0x100008989, registered, matched, active, busy 0 (13 ms), retain 10>
|   | {
|   |   "IOClass" = "IOUSBHostHIDDevice"
|   |   "Transport" = "USB"
|   |   "BootProtocol" = 0x0
|   |   "IOPersonalityPublisher" = "com.apple.driver.usb.IOUSBHostHIDDeviceSafeBoot"
|   |   "HIDDefaultBehavior" = ""
|   |   "MaxInputReportSize" = 0x40
|   |   "IOProviderClass" = "IOUSBHostInterface"
|   |   "Manufacturer" = "HongHeTouch"
|   |   "Product" = "HHTTOUCH"
|   |   "DeviceUsagePairs" = ({"DeviceUsagePage"=0xd,"DeviceUsage"=0x4},{"DeviceUsagePage"=0xd,"DeviceUsage"=0xe},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x2},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x1},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x6},{"DeviceUsagePage"=0xff00,"DeviceUsage"=0x0})
|   |   "IOProbeScore" = 0xc350
|   |   "MaxOutputReportSize" = 0x10
|   |   "ReportDescriptor" = <05…00$
|   |   "IOUserClientClass" = "IOHIDLibUserClient"
|   |   "bInterfaceSubClass" = 0x0
|   |   "bInterfaceClass" = 0x3
|   |   "IOCFPlugInTypes" = {"7DDEECA8-A7B4-11DA-8A0E-0014519758EF"="IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin","FA12FA38-6F1A-11D4-BA0C-0005028F18D5"="IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin"}
|   |   "CountryCode" = 0x0
|   |   "VendorID" = 0x4623
|   |   "VersionNumber" = 0x100
|   |   "IOMatchCategory" = "IODefaultMatchCategory"
|   |   "CFBundleIdentifier" = "com.apple.driver.usb.IOUSBHostHIDDevice"
|   |   "PrimaryUsage" = 0x4
|   |   "LocationID" = 0x14110000
|   |   "ProductID" = 0x11a
|   |   "Elements" = ({"ReportID"=0x0,"ElementCookie"=0x1,"CollectionType"=0x1,"Type"=0x201,"Elements"=({"ReportID"=0x0,"ElementCookie"=0x2,"CollectionType"=0x2,"Type"=0x201,"Elements"=({"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0xd,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x2,"Size"=0x1,"Flags"=0x2,"ReportID"=0x1,"Usage"=0x42,"ReportCount"=0x1,"Unit"=0x0,"HasNullState"=No,"IsNonLinear"=No,"HasPreferredState"=Yes,"ReportSize"=0x1,"ScaledMin"=0x0,"IsWrapping"=No,"ScaledMax"=0x1,"ElementCookie"=0x12},{"UnitExponent"=0$
|   |   "IOGeneralInterest" = "IOCommand is not serializable"
|   |   "PrimaryUsagePage" = 0xd
|   |   "ReportInterval" = 0x1f40
|   |   "MaxFeatureReportSize" = 0x3
|   |   "InputReportElements" = ({"ReportID"=0x1,"ElementCookie"=0x19b,"Size"=0x1f0,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x1f0,"Usage"=0x0},{"ReportID"=0x2,"ElementCookie"=0x19c,"Size"=0x8,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x8,"Usage"=0x0},{"ReportID"=0x3,"ElementCookie"=0x19d,"Size"=0x8,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x8,"Usage"=0x0},{"ReportID"=0x4,"ElementCookie"=0x19e,"Size"=0x30,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x30,"Us$
|   | }
|   | 
|   +-o IOHIDInterface  <class IOHIDInterface, id 0x10000898f, registered, matched, active, busy 0 (12 ms), retain 7>
|   | | {
|   | |   "VendorID" = 0x4623
|   | |   "CountryCode" = 0x0
|   | |   "Product" = "HHTTOUCH"
|   | |   "VersionNumber" = 0x100
|   | |   "PrimaryUsage" = 0x4
|   | |   "LocationID" = 0x14110000
|   | |   "BootProtocol" = 0x0
|   | |   "ProductID" = 0x11a
|   | |   "DeviceUsagePairs" = ({"DeviceUsagePage"=0xd,"DeviceUsage"=0x4},{"DeviceUsagePage"=0xd,"DeviceUsage"=0xe},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x2},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x1},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x6},{"DeviceUsagePage"=0xff00,"DeviceUsage"=0x0})
|   | |   "Transport" = "USB"
|   | |   "ReportInterval" = 0x1f40
|   | |   "HIDDefaultBehavior" = ""
|   | |   "PrimaryUsagePage" = 0xd
|   | |   "Manufacturer" = "HongHeTouch"
|   | | }
|   | | 
|   | +-o IOHIDEventDriver  <class IOHIDEventDriver, id 0x100008992, registered, matched, active, busy 0 (1 ms), retain 10>
|   |   | {
|   |   |   "IOClass" = "IOHIDEventDriver"
|   |   |   "MultiAxisPointer" = {"Elements"=(),"AxisCapabilities"=0x0}
|   |   |   "Scroll" = {"Elements"=()}
|   |   |   "BootProtocol" = 0x0
|   |   |   "Digitizer" = {"Transducers"=({"Elements"=({"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0xd,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x2,"Size"=0x1,"Flags"=0x2,"ReportID"=0x1,"Usage"=0x42,"ReportCount"=0x1,"Unit"=0x0,"HasNullState"=No,"IsNonLinear"=No,"HasPreferredState"=Yes,"ReportSize"=0x1,"ScaledMin"=0x0,"IsWrapping"=No,"ScaledMax"=0x1,"ElementCookie"=0x12},{"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0xd,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x2,"Size"=0x1,"Flags"=0x2,"ReportID"=0x1,"Usage"=0x32,"$
|   |   |   "Keyboard" = {"Elements"=({"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0x7,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x2,"Size"=0x1,"Flags"=0x2,"ReportID"=0x5,"Usage"=0xe0,"ReportCount"=0x1,"Unit"=0x0,"HasNullState"=No,"IsNonLinear"=No,"HasPreferredState"=Yes,"ReportSize"=0x1,"ScaledMin"=0x0,"IsWrapping"=No,"ScaledMax"=0x1,"ElementCookie"=0x33},{"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0x7,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x2,"Size"=0x1,"Flags"=0x2,"ReportID"=0x5,"Usage"=0xe1,"ReportCount"=0x1,$
|   |   |   "IOPersonalityPublisher" = "com.apple.iokit.IOHIDEventDriver"
|   |   |   "Transport" = "USB"
|   |   |   "HIDDefaultBehavior" = ""
|   |   |   "Manufacturer" = "HongHeTouch"
|   |   |   "IOProviderClass" = "IOHIDInterface"
|   |   |   "GameControllerType" = 0x0
|   |   |   "Product" = "HHTTOUCH"
|   |   |   "DisplayIntegrated" = Yes
|   |   |   "DeviceUsagePairs" = ({"DeviceUsagePage"=0xd,"DeviceUsage"=0x4},{"DeviceUsagePage"=0xd,"DeviceUsage"=0xe},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x2},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x1},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x6},{"DeviceUsagePage"=0xff00,"DeviceUsage"=0x0})
|   |   |   "IOProbeScore" = 0x4b0
|   |   |   "VendorIDSource" = 0x0
|   |   |   "HIDPointerResolution" = 0x1900000
|   |   |   "RelativePointer" = {"Elements"=()}
|   |   |   "VendorID" = 0x4623
|   |   |   "VersionNumber" = 0x100
|   |   |   "CountryCode" = 0x0
|   |   |   "IOMatchCategory" = "IODefaultMatchCategory"
|   |   |   "CFBundleIdentifier" = "com.apple.iokit.IOHIDFamily"
|   |   |   "LED" = {"Elements"=({"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0x8,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x81,"Size"=0x1,"Flags"=0x2,"ReportID"=0x5,"Usage"=0x1,"ReportCount"=0x1,"Unit"=0x0,"HasNullState"=No,"IsNonLinear"=No,"HasPreferredState"=Yes,"ReportSize"=0x1,"ScaledMin"=0x0,"IsWrapping"=No,"ScaledMax"=0x1,"ElementCookie"=0x122},{"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0x8,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x81,"Size"=0x1,"Flags"=0x2,"ReportID"=0x5,"Usage"=0x2,"ReportCount"=0x1,"Uni$
|   |   |   "HIDEventServiceProperties" = {"HIDSubinterfaceID"=0x28,"HIDKeyboardModifierMappingPairs"=()}
|   |   |   "LocationID" = 0x14110000
|   |   |   "ProductID" = 0x11a
|   |   |   "ReportInterval" = 0x1f40
|   |   |   "SupportsInk" = 0x1
|   |   |   "GameControllerPointer" = {"Elements"=({"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0x8,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x81,"Size"=0x1,"Flags"=0x2,"ReportID"=0x5,"Usage"=0x1,"ReportCount"=0x1,"Unit"=0x0,"HasNullState"=No,"IsNonLinear"=No,"HasPreferredState"=Yes,"ReportSize"=0x1,"ScaledMin"=0x0,"IsWrapping"=No,"ScaledMax"=0x1,"ElementCookie"=0x122},{"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0x8,"Max"=0x1,"IsArray"=No,"Min"=0x0,"Type"=0x81,"Size"=0x1,"Flags"=0x2,"ReportID"=0x5,"Usage"=0x2,"Rep$
|   |   | }
|   |   | 
|   |   +-o IOHIDPointing  <class IOHIDPointing, id 0x100008994, registered, matched, active, busy 0 (1 ms), retain 9>
|   |   | | {
|   |   | |   "HIDScrollAccelerationType" = "HIDMouseScrollAcceleration"
|   |   | |   "HIDVirtualDevice" = No
|   |   | |   "Transport" = "USB"
|   |   | |   "HIDDeviceEventID" = 0x8994
|   |   | |   "Product" = "HHTTOUCH"
|   |   | |   "Manufacturer" = "HongHeTouch"
|   |   | |   "HIDPointerButtonCount" = 0xd
|   |   | |   "DeviceUsagePairs" = ({"DeviceUsagePage"=0xd,"DeviceUsage"=0x4},{"DeviceUsagePage"=0xd,"DeviceUsage"=0xe},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x2},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x1},{"DeviceUsagePage"=0x1,"DeviceUsage"=0x6},{"DeviceUsagePage"=0xff00,"DeviceUsage"=0x0})
|   |   | |   "HIDPointerResolution" = 0x1900000
|   |   | |   "VendorIDSource" = 0x0
|   |   | |   "alt_sender_id" = 0x100008992
|   |   | |   "HIDPointerConvertAbsolute" = <00>
|   |   | |   "CountryCode" = 0x0
|   |   | |   "VendorID" = 0x4623
|   |   | |   "VersionNumber" = 0x100
|   |   | |   "HIDSubinterfaceID" = 0x0
|   |   | |   "HIDResetPointer" = Yes
|   |   | |   "HIDInterfaceID" = 0x0
|   |   | |   "HIDPointerContactToMove" = <00>
|   |   | |   "LocationID" = 0x14110000
|   |   | |   "ProductID" = 0x11a
|   |   | |   "HIDKind" = 0x2
|   |   | |   "HIDPointerAccelerationType" = "HIDMouseAcceleration"
|   |   | |   "ReportInterval" = 0x1f40
|   |   | |   "HIDScrollAccelCurvesDebug" = ("no scroll resolution for type","no scroll resolution for type","no scroll resolution for type")
|   |   | | }
|   |   | | 
|   |   | +-o IOHIDSystem  <class IOHIDSystem, id 0x100000313, registered, matched, active, busy 0 (0 ms), retain 20>
|   |   |   | {…}
|   |   |   | 
|   |   |   +-o IOHIDUserClient  <class IOHIDUserClient, id 0x100000446, !registered, !matched, active, busy 0, retain 5>
|   |   |   |   {…}
|   |   |   |   
|   |   |   +-o IOHIDParamUserClient  <class IOHIDParamUserClient, id 0x10000044b, !registered, !matched, active, busy 0, retain 5>
|   |   |       {…}
|   |   |       
|   |   +-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100008995, registered, matched, active, busy 0 (0 ms), retain 9>
|   |   | | {…}
|   |   | | 
|   |   | +-o IOHIDSystem  <class IOHIDSystem, id 0x100000313, registered, matched, active, busy 0 (0 ms), retain 20>
|   |   |   | {…}
|   |   |   | 
|   |   |   +-o IOHIDUserClient  <class IOHIDUserClient, id 0x100000446, !registered, !matched, active, busy 0, retain 5>
|   |   |   |   {…}
|   |   |   |   
|   |   |   +-o IOHIDParamUserClient  <class IOHIDParamUserClient, id 0x10000044b, !registered, !matched, active, busy 0, retain 5>
|   |   |       {…}
|   |   |       
|   |   +-o IOHIDSystem  <class IOHIDSystem, id 0x100000313, registered, matched, active, busy 0 (0 ms), retain 19>
|   |     | {…}
|   |     | 
|   |     +-o IOHIDUserClient  <class IOHIDUserClient, id 0x100000446, !registered, !matched, active, busy 0, retain 5>
|   |     |   {…}
|   |     |   
|   |     +-o IOHIDParamUserClient  <class IOHIDParamUserClient, id 0x10000044b, !registered, !matched, active, busy 0, retain 5>
|   |         {…}
|   |         
|   +-o IOHIDLibUserClient  <class IOHIDLibUserClient, id 0x100008990, !registered, !matched, active, busy 0, retain 6>
|   |   {…}
|   |   
|   +-o IOHIDLibUserClient  <class IOHIDLibUserClient, id 0x100008991, !registered, !matched, active, busy 0, retain 6>
|       {…}
|       
+-o IOUSBHostInterface@1  <class IOUSBHostInterface, id 0x100008981, registered, matched, active, busy 0 (280 ms), retain 11>
  | {
  |   "USBPortType" = 0x0
  |   "IOCFPlugInTypes" = {"2d9786c6-9ef3-11d4-ad51-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"}
  |   "bcdDevice" = 0x100
  |   "USBSpeed" = 0x1
  |   "idProduct" = 0x11a
  |   "bConfigurationValue" = 0x1
  |   "bInterfaceSubClass" = 0x0
  |   "locationID" = 0x14110000
  |   "IOGeneralInterest" = "IOCommand is not serializable"
  |   "IOClassNameOverride" = "IOUSBInterface"
  |   "AppleUSBAlternateServiceRegistryID" = 0x100008984
  |   "idVendor" = 0x4623
  |   "bInterfaceProtocol" = 0x0
  |   "bAlternateSetting" = 0x0
  |   "bInterfaceNumber" = 0x1
  |   "bInterfaceClass" = 0x3
  | }
  | 
  +-o IOUSBHostHIDDevice@14110000,1  <class IOUSBHostHIDDevice, id 0x100008988, registered, matched, active, busy 0 (4 ms), retain 10>
    | {
    |   "IOClass" = "IOUSBHostHIDDevice"
    |   "Transport" = "USB"
    |   "BootProtocol" = 0x0
    |   "IOPersonalityPublisher" = "com.apple.driver.usb.IOUSBHostHIDDeviceSafeBoot"
    |   "HIDDefaultBehavior" = ""
    |   "MaxInputReportSize" = 0x40
    |   "IOProviderClass" = "IOUSBHostInterface"
    |   "Manufacturer" = "HongHeTouch"
    |   "Product" = "HHTTOUCH"
    |   "DeviceUsagePairs" = ({"DeviceUsagePage"=0xff00,"DeviceUsage"=0x1})
    |   "IOProbeScore" = 0xc350
    |   "MaxOutputReportSize" = 0x40
    |   "ReportDescriptor" = <06…c0>
    |   "IOUserClientClass" = "IOHIDLibUserClient"
    |   "bInterfaceSubClass" = 0x0
    |   "bInterfaceClass" = 0x3
    |   "IOCFPlugInTypes" = {"7DDEECA8-A7B4-11DA-8A0E-0014519758EF"="IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin","FA12FA38-6F1A-11D4-BA0C-0005028F18D5"="IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin"}
    |   "CountryCode" = 0x21
    |   "VendorID" = 0x4623
    |   "VersionNumber" = 0x100
    |   "IOMatchCategory" = "IODefaultMatchCategory"
    |   "CFBundleIdentifier" = "com.apple.driver.usb.IOUSBHostHIDDevice"
    |   "PrimaryUsage" = 0x1
    |   "LocationID" = 0x14110000
    |   "ProductID" = 0x11a
    |   "Elements" = ({"ReportID"=0x0,"ElementCookie"=0x1,"CollectionType"=0x1,"Type"=0x201,"Elements"=({"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0xff00,"Max"=0xff,"IsArray"=No,"Min"=0x0,"Type"=0x1,"Size"=0x8,"Flags"=0x2,"ReportID"=0x1,"Usage"=0x1,"ReportCount"=0x1,"Unit"=0x0,"HasNullState"=No,"IsNonLinear"=No,"HasPreferredState"=Yes,"ReportSize"=0x8,"ScaledMin"=0x0,"IsWrapping"=No,"ScaledMax"=0xff,"ElementCookie"=0x2},{"UnitExponent"=0x0,"IsRelative"=No,"UsagePage"=0xff00,"Max"=0xff,"IsArray"=No,"Min"=0x0,"Type"=$
    |   "IOGeneralInterest" = "IOCommand is not serializable"
    |   "PrimaryUsagePage" = 0xff00
    |   "ReportInterval" = 0x1f40
    |   "MaxFeatureReportSize" = 0x1
    |   "InputReportElements" = ({"ReportID"=0x1,"ElementCookie"=0x2c4,"Size"=0x200,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x200,"Usage"=0x0},{"ReportID"=0x2,"ElementCookie"=0x2c5,"Size"=0x200,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x200,"Usage"=0x0},{"ReportID"=0x3,"ElementCookie"=0x2c6,"Size"=0x200,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"=0x200,"Usage"=0x0},{"ReportID"=0x4,"ElementCookie"=0x2c7,"Size"=0x200,"ReportCount"=0x1,"Type"=0x1,"UsagePage"=0x0,"ReportSize"$
    | }
    | 
    +-o IOHIDInterface  <class IOHIDInterface, id 0x10000898b, registered, matched, active, busy 0 (4 ms), retain 6>
    |   {
    |     "VendorID" = 0x4623
    |     "CountryCode" = 0x21
    |     "Product" = "HHTTOUCH"
    |     "VersionNumber" = 0x100
    |     "PrimaryUsage" = 0x1
    |     "LocationID" = 0x14110000
    |     "BootProtocol" = 0x0
    |     "ProductID" = 0x11a
    |     "DeviceUsagePairs" = ({"DeviceUsagePage"=0xff00,"DeviceUsage"=0x1})
    |     "Transport" = "USB"
    |     "ReportInterval" = 0x1f40
    |     "HIDDefaultBehavior" = ""
    |     "PrimaryUsagePage" = 0xff00
    |     "Manufacturer" = "HongHeTouch"
    |   }
    |   
    +-o IOHIDLibUserClient  <class IOHIDLibUserClient, id 0x10000898c, !registered, !matched, active, busy 0, retain 6>
    |   {
    |     "IOUserClientCreator" = "pid 94, loginwindow"
    |   }
    |   
    +-o IOHIDLibUserClient  <class IOHIDLibUserClient, id 0x10000898d, !registered, !matched, active, busy 0, retain 6>
        {
          "IOUserClientCreator" = "pid 274, UserEventAgent"
        }

Устройство служит комбинацией клавиатуры (с дистанционным управлением PgUpи PgDnдоступной через него) и устройства ввода с поддержкой мультисенсорного ввода. Аспект клавиатуры работает достаточно хорошо: OS X сообщает о клавиатуре как о неизвестном типе, предлагая нажать определенную клавишу Shift. Поскольку у меня нет сдвига, я нажимаю любую из этих кнопок перемещения по страницам, а затем могу вручную выбрать тип клавиатуры. После этого я могу использовать клавиши для прокрутки приложений.

Сенсорный ввод, однако, кажется нефункциональным. Об устройстве сообщается как IOHIDPointingи Digitizerв приведенном выше отчете, поэтому, похоже, есть некоторое понимание того, что это за устройство. Тем не менее я не вижу, чтобы он контролировал мой указатель мыши.

  • Должен ли я как-то включать это устройство, чтобы сказать, что мультитач-события из этого источника должны управлять моим указателем мыши?
  • Нужно ли загружать какие-либо дополнительные драйверы, чтобы события мультитач HID в конечном итоге управляли моим указателем?
  • Есть ли какой-нибудь инструмент (командная строка или графический, поставляемый с OS X или третьей стороной), который я могу использовать для отладки событий, генерируемых устройством? Предпочтительно на разных уровнях, таких как HID, сенсорный, указатель или что-то еще в реальной архитектуре?

Изменить: я открыл отчет об ошибке Apple 25216130 по этому поводу.

Я получил обратную связь от Apple: они попросили sudo sysdiagnoseвывод, а затем sudo dtrace -n 'fbt::*HIDPointing*:entry'вывод. Последний (почти) пуст, поэтому я дал им вывод из некоторых более широких dtraceшаблонов, связанных с HID, например fbt:com.apple.iokit.IOHIDFamily::entry. Нет ответа с тех пор, последнее сообщение 31 марта. Я жду и надеюсь.

Ответы (1)

В стеке Apple USB есть ошибка, из-за которой некоторые составные USB-устройства не могут работать. Я открыл Apple TSI и отчет об ошибке по этому поводу, и мне дали обходной путь, который исправляет это для меня. Обходной путь — это просто kext без кода , с этой личностью, добавленной в словарь IOKitPersonalities:

    <key>Display Workaround</key>
    <dict>
        <key>CFBundleIdentifier</key>
        <string>com.apple.driver.AppleUSBHostMergeProperties</string>
        <key>IOClass</key>
        <string>AppleUSBHostMergeProperties</string>
        <key>IOProviderClass</key>
        <string>IOUSBHostDevice</string>
        <key>IOProviderMergeProperties</key>
        <dict>
            <key>kUSBRemoteWakeOverride</key>
            <false/>
        </dict>
        <key>idVendor</key>
        <integer>17955</integer>
        <key>idProduct</key>
        <integer>282</integer>
    </dict>

(Я добавил ваш VID/PID выше).

Будущая версия OS X (надеюсь) исправит это.

Обратите внимание, что кекс без кода должен быть помещен в папку /Library/Extensions и должен быть подписан.

То, что «kext должен быть подписан», является здесь большим препятствием, так как я не хочу платить за регистрацию ADP только за это, и поскольку apple.stackexchange.com/q/174146/25135 и stackoverflow.com/q/26723321/1468366 похоже, что самоподписанные сертификаты не подходят для кекстов. Я сделал sudo nvram boot-args='kext-dev-mode=1'это и перезагрузился, но, видимо, кекс все еще не загружается. См . Gist.github.com/gagern/6d98868c75f009d641aa для моего plist и моих попыток диагностики. Есть идеи?
Нашел сообщение , в котором говорится, что kext-dev-modeработает только для 10.10 Yosemite, а не для 10.11 El Capitan. Придется попытаться найти члена ADP, у которого либо есть сертификат подписи kext, либо он хочет его получить. Довольно много работы, чтобы обойти ошибку!
После apple.stackexchange.com/a/209653/25135 и developer.apple.com/library/ios/documentation/Security/… я попробовал csrutil disable. Теперь kextutilутверждает, что загружает вещь, но kextstatне перечисляет ее, и устройство по-прежнему не работает. Заставляет меня задуматься, является ли это проблемой загрузки kext или обходной путь не применим к моему делу.
это несколько особый кекс по некоторым причинам: 1) он не загружается вами, а загружается автоматически OSX на основе совпадений с идентификаторами HW, 2) он устанавливает только какое-то свойство в составном драйвере Apple. Чтобы убедиться, что он загружен, вы должны выполнить команду «ioreg -lw0», а затем просмотреть дерево в поисках своего устройства. Где-то должна быть установлена ​​опция «kUSBRemoteWakeOverride».
также попробуйте добавить <key>OSBundleRequired</key> <string>Local-Root</string>ключ в основной plist dict. Может быть, это нужно для того, чтобы заставить его загрузиться.