Scanner les ports usb sous linux

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 276 fois - Téléchargée 885 fois

Contenu du snippet

J'ai commencé à ecrire un Driver USB sous linux et j ai rencontré bcp de problèmes et peu de solutions. alors pour palier à ce manque je m engage à fournir les infos et les source au fur et à mesure que j'avance.
Je commence par vous dire qu'il vous faut lire alors lire en français certes mais surtout en anglais le plus chiant.
Les liens qui m ont le plus aidé sont les suivants.
Comprendre l'USB : http://acquier.developpez.com/cours/USB/
Comprendre l'USB : http://www.xml.com/ldd/chapter/book/bookindexpdf.html
Le tutorial de la librairie : http://libusb.sourceforge.net/doc/index.html
Avant de compiler je tiens à dire qu'il vous faut installer la librairie USB si vous l avez pas enccore disponible ici : http://superb-west.dl.sourceforge.net/sourceforge/libusb/libusb-0.1.12.tar.gz

Source / Exemple :


/*

  • 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; }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
14
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
10 décembre 2008

Bonjour,
je travaille sous ubuntu et apparemment la libusb n'est pas la même que celle citée, il reconnait pas les fonctions usb_init().....
J'ai pas essayé celle de sourceforge, car j'avais un problème à résoudre, ce que j'ai fait avec le programme usbview (.deb).

A+
Messages postés
4
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
22 mars 2007

Salut, peut-être pourrais tu m'aider.
J'essaie d'utiliser libusb, je l'ai correctement installé et j'arrive bien a compiler les tests.
Je possède une webcam motorisée et j'aimerai lui envoyer des trames de commande pour la faire pivoter, je possède toutes les trames necessaires (pour le rotations) ainsi que le vendorId et le productId. Seulement je ne comprend pas comment utiliser les fonctions de la librairie pour commander la webcam.

Il s'agit surtout d'un problème de compréhension.

Merci
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Plusieurs infos :
pour compiler :
g++ -o test main.cpp -lusb

Par contre, a l'execution, voila ce que j'obtiens :

bus : 007 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
bus : 006 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
bus : 001 Device 003
id Vendor: 1133 | id Product : 49174 | Manufacturer Name : | Product Name :
bus : 001 Device 004
id Vendor: 16700 | id Product : 8197 | Manufacturer Name : | Product Name :
bus : 001 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
bus : 005 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
bus : 004 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
bus : 003 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
bus : 002 Device 001
id Vendor: 0 | id Product : 0 | Manufacturer Name : | Product Name :
Messages postés
1
Date d'inscription
vendredi 5 janvier 2007
Statut
Membre
Dernière intervention
5 janvier 2007

Trés intéressant mais il manque le code gérant la communication pour lire ou envoyer des paquets via un port USB...
Messages postés
3
Date d'inscription
mardi 11 octobre 2005
Statut
Membre
Dernière intervention
6 septembre 2006

Merci pour les conseils (liens) et pour l'exemple.
J'attends la suite avec impatience.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.