Lemme explain my architecture a bit. I've got a host/scheduler task and many endpoint tasks. The endpoint tasks are responsible for emptying/filling DMA buffers for the host task. The host/scheduler task is responsible for starting the SPI transfers to the MAX3421E USB chip with the prepared DMA buffers. Each endpoint task gets a node in the `PinList` where it can put/take DMA buffers and store a waker when it has to wait. The host task iterates through the `PinList` and starts a SPI/DMA transfer for each buffer it sees (this SPI transfer is async) and it wakes the waker stored in the node when it's done. If the host task doesn't see any nodes with actionable work, it will simply sleep until the next USB frame starts.