Ahora, hay que combinar el código del mouse [1] con el del encoder [2]. Esto está en [3].
La idea es que al llamar a Mouse_Tasks(), hay que avisarle que ha hecho el encoder.
Me imagino que la forma correcta de programarlo hubiese sido activar las interrupciones de los pines a donde conectemos el encoder y hacer la lógica correspondiente.
Sin embargo, a mi me parece que por como viene el ejemplo
Mouse_Tasks();
/* Sleep until next IRQ happens */
__WFI();
lo que está ocurriendo es que se habilitó la interrupción de USB y cuando __WFI() lo detecta sigue con el bucle, o sea, no se está llamando a ninguna función por la interrupción.
O sea, yo tendría que habilitar las interrupciones sin darle un handler y poner algo como:
Encoder_Tasks();
Mouse_Tasks();
/* Sleep until next IRQ happens */
__WFI();
Probablemente tendría que agregar lógica en cada *_Tasks() para ver si me llamaron por mi interrupción o por otra.
Como no sé nada de interrupciones aún, voy a poner inline Encoder_Tasks() y mala suerte, ver como responde.
El código resultante es buena parte del encoder, pero tuve que modificar las firmas de Mouse_Tasks() y Mouse_UpdateReport() para que reciban los valores del encoder.
[1] https://github.com/cpantel/ciaa/tree/master/slither.io/STANDALONE/usbDeviceHID_mouse
[2] https://github.com/cpantel/ciaa/tree/master/slither.io/encoder
[3] https://github.com/cpantel/ciaa/tree/master/slither.io/STANDALONE/usbDeviceHID_mouse_encoder
No hay comentarios:
Publicar un comentario