From 89fa5b64c1fc38b4b370d45c7ad0d8d632e3b86c Mon Sep 17 00:00:00 2001 From: Avery Black Date: Wed, 18 Oct 2023 14:00:39 -0700 Subject: [PATCH] Use setValueData (#71) --- VoodooI2CHID/Info.plist | 5 ---- ...odooI2CPrecisionTouchpadHIDEventDriver.cpp | 27 ++++--------------- 2 files changed, 5 insertions(+), 27 deletions(-) diff --git a/VoodooI2CHID/Info.plist b/VoodooI2CHID/Info.plist index 7ac1aac..f3c8588 100644 --- a/VoodooI2CHID/Info.plist +++ b/VoodooI2CHID/Info.plist @@ -89,11 +89,6 @@ 13 - IOPropertyMatch - - Transport - I2C - IOProbeScore 300 IOClass diff --git a/VoodooI2CHID/VoodooI2CPrecisionTouchpadHIDEventDriver.cpp b/VoodooI2CHID/VoodooI2CPrecisionTouchpadHIDEventDriver.cpp index 2bcac01..ddc5e7b 100644 --- a/VoodooI2CHID/VoodooI2CPrecisionTouchpadHIDEventDriver.cpp +++ b/VoodooI2CHID/VoodooI2CPrecisionTouchpadHIDEventDriver.cpp @@ -12,29 +12,12 @@ OSDefineMetaClassAndStructors(VoodooI2CPrecisionTouchpadHIDEventDriver, VoodooI2CMultitouchHIDEventDriver); void VoodooI2CPrecisionTouchpadHIDEventDriver::enterPrecisionTouchpadMode() { - // This needs to be investigated further for USB touchpad support, - // it is currently commented out as it causes issues with input devices - // failing to wake from sleep and does not work on 10.15 and lower - - /* if (version_major > CATALINA_MAJOR_VERSION) { - // Update value from hardware so we can rewrite mode when waking from sleep - digitiser.input_mode->getValue(kIOHIDValueOptionsUpdateElementValues); - digitiser.input_mode->setValue(INPUT_MODE_TOUCHPAD); - ready = true; - return; - }*/ - - // TODO: setValue appears to not work on Catalina or older - VoodooI2CPrecisionTouchpadFeatureReport buffer; - buffer.reportID = digitiser.input_mode->getReportID(); - buffer.value = INPUT_MODE_TOUCHPAD; - buffer.reserved = 0x00; - IOBufferMemoryDescriptor* report = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, sizeof(VoodooI2CPrecisionTouchpadFeatureReport)); - report->writeBytes(0, &buffer, sizeof(VoodooI2CPrecisionTouchpadFeatureReport)); - - hid_interface->setReport(report, kIOHIDReportTypeFeature, digitiser.input_mode->getReportID()); - report->release(); + UInt8 inputMode[] = { INPUT_MODE_TOUCHPAD }; + // Use setDataValue as it does not check for duplicate writes + OSData *value = OSData::withBytes(inputMode, sizeof(inputMode)); + digitiser.input_mode->setDataValue(value); + OSSafeReleaseNULL(value); ready = true; }