Remove duplicated code from SPISlave (#3007)

Use the SPIHelper class already there for the SPI/SoftwareSPI
This commit is contained in:
Earle F. Philhower, III 2025-06-23 15:47:19 -07:00 committed by GitHub
parent 6fc3165d3a
commit df81f20eb4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 4 additions and 35 deletions

View file

@ -48,36 +48,6 @@ SPISlaveClass::SPISlaveClass(spi_inst_t *spi, pin_size_t rx, pin_size_t cs, pin_
_dataLeft = 0;
}
inline spi_cpol_t SPISlaveClass::cpol(SPISettings _spis) {
switch (_spis.getDataMode()) {
case SPI_MODE0:
return SPI_CPOL_0;
case SPI_MODE1:
return SPI_CPOL_0;
case SPI_MODE2:
return SPI_CPOL_1;
case SPI_MODE3:
return SPI_CPOL_1;
}
// Error
return SPI_CPOL_0;
}
inline spi_cpha_t SPISlaveClass::cpha(SPISettings _spis) {
switch (_spis.getDataMode()) {
case SPI_MODE0:
return SPI_CPHA_0;
case SPI_MODE1:
return SPI_CPHA_1;
case SPI_MODE2:
return SPI_CPHA_0;
case SPI_MODE3:
return SPI_CPHA_1;
}
// Error
return SPI_CPHA_0;
}
bool SPISlaveClass::setRX(pin_size_t pin) {
#if defined(PICO_RP2350) && !PICO_RP2350A // RP2350B
constexpr uint64_t valid[2] = { __bitset({0, 4, 16, 20, 32, 26}) /* SPI0 */,
@ -243,7 +213,7 @@ void SPISlaveClass::begin(SPISettings spis) {
spi_init(_spi, _spis.getClockFreq());
DEBUGSPI("SPISlave: actual baudrate=%u\n", spi_get_baudrate(_spi));
spi_set_slave(_spi, true);
spi_set_format(_spi, 8, cpol(spis), cpha(spis), SPI_MSB_FIRST);
spi_set_format(_spi, 8, _helper.cpol(spis), _helper.cpha(spis), SPI_MSB_FIRST);
// Install our IRQ handler
if (_spi == spi0) {

View file

@ -21,6 +21,7 @@
#pragma once
#include <Arduino.h>
#include <SPI.h> // For SPIHelper
#include <api/HardwareSPI.h>
#include <hardware/spi.h>
#include <functional>
@ -69,10 +70,6 @@ public:
void _handleIRQ();
private:
spi_cpol_t cpol(SPISettings _spis);
spi_cpha_t cpha(SPISettings _spis);
uint8_t reverseByte(uint8_t b);
uint16_t reverse16Bit(uint16_t w);
void adjustBuffer(const void *s, void *d, size_t cnt, bool by16);
spi_inst_t *_spi;
@ -89,6 +86,8 @@ private:
size_t _dataLeft;
// Received data will be returned in small chunks directly from a local buffer in _handleIRQ()
SPIHelper _helper;
};
extern SPISlaveClass SPISlave;