Velocidad máxima teórica de captura de entrada para un mouse USB y posibles limitaciones de hardware

0

Pido disculpas por adelantado si este no es el foro correcto para esta pregunta o si la pregunta es demasiado amplia para responder. Mi experiencia es en informática y trabajo principalmente en middleware de Java, por lo que es un poco fuera de mi área de experiencia.

Estoy interesado en capturar información de un mouse en un sistema operativo Linux lo más rápido posible. Supongamos que estoy trabajando con un mouse USB 3 en hardware convencional (64bit i7 16gb ram). ¿Alguien puede recomendar una manera de formular con cierta certeza la tasa máxima de captura de entrada? O si eso no fuera posible, ¿podría alguien señalar el software, hardware o fenómeno físico más probable que actuaría como el máximo limitador?

Algunos de mis pensamientos iniciales en cuanto a la limitación máxima

  1. La unidad de tiempo más pequeña que el sistema puede mantener
  2. La tasa de transferencia de USB 3
  3. Velocidad de la señal física enviada desde el mouse
pregunta Chris Maggiulli

2 respuestas

1

Esta es una de esas situaciones en las que el enfoque teórico le dará un número demasiado alto para lograr en la práctica.

En primer lugar, ¿es en realidad un mouse USB3? ¿O es un mouse USB2 de 12MHz con un conector elegante?

Los dispositivos USB HID como los ratones operan en sondeo. ¿Cuál es la unidad de tiempo más corta en la que puede establecer el intervalo de sondeo del SO? Puede ser un milisegundo, aunque el sistema es bastante capaz de manejar temporizadores de microsegundos. Eso te limitaría a 1000Hz de sondeo.

La señal física, según la famosa conferencia de Grace Hopper, viaja a aproximadamente un pie por nanosegundo.

    
respondido por el pjc50
1

USB es un protocolo controlado por host. El controlador del sistema operativo inicia la comunicación con los dispositivos y controla la tasa de sondeo (máxima). Lo único que debe hacer un dispositivo es preparar los datos en un búfer para que el host los lea.

Algunos "ratones para juegos" ofrecen (innecesariamente) un alto sondeo de 1kHz. Esta es una combinación de software rápido en los ratones, pero también el controlador del sistema operativo host configurado para sondear a 1kHz.

Digo innecesariamente alto porque la mayoría de los motores de juegos no procesarán datos a esa frecuencia, incluso los simuladores de carreras procesan datos físicos en el rango de unos pocos cientos de Hz. Pero supongo que estás desarrollando alguna aplicación personalizada, por lo que esto podría no serte aplicable.

El USB2, USB3, USB-C estándar o conector no cambia nada a la tasa de sondeo. Apuesto a que casi no hay ningún conjunto de chips que habla USB3.x nativo para propósitos de entrada HID, como el mouse o el teclado. USB2.0 proporciona un ancho de banda más que suficiente para este propósito. Si el mouse genera un movimiento horizontal / vertical (deltas con signo de 16 bits) y 8 botones (1 byte) a 1kHz, eso suma 5kB / so aproximadamente 40kBit de velocidad de transferencia. Incluso en una línea de 12 Mbit (que son la mayoría de los ratones / teclados), queda mucho ancho de banda.

Caso en cuestión: mi teclado aparentemente usa una velocidad de señalización de 1.5Mbits y mis Logitech G500s "gaming mouse" de 12Mbits.

¿Se pueden soportar mayores tasas de sondeo? Quizás fuera de los libros; pero la enumeración de dispositivos contiene un campo de punto final "bInterval" que se expresa en ms (rango válido de 1 a 255).

    
respondido por el Hans

Lea otras preguntas en las etiquetas