11#ifndef M5_UNIT_COMPONENT_ADAPTER_GPIO_HPP
12#define M5_UNIT_COMPONENT_ADAPTER_GPIO_HPP
19#if defined(ESP_PLATFORM)
30uint8_t calculate_rmt_clk_div(
const uint32_t apb_freq_hz,
const uint32_t tick_ns);
38uint32_t calculate_rmt_resolution_hz(
const uint32_t apb_freq_hz,
const uint32_t tick_ns);
43class AdapterGPIOBase :
public Adapter {
45 class GPIOImpl :
public Adapter::Impl {
48 GPIOImpl(
const int8_t rx_pin,
const int8_t tx_pin) : _rx_pin{(gpio_num_t)rx_pin}, _tx_pin{(gpio_num_t)tx_pin}
51 virtual ~GPIOImpl()
override;
53 inline gpio_num_t rx_pin()
const
57 inline gpio_num_t tx_pin()
const
61 inline gpio::adapter_config_t adapter_config()
const
66 inline virtual bool begin(
const gpio::adapter_config_t& cfg)
72 virtual int rmtTxChannel()
const
77 virtual int rmtRxChannel()
const
82 virtual void* rmtTxHandle()
const
87 virtual void* rmtRxHandle()
const
93 inline virtual m5::hal::error::error_t pinModeRX(
const gpio::Mode m)
override
95 return pin_mode(rx_pin(), m);
97 inline virtual m5::hal::error::error_t writeDigitalRX(
const bool high)
override
99 return write_digital(rx_pin(), high);
101 inline virtual m5::hal::error::error_t readDigitalRX(
bool& high)
override
103 return read_digital(rx_pin(), high);
105 inline virtual m5::hal::error::error_t writeAnalogRX(
const uint16_t v)
override
107 return write_analog(rx_pin(), v);
109 inline virtual m5::hal::error::error_t readAnalogRX(uint16_t& v)
override
111 return read_analog(v, rx_pin());
113 inline virtual m5::hal::error::error_t readAnalogMilliVoltsRX(uint32_t& mv)
override
115 return read_analog_millivolts(mv, rx_pin());
118 inline virtual m5::hal::error::error_t pulseInRX(uint32_t& duration,
const int state,
119 const uint32_t timeout_us = 30000)
override
121 return pulse_in(duration, rx_pin(), state, timeout_us);
125 inline virtual m5::hal::error::error_t pinModeTX(
const gpio::Mode m)
override
127 return pin_mode(tx_pin(), m);
129 inline virtual m5::hal::error::error_t writeDigitalTX(
const bool high)
override
131 return write_digital(tx_pin(), high);
133 inline virtual m5::hal::error::error_t readDigitalTX(
bool& high)
override
135 return read_digital(tx_pin(), high);
137 inline virtual m5::hal::error::error_t writeAnalogTX(
const uint16_t v)
override
139 return write_analog(tx_pin(), v);
141 inline virtual m5::hal::error::error_t readAnalogTX(uint16_t& v)
override
143 return read_analog(v, tx_pin());
145 inline virtual m5::hal::error::error_t readAnalogMilliVoltsTX(uint32_t& mv)
override
147 return read_analog_millivolts(mv, tx_pin());
149 inline virtual m5::hal::error::error_t pulseInTX(uint32_t& duration,
const int state,
150 const uint32_t timeout_us = 30000)
override
152 return pulse_in(duration, tx_pin(), state, timeout_us);
156 m5::hal::error::error_t pin_mode(
const gpio_num_t pin,
const gpio::Mode m);
157 m5::hal::error::error_t write_digital(
const gpio_num_t pin,
const bool high);
158 m5::hal::error::error_t read_digital(
const gpio_num_t pin,
bool& high);
159 m5::hal::error::error_t write_analog(
const gpio_num_t pin,
const uint16_t value);
160 m5::hal::error::error_t read_analog(uint16_t& value,
const gpio_num_t pin);
161 m5::hal::error::error_t read_analog_millivolts(uint32_t& millivolts,
const gpio_num_t pin);
162 m5::hal::error::error_t pulse_in(uint32_t& duration,
const gpio_num_t pin,
const int state,
163 const uint32_t timeout_us);
166 m5::hal::error::error_t ensure_adc_handle(
const gpio_num_t pin);
167 void release_adc_resources();
169 gpio_num_t _rx_pin{(gpio_num_t)-1}, _tx_pin{(gpio_num_t)-1};
170 gpio::adapter_config_t _adapter_cfg{};
172#if defined(M5_UNIT_UNIFIED_USING_ADC_ONESHOT)
174 void* _cali_handle{};
175 int8_t _cached_adc_unit{-1};
176 int8_t _cached_cali_channel{-1};
180 explicit AdapterGPIOBase(GPIOImpl* impl);
182 inline GPIOImpl* impl()
184 return static_cast<GPIOImpl*
>(_impl.get());
186 inline const GPIOImpl* impl()
const
188 return static_cast<GPIOImpl*
>(_impl.get());
190 inline gpio_num_t rx_pin()
const
192 return impl()->rx_pin();
194 inline gpio_num_t tx_pin()
const
196 return impl()->tx_pin();
198 inline bool begin(
const gpio::adapter_config_t& cfg)
200 return impl()->begin(cfg);
Identification of functions to be used.
Top level namespace of M5Stack.
Definition test_helper.hpp:20
Type and enumerator definitions.