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);
45int8_t gpio_to_adc_channel(
const int8_t pin);
53bool apply_rx_pull(
const gpio_num_t pin,
const RxPull pull);
58class AdapterGPIOBase :
public Adapter {
60 class GPIOImpl :
public Adapter::Impl {
63 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}
66 virtual ~GPIOImpl()
override;
68 inline gpio_num_t rx_pin()
const
72 inline gpio_num_t tx_pin()
const
76 inline gpio::adapter_config_t adapter_config()
const
81 inline virtual bool begin(
const gpio::adapter_config_t& cfg)
87 virtual int rmtTxChannel()
const
92 virtual int rmtRxChannel()
const
97 virtual void* rmtTxHandle()
const
102 virtual void* rmtRxHandle()
const
108 inline virtual m5::hal::error::error_t pinModeRX(
const gpio::Mode m)
override
110 return pin_mode(rx_pin(), m);
112 inline virtual m5::hal::error::error_t writeDigitalRX(
const bool high)
override
114 return write_digital(rx_pin(), high);
116 inline virtual m5::hal::error::error_t readDigitalRX(
bool& high)
override
118 return read_digital(rx_pin(), high);
120 inline virtual m5::hal::error::error_t writeAnalogRX(
const uint16_t v)
override
122 return write_analog(rx_pin(), v);
124 inline virtual m5::hal::error::error_t readAnalogRX(uint16_t& v)
override
126 return read_analog(v, rx_pin());
128 inline virtual m5::hal::error::error_t readAnalogMilliVoltsRX(uint32_t& mv)
override
130 return read_analog_millivolts(mv, rx_pin());
133 inline virtual m5::hal::error::error_t pulseInRX(uint32_t& duration,
const int state,
134 const uint32_t timeout_us = 30000)
override
136 return pulse_in(duration, rx_pin(), state, timeout_us);
140 inline virtual m5::hal::error::error_t pinModeTX(
const gpio::Mode m)
override
142 return pin_mode(tx_pin(), m);
144 inline virtual m5::hal::error::error_t writeDigitalTX(
const bool high)
override
146 return write_digital(tx_pin(), high);
148 inline virtual m5::hal::error::error_t readDigitalTX(
bool& high)
override
150 return read_digital(tx_pin(), high);
152 inline virtual m5::hal::error::error_t writeAnalogTX(
const uint16_t v)
override
154 return write_analog(tx_pin(), v);
156 inline virtual m5::hal::error::error_t readAnalogTX(uint16_t& v)
override
158 return read_analog(v, tx_pin());
160 inline virtual m5::hal::error::error_t readAnalogMilliVoltsTX(uint32_t& mv)
override
162 return read_analog_millivolts(mv, tx_pin());
164 inline virtual m5::hal::error::error_t pulseInTX(uint32_t& duration,
const int state,
165 const uint32_t timeout_us = 30000)
override
167 return pulse_in(duration, tx_pin(), state, timeout_us);
171 m5::hal::error::error_t pin_mode(
const gpio_num_t pin,
const gpio::Mode m);
172 m5::hal::error::error_t write_digital(
const gpio_num_t pin,
const bool high);
173 m5::hal::error::error_t read_digital(
const gpio_num_t pin,
bool& high);
174 m5::hal::error::error_t write_analog(
const gpio_num_t pin,
const uint16_t value);
175 m5::hal::error::error_t read_analog(uint16_t& value,
const gpio_num_t pin);
176 m5::hal::error::error_t read_analog_millivolts(uint32_t& millivolts,
const gpio_num_t pin);
177 m5::hal::error::error_t pulse_in(uint32_t& duration,
const gpio_num_t pin,
const int state,
178 const uint32_t timeout_us);
181 m5::hal::error::error_t ensure_adc_handle(
const gpio_num_t pin);
182 void release_adc_resources();
184 gpio_num_t _rx_pin{(gpio_num_t)-1}, _tx_pin{(gpio_num_t)-1};
185 gpio::adapter_config_t _adapter_cfg{};
187#if defined(M5_UNIT_UNIFIED_USING_ADC_ONESHOT)
189 void* _cali_handle{};
190 int8_t _cached_adc_unit{-1};
191 int8_t _cached_cali_channel{-1};
195 explicit AdapterGPIOBase(GPIOImpl* impl);
197 inline GPIOImpl* impl()
199 return static_cast<GPIOImpl*
>(_impl.get());
201 inline const GPIOImpl* impl()
const
203 return static_cast<GPIOImpl*
>(_impl.get());
205 inline gpio_num_t rx_pin()
const
207 return impl()->rx_pin();
209 inline gpio_num_t tx_pin()
const
211 return impl()->tx_pin();
213 inline bool begin(
const gpio::adapter_config_t& cfg)
215 return impl()->begin(cfg);
Identification of functions to be used.
Top level namespace of M5Stack.
Definition test_helper.hpp:20
Type and enumerator definitions.