Skip to content

Commit

Permalink
Add configurable SPI device to arduino_default BUS_SPI
Browse files Browse the repository at this point in the history
  • Loading branch information
jp-bennett committed Apr 23, 2024
1 parent b7be934 commit 2dc2fc0
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 17 deletions.
37 changes: 21 additions & 16 deletions src/lgfx/v1/platforms/arduino_default/Bus_SPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,41 +50,46 @@ namespace lgfx
{
dc_h();
pinMode(_cfg.pin_dc, pin_mode_t::output);
//SPI.pins(_cfg.pin_sclk, _cfg.pin_miso, _cfg.pin_mosi, -1);
SPI.begin();
//PrivateSPI->pins(_cfg.pin_sclk, _cfg.pin_miso, _cfg.pin_mosi, -1);
PrivateSPI->begin();
return true;
}

void Bus_SPI::release(void)
{
SPI.end();
PrivateSPI->end();
}

void Bus_SPI::spi_device(HardwareSPI *newSPI)
{
PrivateSPI = newSPI;
}

void Bus_SPI::beginTransaction(void)
{
dc_h();
//SPISettings setting(_cfg.freq_write, BitOrder::MSBFIRST, _cfg.spi_mode, true);
SPISettings setting(_cfg.freq_write, MSBFIRST, _cfg.spi_mode);
SPI.beginTransaction(setting);
PrivateSPI->beginTransaction(setting);
}

void Bus_SPI::endTransaction(void)
{
SPI.endTransaction();
PrivateSPI->endTransaction();
dc_h();
}

void Bus_SPI::beginRead(void)
{
SPI.endTransaction();
PrivateSPI->endTransaction();
//SPISettings setting(_cfg.freq_read, BitOrder::MSBFIRST, _cfg.spi_mode, false);
SPISettings setting(_cfg.freq_read, MSBFIRST, _cfg.spi_mode);
SPI.beginTransaction(setting);
PrivateSPI->beginTransaction(setting);
}

void Bus_SPI::endRead(void)
{
SPI.endTransaction();
PrivateSPI->endTransaction();
beginTransaction();
}

Expand All @@ -100,14 +105,14 @@ namespace lgfx
bool Bus_SPI::writeCommand(uint32_t data, uint_fast8_t bit_length)
{
dc_l();
SPI.transfer((uint8_t*)&data, bit_length >> 3);
PrivateSPI->transfer((uint8_t*)&data, bit_length >> 3);
dc_h();
return true;
}

void Bus_SPI::writeData(uint32_t data, uint_fast8_t bit_length)
{
SPI.transfer((uint8_t*)&data, bit_length >> 3);
PrivateSPI->transfer((uint8_t*)&data, bit_length >> 3);
}

void Bus_SPI::writeDataRepeat(uint32_t data, uint_fast8_t bit_length, uint32_t length)
Expand All @@ -116,7 +121,7 @@ namespace lgfx
auto bytes = bit_length >> 3;
do
{
SPI.send(reinterpret_cast<uint8_t*>(&data), bytes);
PrivateSPI->send(reinterpret_cast<uint8_t*>(&data), bytes);
} while (--length);
/*/
const uint8_t dst_bytes = bit_length >> 3;
Expand All @@ -137,7 +142,7 @@ namespace lgfx
fillpos += fillpos;
}

SPI.transfer(buf, len * dst_bytes);
PrivateSPI->transfer(buf, len * dst_bytes);
} while (length -= len);
//*/
}
Expand All @@ -153,15 +158,15 @@ namespace lgfx
if (limit <= 32) limit <<= 1;
auto buf = _flip_buffer.getBuffer(len * dst_bytes);
param->fp_copy(buf, 0, len, param);
SPI.transfer(buf, len * dst_bytes);
PrivateSPI->transfer(buf, len * dst_bytes);
} while (length -= len);
}

void Bus_SPI::writeBytes(const uint8_t* data, uint32_t length, bool dc, bool use_dma)
{
if (dc) dc_h();
else dc_l();
SPI.transfer(const_cast<uint8_t*>(data), length);
PrivateSPI->transfer(const_cast<uint8_t*>(data), length);
if (!dc) dc_h();
}

Expand All @@ -173,7 +178,7 @@ namespace lgfx
int idx = 0;
do
{
res |= SPI.transfer(0) << idx;
res |= PrivateSPI->transfer(0) << idx;
idx += 8;
} while (--bit_length);
return res;
Expand All @@ -183,7 +188,7 @@ namespace lgfx
{
do
{
dst[0] = SPI.transfer(0);
dst[0] = PrivateSPI->transfer(0);
++dst;
} while (--length);
return true;
Expand Down
4 changes: 3 additions & 1 deletion src/lgfx/v1/platforms/arduino_default/Bus_SPI.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ namespace lgfx

bool init(void) override;
void release(void) override;
void spi_device(HardwareSPI *newSPI);

void beginTransaction(void) override;
void endTransaction(void) override;
Expand All @@ -76,7 +77,7 @@ namespace lgfx
bool readBytes(uint8_t* dst, uint32_t length, bool use_dma) override;
void readPixels(void* dst, pixelcopy_t* param, uint32_t length) override;

private:
protected:

__attribute__ ((always_inline)) inline void dc_h(void) {
gpio_hi(_cfg.pin_dc);
Expand All @@ -85,6 +86,7 @@ namespace lgfx
gpio_lo(_cfg.pin_dc);
}

HardwareSPI *PrivateSPI = &SPI;
config_t _cfg;
FlipBuffer _flip_buffer;
bool _need_wait;
Expand Down

0 comments on commit 2dc2fc0

Please sign in to comment.