You've run out of endpoints; the largest USB AVR (the AT90USB1287)
only has 7 of them, so you've gone way over.
No way around that I'm
afraid if you want to keep multiple discrete interfaces, but you can
combine all the HID classes into a single interface and differentiate
between them with the HID report IDs. That will condense your code to
only 5 endpoints (+ control) but will reduce the number of reports per
interface you can generate, so it's a tradeoff.
> I just read you blog on LUFA 2.0. Sounds really good. However, it seems that LUFA always changes just when I have spent time trying to put things together ;)You weren't on the DorkbotPDX IRC chatroom, were you? I just got a
transcript from there where some of the members were discussing LUFA
and its ever-changing API, and they weren't kind (to put it mildly).
I've never had a half-joking death threat made against me before now,
so that's a first.
> However, they do have a point; as although I document the changes
> between each version in the migration page, the fact is that people
> aren't going to accept LUFA until the API is stable, so that it "just
> works". That's what I'm leaning towards now; the underlying APIs are
> essentially rock-solid now after the latest round of fixups, and the
> new class layers mean even more stability. Once this next release is
> made, my goal is to retain compatibility as much as possible, rather
> than keep shuffling things around for the maximum performance.
There is a standard way of handling such things:
1. New and improved is available if one asks for it.
Old and stable is the default.
2. New and improved is the default.
Old and stable is available if one asks for it.
3. Old is deprecated.
4. Old is gone.
Of course, if new and improved and old and stable can be used together,
one can skip as many of the steps as one wants.
--
Michael henn...@web.cs.ndsu.NoDak.edu
"Pessimist: The glass is half empty.
Optimist: The glass is half full.
Engineer: The glass is twice as big as it needs to be."
Yes, each class has mandated endpoints. In the case of the HIDinterfaces, it is mandated that each HID device carries an interrupt
type IN endpoint for device->host reports, but the OUT endpoint can be
omitted. If the OUT endpoint does not exist in a device which accepts
reports from the host, the Req_SetReport HID class control request
will be used instead for the transfer.
Actually, I was thinking of experimenting with giving the notification
endpoint an address outside the AVR's range, so that the host will not
connect it properly. The AVR's USB controller should just NAK any
polls from the host when it queries the disabled endpoint, but I need
to actually test this.
Right now I am working on combining the HID descriptors to get keyboard and mouse into one descriptor. When that works I will add joystick and generic HID. The last step is then to add all my application specific code.I have few questions, that I hope someone here might help me with.1. What report must be send, if the host issues a GetReport request and all HID reports are combined in one descriptor. Do I just send all reports one after each other?
2. What is the correct procedure to send more report thought the same endpoint? Is the code below correct?3. Are there difference between sending reports though the control endpoint (GetReport requests) and the report endpoint?