forked from Makuna/NeoPixelBus
compiles
This commit is contained in:
@@ -63,7 +63,7 @@ License along with NeoPixel. If not, see
|
|||||||
#include "methods/ESP/ESP32/Core_2_x/NeoEsp32RmtMethod.h"
|
#include "methods/ESP/ESP32/Core_2_x/NeoEsp32RmtMethod.h"
|
||||||
#else
|
#else
|
||||||
#if !defined(CONFIG_IDF_TARGET_ESP32C2)
|
#if !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||||
#include "methods/ESP/ESP32/NeoEsp32RmtMethod.h" // every other SOC
|
#include "methods/ESP/ESP32/NeoEsp32RmtXMethod.h" // every other SOC
|
||||||
#else //CONFIG_IDF_TARGET_ESP32C2
|
#else //CONFIG_IDF_TARGET_ESP32C2
|
||||||
#include "methods/ESP/ESP32/NeoEsp32SpiMethod.h" // ESP32C2
|
#include "methods/ESP/ESP32/NeoEsp32SpiMethod.h" // ESP32C2
|
||||||
#endif //CONFIG_IDF_TARGET_ESP32C2
|
#endif //CONFIG_IDF_TARGET_ESP32C2
|
||||||
|
@@ -29,6 +29,8 @@ License along with NeoPixel. If not, see
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#if ESP_IDF_VERSION_MAJOR < 5
|
||||||
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2)
|
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2)
|
||||||
|
|
||||||
#include "../../../../NeoSettings.h"
|
#include "../../../../NeoSettings.h"
|
||||||
@@ -374,3 +376,4 @@ void NeoEsp32RmtInvertedSpeedGs1903::Translate(const void* src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
@@ -29,46 +29,40 @@ License along with NeoPixel. If not, see
|
|||||||
class NeoEsp32RmtSpeed
|
class NeoEsp32RmtSpeed
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// next section is probably not needed anymore for IDF 5.1
|
//
|
||||||
// ClkDiv of 2 provides for good resolution and plenty of reset resolution; but
|
// ClkDiv of 2 provides for good resolution and plenty of reset resolution; but
|
||||||
// a ClkDiv of 1 will provide enough space for the longest reset and does show
|
// a ClkDiv of 1 will provide enough space for the longest reset and does show
|
||||||
// little better pulse accuracy
|
// little better pulse accuracy
|
||||||
const static uint8_t RmtClockDivider = 2;
|
const static uint8_t RmtClockDivider = 2;
|
||||||
|
const static uint32_t RmtCpu = 80000000L; // 80 mhz RMT clock
|
||||||
|
const static uint32_t NsPerSecond = 1000000000L;
|
||||||
|
const static uint32_t RmtTicksPerSecond = (RmtCpu / RmtClockDivider);
|
||||||
|
const static uint32_t NsPerRmtTick = (NsPerSecond / RmtTicksPerSecond); // about 25
|
||||||
|
|
||||||
inline constexpr static uint32_t FromNs(uint32_t ns)
|
inline constexpr static uint32_t FromNs(uint32_t ns)
|
||||||
{
|
{
|
||||||
return ns / NsPerRmtTick;
|
return ns / NsPerRmtTick;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
const static uint32_t RmtCpu = 80000000L; // 80 mhz RMT clock
|
|
||||||
const static uint32_t NsPerSecond = 1000000000L;
|
|
||||||
const static uint32_t RmtTicksPerSecond = (RmtCpu / RmtClockDivider);
|
|
||||||
const static uint32_t NsPerRmtTick = (NsPerSecond / RmtTicksPerSecond); // about 25
|
|
||||||
// end of deprecated section
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class NeoEsp32RmtSpeedBase : public NeoEsp32RmtSpeed
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// this is used rather than the rmt_symbol_word_t as you can't correctly initialize
|
// this is used rather than the rmt_symbol_word_t as you can't correctly initialize
|
||||||
// it as a static constexpr within the template
|
// it as a static constexpr within the template
|
||||||
inline constexpr static uint32_t Item32Val(uint16_t nsHigh, uint16_t nsLow)
|
inline constexpr static uint32_t Item32Val(uint16_t nsHigh, uint16_t nsLow)
|
||||||
{
|
{
|
||||||
return (FromNs(nsLow) << 16) | (1 << 15) | (FromNs(nsHigh));
|
return (FromNs(nsLow) << 16) | (1 << 15) | (FromNs(nsHigh));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class NeoEsp32RmtSpeedBase : public NeoEsp32RmtSpeed
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const static bool Inverted = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class NeoEsp32RmtInvertedSpeedBase : public NeoEsp32RmtSpeed
|
class NeoEsp32RmtInvertedSpeedBase : public NeoEsp32RmtSpeed
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// this is used rather than the rmt_symbol_word_t as you can't correctly initialize
|
const static bool Inverted = true;
|
||||||
// it as a static constexpr within the template
|
|
||||||
inline constexpr static uint32_t Item32Val(uint16_t nsHigh, uint16_t nsLow)
|
|
||||||
{
|
|
||||||
return (FromNs(nsLow) << 16) | (1 << 31) | (FromNs(nsHigh));
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class NeoEsp32RmtSpeedWs2811 : public NeoEsp32RmtSpeedBase
|
class NeoEsp32RmtSpeedWs2811 : public NeoEsp32RmtSpeedBase
|
||||||
@@ -237,4 +231,3 @@ public:
|
|||||||
const static uint16_t RmtDurationReset = FromNs(80000); // 80us
|
const static uint16_t RmtDurationReset = FromNs(80000); // 80us
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@@ -28,18 +28,6 @@ License along with NeoPixel. If not, see
|
|||||||
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||||
|
|
||||||
/* General Reference documentation for the APIs used in this implementation
|
|
||||||
LOW LEVEL: (what is actually used)
|
|
||||||
DOCS: https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/rmt.html
|
|
||||||
EXAMPLE: https://github.com/espressif/esp-idf/blob/826ff7186ae07dc81e960a8ea09ebfc5304bfb3b/examples/peripherals/rmt_tx/main/rmt_tx_main.c
|
|
||||||
|
|
||||||
HIGHER LEVEL:
|
|
||||||
NO TRANSLATE SUPPORT so this was not used
|
|
||||||
NOTE: https://github.com/espressif/arduino-esp32/commit/50d142950d229b8fabca9b749dc4a5f2533bc426
|
|
||||||
Esp32-hal-rmt.h
|
|
||||||
Esp32-hal-rmt.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "NeoEsp32RmtSpeed.h"
|
#include "NeoEsp32RmtSpeed.h"
|
||||||
|
|
||||||
@@ -53,8 +41,6 @@ extern "C"
|
|||||||
#include "esp_check.h"
|
#include "esp_check.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RMT_LED_STRIP_RESOLUTION_HZ 40000000 // 40MHz resolution - setting of the "old" driver
|
|
||||||
|
|
||||||
struct led_strip_encoder_config_t
|
struct led_strip_encoder_config_t
|
||||||
{
|
{
|
||||||
uint32_t resolution; /*!< Encoder resolution, in Hz */
|
uint32_t resolution; /*!< Encoder resolution, in Hz */
|
||||||
@@ -192,7 +178,7 @@ template<typename T_SPEED> class NeoEsp32RmtMethodBase
|
|||||||
public:
|
public:
|
||||||
typedef NeoNoSettings SettingsObject;
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoEsp32RmtMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize, NeoBusChannel channel = 0) :
|
NeoEsp32RmtMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize, NeoBusChannel channel = NeoBusChannel_0) :
|
||||||
_sizeData(pixelCount* elementSize + settingsSize),
|
_sizeData(pixelCount* elementSize + settingsSize),
|
||||||
_pin(pin),
|
_pin(pin),
|
||||||
_channel(NULL)
|
_channel(NULL)
|
||||||
@@ -228,14 +214,14 @@ public:
|
|||||||
config.clk_src = RMT_CLK_SRC_DEFAULT;
|
config.clk_src = RMT_CLK_SRC_DEFAULT;
|
||||||
config.gpio_num = static_cast<gpio_num_t>(_pin);
|
config.gpio_num = static_cast<gpio_num_t>(_pin);
|
||||||
config.mem_block_symbols = 192; // memory block size, 64 * 4 = 256 Bytes
|
config.mem_block_symbols = 192; // memory block size, 64 * 4 = 256 Bytes
|
||||||
config.resolution_hz = RMT_LED_STRIP_RESOLUTION_HZ; // 1 MHz tick resolution, i.e., 1 tick = 1 µs
|
config.resolution_hz = T_SPEED::RmtTicksPerSecond; // 1 MHz tick resolution, i.e., 1 tick = 1 µs
|
||||||
config.trans_queue_depth = 4; // set the number of transactions that can pend in the background
|
config.trans_queue_depth = 4; // set the number of transactions that can pend in the background
|
||||||
config.flags.invert_out = false; // do not invert output signal
|
config.flags.invert_out = T_SPEED::Inverted; // do not invert output signal
|
||||||
config.flags.with_dma = false; // do not need DMA backend
|
config.flags.with_dma = false; // do not need DMA backend
|
||||||
|
|
||||||
ret += rmt_new_tx_channel(&config, &_channel);
|
ret += rmt_new_tx_channel(&config, &_channel);
|
||||||
led_strip_encoder_config_t encoder_config = {};
|
led_strip_encoder_config_t encoder_config = {};
|
||||||
encoder_config.resolution = RMT_LED_STRIP_RESOLUTION_HZ;
|
encoder_config.resolution = T_SPEED::RmtTicksPerSecond;
|
||||||
|
|
||||||
_tx_config.loop_count = 0; //no loop
|
_tx_config.loop_count = 0; //no loop
|
||||||
|
|
||||||
@@ -259,7 +245,8 @@ public:
|
|||||||
{
|
{
|
||||||
// AddLog(2,"__ %u", _sizeData);
|
// AddLog(2,"__ %u", _sizeData);
|
||||||
// now start the RMT transmit with the editing buffer before we swap
|
// now start the RMT transmit with the editing buffer before we swap
|
||||||
esp_err_t ret = rmt_transmit(_channel, _led_encoder, _dataEditing, _sizeData, &_tx_config); // 3 for _sizeData
|
// esp_err_t ret =
|
||||||
|
rmt_transmit(_channel, _led_encoder, _dataEditing, _sizeData, &_tx_config); // 3 for _sizeData
|
||||||
// AddLog(2,"rmt_transmit: %u", ret);
|
// AddLog(2,"rmt_transmit: %u", ret);
|
||||||
if (maintainBufferConsistency)
|
if (maintainBufferConsistency)
|
||||||
{
|
{
|
||||||
@@ -317,6 +304,13 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// NOTE: While these are multi-instance auto channel selecting, there are limits
|
||||||
|
// to the number of times based on the specific ESP32 model it is compiled for
|
||||||
|
// ESP32 - 8x (beyond 4x may experience issues)
|
||||||
|
// ESP32S2 - 4x
|
||||||
|
// ESP32C3 - 2x
|
||||||
|
// ESP32S3 - 4x
|
||||||
|
|
||||||
// normal
|
// normal
|
||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedWs2811> NeoEsp32RmtXWs2811Method;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedWs2811> NeoEsp32RmtXWs2811Method;
|
||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedWs2812x> NeoEsp32RmtXWs2812xMethod;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedWs2812x> NeoEsp32RmtXWs2812xMethod;
|
||||||
@@ -329,8 +323,6 @@ typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeedTx1812> NeoEsp32RmtXTx1812Method;
|
|||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeed800Kbps> NeoEsp32RmtX800KbpsMethod;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeed800Kbps> NeoEsp32RmtX800KbpsMethod;
|
||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeed400Kbps> NeoEsp32RmtX400KbpsMethod;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtSpeed400Kbps> NeoEsp32RmtX400KbpsMethod;
|
||||||
|
|
||||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32S2)
|
|
||||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
|
||||||
|
|
||||||
// inverted
|
// inverted
|
||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeedWs2811> NeoEsp32RmtXWs2811InvertedMethod;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeedWs2811> NeoEsp32RmtXWs2811InvertedMethod;
|
||||||
@@ -344,9 +336,6 @@ typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeedTx1812> NeoEsp32RmtXTx1812
|
|||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeed800Kbps> NeoEsp32RmtX800KbpsInvertedMethod;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeed800Kbps> NeoEsp32RmtX800KbpsInvertedMethod;
|
||||||
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeed400Kbps> NeoEsp32RmtX400KbpsInvertedMethod;
|
typedef NeoEsp32RmtMethodBase<NeoEsp32RmtInvertedSpeed400Kbps> NeoEsp32RmtX400KbpsInvertedMethod;
|
||||||
|
|
||||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32S2)
|
|
||||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(NEOPIXEL_ESP32_RMT_DEFAULT) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32S3)
|
#if defined(NEOPIXEL_ESP32_RMT_DEFAULT) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user