From a3d6923fec9a57ed5983d1c3477a09a5c892f70e Mon Sep 17 00:00:00 2001 From: jomjol <30766535+jomjol@users.noreply.github.com> Date: Sun, 14 Nov 2021 08:47:55 +0100 Subject: [PATCH] v9.1.0 --- README.md | 6 + .../ClassFlowPostProcessing.cpp | 4 +- code/components/jomjol_helper/Helper.cpp | 2 +- code/main/Color.cpp | 132 ----- code/main/Color.h | 69 --- code/main/SmartLeds.cpp | 63 --- code/main/SmartLeds.h | 530 ------------------ code/main/version.cpp | 4 +- code/version.cpp | 4 +- firmware/bootloader.bin | Bin 25264 -> 25264 bytes firmware/firmware.bin | Bin 1661568 -> 1661584 bytes firmware/html.zip | Bin 179205 -> 179205 bytes 12 files changed, 12 insertions(+), 802 deletions(-) delete mode 100644 code/main/Color.cpp delete mode 100644 code/main/Color.h delete mode 100644 code/main/SmartLeds.cpp delete mode 100644 code/main/SmartLeds.h diff --git a/README.md b/README.md index 92bd3367..83e7b5ca 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,12 @@ In other cases you can contact the developer via email: Value, NUMBERS[j]->Nachkomma) + " - Pre: " + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma); NUMBERS[j]->Value = NUMBERS[j]->PreValue; diff --git a/code/components/jomjol_helper/Helper.cpp b/code/components/jomjol_helper/Helper.cpp index d5479c31..d8537b86 100644 --- a/code/components/jomjol_helper/Helper.cpp +++ b/code/components/jomjol_helper/Helper.cpp @@ -80,7 +80,7 @@ void memCopyGen(uint8_t* _source, uint8_t* _target, int _size) FILE* OpenFileAndWait(const char* nm, const char* _mode, int _waitsec) { - printf("open config file %s in mode %s\n", nm, _mode); + printf("open file %s in mode %s\n", nm, _mode); FILE *pfile = fopen(nm, _mode); /* diff --git a/code/main/Color.cpp b/code/main/Color.cpp deleted file mode 100644 index b2beb9ac..00000000 --- a/code/main/Color.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include "Color.h" -#include -#include -#include - -namespace { - -// Int -> fixed point -int up( int x ) { return x * 255; } - -} // namespace - -int iRgbSqrt( int num ) { - // https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Binary_numeral_system_.28base_2.29 - assert( "sqrt input should be non-negative" && num >= 0 ); - assert( "sqrt input should no exceed 16 bits" && num <= 0xFFFF ); - int res = 0; - int bit = 1 << 16; - while ( bit > num ) - bit >>= 2; - while ( bit != 0 ) { - if ( num >= res + bit ) { - num -= res + bit; - res = ( res >> 1 ) + bit; - } else - res >>= 1; - bit >>= 2; - } - return res; -} - -Rgb::Rgb( Hsv y ) { - // https://stackoverflow.com/questions/24152553/hsv-to-rgb-and-back-without-floating-point-math-in-python - // greyscale - if( y.s == 0 ) { - r = g = b = y.v; - return; - } - - const int region = y.h / 43; - const int remainder = ( y.h - ( region * 43 ) ) * 6; - - const int p = ( y.v * ( 255 - y.s ) ) >> 8; - const int q = ( y.v * ( 255 - ( ( y.s * remainder ) >> 8 ) ) ) >> 8; - const int t = ( y.v * ( 255 - ( ( y.s * (255 -remainder ) ) >> 8 ) ) ) >> 8; - - switch( region ) { - case 0: r = y.v; g = t; b = p; break; - case 1: r = q; g = y.v; b = p; break; - case 2: r = p; g = y.v; b = t; break; - case 3: r = p; g = q; b = y.v; break; - case 4: r = t; g = p; b = y.v; break; - case 5: r = y.v; g = p; b = q; break; - default: __builtin_trap(); - } - - a = y.a; -} - -Rgb& Rgb::operator=( Hsv hsv ) { - Rgb r{ hsv }; - swap( r ); - return *this; -} - -Rgb Rgb::operator+( Rgb in ) const { - auto copy = *this; - copy += in; - return copy; -} - -Rgb& Rgb::operator+=( Rgb in ) { - unsigned int red = r + in.r; - r = ( red < 255 ) ? red : 255; - unsigned int green = g + in.g; - g = ( green < 255 ) ? green : 255; - unsigned int blue = b + in.b; - b = ( blue < 255 ) ? blue : 255; - return *this; -} - -Rgb& Rgb::blend( Rgb in ) { - unsigned int inAlpha = in.a * ( 255 - a ); - unsigned int alpha = a + inAlpha; - r = iRgbSqrt( ( ( r * r * a ) + ( in.r * in.r * inAlpha ) ) / alpha ); - g = iRgbSqrt( ( ( g * g * a ) + ( in.g * in.g * inAlpha ) ) / alpha ); - b = iRgbSqrt( ( ( b * b * a ) + ( in.b * in.b * inAlpha ) ) / alpha ); - a = alpha; - return *this; -} - -uint8_t IRAM_ATTR Rgb::getGrb( int idx ) { - switch ( idx ) { - case 0: return g; - case 1: return r; - case 2: return b; - } - __builtin_unreachable(); -} - -Hsv::Hsv( Rgb r ) { - int min = std::min( r.r, std::min( r.g, r.b ) ); - int max = std::max( r.r, std::max( r.g, r.b ) ); - int chroma = max - min; - - v = max; - if ( chroma == 0 ) { - h = s = 0; - return; - } - - s = up( chroma ) / max; - int hh; - if ( max == r.r ) - hh = ( up( int( r.g ) - int( r.b ) ) ) / chroma / 6; - else if ( max == r.g ) - hh = 255 / 3 + ( up( int( r.b ) - int( r.r ) ) ) / chroma / 6; - else - hh = 2 * 255 / 3 + ( up( int( r.r ) - int( r.g ) ) ) / chroma / 6; - - if ( hh < 0 ) - hh += 255; - h = hh; - - a = r.a; -} - -Hsv& Hsv::operator=( Rgb rgb ) { - Hsv h{ rgb }; - swap( h ); - return *this; -} diff --git a/code/main/Color.h b/code/main/Color.h deleted file mode 100644 index 1923cf0b..00000000 --- a/code/main/Color.h +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include -#include "esp_attr.h" -union Hsv; - -union Rgb { - struct __attribute__ ((packed)) { - uint8_t r, g, b, a; - }; - uint32_t value; - - Rgb( uint8_t r = 0, uint8_t g = 0, uint8_t b = 0, uint8_t a = 255 ) : r( r ), g( g ), b( b ), a( a ) {} - Rgb( Hsv c ); - Rgb& operator=( Rgb rgb ) { swap( rgb ); return *this; } - Rgb& operator=( Hsv hsv ); - Rgb operator+( Rgb in ) const; - Rgb& operator+=( Rgb in ); - bool operator==( Rgb in ) const { return in.value == value; } - Rgb& blend( Rgb in ); - void swap( Rgb& o ) { value = o.value; } - void linearize() { - r = channelGamma(r); - g = channelGamma(g); - b = channelGamma(b); - } - - uint8_t IRAM_ATTR getGrb( int idx ); - - void stretchChannels( uint8_t maxR, uint8_t maxG, uint8_t maxB ) { - r = stretch( r, maxR ); - g = stretch( g, maxG ); - b = stretch( b, maxB ); - } - - void stretchChannelsEvenly( uint8_t max ) { - stretchChannels( max, max, max ); - } - -private: - uint8_t stretch( int value, uint8_t max ) { - return ( value * max ) >> 8; - } - - uint8_t channelGamma( int channel ) { - /* The optimal gamma correction is x^2.8. However, this is expensive to - * compute. Therefore, we use x^3 for gamma correction. Also, we add a - * bias as the WS2812 LEDs do not turn on for values less than 4. */ - if (channel == 0) - return channel; - channel = channel * channel * channel * 251; - channel >>= 24; - return static_cast< uint8_t >( 4 + channel ); - } -}; - -union Hsv { - struct __attribute__ ((packed)) { - uint8_t h, s, v, a; - }; - uint32_t value; - - Hsv( uint8_t h, uint8_t s = 0, uint8_t v = 0, uint8_t a = 255 ) : h( h ), s( s ), v( v ), a( a ) {} - Hsv( Rgb r ); - Hsv& operator=( Hsv h ) { swap( h ); return *this; } - Hsv& operator=( Rgb rgb ); - bool operator==( Hsv in ) const { return in.value == value; } - void swap( Hsv& o ) { value = o.value; } -}; diff --git a/code/main/SmartLeds.cpp b/code/main/SmartLeds.cpp deleted file mode 100644 index a2ba7b29..00000000 --- a/code/main/SmartLeds.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "SmartLeds.h" - -IsrCore SmartLed::_interruptCore = CoreCurrent; -intr_handle_t SmartLed::_interruptHandle = NULL; - -SmartLed*& IRAM_ATTR SmartLed::ledForChannel( int channel ) { - static SmartLed* table[8] = { nullptr }; - assert( channel < 8 ); - return table[ channel ]; -} - -void IRAM_ATTR SmartLed::interruptHandler(void*) { - for (int channel = 0; channel != 8; channel++) { - auto self = ledForChannel( channel ); - - if ( RMT.int_st.val & (1 << (24 + channel ) ) ) { // tx_thr_event - if ( self ) - self->copyRmtHalfBlock(); - RMT.int_clr.val |= 1 << ( 24 + channel ); - } else if ( RMT.int_st.val & ( 1 << (3 * channel ) ) ) { // tx_end - if ( self ) - xSemaphoreGiveFromISR( self->_finishedFlag, nullptr ); - RMT.int_clr.val |= 1 << ( 3 * channel ); - } - } -} - -void IRAM_ATTR SmartLed::copyRmtHalfBlock() { - int offset = detail::MAX_PULSES * _halfIdx; - _halfIdx = !_halfIdx; - int len = 3 - _componentPosition + 3 * ( _count - 1 ); - len = std::min( len, detail::MAX_PULSES / 8 ); - - if ( !len ) { - for ( int i = 0; i < detail::MAX_PULSES; i++) { - RMTMEM.chan[ _channel].data32[i + offset ].val = 0; - } - } - - int i; - for ( i = 0; i != len && _pixelPosition != _count; i++ ) { - uint8_t val = _buffer[ _pixelPosition ].getGrb( _componentPosition ); - for ( int j = 0; j != 8; j++, val <<= 1 ) { - int bit = val >> 7; - int idx = i * 8 + offset + j; - RMTMEM.chan[ _channel ].data32[ idx ].val = _bitToRmt[ bit & 0x01 ].value; - } - if ( _pixelPosition == _count - 1 && _componentPosition == 2 ) { - RMTMEM.chan[ _channel ].data32[ i * 8 + offset + 7 ].duration1 = - _timing.TRS / ( detail::RMT_DURATION_NS * detail::DIVIDER ); - } - - _componentPosition++; - if ( _componentPosition == 3 ) { - _componentPosition = 0; - _pixelPosition++; - } - } - - for ( i *= 8; i != detail::MAX_PULSES; i++ ) { - RMTMEM.chan[ _channel ].data32[ i + offset ].val = 0; - } -} diff --git a/code/main/SmartLeds.h b/code/main/SmartLeds.h deleted file mode 100644 index 824eb337..00000000 --- a/code/main/SmartLeds.h +++ /dev/null @@ -1,530 +0,0 @@ -#pragma once - -/* - * A C++ driver for the WS2812 LEDs using the RMT peripheral on the ESP32. - * - * Jan "yaqwsx" Mrázek - * - * Based on the work by Martin F. Falatic - https://github.com/FozzTexx/ws2812-demo - */ - -/* - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include -#include -#include - -#if defined ( ARDUINO ) - extern "C" { // ...someone forgot to put in the includes... - #include "esp32-hal.h" - #include "esp_intr_alloc.h" - #include "esp_ipc.h" - #include "driver/gpio.h" - #include "driver/periph_ctrl.h" - #include "freertos/semphr.h" - #include "soc/rmt_struct.h" - #include - #include "esp_idf_version.h" -#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL( 4, 0, 0 ) - #include "soc/dport_reg.h" -#endif - } -#elif defined ( ESP_PLATFORM ) - extern "C" { // ...someone forgot to put in the includes... - #include - #include - #include - #include - #include - #include - #include - #include - #include - } - #include -#endif - -#include "Color.h" - -namespace detail { - -struct TimingParams { - uint32_t T0H; - uint32_t T1H; - uint32_t T0L; - uint32_t T1L; - uint32_t TRS; -}; - -union RmtPulsePair { - struct { - int duration0:15; - int level0:1; - int duration1:15; - int level1:1; - }; - uint32_t value; -}; - -static const int DIVIDER = 4; // 8 still seems to work, but timings become marginal -static const int MAX_PULSES = 32; // A channel has a 64 "pulse" buffer - we use half per pass -static const double RMT_DURATION_NS = 12.5; // minimum time of a single RMT duration based on clock ns - -} // namespace detail - -using LedType = detail::TimingParams; - -static const LedType LED_WS2812 = { 350, 700, 800, 600, 50000 }; -static const LedType LED_WS2812B = { 400, 850, 850, 400, 50100 }; -static const LedType LED_SK6812 = { 300, 600, 900, 600, 80000 }; -static const LedType LED_WS2813 = { 350, 800, 350, 350, 300000 }; - -enum BufferType { SingleBuffer = 0, DoubleBuffer }; - -enum IsrCore { CoreFirst = 0, CoreSecond = 1, CoreCurrent = 2}; - -class SmartLed { -public: - // The RMT interrupt must not run on the same core as WiFi interrupts, otherwise SmartLeds - // can't fill the RMT buffer fast enough, resulting in rendering artifacts. - // Usually, that means you have to set isrCore == CoreSecond. - // - // If you use anything other than CoreCurrent, the FreeRTOS scheduler MUST be already running, - // so you can't use it if you define SmartLed as global variable. - SmartLed( const LedType& type, int count, int pin, int channel = 0, BufferType doubleBuffer = SingleBuffer, IsrCore isrCore = CoreCurrent) - : _timing( type ), - _channel( channel ), - _count( count ), - _firstBuffer( new Rgb[ count ] ), - _secondBuffer( doubleBuffer ? new Rgb[ count ] : nullptr ), - _finishedFlag( xSemaphoreCreateBinary() ) - { - assert( channel >= 0 && channel < 8 ); - assert( ledForChannel( channel ) == nullptr ); - - xSemaphoreGive( _finishedFlag ); - - DPORT_SET_PERI_REG_MASK( DPORT_PERIP_CLK_EN_REG, DPORT_RMT_CLK_EN ); - DPORT_CLEAR_PERI_REG_MASK( DPORT_PERIP_RST_EN_REG, DPORT_RMT_RST ); - - PIN_FUNC_SELECT( GPIO_PIN_MUX_REG[ pin ], 2 ); - gpio_set_direction( static_cast< gpio_num_t >( pin ), GPIO_MODE_OUTPUT ); - gpio_matrix_out( static_cast< gpio_num_t >( pin ), RMT_SIG_OUT0_IDX + _channel, 0, 0 ); - initChannel( _channel ); - - RMT.tx_lim_ch[ _channel ].limit = detail::MAX_PULSES; - RMT.int_ena.val |= 1 << ( 24 + _channel ); - RMT.int_ena.val |= 1 << ( 3 * _channel ); - - _bitToRmt[ 0 ].level0 = 1; - _bitToRmt[ 0 ].level1 = 0; - _bitToRmt[ 0 ].duration0 = _timing.T0H / ( detail::RMT_DURATION_NS * detail::DIVIDER ); - _bitToRmt[ 0 ].duration1 = _timing.T0L / ( detail::RMT_DURATION_NS * detail::DIVIDER ); - - _bitToRmt[ 1 ].level0 = 1; - _bitToRmt[ 1 ].level1 = 0; - _bitToRmt[ 1 ].duration0 = _timing.T1H / ( detail::RMT_DURATION_NS * detail::DIVIDER ); - _bitToRmt[ 1 ].duration1 = _timing.T1L / ( detail::RMT_DURATION_NS * detail::DIVIDER ); - - if ( !anyAlive() ) { - _interruptCore = isrCore; - if(isrCore != CoreCurrent) { - ESP_ERROR_CHECK(esp_ipc_call_blocking(isrCore, registerInterrupt, NULL)); - } else { - registerInterrupt(NULL); - } - } - - ledForChannel( channel ) = this; - } - - ~SmartLed() { - ledForChannel( _channel ) = nullptr; - if ( !anyAlive() ) { - if(_interruptCore != CoreCurrent) { - ESP_ERROR_CHECK(esp_ipc_call_blocking(_interruptCore, unregisterInterrupt, NULL)); - } else { - unregisterInterrupt(NULL); - } - } - vSemaphoreDelete( _finishedFlag ); - } - - Rgb& operator[]( int idx ) { - return _firstBuffer[ idx ]; - } - - const Rgb& operator[]( int idx ) const { - return _firstBuffer[ idx ]; - } - - void show() { - _buffer = _firstBuffer.get(); - startTransmission(); - swapBuffers(); - } - - bool wait( TickType_t timeout = portMAX_DELAY ) { - if( xSemaphoreTake( _finishedFlag, timeout ) == pdTRUE ) { - xSemaphoreGive( _finishedFlag ); - return true; - } - return false; - } - - int size() const { - return _count; - } - - Rgb *begin() { return _firstBuffer.get(); } - const Rgb *begin() const { return _firstBuffer.get(); } - const Rgb *cbegin() const { return _firstBuffer.get(); } - - Rgb *end() { return _firstBuffer.get() + _count; } - const Rgb *end() const { return _firstBuffer.get() + _count; } - const Rgb *cend() const { return _firstBuffer.get() + _count; } - -private: - static intr_handle_t _interruptHandle; - static IsrCore _interruptCore; - - static void initChannel( int channel ) { - RMT.apb_conf.fifo_mask = 1; //enable memory access, instead of FIFO mode. - RMT.apb_conf.mem_tx_wrap_en = 1; //wrap around when hitting end of buffer - RMT.conf_ch[ channel ].conf0.div_cnt = detail::DIVIDER; - RMT.conf_ch[ channel ].conf0.mem_size = 1; - RMT.conf_ch[ channel ].conf0.carrier_en = 0; - RMT.conf_ch[ channel ].conf0.carrier_out_lv = 1; - RMT.conf_ch[ channel ].conf0.mem_pd = 0; - - RMT.conf_ch[ channel ].conf1.rx_en = 0; - RMT.conf_ch[ channel ].conf1.mem_owner = 0; - RMT.conf_ch[ channel ].conf1.tx_conti_mode = 0; //loop back mode. - RMT.conf_ch[ channel ].conf1.ref_always_on = 1; // use apb clock: 80M - RMT.conf_ch[ channel ].conf1.idle_out_en = 1; - RMT.conf_ch[ channel ].conf1.idle_out_lv = 0; - } - - static void registerInterrupt(void *) { - ESP_ERROR_CHECK(esp_intr_alloc( ETS_RMT_INTR_SOURCE, 0, interruptHandler, nullptr, &_interruptHandle)); - } - - static void unregisterInterrupt(void*) { - esp_intr_free( _interruptHandle ); - } - - static SmartLed*& IRAM_ATTR ledForChannel( int channel ); - static void IRAM_ATTR interruptHandler( void* ); - - void IRAM_ATTR copyRmtHalfBlock(); - - void swapBuffers() { - if ( _secondBuffer ) - _firstBuffer.swap( _secondBuffer ); - } - - void startTransmission() { - // Invalid use of the library - if( xSemaphoreTake( _finishedFlag, 0 ) != pdTRUE ) - abort(); - - _pixelPosition = _componentPosition = _halfIdx = 0; - copyRmtHalfBlock(); - if ( _pixelPosition < _count ) - copyRmtHalfBlock(); - - RMT.conf_ch[ _channel ].conf1.mem_rd_rst = 1; - RMT.conf_ch[ _channel ].conf1.tx_start = 1; - } - - static bool anyAlive() { - for ( int i = 0; i != 8; i++ ) - if ( ledForChannel( i ) != nullptr ) return true; - return false; - } - - const LedType& _timing; - int _channel; - detail::RmtPulsePair _bitToRmt[ 2 ]; - int _count; - std::unique_ptr< Rgb[] > _firstBuffer; - std::unique_ptr< Rgb[] > _secondBuffer; - Rgb *_buffer; - - xSemaphoreHandle _finishedFlag; - - int _pixelPosition; - int _componentPosition; - int _halfIdx; -}; - -class Apa102 { -public: - struct ApaRgb { - ApaRgb( uint8_t r = 0, uint8_t g = 0, uint32_t b = 0, uint32_t v = 0xFF ) - : v( 0xE0 | v ), b( b ), g( g ), r( r ) - {} - - ApaRgb& operator=( const Rgb& o ) { - r = o.r; - g = o.g; - b = o.b; - return *this; - } - - ApaRgb& operator=( const Hsv& o ) { - *this = Rgb{ o }; - return *this; - } - - uint8_t v, b, g, r; - }; - - static const int FINAL_FRAME_SIZE = 4; - static const int TRANS_COUNT = 2 + 8; - - Apa102( int count, int clkpin, int datapin, BufferType doubleBuffer = SingleBuffer ) - : _count( count ), - _firstBuffer( new ApaRgb[ count ] ), - _secondBuffer( doubleBuffer ? new ApaRgb[ count ] : nullptr ), - _initFrame( 0 ) - { - spi_bus_config_t buscfg; - memset( &buscfg, 0, sizeof( buscfg ) ); - buscfg.mosi_io_num = datapin; - buscfg.miso_io_num = -1; - buscfg.sclk_io_num = clkpin; - buscfg.quadwp_io_num = -1; - buscfg.quadhd_io_num = -1; - buscfg.max_transfer_sz = 65535; - - spi_device_interface_config_t devcfg; - memset( &devcfg, 0, sizeof( devcfg ) ); - devcfg.clock_speed_hz = 1000000; - devcfg.mode = 0; - devcfg.spics_io_num = -1; - devcfg.queue_size = TRANS_COUNT; - devcfg.pre_cb = nullptr; - - auto ret = spi_bus_initialize( HSPI_HOST, &buscfg, 1 ); - assert( ret == ESP_OK ); - - ret = spi_bus_add_device( HSPI_HOST, &devcfg, &_spi ); - assert( ret == ESP_OK ); - - std::fill_n( _finalFrame, FINAL_FRAME_SIZE, 0xFFFFFFFF ); - } - - ~Apa102() { - // ToDo - } - - ApaRgb& operator[]( int idx ) { - return _firstBuffer[ idx ]; - } - - const ApaRgb& operator[]( int idx ) const { - return _firstBuffer[ idx ]; - } - - void show() { - _buffer = _firstBuffer.get(); - startTransmission(); - swapBuffers(); - } - - void wait() { - for ( int i = 0; i != _transCount; i++ ) { - spi_transaction_t *t; - spi_device_get_trans_result( _spi, &t, portMAX_DELAY ); - } - } -private: - void swapBuffers() { - if ( _secondBuffer ) - _firstBuffer.swap( _secondBuffer ); - } - - void startTransmission() { - for ( int i = 0; i != TRANS_COUNT; i++ ) { - _transactions[ i ].cmd = 0; - _transactions[ i ].addr = 0; - _transactions[ i ].flags = 0; - _transactions[ i ].rxlength = 0; - _transactions[ i ].rx_buffer = nullptr; - } - // Init frame - _transactions[ 0 ].length = 32; - _transactions[ 0 ].tx_buffer = &_initFrame; - spi_device_queue_trans( _spi, _transactions + 0, portMAX_DELAY ); - // Data - _transactions[ 1 ].length = 32 * _count; - _transactions[ 1 ].tx_buffer = _buffer; - spi_device_queue_trans( _spi, _transactions + 1, portMAX_DELAY ); - _transCount = 2; - // End frame - for ( int i = 0; i != 1 + _count / 32 / FINAL_FRAME_SIZE; i++ ) { - _transactions[ 2 + i ].length = 32 * FINAL_FRAME_SIZE; - _transactions[ 2 + i ].tx_buffer = _finalFrame; - spi_device_queue_trans( _spi, _transactions + 2 + i, portMAX_DELAY ); - _transCount++; - } - } - - spi_device_handle_t _spi; - int _count; - std::unique_ptr< ApaRgb[] > _firstBuffer, _secondBuffer; - ApaRgb *_buffer; - - spi_transaction_t _transactions[ TRANS_COUNT ]; - int _transCount; - - uint32_t _initFrame; - uint32_t _finalFrame[ FINAL_FRAME_SIZE ]; -}; - -class LDP8806 { -public: - struct LDP8806_GRB { - - LDP8806_GRB( uint8_t g_7bit = 0, uint8_t r_7bit = 0, uint32_t b_7bit = 0 ) - : g( g_7bit ), r( r_7bit ), b( b_7bit ) - { - } - - LDP8806_GRB& operator=( const Rgb& o ) { - //Convert 8->7bit colour - r = ( o.r * 127 / 256 ) | 0x80; - g = ( o.g * 127 / 256 ) | 0x80; - b = ( o.b * 127 / 256 ) | 0x80; - return *this; - } - - LDP8806_GRB& operator=( const Hsv& o ) { - *this = Rgb{ o }; - return *this; - } - - uint8_t g, r, b; - }; - - static const int LED_FRAME_SIZE_BYTES = sizeof( LDP8806_GRB ); - static const int LATCH_FRAME_SIZE_BYTES = 3; - static const int TRANS_COUNT_MAX = 20;//Arbitrary, supports up to 600 LED - - LDP8806( int count, int clkpin, int datapin, BufferType doubleBuffer = SingleBuffer, uint32_t clock_speed_hz = 2000000 ) - : _count( count ), - _firstBuffer( new LDP8806_GRB[ count ] ), - _secondBuffer( doubleBuffer ? new LDP8806_GRB[ count ] : nullptr ), - // one 'latch'/start-of-data mark frame for every 32 leds - _latchFrames( ( count + 31 ) / 32 ) - { - spi_bus_config_t buscfg; - memset( &buscfg, 0, sizeof( buscfg ) ); - buscfg.mosi_io_num = datapin; - buscfg.miso_io_num = -1; - buscfg.sclk_io_num = clkpin; - buscfg.quadwp_io_num = -1; - buscfg.quadhd_io_num = -1; - buscfg.max_transfer_sz = 65535; - - spi_device_interface_config_t devcfg; - memset( &devcfg, 0, sizeof( devcfg ) ); - devcfg.clock_speed_hz = clock_speed_hz; - devcfg.mode = 0; - devcfg.spics_io_num = -1; - devcfg.queue_size = TRANS_COUNT_MAX; - devcfg.pre_cb = nullptr; - - auto ret = spi_bus_initialize( HSPI_HOST, &buscfg, 1 ); - assert( ret == ESP_OK ); - - ret = spi_bus_add_device( HSPI_HOST, &devcfg, &_spi ); - assert( ret == ESP_OK ); - - std::fill_n( _latchBuffer, LATCH_FRAME_SIZE_BYTES, 0x0 ); - } - - ~LDP8806() { - // noop - } - - LDP8806_GRB& operator[]( int idx ) { - return _firstBuffer[ idx ]; - } - - const LDP8806_GRB& operator[]( int idx ) const { - return _firstBuffer[ idx ]; - } - - void show() { - _buffer = _firstBuffer.get(); - startTransmission(); - swapBuffers(); - } - - void wait() { - while ( _transCount-- ) { - spi_transaction_t *t; - spi_device_get_trans_result( _spi, &t, portMAX_DELAY ); - } - } -private: - void swapBuffers() { - if ( _secondBuffer ) - _firstBuffer.swap( _secondBuffer ); - } - - void startTransmission() { - _transCount = 0; - for ( int i = 0; i != TRANS_COUNT_MAX; i++ ) { - _transactions[ i ].cmd = 0; - _transactions[ i ].addr = 0; - _transactions[ i ].flags = 0; - _transactions[ i ].rxlength = 0; - _transactions[ i ].rx_buffer = nullptr; - } - // LED Data - _transactions[ 0 ].length = ( LED_FRAME_SIZE_BYTES * 8 ) * _count; - _transactions[ 0 ].tx_buffer = _buffer; - spi_device_queue_trans( _spi, _transactions + _transCount, portMAX_DELAY ); - _transCount++; - - // 'latch'/start-of-data marker frames - for ( int i = 0; i < _latchFrames; i++ ) { - _transactions[ _transCount ].length = ( LATCH_FRAME_SIZE_BYTES * 8 ); - _transactions[ _transCount ].tx_buffer = _latchBuffer; - spi_device_queue_trans( _spi, _transactions + _transCount, portMAX_DELAY ); - _transCount++; - } - } - - spi_device_handle_t _spi; - int _count; - std::unique_ptr< LDP8806_GRB[] > _firstBuffer, _secondBuffer; - LDP8806_GRB *_buffer; - - spi_transaction_t _transactions[ TRANS_COUNT_MAX ]; - int _transCount; - - int _latchFrames; - uint8_t _latchBuffer[ LATCH_FRAME_SIZE_BYTES ]; -}; diff --git a/code/main/version.cpp b/code/main/version.cpp index 85a37164..e0b9b140 100644 --- a/code/main/version.cpp +++ b/code/main/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="be90240"; +const char* GIT_REV="4fe9ab9"; const char* GIT_TAG=""; const char* GIT_BRANCH="master"; -const char* BUILD_TIME="2021-10-23 16:33"; \ No newline at end of file +const char* BUILD_TIME="2021-11-14 08:39"; \ No newline at end of file diff --git a/code/version.cpp b/code/version.cpp index 85a37164..e0b9b140 100644 --- a/code/version.cpp +++ b/code/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="be90240"; +const char* GIT_REV="4fe9ab9"; const char* GIT_TAG=""; const char* GIT_BRANCH="master"; -const char* BUILD_TIME="2021-10-23 16:33"; \ No newline at end of file +const char* BUILD_TIME="2021-11-14 08:39"; \ No newline at end of file diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin index 02cb4166a63fcbe0866eca0a64801d448db5945b..f8f0fda78adbc0bb415b578af384d26e113d4086 100644 GIT binary patch delta 61 zcmdmRlyL(P$q929SXh}DSeY73W@M4rY$qJ(ulPo8*B!xq9%U91u5w$|PaYIszN*V% RXW#`rH^28Y7y1gO0|1Vy7V-c9 delta 61 zcmdmRlyL(P$q929npqi}SeY14W@M4rY$qJ(ulVSX`p;tdogaeiwx7QoVHNgl_rzZ2 R)VJ9W*Q|OyU!%bI0sz&=8rc8< diff --git a/firmware/firmware.bin b/firmware/firmware.bin index 1e30840b8f9e0fefa41b99879839ee15c9337908..9719ccb487589e1763e012dddd38571e1e1fb0ff 100644 GIT binary patch delta 71560 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 delta 71776 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

og@yzS3mlWkRie-vVqtj(jpEqvn)QSk82I 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 DV9^*( diff --git a/firmware/html.zip b/firmware/html.zip index 36896475b156885cef2046c1eb0da31c5f4df0e9..e4a81000567c04f896efcc7c45c4c3e8b0f50f41 100644 GIT binary patch delta 538 zcmXBPPiT^190zcJzgNwFHMdFNAx4)DL7mXyJNf}8vkX<%n zZuOwTszdA~6|eUAzMdpxW9+ag!iY{m2dfoEqIBx_Jn!kl^L(G@`+J`3z>ys|T+!Q# z*<&)9Y^GlEgR7JTpQ%X+Fk$WCY;TV0^@40 z{a74Y_zXkDVkZs6ukW{z2%Jm`9{$b?PXAE_^}i8;rT+*ZuBHbwUMTWU!!UNNMBXL% zw+`f~foA;heC_xbi+Yl(?Bsj$SLBx>Y`u zkMS%m%9~qgr-}T-4xXk}`HvUqMo96&OB{75Zwm?Ltl&5WfeKz9f-);=I0Y(eYZxU? zR547%t2j+OA;f2}PgT4`=i@b*UaisH5X%cx*0S)uk$vVY9$LJ&uydJ3Emj37R_CbF z{4U3^_zN~s$Me+gW*q~>b{#K5kbM=!AoJ^T)Vz)%%AVZGO^nFbXH8kwO}z3S7a_Zz