3 #include "pico/stdlib.h"
4 #include "hardware/gpio.h"
5 #include "hardware/adc.h"
6 #include "hardware/gpio.h"
7 #include "hardware/adc.h"
8 #include "hardware/pwm.h"
9 #include "hardware/clocks.h"
19 enum PinFunction {PIN_FUNC_UNDEFINED, PIN_FUNC_GPIO, PIN_FUNC_ADC, PIN_FUNC_PWM};
25 PinFunction pin_function;
27 bool is_setup =
false;
34 if (inst_ptr==
nullptr){
41 bool setPinMode(pin_size_t pinNumber, PinMode pinMode=INPUT){
42 Logger.debug(
"PicoGPIOFunction::PinMode");
44 if ( pinInfo[pinNumber].pinMode != pinMode){
45 Logger.debug(
"PicoGPIOFunction::PinMode -> has changed");
46 pinInfo[pinNumber].pinMode = pinMode;
47 pinInfo[pinNumber].is_setup =
false;
53 bool isInput(pin_size_t pinNumber){
54 return pinInfo[pinNumber].pinMode==INPUT;
57 bool isOutput(pin_size_t pinNumber){
58 return pinInfo[pinNumber].pinMode==OUTPUT;
61 void clear(pin_size_t pinNumber){
62 Logger.debug(
"clear");
63 gpio_set_function(pinNumber, GPIO_FUNC_NULL);
64 pinInfo[pinNumber].is_setup =
false;
68 void usePin(pin_size_t pinNumber, PinFunction pinFunction){
70 PinInfo *info = & (pinInfo[pinNumber]);
72 if (!info->is_setup) {
73 Logger.debug(
"PicoGPIOFunction::usePin");
75 info->pin_function = pinFunction;
76 switch(info->pin_function){
79 Logger.debug(
"setup PIN_FUNC_GPIO");
81 gpio_set_dir(pinNumber, info->pinMode==OUTPUT ? GPIO_OUT: GPIO_IN);
82 if (info->pinMode==INPUT_PULLUP) gpio_pull_up(pinNumber);
83 if (info->pinMode==INPUT_PULLDOWN) gpio_pull_down(pinNumber);
84 info->is_setup =
true;
88 Logger.debug(
"setup PIN_FUNC_ADC");
90 adc_gpio_init(pinNumber);
91 info->is_setup =
true;
95 Logger.warning(
"unsupported pin function");
102 if (info->pin_function==PIN_FUNC_ADC){
103 int adc = pinNumber - 26;
110 bool adcSelect(
int adc){
111 bool changed =
false;
112 if (current_adc != adc){
113 Logger.debug(
"adc_select_input",Logger.toStr(adc));
114 adc_select_input((id_t)adc);
126 Logger.info(
"adc_init");
128 adc_init_flag =
true;
134 void setPwmConfig(pwm_config config){
135 this->pwmconfig = config;
142 pwm_config pwmconfig;
146 Logger.debug(
"PicoGPIOFunction");
147 pinInfo =
new PinInfo[maxPins];
Definition: PicoPinFunction.h:30
Information about an the status and the Arduino PinMode of an individual pin.
Definition: PicoPinFunction.h:24