From dea989ffacea97316ee11dfcb562338ffad3606c Mon Sep 17 00:00:00 2001 From: Henrik Stickann <4376396-Mithradir@users.noreply.gitlab.com> Date: Mon, 11 Apr 2022 12:45:04 +0200 Subject: [PATCH] Add transferReceive to SPI interface --- include/sta/hal/spi.hpp | 1 + include/sta/spi_device.hpp | 10 +++++++++- include/sta/spi_interface.hpp | 10 +++++++++- src/hal/spi.cpp | 9 +++++++-- src/spi_device.cpp | 5 +++++ 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/include/sta/hal/spi.hpp b/include/sta/hal/spi.hpp index a8b2afe..22d7f53 100644 --- a/include/sta/hal/spi.hpp +++ b/include/sta/hal/spi.hpp @@ -32,6 +32,7 @@ namespace sta void transfer(uint8_t value) override; void transfer(const uint8_t * buffer, size_t size) override; + void transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size) override; void transfer16(uint16_t value) override; void fill(uint8_t value, size_t count) override; diff --git a/include/sta/spi_device.hpp b/include/sta/spi_device.hpp index 8fbbc8b..f1a4833 100644 --- a/include/sta/spi_device.hpp +++ b/include/sta/spi_device.hpp @@ -43,9 +43,17 @@ namespace sta * @brief Send data from buffer. * * @param buffer Source buffer - * @param size Number of bytes in buffer + * @param size Number of bytes to transfer */ void transfer(const uint8_t * buffer, size_t size); + /** + * @brief Send and receive data simultaneously. + * + * @param txBuffer Send buffer + * @param rxBuffer Receive buffer + * @param size Number of bytes to transfer + */ + void transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size); /** * @brief Send two bytes of data. * diff --git a/include/sta/spi_interface.hpp b/include/sta/spi_interface.hpp index 386421f..8cdc4d0 100644 --- a/include/sta/spi_interface.hpp +++ b/include/sta/spi_interface.hpp @@ -31,9 +31,17 @@ namespace sta * @brief Send data from buffer. * * @param buffer Source buffer - * @param size Number of bytes in buffer + * @param size Number of bytes to transfer */ virtual void transfer(const uint8_t * buffer, size_t size) = 0; + /** + * @brief Send and receive data simultaneously. + * + * @param txBuffer Send buffer + * @param rxBuffer Receive buffer + * @param size Number of bytes to transfer + */ + virtual void transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size) = 0; /** * @brief Send two bytes of data. diff --git a/src/hal/spi.cpp b/src/hal/spi.cpp index 25c3eae..0fcf150 100644 --- a/src/hal/spi.cpp +++ b/src/hal/spi.cpp @@ -15,9 +15,14 @@ namespace sta HAL_SPI_Transmit(handle_, &data, 1, HAL_MAX_DELAY); } - void HalSpiInterface::transfer(const uint8_t * data, size_t size) + void HalSpiInterface::transfer(const uint8_t * buffer, size_t size) { - HAL_SPI_Transmit(handle_, const_cast(data), size, HAL_MAX_DELAY); + HAL_SPI_Transmit(handle_, const_cast(buffer), size, HAL_MAX_DELAY); + } + + void HalSpiInterface::transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size) + { + HAL_SPI_TransmitReceive(handle_, const_cast(txBuffer), rxBuffer, size, HAL_MAX_DELAY); } diff --git a/src/spi_device.cpp b/src/spi_device.cpp index 50a961a..12d2571 100644 --- a/src/spi_device.cpp +++ b/src/spi_device.cpp @@ -34,6 +34,11 @@ namespace sta intf_->transfer(data, size); } + void SpiDevice::transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size) + { + intf_->transfer(txBuffer, rxBuffer, size); + } + void SpiDevice::transfer16(uint16_t data) { intf_->transfer16(data);