Forum Linux.débutant Lister les périphériques USB plutôt que hidraw

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
22
avr.
2015

Bonjour à tous,

J'ai trouvé un tutoriel très sympa qui explique un démon pour les périphériques USB mais pas la première étape importante qui consiste à lister ceux déjà présent sur le PC.

Je reste bloqué sur ce code qui liste les hidraw :

#include <libudev.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <unistd.h>

int main (void)
{
    struct udev *udev;
    struct udev_enumerate *enumerate;
    struct udev_list_entry *devices, *dev_list_entry;
    struct udev_device *dev;

    /* Create the udev object */
    udev = udev_new();
    if (!udev) {
        printf("Can't create udev\n");
        exit(1);
    }


    enumerate = udev_enumerate_new(udev);
    udev_enumerate_add_match_subsystem(enumerate, "hidraw");
    udev_enumerate_scan_devices(enumerate);
    devices = udev_enumerate_get_list_entry(enumerate);

    udev_list_entry_foreach(dev_list_entry, devices) {
        const char *path;

        path = udev_list_entry_get_name(dev_list_entry);
        dev = udev_device_new_from_syspath(udev, path);


        printf("Device Node Path: %s\n", udev_device_get_devnode(dev));


        dev = udev_device_get_parent_with_subsystem_devtype(
               dev,
               "usb",
               "usb_device");
        if (!dev) {
            printf("Unable to find parent usb device.");
            exit(1);
        }

        printf("  VID/PID: %s %s\n",
                udev_device_get_sysattr_value(dev,"idVendor"),
                udev_device_get_sysattr_value(dev, "idProduct"));
        printf("  %s\n  %s\n",
                udev_device_get_sysattr_value(dev,"manufacturer"),
                udev_device_get_sysattr_value(dev,"product"));
        printf("  serial: %s\n",
                 udev_device_get_sysattr_value(dev, "serial"));
        udev_device_unref(dev);
    }
    /* Free the enumerator object */
    udev_enumerate_unref(enumerate);

    udev_unref(udev);

    return 0;       
}

On peut remplacer hidraw avec usb ou usb_devices mais ca ne liste pas les périphériques USB.

  • # au hasard du web

    Posté par  . Évalué à 2.

    en demandant à mon moteur de recherche de me trouver le bout de code qui utilise hidraw,

    je tombe sur ce sujet, ou apparemment quelqu'un essaie de faire comme toi,
    mais directement avec QT, certes il n'y a pas de reponses, mais ca peut permettre de voir ce qu'il a fait.

    http://openclassrooms.com/forum/sujet/qt-unix-lister-les-peripheriques

    et un peu plus loin sur le web, on retrouve ton exemple mais en bas de la page, il y a un "monitoring" de l'USB pour afficher un peripherique qu'on vient de brancher
    http://www.signal11.us/oss/udev/

    • [^] # Re: au hasard du web

      Posté par  . Évalué à 1.

      Je n'avais pas testé le code de la personne pour le premier lien. Il s'avère que son programme peut lister les périphériques USB.

      A moi d'adapter le code à mon application.

      Le deuxième lien m'a permit de faire tourner le démon usb.

      Une personne m'a indiqué cette librairie pour la communication USB multiplatforme :

      Libusb

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.