Files
esphome-dev/esphome/components/spi/spi.h
T
Otto Winter 8e75980ebd Cleanup dashboard JS (#491)
* 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
2019-04-22 21:56:30 +02:00

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