Лабораторная работа №5 «Работа с периферийными

Лабораторная работа №5 «Работа с периферийными устройствами с использованием библиотеки libusb» Цель работы Ознакомиться с началами программирования периферийных USB устройств с использованием библиотеки libusb 1.0. (далее ­ libusb). Описание работы USB – промышленный стандарт, определяющий интерфейс между компьютерами и подключаемыми к ним периферийными устройствами. В частности, он определяет механические параметры кабелей и разъемов, электрические параметры и протоколы передачи данных. Стандарт USB ввел единообразие в работе с широким спектром периферийных устройств. До его появления использовалось множество разных интерфейсов для подключения периферийных устройств (последовательный порт RS­232C для модема, мыши, параллельный порт для принтера и дисководов IOMEGA ZIP, PS/2 для мыши и клавиатуры, специализированные интерфейсы для подключения сканеров и т. д.). Программирование взаимодействия с USB устройствами достаточно трудоемко. Для его упрощения была построена libusb – многоплатформенная библиотека для работы с USB устройствами из прикладной программы. Библиотека позволяет получать список подключенных к компьютеру устройств, определять их параметры, задавать режим их работы и обмениваться данными с устройствами. Существует несколько классов USB устройств, например, устройства пользовательского интерфейса, устройства внешней памяти и коммуникационные устройства. С устройствами всех этих классов можно работать, используя интерфейс библиотеки libusb, но детали протокола взаимодействия у них существенно отличаются. Функции libusb, которые используются в лабораторной работе: libusb_init – инициализация работы с libusb, libusb_exit – завершение работы с libusb, libusb_set_debug – установка уровня подробности отладочных сообщений (рекомендуется использовать уровень 3), libusb_get_device_list – получение списка подключенных к машине USB устройств, libusb_free_device_list – освобождение памяти, выделенной в функции libusb_get_device_list для хранения данных со списком устройств, libusb_get_device_descriptor – получение дескриптора USB устройства, libusb_get_config_descriptor ­ получение дескриптора конфигурации USB устройства, libusb_free_config_descriptor ­ освобождение памяти, выделенной в функции, libusb_ref_device – увеличение счетчика числа пользователей устройства на 1 (при первом вызове функции libusb_get_device_list после подключения устройства его счетчик устанавливается в 1), libusb_unref_device – уменьшение счетчика числа пользователей устройства на 1 (если счетчик уменьшается до нуля, дескриптор устройства удаляется), libusb_open – открыть устройство (начать работать с устройством) и получить дескриптор устройства, который далее можно использовать для ввода/вывода данных, libusb_open_device_with_vid_pid ­ открыть устройство по его идентификаторам производителя и изделия, libusb_close – закрыть устройство после его использования, libusb_get_string_descriptor_ascii – получение атрибута дескриптора устройства в виде ANSI C строки, lib_usb_error_name – преобразование кода ошибки библиотеки libusb в строковое сообщение об ошибке. libusb_detach_kernel_driver – отключить драйвер ядра ОС Linux от устройства, заданного переданным дескриптором, libusb_set_configuration – задание номера конфигурации устройства, libusb_claim_interface – открыть интерфейс устройства, libusb_control_transfer – передача данных между компьютером и устройством, libusb_release_interface – закрыть интерфейс устройства. Работа может выполняться как на сервере (инструкция по заходу на сервер приводится ниже), так и на своем ПК под ОС Windows или GNU Linux. В последнем случае нужно самостоятельно установить libusb. Рассмотрим последовательность действий, выполняемых простейшей программой, осуществляющей пересылку данных между компьютером и устройством пользовательского интерфейса (вариант для ОС Linux). 1. Инициализации библиотеки (вызов функции libusb_init). 2. Открытие устройства по заданным идентификатором производителя и модели ( вызов функции libusb_open_device_with_pid_vid). Первый параметр установить в NULL. 3. Отключение драйвера устройства (libusb_detach_kernel_driver). Второй параметр установить в 0. 4. Выбор текущей конфигурации (вызов функции libusb_set_configuration). Номер конфигурации — 0. 5. Открытие интерфейса (вызов функции libusb_claim_interface). Номер интерфейса — 0. 6. Одна или несколько пересылок данных (функция libusb_control_transfer). В минимальном варианте нужно использовать следующий код: #define CTRL_IN LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | \ LIBUSB_RECIPIENT_INTERFACE #define HID_GET_IDLE 0x02 ... result = libusb_control_transfer( handler_of_device, CTRL_IN, HID_GET_IDLE, buffer, length, 5000); 7. Закрытие интерфейса (вызов функции libusb_release_interface). 8. Закрытие дескриптора устройства (libusd_close). 9. Деинициализация библиотеки (libusb_exit). Передаваемый параметр установить в NULL. План работ 1. Если выбран вариант с использованием собственного компьютера, то необходимо самостоятельно скачать и установить libusb (версия 1.0 и выше). Проверка правильности установки заключается в компиляции и запуске примера программы, приведенного в приложении ниже. 2. Реализовать программу, получающую список всех подключенных к машине USB устройств на сервере portal.sscc.ru или на собственном компьютере, на языках ANSI C или C++ с использованием libusb. Для каждого найденного устройства напечатать его класс, идентификатор производителя и идентификатор изделия. За основу для разработки можно взять программу, приведенную ниже в приложении. 3. Изучить состав и характеристики обнаруженных с помощью реализованной программ USB устройств. 4. Дополнить программу, реализованную в п. 2 функцией печати серийного номера USB устройства. Для написания функции рекомендуется использовать функции libusb_open, libusb_close, libusb_get_string_descriptor_ascii для печати поля iSerialNumber дескриптора устройства. 5. Написать программу, производящую пересылку типа HID_GET_IDLE от устройства пользовательского интерфейса к компьютеру. Форма отчета Результаты работы представляются в виде файла с отчётом о проделанной работе в произвольной форме. Отчёт должен содержать следующую информацию: 1. Исполнитель (ФИО, № группы). 2. Исходный код программы. 3. Краткий комментарий с описанием обнаруженных USB устройств. Как подключаться к серверу portal.sscc.ru 1. Перезагрузить машину в ОС GNU Linux 2. В оболочке ОС GNU Linux запустить команду: ssh [email protected] (пароль сообщается преподавателем на семинарском занятии, логин можно использовать только для выполнения задания по этой лабораторной работе, email системного администратора сервера — [email protected]) Для компиляции программы, написанной на ANSI C и использующей библиотеку libusb, с помощью компилятора GCC под ОС GNU Linux можно использовать команду: g++ ­o executable –I/usr/include/libusb­1.0 main.cpp ­lusb­1.0 При самостоятельной установке libusb расположение заголовочных файлов может отличаться, т. е. потребуется корректировка пути в флаге ­I. Для того, чтобы выяснить, какой путь правильный, можно воспользоваться поиском файла по имени libusb.h. Аналогично, может потребоваться задать путь к библиотеке с помощью флага ­L. Его можно выяснить, поискав файл libusb­1.0.a (имя в ОС GNU Linux, в других ОС может отличаться). Запуск программы печати серийных номеров USB устройств. При запуске на серверах portal.sscc.ru и portal.sscc.ru:2222 для некоторых USB устройств (но не для всех) разрешен доступ по чтению и записи для пользователя nsulab, что позволяет прочитать их серийный номер. При запуске на собственном компьютере необходимо разрешить доступ к USB устройствам по чтению и записи (с использованием команды chmod или пакета udev). Пример: chmod 777 /dev/bus/usb/001/003 Альтернативный (более простой, но более уязвимый вариант) заключается в запуске программы с правами администратора: sudo ./executable Примеры распечаток результатов исполнения программы для администратора и обычного пользователя на сервере portal.sscc.ru приведены в приложении. Пример программы получения и печати состава и параметров USB устройств (файл с примером и скрипт для его компиляции расположен в подкаталоге samples домашнего каталога пользователя nsulab на сервере portal.sscc.ru) #include <iostream> #include <libusb.h> #include <stdio.h> using namespace std; void printdev(libusb_device *dev); /* прототип функции */ int main(){ libusb_device **devs; /* указатель на указатель на устройство, */ /* используется для получения списка */ /* устройств */ libusb_context *ctx = NULL; /* контекст сессии libusb */ int r; /* для возвращаемых значений */ ssize_t cnt; /* число найденных USB устройств */ ssize_t i; /* индексная переменная цикла перебора */ /* всех устройств */ r = libusb_init(&ctx); /* инициализировать библиотеку libusb, */ /* открыть сессию работы с libusb */ if(r < 0){ fprintf(stderr, "Ошибка: инициализация не выполнена, код: %d.\n", r); return 1; } libusb_set_debug(ctx, 3); /* задать уровень подробности отладочных */ /* сообщений */ cnt = libusb_get_device_list(ctx, &devs); /* получить список всех найденных USB */ /* устройств */ if(cnt < 0){ fprintf(stderr, "Ошибка: список USB устройств не получен.\n", r); return 1; } printf("найдено устройств: %d\n", cnt); printf("=====================================================
======\n"); printf("* количество возможных конфигураций\n"); printf("| * класс устройства\n"); printf("| | * идентификатор производителя\n"); printf("| | | * идентификатор устройства\n"); printf("| | | | * количество интерфейсов\n"); printf("| | | | | * количество альтернативных настоек\n"); printf("| | | | | | * класс устройства\n"); printf("| | | | | | | * номер интерфейса\n"); printf("| | | | | | | | * количество конечных точек\n"); printf("| | | | | | | | | * тип дескриптора\n"); printf("| | | | | | | | | | * адрес конечной точки\n"); printf("+­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­\n"); for(i = 0; i < cnt; i++) { /* цикл перебора всех устройств */ printdev(devs[i]); /* печать параметров устройства */ } printf("=====================================================
======\n"); libusb_free_device_list(devs, 1); /* освободить память, выделенную */ /* функцией получения списка устройств */ libusb_exit(ctx); /* завершить работу с библиотекой libusb, */ /* закрыть сессию работы с libusb */ return 0; } void printdev(libusb_device *dev){ libusb_device_descriptor desc; /* дескриптор устройства */ libusb_config_descriptor *config; /* дескриптор конфигурации объекта */ const libusb_interface *inter; const libusb_interface_descriptor *interdesc; const libusb_endpoint_descriptor *epdesc; int r = libusb_get_device_descriptor(dev, &desc); if (r < 0){ fprintf(stderr, "Ошибка: дескриптор устройства не получен, код: %d.\n", r); return; } libusb_get_config_descriptor(dev, 0, &config); /* получить конфигурацию устройства */ printf("%.2d %.2d %.4d %.4d %.3d | | | | | |\n", (int)desc.bNumConfigurations, (int)desc.bDeviceClass, desc.idVendor, desc.idProduct, (int)config­>bNumInterfaces ); for(int i=0; i<(int)config­>bNumInterfaces; i++){ inter = &config­>interface[i]; printf("| | | | | " "%.2d %.2d | | | |\n", inter­>num_altsetting, (int)desc.bDeviceClass ); for(int j=0; j<inter­>num_altsetting; j++) { interdesc = &inter­>altsetting[j]; printf("| | | | | | | " "%.2d %.2d | |\n", (int)interdesc­>bInterfaceNumber, (int)interdesc­>bNumEndpoints ); for(int k=0; k<(int)interdesc­>bNumEndpoints; k++) { epdesc = &interdesc­>endpoint[k]; printf( "| | | | | | | | | " "%.2d %.9d\n", (int)epdesc­>bDescriptorType, (int)(int)epdesc­>bEndpointAddress ); } } } libusb_free_config_descriptor(config); } Вопросы для самоконтроля 1. Какие задачи решает libusb? 2. На какие группы можно разбить функции libusb? 3. Какая последовательность действий производится программой, получающей состав и конфигурацию USB устройств с помощью libusb? Литература 1. http://www.dreamincode.net/forums/topic/148707­introduction­to­using­libusb­10/ 2. http://www.usb.org/ Коды классов USB устройств 00h – код отсутствует (информацию о классе нужно получать в дескрипторе интерфейса) 01h ­ аудио устройство (если код получен из дескриптора интерфейса, а не устройства) 02h ­ коммуникационное устройство (сетевой адаптер) 03h ­ устройство пользовательского интерфейса 05h ­ физическое устройств 06h ­ изображения 07h ­ принтер 08h ­ устройство хранения данных 09h ­ концентратор 0Ah ­ CDC­Data 0Bh ­ Smart Card 0Dh ­ Content Security 0Eh ­ видео устройства 0Fh ­ персональное медицинское устройств 10h ­ аудио и видео устройства DCh ­ диагностическое устройство E0h ­ беспроводный контроллер EFh ­ различные устройства FE ­ специфическое устройство Пример распечатки результатов программы (сохранение формата распечатки при выполнении лабораторной работы не требуется, формат выбирается произвольный, но читаемый) 0. Полная распечатка для сервера portal.sscc.ru:2222 (r457lnx3), когда все USB разъемы свободны: =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 09 7531 0002 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 7531 0001 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 7531 0001 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 7531 0001 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== Далее приводятся только частичные распечатки (часть, приведенная выше отсутствует) для случаев, когда к серверу подключено равно одно устройство. 1. Мышь Logitech M­BJ69: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1133 49166 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 2. Мышь HP FQ983AA: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1121 19810 001| | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 3. мышь Microsoft Comfort Optical Mouse: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1118 0246 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 4. мышь Genius NetScroll+Mini Traveller: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1112 0054 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 5. мышь A4Tech op530nu: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 2362 9488 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 6. клавиатура HP: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1121 0016 002 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 | | | | | 01 00 | | | | | | | | | | | 01 01 | | | | | | | | | | | 05 000000130 =========================================================== 7. клавиатура Chicony KU­9900: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1266 0273 002 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 | | | | | 01 00 | | | | | | | | | | | 01 01 | | | | | | | | | | | 05 000000130 =========================================================== 8. сетевая карта DLink DUB­E100: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 02 8193 6656 001 | | | | | | | | | | | 01 02 | | | | | | | | | | | 00 03 | | | | | | | | | | | 05 000000129 | | | | | | | | | 05 000000002 | | | | | | | | | 05 000000131 =========================================================== 9. модуль беспроводной связи для очков NVIDIA 3D VISION найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 2389 0007 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 00 | | =========================================================== 10. Внешний USB диск Fujitsu Handydrive 40G: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1988 44289 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 02 | | | | | | | | | | | 05 000000129 | | | | | | | | | 05 000000002 =========================================================== 11. Flash диск SanDisk Extreme 8G: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1921 21518 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 02 | | | | | | | | | | | 05 000000129 | | | | | | | | | 05 000000002 =========================================================== 12. Flash диск kingston 8G: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 5118 7936 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 02 | | | | | | | | | | | 05 000000129 | | | | | | | | | 05 000000002 =========================================================== 13. USB концентратор Trendnet TFU­430: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 09 1033 0088 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 14. USB концентратор D­Link DUB­H4: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 09 1507 1542 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 =========================================================== 15. Смартфон Toshiba g910 найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 239 2352 3369 002 | | | | | | | | | | | 01 239 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 | | | | | 01 239 | | | | | | | | | | | 01 02 | | | | | | | | | | | 05 000000130 | | | | | | | | | 05 000000003 =========================================================== 16. Web камера HP: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 239 1266 41276 005 | | | | | | | | | | | 01 239 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000131 | | | | | 07 239 | | | | | | | | | | | 01 00 | | | | | | | | | 01 01 | | | | | | | | | | | 05 000000129 | | | | | | | 01 01 | | | | | | | | | | | 05 000000129 | | | | | | | 01 01 | | | | | | | | | | | 05 000000129 | | | | | | | 01 01 | | | | | | | | | | | 05 000000129 | | | | | | | 01 01 | | | | | | | | | | | 05 000000129 | | | | | | | 01 01 | | | | | | | | | | | 05 000000129 | | | | | 01 239 | | | | | | | | | | | 02 00 | | | | | | | 02 239 | | | | | | | | | | | 03 00 | | | | | | | | | 03 01 | | | | | | | | | | | 05 000000132 | | | | | 01 239 | | | | | | | | | | | 04 01 | | | | | | | | | | | 05 000000134 =========================================================== 17. Сканер HP ScanJet 4600: найдено устройств: 5 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 00 1008 12293 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 03 | | | | | | | | | | | 05 000000001 | | | | | | | | | 05 000000130 | | | | | | | | | 05 000000131 =========================================================== 18. Полная распечатка для сервера portal.sscc.ru:2222 (r457lnx3), когда одновременно подключено несколько устройств: найдено устройств: 9 =========================================================== * количество возможных конфигураций | * класс устройства | | * идентификатор производителя | | | * идентификатор устройства | | | | * количество интерфейсов | | | | | * количество альтернативных настоек | | | | | | * класс устройства | | | | | | | * номер интерфейса | | | | | | | | * количество конечных точек | | | | | | | | | * тип дескриптора | | | | | | | | | | * адрес конечной точки +­­+­­+­­­­+­­­­+­­­+­­+­­+­­+­­+­­+­­­­­­­­­­­­­­­­­­­­­­ 01 09 7531 0002 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 7531 0001 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 7531 0001 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 7531 0001 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 09 1507 1542 001 | | | | | | | | | | | 01 09 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 00 5118 7936 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 02 | | | | | | | | | | | 05 000000129 | | | | | | | | | 05 000000002 01 00 1133 49166 001 | | | | | | | | | | | 01 00 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 01 02 8193 6656 001 | | | | | | | | | | | 01 02 | | | | | | | | | | | 00 03 | | | | | | | | | | | 05 000000129 | | | | | | | | | 05 000000002 | | | | | | | | | 05 000000131 01 239 2352 3369 002 | | | | | | | | | | | 01 239 | | | | | | | | | | | 00 01 | | | | | | | | | | | 05 000000129 | | | | | 01 239 | | | | | | | | | | | 01 02 | | | | | | | | | | | 05 000000130 | | | | | | | | | 05 000000003 =========================================================== Пример распечатки результатов программы, определяющей серийные номера USB устройств 1. Распечатка для сервера portal.sscc.ru:2222 (r457lnx3) в конфигурации с подключенным устройством автомобильный навигатор Garmin Nuvi 30 при запуске с правами администратора: идентификатор производителя / идентификатор устройства / серийный номер =========================================================== 7531 / 2 / 0000:00:1d.7 7531 / 1 / 0000:00:1d.0 7531 / 1 / 0000:00:1d.1 7531 / 1 / 0000:00:1d.2 2334 / 9541 / 0000e536524e =========================================================== 2. Распечатка для сервера portal.sscc.ru:2222 (r457lnx3) в конфигурации с подключенным устройством автомобильный навигатор Garmin Nuvi 30 при запуске с правами обычного пользователя: идентификатор производителя / идентификатор устройства / серийный номер =========================================================== 7531 / 2 / (доступ запрещен) 7531 / 1 / (доступ запрещен) 7531 / 1 / (доступ запрещен) 7531 / 1 / (доступ запрещен) 2334 / 9541 / 0000e536524e ===========================================================