- •Введение 5
- •1 Исследовательский раздел
- •1.1 Анализ существующих аналогичных систем
- •1.1.1 Обзор архитектуры устройств usb
- •1.2 Обоснование выбора программно-аппаратных средств
- •1.3 Постановка задачи
- •1.4 Развернутое техническое задание
- •1.4.1 Общие сведения
- •2.1.1 Основные дескрипторы usb драйвера
- •2.1.1.1 Дескриптор устройства
- •2.1.1.2 Дескриптор расширения устройства
- •2.1.1.3 Дескриптор конфигурации
- •2.1.1.4 Дескриптор интерфейса
- •2.1.1.5 Дескриптор конечной точки
- •2.2 Разработка функциональной схемы драйвера
- •2.2.1 Драйвер в иерархии wdm
- •2.2.2 Уровни обмена данными usb устройств
- •2.2.3 Архитектура системного драйвера usb
- •2.2.4 Основные рабочие процедуры драйвера
- •2.2.5 Управление перемещаемостью кода в драйвере
- •2.3 Разработка алгоритмического обеспечения
- •2.3.1 Инициализация драйвера
- •2.3.3 Обработка расширенных запросов ioctl
- •2.3.4 Поддержка запросов Plug and Play
- •2.3.5 Управление питанием
- •2.3.5.1 Обработка запросов irp_mj_power
- •2.3.6 Процедура деинициализации драйвера
- •2.4 Разработка программного обеспечения
- •2.4.1 Процедура DriverEntry
- •2.4.2 Процедура DriverUnload
- •2.4.3 Процедура AddDevice
- •2.4.4 Процедура передачи запроса usbd
- •2.4.5 Обработчики usbCreate и usbClose
- •2.4.6 Обработчик ConfigureDevice
- •2.4.7 Обработчики запросов на чтение и запись
- •3 Технологический раздел
- •3.1 Технология разработки драйверов для операционных систем семейства Windows
- •3.1.1 Архитектура Windows Driver Model
- •3.1.2 Выбор типа разрабатываемого драйвера
- •3.1.3 Разработка usb драйвера
- •3.2 Технология отладки драйверов в операционных системах семейства Windows
- •3.2.1 Основные отладочные тесты
- •3.2.2 Основные «проблемы», возникающие при отладке драйвера
- •3.2.2.1 Аппаратные проблемы
- •3.2.2.2 Программные проблемы
- •3.2.3 Основные отладчики и утилиты для проверки драйвера
- •3.2.3.1 Отладчик WinDbg
- •3.2.3.2 Driver Verifier
- •3.2.4 Общие приемы отладки драйвера
- •3.2.4.1 Установка фиксированных точек прерывания
- •3.2.4.2 Промежуточный вывод на экран
- •3.2.4.3 Сохранение отладочного кода в исходном тексте драйвера
- •3.2.4.4 Перехват некорректных условий
- •3.2.4.5 Обнаружение утечек памяти
- •3.2.5 Замечания по отладке драйверов
- •4 Безопасность жизнедеятельности
- •4.1 Анализ эргономических параметров рабочего места пользователя пэвм
- •4.1.1 Общие эргономические аспекты рабочего места
- •4.2 Организация рабочего места пользователя с учётом эргономических требований
- •4.2.1 Организация рабочего стола
- •4.2.2 Рабочее кресло
- •4.2.3 Работа с клавиатурой и мышью
- •4.2.4 Расположение и эргономические характеристики монитора
- •4.2.5 Внутренний объем
- •4.2.6 Рабочая поза пользователя пэвм
- •4.3 Экологическая оценка и переработка узлов компьютерной техники содержащих платину
- •4.3.1 Извлечение платины из отработанных катализаторов
- •4.3.2 Извлечение платины из радиооборудования и сплавов для электрических контактов
- •5 Экономический раздел
- •5.1 Планирование разработки драйвера с построением графика выполнения работ
- •5.1.1 Определение этапов и работ по созданию программного продукта
- •5.1.2 Расчет трудоемкости и продолжительности работ
- •5.1.3 Построение графика выполнения работ
- •5.2 Расчет затрат на разработку
- •5.3 Оценка экономической эффективности проекта
- •1 К исследовательскому разделу
- •2 К специальному разделу
- •3 К технологическому разделу
- •4 К разделу «Безопасность Жизнедеятельности»
- •5 К экономическому разделу
- •Приложение а Установка драйвера с помощью inf-файла
- •Приложение б Графические материалы
2.1.1.3 Дескриптор конфигурации
Каждое USB устройство обладает одним или несколькими дескрипторами конфигураций, которые описывают различные конфигурации, поддерживаемые устройством. Чтобы получить этот дескриптор, системное программное обеспечение направляет конечной точке 0 управляющую транзакцию GET_DESCRIPTOR.
Дескриптор конфигурации определяется следующим образом [2.2]:
typedef struct _USB_CONFIGURATION_DESCRIPTOR
{
UCHAR bLength;
UCHAR bDescriptorType;
USHORT wTotalLength;
UCHAR bNumInterfaces;
UCHAR bConfigurationValue;
UCHAR iConfiguration;
UCHAR bmAttributes;
UCHAR MaxPower;
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
Описание полей дескриптора конфигурации приведено в таблице 2.4 [2.3]:
Таблица 2.4 – Описание полей дескриптора конфигурации
Смещение поля данных, байт |
Наименование поля |
Размер, байт |
Описание |
0 |
bLength |
1 |
Размер дескриптора в байтах |
1 |
bDescriptorType |
1 |
Тип дескриптора (USB_CONFIGURATION_ DESCRIPTOR_TYPE) |
2 |
wTotalLength |
2 |
Общий объем данных (в байтах), возвращаемый для данной конфигурации |
4 |
bNumInterfaces |
1 |
Количество интерфейсов, поддерживаемых данной конфигурацией |
5 |
bConfigurationValue |
1 |
Идентификатор конфигурации, используемый при вызове SET_CONFIGURATION ДЛЯ установки данной конфигурации |
Продолжение
таблицы 2.4
|
|
|
|
6 |
iConfiguration |
1 |
Индекс дескриптора строки, описывающей данную конфигурацию |
7 |
bmAttributes |
1 |
Характеристики конфигурации |
8 |
MaxPower |
1 |
Код мощности, потребляемой USB- устройством от шины , |
Поле bmAttributes представляет собой битовую маску, имеющую следующие значения:
[7: х0000000] – зарезервирован и должен равняться нулю;
[6: 0х000000] – признак наличия у USB-устройства собственного источника питания:
0 — получает питание по шине;
1 — имеет собственный источник питания;
[5: 00х00000] – признак возможности пробуждения USB-устройства по внешнему сигналу:
0 — не имеет такой возможности;
1 — имеет возможность пробуждения;
[4-0: 000ххххх] – зарезервированы и должны содержать нули.
Значение поля MaxPower равно максимальному току в миллиамперах, потребляемому USB-устройством от шины, деленному на 2.
USB-устройство может иметь один или несколько дескрипторов конфигурации в соответствии с количеством возможных конфигураций, указанных в стандартном дескрипторе. Каждая конфигурация имеет один или несколько интерфейсов. Каждый интерфейс имеет ноль или несколько конечных точек.
Каждая конфигурация описывается одним стандартным дескриптором, размер которого составляет 9 байт. Поле bConfigurationValue является идентификатором конфигурации, описываемой данным дескриптором, и используется при установке конфигурации.
Количество доступных интерфейсов указывается в поле bNumInterfaces. Например, ISDN-устройство может иметь конфигурацию с двумя интерфейсами, каждый из которых предоставляет канал по 64 Кбит/с, либо конфигурацию с одним интерфейсом, но имеющую канал 128 Кбит/с.
USB-устройство может вернуть дескриптор конфигурации, с полем bDescriptorType, равным OTHER_SPEED_CONFIGURATION. Такой дескриптор описывает конфигурацию для HS-режима (HIGH SPEED), если данное устройство поддерживает этот режим.