.. _program_listing_file_libspookyaction_include_pn532_esp32_spi.hpp: Program Listing for File spi.hpp ================================ |exhale_lsh| :ref:`Return to documentation for file ` (``libspookyaction/include/pn532/esp32/spi.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // // Created by spak on 3/25/21. // #ifndef PN532_ESP32_SPI_HPP #define PN532_ESP32_SPI_HPP #include #include #include #include #include #include namespace pn532::esp32 { using capable_buffer = std::vector>; enum struct spi_command : std::uint8_t { data_write = 0b01, status_read = 0b10, data_read = 0b11, none }; class spi_channel final : public channel { capable_buffer _dma_buffer; std::optional _host; spi_device_handle_t _device; irq_assert _irq_assert; enum struct recv_op_status { init, did_poll, data_read }; recv_op_status _recv_op_status; result<> perform_transaction(capable_buffer &buffer, spi_command cmd, comm_dir mode, ms timeout); protected: result<> raw_send(mlab::range buffer, ms timeout) override; result<> raw_receive(mlab::range buffer, ms timeout) override; result<> raw_poll_status(ms timeout); bool on_receive_prepare(ms timeout) override; void on_receive_complete(result<> const &) override; [[nodiscard]] comm_rx_mode raw_receive_mode() const override; public: bool wake() override; spi_channel(spi_host_device_t host, spi_bus_config_t const &bus_config, spi_device_interface_config_t device_cfg, spi_dma_chan_t dma_chan); spi_channel(spi_host_device_t host, spi_bus_config_t const &bus_config, spi_device_interface_config_t device_cfg, int dma_chan, gpio_num_t response_irq_line, bool manage_isr_service); ~spi_channel() override; }; }// namespace pn532::esp32 #endif//PN532_ESP32_SPI_HPP