0 votos

¿Cómo asignar el eje del Joypad a un botón?

¿Cómo puedo asignar un eje de joypad (específicamente el interruptor HAT/DPad) a un botón con un archivo de disposición de teclas en /system/usr/keylayout/ ? Actualmente tengo esta línea en el archivo correspondiente: axis 0x10 split 0x7f BUTTON_L1 BUTTON_R1 .

Explicaré la línea ficha por ficha. El primer token se refiere al tipo de entrada. axis significa que estoy atando un eje.

El segundo token es el ID del eje. El eje que quiero reasignar es 0x10 .

El Página wiki para desarrolladores de Android en lo que respecta a los archivos de distribución de claves, se puede dividir un eje de entrada en dos salidas con split así que lo estoy usando. La división es en el valor inmediatamente siguiente split , en este caso 0x7f .

Los valores de entrada por debajo del umbral de división se asignan como el primer token después del token del umbral de división. Aquí es BUTTON_L1 .

Los valores de entrada por encima del umbral de división se asignan como el segundo token después del token del umbral de división. Aquí es BUTTON_R1 .

Sin embargo, cuando utilizo la línea mencionada anteriormente, el eje ya no se asigna a nada. ¿Puede asignar los ejes del dispositivo a los botones de Android en primer lugar? Si es así, ¿cuál es la sintaxis adecuada para ello?

1voto

nondebug Puntos 26

Desde el Ejes divididos documentación:

Un eje dividido asigna un código de eje de Linux a dos nombres de código de eje de Android, de manera que los valores menores o mayores que un umbral se dividen en dos ejes diferentes cuando se asignan. Este mapeo es útil cuando un solo eje físico reportado por el dispositivo codifica dos ejes lógicos diferentes mutuamente excluyentes.

En el ejemplo han dividido un eje combinado de gas/freno en dos GAS y BRAKE ejes:

axis 0x01 split 0x7f GAS BRAKE

Índice del eje 0x01 es el código de evento de entrada de Linux ABS_X . Estamos tomando la ABS_X con un rango lógico de 0x00 < x < 0xFF y dividirlo de manera que x > 0x7F se asigna a AXIS_GAS y los valores por debajo de 0x7F se asignan a AXIS_BRAKE .

En el tuyo:

axis 0x10 split 0x7f BUTTON_L1 BUTTON_R1

Índice del eje 0x10 es especial, es el código de evento de entrada de Linux ABS_HAT0X que es un eje sintético generado por el subsistema de entrada de Linux para facilitar el tratamiento de las entradas de los interruptores de sombrero. Internamente, los gamepads HID no representan los D-pads como botones o como ejes X e Y separados. Normalmente se representan como un único eje de rotación "hat switch". Linux convierte el valor rotacional en ABS_HAT0X y ABS_HAT0Y ejes normalizados a -1 < x < 1. Estos se ven como ejes 0x10 y el eje 0x11 en el mapeo de la disposición de las llaves.

Por lo tanto, el primer problema es que tu umbral está equivocado. Para dividir el ABS_HAT0X debe utilizar un umbral de 0.

El segundo problema es que estás tratando de asignar los ejes divididos a los eventos de los botones, lo cual no es compatible. Sólo se puede dividir un eje en ejes separados.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X