applet.video.ws2812_output: implement pushback
by Hector Martin 6 years 6 months
dfa63839
support.endpoint: introduce queue_size argument
by Hector Martin 6 years 6 months
support.endpoint: introduce queue_size argument

This limits the receive queue size and pushes back on the underlying
transport when the receive queue is full.
a321cb30
access.direct.demultiplexer: introduce software si...
by Hector Martin 6 years 6 months
access.direct.demultiplexer: introduce software side queue length limits

This implements a configurable thireshold for FIFO data queueing on the
Python side, with pushback. Previously, any data was buffered eagerly,
e.g. an applet sending data on the hardware side and never receiving
it on the software side (or vice versa) would cause the data to pile up
in Python buffers at full speed, with no memory usage limit.

With this patch, the user may specify queue size limits. These limits
are not strict, but rather just thresholds for pushback. If the user
configures a 1MB FIFO limit and writes 100MB, the write will complete
immediately, but a subsequent write will block until 99MB of data has
been successufully queued with the USB subsystem (URB buffers do not
count towards the limit). Similarly, configuring a 1MB read limit
will allow a URB completion that crosses that threshold to complete,
but no further URBs will be re-queued until the application reads data
from the FIFO, eventually causing the on-device FIFO to fill up and
stop accepting writes from the gateware.
b855a71c
applet.video.ws2812_output: reduce reset time to 3...
by Hector Martin 6 years 6 months
applet.video.ws2812_output: reduce reset time to 300µs as documented
8efdb8af
applet.video.ws2812_output: use non-blocking flush
by Hector Martin 6 years 6 months
applet.video.ws2812_output: use non-blocking flush

We need to make sure that all video data will make it to the Glasgow
in a timely manner, to avoid "tearing" the frame (the LEDs cannot
handle gaps longer than a few microseconds in the data stream without
triggering a premature latch/reset), but we don't necessarily want to
wait for the data to actually be sent.
60052f46
access.direct.demultiplexer: introduce non-blockin...
by Hector Martin 6 years 6 months
access.direct.demultiplexer: introduce non-blocking flushes

flush([wait=True]) ensures that all written data has been sent to
the device. flush(wait=False) on the other hand ensures that all
written data has been queued as USB URBs, but does not wait for them
to complete.

Use flush(wait=False) to ensure that every last byte of queued data
will make it to the device in a timely manner, without stalling
the entire USB transfer pipeline.
80099fb6
applet.program.ice40_sram: simplify. NFC.
by whitequark 6 years 6 months
applet.program.ice40_sram: simplify. NFC.

Reset pin is required anyway.
4b74048d
applet.program.nrf24l: unmark as preview.
by whitequark 6 years 6 months
applet.program.nrf24l: unmark as preview.

Seems to work OK.
001c19c8
applet.interface.jtag_pinout: support more than 8 ...
by whitequark 6 years 6 months
applet.interface.jtag_pinout: support more than 8 pins.
d19696e3
applet.interface.jtag_probe: fix scan_xr_length on...
by whitequark 6 years 6 months
applet.interface.jtag_probe: fix scan_xr_length on overlong XR.
77778397
Report a bug