Skip to content

Commit bbfd8fc

Browse files
authored
make digitalRead() for RGB_BUILTIN work
Standard Arduino-Way of blinking a LED can be the shortest with: void loop() { static uint32_t ledticker = 0; if (millis() - ledticker > 1000) { ledticker = millis(); digitalWrite(RGB_BUILTIN, !digitalRead(RGB_BUILTIN)); } } Worked with the old LED_BUILTIN on Pin 2, now even works with Pin 48/neopixel.
1 parent f9bb62a commit bbfd8fc

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

cores/esp32/esp32-hal-gpio.c

+17-14
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,14 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
104104
#endif
105105

106106
if (pin >= SOC_GPIO_PIN_COUNT) {
107-
log_e("Invalid IO %i selected", pin);
107+
log_e("Invalid pin selected");
108108
return;
109109
}
110110

111111
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL){
112112
perimanSetBusDeinit(ESP32_BUS_TYPE_GPIO, gpioDetachBus);
113113
if(!perimanClearPinBus(pin)){
114-
log_e("Deinit of previous bus from IO %i failed", pin);
114+
log_e("Deinit of previous bus failed");
115115
return;
116116
}
117117
}
@@ -140,7 +140,7 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
140140
}
141141
if(gpio_config(&conf) != ESP_OK)
142142
{
143-
log_e("IO %i config failed", pin);
143+
log_e("GPIO config failed");
144144
return;
145145
}
146146
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL){
@@ -151,11 +151,16 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
151151
}
152152
}
153153

154+
#ifdef RGB_BUILTIN
155+
uint8_t RGB_BUILTIN_storage = 0;
156+
#endif
157+
154158
extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
155159
{
156160
#ifdef RGB_BUILTIN
157161
if(pin == RGB_BUILTIN){
158162
//use RMT to set all channels on/off
163+
RGB_BUILTIN_storage=val;
159164
const uint8_t comm_val = val != 0 ? RGB_BRIGHTNESS : 0;
160165
neopixelWrite(RGB_BUILTIN, comm_val, comm_val, comm_val);
161166
return;
@@ -164,17 +169,23 @@ extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
164169
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL){
165170
gpio_set_level((gpio_num_t)pin, val);
166171
} else {
167-
log_e("IO %i is not set as GPIO.", pin);
172+
log_e("Pin is not set as GPIO.");
168173
}
169174
}
170175

171176
extern int ARDUINO_ISR_ATTR __digitalRead(uint8_t pin)
172177
{
178+
#ifdef RGB_BUILTIN
179+
if(pin == RGB_BUILTIN){
180+
return RGB_BUILTIN_storage;
181+
}
182+
#endif
183+
173184
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL){
174185
return gpio_get_level((gpio_num_t)pin);
175186
}
176187
else {
177-
log_e("IO %i is not set as GPIO.", pin);
188+
log_e("Pin is not set as GPIO.");
178189
return 0;
179190
}
180191
}
@@ -204,7 +215,7 @@ extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc,
204215
interrupt_initialized = (err == ESP_OK) || (err == ESP_ERR_INVALID_STATE);
205216
}
206217
if(!interrupt_initialized) {
207-
log_e("IO %i ISR Service Failed To Start", pin);
218+
log_e("GPIO ISR Service Failed To Start");
208219
return;
209220
}
210221

@@ -256,14 +267,6 @@ extern void __detachInterrupt(uint8_t pin)
256267
gpio_set_intr_type((gpio_num_t)pin, GPIO_INTR_DISABLE);
257268
}
258269

259-
extern void enableInterrupt(uint8_t pin) {
260-
gpio_intr_enable((gpio_num_t)pin);
261-
}
262-
263-
extern void disableInterrupt(uint8_t pin) {
264-
gpio_intr_disable((gpio_num_t)pin);
265-
}
266-
267270

268271
extern void pinMode(uint8_t pin, uint8_t mode) __attribute__ ((weak, alias("__pinMode")));
269272
extern void digitalWrite(uint8_t pin, uint8_t val) __attribute__ ((weak, alias("__digitalWrite")));

0 commit comments

Comments
 (0)