chore: move firmware to firmware/ folder
fix: usb should not rewrite DIEPCTL bits
feat: use task_result to indicate blocking
There should be no spin loops inside of the
interrupts, so this change removes them,
and instead uses a result system that has
WOULD_BLOCK result. When this result is returned,
it is expected there was no side-effect and the
function can safely be reran later.
feat: implement enumeration fully
docs: add documentation comments to most functions
feat: implement usb devicd cdc descriptors, init, setup
feat: move all sending instructions to generic send functions
feat: implement most of enumeration
feat: implement simple control usb read, writes
refactor: use usb descriptor common struct header
feat: usb control types definitions