Rozszerzanie funkcjonalności Magic Mouse: Czy potrzebuję kext?

Niedawno kupiłem Magic Mouse. Jest fantastyczny i pełen potencjału. Niestety, jest to poważnie utrudnione przez obsługę oprogramowania. Chcę to naprawić. Zrobiłem sporo badań i są to moje ustalenia dotyczące dotychczasowego łańcucha zdarzeń:

Magic Mouse wysyła pełne zdarzenia wielodotykowe do systemu.Zdarzenia wielodotykowe są przetwarzane w MultitouchSupport.framework (Carbon)Zdarzenia są interpretowane w ramach i wysyłane do systemu jako zwykłe zdarzeniaPodczas przewijania jednym palcem wysyła rzeczywiste zdarzenia kółka przewijania.Kiedy przesuwasz dwoma palcami, wysyła zdarzenie machnięcia.Żadne zdarzenia NSTouch nie są wysyłane do systemu. Nie można używać interfejsu API NSTouch do interakcji z myszą.

Po tym, jak odkryłem wszystkie powyższe elementy, zdemontowałem plik MultitouchSupport.framework i, z pewnym googlingiem, zorientowałem się, jak wstawić własne wywołanie zwrotne do łańcucha, aby otrzymać dane zdarzenia dotyku surowego. Jeśli wyliczysz listę urządzeń, możesz dołączyć do każdego urządzenia (gładzika i myszy). To odkrycie umożliwiłoby nam stworzenie szkieletu do używania multitouch na myszy, ale tylko w jednej aplikacji. Zobacz mój post tutaj:Surowe śledzenie wielodotyku.

Chcę dodać nową funkcjonalność do myszy w całymsystem, a nie tylko jedna aplikacja.

Próbując to zrobić, wymyśliłem, jak używaćKrany zdarzeń aby sprawdzić, czy dotknięcie zdarzenia najniższego poziomu pozwoli mi uzyskać surowe dane, zinterpretować je i wysłać na miejsce moje własne zdarzenia. Niestety tak nie jest. Stuknięcie zdarzenia, nawet na poziomie HID, jest nadal krokiem powyżej, w którym dane wejściowe są interpretowane w MultitouchSupport.framework.

Zobacz moją próbę kliknięcia tutaj:Dotknij zdarzenia - próba surowego multitouch.
Ciekawa uwaga: po odebraniu zdarzenia multitouch, takiego jak machnięcie, trafia domyślny przypadek i wypisuje numer zdarzenia 29. Nagłówek pokazuje 28 jako maksimum.

Jeśli chodzi o moje pytanie, teraz, kiedy macie wszystkie informacje i widzieliście, co próbowałem: jakie byłoby najlepsze podejście do rozszerzenia funkcjonalności Magic Mouse? Wiem, że muszę wstawić coś na poziomie wystarczająco niskim, aby uzyskać dane wejściowe, zanim zostaną przetworzone, a zdarzenia predefiniowane zostaną wywołane. Aby sprowadzić to do pojedynczych pytań:

Czy jest jakiś sposób na zastąpienie domyślnych wywołań zwrotnych używanych w MultitouchSupport.framework?Czy muszę sam napisać kext i samodzielnie obsłużyć wszystkie przychodzące dane?Czy można napisać kext, który się na nim znajdujeTop kext, który obsługuje teraz dane wejściowe, i filtruje je po tym, jak kext wykonał całą ciężką pracę?

Moim pierwszym celem jest umożliwienie wysłania zdarzenia kliknięcia środkowym przyciskiem, jeśli po kliknięciu na urządzeniu są dwa palce. Oczywiście jest jeszcze wiele do zrobienia, ale na razie wydaje się to dobrą rzeczą do zrobienia.

Z góry dziękuję!

-Sastira

questionAnswers(4)

yourAnswerToTheQuestion