Skip to content

Commit 68c678e

Browse files
authored
GPIO - Peripheral manager implementation (#8179)
* periman-implementation * fix RGB_BUILTIN and remove space
1 parent 63bc30c commit 68c678e

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

cores/esp32/esp32-hal-gpio.c

+31-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
#include "esp32-hal-gpio.h"
16+
#include "esp32-hal-periman.h"
1617
#include "hal/gpio_hal.h"
1718
#include "soc/soc_caps.h"
1819

@@ -89,6 +90,10 @@ static InterruptHandle_t __pinInterruptHandlers[SOC_GPIO_PIN_COUNT] = {0,};
8990

9091
#include "driver/rtc_io.h"
9192

93+
static bool gpioDetachBus(void * bus){
94+
return true;
95+
}
96+
9297
extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
9398
{
9499
#ifdef RGB_BUILTIN
@@ -102,6 +107,14 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
102107
log_e("Invalid pin selected");
103108
return;
104109
}
110+
111+
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL){
112+
perimanSetBusDeinit(ESP32_BUS_TYPE_GPIO, gpioDetachBus);
113+
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL)){
114+
log_e("Deinit of previous bus failed");
115+
return;
116+
}
117+
}
105118

106119
gpio_hal_context_t gpiohal;
107120
gpiohal.dev = GPIO_LL_GET_HW(GPIO_PORT_0);
@@ -130,6 +143,12 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
130143
log_e("GPIO config failed");
131144
return;
132145
}
146+
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL){
147+
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_GPIO, (void *)(pin+1))){
148+
//gpioDetachBus((void *)(pin+1));
149+
return;
150+
}
151+
}
133152
}
134153

135154
extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
@@ -142,12 +161,22 @@ extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
142161
return;
143162
}
144163
#endif
145-
gpio_set_level((gpio_num_t)pin, val);
164+
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL){
165+
gpio_set_level((gpio_num_t)pin, val);
166+
} else {
167+
log_e("Pin is not set as GPIO.");
168+
}
146169
}
147170

148171
extern int ARDUINO_ISR_ATTR __digitalRead(uint8_t pin)
149172
{
150-
return gpio_get_level((gpio_num_t)pin);
173+
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL){
174+
return gpio_get_level((gpio_num_t)pin);
175+
}
176+
else {
177+
log_e("Pin is not set as GPIO.");
178+
return 0;
179+
}
151180
}
152181

153182
static void ARDUINO_ISR_ATTR __onPinInterrupt(void * arg) {

0 commit comments

Comments
 (0)