From: Tim R. <ti...@pr...> - 2013-07-26 21:58:31
|
Günther Sohler wrote: > Thanks again for your answer > (where are you from? , you seem to answer best in the evening) I'm in Oregon, on the Pacific Coast of the US. It is mid-afternoon right now. >> No, it doesn't. This function will only be called when the device has >> received a "GetReport" request. "usb_send" blocks until the transfer is >> complete. > > I dont think so. Perhaps not, but SOMEONE has to do so. If the code is not blocking, then the USB engine in the chip must be doing so. Note that the code you posted loops until usb_ep_is_busy() is clear. I don't know the registers on your chip, and the spec I could find was extremely sketchy, so I don't know how the lowest level interface works. > Lets me explain some more about the nature about my intended communication: > > There is not really "buffers" where received GET_REPORTS add to. > > There is just blocks of 64 byte packets, there does not exists parts of 64 bytes, just packets of 64 bytes each. > > The order of receiving this packets is the order of processing. There is a FIFO of 3 items. > There is NO chance in the CONCEPT that is "Reports" are shifted just by few bytes and still I see this in the received reports. Well, there ARE buffers. The "reports" array is one set of buffers. usb_send then copies that into the endpoint descriptors in the hardware. If you modify the endpoint descriptors while the USB engine is working with them, bad things could happen. > Ok then please explain me, which "attribute" of them distinguishes them, that one sort immediately are visible the the other sort just get displayed upon "read request". There aren't "two sorts". It is a simple fact that a USB device cannot transmit anything unless it has been told to do so by the USB host. That's just the way the protocol works. If there are no read requests from a driver, the host controller will never send an IN token, and the device must remain silent. There are no buts, no excepts, no what-ifs. That's how the bus works. > HID specifies that the OUT reports can happen on EP 0 as its syncronous from the host point of view, whereas every IN Report needs a distinct Interrupt endpoint. Yes, reports can be sent on EP 0. You can have multiple report types on a single interrupt. > The the mapping in my place is > > OUT REPORT: Control EP 0 > IN Report: Interrupt EP 1 (0x81) > > Yes My Firmware receives "requests" on from the Host(OUT REPORT) and created "answers" on that which it sends back to the host(IN REPORTS) You create the answer, and you can queue it up, but it cannot be sent until you get an IN request from the host. -- Tim Roberts, ti...@pr... Providenza & Boekelheide, Inc. |