8static const char *
const TAG =
"spi-esp-arduino";
9class SPIDelegateHw :
public SPIDelegate {
14 void begin_transaction()
override {
20 ESP_LOGVV(
TAG,
"8266 mangled SPI mode 0x%X",
mode);
25 this->channel_->beginTransaction(settings);
29 void transfer(uint8_t *ptr,
size_t length)
override { this->channel_->transfer(ptr,
length); }
31 void end_transaction()
override {
32 this->channel_->endTransaction();
36 uint8_t transfer(uint8_t data)
override {
return this->channel_->transfer(data); }
38 void write16(uint16_t data)
override { this->channel_->transfer16(data); }
40 void write_array(
const uint8_t *ptr,
size_t length)
override {
42 this->channel_->transfer(*ptr);
47 auto rxbuf = std::vector<uint8_t>(
length);
48 memcpy(rxbuf.data(), ptr,
length);
49 this->channel_->transfer((
void *) rxbuf.data(),
length);
50#elif defined(USE_ESP8266)
53 if (
reinterpret_cast<uintptr_t
>(ptr) & 0x3) {
54 ESP_LOGVV(
TAG,
"SPI write buffer not word aligned, copying to temporary buffer");
55 auto txbuf = std::vector<uint8_t>(
length);
56 memcpy(txbuf.data(), ptr,
length);
57 this->channel_->writeBytes(txbuf.data(),
length);
59 this->channel_->writeBytes(ptr,
length);
62 this->channel_->writeBytes(ptr,
length);
66 void read_array(uint8_t *ptr,
size_t length)
override { this->channel_->transfer(ptr,
length); }
72class SPIBusHw :
public SPIBus {
74 SPIBusHw(GPIOPin *clk, GPIOPin *sdo, GPIOPin *sdi,
SPIInterface channel) :
SPIBus(clk, sdo, sdi), channel_(channel) {
92 SPIDelegate *get_delegate(uint32_t data_rate,
SPIBitOrder bit_order,
SPIMode mode, GPIOPin *cs_pin)
override {
93 return new SPIDelegateHw(this->channel_, data_rate, bit_order,
mode, cs_pin);
98 bool is_hw()
override {
return true; }
102 const std::vector<uint8_t> &data_pins) {
103 return new SPIBusHw(clk, sdo, sdi, interface);
BedjetMode mode
BedJet operating mode.
static SPIBus * get_bus(SPIInterface interface, GPIOPin *clk, GPIOPin *sdo, GPIOPin *sdi, const std::vector< uint8_t > &data_pins)
virtual void end_transaction()
virtual void begin_transaction()
static int get_pin_no(GPIOPin *pin)
SPIMode
Modes mapping to clock phase and polarity.
SPIBitOrder
The bit-order for SPI devices. This defines how the data read from and written to the device is inter...
Providing packet encoding functions for exchanging data with a remote host.
SPIClassRP2040 * SPIInterface