From ffc8673ad102b09fbbaa5402149832885b4f788d Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Fri, 5 Jan 2018 13:57:54 +0100 Subject: [PATCH] inline function moved to .c file to avoid multiple definition --- extras/lsm303d/lsm303d_platform.c | 82 +++++++++++++++++++++++++++++++ extras/lsm303d/lsm303d_platform.h | 34 ++----------- 2 files changed, 86 insertions(+), 30 deletions(-) create mode 100644 extras/lsm303d/lsm303d_platform.c diff --git a/extras/lsm303d/lsm303d_platform.c b/extras/lsm303d/lsm303d_platform.c new file mode 100644 index 0000000..118d295 --- /dev/null +++ b/extras/lsm303d/lsm303d_platform.c @@ -0,0 +1,82 @@ +/** + * Driver for LSM303D 3-axes digital accelerometer and magnetometer connected + * either to I2C or SPI. + * + * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) + * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 + * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux + * based systems using a wrapper library for ESP8266 functions. + * + * --------------------------------------------------------------------------- + * + * The BSD License (3-clause license) + * + * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Platform file: platform specific definitions, includes and functions + */ + +#include "lsm303d_platform.h" + +// platform specific SPI functions + +static const spi_settings_t bus_settings = { + .mode = SPI_MODE0, + .freq_divider = SPI_FREQ_DIV_1M, + .msb = true, + .minimal_pins = false, + .endianness = SPI_LITTLE_ENDIAN +}; + +bool spi_device_init (uint8_t bus, uint8_t cs) +{ + gpio_enable(cs, GPIO_OUTPUT); + gpio_write (cs, true); + return true; +} + +size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) +{ + spi_settings_t old_settings; + + spi_get_settings(bus, &old_settings); + spi_set_settings(bus, &bus_settings); + gpio_write(cs, false); + + size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); + + gpio_write(cs, true); + spi_set_settings(bus, &old_settings); + + return transfered; +} + diff --git a/extras/lsm303d/lsm303d_platform.h b/extras/lsm303d/lsm303d_platform.h index 27ff38f..ba3eb71 100644 --- a/extras/lsm303d/lsm303d_platform.h +++ b/extras/lsm303d/lsm303d_platform.h @@ -77,36 +77,10 @@ #define spi_bus_init(bus,sck,miso,mosi) // not needed on ESP8266 -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_1M, - .msb = true, - .minimal_pins = false, - .endianness = SPI_LITTLE_ENDIAN -}; - -inline static bool spi_device_init (uint8_t bus, uint8_t cs) -{ - gpio_enable(cs, GPIO_OUTPUT); - gpio_write (cs, true); - return true; -} - -inline static size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) -{ - spi_settings_t old_settings; - - spi_get_settings(bus, &old_settings); - spi_set_settings(bus, &bus_settings); - gpio_write(cs, false); - - size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); - - gpio_write(cs, true); - spi_set_settings(bus, &old_settings); - - return transfered; -} +extern bool spi_device_init (uint8_t bus, uint8_t cs); +extern size_t spi_transfer_pf (uint8_t bus, uint8_t cs, + const uint8_t *mosi, uint8_t *miso, + uint16_t len); #endif // ESP_OPEN_RTOS