2017-01-03 6 views
0

Я использую libusbdotnet в приложении C# для связи с устройством USB. Как я могу предоставить конкретные команды поставщика, например SET DATE TIME, используя libusbdotnet?Как отправить специальные команды поставщика, такие как «SET DATE TIME» на устройство USB

+0

Втч в этом вопрос? Вы хотите изменить конфигурацию системы, вставив USB-устройство? – McNets

+0

Нет. Я должен передать команду USB-устройству из своего приложения. – user1985

ответ

0

В смысле USB протокола поставщика конкретных запросов общие запросы (см http://www.cypress.com/file/202971/download - Создайте свой собственный поставщик USB команд с помощью FX2LP), и вы Propably бы использовать передачууправления для этого, если он достаточно отправить запрос на конечную точку управления EP0 устройства. Вы должны иметь глубокое знание внутренней структуры вашего устройства, чтобы выполнить эту работу, вам нужно знать, к какой конечной точке в структуре устройства должен быть выдан запрос, и какие значения вы должны поместить в полях пакета запроса : адрес, bmRequestType, BREQUEST (конечная точка номер) ... Если продавец конкретный запрос не может быть отправлен в контрольной конечной точке вы не можете использовать передачу управления (http://www.beyondlogic.org/usbnutshell/usb4.shtml#Control).

Общая информация по запросу 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

  • в Async I/O 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 и не имеет секции данных, означающей, что он создает только установочный пакет TS в передаче управления (передача управления состоит из стадии установки, стадия данных, стадия состояния) (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

+0

Спасибо за ответ ..Также я хотел бы понять, есть ли какие-либо функции в libusbdotnet, например ниже ********************************** *********************************************** usb_bulk_write (usb_dev_handle) * dev, int ep, char * bytes, int size, int timeout) – user1985

+0

в этой ссылке http://libusbdotnet.sourceforge.net/V2/html/7d9d422e-9884-43cd-87c8-304e249d0e27.htm - пример. вы должны адаптировать его, поскольку он работает только для устройства, имеющего функции кольцевой проверки в конфигурации 1, интерфейсе 0, конечных точках 0x01 и 0x81. –

+0

массовое чтение (поток данных с устройства на хост) от массовой конечной точки IN, объемная запись (хост-устройство) от массовой конечной точки OUT –