Как отправить определенные команды поставщика, такие как "УСТАНОВИТЬ ВРЕМЯ ДАТЫ" на 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.

Другие вопросы по тегам