if you want to look driver development, look at Apple's IOKit development docs (though it's deprecated now and will be removed as Apple pushes people to use DriverKit)
@kprinssu Yeah Apple is really pushing DriverKit, indeed that's what I ended up using. The difference with IOKit in terms of API looks very subtle to me BTW
Hello, I'm trying to fix the stylus issue in VoodooI2C. Could someone point me which portion of the code I can work on? I am hoping to contribute to VoodooI2C with my programming experience if no one can fix it. I found the multitouch gesture is not working on the touchscreen with the stylus pen on the secondary screen in my ASUS ZenBook Pro Duo 15 (has the main 4k and secondary touchscreens. Only the cursor and click functions work. (multi touch, scroll, and hold to drag/right click functions are not available.) The secondary touchscreen comes with stylus pen and support multi touch in Windows 10 and Ubuntu). I have tried disconnected the main touchscreen (unplug the eDP connector from MB), and had only the secondary screen in macOS 10.15.7. However, the issue remains the same. (only the cursor and click functions work.)
@1Revenger1 Is it possible compile VoodooI2C in Catalina or Big Sur? I see a compiling error "'IOKit/IOLib.h' file not found" in my Xcode.
Clone MacKernelSDK to your project folder
Is it inside the VoodooI2C folder?
➜ VoodooI2C git:(master) ls
Dependencies Multitouch Support VoodooI2C Satellites
Documentation README.md VoodooI2C.xcworkspace
LICENSE.txt Utilities docs
Yes I fixed it. However, there is another error I'm fixing now
/Users/username/Library/Developer/Xcode/DerivedData/VoodooI2C-brfmrnnidcznlxgxjrczhdfukmxm/Build/Intermediates.noindex/VoodooI2C.build/Release/VoodooI2C.build/Script-ACA4A00D21E25F0E00A91B61.sh: line 2: cpplint: command not found Command PhaseScriptExecution failed with a nonzero exit code
tbh, I just built VoodooI2CHID alone by opening up that project within the satellite folder
don't need cpplint or cldoc for that
Yes the build is successful now. Thanks for opening the door for me to this project
I checked with the debug. It looks like VoodooI2CHID only detects one finger/one point how so ever I touch the secondary screen (with stylus function) with multiple fingers. Is this a bug in the VoodooI2CTouchscreenHIDEventDriver.cpp or/and VoodooI2CMultitouchInterface.cpp?
Also, I put some IOLOG to check which lines were loaded; it looks like VoodooI2CTouchscreenHIDEventDriver.cpp was able to detect whether the touch is triggered by finger or the stylus pen. However, it's always been recognized as one point contact no matter how many fingers I used to touch that screen.
Actually it looks like VoodooI2CMultitouchInterface.cpp was not used even for the main touchscreen, which the multitouch gesture works. Does that mean it's actually the VoodooI2C.kext instead of the satellite driver VoodooI2CHID.kext handling multitouch service? PS. Sorry for sending so many messages at the same time for this debug.
Have you looked in IORegistryViewer?
it should show which services are attached to the device which should help narrow down what's attaching and isn't attaching
it'll also show all the properties
Yes good idea:
I2C2:TPL0 is the stylus touchscreen
But I don't see the lines in VoodooI2CMultitouchInterface.cpp got executed based on IOLOG I put in that cpp file. I checking if it's actually the native engine handling the multi touch functions. (I was check the four finger swipe gesture on the main and secondary touch screens. i.e. I2C2:TPL0 and I2C3:TPL1)
Also tested the previous VoodooI2C versions and found none of them work for the secondary stylus touchscreen. I was guessing it was @zhen-zen's patch in the latest version (2.6.5) to make the single point work on this screen. I wonder if it's related to my DSDT/SSDT. Found a post from tonymac, which demos the similar issue and was able to fix it in the latest VoodooI2C version with multitouch on his stylus touchscreen. His laptop is HP and has a bit different DSDT for TPL device from mine.
You mentioned the wrong person lol. The comment you found is from @Goshin
Yes you're right lol
Also, I wonder are the touchscreen and stylus handled differently in VoodooI2c? What would happen to touchscreens with stylus generally? Is it possible this could be a DSDT/SSDT thing on the GPIO? I currently do not have any SSDT path on I2C and GPIO but my trackpad, the main touchscreen and stylus on the secondary screen work. Wonder if that means I do/don't need GPIO SSDT patch for stylus touchscreen?
Is it possible to disable stylus completely in VoodooI2C and test with the touchscreen function only?
Sorry for the typo - If I make it "event.transducers->getObject(i)" instead of "event.transducers->getObject(i+stylus_check)", the secondary touchscreen (with stylus function) would be completely unusable.
I found another interesting thing. The stylus and touchscreen can actuslly both work perfectly (with palm rest) in the main screen. I am not sure why for the secondary screen, only the stylus and single touch would work. Could this be just a VoodooI2c configuration thing?
@astro-lee-k I am sorry but I do not exactly the time dig through the code, the stylus code should work across one touchscreen
You seem to have exotic hardware with multiple touchscreens and that bit of the codebase is very untested and unknown to work
@kprinssu I also saw an issue about two touchscreens support. Would it be possible to fix that issue? I assume we can just set the mouse cursor to the location in another screen when user touch another screen. Wouldn't this be an easy problem to solve?
Um hey guys im not sure if this is the right place to ask... but if there're devs willing to continue to develop https://github.com/blankmac/AlpsT4USB project to support ALPS U1 i2c trackpads. i will be very willing to test anytime. thanks a lot!