Skip to content

Commit 996a1c2

Browse files
Jason2866Staars
andauthored
override ignore for Arduino 3.0 (#19349)
* Initial C6 support * add C6 in tasmota_globals.h * fix copy&paste errors * Use updated platform (build 1481) * use common safeboot flags (#19282) (#352) Co-authored-by: Christian Baars <[email protected]> * use env var lib_ignore * safeboot lib_ignore env * revert wrong change * rm eink lib from standard used libs * add c2-board 4M, maximum_size probably a bit off * diffuse idea for 2MB with OTA and FS * C2 and C6 additions * C2 and C6 additions for commands.ino * C2 and C6 additions for crash recorder * C2 to support_esp * some preps for C2 * add c2 to tasmota.h * fix some typos and compile bugs * fix 2 compiler warnings for Arduino 3.0 * fix another warning * add correct pins to template * pins for C2, maximum_size updated * unclutter env:tasmota32c2-safeboot * fix c6 env * more pins for the C2, but not all * pin 9 and 10 for c2/c6 * add || * prep pins for c6 * make c6 compile, needs testing * fix copy-paste-error * more correct pin support C6 * pin14 C6 * wrong warning for C6 * 10 and 11 are flash pins on the C6 * boolean voodoo * fix EVERYTHING * fix Onewire for Arduino 3.0 * enable OneWire * finale fix for all platforms: OneWire.h * better compatibility * final fix onewire * refactor Platformio Arduino 3.0 setup * overlooked needed `;` * refactor as requested * fix NeoPixelBus compilation for C2 and C6 * fix Arduino30 for old working NeoPixel boards * Try to switch of RMT LED when not SOC supported * use latest IDF 5.1 * framework includes now "libsodium" * prep NeoPixel RMT rewrite * NeoPixel for C6 * fix Arduino 2.x * really fix compile ?? * fix compiler warning TSL2591 * fix compiler warning TSL2591 _2 * fix compile warning TSL2561 * fix warning sensirion part 1 * fix ESP32 Arduino 3.0 compile (needs work check) * Disable NeoPixel for C2 (no RMT support) * forgotten to remove * fix compiler warning * prep 5.1, TasUpdater * prep 5.1 SensirionRXFrame * prep 5.1, SensiriomI2CCommunication.cpp * prep5.1, last batch Sensirion * prep5.1, silence compiler warning * Silence C++ deprecated warning * Align with branch C6-support (#359) * prep5.1, fix berry_wire * revert deprecated compiler flag --------- Co-authored-by: Staars <[email protected]> Co-authored-by: Christian Baars <[email protected]> * add i2c #defines * enable more libs for ESP32 * refactor for esp-nimble-cpp * add esp-nimble-cpp, needed for C2,C6 * fix dual use of IRAM_ATTR for i2sDmaISR * silence compiler warning with cast * prep5.1, new DAC API in Berry * more libs enabled * NimBLE changes * fix wrong build flag for MI * add NimBLE ignores * add MI to env * use latest framework with changed NimBLE * add libesp32_div to C2/C6 * fix env konfig for NimBLE * new esp-cpp-nimble for all * prep5.1, silence compiler warning around IRAM_ATR * prep5.1, i2s pre-work * add c2 to lib esp-nimble-cpp * prep5.1, intermediate refactoring * prep5.1, intermediate refactoring * fix chirp for IDF>5 * prep5.1, fix compilation error * Update platformio_tasmota_core3_env.ini * prep5.1, SPI fixes for C2/C6 * prep5.1, fix universal display * enable uDisplay * c3cdc display * add odroid env * rm obsolote option * rm BLE from c3cdc * fix SD Card (changed sdkconfig) * cdc env, lvgl to all builds * add cdc safeboot * use framework build 1504 * prep5.1., intermediate restart * forgot to save * prep5.1, we love static cast * latest framework build 1510 * fix xsns_74_lmt01 * ditch NeoPixel-I2S for 5.1 * prep5.1, begin RMT C6 * Ethernet Test * forgot to upload * invert timing in led-encoder * build 1511 / IDF 5.1.0.230818 * compile NeopixelBus for C6 * re - uncomment * re - uncomment the next * enable Neopixel * One more Neopixel try * what a stupid typo * refac Pio Arduino 3.0 setup * updates ini's * disable by default core 32 Arduino 3.0 * disable uDisplay for S3 * Update tasmota_configurations_ESP32.h * fix s3 compile * we need a new RMT LED driver for 5.1 for all SOC's * Todo: port udl for S3 * turn on NeoPixel again, as it does not crash anymore * first partly working version * Arduino 3.0 pio config to ignore * gitignore for override Arduino 3.0 * Delete platformio_tasmota_core3_env.ini --------- Co-authored-by: Christian Baars <[email protected]> Co-authored-by: Christian Baars <[email protected]>
1 parent 3f5af26 commit 996a1c2

File tree

5 files changed

+305
-25
lines changed

5 files changed

+305
-25
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ tasmota/tasmota.ino.cpp
2727
platformio_override.ini
2828
platformio_tasmota_cenv.ini
2929
platformio_tasmota_user_env.ini
30+
platformio_tasmota_core3_env.ini
3031
lib/libesp32/berry/generate/*
3132
lib/libesp32/berry/berry
3233

Diff for: lib/lib_basic/NeoPixelBus/src/NeoPixelBus.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,10 @@ License along with NeoPixel. If not, see
103103
#elif defined(ARDUINO_ARCH_ESP32)
104104
#if ESP_IDF_VERSION_MAJOR < 5
105105
#include "internal/NeoEsp32I2sMethod.h"
106-
#endif
107-
#if CONFIG_IDF_TARGET_ESP32C6
108-
#include "internal/NeoEsp32RmtMethod_idf5.h"
109-
#else
110106
#include "internal/NeoEsp32RmtMethod.h"
111-
#endif //CONFIG_IDF_TARGET_ESP32C6
107+
#else
108+
#include "internal/NeoEsp32RmtMethod_idf5.h"
109+
#endif // ESP_IDF_VERSION_MAJOR
112110
#include "internal/NeoEspBitBangMethod.h"
113111
#include "internal/DotStarEsp32DmaSpiMethod.h"
114112

Diff for: lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod_idf5.h

+36-20
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,15 @@ Esp32-hal-rmt.c
4545

4646
#include <Arduino.h>
4747

48+
extern void AddLog(uint32_t loglevel, PGM_P formatP, ...);
49+
4850
extern "C"
4951
{
5052
#include <rom/gpio.h>
5153
#include "driver/rmt_tx.h"
5254
#include "driver/rmt_encoder.h"
55+
#include "esp_check.h"
56+
}
5357

5458
typedef struct {
5559
uint32_t resolution; /*!< Encoder resolution, in Hz */
@@ -120,16 +124,22 @@ static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder)
120124

121125
esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rmt_encoder_handle_t *ret_encoder)
122126
{
127+
const char* TAG = "TEST_RMT";
123128
esp_err_t ret = ESP_OK;
124-
rmt_led_strip_encoder_t *led_encoder = new rmt_led_strip_encoder_t;
125-
// ESP_GOTO_ON_FALSE(config && ret_encoder, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument");
126-
// led_encoder = (rmt_led_strip_encoder_t*)calloc(1, sizeof(rmt_led_strip_encoder_t));
127-
// ESP_GOTO_ON_FALSE(led_encoder, ESP_ERR_NO_MEM, err, TAG, "no mem for led strip encoder");
129+
rmt_led_strip_encoder_t *led_encoder = NULL;
130+
uint32_t reset_ticks = config->resolution / 1000000 * 50 / 2; // reset code duration defaults to 50us
131+
rmt_bytes_encoder_config_t bytes_encoder_config;
132+
rmt_copy_encoder_config_t copy_encoder_config = {};
133+
rmt_symbol_word_t reset_code_config;
134+
135+
136+
ESP_GOTO_ON_FALSE(config && ret_encoder, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument");
137+
led_encoder = new rmt_led_strip_encoder_t();
138+
ESP_GOTO_ON_FALSE(led_encoder, ESP_ERR_NO_MEM, err, TAG, "no mem for led strip encoder");
128139
led_encoder->base.encode = rmt_encode_led_strip;
129140
led_encoder->base.del = rmt_del_led_strip_encoder;
130141
led_encoder->base.reset = rmt_led_strip_encoder_reset;
131142
// different led strip might have its own timing requirements, following parameter is for WS2812
132-
rmt_bytes_encoder_config_t bytes_encoder_config = {};
133143
bytes_encoder_config.bit0.level0 = 1;
134144
bytes_encoder_config.bit0.duration0 = 0.3 * config->resolution / 1000000; // T0H=0.3us
135145
bytes_encoder_config.bit0.level1 = 0;
@@ -140,38 +150,36 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm
140150
bytes_encoder_config.bit1.duration1 = 0.3 * config->resolution / 1000000; // T0L=0.9us
141151
bytes_encoder_config.flags.msb_first = 1; // WS2812 transfer bit order: G7...G0R7...R0B7...B0
142152

143-
// ESP_GOTO_ON_ERROR(rmt_new_bytes_encoder(&bytes_encoder_config, &led_encoder->bytes_encoder), err, TAG, "create bytes encoder failed");
144-
rmt_copy_encoder_config_t copy_encoder_config = {};
145-
// ESP_GOTO_ON_ERROR(rmt_new_copy_encoder(&copy_encoder_config, &led_encoder->copy_encoder), err, TAG, "create copy encoder failed");
153+
ESP_GOTO_ON_ERROR(rmt_new_bytes_encoder(&bytes_encoder_config, &led_encoder->bytes_encoder), err, TAG, "create bytes encoder failed");
154+
ESP_GOTO_ON_ERROR(rmt_new_copy_encoder(&copy_encoder_config, &led_encoder->copy_encoder), err, TAG, "create copy encoder failed");
146155

147-
uint32_t reset_ticks = config->resolution / 1000000 * 50 / 2; // reset code duration defaults to 50us
148-
rmt_symbol_word_t reset_code_config = {};
149156
reset_code_config.level0 = 0;
150157
reset_code_config.duration0 = reset_ticks;
151158
reset_code_config.level1 = 0;
152159
reset_code_config.duration1 = reset_ticks;
153160
led_encoder->reset_code = reset_code_config;
154161
*ret_encoder = &led_encoder->base;
155-
return ESP_OK;
162+
return ret;
156163
err:
164+
AddLog(2,"RMT:could not init led decoder");
157165
if (led_encoder) {
158166
if (led_encoder->bytes_encoder) {
159167
rmt_del_encoder(led_encoder->bytes_encoder);
160168
}
161169
if (led_encoder->copy_encoder) {
162170
rmt_del_encoder(led_encoder->copy_encoder);
163171
}
164-
free(led_encoder);
172+
delete led_encoder;
165173
}
166174
return ret;
167175
}
168-
}
169176

170177
#define NEOPIXELBUS_RMT_INT_FLAGS (ESP_INTR_FLAG_LOWMED)
171178

172179
class NeoEsp32RmtSpeed
173180
{
174181
public:
182+
// next section is probably not needed anymore for IDF 5.1
175183
// ClkDiv of 2 provides for good resolution and plenty of reset resolution; but
176184
// a ClkDiv of 1 will provide enough space for the longest reset and does show
177185
// little better pulse accuracy
@@ -187,6 +195,7 @@ class NeoEsp32RmtSpeed
187195
const static uint32_t NsPerSecond = 1000000000L;
188196
const static uint32_t RmtTicksPerSecond = (RmtCpu / RmtClockDivider);
189197
const static uint32_t NsPerRmtTick = (NsPerSecond / RmtTicksPerSecond); // about 25
198+
// end of deprecated section
190199

191200
};
192201

@@ -504,7 +513,7 @@ template<typename T_SPEED, typename T_CHANNEL> class NeoEsp32RmtMethodBase
504513
void Initialize()
505514
{
506515
#define RMT_LED_STRIP_RESOLUTION_HZ 10000000 // 10MHz resolution, 1 tick = 0.1us (led strip needs a high resolution)
507-
516+
esp_err_t ret = ESP_OK;
508517
// rmt_channel_handle_t tx_chan = NULL;
509518
rmt_tx_channel_config_t config = {};
510519
config.clk_src = RMT_CLK_SRC_DEFAULT;
@@ -515,28 +524,34 @@ template<typename T_SPEED, typename T_CHANNEL> class NeoEsp32RmtMethodBase
515524
config.flags.invert_out = false; // do not invert output signal
516525
config.flags.with_dma = false; // do not need DMA backend
517526

518-
rmt_new_tx_channel(&config,&_channel.RmtChannelNumber);
527+
ret += rmt_new_tx_channel(&config,&_channel.RmtChannelNumber);
519528
led_strip_encoder_config_t encoder_config = {};
520529
encoder_config.resolution = RMT_LED_STRIP_RESOLUTION_HZ;
521530

522-
_tx_config.loop_count = 0; // no transfer loop
531+
_tx_config.loop_count = 0; //no loop
523532

524-
ESP_ERROR_CHECK(rmt_new_led_strip_encoder(&encoder_config, &_led_encoder));
533+
ret += rmt_new_led_strip_encoder(&encoder_config, &_led_encoder);
525534

526535
// ESP_LOGI(TAG, "Enable RMT TX channel");
527-
ESP_ERROR_CHECK(rmt_enable(_channel.RmtChannelNumber));
536+
ret += rmt_enable(_channel.RmtChannelNumber);
537+
AddLog(2,"RMT:initialized with error code: %u on pin: %u",ret, _pin);
528538
}
529539

530540
void Update(bool maintainBufferConsistency)
531541
{
542+
AddLog(2,"..");
532543
// wait for not actively sending data
533544
// this will time out at 10 seconds, an arbitrarily long period of time
534545
// and do nothing if this happens
535546

536547
if (ESP_OK == ESP_ERROR_CHECK_WITHOUT_ABORT(rmt_tx_wait_all_done(_channel.RmtChannelNumber, 10000 / portTICK_PERIOD_MS)))
537548
{
549+
AddLog(2,"__ %u", _sizeData);
538550
// now start the RMT transmit with the editing buffer before we swap
539-
ESP_ERROR_CHECK(rmt_transmit(_channel.RmtChannelNumber, _led_encoder, _dataEditing, _sizeData, &_tx_config));
551+
// const uint8_t pixels[3] = {100,100,100};
552+
esp_err_t ret = rmt_transmit(_channel.RmtChannelNumber, _led_encoder, _dataEditing, 3, &_tx_config); // 3 for _sizeData
553+
// esp_err_t ret = rmt_transmit(_channel.RmtChannelNumber, _led_encoder, pixels, 3, &_tx_config);
554+
AddLog(2,"rmt_transmit: %u", ret);
540555
if (maintainBufferConsistency)
541556
{
542557
// copy editing to sending,
@@ -569,7 +584,7 @@ template<typename T_SPEED, typename T_CHANNEL> class NeoEsp32RmtMethodBase
569584
const uint8_t _pin; // output pin number
570585

571586
rmt_transmit_config_t _tx_config = {};
572-
rmt_encoder_handle_t _led_encoder = NULL;
587+
rmt_encoder_handle_t _led_encoder = nullptr;
573588

574589
T_CHANNEL _channel; // holds instance for multi channel support
575590

@@ -581,6 +596,7 @@ template<typename T_SPEED, typename T_CHANNEL> class NeoEsp32RmtMethodBase
581596

582597
void construct()
583598
{
599+
AddLog(2,"RMT:construct");
584600
_dataEditing = static_cast<uint8_t*>(malloc(_sizeData));
585601
// data cleared later in Begin()
586602

Diff for: pio-tools/override_copy.py

+6
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@
2525
print ("*** use provided platformio_tasmota_cenv.ini as planned ***")
2626
else:
2727
shutil.copy("platformio_tasmota_cenv_sample.ini", "platformio_tasmota_cenv.ini")
28+
29+
# copy platformio_tasmota_core3_env_sample.ini to platformio_tasmota_core3_env.ini
30+
if os.path.isfile("platformio_tasmota_core3_env.ini"):
31+
print ("*** use provided platformio_tasmota_core3_env.ini as planned ***")
32+
else:
33+
shutil.copy("platformio_tasmota_core3_env_sample.ini", "platformio_tasmota_core3_env.ini")

0 commit comments

Comments
 (0)