satman main: gate drtiosat_cxp.rs behind has_cxp_grabber
drtiosat_cxp: spawn separate async task for read and write CXP operation
drtiosat_cxp: reply error if camera is not detected
drtiosat_cxp: process cxp roi viewer setup and data request
drtiosat_aux: forward and handle cxp aux packets
kasli_soc: remove error message when using coaxpress_sfp with satellite
satellite: use sfp slot 0 for coaxpress_sfp
satellite: connect the right virtual led bits when drtio_ch < 4
api: compile cxp.rs with DRTIO using cfg gating
cxp: refactor xml helper fns to accept read byte closure
cxp: support non-local destination CXP syscall
cxp: pass satellite read, write, roi viewer request to core0
cxp: raise error when local has no cxp_grabber and no drtio
cxp: pass CXP error from satellite as CXPError
kernel: add CXP error, read, write, roi viewer kernel messages
comms: send roi viewer setup to satellite
comms: support polling for roi viewer data, read, write request
comms: printout drtio aux and unexpected packet via error macro
comms: pass CXP error to kernel
We have to be careful here to ensure the DMA buffer is 512-bit
aligned. We used to do this by reserving space for padding, and then
adding it afterwards. Now we add it all up-front.
cargo: add async-recursion for rpc_async.rs
satman: add rpc_async.rs for subkernel
subkernel: Manager now take RefCell for config for async
subkernel: use async_send and async recv_w_timeout to prevent blocking
satman main: init config with RefCell
satman main: add awiat to async fn
dma, drtiosat_aux: add await to async fn
main: use block_on on async main loop
main loop: use drtio_async to prevent blocking
main loop: refactor linkup_service into a separate function
grabber: spawn as separate async task instead of in the loop as hw tick
drtiosat_process_error: spawn as async task instead of in the loop