#ifndef __JABYENGINE_CD_INTERNAL_HPP__ #define __JABYENGINE_CD_INTERNAL_HPP__ #include namespace JabyEngine { namespace CD { namespace internal { extern VolatilePOD last_interrupt; struct Command { static void wait_until(CD_IO::Interrupt::Type irq) { while(last_interrupt.read() != irq); } template static void send(CD_IO::CommandFifo_t& cmd_fifo, CD_IO::ParameterFifo_t& parameter_fifo, CD_IO::Command::Info cmd, ARGS...args) { while(CD_IO::IndexStatus.read().is_bit_set(CD_IO::IndexStatus::IsTransmissionBusy)); (parameter_fifo.write(static_cast(args)), ...); cmd_fifo.write(cmd.id); } template static void send_wait(CD_IO::CommandFifo_t& cmd_fifo, CD_IO::ParameterFifo_t& parameter_fifo, CD_IO::Command::Info cmd, ARGS...args) { send(cmd_fifo, parameter_fifo, cmd, args...); wait_until(cmd.complete_irq); } }; } } } #endif //!__JABYENGINE_CD_INTERNAL_HPP__