Estendendo Funcionalidade do Mouse Mágico: Preciso de um kext?

Eu comprei recentemente um Mouse Mágico. É fantástico e cheio de potencial. Infelizmente, isso é seriamente prejudicado pelo suporte de software. Eu quero consertar isso. Eu fiz muita pesquisa e estas são as minhas descobertas sobre a cadeia de eventos até agora:

O Magic Mouse envia eventos multitouch completos ao sistema.Eventos multitoque são processados ​​no MultitouchSupport.framework (Carbon)Os eventos são interpretados no framework e enviados para o sistema como eventos normaisQuando você rola com um dedo, ele envia eventos reais de roda de rolagem.Quando você desliza com dois dedos, ele envia um evento de furto.Nenhum evento NSTouch é enviado para o sistema. Você não pode usar a API do NSTouch para interagir com o mouse.

Depois de descobrir todos os itens acima, desembaracei o arquivo MultitouchSupport.framework e, com algumas informações do googling, descobri como inserir um retorno de chamada próprio na cadeia para receber os dados brutos do evento de toque. Se você enumerar a lista de dispositivos, poderá anexar cada dispositivo (trackpad e mouse). Essa descoberta nos permitiria criar uma estrutura para usar o multitouch no mouse, mas apenas em um único aplicativo. Veja meu post aqui:Rastreio multitoque bruto.

Eu quero adicionar novas funcionalidades ao mouse em todo osistema, não apenas um único aplicativo.

Em uma tentativa de fazer isso, eu descobri como usarTorneiras de eventos para ver se o toque de evento de nível mais baixo me permitiria obter os dados brutos, interpretá-los e enviar meus próprios eventos em seu lugar. Infelizmente, esse não é o caso. O toque do evento, mesmo no nível do HID, ainda é uma etapa acima da qual a entrada está sendo interpretada no MultitouchSupport.framework.

Veja minha tentativa de tap de evento aqui:Evento Tap - Tentativa Raw Multitouch.
Uma observação interessante: quando um evento multitouch é recebido, como um furto, o caso padrão é atingido e imprime um número de evento de 29. O cabeçalho mostra 28 como sendo o máximo.

Para minha pergunta, agora que você tem todas as informações e já viu o que tentei: qual seria a melhor abordagem para estender a funcionalidade do Magic Mouse? Eu sei que preciso inserir algo em um nível baixo o suficiente para obter a entrada antes que ela seja processada e os eventos predefinidos sejam despachados. Então, para resumir as questões de sentença única:

Existe alguma maneira de substituir os retornos de chamada padrão usados ​​no MultitouchSupport.framework?Preciso escrever um kext e lidar com todos os dados recebidos?É possível escrever um kext que fica notopo do kext que está manipulando a entrada agora, e filtra depois que o kext fez todo o trabalho duro?

Meu primeiro objetivo é poder despachar um evento de clique do botão do meio se houver dois dedos no dispositivo quando você clicar. Obviamente, há muito, muito mais que poderia ser feito, mas isso parece ser uma coisa boa para se fotografar, por enquanto.

Desde já, obrigado!

-Sastira

questionAnswers(4)

yourAnswerToTheQuestion