Tengo un eDIO USB Multi Remote Controller (un receptor infrarrojo) que viene con el control remoto de navegación web ASUS PSR 2000.
Estoy tratando de conectar el controlador remoto a mi pi para que reciba las pulsaciones de teclas enviadas por el control remoto.
El controlador se detecta como un dispositivo HID. Aquí están los detalles del comando lsusb -v
Bus 001 Device 007: ID 147a:e001 Formosa Industrial Computing, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x147a Formosa Industrial Computing, Inc.
idProduct 0xe001
bcdDevice 1.22
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 300mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 20
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 10
También puedo ver el dispositivo de destino en la carpeta de desarrollo con un evento creado
pi@raspberrypi /dev/input/by-id $ dir
usb-Cypress_Semiconductor_eDio_USB_Multi_Remote_Controlle-event-if00
El controlador de eventos asociado es el siguiente, como se ve en el siguiente comando.
pi@raspberrypi /proc/bus/input $ cat devices
I: Bus=0003 Vendor=147a Product=e001 Version=0110
N: Name="Cypress Semiconductor eDio USB Multi Remote Controlle"
P: Phys=usb-bcm2708_usb-1.2/input0
S: Sysfs=/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/input/input2
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=1
El problema es cuando intento leer la salida del controlador de eventos creado para el dispositivo. La primera pulsación de tecla se registra pero las pulsaciones de tecla posteriores no se muestran mediante el comando CAT.
pi@raspberrypi /dev/input $ cat event0 | xxd
0000000: e007 9450 9476 0900 0000 0000 0000 0000 ...P.v..........
Sugiérame qué puedo hacer para que el dispositivo funcione. Presionar cualquier tecla después de la primera pulsación no devuelve nada a menos que el dispositivo se vuelva a enchufar.
Sugiera qué debe hacerse para solucionar el problema.
|xxd
? Se amortigua la salida. Utilicé elirw
paquetelirc
para obtener los códigos de clave enviados por mi control remoto.Respuestas:
El problema parece ser los descriptores USB incompletos:
El descriptor que se puede leer dice que se trata de un mouse.
Y que habría un Descriptor de 20 Bytes que describe el formato de datos:
Pero ese falta.
Hay un problema extraño con su combinación específica de hardware y software o el programador fue flojo y no implementó el Descriptor de informes, ya que su propio controlador probablemente no lo necesita. Pero lo más probable es que haya confundido el controlador que crea el dispositivo de entrada.
Puede intentar usar libusb para leer los 4 bytes desde el punto final. Quizás las encuestas funcionen. O eche un vistazo a la comunicación USB cuando use el dispositivo con el controlador original. Y sí, esto es muy complicado si no tiene uno de los registradores USB caros por ahí. Pero el Kernel de Linux tiene soporte para Software USB Logging y hay algunos Loggers de software disponibles para Windows.
fuente
Finalmente tuve tiempo de escribir mi propia implementación usando la biblioteca PyUSB, que es un contenedor para Libusb.
Estoy publicando el código aquí. Podría ayudar a alguien.
Tengo otro código que crea el archivo de configuración que se usa aquí. No he asignado todas las claves remotas ya que no las necesito todas.
fuente