Skip to content

Commit b847f41

Browse files
davefiddesme-no-dev
authored andcommitted
SPI: Ensure all read-only data pointers are marked as const (#3356)
This changes all SPI functions that take data pointers which are not modified so that the declaration is const. This allows them to be used with const data (i.e. held in flash). No functional changes are required. The defnitions of spiWrite() and spiTransferBytes() in esp-hal-spi.h/c have been updated to be consistent. Tests: - Build a simple sketch using SPI.writePattern() and SPI.transferBytes() which uses const data and verify that the attached device functions as expected.
1 parent 611ba8e commit b847f41

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed

Diff for: cores/esp32/esp32-hal-spi.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ void spiWaitReady(spi_t * spi)
459459
while(spi->dev->cmd.usr);
460460
}
461461

462-
void spiWrite(spi_t * spi, uint32_t *data, uint8_t len)
462+
void spiWrite(spi_t * spi, const uint32_t *data, uint8_t len)
463463
{
464464
if(!spi) {
465465
return;
@@ -671,7 +671,7 @@ void __spiTransferBytes(spi_t * spi, uint8_t * data, uint8_t * out, uint32_t byt
671671
}
672672
}
673673

674-
void spiTransferBytes(spi_t * spi, uint8_t * data, uint8_t * out, uint32_t size)
674+
void spiTransferBytes(spi_t * spi, const uint8_t * data, uint8_t * out, uint32_t size)
675675
{
676676
if(!spi) {
677677
return;
@@ -861,7 +861,7 @@ uint32_t spiTransferLongNL(spi_t * spi, uint32_t data)
861861
return data;
862862
}
863863

864-
void spiWriteNL(spi_t * spi, const void * data_in, size_t len){
864+
void spiWriteNL(spi_t * spi, const void * data_in, uint32_t len){
865865
size_t longs = len >> 2;
866866
if(len & 3){
867867
longs++;
@@ -887,7 +887,7 @@ void spiWriteNL(spi_t * spi, const void * data_in, size_t len){
887887
}
888888
}
889889

890-
void spiTransferBytesNL(spi_t * spi, const void * data_in, uint8_t * data_out, size_t len){
890+
void spiTransferBytesNL(spi_t * spi, const void * data_in, uint8_t * data_out, uint32_t len){
891891
if(!spi) {
892892
return;
893893
}
@@ -974,7 +974,7 @@ void spiTransferBitsNL(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits)
974974
}
975975
}
976976

977-
void IRAM_ATTR spiWritePixelsNL(spi_t * spi, const void * data_in, size_t len){
977+
void IRAM_ATTR spiWritePixelsNL(spi_t * spi, const void * data_in, uint32_t len){
978978
size_t longs = len >> 2;
979979
if(len & 3){
980980
longs++;

Diff for: cores/esp32/esp32-hal-spi.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ void spiSetClockDiv(spi_t * spi, uint32_t clockDiv);
9696
void spiSetDataMode(spi_t * spi, uint8_t dataMode);
9797
void spiSetBitOrder(spi_t * spi, uint8_t bitOrder);
9898

99-
void spiWrite(spi_t * spi, uint32_t *data, uint8_t len);
99+
void spiWrite(spi_t * spi, const uint32_t *data, uint8_t len);
100100
void spiWriteByte(spi_t * spi, uint8_t data);
101101
void spiWriteWord(spi_t * spi, uint16_t data);
102102
void spiWriteLong(spi_t * spi, uint32_t data);
@@ -105,7 +105,7 @@ void spiTransfer(spi_t * spi, uint32_t *out, uint8_t len);
105105
uint8_t spiTransferByte(spi_t * spi, uint8_t data);
106106
uint16_t spiTransferWord(spi_t * spi, uint16_t data);
107107
uint32_t spiTransferLong(spi_t * spi, uint32_t data);
108-
void spiTransferBytes(spi_t * spi, uint8_t * data, uint8_t * out, uint32_t size);
108+
void spiTransferBytes(spi_t * spi, const uint8_t * data, uint8_t * out, uint32_t size);
109109
void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits);
110110

111111
/*
@@ -115,11 +115,11 @@ void spiTransaction(spi_t * spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bi
115115
void spiSimpleTransaction(spi_t * spi);
116116
void spiEndTransaction(spi_t * spi);
117117

118-
void spiWriteNL(spi_t * spi, const void * data, uint32_t len);
118+
void spiWriteNL(spi_t * spi, const void * data_in, uint32_t len);
119119
void spiWriteByteNL(spi_t * spi, uint8_t data);
120120
void spiWriteShortNL(spi_t * spi, uint16_t data);
121121
void spiWriteLongNL(spi_t * spi, uint32_t data);
122-
void spiWritePixelsNL(spi_t * spi, const void * data, uint32_t len);
122+
void spiWritePixelsNL(spi_t * spi, const void * data_in, uint32_t len);
123123

124124
#define spiTransferNL(spi, data, len) spiTransferBytesNL(spi, data, data, len)
125125
uint8_t spiTransferByteNL(spi_t * spi, uint8_t data);

Diff for: libraries/SPI/src/SPI.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ void SPIClass::writePixels(const void * data, uint32_t size)
238238
* @param out uint8_t * output buffer. can be NULL for Write Only operation
239239
* @param size uint32_t
240240
*/
241-
void SPIClass::transferBytes(uint8_t * data, uint8_t * out, uint32_t size)
241+
void SPIClass::transferBytes(const uint8_t * data, uint8_t * out, uint32_t size)
242242
{
243243
if(_inTransaction){
244244
return spiTransferBytesNL(_spi, data, out, size);
@@ -251,7 +251,7 @@ void SPIClass::transferBytes(uint8_t * data, uint8_t * out, uint32_t size)
251251
* @param size uint8_t max for size is 64Byte
252252
* @param repeat uint32_t
253253
*/
254-
void SPIClass::writePattern(uint8_t * data, uint8_t size, uint32_t repeat)
254+
void SPIClass::writePattern(const uint8_t * data, uint8_t size, uint32_t repeat)
255255
{
256256
if(size > 64) {
257257
return; //max Hardware FIFO
@@ -272,12 +272,12 @@ void SPIClass::writePattern(uint8_t * data, uint8_t size, uint32_t repeat)
272272
}
273273
}
274274

275-
void SPIClass::writePattern_(uint8_t * data, uint8_t size, uint8_t repeat)
275+
void SPIClass::writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat)
276276
{
277277
uint8_t bytes = (size * repeat);
278278
uint8_t buffer[64];
279279
uint8_t * bufferPtr = &buffer[0];
280-
uint8_t * dataPtr;
280+
const uint8_t * dataPtr;
281281
uint8_t dataSize = bytes;
282282
for(uint8_t i = 0; i < repeat; i++) {
283283
dataSize = size;

Diff for: libraries/SPI/src/SPI.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class SPIClass
4848
uint32_t _div;
4949
uint32_t _freq;
5050
bool _inTransaction;
51-
void writePattern_(uint8_t * data, uint8_t size, uint8_t repeat);
51+
void writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat);
5252

5353
public:
5454
SPIClass(uint8_t spi_bus=HSPI);
@@ -70,15 +70,15 @@ class SPIClass
7070
uint16_t transfer16(uint16_t data);
7171
uint32_t transfer32(uint32_t data);
7272

73-
void transferBytes(uint8_t * data, uint8_t * out, uint32_t size);
73+
void transferBytes(const uint8_t * data, uint8_t * out, uint32_t size);
7474
void transferBits(uint32_t data, uint32_t * out, uint8_t bits);
7575

7676
void write(uint8_t data);
7777
void write16(uint16_t data);
7878
void write32(uint32_t data);
7979
void writeBytes(const uint8_t * data, uint32_t size);
8080
void writePixels(const void * data, uint32_t size);//ili9341 compatible
81-
void writePattern(uint8_t * data, uint8_t size, uint32_t repeat);
81+
void writePattern(const uint8_t * data, uint8_t size, uint32_t repeat);
8282

8383
spi_t * bus(){ return _spi; }
8484
};

0 commit comments

Comments
 (0)