Recentemente ho acquistato un Magic Mouse. È fantastico e pieno di potenziale. Sfortunatamente, è seriamente ostacolato dal supporto software. Voglio sistemarlo. Ho fatto un sacco di ricerche e queste sono le mie scoperte sulla catena di eventi finora:Funzionalità estese del mouse magico: ho bisogno di un kext?
- Il mouse magico invia eventi multitouch completi al sistema.
- eventi Multitouch vengono elaborati nel MultitouchSupport.framework (Carbon)
- Gli eventi sono interpretati nel quadro e inviati al sistema come eventi normali
- Quando si scorre con un dito invia rotella di scorrimento reale eventi.
- Quando si fa scorrere con due dita, viene inviato un evento di scorrimento.
- Nessun evento NSTouch viene inviato al sistema. Non è possibile utilizzare l'API NSTouch per interagire con il mouse.
Dopo ho scoperto tutto quanto sopra, ho diassembled il file MultitouchSupport.framework e, con un po 'googling, capito come inserire un richiamo della mia nella catena quindi vorrei ricevere i dati degli eventi di tocco crudo. Se si enumera l'elenco di dispositivi, è possibile allegare per ciascun dispositivo (trackpad e mouse). Questo risultato ci consentirà di creare una struttura per l'utilizzo del multitouch sul mouse, ma solo in una singola applicazione. Vedi il mio post qui: Raw Multitouch Tracking.
Voglio aggiungere nuove funzionalità al mouse attraverso l'intero sistema , non solo una singola app.
Nel tentativo di farlo, ho scoperto come utilizzare Event Taps per verificare se il tocco di evento di livello più basso mi consentisse di ottenere i dati grezzi, interpretarli e inviare i miei eventi al suo posto. Sfortunatamente, questo non è il caso. Il tocco dell'evento, anche a livello HID, è ancora un gradino sopra il punto in cui l'input viene interpretato in MultitouchSupport.framework.
Vedere il mio tentativo di tentativo del tocco qui: Event Tap - Attempt Raw Multitouch.
Un'interessante nota a margine: quando viene ricevuto un evento multitouch, ad esempio uno scorrimento, viene colpito il caso predefinito e viene stampato un numero di evento di 29. L'intestazione mostra 28 come il numero massimo.
Sulla mia domanda, ora che hai tutte le informazioni e ho visto quello che ho provato: quale sarebbe l'approccio migliore per estendere la funzionalità del Magic Mouse? So che ho bisogno di inserire qualcosa a un livello abbastanza basso per ottenere l'input prima che venga elaborato e vengono inviati gli eventi predefiniti. Quindi, per ridurlo a domande a frase singola:
- C'è un modo per sovrascrivere i callback predefiniti utilizzati in MultitouchSupport.framework?
- Devo scrivere un kext e gestire personalmente tutti i dati in arrivo?
- E 'possibile scrivere un kext che si trova sulla cima del kext che sta gestendo l'ingresso ora, e filtri dopo che kext ha fatto tutto il lavoro duro?
Il mio primo obiettivo è quello di essere in grado di inviare un mezzo evento click del pulsante se ci sono due dita sul dispositivo quando si fa clic. Ovviamente c'è molto, molto più che potrebbe essere fatto, ma questo sembra una buona cosa per cui spara, per ora.
Grazie in anticipo!
-Sastira
Inoltre: se * è * un kext di cui ho bisogno, dove potrei trovare risorse per scriverne uno ? Googling non è stato troppo fruttuoso al riguardo. – Tyler