UartDevice::UartDevice(const Initializer &initializer) : m_rx_buf{new RxBuffer}, m_rx_isr(initializer.config.rx_isr), m_tx_buf(new TxBuffer(initializer.config.tx_buf_size)), m_is_tx_idle(true), //m_tx_dma_channel(initializer.config.tx_dma_channel), m_dma(nullptr), m_uart(nullptr) { Uart::Config &&uart_config = initializer.GetUartConfig(); uart_config.rx_isr = std::bind(&UartDevice::OnRxFull, this, placeholders::_1); if (!IsUseDma()) { uart_config.tx_isr = std::bind(&UartDevice::OnTxEmpty, this, placeholders::_1); } m_uart = Uart(uart_config); if (IsUseDma()) { m_dma_config.reset(new Dma::Config); m_dma_config->src.addr = nullptr; // temp m_dma_config->src.offset = 1; m_dma_config->src.size = Dma::Config::TransferSize::k1Byte; m_dma_config->src.major_offset = 0; m_dma_config->major_count = 0; m_uart.ConfigTxAsDmaDst(m_dma_config.get()); m_dma_config->complete_isr = std::bind(&UartDevice::OnTxDmaComplete, this, placeholders::_1); } m_uart.SetEnableRxIrq(true); }