ESPHome 2026.5.0
Loading...
Searching...
No Matches
bp5758d.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
6#include <vector>
7
8namespace esphome::bp5758d {
9
10class BP5758D : public Component {
11 public:
12 class Channel;
13
14 void set_data_pin(GPIOPin *data_pin) { data_pin_ = data_pin; }
15 void set_clock_pin(GPIOPin *clock_pin) { clock_pin_ = clock_pin; }
16
17 void setup() override;
18
19 void dump_config() override;
20
21 float get_setup_priority() const override { return setup_priority::HARDWARE; }
22
24 void loop() override;
25
27 public:
28 void set_parent(BP5758D *parent) { parent_ = parent; }
29 void set_channel(uint8_t channel) { channel_ = channel; }
30 void set_current(uint8_t current) { current_ = current; }
31
32 protected:
33 void write_state(float state) override {
34 auto amount = static_cast<uint16_t>(state * 0x3FF);
35 // We're enforcing channels start at 1 to mach OUT1-OUT5, we must adjust
36 // to our 0-based array internally here by subtracting 1.
37 this->parent_->set_channel_value_(this->channel_ - 1, amount);
38 this->parent_->set_channel_current_(this->channel_ - 1, this->current_);
39 }
40
42 uint8_t channel_;
43 uint8_t current_;
44 };
45
46 protected:
47 uint8_t correct_current_level_bits_(uint8_t current);
48 void set_channel_value_(uint8_t channel, uint16_t value);
49 void set_channel_current_(uint8_t channel, uint8_t current);
50 void write_bit_(bool value);
51 void write_byte_(uint8_t data);
52 void write_buffer_(uint8_t *buffer, uint8_t size);
53
57 std::vector<uint8_t> channel_current_;
58 std::vector<uint16_t> pwm_amounts_;
59 bool update_{true};
60};
61
62} // namespace esphome::bp5758d
void set_channel(uint8_t channel)
Definition bp5758d.h:29
void set_current(uint8_t current)
Definition bp5758d.h:30
void write_state(float state) override
Definition bp5758d.h:33
void set_parent(BP5758D *parent)
Definition bp5758d.h:28
void setup() override
Definition bp5758d.cpp:21
std::vector< uint8_t > channel_current_
Definition bp5758d.h:57
void dump_config() override
Definition bp5758d.cpp:31
void write_byte_(uint8_t data)
Definition bp5758d.cpp:136
void set_clock_pin(GPIOPin *clock_pin)
Definition bp5758d.h:15
void set_channel_current_(uint8_t channel, uint8_t current)
Definition bp5758d.cpp:125
float get_setup_priority() const override
Definition bp5758d.h:21
void set_channel_value_(uint8_t channel, uint16_t value)
Definition bp5758d.cpp:117
void write_buffer_(uint8_t *buffer, uint8_t size)
Definition bp5758d.cpp:150
void write_bit_(bool value)
Definition bp5758d.cpp:127
void set_data_pin(GPIOPin *data_pin)
Definition bp5758d.h:14
void loop() override
Send new values if they were updated.
Definition bp5758d.cpp:37
uint8_t correct_current_level_bits_(uint8_t current)
Definition bp5758d.cpp:102
std::vector< uint16_t > pwm_amounts_
Definition bp5758d.h:58
Base class for all output components that can output a variable level, like PWM.
bool state
Definition fan.h:2
constexpr float HARDWARE
For components that deal with hardware and are very important like GPIO switch.
Definition component.h:41
uint16_t size
Definition helpers.cpp:25