Skip to content

Commit 583e030

Browse files
committed
Moved RGBLedWrite to new file esp32-hal-rgb-led and created pinMode in variatn.cpp
1 parent 50b6356 commit 583e030

File tree

9 files changed

+114
-57
lines changed

9 files changed

+114
-57
lines changed

Diff for: CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ set(CORE_SRCS
3636
cores/esp32/esp32-hal-matrix.c
3737
cores/esp32/esp32-hal-misc.c
3838
cores/esp32/esp32-hal-psram.c
39+
cores/esp32/esp32-hal-rgb-led.c
3940
cores/esp32/esp32-hal-sigmadelta.c
4041
cores/esp32/esp32-hal-spi.c
4142
cores/esp32/esp32-hal-time.c

Diff for: cores/esp32/esp32-hal-gpio.c

-54
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,6 @@ static InterruptHandle_t __pinInterruptHandlers[SOC_GPIO_PIN_COUNT] = {0,};
9191

9292
extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
9393
{
94-
#ifdef BOARD_HAS_NEOPIXEL
95-
if (pin == LED_BUILTIN){
96-
__pinMode(LED_BUILTIN-SOC_GPIO_PIN_COUNT, mode);
97-
return;
98-
}
99-
#endif
100-
10194
if (!GPIO_IS_VALID_GPIO(pin)) {
10295
log_e("Invalid pin selected");
10396
return;
@@ -132,53 +125,6 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
132125
}
133126
}
134127

135-
#ifdef BOARD_HAS_NEOPIXEL
136-
void RGBLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val){
137-
rmt_data_t led_data[24];
138-
static rmt_obj_t* rmt_send = NULL;
139-
static bool initialized = false;
140-
141-
uint8_t _pin;
142-
if(pin == LED_BUILTIN){
143-
_pin = LED_BUILTIN-SOC_GPIO_PIN_COUNT;
144-
}else{
145-
_pin = pin;
146-
}
147-
148-
if(!initialized){
149-
if((rmt_send = rmtInit(_pin, RMT_TX_MODE, RMT_MEM_64)) == NULL){
150-
log_e("RGB LED driver initialization failed!");
151-
rmt_send = NULL;
152-
return;
153-
}
154-
rmtSetTick(rmt_send, 100);
155-
initialized = true;
156-
}
157-
158-
int color[] = {green_val, red_val, blue_val}; // Color coding is in order GREEN, RED, BLUE
159-
int i = 0;
160-
for(int col=0; col<3; col++ ){
161-
for(int bit=0; bit<8; bit++){
162-
if((color[col] & (1<<(7-bit)))){
163-
// HIGH bit
164-
led_data[i].level0 = 1; // T1H
165-
led_data[i].duration0 = 8; // 0.8us
166-
led_data[i].level1 = 0; // T1L
167-
led_data[i].duration1 = 4; // 0.4us
168-
}else{
169-
// LOW bit
170-
led_data[i].level0 = 1; // T0H
171-
led_data[i].duration0 = 4; // 0.4us
172-
led_data[i].level1 = 0; // T0L
173-
led_data[i].duration1 = 8; // 0.8us
174-
}
175-
i++;
176-
}
177-
}
178-
rmtWrite(rmt_send, led_data, 24);
179-
}
180-
#endif
181-
182128
extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val)
183129
{
184130
#ifdef BOARD_HAS_NEOPIXEL

Diff for: cores/esp32/esp32-hal-gpio.h

-3
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,6 @@ extern "C" {
7272
#define digitalPinToDacChannel(pin) (((pin) == DAC_CHANNEL_1_GPIO_NUM)?0:((pin) == DAC_CHANNEL_2_GPIO_NUM)?1:-1)
7373

7474
void pinMode(uint8_t pin, uint8_t mode);
75-
#ifdef BOARD_HAS_NEOPIXEL
76-
void RGBLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val);
77-
#endif
7875
void digitalWrite(uint8_t pin, uint8_t val);
7976
int digitalRead(uint8_t pin);
8077

Diff for: cores/esp32/esp32-hal-rgb-led.c

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include "esp32-hal-rgb-led.h"
2+
3+
#ifdef BOARD_HAS_NEOPIXEL
4+
5+
void RGBLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val){
6+
log_d("RGB: %d %d %d", red_val, green_val, blue_val);
7+
rmt_data_t led_data[24];
8+
static rmt_obj_t* rmt_send = NULL;
9+
static bool initialized = false;
10+
11+
uint8_t _pin;
12+
if(pin == LED_BUILTIN){
13+
_pin = LED_BUILTIN-SOC_GPIO_PIN_COUNT;
14+
}else{
15+
_pin = pin;
16+
}
17+
18+
if(!initialized){
19+
if((rmt_send = rmtInit(_pin, RMT_TX_MODE, RMT_MEM_64)) == NULL){
20+
log_e("RGB LED driver initialization failed!");
21+
rmt_send = NULL;
22+
return;
23+
}
24+
rmtSetTick(rmt_send, 100);
25+
initialized = true;
26+
}
27+
28+
int color[] = {green_val, red_val, blue_val}; // Color coding is in order GREEN, RED, BLUE
29+
int i = 0;
30+
for(int col=0; col<3; col++ ){
31+
for(int bit=0; bit<8; bit++){
32+
if((color[col] & (1<<(7-bit)))){
33+
// HIGH bit
34+
led_data[i].level0 = 1; // T1H
35+
led_data[i].duration0 = 8; // 0.8us
36+
led_data[i].level1 = 0; // T1L
37+
led_data[i].duration1 = 4; // 0.4us
38+
}else{
39+
// LOW bit
40+
led_data[i].level0 = 1; // T0H
41+
led_data[i].duration0 = 4; // 0.4us
42+
led_data[i].level1 = 0; // T0L
43+
led_data[i].duration1 = 8; // 0.8us
44+
}
45+
i++;
46+
}
47+
}
48+
rmtWrite(rmt_send, led_data, 24);
49+
}
50+
51+
#endif

Diff for: cores/esp32/esp32-hal-rgb-led.h

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#ifndef MAIN_ESP32_HAL_RGB_LED_H_
2+
#define MAIN_ESP32_HAL_RGB_LED_H_
3+
4+
#ifdef __cplusplus
5+
extern "C" {
6+
#endif
7+
8+
#include "esp32-hal.h"
9+
/*
10+
#include "soc/soc_caps.h"
11+
#include "pins_arduino.h"
12+
*/
13+
14+
//#ifdef BOARD_HAS_NEOPIXEL
15+
void RGBLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val);
16+
//#endif
17+
18+
#ifdef __cplusplus
19+
}
20+
#endif
21+
22+
#endif /* MAIN_ESP32_HAL_RGB_LED_H_ */

Diff for: cores/esp32/esp32-hal.h

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ void yield(void);
8888
#include "esp32-hal-timer.h"
8989
#include "esp32-hal-bt.h"
9090
#include "esp32-hal-psram.h"
91+
#include "esp32-hal-rgb-led.h"
9192
#include "esp32-hal-cpu.h"
9293

9394
void analogWrite(uint8_t pin, int value);

Diff for: variants/esp32c3/variant.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include "esp32-hal-rgb-led.h"
2+
3+
extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
4+
{
5+
log_d("foo");
6+
#ifdef BOARD_HAS_NEOPIXEL
7+
if (pin == LED_BUILTIN){
8+
__pinMode(LED_BUILTIN-SOC_GPIO_PIN_COUNT, mode);
9+
return;
10+
}
11+
#endif
12+
__pinMode(pin, mode);
13+
}

Diff for: variants/esp32s2/variant.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include "esp32-hal-rgb-led.h"
2+
3+
extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
4+
{
5+
log_d("foo");
6+
#ifdef BOARD_HAS_NEOPIXEL
7+
if (pin == LED_BUILTIN){
8+
__pinMode(LED_BUILTIN-SOC_GPIO_PIN_COUNT, mode);
9+
return;
10+
}
11+
#endif
12+
__pinMode(pin, mode);
13+
}

Diff for: variants/esp32s3/variant.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include "esp32-hal-rgb-led.h"
2+
3+
extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
4+
{
5+
log_d("foo");
6+
#ifdef BOARD_HAS_NEOPIXEL
7+
if (pin == LED_BUILTIN){
8+
__pinMode(LED_BUILTIN-SOC_GPIO_PIN_COUNT, mode);
9+
return;
10+
}
11+
#endif
12+
__pinMode(pin, mode);
13+
}

0 commit comments

Comments
 (0)