You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by je...@apache.org on 2023/02/23 07:09:59 UTC
[mynewt-core] 03/03: hw/bus/spi_hal: Add bus_spi_duplex_write_read
This is an automated email from the ASF dual-hosted git repository.
jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit 31b7e54948e959cd01bc6fd1006e3a122bf1382b
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Fri Feb 17 15:25:53 2023 +0100
hw/bus/spi_hal: Add bus_spi_duplex_write_read
This implements new bus driver duplex_write_read function for
spi_hal bus driver implementation.
---
hw/bus/drivers/spi_hal/src/spi_hal.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/hw/bus/drivers/spi_hal/src/spi_hal.c b/hw/bus/drivers/spi_hal/src/spi_hal.c
index 5832feed4..5a2d347c2 100644
--- a/hw/bus/drivers/spi_hal/src/spi_hal.c
+++ b/hw/bus/drivers/spi_hal/src/spi_hal.c
@@ -252,6 +252,34 @@ bus_spi_write_read(struct bus_dev *bdev, struct bus_node *bnode,
return rc;
}
+static int
+bus_spi_duplex_write_read(struct bus_dev *bdev, struct bus_node *bnode,
+ const uint8_t *wbuf, uint8_t *rbuf, uint16_t length,
+ os_time_t timeout, uint16_t flags)
+{
+ struct bus_spi_hal_dev *dev = (struct bus_spi_hal_dev *)bdev;
+ struct bus_spi_node *node = (struct bus_spi_node *)bnode;
+ int rc;
+
+ BUS_DEBUG_VERIFY_DEV(&dev->spi_dev);
+ BUS_DEBUG_VERIFY_NODE(node);
+
+ hal_gpio_write(node->pin_cs, 0);
+
+ rc = hal_spi_txrx_noblock(dev->spi_dev.cfg.spi_num, (uint8_t *)wbuf, rbuf, length);
+#if MYNEWT_VAL(SPI_HAL_USE_NOBLOCK)
+ if (rc == 0) {
+ os_sem_pend(&dev->sem, OS_TIMEOUT_NEVER);
+ }
+#endif
+
+ if (rc || !(flags & BUS_F_NOSTOP)) {
+ hal_gpio_write(node->pin_cs, 1);
+ }
+
+ return rc;
+}
+
static int bus_spi_disable(struct bus_dev *bdev)
{
struct bus_spi_dev *spi_dev = (struct bus_spi_dev *)bdev;
@@ -275,6 +303,7 @@ static const struct bus_dev_ops bus_spi_ops = {
.write = bus_spi_write,
.disable = bus_spi_disable,
.write_read = bus_spi_write_read,
+ .duplex_write_read = bus_spi_duplex_write_read,
};
int