From df0190026b35b1886253b5f68fefab4995c014a9 Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Fri, 5 Jan 2018 18:31:24 +0100 Subject: [PATCH] minor change --- extras/bme680/bme680.c | 23 +++++++++++++---------- extras/bme680/bme680_platform.h | 6 +++--- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/extras/bme680/bme680.c b/extras/bme680/bme680.c index 60b10e5..81e4856 100644 --- a/extras/bme680/bme680.c +++ b/extras/bme680/bme680.c @@ -306,7 +306,7 @@ bme680_sensor_t* bme680_init_sensor(uint8_t bus, uint8_t addr, uint8_t cs) return NULL; } if (!addr) - spi_semaphore_init(); + spi_semaphore_init(dev); // reset the sensor if (!bme680_reset(dev)) @@ -1278,14 +1278,14 @@ static bool bme680_spi_read(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, ui return false; } - spi_semaphore_take (); + spi_semaphore_take (dev); // set mem page first if (!bme680_spi_set_mem_page (dev, reg)) { + spi_semaphore_give (dev); error_dev ("Error on read from SPI slave on bus 1. Could not set mem page.", __FUNCTION__, dev); - spi_semaphore_give (); return false; } @@ -1302,17 +1302,17 @@ static bool bme680_spi_read(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, ui if (!spi_transfer_pf (dev->bus, dev->cs, mosi, miso, len+1)) { + spi_semaphore_give (dev); error_dev ("Could not read data from SPI", __FUNCTION__, dev); dev->error_code |= BME680_SPI_READ_FAILED; - spi_semaphore_give (); return false; } - spi_semaphore_give (); - // shift data one by left, first byte received while sending register address is invalid for (int i=0; i < len; i++) data[i] = miso[i+1]; + spi_semaphore_give (dev); + #ifdef BME680_DEBUG_LEVEL_2 printf("BME680 %s: read the following bytes: ", __FUNCTION__); printf("%0x ", reg); @@ -1340,14 +1340,15 @@ static bool bme680_spi_write(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, u return false; } - spi_semaphore_take (); + if (reg != BME680_REG_STATUS) + spi_semaphore_take (dev); // set mem page first if not mem page register is used if (reg != BME680_REG_STATUS && !bme680_spi_set_mem_page (dev, reg)) { error_dev ("Error on write from SPI slave on bus 1. Could not set mem page.", __FUNCTION__, dev); - spi_semaphore_give (); + spi_semaphore_give (dev); return false; } @@ -1369,12 +1370,14 @@ static bool bme680_spi_write(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, u if (!spi_transfer_pf (dev->bus, dev->cs, mosi, NULL, len+1)) { + if (reg != BME680_REG_STATUS) + spi_semaphore_give (dev); error_dev ("Could not write data to SPI.", __FUNCTION__, dev); dev->error_code |= BME680_SPI_WRITE_FAILED; - spi_semaphore_give (); return false; } - spi_semaphore_give (); + if (reg != BME680_REG_STATUS) + spi_semaphore_give (dev); return true; } diff --git a/extras/bme680/bme680_platform.h b/extras/bme680/bme680_platform.h index 465b5ea..4765b02 100644 --- a/extras/bme680/bme680_platform.h +++ b/extras/bme680/bme680_platform.h @@ -68,9 +68,9 @@ // platform specific definitions -#define spi_semaphore_init() -#define spi_semaphore_take() -#define spi_semaphore_give() +#define spi_semaphore_init(d) +#define spi_semaphore_take(d) +#define spi_semaphore_give(d) // platform specific SPI functions