mirror of
https://github.com/esphome/esphome.git
synced 2024-12-25 06:54:52 +01:00
Use enum not bool for pulse counter storage type
Allows for more storage types
This commit is contained in:
parent
b3cff566eb
commit
7e4d37c9f1
2 changed files with 13 additions and 6 deletions
|
@ -9,12 +9,16 @@ static const char *const TAG = "pulse_counter";
|
||||||
const char *const EDGE_MODE_TO_STRING[] = {"DISABLE", "INCREMENT", "DECREMENT"};
|
const char *const EDGE_MODE_TO_STRING[] = {"DISABLE", "INCREMENT", "DECREMENT"};
|
||||||
|
|
||||||
#ifdef HAS_PCNT
|
#ifdef HAS_PCNT
|
||||||
PulseCounterStorageBase *get_storage(bool hw_pcnt) {
|
PulseCounterStorageBase *get_storage(Storage storage) {
|
||||||
return (hw_pcnt ? (PulseCounterStorageBase *) (new HwPulseCounterStorage)
|
switch (storage) {
|
||||||
: (PulseCounterStorageBase *) (new BasicPulseCounterStorage));
|
case Storage::basic:
|
||||||
|
return new BasicPulseCounterStorage;
|
||||||
|
case Storage::pcnt:
|
||||||
|
return new HwPulseCounterStorage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
PulseCounterStorageBase *get_storage(bool) { return new BasicPulseCounterStorage; }
|
PulseCounterStorageBase *get_storage(Storage) { return new BasicPulseCounterStorage; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void IRAM_ATTR BasicPulseCounterStorage::gpio_intr(BasicPulseCounterStorage *arg) {
|
void IRAM_ATTR BasicPulseCounterStorage::gpio_intr(BasicPulseCounterStorage *arg) {
|
||||||
|
|
|
@ -20,6 +20,8 @@ enum PulseCounterCountMode {
|
||||||
PULSE_COUNTER_DECREMENT,
|
PULSE_COUNTER_DECREMENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class Storage { basic, pcnt };
|
||||||
|
|
||||||
#ifdef HAS_PCNT
|
#ifdef HAS_PCNT
|
||||||
using pulse_counter_t = int16_t;
|
using pulse_counter_t = int16_t;
|
||||||
#else
|
#else
|
||||||
|
@ -58,11 +60,12 @@ struct HwPulseCounterStorage : public PulseCounterStorageBase {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PulseCounterStorageBase *get_storage(bool hw_pcnt = false);
|
PulseCounterStorageBase *get_storage(Storage storage = Storage::basic);
|
||||||
|
|
||||||
class PulseCounterSensor : public sensor::Sensor, public PollingComponent {
|
class PulseCounterSensor : public sensor::Sensor, public PollingComponent {
|
||||||
public:
|
public:
|
||||||
explicit PulseCounterSensor(bool hw_pcnt = false) : storage_(*get_storage(hw_pcnt)) {}
|
explicit PulseCounterSensor(Storage storage = Storage::basic) : storage_(*get_storage(storage)) {}
|
||||||
|
explicit PulseCounterSensor(int storage = 0) : PulseCounterSensor(Storage(storage)) {}
|
||||||
|
|
||||||
void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
|
void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
|
||||||
void set_rising_edge_mode(PulseCounterCountMode mode) { storage_.rising_edge_mode = mode; }
|
void set_rising_edge_mode(PulseCounterCountMode mode) { storage_.rising_edge_mode = mode; }
|
||||||
|
|
Loading…
Reference in a new issue