Dave M.
Dave M.

Reputation: 1537

How to send USB control transaction on nonzero endpoint (libusb)?

I'm writing code to learn about the USB peripheral on a Freescale Kinetis microcontroller. I've managed to get through enumeration on a Linux host, and I can send & receive packets using vendor-custom codes on EP0, interacting with a libusb test program.

It looks like I can configure additional control endpoints (non-zero endpoint numbers) on the microcontroller, but I don't see a way to make libusb send / receive control transfers to those endpoints. (libusb_control_transfer doesn't require an endpoint number, though libusb_bulk_transfer and libusb_interrupt_transfer do.)

Are non-zero control endpoints so uncommon or unnecessary that it's not worth bothering with them? Is there some way to get libusb to execute control transactions to non-zero endpoints?

Upvotes: 3

Views: 1453

Answers (1)

Turbo J
Turbo J

Reputation: 7701

Is there some way to get libusb to execute control transactions to non-zero endpoints?

You can try to modify the endpoint field in the libusb_transfer structure of the asynchronous I/O API.

But it would surprise me if your microcontroller could actually support non-zero control endpoint(s) - not that many do.

In practise you would rather use either interrupt or bulk endpoints. Both have less overhead - allowing higher throughput with bulk transfers (see for example USB 2.0 SPEC Table 5-2 vs. Table 5-9).

Upvotes: 2

Related Questions