Ampliación de la funcionalidad de Magic Mouse: ¿Necesito un kext?

Recientemente compré un Magic Mouse. Es fantástico y lleno de potencial. Desafortunadamente, está seriamente obstaculizado por el soporte de software. Quiero arreglar eso. He investigado bastante y estas son mis conclusiones con respecto a la cadena de eventos hasta el momento:

El Magic Mouse envía eventos multitáctiles completos al sistema.Los eventos multitáctiles se procesan en MultitouchSupport.framework (Carbon)Los eventos se interpretan en el marco y se envían al sistema como eventos normales.Cuando se desplaza con un dedo, envía eventos reales de la rueda de desplazamiento.Cuando se desliza con dos dedos, envía un evento de deslizamiento.No se envían eventos NSTouch al sistema. No puede utilizar la API de NSTouch para interactuar con el mouse.

Después de que descubrí todo lo anterior, desmonté el archivo MultitouchSupport.framework y, con un poco de googlear, descubrí cómo insertar una devolución de llamada propia en la cadena para recibir los datos del evento en bruto. Si enumera la lista de dispositivos, puede adjuntar para cada dispositivo (trackpad y mouse). Este hallazgo nos permitiría crear un marco para el uso multitáctil en el mouse, pero solo en una sola aplicación. Vea mi post aquí:Seguimiento multitáctil crudo.

Quiero añadir una nueva funcionalidad al mouse en todo el conjunto.sistema, no solo una aplicación

En un intento de hacerlo, descubrí cómo usarGrifos de eventos para ver si el tap de eventos del nivel más bajo me permitiría obtener los datos en bruto, interpretarlos y enviar mis propios eventos en su lugar. Por desgracia, este no es el caso. El toque del evento, incluso en el nivel HID, sigue siendo un paso por encima de donde se interpreta la entrada en MultitouchSupport.framework.

Ver mi intento de toque de evento aquí:Grifo de evento - Intento de multitouch crudo.
Una nota al margen interesante: cuando se recibe un evento multitáctil, como un golpe, se golpea el caso predeterminado y se imprime un número de evento de 29. El encabezado muestra 28 como máximo.

En mi pregunta, ahora que tiene toda la información y ha visto lo que he intentado, ¿cuál sería el mejor enfoque para ampliar la funcionalidad del Magic Mouse? Sé que necesito insertar algo en un nivel suficientemente bajo para obtener la entrada antes de que se procese y se envíen eventos predefinidos. Entonces, para resumirlo en preguntas de una sola oración:

¿Hay alguna manera de anular las devoluciones de llamada predeterminadas utilizadas en MultitouchSupport.framework?¿Necesito escribir un kext y manejar todos los datos entrantes?¿Es posible escribir un kext que se sienta enparte superior del kext que maneja la entrada ahora, y lo filtra después de que kext ha hecho todo el trabajo duro?

Mi primer objetivo es poder enviar un evento de clic con el botón central si hay dos dedos en el dispositivo cuando haces clic. Obviamente, hay mucho, mucho más que se podría hacer, pero esto parece ser algo bueno para disparar, por ahora.

¡Gracias por adelantado!

-Sastira

Respuestas a la pregunta(4)

Su respuesta a la pregunta