Question

Je viens d'acheter une souris Magic Mouse. Il est fantastique et plein de potentiel. Malheureusement, il est sérieusement entravée par le support logiciel. Je veux corriger cela. Je l'ai fait beaucoup de recherche et ce sont mes conclusions en ce qui concerne la chaîne des événements jusqu'ici:

  1. La Magic Mouse envoie des événements multitouch complet au système.
  2. événements multitouch sont traités dans le MultitouchSupport.framework (Carbon)
  3. Les événements sont interprétés dans le cadre et envoyé au système comme des événements normaux
    • Lorsque vous faites défiler avec un doigt, il envoie des événements de molette de défilement réelle.
    • Lorsque vous balayez avec deux doigts, il envoie un événement swipe.
  4. événements Pas NSTouch sont envoyés au système. Vous ne pouvez pas utiliser l'API NSTouch pour interagir avec la souris.

Après avoir découvert tout ce qui précède, je diassembled le fichier MultitouchSupport.framework et, avec quelques googler, compris comment insérer un rappel de mon propre dans la chaîne, donc je recevrais les données d'événement tactile brut. Si vous énumérez la liste des périphériques, vous pouvez fixer pour chaque périphérique (pavé tactile et la souris). Cette constatation nous permettrait de créer un cadre pour l'utilisation de multitouch sur la souris, mais seulement dans une seule application. Voir mon post ici. Raw Multitouch Suivi

Je veux ajouter de nouvelles fonctionnalités à la souris sur l'ensemble du système , et pas seulement une seule application.

Pour tenter de le faire, je me suis dit comment utiliser l'événement Taps pour voir si l'événement le plus bas niveau de prise me permettra d'obtenir les données brutes, l'interpréter et d'envoyer mes propres événements à sa place. Malheureusement, ce n'est pas le cas. Le robinet de l'événement, y compris au niveau HID, est encore une étape ci-dessus où l'entrée est interprétée dans MultitouchSupport.framework.

Voir mon événement tap tentative ici: événement Tap - Tentative Raw Multitouch
. Une note intéressante:. Lorsqu'un événement multitouch est reçu, comme un passage rapide, le cas par défaut est touché et affiche un numéro d'événement de 29. L'en-tête indique 28 comme étant le max

à ma question, maintenant que vous avez toutes les informations et vous avez vu ce que j'ai essayé: quelle serait la meilleure approche pour étendre la fonctionnalité de la Magic Mouse? Je sais que je dois insérer quelque chose à un niveau suffisamment bas pour obtenir l'entrée avant le traitement et les événements prédéfinis sont expédiés. Donc, pour faire bouillir pour des questions de phrase:

  • Est-il possible de remplacer les callbacks par défaut utilisés dans MultitouchSupport.framework?
  • Est-ce que je dois écrire un kext et gérer moi-même toutes les données entrantes?
  • Est-il possible d'écrire un kext qui se trouve sur top de la kext qui gère l'entrée maintenant, et les filtres après que kext a fait tout le travail ?

Mon premier objectif est d'être en mesure d'envoyer un événement click bouton du milieu s'il y a deux doigts sur l'appareil lorsque vous cliquez sur. De toute évidence, il y a beaucoup, beaucoup plus que cela pourrait être fait, mais cela semble être une bonne chose à tirer pour, pour l'instant.

Merci d'avance!

-Sastira

Était-ce utile?

La solution

Comment fonctionne ce qui se passe dans MultitouchSupport.framework entre la souris diffèrent magique et un trackpad en verre? Si elle est basée sur les propriétés de l'appareil IOKit, je suppose que vous aurez besoin d'un kext qui émule un pavé tactile, mais communique en fait avec la souris. Apple ont de la documentation sur la programmation du noyau Darwin et extensions noyau spécifiquement:

(Personnellement, j'aimerais quelque chose qui a permis à un grossissement de pincement et plus gestes glisser / bouton, comme il est, la Magic Mouse est une révision à la baisse fonctionnelle de quatre boutons de la souris Mighty Mouse et [quoique toujours obstruction] molette de défilement 2D. mise à jour : l'année dernière, j'ai écrit Sesamouse pour le faire, et il ne faut pas un kext (juste une semaine ou deux à regarder hex vidages :-) Voir mon autre réponse pour le deets et le code source.)

Autres conseils

Désolé j'ai oublié de mettre à jour cette réponse, mais j'ai fini par trouver comment injecter des événements multitouch et gestes dans le système de userland via Quartz Event services . Je ne sais pas comment il a survécu à la mise à jour Lion, mais vous pouvez vérifier le code source sous-jacente à https: // github.com/calftrail/Touch

Il faut deux hacks: en utilisant le privé Cadre Multitouch pour obtenir l'entrée du dispositif, et l'injection non documentées structures CGEvent en Quartz Event Services. Il était incroyablement amusant de comprendre comment en tirer, mais ces jours-ci je vous recommande juste d'acheter un Magic Trackpad :-P

J'ai mis en place une preuve de concept de l'espace utilisateur personnalisable wrapper d'événements multi-touch.

Vous pouvez lire ici: http://aladino.dmi.unict.it /? a = multitouch (voir dans WaybackMachine )

- le meilleur

Si vous arrivez à ce moment-là, vous pouvez envisager le clic du milieu étant trois doigts sur la souris au lieu de deux. J'ai réfléchi à cette question du milieu de clic avec la souris magique et je remarque que je laisse souvent mon 2ème doigt sur la souris, même si je ne fais que de pressage pour un clic gauche. Ainsi, un « 2 doigts » clic peut être confondu avec un seul clic gauche, et il faudrait aussi l'utilisateur plus d'efforts pour toujours avoir à garder le 2ème doigt de la souris. , Si elles sont il est possible de détecter, trois doigts provoquerait moins de confusion et des maux de tête. Je me demande où la première solution « bouton du milieu de clic » viendra de, comme je suis inquiet pour mon milieu cliquez Expose fonction pour retourner :) Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top