Комбинированное звуковое USB-устройство с функциями автономного MP3-плеера и поддержкой Bluetooth
Дескриптор конфигурации содержит информацию об одной из возможных конфигураций устройства.
Дескриптор интерфейса содержит информацию об одном из интерфейсов, доступных при определенной конфигурации устройства.
Дескриптор конечной точки содержит информацию об одной из конечных точек, доступных при использовании определенного интерфейса.
Дескриптор строки (необязателен) содержит текст
в формате UNICODE.
Также могут быть использованы специфические дескрипторы.
В Windows 2000/XP драйверная поддержка реализуется на основе WDM. С точки зрения WDM существует три типа драйверов:
драйвер шины – для обслуживания шины;
функциональный драйвер – основной драйвер устройства;
драйвер фильтра – для поддержания дополнительной функциональности устройства.
Основные процедуры драйвера WDM – это:
DriverEntry – точка входа драйвера;
AddDevice – создание объекта драйвера;
UnLoad – для возможности выгрузки драйвера без перезагрузки системы;
Модель WDM предоставляет следующие типы устройств:
Hub Device (hubclass.sys) – хабы (устройство, обеспечивающее дополнительные порты на шине USB) ;
HID (Human Interface Device) Device (hidclass.sys) – мыши, клавиатуры, джойстики;
Audio Device (sysaudio.sys) – звуковые колонки, виртуальные MIDI-устройства;
Mass Storage Device (usbstor.sys) – устройства хранения данных, флеш-диски;
Printer (usbprinter.sys) – принтеры;
Communication Device (usb8023.sys, mdismp.sys) – устройства коммуникации (модемы, сетевые карты).
Для данного устройства необходимо реализовать два драйвера (аудио устройство и устройство хранения данных), каждый из них будет использоваться в зависимости от настроек процессора устройства.
При разработке драйвера устройства использовалась программная среда NuMega Driver Studio 2.0, а также классы драйверов устройств и библиотеки в составе Windows 2000 DDK.
После установки Visual Studio появляется дополнительное окно с возможностями запуска помощника создания драйвера, запуска помощника создания сетевого драйвера, изменения переменных окружения и компиляции с помощью утилиты Build из DDK.
Библиотека классов Driver Studio представляет собой надстройку над чистым WDM API, что избавляет программиста от использования довольно запутанных низкоуровневых функций и позволяет выполнять все необходимые операции. Базовым классом устройства является класс KDriver, который предоставляет базовые функции драйвера. Для управления оборудованием используется класс KDevice, который обрабатывает запросы на чтение/запись к устройству. Класс KIrp представляет собой оболочку для структуры пакета запроса. Класс KRegistryKey позволяет обращаться к данным драйвера, сохраненным в реестре.
Собственно для работы с USB-устройствами предназначены следующие классы:
KUsbInterface – предоставляет функции для работы с USB-интерфейсами, драйвер может создавать столько интерфейсов, сколько их описано в дескрипторе устройства;
KUsbPipe – предоставляет функции для работы с конечными точками, драйвер должен создавать конечные точки только с параметрами, как они описаны в дескрипторе конфигурации.
Принцип работы с этими классами следующий:
в конструкторе экземпляра KDriver создается экземпляр класса KPnpDevice (для поддержки Plug-n-Play);
в конструкторе экземпляра KPnpDevice создаются экземпляры классов – KUsbLowerDevice (базовый класс для устройств нижнего уровня), KUsbInterface, KUsbPipe;
в функции драйвера OnStartDevice выполняется активизация одной из точек конфигурации при помощи вызова функции m_Lower.ActivateConfiguration();
при получении запроса ввода/вывода производятся следующие действия – создание и инициализация пакетов, передача запросу драйверу нижнего уровня, передача данных программе-инициатору запроса.
Для создания шаблона драйвера нужно создать проект и выбрать архитектуру создаваемого драйвера (WDM или Windows NT 4.0). Выбираем модель WDM. Теперь необходимо выбрать шину, на которой будет располагаться устройство. Выбираем шину USB. Для USB-устройства необходимо указать идентификатор производителя (USB Vendor ID) и идентификатор продукта (USB Product ID), они должны соответствовать значениям в дескрипторе устройства.
Указанные значения идентификаторов будут записаны в inf-файл.
Следующий шаг – задание набора конечных точек. У управляющего микроконтроллера 8 конечных точек.
Теперь необходимо выбрать функции драйвера. Возможные варианты – Read (обработка запросов на чтение), Write (обработка запросов на запись), Flush (поддержка функции сброса буферов), Device Control (поддержка пользовательских запросов), Internal Device Control (обработка запросов от других драйверов) и Cleanup (обработка запросов на очистку буферов обмена).
Драйвер для режима звуковой карты должен иметь только функцию Write. А драйвер для режима флеш-диска должен иметь функции Read и Write.
Следующий шаг – выбор способа обработки запросов:
None – запросы не буферизуются в очереди;
Driver Managed – драйвер содержит одну или более очередей, в которых хранятся запросы ввода/вывода;
System Managed – драйвер использует только одну очередь сообщений.
Выберем для обоих драйверов – System Managed.
Также можно задать сохраняемые параметры драйвера (для данного устройства это необязательно) и свойства драйвера – имя, способ передачи буферов памяти, способ управления энергопотреблением.
Последний шаг – задание кодов функции Device Control и задание дополнительных настроек – создание тестового приложения для драйвера (необязательно), настройки отладки и создания лога событий.
Таким образом, получили два шаблона драйвера, с которыми будет работать разработанное устройство в различных режимах.
Для доработки шаблона драйвера требуется дописать функции ввода/вывода и по необходимости расширить список интерфейсов каждого драйвера.
Рассмотрим процесс установки драйвера.
Скомпилировав проекты получим два драйвера – AT91UsbSounCard и AT91UsbMassStorage.
Теперь подключив устройство в режиме звуковой карты, нужно установить драйвер AT91UsbSounCard, указав путь к файлу AT91UsbSounCard.inf и файлу самого драйвера. Система обнаружит драйвер и установит его.
Аналогично в режиме флеш-диска нужно установить драйвер AT91UsbMassStorage.
Теперь необходимо доработать оба драйвера согласно вышеуказанным требованиям.
Тексты проекты шаблонов драйверов приведены в приложении.
5.4 Возможности расширения функциональности устройства
Микропроцессорные системы предоставляют массу возможностей по программной модернизации и модификации проекта. Поменяв прошивку микроконтроллера, можно из невзрачного устройства сделать многофункциональный продукт.
Осуществить программную модификация данного устройства очень просто: подключаете устройство к USB-порту компьютера и при помощи программы-загрузчика “заливаете” новую прошивку.
При выборе базовых компонентов устройства и при разработке аппаратной части устройства была заложены широкие возможности для программной модификации, которые впоследствии могут быть применены для расширения функциональности устройства.
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности