USB sériové číslo C/C++

Sekcia: Programovanie 20.04 | 16:21
Avatar Velitar Ubuntu  Používateľ

Ahoj,

existuje nejaká knižnica na zistenie informácii o USB zariadeniach pre C/C++ ? Konkrétne ma zaujíma sériové číslo. Hľadal som na Google ale nenašiel som nič čo by fungovalo aj na Linuxe.

    • RE: USB sériové číslo C/C++ 20.04 | 18:31
      Avatar WlaSaTy   Návštevník

      Môžeš byť trošku konkrétnejší? Linux používa hierarchiu v ktorej to máš priamo naservírované.

      $ ls -ld /sys/bus/usb/devices/usb*/*/serial
      -r--r--r-- 1 root root 4096 Apr 20 18:22 /sys/bus/usb/devices/usb1/1-2/serial
      -r--r--r-- 1 root root 4096 Apr 20 18:25 /sys/bus/usb/devices/usb3/3-1/serial
      $ cat /sys/bus/usb/devices/usb1/1-2/serial
      0nnnnn0000000nnn
      $
      
      Teda v tomto prípade len ak dané USB zariadenie má v sebe výrobné číslo. Niektoré to nemajú, a endpoint vracia nulu.

    • RE: USB sériové číslo C/C++ 20.04 | 18:33
      Avatar Miroslav Bendík Gentoo  Administrátor

      Dá sa vyčítať zo štruktúry libusb_device_descriptor knižnice libusb.

      • RE: USB sériové číslo C/C++ 20.04 | 19:05
        Avatar Miroslav Bendík Gentoo  Administrátor

        Ešte príklad

        #include <cstdio>
        #include <iomanip>
        #include <iostream>
        #include <libusb-1.0/libusb.h>
        
        using namespace std;
        
        int main() {
            libusb_context *context = NULL;
            libusb_device **list = NULL;
            libusb_device_handle *handle = NULL;
            libusb_device_descriptor desc;
            unsigned char serial[256];
            size_t count = 0;
        
            libusb_init(&context);
        
            count = libusb_get_device_list(context, &list);
        
            for (size_t idx = 0; idx < count; ++idx) {
                libusb_open(list[idx], &handle);
                libusb_get_device_descriptor(list[idx], &desc);
                libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, serial, 256);
                libusb_close(handle);
        
                cout << "Vendor:Device:Serial "
                     << setfill('0') << setw(4) << hex << desc.idVendor << ":"
                     << setw(4) << desc.idProduct << ":"
                     << serial << endl;
            }
        }
        
        • RE: USB sériové číslo C/C++ 20.04 | 19:17
          Avatar Velitar Ubuntu  Používateľ

          Ďakujem skúsim.