fix: correctly send functional descriptor The functional descriptor was not sent correctly, specifically, it was pointed to its address, instead of the pointer itself. That meant bunch of irrelevant stuff was sent instead.
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