Цитата(SFx @ Apr 28 2009, 10:24)

Спасибо за ваш комментарий!
Странно, я думал еще control нужно.... bulk я так понимаю это на передачу в FPGA, а interrupt - на прием из устройства?
а формат данных принимаемых/передаваемых нигде не описан (кроме как в этом
Нажмите для просмотра прикрепленного файла файле из MS RNDIS USB kit 2005) ?
дело в том, что хотелось бы устройство кросплатформенным сделать...
"control", конечно, нужен. 'bulk' используется для передачи данных, 'interrupt' - для сообщения винде, что команда была выполнена.
По сути, просто необходимо принимать команды (включить/выключить/запрос статистики/...) и положить четыре байта (или восемь - не помню)
в 'interrupt' endpoint. Только после этого винда запросит результат команды.
Пакеты(Ethernet frame) передаются с
заголовком REMOTE_NDIS_PACKET_MSG, где надо все установить в нули,
кроме след.:
MessageType = REMOTE_NDIS_PACKET_MSG
MessageLength = 44 + size
DataOffset = 36
DataLength = size
------
Реализовать надо след. команды:
REMOTE_NDIS_INITIALIZE_MSG
REMOTE_NDIS_HALT_MSG
REMOTE_NDIS_QUERY_MSG
REMOTE_NDIS_SET_MSG
REMOTE_NDIS_RESET_MSG
REMOTE_NDIS_KEEPALIVE_MSG
------
Для REMOTE_NDIS_SET_MSG надо поддерживать 'OID_GEN_CURRENT_PACKET_FILTER', 'OID_802_3_MULTICAST_LIST'
Можно просто вернуть статус 'OK', и ничего не делать.
Читаем
здесь и
здесьДа, добавлю.
Команды (REMOTE_NDIS_INITIALIZE_MSG, ...) идут через 'control' endpoint, где (для Setup):
'bRequest' = ('type' = 'CLASS', 'recipient' = 'INTERFACE')
'bmRequestType' = USB_CDC_SEND_ENCAPSULATED_COMMAND, USB_CDC_GET_ENCAPSULATED_RESPONSE.
Т.е.:
1. устройство получает команду (допустим 'REMOTE_NDIS_QUERY_MSG') через ('USB_CDC_SEND_ENCAPSULATED_COMMAND', control EP).
2. устройство выполняет ее и кладет 8 байт в
interrupt EP {RESPONSE_AVAILABLE, 0}.
3. устройство отдает результат (в виде 'REMOTE_NDIS_QUERY_CMPLT') через ('USB_CDC_GET_ENCAPSULATED_RESPONSE', control EP).
Все.
Сами данные передаются как есть, без всяких управляющих команд (c заголовком REMOTE_NDIS_PACKET_MSG).