| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
| |
Use `ptr.offset()` in `in_transfer`, rather than hand calculations.
|
|
|
|
|
|
| |
* Use `USB_XFER_TIMEOUT` for single transaction timeouts.
* Ensure pipe is frozen on return.
* Reset timeout on data toggle error before retry.
|
|
|
|
| |
I will not pretend that I know this to be correct, but it seems to work.
|
|
|
|
|
|
|
|
|
|
| |
* Remove `PipeErr::Other`.
* Add more variants to `PipeErr`.
* Integrate `is_transfer_complete` into `dispatch_result` and
simplify.
* Cache volatile `intflag` on entry to `dispatch_result` to ensure
consistent handling.
* Clear fail/perr `intflag` bits in `dispatch_result`.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Most of the values in the descriptor memory can be modified by the
hardware, so we need to tell Rust that.
Also, refactor the common register setup code into `register.rs`.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Simplify the code a bunch to reduce it to states we actually care
about. This will now probe my Logitech G105, NIZ Plum 85EC, and
Keyboard.io Model 01.
* Don't listen for wakeup interrupts. Only listen for device
connection and disconnection, which wakeups sometimes mean.
* Remove the SETTLE_DELAY stuff on device connection, as this
appears to be handled in hardware, and prevents over-delay which
was causing the Model 01 to reset, since it wasn't getting a SOF
in time.
* Set initial max packet size for address 0 endpoint 0 based on
whether the connection is Full Speed or Low Speed.
* Remove all intflag checks from USB handler that we don't
explicitly set up.
* Always listen dor dconn/ddisc in handler. Since we're using a ring
buffer for event storage, we shouldn't miss these and always
handle them in order.
* Don't freeze pipes on errors. Let the hardware do it.
* Don't retransmit packets on errors, just keep polling hardware.
* Move trfail check to the end, since it's either dependent on
previous, more specific checks, or it's just a NAK (but, for some
reason, not ERRORFLOW).
* Add `modify` method to control pipe register.
|
| |
|
|
|
|
|
| |
Only use the data toggle from hardware if we get a data toggle
error. Otherwise, use computed toggle values based on endpoint.
|
|
|