Schnell was zu HIDConfigureAction

Es gibt verdammt wenige Leute, die wissen, was HIDConfigureAction ist, und keiner von denen, die meine Seite regelmäßig besuchen, gehört dazu. Um es kurz zu machen: Es handelt sich um eine Funktion der HID Utilities von Apple. Man ruft sie mit einem Zeitwert auf und erhält nach spätestens dieser Zeit das Eingabegerät, dass sich als erstes um mehr als einen bestimmten Wert bewegt hat, zurück. Offensichtlicher Sinn ist für Spiele, wenn ich auf ein Feld klicke und dann die Taste drücke, die ich der jeweiligen Funktion zugewiesen haben möchte. Vor kurzem hatte ich ein Problem damit:

Wie kriege ich damit die Mausachsen?

Was ich auch tat, ich bekam damit keine Mausachsenbewegungen geliefert. Das Problem war, dass die Funktion einen Schwellenwert eingebaut hat, den sie übersteigen muss, um eine Funktion zurückzuliefern. Dieser berechnet sich aus dem Maximal- und Minimalwert, den das jeweilige Dingens liefern kann. Was ist das bitte für eine Mausachse? Bei Apple waren das ±32767, das Maximum und Minimum für 32-Bit Zahlen. Die tatsächlichen Werte für die Maus übersteigen aber kaum ±60. Folglich war der Schwellenwert viel, viel zu hoch.

Die Lösung

Die HID Utilities kommen mit dem vollen Quellcode. Man nehme diesen, öffne HID_Config_Utilities.c und ändere die Zeile 127 von

delta = (float)(pElement->max - pElement->min) * kPercentMove * 0.01;

zu

if (pElement->max > 10000)
    delta = 10;
else
    delta = (float)(pElement->max - pElement->min) * kPercentMove * 0.01;

Kompilieren, läuft. Ein Kenner merkt sofort, dass es sich hier nur um einen dreckigen Hack handelt und wird vermutlich in Panik geraten, wenn ich jetzt anmerke, dass ich das nur auf meinem iMac mit meiner Logitech MX1000 und sonst gar nicht getestet habe. Ich bitte daher um Feedback!

Hoffentlich hilft dies irgend jemanden, der auf diese Seite stößt wenn er nach Cocoa und Joystick oder so googelt.

Geschrieben am 13. Februar 2006 um 21:37

0 Kommentare

    New comments can no longer be posted because it got to annoying to fight all the spam.