Skip to content

Commit 1ec5b0d

Browse files
committed
feat(SPI): remove skip receive from SPISettings
This parameter should not be part of SPISettings. Now, SPISettings fully match ArduinoCore-API definition. Signed-off-by: Frederic Pillon <frederic.pillon@st.com>
1 parent d61ad83 commit 1ec5b0d

File tree

3 files changed

+14
-34
lines changed

3 files changed

+14
-34
lines changed

libraries/SPI/README.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ User have 2 possibilities about the management of the CS pin:
77
* the CS pin is managed directly by the user code before to transfer the data (like the Arduino SPI library)
88
* the user uses a hardware CS pin linked to the SPI peripheral
99

10-
### New SPISetting parameter
11-
12-
* `noReceive`: value can be `SPI_TRANSMITRECEIVE` or `SPI_TRANSMITONLY`. It allows to skip receive data after transmitting. Default `SPI_TRANSMITRECEIVE`.
13-
1410
### New API functions
1511

1612
* `SPIClass::SPIClass(uint8_t mosi, uint8_t miso, uint8_t sclk, uint8_t ssel)`: alternative class constructor
@@ -21,7 +17,6 @@ _Params_ (optional) SPI `ssel` pin. This pin must be an hardware CS pin. If you
2117

2218
* `SPI_HandleTypeDef *getHandle(void)`: Could be used to mix Arduino API and STM32Cube HAL API (ex: DMA). **Use at your own risk.**
2319

24-
2520
##### Example
2621

2722
This is an example of the use of the hardware CS pin linked to the SPI peripheral:

libraries/SPI/src/SPI.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ void SPIClass::setClockDivider(uint8_t _divider)
162162
*/
163163
uint8_t SPIClass::transfer(uint8_t data)
164164
{
165-
spi_transfer(&_spi, &data, sizeof(uint8_t), SPI_TRANSFER_TIMEOUT, _spiSettings.getSkipRecv());
165+
spi_transfer(&_spi, &data, sizeof(uint8_t), SPI_TRANSFER_TIMEOUT, false);
166166
return data;
167167
}
168168

@@ -181,7 +181,7 @@ uint16_t SPIClass::transfer16(uint16_t data)
181181
data = tmp;
182182
}
183183
spi_transfer(&_spi, (uint8_t *)&data, sizeof(uint16_t),
184-
SPI_TRANSFER_TIMEOUT, _spiSettings.getSkipRecv());
184+
SPI_TRANSFER_TIMEOUT, false);
185185

186186
if (_spiSettings.getBitOrder()) {
187187
tmp = ((data & 0xff00) >> 8) | ((data & 0xff) << 8);
@@ -202,7 +202,7 @@ void SPIClass::transfer(void *buf, size_t count)
202202
{
203203
if ((count != 0) && (buf != NULL)) {
204204
spi_transfer(&_spi, ((uint8_t *)buf), count,
205-
SPI_TRANSFER_TIMEOUT, _spiSettings.getSkipRecv());
205+
SPI_TRANSFER_TIMEOUT, false);
206206
}
207207
}
208208

libraries/SPI/src/SPI.h

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -38,46 +38,42 @@ extern "C" {
3838
#define SPI_CLOCK_DIV64 64
3939
#define SPI_CLOCK_DIV128 128
4040

41-
#define SPI_TRANSMITRECEIVE 0x0
42-
#define SPI_TRANSMITONLY 0x1
43-
4441
// Defines a default timeout delay in milliseconds for the SPI transfer
4542
#ifndef SPI_TRANSFER_TIMEOUT
4643
#define SPI_TRANSFER_TIMEOUT 1000
4744
#endif
4845

4946
class SPISettings {
5047
public:
51-
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, bool skipRecv = SPI_TRANSMITRECEIVE)
48+
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode)
5249
{
5350
if (__builtin_constant_p(clock)) {
54-
init_AlwaysInline(clock, bitOrder, dataMode, skipRecv);
51+
init_AlwaysInline(clock, bitOrder, dataMode);
5552
} else {
56-
init_MightInline(clock, bitOrder, dataMode, skipRecv);
53+
init_MightInline(clock, bitOrder, dataMode);
5754
}
5855
}
5956

60-
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode, bool skipRecv = SPI_TRANSMITRECEIVE)
57+
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode)
6158
{
6259
if (__builtin_constant_p(clock)) {
63-
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode, skipRecv);
60+
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode);
6461
} else {
65-
init_MightInline(clock, bitOrder, (SPIMode)dataMode, skipRecv);
62+
init_MightInline(clock, bitOrder, (SPIMode)dataMode);
6663
}
6764
}
6865

6966
// Default speed set to 4MHz, SPI mode set to MODE 0 and Bit order set to MSB first.
7067
SPISettings()
7168
{
72-
init_AlwaysInline(SPI_SPEED_CLOCK_DEFAULT, MSBFIRST, SPI_MODE0, SPI_TRANSMITRECEIVE);
69+
init_AlwaysInline(SPI_SPEED_CLOCK_DEFAULT, MSBFIRST, SPI_MODE0);
7370
}
7471

7572
bool operator==(const SPISettings &rhs) const
7673
{
7774
if ((this->clockFreq == rhs.clockFreq) &&
7875
(this->bitOrder == rhs.bitOrder) &&
79-
(this->dataMode == rhs.dataMode) &&
80-
(this->skipRecv == rhs.skipRecv)) {
76+
(this->dataMode == rhs.dataMode)) {
8177
return true;
8278
}
8379
return false;
@@ -100,11 +96,6 @@ class SPISettings {
10096
{
10197
return (bitOrder);
10298
}
103-
bool getSkipRecv() const
104-
{
105-
return skipRecv;
106-
}
107-
10899
void setClockFreq(uint32_t clkFreq)
109100
{
110101
clockFreq = clkFreq;
@@ -117,30 +108,24 @@ class SPISettings {
117108
{
118109
bitOrder = order;
119110
}
120-
void setSkipRecv(bool skip)
121-
{
122-
skipRecv = skip;
123-
}
124111

125112
private:
126-
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, bool skipRecv)
113+
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode)
127114
{
128-
init_AlwaysInline(clock, bitOrder, dataMode, skipRecv);
115+
init_AlwaysInline(clock, bitOrder, dataMode);
129116
}
130117

131118
// Core developer MUST use an helper function in beginTransaction() to use this data
132-
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, bool skipRecv) __attribute__((__always_inline__))
119+
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) __attribute__((__always_inline__))
133120
{
134121
this->clockFreq = clock;
135122
this->dataMode = dataMode;
136123
this->bitOrder = bitOrder;
137-
this->skipRecv = skipRecv;
138124
}
139125

140126
uint32_t clockFreq;
141127
SPIMode dataMode;
142128
BitOrder bitOrder;
143-
bool skipRecv;
144129

145130
friend class HardwareSPI;
146131
};

0 commit comments

Comments
 (0)