Как отправить определенные команды поставщика, такие как "УСТАНОВИТЬ ВРЕМЯ ДАТЫ" на USB-устройство
Я использую libusbdotnet в приложении C# для связи с USB-устройством. Как мне дать продавцу конкретные команды, такие как SET DATE TIME
используя libusbdotnet?
1 ответ
В том смысле, что конкретные запросы поставщика USB-протокола являются общими запросами (см. http://www.cypress.com/file/202971/download - создайте свои собственные команды USB-поставщика с помощью FX2LP), и вы, вероятно, будете использовать для этого передачу управления если этого достаточно, чтобы отправить запрос в контрольную конечную точку EP0 устройства. Вы должны иметь глубокие знания внутренней структуры вашего устройства, чтобы сделать эту работу, вы должны знать, к какой конечной точке в структуре устройства должен быть отправлен запрос и какие значения вы должны поместить в поля пакета запроса.: address, bmRequestType, bRequest, (номер конечной точки),... Если конкретный запрос поставщика не может быть отправлен конечной точке управления, вы не можете использовать передачу управления ( http://www.beyondlogic.org/usbnutshell/usb4.shtml).
Общая информация о USB-запросе находится в http://www.beyondlogic.org/usbnutshell/usb6.shtml Информация о конкретных запросах поставщиков приведена, например, в http://www.cypress.com/file/202971/download Создайте свой собственный. Команды USB-производителя с использованием FX2LP
Метод libusbdotnet для передачи управления
public virtual bool ControlTransfer(
ref UsbSetupPacket setupPacket,
Object buffer,
int bufferLength,
out int lengthTransferred
)
ты должен построить setupPacket
самостоятельно смотрите http://www.beyondlogic.org/usbnutshell/usb6.shtml
http://libusbdotnet.sourceforge.net/V2/html/65fd96b8-6c8f-f877-22a5-15074d922485.htm
Вы можете использовать libusb для передачи управления следующим образом:
в синхронизации ввода / вывода
int libusb_control_transfer (libusb_device_handle *dev_handle, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout)
это не может быть адресовано конкретной конечной точке, переходит к EP0в асинхронном вводе / выводе
libusb_control_setup (libusb_device_handle *dev_handle, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout)
не может быть адресован конкретным конечным точкам, переходит к EP0 и не имеет раздела данных, что означает, что он формирует только пакеты установки в передаче управления (передача управления состоит из этапа настройки, этапа данных, этапа состояния) ( http://libusb.org/static/api-1.0/structlibusb__control__setup.html)
Если вам нужно отправить запрос к определенной конечной точке (не к конечной точке управления), вы можете использовать массовую передачу или interrupt_transfer
В http://libusb.sourceforge.net/api-1.0/group__syncio.html в http://libusb.org/static/api-1.0/group__misc.html перечислены стандартные запросы USB, доступные в libusb.