Используя libusb-win32 для связи с интерфейсом USB to DMX512, не могу найти конечные точки

Я пытаюсь отправить необработанные данные на мой свет с компьютера через интерфейс USB-DMX512 с помощью libusb-win32. Пока что все работает хорошо, за исключением того, что по какой-то причине программа не распознает конечные точки на адаптере.
Вот фрагмент моего кода:

// initialize
usb_init();
usb_find_busses();
usb_find_devices();
usb_bus busses = *usb_get_busses();

// open the device
struct usb_device *dev = busses.devices;
usb_dev_handle *h = usb_open(dev);
usb_claim_interface(h, 0);

...

// close the device
usb_release_interface(h, 0);
usb_close(h);

Когда я просматриваю структуры в отладчике, это данные внутри них:

dev {

next          //<NULL>
prev          //<NULL>
filename      //0x008a9938
bus           //0x008a9710
descriptor    //{bLength = 18 ... }
config {

bLength              //9
bDescriptorType      //2
wTotalLength         //18
bNumInterfaces       //1
bConfigurationValue  //1
iConfiguration       //0
bmAttributes         //128
MaxPower             //250
interface {

altsetting {

bLength             //9
bDescriptorType     //4
bInterfaceNumber    //0
bAlternateSetting   //0
bNumEndpoints       //0
bInterfaceClass     //0
bInterfaceSubClass  //0
bInterfaceProtocol  //0
iInterface          //0
endpoint            //<NULL>
extra               //<NULL>
extralen            //0
}
num_altsetting   //1
}
extra                //<NULL>
extralen             //0
}
dev           //<NULL>
devnum        //1
num_children  //0
children      //<NULL>
}

Как можно видеть, конечные точки не распознаются, и, кроме того, есть только одно устройство, одна конфигурация, один интерфейс и одна альтернативная настройка, поэтому я зашел в тупик.

Поэтому я пытаюсь выяснить, какой адрес конечной точки использовать для записи на USB-накопитель, или, возможно, имеющийся у меня адаптер просто не совместим с этой библиотекой.

заранее спасибо

0

Решение

Это просто означает, что вы ограничены связью через передачу управления в конечной точке 0x00. Каждое устройство должно иметь конечную точку 0 и принимать передачу управления через эту конечную точку (поскольку именно с этой конечной точкой контроллер хоста будет взаимодействовать для перечисления или настройки устройства). Передачи управления могут читать и писать на одной конечной точке.

У вас нет описания того, как управлять этим устройством или каким-либо перехваченным USB-портом? Выяснение всех данных для использования управления передачей путем случайного тестирования займет долго время. 😉

1

Другие решения

В качестве продолжения мне удалось включить свет. Драйман был прав в том, что мне пришлось использовать передачу управления через конечную точку 0x00. На самом деле мне даже не нужно было запрашивать интерфейс, как я делал в своем примере кода для вопроса. На самом деле все сводилось к использованию следующей строки кода:

usb_control_msg(h, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, cmd_SetSingleChannel, value, channel, buffer, sizeof(buffer), 5000);

куда h это ручка моего устройства, cmd_SetSingleChannel является целым числом со значением 1, value является целым числом, представляющим значение канала, который вы устанавливаете, channel целое число, представляющее, какой канал вы устанавливаете, и buffer пустой массив символов размера 8

0

По вопросам рекламы [email protected]