¿Qué coordenadas debe devolver un mouse USB HID?

1

Estoy intentando implementar un mouse USB HID para mi tarjeta personalizada (para mover el puntero del mouse a mi pantalla). En este momento, soy capaz de leer los descriptores.

Encontré que el mínimo y máximo lógicos son -127 y +127. Después de leer la documentación de HID, me confundí.

  • ¿Qué es el mínimo físico y el máximo de un dispositivo?
  • ¿Cuál es su papel?

Si quiero calibrar mi mouse para una pantalla determinada, ¿dónde puedo dar las coordenadas? Además, cuando ocurre la acción del mouse, obtengo valores de coordenadas (X e Y y botones) dos o tres veces.

¿Se debe a que los valores devueltos por el mouse son continuos y tengo que implementar un promedio? ¿O es como si las coordenadas del mouse devueltas son relativas y tengo que inicializar mis coordenadas del mouse como (0,0) y desde la posición anterior tengo que calcular la posición actual?

Gracias por la respuesta. Pero desde qué campo del descriptor puedo encontrar la unidad, significa que cada vez que muevo un mouse obtendré la X y la Y, ¿cómo averiguar cuál es la unidad que ha movido? (Pulgada o metro). Debido a que el descriptor de HID que estoy obteniendo consta de los siguientes campos:

Usage Page-   05 01
Usage Mouse- 09 02
Collection(App)-a1 01
Usage(Pointer)-09 01
Collection(Physical)-a1 00
Usage Page(Button)-05 09
Usage Min- 19 01
Usage Max-29 05
Logical Min-15 00
Logical Max-25 01
Report Count-95 05
Report Size-75 01
Input(Data,Variable,Absolute)-81 02
Report Count- 95 00
Input-81 03
Usage Page-05 01
Usage X- 09 30
Usage Y- 09 31
Wheel   - 09 38
Logical Min-15 81
Logical Max-25 7f
Report Size -75 08
Report Count-95 03
Input-81 06

05 0c
0a 38
02 95
01 81
06 c0
c0

No sé cuáles son los valores después del campo de entrada.

Esto es lo que estoy obteniendo como descriptor oculto de mi mouse logitech. Entiendo que es relativo (de 81 a 06). Y además, obtengo coordenadas (X e Y) y botones cada vez que me muevo o hago clic. ¿Pero dónde obtener la unidad y la unidad exponente (para encontrar la resolución y cuánto se ha movido el mouse)? Gracias de nuevo

    
pregunta badz

2 respuestas

1

Si recuerdo correctamente, Physical Min y Max son solo "aderezos", por así decirlo. De la especificación de HID:

  

Mientras el mínimo lógico y el máximo lógico (extensiones) unen los valores   Devuelto por un dispositivo, mínimo físico y máximo físico.   es decir, a esos límites permitiendo que el valor del informe sea compensado y   escamoso. Por ejemplo, un termómetro puede tener extensiones lógicas de 0 y   999 pero las extensiones físicas de 32 y 212 grados. La resolución puede ser   determinado con el siguiente algoritmo:

Entonces, para este ejemplo, el termómetro HID devolvería un valor entre 0-999 en el informe. Esos son los bytes que realmente fluyen del dispositivo a la PC a través de un punto final de IN. Estos valores están determinados por el Mín. / Máx. Lógico.

El mínimo / máximo físico describe cómo las unidades lógicas se asignan a un "espectro" físico. En este caso, desde la congelación del agua (32 grados F) hasta la ebullición (212 F). En este caso, cuando el dispositivo envía un 0, significa 32 F, y cuando envía 999, significa 212 F. El software puede leer el descriptor HID para determinar la asignación.

En el gran esquema de las cosas, el mínimo / máximo físico no es tan significativo a menos que lo uses intencionalmente. Por coherencia, generalmente configuro mi físico para que coincida con mi lógica.

    
respondido por el ajs410
3

Tengo entendido que un mouse es fundamentalmente un dispositivo relativo . Los valores devueltos por el mouse son la cantidad de movimiento desde que se informó por última vez .

Como tal, si desea crear un sistema que se comporte como un mouse de computadora típico, necesita integrar los valores delta informados por el controlador HID.

Con una pantalla de computadora, básicamente cada ciclo de actualización de pantalla, la computadora suma el movimiento total informado del mouse en X e Y, y mueve el puntero mucho en relación a su posición actual .

Por supuesto, tiene que hacer algunas comprobaciones para asegurarse de que su puntero no abandone la pantalla, pero eso es lo básico para una implementación de un dispositivo que apunta con el mouse.

Hay (considerable) complejidades adicionales involucradas en el manejo del movimiento del mouse en una computadora moderna, ya que (casi todos) los sistemas operativos actuales tienen una característica adicional llamada aceleración del puntero . Sin embargo, siempre que la pantalla de su dispositivo no sea físicamente muy grande o de alta resolución, es muy posible que simplemente pueda omitir la aceleración del puntero sin que sea mucho más difícil de usar.

(Consulte la nota de wikipedia sobre la velocidad del mouse para obtener más información).

Por el sonido de tu publicación, suena un poco como si pensaras que un mouse es un dispositivo señalador absoluto . Los ratones en general son un dispositivo señalador relativo . No tienen capacidad para decir dónde están. Todo lo que pueden informar es cuánto se han movido desde la última encuesta.

    
respondido por el Connor Wolf

Lea otras preguntas en las etiquetas