Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Системное программирование и WinAPI > драйвер для usb устройства


Автор: Эд17021978 07.11.20, 21:33
Здравствуйте!


То есть имеется USB устройство реализованное на микроконтроллере Pic18f2550 с
под стыкованным TFT дисплеем.
Для данного устройства написан функциональный драйвер. Скомпонованный с помощью DDK.
Драйвер позволяет отправлять и принимать данные с USB устройства.
То есть WINDOWS приложение с помощью стандартных API функций открывает ХЕНДЛ драйвера
и соответственно ведет обмен данными с USB устройством, функциями
WriteFile();ReadFile();. Во общем проблем нет.
Но теперь данное USB устройство решил превратить в USB принтер.
Изменил в дескрипторе устройств поля класс устройств на класс принтера.
Диспетчер устройств определил , что это принтер и загрузил
драйвер usbprint.sys поддержка usb принтера и на этом все.
Теперь сам вопрос.
Как превратить раннее разработанный функциональный драйвер
USB устройства в полноценный драйвер принтера. Чтоб другие WINDOWS приложения могли видеть мое устройство,
как принтер и отправлять документ на печать в мое устройство?
Примеры из DDK D:\WINDDK\2600\src\print ,что то трудновато для понимания и не могу связать все с моим устройством.
Хотелось бы написать драйвер для USB принтера.
Может есть у кого опыта в подобных случаях?

Автор: MaIron 30.03.23, 19:50
Написание драйвера требует глубоких знаний аппаратной части и низкоуровневого программирования, и требует большого объема работы.

Общие принципы такие:

1. Инициализация USB-устройства и TFT дисплея
Перед тем как начать работу с устройствами, необходимо их инициализировать. Для этого нужно использовать соответствующие функции и библиотеки. В случае Pic18f2550 для работы с USB можно использовать библиотеку USB Stack, а для работы с TFT дисплеем - библиотеку, которая подходит для данного устройства.

2. Обработка запросов от хоста
Для обработки запросов от хоста (например, команды на печать документа) используется функция USBTransferOnePacket. Эта функция отправляет данные от хоста к устройству, и наоборот.

3. Обработка команд на печать
Для обработки команд на печать необходимо сначала распарсить данные, отправленные от хоста, чтобы получить информацию о том, какой документ нужно распечатать. Затем нужно отправить данные на принтер через соответствующий порт.

4. Управление TFT дисплеем
Чтобы отображать информацию на TFT дисплее, необходимо использовать функции библиотеки для работы с TFT дисплеем.

5. Обработка ошибок
В драйвере необходимо предусмотреть обработку ошибок, которые могут возникнуть в процессе работы с устройствами. Например, если произошла ошибка при передаче данных на принтер, нужно вывести сообщение об ошибке на TFT дисплей.

Это только общая структура драйвера, и реализация зависит от конкретных требований к устройству и принтеру. Также необходимо учитывать особенности микроконтроллера и драйверов для работы с USB и TFT дисплеем.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)