Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› USB-драйвер |
Посл.ответ | Сообщение |
|
Создано: 10 октября 2007 18:24 · Личное сообщение · #1 Здравствуйте! У меня вопрос по поводу написания USB-драйвера в DS.. В книге Агурова "Интерфейс USB. Практика использования и программирования" довольно подробно описан этот процесс. НО.. Все довольно сильно изменилось (книга морально устаревает). Агуров пользовался (если верить ему) DDK под WinXP, VS6 и DS непонятной версии. Шаблон драйвера генерируется нормально, компилируется тоже (DDK2003, VS2005, DS3.2.1). Но это всеголишь ШАБЛОН. Необходимо написать реализацию функций чтения/записи для работы с конечными точками. В инете ничего хорошего не нашел - кругом ссылаются на Агурова. Ммм.. приведу пример из книги. реализация функции чтения из конечной точки (кт) NTSTATUS AT90DriverRead(KIrp I) { if (I.ReadSize() == 0) { I.Information() = 0; return I.PnpComplete(this, STATUS_SUCCESS); } NTSTATUS status = STATUS_SUCCESS; PVOID pBuffer = I.BufferedReadDest(); ULONG dwTotalSize = I.ReadSize(CURRENT); ULONG dwBytesRead = 0; if (!deviceExtension->EP_OUT_1Urb.IsOpen()) { I.Information() = 0; return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES); } ULONG dwMaxSize = deviceExtension->EP_OUT_1Urb.MaximumTransferSize(); if (dwTotalSize > dwMaxSize) dwTotalSize = dwMaxSize; PURB pUrb = deviceExtension->EP_OUT_1Urb.BuildInterruptTransfer( pBuffer, dwTotalSize, TRUE ); pUrb->UrbBulkOrInteruptTransfer.TransferFlags = (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK); status = deviceExtension->EP_OUT_1Urb.SubmitUrb(pUrb); dwBytesRead = pUrb->UrbBulkOkInterruptTransfer.TransferBufferLength; delete pUrb; I.Information() = dwBytesRead; return I.PnpComplete(this, status); Так вот.. нету такой фигни --> KIrp (( Что делать-то? Может кто сталкивался с моей проблемой.. помогите советом пжл ![]() |
|
Создано: 11 октября 2007 08:18 · Личное сообщение · #2 |
|
Создано: 11 октября 2007 09:36 · Личное сообщение · #3 |
|
Создано: 11 октября 2007 09:51 · Поправил: Frolls · Личное сообщение · #4 Пасиб за внимание к теме! Pushick: да просто ребята из NuMega не плохо поработали и теперь код драйвера генерируется по-другому (сильно отличается от того, что было ранее). Infern0: хех.. с одной стороны совет очеь даже неплохой! Но разобраться в новом коде гораздо интересней и на будущее пригодится (опыт бесценен, как говорится).. Надеюсь, что ты не будешь лет через 5-10 давать тот же совет)) Никто не писал дрова для USB в DS 3.2 чтоли? Компании-разработчики (да что уж говорить - даже мелкие организации, занимающиеся проектированием) погловно на USB переходят, так что, ребят, я думаю, что вопрос очень даже актуальный ![]() |
|
Создано: 11 октября 2007 10:08 · Личное сообщение · #5 WinDriver USB for Windows automates and simplifies the development of user-mode Windows USB device drivers and hardware control applications for USB peripheral devices. No DDK knowledge or kernel level programming required. * Hardware diagnostics * Automatic driver code generation * Driver debugging * Hardware access - using our intuitive API Complete support for USB, PCI, PCI Express, CardBus, CompactPCI, ISA, PMC, PCI-X, PCI-104 and PCMCIA. Enabling driver development for Windows 98/Me/NT/2000/XP/XP Embedded/Server 2003/Vista, Windows CE.NET, Windows Mobile 5.0, Linux, Solaris and VxWorks. ![]() |
|
Создано: 11 октября 2007 11:31 · Поправил: Frolls · Личное сообщение · #6 |
|
Создано: 11 октября 2007 19:02 · Личное сообщение · #7 Frolls в DDK есть примеры драйверов: ...\ddk\6000\src\usb\ Там есть bulk usb пример обрабатывающий IRP_MJ_WRITE и IRP_MJ_READ Теперь концептуально. Можно писать драйвер USB устройства на чистом С используя DDK. Но, для многих типичных проблем уже есть решения которые можно просто использовать. DS и WinDriver как рас это и делают - это библиотеки которые позволят тебе избежать написания (и понимания) большей части DDK кода. ![]() |
|
Создано: 11 октября 2007 22:33 · Личное сообщение · #8 Ребят, спасиб за внимание к теме! Flair: качнул и поставил я WinDriver. Попытался наваять драйвер. При чтении с конечной точки - читает то, что должен читать! Версия 8.11. Может, есть кейген (я честно искал)? S0larian: спс за совет. обязательно поищу еще раз. Все-таки интересно в коде покопаться, что там и как WinDriver 8.11 Keygen... Если завалялся у кого, киньте на мыло плз ![]() |
|
Создано: 11 октября 2007 23:04 · Личное сообщение · #9 |
|
Создано: 12 октября 2007 00:09 · Личное сообщение · #10 |
|
Создано: 12 октября 2007 00:35 · Личное сообщение · #11 |
|
Создано: 12 октября 2007 01:18 · Поправил: Frolls · Личное сообщение · #12 |
|
Создано: 12 октября 2007 03:11 · Личное сообщение · #13 |
|
Создано: 12 октября 2007 11:35 · Личное сообщение · #14 |
|
Создано: 12 октября 2007 11:46 · Личное сообщение · #15 |
|
Создано: 12 октября 2007 12:42 · Поправил: Frolls · Личное сообщение · #16 SergX: система сбора и обработки информации о физическом состоянии спортсменов (и пациентов, в принципе тоже можно). Собственно, контроллер AVR AT90USB1287 от ATmel. Собираюсь подключить к нему клипсу, для снятия пульсограммы, потом 2 динамометра (становой и кистевой), ну и еще кое-что (в стадии разработки). Работа больше носит научно-исследовательский характер (диссертацию пишу). Схему более-менее разработал, осталось развести. Прошивку вроде наваял, со стороны хоста накидал программку (пока только для чтения), а вот с драйвером - застрял немного. Но, надеюсь сейчас работа пойдет быстрее ![]() |
|
Создано: 12 октября 2007 13:22 · Личное сообщение · #17 |
![]() |
eXeL@B —› Программирование —› USB-драйвер |