From 0a9ff20658e2884b9c85594e255393ec94f9cb10 Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Tue, 11 Sep 2018 15:33:02 -0500 Subject: [PATCH] Cleanup SPI constructor and add destructor _acquire() is not required in constructor, since we are not performing any operation on SPI bus yet. Just initialize the pins/hw Destructor is required to clear _owner else SPI format/frequency will not be set if object is recreated. We do not free SPI bus, but init again in hardware may or may not change frequency/format. ``` { SPI spi1(...); spi1.transfer(...); } { SPI spi1(...); spi1.transfer(...); } ``` --- drivers/SPI.cpp | 9 +++++++-- drivers/SPI.h | 6 +----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/SPI.cpp b/drivers/SPI.cpp index fc52be754d..d679a9c0a8 100644 --- a/drivers/SPI.cpp +++ b/drivers/SPI.cpp @@ -41,9 +41,14 @@ SPI::SPI(PinName mosi, PinName miso, PinName sclk, PinName ssel) : _write_fill(SPI_FILL_CHAR) { // No lock needed in the constructor - spi_init(&_spi, mosi, miso, sclk, ssel); - _acquire(); +} + +SPI::~SPI() +{ + if (_owner == this) { + _owner = NULL; + } } void SPI::format(int bits, int mode) diff --git a/drivers/SPI.h b/drivers/SPI.h index 8d24dcc966..7c8e7d6103 100644 --- a/drivers/SPI.h +++ b/drivers/SPI.h @@ -87,6 +87,7 @@ public: * @param ssel SPI chip select pin */ SPI(PinName mosi, PinName miso, PinName sclk, PinName ssel = NC); + virtual ~SPI(); /** Configure the data transmission format * @@ -272,11 +273,6 @@ private: #endif -public: - virtual ~SPI() - { - } - protected: spi_t _spi;