#pragma once #include "esphome/components/number/number.h" #include "../cc1101.h" #include namespace esphome { namespace cc1101 { // maybe there is a way to specialize type dependent member pointers template class NumberFloat : public number::Number, public Parented { protected: void control(float value) override { this->publish_state(value); (this->parent_->*F)(value); } }; template class NumberUInt8 : public number::Number, public Parented { protected: void control(float value) override { this->publish_state(value); (this->parent_->*F)((uint8_t) lround(value)); } }; template class NumberInt8 : public number::Number, public Parented { protected: void control(float value) override { this->publish_state(value); (this->parent_->*F)((int8_t) lround(value)); } }; using OutputPowerNumber = NumberFloat<&CC1101Component::set_output_power>; using TunerFrequencyNumber = NumberFloat<&CC1101Component::set_tuner_frequency>; using TunerIfFrequencyNumber = NumberFloat<&CC1101Component::set_tuner_if_frequency>; using TunerBandwidthNumber = NumberFloat<&CC1101Component::set_tuner_bandwidth>; using TunerChannelNumber = NumberUInt8<&CC1101Component::set_tuner_channel>; using TunerChannelSpacingNumber = NumberFloat<&CC1101Component::set_tuner_channel_spacing>; using TunerFskDeviationNumber = NumberFloat<&CC1101Component::set_tuner_fsk_deviation>; using TunerMskDeviationNumber = NumberUInt8<&CC1101Component::set_tuner_msk_deviation>; using TunerSymbolRateNumber = NumberFloat<&CC1101Component::set_tuner_symbol_rate>; using AgcCarrierSenseAbsThrNumber = NumberInt8<&CC1101Component::set_agc_carrier_sense_abs_thr>; } // namespace cc1101 } // namespace esphome