Salut à toutes et à tous,
Ayant un matériel "exotique" à Fedora je me suis posé la question d'analyser les données transitants par le port USB.
Ça a commencé ici...
Le matériel concerné est un compteur de vélo VDO Z3 avec comme ID données par lsusb (en root) :
Bus 001 Device 004: ID 0e6a:0101 Megawin Technology Co., Ltd
Les données receuillies par ce compteur sont expédiées vers un logiciel "PC Sport" sous Windows, mais moi je préfère Fedora, c'est ça mon problème 🙂
Je précise qu'avec une machine virtuelle XP (sous Virtual Box) toutes les données transitent parfaitement. Donc, ce matériel fonctionne.
J'ai rencontré aussi récemment une Webcam Logitech USB dont le micro n'aimait pas trop Fedora 9, un petit peu mais pas trop 🙂
C'est pour ça que je pense qu'il serait intéressant de pouvoir analyser toutes les données transitant par les ports USB.
Je n'ai trouvé aucune application Linux sur le Web...
[edit] SI SI... voir plus bas...[/edit]
Donc, je résume les étapes :
1°) - installation de libusb ET libusb-devel
2°) - un fichier source C++ :
3°) - une commande pour créer un éxecutable
4°) - lancement de cet éxecutable
1°)
su -
yum install libusb libusb-devel
2°)
Le fichier source (
http://www.cppfrance.com/codes/SCANNER-PORTS-USB-SOUS-LINUX_38102.aspx ) ,
on le nomme par exemple "
scan_usb.cpp"
/*
* Main
*
* Written by:
* Copyright 2006, Yasmin OROU GUIDOU <ogyasmin@yahoo.fr>
*
* USB
*/
#include <stdio.h>
#include <usb.h>
#include <errno.h> // Bibliothèque des erreurs.
struct usb_bus *busses;
struct usb_bus *bus;
struct usb_device *dev,*fdev;
usb_dev_handle *device_handle = 0;
void driver_init(void)
{
usb_init(); //Initialisation de la librairie (par example determine le chemin du repertoire des bus et peripheriques)
usb_find_busses(); // Enumère tous les bus USB du systemes
usb_find_devices();// Enumère tous les peripheriques sur tous les Bus présents)
// Parcours de la liste des bus et des périphériques
}
void usb_scan(void)
{
for (bus = usb_busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
printf("bus : %s Device %s \n id Vendor: %d | id Product : %d | Manufacturer Name : | Product Name : \n", bus->dirname,dev->filename ,dev->descriptor.idVendor,dev->descriptor.idProduct); // dev->descriptor.iManufacturer,dev->descriptor.iProduct ( Vous pouvez ajouter ces infos mais si les périphériques n'ont pas fournit au système les info il y aura erreur de segmentation
}
}
}
struct usb_device *usb_find_My_device(int idV, int idP)
{
for (bus = usb_busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
// condition vérifié si c'est un Mon flash disque iProduct=Flash Disk
if ((dev->descriptor.idVendor == idV) && (dev->descriptor.idProduct ==idP )) //Caract de ma clé USB32 idV=0x0ea0 idP=0x2168
return(dev);
}
}
return(0);
}
int main (void)
{
int send_status;
int open_status;
unsigned char send_data=0xff;
unsigned char receive_data=0;
driver_init();
usb_scan();
return 0;
}
3°)
Commande de création de l'éxecutable (on le fait en utilisateur normal) :
g++ -o
scan_usb scan_usb.cpp -lusb
où
scan_usb sera le nom de l'éxecutable.
4°)
Lancement de cet éxecutable (quand on se trouve dans le même dossier bien sûr) :
./scan_usb
nous fourni la même ligne que lsusb mais en décimal :
bus : 001 Device 004
id Vendor: 3690 | id Product : 257 | Manufacturer Name : | Product Name :
Remarques :
Pour l'instant ça ne donne pas grand chose 🙂
Je cherche le 5°).....
[edit]Pour info, quand je branche le matériel, cat /var/log/messages me donne ceci :
Oct 13 15:11:39 cool kernel: usb 1-4.6: new low speed USB device using ehci_hcd and address 7
Oct 13 15:11:39 cool kernel: usb 1-4.6: configuration #1 chosen from 1 choice
Oct 13 15:11:39 cool kernel: usb 1-4.6: New USB device found, idVendor=0e6a, idProduct=0101
Oct 13 15:11:39 cool kernel: usb 1-4.6: New USB device strings: Mfr=0, Product=2, SerialNumber=0
Oct 13 15:11:39 cool kernel: usb 1-4.6: Product: USB Bridge
Il y a peut-être une indication avec "USB device using ehci_hcd and address 7" ?
[/edit]