Accedir a dispositius USB: llibreria libusb
Tinc la Drums Rockband de la Wii de Nintendo, que es connecta per USB. El fabricant és Harmonix. Vull accedir a la informació que envia, i sembla ser que utilitzant libusb es pot accedir a la velocity del cop de baqueta.
Introduction to using LibUSB-1.0
El primer exercici proposat és per llegir tota la llista de dispositius USB connectats, i mirar quines interfícies i endpoints té cada dispositiu. Els dispositius vénen identificats per un VendorID i un ProductID, que en el cas de la bateria USB és:
idVendor 0x1bad Harmonix Music (7085) idProduct 0x0005 (5)
El primer exemple l'anomeno libusb_intro.c. He de fer un petit retoc a la capçalera, i compilo:
//#include <libusb.h> #include "/usr/include/libusb-1.0/libusb.h" $ g++ -Wall -g -O2 -I/usr/local/include/ -o libusb_intro libusb_intro.c -lusb-1.0 $ libusb_intro ... Number of possible configurations: 1 Device Class: 0 VendorID: 7085 ProductID: 5 Interfaces: 1 ||| Number of alternate settings: 1 | Interface Number: 0 | Number of endpoints: 2 | Descriptor Type: 5 | EP Address: 2 | Descriptor Type: 5 | EP Address: 129 |
El segon exercici intenta escriure un valor al dispositiu, però evidentment dóna error perquè el meu dispositiu no és d'escriptura sinó de lectura. Fitxer libusb_intro2.c (he de ficar els valors correctes de VendorID i ProductID):
dev_handle = libusb_open_device_with_vid_pid(ctx, 7085, 5); //these are vendorID and productID I found for my usb device
$ sudo ./libusb_intro2 7 Devices in list. Device Opened Claimed Interface Data->abcd3<- Writing Data... Write Error Released Interface
libusb couldn't open usb device permission denied
Per evitar problemes de permisos amb el dispositiu USB, creem el fitxer /etc/udev/rules.d/55-rockband-usb.rules:
SYSFS{idProduct}=="0005",SYSFS{idVendor}=="1bad",MODE="666",OWNER="joan",GROUP="joan"
creat per Joan Quintana Compte, octubre 2012