1
0
mirror of https://github.com/Toxblh/MTMR.git synced 2026-01-11 09:28:38 +00:00

HapticFeedback: fix recovery from the long sleep (#192)

HapticFeedback: fix recovery from the long sleep
This commit is contained in:
Anton Palgunov 2019-07-17 09:27:26 +01:00 committed by GitHub
commit 9f0944b06b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,23 +9,26 @@
import IOKit import IOKit
class HapticFeedback { class HapticFeedback {
private var actuatorRef: CFTypeRef? private var correctDeviceId: UInt64?
// Here we have list of possible IDs for Haptic Generator Device. They are not constant // Here we have list of possible IDs for Haptic Generator Device. They are not constant
// To find deviceID, you will need IORegistryExplorer app from Additional Tools for Xcode dmg // To find deviceID, you will need IORegistryExplorer app from Additional Tools for Xcode dmg
// which you can download from https://developer.apple.com/download/more/?=Additional%20Tools // which you can download from https://developer.apple.com/download/more/?=Additional%20Tools
// Open IORegistryExplorer app, search for AppleMultitouchDevice and get "Multitouch ID" // Open IORegistryExplorer app, search for AppleMultitouchDevice and get "Multitouch ID"
// There should be programmatic way to get it but I can't find, no docs for macOS :( // There should be programmatic way to get it but I can't find, no docs for macOS :(
private var possibleDeviceIDs: [UInt64] = [ private let possibleDeviceIDs: [UInt64] = [
0x200_0000_0100_0000, // MacBook Pro 2016/2017 0x200_0000_0100_0000, // MacBook Pro 2016/2017
0x300000080500000 // MacBook Pro 2019 (possibly 2018 as well) 0x300000080500000 // MacBook Pro 2019 (possibly 2018 as well)
] ]
init() { init() {
// Let's find and init Haptic device // Let's find our Haptic device
possibleDeviceIDs.forEach {(deviceID) in possibleDeviceIDs.forEach {(deviceID) in
guard actuatorRef == nil else {return} guard correctDeviceId == nil else {return}
actuatorRef = MTActuatorCreateFromDeviceID(deviceID).takeRetainedValue() let actuatorRef: CFTypeRef? = MTActuatorCreateFromDeviceID(deviceID).takeRetainedValue()
if actuatorRef != nil {
correctDeviceId = deviceID
}
} }
} }
@ -41,8 +44,15 @@ class HapticFeedback {
// you can get a plist `otool -s __TEXT __tpad_act_plist /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/Current/MultitouchSupport|tail -n +3|awk -F'\t' '{print $2}'|xxd -r -p` // you can get a plist `otool -s __TEXT __tpad_act_plist /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/Current/MultitouchSupport|tail -n +3|awk -F'\t' '{print $2}'|xxd -r -p`
func tap(strong: Int32) { func tap(strong: Int32) {
guard correctDeviceId != nil else {
print("guard correctDeviceId == nil (no haptic device found?)")
return
}
let actuatorRef: CFTypeRef? = MTActuatorCreateFromDeviceID(correctDeviceId!).takeRetainedValue()
guard actuatorRef != nil else { guard actuatorRef != nil else {
print("guard actuatorRef == nil (can't find proper haptic device?)") print("guard actuatorRef == nil")
return return
} }