habe nicht versucht, mich, aber libudev's udev_device_get_property_value sollte es sein; Es wird in pulseaudio's udev-util.c als udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE"))
verwendet.
Hier ist ein kleines Beispiel, das ich nur zusammen basierend auf udev-util.c
- beachten Sie, dass ich ein Arduino Duemillanove mit FTDI FT232 Chip verwendet habe, Pfad, das udev ich udevadm
finden (siehe Kommentare im Code unten) und ich dann fest einprogrammiert es in dem unten stehenden Programm, udevl.c
:
// sudo apt-get install libudev-dev
// build with: gcc -o udevl -ludev -Wall -g udevl.c
#include <stdio.h>
#include <libudev.h>
int main(int argc, char **argv)
{
const char *v;
char t[256];
struct udev *udev;
struct udev_device *card = NULL;
if (!(udev = udev_new())) {
fprintf(stderr, "Failed to allocate udev context.\n");
return -1;
}
// $ lsusb | grep FT232
// Bus 002 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
// $ udevadm info --name=/dev/ttyUSB0 --attribute-walk | grep "looking at device"
// looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0'
// (that one is under /sys)
// hardcode that path below:
// udev_get_sys_path(udev) for me: '/sys'
sprintf(t, "%s/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0", udev_get_sys_path(udev));
fprintf(stdout, " path: %s\n", t);
card = udev_device_new_from_syspath(udev, t);
fprintf(stdout, " udev_device: 0x%08X\n", (unsigned int)card);
if ((v = udev_device_get_property_value(card, "ID_MODEL_FROM_DATABASE")))
fprintf(stdout, "got ID_MODEL_FROM_DATABASE: %s\n", v);
else
fprintf(stdout, "failed getting ID_MODEL_FROM_DATABASE: %s\n", v);
fprintf(stdout, "Done.\n");
if (card)
udev_device_unref(card);
if (udev)
udev_unref(udev);
return 0;
}
Dieses Programm (mit dem Arduino angeschlossen) Ausgänge:
$ ./udevl
path: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0
udev_device: 0x09FBF080
got ID_MODEL_FROM_DATABASE: FT232 USB-Serial (UART) IC
Done.
... und „FT232 USB-Seriell (UART) IC "ist der richtige Eintrag für VID: PID 0403: 6001 in usb.ids.
Hoffen, dass dies hilft,
Prost!
Auf meinem System ist es '/ usr/share/usb.ids'. Kann keinen Standard finden, der den Ort für diese Datei regelt. –
Hier ist die neueste Version: http://www.linux-usb.org/usb.ids und die Schnittstelle für das Einreichen von ihnen: http://www.linux-usb.org/usb-ids.html – endolith
Auf Android, Mein C-Programm verwendet * libusbhost *, das Callbacks für das Einfügen/Entfernen von Geräten bereitstellt. Alle Gerätedeskriptoren werden von der lib zur Verfügung gestellt. –