我在Mac OS X v10.10(優勝美地)環境中使用libusb 0.1和Qt。我的目標是獲取所有連接的USB密鑰的序列號(usbclass = 8)。在Mac OS X上檢索USB設備的序列號問題
通常第一次閱讀正常發生,我不明白爲什麼,但有時從後續的讀數中,設備不再被檢測到。有時我會在usb_get_string_simple(handle, device->descriptor.iSerialNumber)
函數上得到-60錯誤代碼。我該如何解決這個問題?
我試過使用FAT,FAT32和NTFS文件系統的USB密鑰,但它們都有同樣的問題。
在同一個項目中,我使用libusb通過連接到Mac的打印機設備讀取/寫入數據,並且還讀取了串行數字。這種類型的設備沒有問題。這麼奇怪。
在.pro文件:
INCLUDEPATH += /Users/sborfedor/Desktop/root/current/includes
DEPENDPATH += /Users/sborfedor/Desktop/root/current/includes
LIBS += -L/Users/sborfedor/Desktop/root/current/bin_osx/libs/ -lusb-legacy
DESTDIR = /Users/sborfedor/Desktop/root/current/bin_osx
這是我的代碼:
void MainWindow::run() {
struct usb_bus* bus = NULL;
struct usb_device* device = NULL;
const int MASSSTORAGE_CLASS = 8;
usb_init();
usb_set_debug(3);
usb_find_busses();
usb_find_devices();
int ret;
for (bus = usb_get_busses(); bus; bus = bus->next) {
for (device = bus->devices; device; device = device->next) {
if (device->descriptor.bDeviceClass != MASSSTORAGE_CLASS && device->descriptor.bDeviceClass != 0) {
continue;
}
for (int cid = 0; cid < device->descriptor.bNumConfigurations; ++cid) {
struct usb_config_descriptor* config = &(device->config[cid]);
if (config == NULL)
continue;
for (int iid = 0; iid < config->bNumInterfaces; ++iid) {
struct usb_interface* interface = &(config->interface[iid]);
if (interface == NULL)
continue;
usb_dev_handle* handle = usb_open(device);
if (handle == NULL)
continue;
for (int sid = 0; sid < interface->num_altsetting; sid++) {
struct usb_interface_descriptor* settings = &(interface->altsetting[sid]);
if (settings == NULL)
continue;
int usbClass = device->descriptor.bDeviceClass;
if (usbClass == 0) {
usbClass = settings->bInterfaceClass;
}
if (usbClass != MASSSTORAGE_CLASS)
continue;
char device_serial_number[255];
ret = usb_get_string_simple(handle, device->descriptor.iSerialNumber, device_serial_number, sizeof(device_serial_number));
if (ret > 0) {
qDebug() << "SERIAL_NUMBER="<<QString(device_serial_number);
} else {
qDebug() << "*** usb_get_string_simple(handle, device->descriptor.iSerialNumber, device_serial_number, USBX_DEVICE_SERIAL_NUMBER_MAX_SIZE) RET="<<ret;
}
}
usb_close(handle);
}
}
}
}
}
你是怎麼安裝'libusb'的? –
在同一個項目中,我使用libusb通過連接到Mac的打印機設備讀取/寫入數據,並讀取連續數字。這種類型的設備沒有問題。這麼奇怪。我認爲libusb安裝正確。 – sborfedor
但你是如何安裝它的? –