mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-22 13:48:29 +02:00
8e75980ebd
* Cleanup dashboard JS * Add vscode * Save start_mark/end_mark * Updates * Updates * Remove need for cv.nameable It's a bit hacky but removes so much bloat from integrations * Add enum helper * Document APIs, and Improvements * Fixes * Fixes * Update PULL_REQUEST_TEMPLATE.md * Updates * Updates * Updates
78 lines
1.8 KiB
C++
78 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/core/esphal.h"
|
|
|
|
namespace esphome {
|
|
namespace spi {
|
|
|
|
class SPIComponent : public Component {
|
|
public:
|
|
void set_clk(GPIOPin *clk) { clk_ = clk; }
|
|
void set_miso(GPIOPin *miso) { miso_ = miso; }
|
|
void set_mosi(GPIOPin *mosi) { mosi_ = mosi; }
|
|
|
|
void setup() override;
|
|
|
|
void dump_config() override;
|
|
|
|
uint8_t read_byte();
|
|
|
|
void read_array(uint8_t *data, size_t length);
|
|
|
|
void write_byte(uint8_t data);
|
|
|
|
void write_array(uint8_t *data, size_t length);
|
|
|
|
void enable(GPIOPin *cs, bool msb_first, bool high_speed);
|
|
|
|
void disable();
|
|
|
|
float get_setup_priority() const override;
|
|
|
|
protected:
|
|
GPIOPin *clk_;
|
|
GPIOPin *miso_{nullptr};
|
|
GPIOPin *mosi_{nullptr};
|
|
GPIOPin *active_cs_{nullptr};
|
|
bool msb_first_{true};
|
|
bool high_speed_{false};
|
|
};
|
|
|
|
class SPIDevice {
|
|
public:
|
|
SPIDevice() = default;
|
|
SPIDevice(SPIComponent *parent, GPIOPin *cs) : parent_(parent), cs_(cs) {}
|
|
|
|
void set_spi_parent(SPIComponent *parent) { this->parent_ = parent; }
|
|
void set_cs_pin(GPIOPin *cs) { this->cs_ = cs; }
|
|
|
|
void spi_setup() {
|
|
this->cs_->setup();
|
|
this->cs_->digital_write(true);
|
|
}
|
|
|
|
void enable() { this->parent_->enable(this->cs_, this->is_device_msb_first(), this->is_device_high_speed()); }
|
|
|
|
void disable() { this->parent_->disable(); }
|
|
|
|
uint8_t read_byte() { return this->parent_->read_byte(); }
|
|
|
|
void read_array(uint8_t *data, size_t length) { return this->parent_->read_array(data, length); }
|
|
|
|
void write_byte(uint8_t data) { return this->parent_->write_byte(data); }
|
|
|
|
void write_array(uint8_t *data, size_t length) { this->parent_->write_array(data, length); }
|
|
|
|
protected:
|
|
virtual bool is_device_msb_first() = 0;
|
|
|
|
virtual bool is_device_high_speed() { return false; }
|
|
|
|
SPIComponent *parent_{nullptr};
|
|
GPIOPin *cs_{nullptr};
|
|
};
|
|
|
|
} // namespace spi
|
|
} // namespace esphome
|