Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: BulkUsb DDK 2003 не досылает пакет  (Прочитано 12730 раз)
0 Пользователей и 1 Гость смотрят эту тему.
anb
Гость
« : 26-10-2004 08:19 » 

Мужики помогите! Достала проблема - не досылается пакет драйвером BulkUsb (пробовал три варианта драйвера DDK 2003, DDK 2001 и генеренным DriverStudio - один и тот же результат). Если отсылаю пакет меньше 16 байт (end point size) то все нормально, если отсылаю 17 то приходит 16, а 1 байт приходит при следующем вызове WriteFile (rwbulk.exe), причем снова последний пакет не приходит. Пробовал сформировать пакет с нулевой длинной rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength = 0 - IoCallDriver возвращает ошибку.

Может дело в железе, но ведь пакет не теряется (похоже зависает в буфере хост контроллера)Не понял
Записан
Серж
Гость
« Ответ #1 : 26-10-2004 09:13 » 

anb, отсылаемый пакет, по-моему, должен быть кратен 16 (размеру буфера). В этом случае все отошлется за один прием.
Записан
anb
Гость
« Ответ #2 : 26-10-2004 09:24 » 

Цитата: Серж
anb, отсылаемый пакет, по-моему, должен быть кратен 16 (размеру буфера). В этом случае все отошлется за один прием.
пробовал, не работает, все равно если шлю 32 байта, приходит 16, а 16 зависает, но если затем еще 32 то приходит предыдущие 16 и только 16 новых, ну и так далее...
Записан
Серж
Гость
« Ответ #3 : 26-10-2004 11:38 » 

anb, в структуре USBD_PIPE_INFORMATION, которая описывает трубку, нужно увеличить размер MaximumTransferSize до размера, который используется в буфере WriteFile.
Записан
anb
Гость
« Ответ #4 : 26-10-2004 12:43 » 

Цитата: Серж
anb, в структуре USBD_PIPE_INFORMATION, которая описывает трубку, нужно увеличить размер MaximumTransferSize до размера, который используется в буфере WriteFile.
Серж, попробовал, но результат тот же, вообще под SoftIce в ней 4096 было, я записывал и stageLenght (256 байт) и totalLength - не помогло, но !!! в тупом тесте я отослал 4 пакета по 16 байт с паузами между ними Sleep(100) и перед CloseHandle() пришли все четыре, причем если оставить паузу только перед CloseHandle() снова последний не приходит. Жаль
Записан
maaaaad
Гость
« Ответ #5 : 26-10-2004 12:44 » 

чушь собачья
Записан
maaaaad
Гость
« Ответ #6 : 26-10-2004 12:45 » 

размер макс. пакетов задаются аппаратно
Записан
maaaaad
Гость
« Ответ #7 : 26-10-2004 12:49 » 

кстати, все так и должно быть.
Записан
maaaaad
Гость
« Ответ #8 : 26-10-2004 12:50 » 

=)

берешь и делаешь циклы Write по 16 байт.
я видал как так один дебил и делал
Записан
Серж
Гость
« Ответ #9 : 26-10-2004 13:02 » 

maaaaad, речь не идет об аппаратном устройстве, речь идет о задании параметра обмена с usbd.sys. Я это многократно проделывал, и это позволяет читать BULK-пакеты одним запросом к usbd размером значительно большим, чем размер аппаратного FIFO. Насчет записи пакетов не знаю, не пробовал.
Записан
maaaaad
Гость
« Ответ #10 : 26-10-2004 13:08 » 

да? и чего же ты там настраивал?
покажи пальцем, что можно "настроить" здесь

typedef struct _USBD_PIPE_INFORMATION {
  USHORT MaximumPacketSize ;
  UCHAR EndpointAddress ;
  UCHAR Interval ;
  USBD_PIPE_TYPE PipeType ;
  USBD_PIPE_HANDLE PipeHandle ;
  ULONG MaximumTransferSize ;
  .
  .
} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION ;
Записан
Серж
Гость
« Ответ #11 : 26-10-2004 13:22 » new

maaaaad, я же уже писал: MaximumTransferSize. Потом делал BULK запрос на чтение такой длины, например, 640х480 для чтения кадра с USB-камеры.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines