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 src_freq_hz,
const uint32_t tick_ns);
46bool rmt_resolution_matches(
const uint32_t resolution_hz,
const uint32_t tick_ns);
53int8_t gpio_to_adc_channel(
const int8_t pin);
61bool apply_rx_pull(
const gpio_num_t pin,
const RxPull pull);
66class AdapterGPIOBase :
public Adapter {
68 class GPIOImpl :
public Adapter::Impl {
71 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}
74 virtual ~GPIOImpl()
override;
76 inline gpio_num_t rx_pin()
const
80 inline gpio_num_t tx_pin()
const
84 inline gpio::adapter_config_t adapter_config()
const
89 inline virtual bool begin(
const gpio::adapter_config_t& cfg)
95 virtual int rmtTxChannel()
const
100 virtual int rmtRxChannel()
const
105 virtual void* rmtTxHandle()
const
110 virtual void* rmtRxHandle()
const
115 virtual uint32_t rmtTxResolutionHz()
const
120 virtual uint32_t rmtRxResolutionHz()
const
126 inline virtual m5::hal::error::error_t pinModeRX(
const gpio::Mode m)
override
128 return pin_mode(rx_pin(), m);
130 inline virtual m5::hal::error::error_t writeDigitalRX(
const bool high)
override
132 return write_digital(rx_pin(), high);
134 inline virtual m5::hal::error::error_t readDigitalRX(
bool& high)
override
136 return read_digital(rx_pin(), high);
138 inline virtual m5::hal::error::error_t writeAnalogRX(
const uint16_t v)
override
140 return write_analog(rx_pin(), v);
142 inline virtual m5::hal::error::error_t readAnalogRX(uint16_t& v)
override
144 return read_analog(v, rx_pin());
146 inline virtual m5::hal::error::error_t readAnalogMilliVoltsRX(uint32_t& mv)
override
148 return read_analog_millivolts(mv, rx_pin());
151 inline virtual m5::hal::error::error_t pulseInRX(uint32_t& duration,
const int state,
152 const uint32_t timeout_us = 30000)
override
154 return pulse_in(duration, rx_pin(), state, timeout_us);
158 inline virtual m5::hal::error::error_t pinModeTX(
const gpio::Mode m)
override
160 return pin_mode(tx_pin(), m);
162 inline virtual m5::hal::error::error_t writeDigitalTX(
const bool high)
override
164 return write_digital(tx_pin(), high);
166 inline virtual m5::hal::error::error_t readDigitalTX(
bool& high)
override
168 return read_digital(tx_pin(), high);
170 inline virtual m5::hal::error::error_t writeAnalogTX(
const uint16_t v)
override
172 return write_analog(tx_pin(), v);
174 inline virtual m5::hal::error::error_t readAnalogTX(uint16_t& v)
override
176 return read_analog(v, tx_pin());
178 inline virtual m5::hal::error::error_t readAnalogMilliVoltsTX(uint32_t& mv)
override
180 return read_analog_millivolts(mv, tx_pin());
182 inline virtual m5::hal::error::error_t pulseInTX(uint32_t& duration,
const int state,
183 const uint32_t timeout_us = 30000)
override
185 return pulse_in(duration, tx_pin(), state, timeout_us);
189 m5::hal::error::error_t pin_mode(
const gpio_num_t pin,
const gpio::Mode m);
190 m5::hal::error::error_t write_digital(
const gpio_num_t pin,
const bool high);
191 m5::hal::error::error_t read_digital(
const gpio_num_t pin,
bool& high);
192 m5::hal::error::error_t write_analog(
const gpio_num_t pin,
const uint16_t value);
193 m5::hal::error::error_t read_analog(uint16_t& value,
const gpio_num_t pin);
194 m5::hal::error::error_t read_analog_millivolts(uint32_t& millivolts,
const gpio_num_t pin);
195 m5::hal::error::error_t pulse_in(uint32_t& duration,
const gpio_num_t pin,
const int state,
196 const uint32_t timeout_us);
199 m5::hal::error::error_t ensure_adc_handle(
const gpio_num_t pin);
200 void release_adc_resources();
202 gpio_num_t _rx_pin{(gpio_num_t)-1}, _tx_pin{(gpio_num_t)-1};
203 gpio::adapter_config_t _adapter_cfg{};
205#if defined(M5_UNIT_UNIFIED_USING_ADC_ONESHOT)
207 void* _cali_handle{};
208 int8_t _cached_adc_unit{-1};
209 int8_t _cached_cali_channel{-1};
213 explicit AdapterGPIOBase(GPIOImpl* impl);
215 inline GPIOImpl* impl()
217 return static_cast<GPIOImpl*
>(_impl.get());
219 inline const GPIOImpl* impl()
const
221 return static_cast<GPIOImpl*
>(_impl.get());
223 inline gpio_num_t rx_pin()
const
225 return impl()->rx_pin();
227 inline gpio_num_t tx_pin()
const
229 return impl()->tx_pin();
231 inline bool begin(
const gpio::adapter_config_t& cfg)
233 return impl()->begin(cfg);
242 inline uint32_t tx_resolution_hz()
const
244 return impl()->rmtTxResolutionHz();
252 inline uint32_t rx_resolution_hz()
const
254 return impl()->rmtRxResolutionHz();
Identification of functions to be used.
Top level namespace of M5Stack.
Definition test_helper.hpp:20
Type and enumerator definitions.