इस अपने आप की कोशिश की नहीं है, लेकिन libudev's udev_device_get_property_value यह होना चाहिए; इसका उपयोग pulseaudio's udev-util.c में udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE"))
के रूप में किया जाता है।
यहाँ एक छोटा सा उदाहरण मैं सिर्फ एक साथ रखा, पर udev-util.c
आधारित है - ध्यान दें कि मैं का उपयोग किया है एक Arduino Duemillanove FTDI FT232 चिप के साथ, जिसका udev पथ मैं udevadm
का उपयोग कर पाते हैं (नीचे दिए गए कोड में टिप्पणी देखें), और फिर मैं नीचे दिए गए कार्यक्रम में यह hardcoded, 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;
}
इस कार्यक्रम (साथ Arduino संलग्न) आउटपुट:
$ ./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.
... और "FT232 USB-सीरियल (यूएआरटी) आईसी "वीआईडी के लिए सही प्रविष्टि है: पीआईडी 0403: 6001 usb.ids में।
उम्मीद है कि यह मदद करता है,
चीयर्स!
मेरे सिस्टम पर यह '/ usr/share/usb.ids' है। इस फ़ाइल के लिए जगह को नियंत्रित करने वाला कोई मानक नहीं मिल रहा है। –
यहां सबसे हालिया संस्करण है: http://www.linux-usb.org/usb.ids और उन्हें सबमिट करने के लिए इंटरफ़ेस: http://www.linux-usb.org/usb-ids.html – endolith
एंड्रॉइड पर, मेरा सी प्रोग्राम * libusbhost * का उपयोग करता है जो डिवाइस सम्मिलन/हटाने के लिए कॉलबैक प्रदान करता है। सभी डिवाइस डिस्क्रिप्टर lib द्वारा उपलब्ध कराए जाते हैं। –