diff --git a/.gitmodules b/.gitmodules index f166888..bd397b5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,13 @@ [submodule "lib/webp/libwebp"] path = lib/webp/libwebp url = https://github.com/webmproject/libwebp.git +[submodule "components/esp-audio-player"] + path = components/esp-audio-player + url = git@github.com:chmorgan/esp-audio-player.git +[submodule "components/esp-libhelix-mp3"] + path = components/esp-libhelix-mp3 + url = git@github.com:chmorgan/esp-libhelix-mp3.git +[submodule "lib/HUB75"] + path = lib/HUB75 + url = git@github.com:tidbyt/ESP32-HUB75-MatrixPanel-I2S-DMA.git + branch = rohan/esp-idf-5 diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fd4ee4..98145a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,8 @@ cmake_minimum_required(VERSION 3.16.0) include($ENV{IDF_PATH}/tools/cmake/project.cmake) +list( + APPEND + EXTRA_COMPONENT_DIRS + components + lib/HUB75) project(firmware) diff --git a/components/esp-audio-player b/components/esp-audio-player new file mode 160000 index 0000000..916bc82 --- /dev/null +++ b/components/esp-audio-player @@ -0,0 +1 @@ +Subproject commit 916bc82aaa7a342fb1f4b908bc66df89055ce70e diff --git a/components/esp-libhelix-mp3 b/components/esp-libhelix-mp3 new file mode 160000 index 0000000..a6cd3f4 --- /dev/null +++ b/components/esp-libhelix-mp3 @@ -0,0 +1 @@ +Subproject commit a6cd3f4b03c03c72d7ace1ec0f89d280f94bf10e diff --git a/dependencies.lock b/dependencies.lock index 36a9898..c07a8f4 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -1,9 +1,15 @@ dependencies: + chmorgan/esp-libhelix-mp3: + component_hash: cbb76089dc2c5749f7b470e2e70aedc44c9da519e04eb9a67d4c7ec275229e53 + source: + service_url: https://api.components.espressif.com/ + type: service + version: 1.0.3 idf: component_hash: null source: type: idf - version: 4.4.4 -manifest_hash: 81327a7819f5bc7bf271896e30d778a5c5f8f8f754dfbc8e245723b4a37d3107 + version: 5.3.0 +manifest_hash: 457b0ef96cde12dc161597c3aace929636c8878d5cd57802659397e616b041d1 target: esp32 version: 1.0.0 diff --git a/lib/HUB75 b/lib/HUB75 new file mode 160000 index 0000000..8f284af --- /dev/null +++ b/lib/HUB75 @@ -0,0 +1 @@ +Subproject commit 8f284afe7ba4ff369a4427121338e1673026320e diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/.github/workflows/pio_build.yml b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/.github/workflows/pio_build.yml deleted file mode 100644 index 39901f9..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/.github/workflows/pio_build.yml +++ /dev/null @@ -1,48 +0,0 @@ -# Build examples with Platformio -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -# https://docs.platformio.org/en/latest/integration/ci/github-actions.html - -name: PlatformIO CI - -on: - push: - branches: [ master, dev ] - pull_request: - branches: [ master, dev ] - -jobs: - build: - - runs-on: ubuntu-latest - strategy: - matrix: - example: - - "examples/PIO_TestPatterns" - - steps: - - uses: actions/checkout@v2 - - name: Cache pip - uses: actions/cache@v2 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} - restore-keys: ${{ runner.os }}-pip- - - name: Cache PlatformIO - uses: actions/cache@v2 - with: - path: ~/.platformio - key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - python-version: '3.x' - - name: Install Platformio - run: | - python -m pip install --upgrade pip - pip install --upgrade platformio - pio update - - name: Run PlatformIO - env: - PLATFORMIO_CI_SRC: ${{ matrix.example }} - run: | - pio ci -c ${{ matrix.example }}/platformio.ini \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/CMakeLists.txt b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/CMakeLists.txt deleted file mode 100644 index c216185..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -# HUB75 RGB LED matrix library utilizing ESP32 DMA Engine -# https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA -# MIT License - -cmake_minimum_required(VERSION 3.5) - -idf_component_register(SRCS "esp32_i2s_parallel_dma.c" "ESP32-HUB75-MatrixPanel-I2S-DMA.cpp" "ESP32-HUB75-MatrixPanel-leddrivers.cpp" - INCLUDE_DIRS "." - REQUIRES arduino Adafruit-GFX-Library) - -# In case you are running into issues with "missing" header files from 3rd party libraries -# you can add them to the REQUIRES section above. If you use some of the build options below -# you probably want to remove (NO_GFX) or replace Adafruit-GFX-Library (USE_GFX_ROOT) - -# Example to build with USE_GFX_ROOT or NO_GFX / just uncomment the appropriate line -# target_compile_options(${COMPONENT_TARGET} PUBLIC -DUSE_GFX_ROOT) -# target_compile_options(${COMPONENT_TARGET} PUBLIC -DNO_GFX) - -# You can also use multiple options like this -# target_compile_options(${COMPONENT_TARGET} PUBLIC -DNO_GFX -DNO_FAST_FUNCTIONS) - -# All options can be found here: -# https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/blob/master/doc/BuildOptions.md - -project(ESP32-HUB75-MatrixPanel-I2S-DMA) diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp deleted file mode 100644 index 60df498..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp +++ /dev/null @@ -1,1035 +0,0 @@ -#include -#include "ESP32-HUB75-MatrixPanel-I2S-DMA.h" - - -#if defined(ESP32_SXXX) - #pragma message "Compiling for ESP32-Sx MCUs" -#elif defined(ESP32_CXXX) - #pragma message "Compiling for ESP32-Cx MCUs" -#elif CONFIG_IDF_TARGET_ESP32 || defined(ESP32) - #pragma message "Compiling for original (released 2016) 520kB SRAM ESP32." -#else - #error "Compiling for something unknown!" -#endif - - -// Credits: Louis Beaudoin -// and Sprite_TM: https://www.esp32.com/viewtopic.php?f=17&t=3188 and https://www.esp32.com/viewtopic.php?f=13&t=3256 - -/* - - This is example code to driver a p3(2121)64*32 -style RGB LED display. These types of displays do not have memory and need to be refreshed - continuously. The display has 2 RGB inputs, 4 inputs to select the active line, a pixel clock input, a latch enable input and an output-enable - input. The display can be seen as 2 64x16 displays consisting of the upper half and the lower half of the display. Each half has a separate - RGB pixel input, the rest of the inputs are shared. - - Each display half can only show one line of RGB pixels at a time: to do this, the RGB data for the line is input by setting the RGB input pins - to the desired value for the first pixel, giving the display a clock pulse, setting the RGB input pins to the desired value for the second pixel, - giving a clock pulse, etc. Do this 64 times to clock in an entire row. The pixels will not be displayed yet: until the latch input is made high, - the display will still send out the previously clocked in line. Pulsing the latch input high will replace the displayed data with the data just - clocked in. - - The 4 line select inputs select where the currently active line is displayed: when provided with a binary number (0-15), the latched pixel data - will immediately appear on this line. Note: While clocking in data for a line, the *previous* line is still displayed, and these lines should - be set to the value to reflect the position the *previous* line is supposed to be on. - - Finally, the screen has an OE input, which is used to disable the LEDs when latching new data and changing the state of the line select inputs: - doing so hides any artefacts that appear at this time. The OE line is also used to dim the display by only turning it on for a limited time every - line. - - All in all, an image can be displayed by 'scanning' the display, say, 100 times per second. The slowness of the human eye hides the fact that - only one line is showed at a time, and the display looks like every pixel is driven at the same time. - - Now, the RGB inputs for these types of displays are digital, meaning each red, green and blue subpixel can only be on or off. This leads to a - color palette of 8 pixels, not enough to display nice pictures. To get around this, we use binary code modulation. - - Binary code modulation is somewhat like PWM, but easier to implement in our case. First, we define the time we would refresh the display without - binary code modulation as the 'frame time'. For, say, a four-bit binary code modulation, the frame time is divided into 15 ticks of equal length. - - We also define 4 subframes (0 to 3), defining which LEDs are on and which LEDs are off during that subframe. (Subframes are the same as a - normal frame in non-binary-coded-modulation mode, but are showed faster.) From our (non-monochrome) input image, we take the (8-bit: bit 7 - to bit 0) RGB pixel values. If the pixel values have bit 7 set, we turn the corresponding LED on in subframe 3. If they have bit 6 set, - we turn on the corresponding LED in subframe 2, if bit 5 is set subframe 1, if bit 4 is set in subframe 0. - - Now, in order to (on average within a frame) turn a LED on for the time specified in the pixel value in the input data, we need to weigh the - subframes. We have 15 pixels: if we show subframe 3 for 8 of them, subframe 2 for 4 of them, subframe 1 for 2 of them and subframe 1 for 1 of - them, this 'automatically' happens. (We also distribute the subframes evenly over the ticks, which reduces flicker.) - - In this code, we use the I2S peripheral in parallel mode to achieve this. Essentially, first we allocate memory for all subframes. This memory - contains a sequence of all the signals (2xRGB, line select, latch enable, output enable) that need to be sent to the display for that subframe. - Then we ask the I2S-parallel driver to set up a DMA chain so the subframes are sent out in a sequence that satisfies the requirement that - subframe x has to be sent out for (2^x) ticks. Finally, we fill the subframes with image data. - - We use a front buffer/back buffer technique here to make sure the display is refreshed in one go and drawing artefacts do not reach the display. - In practice, for small displays this is not really necessarily. - -*/ - - -// macro's to calculate sizes of a single buffer (double buffer takes twice as this) -#define rowBitStructBuffSize sizeof(ESP32_I2S_DMA_STORAGE_TYPE) * (PIXELS_PER_ROW + CLKS_DURING_LATCH) * PIXEL_COLOR_DEPTH_BITS -#define frameStructBuffSize ROWS_PER_FRAME * rowBitStructBuffSize - -/* this replicates same function in rowBitStruct, but due to induced inlining it might be MUCH faster when used in tight loops - * while method from struct could be flushed out of instruction cache between loop cycles - * do NOT forget about buff_id param if using this - */ -#define getRowDataPtr(row, _dpth, buff_id) &(dma_buff.rowBits[row]->data[_dpth * dma_buff.rowBits[row]->width + buff_id*(dma_buff.rowBits[row]->width * dma_buff.rowBits[row]->color_depth)]) - -bool MatrixPanel_I2S_DMA::allocateDMAmemory() -{ - - /*** - * Step 1: Look at the overall DMA capable memory for the DMA FRAMEBUFFER data only (not the DMA linked list descriptors yet) - * and do some pre-checks. - */ - - int _num_frame_buffers = (m_cfg.double_buff) ? 2:1; - size_t _frame_buffer_memory_required = frameStructBuffSize * _num_frame_buffers; - size_t _dma_linked_list_memory_required = 0; - size_t _total_dma_capable_memory_reserved = 0; - - // 1. Calculate the amount of DMA capable memory that's actually available - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Panel Width: %d pixels.\r\n"), PIXELS_PER_ROW); - Serial.printf_P(PSTR("Panel Height: %d pixels.\r\n"), m_cfg.mx_height); - - if (m_cfg.double_buff) { - Serial.println(F("DOUBLE FRAME BUFFERS / DOUBLE BUFFERING IS ENABLED. DOUBLE THE RAM REQUIRED!")); - } - - Serial.println(F("DMA memory blocks available before any malloc's: ")); - heap_caps_print_heap_info(MALLOC_CAP_DMA); - Serial.println(F("******************************************************************")); - Serial.printf_P(PSTR("We're going to need %d bytes of SRAM just for the frame buffer(s).\r\n"), _frame_buffer_memory_required); - Serial.printf_P(PSTR("The total amount of DMA capable SRAM memory is %d bytes.\r\n"), heap_caps_get_free_size(MALLOC_CAP_DMA)); - Serial.printf_P(PSTR("Largest DMA capable SRAM memory block is %d bytes.\r\n"), heap_caps_get_largest_free_block(MALLOC_CAP_DMA)); - Serial.println(F("******************************************************************")); - - #endif - - // Can we potentially fit the framebuffer into the DMA capable memory that's available? - if ( heap_caps_get_free_size(MALLOC_CAP_DMA) < _frame_buffer_memory_required ) { - - #if SERIAL_DEBUG - Serial.printf_P(PSTR("######### Insufficient memory for requested resolution. Reduce MATRIX_COLOR_DEPTH and try again.\r\n\tAdditional %d bytes of memory required.\r\n\r\n"), (_frame_buffer_memory_required-heap_caps_get_free_size(MALLOC_CAP_DMA)) ); - #endif - - return false; - } - - // Alright, theoretically we should be OK, so let us do this, so - // lets allocate a chunk of memory for each row (a row could span multiple panels if chaining is in place) - dma_buff.rowBits.reserve(ROWS_PER_FRAME); - - // iterate through number of rows - for (int malloc_num =0; malloc_num < ROWS_PER_FRAME; ++malloc_num) - { - auto ptr = std::make_shared(PIXELS_PER_ROW, PIXEL_COLOR_DEPTH_BITS, m_cfg.double_buff); - - if (ptr->data == nullptr){ - #if SERIAL_DEBUG - Serial.printf_P(PSTR("ERROR: Couldn't malloc rowBitStruct %d! Critical fail.\r\n"), malloc_num); - #endif - return false; - // TODO: should we release all previous rowBitStructs here??? - } - - dma_buff.rowBits.emplace_back(ptr); // save new rowBitStruct into rows vector - ++dma_buff.rows; - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Malloc'ing %d bytes of memory @ address %ud for frame row %d.\r\n"), ptr->size()*_num_frame_buffers, (unsigned int)ptr->getDataPtr(), malloc_num); - #endif - - } - - _total_dma_capable_memory_reserved += _frame_buffer_memory_required; - - - /*** - * Step 2: Calculate the amount of memory required for the DMA engine's linked list descriptors. - * Credit to SmartMatrix for this stuff. - */ - - - // Calculate what colour depth is actually possible based on memory available vs. required DMA linked-list descriptors. - // aka. Calculate the lowest LSBMSB_TRANSITION_BIT value that will fit in memory - int numDMAdescriptorsPerRow = 0; - lsbMsbTransitionBit = 0; - - - while(1) { - numDMAdescriptorsPerRow = 1; - for(int i=lsbMsbTransitionBit + 1; i m_cfg.min_refresh_rate) - break; - - if(lsbMsbTransitionBit < PIXEL_COLOR_DEPTH_BITS - 1) - lsbMsbTransitionBit++; - else - break; - } - - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Raised lsbMsbTransitionBit to %d/%d to meet minimum refresh rate\r\n"), lsbMsbTransitionBit, PIXEL_COLOR_DEPTH_BITS - 1); - #endif - - #endif - - /*** - * Step 2a: lsbMsbTransition bit is now finalised - recalculate the DMA descriptor count required, which is used for - * memory allocation of the DMA linked list memory structure. - */ - numDMAdescriptorsPerRow = 1; - for(int i=lsbMsbTransitionBit + 1; i DMA_MAX ) { - - #if SERIAL_DEBUG - Serial.printf_P(PSTR("rowColorDepthStruct struct is too large, split DMA payload required. Adding %d DMA descriptors\n"), PIXEL_COLOR_DEPTH_BITS-1); - #endif - - numDMAdescriptorsPerRow += PIXEL_COLOR_DEPTH_BITS-1; - // Note: If numDMAdescriptorsPerRow is even just one descriptor too large, DMA linked list will not correctly loop. - } - - - /*** - * Step 3: Allocate memory for DMA linked list, linking up each framebuffer row in sequence for GPIO output. - */ - - _dma_linked_list_memory_required = numDMAdescriptorsPerRow * ROWS_PER_FRAME * _num_frame_buffers * sizeof(lldesc_t); - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Descriptors for lsbMsbTransitionBit of %d/%d with %d frame rows require %d bytes of DMA RAM with %d numDMAdescriptorsPerRow.\r\n"), lsbMsbTransitionBit, PIXEL_COLOR_DEPTH_BITS - 1, ROWS_PER_FRAME, _dma_linked_list_memory_required, numDMAdescriptorsPerRow); - #endif - - _total_dma_capable_memory_reserved += _dma_linked_list_memory_required; - - // Do a final check to see if we have enough space for the additional DMA linked list descriptors that will be required to link it all up! - if(_dma_linked_list_memory_required > heap_caps_get_largest_free_block(MALLOC_CAP_DMA)) { -#if SERIAL_DEBUG - Serial.println(F("ERROR: Not enough SRAM left over for DMA linked-list descriptor memory reservation! Oh so close!\r\n")); -#endif - return false; - } // linked list descriptors memory check - - // malloc the DMA linked list descriptors that i2s_parallel will need - desccount = numDMAdescriptorsPerRow * ROWS_PER_FRAME; - - //lldesc_t * dmadesc_a = (lldesc_t *)heap_caps_malloc(desccount * sizeof(lldesc_t), MALLOC_CAP_DMA); - dmadesc_a = (lldesc_t *)heap_caps_malloc(desccount * sizeof(lldesc_t), MALLOC_CAP_DMA); - assert("Can't allocate descriptor framebuffer a"); - if(!dmadesc_a) { -#if SERIAL_DEBUG - Serial.println(F("ERROR: Could not malloc descriptor framebuffer a.")); -#endif - return false; - } - - if (m_cfg.double_buff) // reserve space for second framebuffer linked list - { - //lldesc_t * dmadesc_b = (lldesc_t *)heap_caps_malloc(desccount * sizeof(lldesc_t), MALLOC_CAP_DMA); - dmadesc_b = (lldesc_t *)heap_caps_malloc(desccount * sizeof(lldesc_t), MALLOC_CAP_DMA); - assert("Could not malloc descriptor framebuffer b."); - if(!dmadesc_b) { -#if SERIAL_DEBUG - Serial.println(F("ERROR: Could not malloc descriptor framebuffer b.")); -#endif - return false; - } - } - -#if SERIAL_DEBUG - Serial.println(F("*** ESP32-HUB75-MatrixPanel-I2S-DMA: Memory Allocations Complete ***")); - Serial.printf_P(PSTR("Total memory that was reserved: %d kB.\r\n"), _total_dma_capable_memory_reserved/1024); - Serial.printf_P(PSTR("... of which was used for the DMA Linked List(s): %d kB.\r\n"), _dma_linked_list_memory_required/1024); - - Serial.printf_P(PSTR("Heap Memory Available: %d bytes total. Largest free block: %d bytes.\r\n"), heap_caps_get_free_size(0), heap_caps_get_largest_free_block(0)); - Serial.printf_P(PSTR("General RAM Available: %d bytes total. Largest free block: %d bytes.\r\n"), heap_caps_get_free_size(MALLOC_CAP_DEFAULT), heap_caps_get_largest_free_block(MALLOC_CAP_DEFAULT)); -#endif - - // Just os we know - initialized = true; - - return true; - -} // end allocateDMAmemory() - - - -void MatrixPanel_I2S_DMA::configureDMA(const HUB75_I2S_CFG& _cfg) -{ - #if SERIAL_DEBUG - Serial.println(F("configureDMA(): Starting configuration of DMA engine.\r\n")); - #endif - - - lldesc_t *previous_dmadesc_a = 0; - lldesc_t *previous_dmadesc_b = 0; - int current_dmadescriptor_offset = 0; - - // HACK: If we need to split the payload in 1/2 so that it doesn't breach DMA_MAX, lets do it by the color_depth. - int num_dma_payload_color_depths = PIXEL_COLOR_DEPTH_BITS; - if ( rowBitStructBuffSize > DMA_MAX ) { - num_dma_payload_color_depths = 1; - } - - // Fill DMA linked lists for both frames (as in, halves of the HUB75 panel) and if double buffering is enabled, link it up for both buffers. - for(int row = 0; row < ROWS_PER_FRAME; row++) { - - #if SERIAL_DEBUG - Serial.printf_P(PSTR( "Row %d DMA payload of %d bytes. DMA_MAX is %d.\n"), row, dma_buff.rowBits[row]->size(), DMA_MAX); - #endif - - - // first set of data is LSB through MSB, single pass (IF TOTAL SIZE < DMA_MAX) - all color bits are displayed once, which takes care of everything below and including LSBMSB_TRANSITION_BIT - // NOTE: size must be less than DMA_MAX - worst case for library: 16-bpp with 256 pixels per row would exceed this, need to break into two - link_dma_desc(&dmadesc_a[current_dmadescriptor_offset], previous_dmadesc_a, dma_buff.rowBits[row]->getDataPtr(), dma_buff.rowBits[row]->size(num_dma_payload_color_depths)); - previous_dmadesc_a = &dmadesc_a[current_dmadescriptor_offset]; - - if (m_cfg.double_buff) { - link_dma_desc(&dmadesc_b[current_dmadescriptor_offset], previous_dmadesc_b, dma_buff.rowBits[row]->getDataPtr(0, 1), dma_buff.rowBits[row]->size(num_dma_payload_color_depths)); - previous_dmadesc_b = &dmadesc_b[current_dmadescriptor_offset]; } - - current_dmadescriptor_offset++; - - // If the number of pixels per row is too great for the size of a DMA payload, so we need to split what we were going to send above. - if ( rowBitStructBuffSize > DMA_MAX ) - { - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Splitting DMA payload for %d color depths into %d byte payloads.\r\n"), PIXEL_COLOR_DEPTH_BITS-1, rowBitStructBuffSize/PIXEL_COLOR_DEPTH_BITS ); - #endif - - for (int cd = 1; cd < PIXEL_COLOR_DEPTH_BITS; cd++) - { - // first set of data is LSB through MSB, single pass - all color bits are displayed once, which takes care of everything below and including LSBMSB_TRANSITION_BIT - // TODO: size must be less than DMA_MAX - worst case for library: 16-bpp with 256 pixels per row would exceed this, need to break into two - link_dma_desc(&dmadesc_a[current_dmadescriptor_offset], previous_dmadesc_a, dma_buff.rowBits[row]->getDataPtr(cd, 0), dma_buff.rowBits[row]->size(num_dma_payload_color_depths) ); - previous_dmadesc_a = &dmadesc_a[current_dmadescriptor_offset]; - - if (m_cfg.double_buff) { - link_dma_desc(&dmadesc_b[current_dmadescriptor_offset], previous_dmadesc_b, dma_buff.rowBits[row]->getDataPtr(cd, 1), dma_buff.rowBits[row]->size(num_dma_payload_color_depths)); - previous_dmadesc_b = &dmadesc_b[current_dmadescriptor_offset]; } - - current_dmadescriptor_offset++; - - } // additional linked list items - } // row depth struct - - - for(int i=lsbMsbTransitionBit + 1; igetDataPtr(i, 0), dma_buff.rowBits[row]->size(PIXEL_COLOR_DEPTH_BITS - i) ); - previous_dmadesc_a = &dmadesc_a[current_dmadescriptor_offset]; - - if (m_cfg.double_buff) { - link_dma_desc(&dmadesc_b[current_dmadescriptor_offset], previous_dmadesc_b, dma_buff.rowBits[row]->getDataPtr(i, 1), dma_buff.rowBits[row]->size(PIXEL_COLOR_DEPTH_BITS - i) ); - previous_dmadesc_b = &dmadesc_b[current_dmadescriptor_offset]; - } - - current_dmadescriptor_offset++; - - } // end color depth ^ 2 linked list - } // end color depth loop - - } // end frame rows - - #if SERIAL_DEBUG - Serial.printf_P(PSTR("configureDMA(): Configured LL structure. %d DMA Linked List descriptors populated.\r\n"), current_dmadescriptor_offset); - - if ( desccount != current_dmadescriptor_offset) - { - Serial.printf_P(PSTR("configureDMA(): ERROR! Expected descriptor count of %d != actual DMA descriptors of %d!\r\n"), desccount, current_dmadescriptor_offset); - } - #endif - - //End markers for DMA LL - dmadesc_a[desccount-1].eof = 1; - dmadesc_a[desccount-1].qe.stqe_next=(lldesc_t*)&dmadesc_a[0]; - - if (m_cfg.double_buff) { - dmadesc_b[desccount-1].eof = 1; - dmadesc_b[desccount-1].qe.stqe_next=(lldesc_t*)&dmadesc_b[0]; - } else { - dmadesc_b = dmadesc_a; // link to same 'a' buffer - } - -#if SERIAL_DEBUG - Serial.println(F("Performing I2S setup:")); -#endif - - i2s_parallel_config_t dma_cfg = { - .gpio_bus={_cfg.gpio.r1, _cfg.gpio.g1, _cfg.gpio.b1, _cfg.gpio.r2, _cfg.gpio.g2, _cfg.gpio.b2, _cfg.gpio.lat, _cfg.gpio.oe, _cfg.gpio.a, _cfg.gpio.b, _cfg.gpio.c, _cfg.gpio.d, _cfg.gpio.e, -1, -1, -1}, - .gpio_clk=_cfg.gpio.clk, - .sample_rate=_cfg.i2sspeed, - .sample_width=ESP32_I2S_DMA_MODE, - .desccount_a=desccount, - .lldesc_a=dmadesc_a, - .desccount_b=desccount, - .lldesc_b=dmadesc_b, - .clkphase=_cfg.clkphase, - .int_ena_out_eof=_cfg.double_buff - }; - - // Setup I2S - i2s_parallel_driver_install(ESP32_I2S_DEVICE, &dma_cfg); - i2s_parallel_send_dma(ESP32_I2S_DEVICE, &dmadesc_a[0]); - - #if SERIAL_DEBUG - Serial.println(F("configureDMA(): DMA setup completed on ESP32_I2S_DEVICE.")); - #endif - -} // end initMatrixDMABuff - - -/* There are 'bits' set in the frameStruct that we simply don't need to set every single time we change a pixel / DMA buffer co-ordinate. - * For example, the bits that determine the address lines, we don't need to set these every time. Once they're in place, and assuming we - * don't accidentally clear them, then we don't need to set them again. - * So to save processing, we strip this logic out to the absolute bare minimum, which is toggling only the R,G,B pixels (bits) per co-ord. - * - * Critical dependency: That 'updateMatrixDMABuffer(uint8_t red, uint8_t green, uint8_t blue)' has been run at least once over the - * entire frameBuffer to ensure all the non R,G,B bitmasks are in place (i.e. like OE, Address Lines etc.) - * - * Note: If you change the brightness with setBrightness() you MUST then clearScreen() and repaint / flush the entire framebuffer. - */ - -/** @brief - Update pixel at specific co-ordinate in the DMA buffer - * this is the main method used to update DMA buffer on pixel-by-pixel level so it must be fast, real fast! - * Let's put it into IRAM to avoid situations when it could be flushed out of instruction cache - * and had to be read from spi-flash over and over again. - * Yes, it is always a tradeoff between memory/speed/size, but compared to DMA-buffer size is not a big deal - */ -void IRAM_ATTR MatrixPanel_I2S_DMA::updateMatrixDMABuffer(int16_t x_coord, int16_t y_coord, uint8_t red, uint8_t green, uint8_t blue) -{ - if ( !initialized ) { - #if SERIAL_DEBUG - Serial.println(F("Cannot updateMatrixDMABuffer as setup failed!")); - #endif - return; - } - - /* 1) Check that the co-ordinates are within range, or it'll break everything big time. - * Valid co-ordinates are from 0 to (MATRIX_XXXX-1) - */ - if ( x_coord < 0 || y_coord < 0 || x_coord >= PIXELS_PER_ROW || y_coord >= m_cfg.mx_height) { - return; - } - - /* LED Brightness Compensation. Because if we do a basic "red & mask" for example, - * we'll NEVER send the dimmest possible colour, due to binary skew. - * i.e. It's almost impossible for color_depth_idx of 0 to be sent out to the MATRIX unless the 'value' of a color is exactly '1' - * https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/ - */ -#ifndef NO_CIE1931 - red = lumConvTab[red]; - green = lumConvTab[green]; - blue = lumConvTab[blue]; -#endif - - /* When using the drawPixel, we are obviously only changing the value of one x,y position, - * however, the two-scan panels paint TWO lines at the same time - * and this reflects the parallel in-DMA-memory data structure of uint16_t's that are getting - * pumped out at high speed. - * - * So we need to ensure we persist the bits (8 of them) of the uint16_t for the row we aren't changing. - * - * The DMA buffer order has also been reversed (refer to the last code in this function) - * so we have to check for this and check the correct position of the MATRIX_DATA_STORAGE_TYPE - * data. - */ - -#ifndef ESP32_SXXX - // We need to update the correct uint16_t in the rowBitStruct array, that gets sent out in parallel - // 16 bit parallel mode - Save the calculated value to the bitplane memory in reverse order to account for I2S Tx FIFO mode1 ordering - // Irrelevant for ESP32-S2 the way the FIFO ordering works is different - refer to page 679 of S2 technical reference manual - x_coord & 1U ? --x_coord : ++x_coord; -#endif - - - uint16_t _colorbitclear = BITMASK_RGB1_CLEAR, _colorbitoffset = 0; - - if (y_coord >= ROWS_PER_FRAME){ // if we are drawing to the bottom part of the panel - _colorbitoffset = BITS_RGB2_OFFSET; - _colorbitclear = BITMASK_RGB2_CLEAR; - y_coord -= ROWS_PER_FRAME; - } - - // Iterating through colour depth bits, which we assume are 8 bits per RGB subpixel (24bpp) - uint8_t color_depth_idx = PIXEL_COLOR_DEPTH_BITS; - do { - --color_depth_idx; -// uint8_t mask = (1 << (color_depth_idx COLOR_DEPTH_LESS_THAN_8BIT_ADJUST)); // expect 24 bit color (8 bits per RGB subpixel) - #if PIXEL_COLOR_DEPTH_BITS < 8 - uint8_t mask = (1 << (color_depth_idx+MASK_OFFSET)); // expect 24 bit color (8 bits per RGB subpixel) - #else - uint8_t mask = (1 << (color_depth_idx)); // expect 24 bit color (8 bits per RGB subpixel) - #endif - uint16_t RGB_output_bits = 0; - - /* Per the .h file, the order of the output RGB bits is: - * BIT_B2, BIT_G2, BIT_R2, BIT_B1, BIT_G1, BIT_R1 */ - RGB_output_bits |= (bool)(blue & mask); // --B - RGB_output_bits <<= 1; - RGB_output_bits |= (bool)(green & mask); // -BG - RGB_output_bits <<= 1; - RGB_output_bits |= (bool)(red & mask); // BGR - RGB_output_bits <<= _colorbitoffset; // shift color bits to the required position - - - // Get the contents at this address, - // it would represent a vector pointing to the full row of pixels for the specified color depth bit at Y coordinate - ESP32_I2S_DMA_STORAGE_TYPE *p = getRowDataPtr(y_coord, color_depth_idx, back_buffer_id); - - - // We need to update the correct uint16_t word in the rowBitStruct array pointing to a specific pixel at X - coordinate - p[x_coord] &= _colorbitclear; // reset RGB bits - p[x_coord] |= RGB_output_bits; // set new RGB bits - - } while(color_depth_idx); // end of color depth loop (8) -} // updateMatrixDMABuffer (specific co-ords change) - - -/* Update the entire buffer with a single specific colour - quicker */ -void MatrixPanel_I2S_DMA::updateMatrixDMABuffer(uint8_t red, uint8_t green, uint8_t blue) -{ - if ( !initialized ) return; - - /* https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/ */ -#ifndef NO_CIE1931 - red = lumConvTab[red]; - green = lumConvTab[green]; - blue = lumConvTab[blue]; -#endif - - for(uint8_t color_depth_idx=0; color_depth_idxwidth; - do { - --x_coord; - p[x_coord] &= BITMASK_RGB12_CLEAR; // reset color bits - p[x_coord] |= RGB_output_bits; // set new color bits - } while(x_coord); - - } while(matrix_frame_parallel_row); // end row iteration - } // colour depth loop (8) -} // updateMatrixDMABuffer (full frame paint) - -/** - * @brief - clears and reinitializes color/control data in DMA buffs - * When allocated, DMA buffs might be dirty, so we need to blank it and initialize ABCDE,LAT,OE control bits. - * Those control bits are constants during the entire DMA sweep and never changed when updating just pixel color data - * so we could set it once on DMA buffs initialization and forget. - * This effectively clears buffers to blank BLACK and makes it ready to display output. - * (Brightness control via OE bit manipulation is another case) - */ -void MatrixPanel_I2S_DMA::clearFrameBuffer(bool _buff_id){ - if (!initialized) - return; - - // we start with iterating all rows in dma_buff structure - int row_idx = dma_buff.rowBits.size(); - do { - --row_idx; - - ESP32_I2S_DMA_STORAGE_TYPE* row = dma_buff.rowBits[row_idx]->getDataPtr(0, _buff_id); // set pointer to the HEAD of a buffer holding data for the entire matrix row - - ESP32_I2S_DMA_STORAGE_TYPE abcde = (ESP32_I2S_DMA_STORAGE_TYPE)row_idx; - abcde <<= BITS_ADDR_OFFSET; // shift row y-coord to match ABCDE bits in vector from 8 to 12 - - // get last pixel index in a row of all colordepths - int x_pixel = dma_buff.rowBits[row_idx]->width * dma_buff.rowBits[row_idx]->color_depth; - //Serial.printf(" from pixel %d, ", x_pixel); - - // fill all x_pixels except color_index[0] (LSB) ones, this also clears all color data to 0's black - do { - --x_pixel; - - if ( m_cfg.driver == HUB75_I2S_CFG::SM5266P) { - // modifications here for row shift register type SM5266P - // https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/164 - row[x_pixel] = abcde & (0x18 << BITS_ADDR_OFFSET); // mask out the bottom 3 bits which are the clk di bk inputs - } else { - row[x_pixel] = abcde; - } - - } while(x_pixel!=dma_buff.rowBits[row_idx]->width); - - // color_index[0] (LSB) x_pixels must be "marked" with a previous's row address, 'cause it is used to display - // previous row while we pump in LSB's for a new row - abcde = ((ESP32_I2S_DMA_STORAGE_TYPE)row_idx-1) << BITS_ADDR_OFFSET; - do { - --x_pixel; - - if ( m_cfg.driver == HUB75_I2S_CFG::SM5266P) { - // modifications here for row shift register type SM5266P - // https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/164 - row[x_pixel] = abcde & (0x18 << BITS_ADDR_OFFSET); // mask out the bottom 3 bits which are the clk di bk inputs - } else { - row[x_pixel] = abcde; - } - //row[x_pixel] = abcde; - } while(x_pixel); - - - // modifications here for row shift register type SM5266P - // https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/164 - if ( m_cfg.driver == HUB75_I2S_CFG::SM5266P) { - uint16_t serialCount; - uint16_t latch; - x_pixel = dma_buff.rowBits[row_idx]->width - 16; // come back 8*2 pixels to allow for 8 writes - serialCount = 8; - do{ - serialCount--; - latch = row[x_pixel] | (((((ESP32_I2S_DMA_STORAGE_TYPE)row_idx) % 8) == serialCount) << 1) << BITS_ADDR_OFFSET; // data on 'B' - row[x_pixel++] = latch| (0x05<< BITS_ADDR_OFFSET); // clock high on 'A'and BK high for update - row[x_pixel++] = latch| (0x04<< BITS_ADDR_OFFSET); // clock low on 'A'and BK high for update - } while (serialCount); - } // end SM5266P - - - // let's set LAT/OE control bits for specific pixels in each color_index subrows - // Need to consider the original ESP32's (WROOM) DMA TX FIFO reordering of bytes... - uint8_t coloridx = dma_buff.rowBits[row_idx]->color_depth; - do { - --coloridx; - - // switch pointer to a row for a specific color index - row = dma_buff.rowBits[row_idx]->getDataPtr(coloridx, _buff_id); - - #ifdef ESP32_SXXX - // -1 works better on ESP32-S2 ? Because bytes get sent out in order... - row[dma_buff.rowBits[row_idx]->width - 1] |= BIT_LAT; // -1 pixel to compensate array index starting at 0 - #else - // We need to update the correct uint16_t in the rowBitStruct array, that gets sent out in parallel - // 16 bit parallel mode - Save the calculated value to the bitplane memory in reverse order to account for I2S Tx FIFO mode1 ordering - // Irrelevant for ESP32-S2 the way the FIFO ordering works is different - refer to page 679 of S2 technical reference manual - row[dma_buff.rowBits[row_idx]->width - 2] |= BIT_LAT; // -2 in the DMA array is actually -1 when it's reordered by TX FIFO - #endif - - // need to disable OE before/after latch to hide row transition - // Should be one clock or more before latch, otherwise can get ghosting - uint8_t _blank = m_cfg.latch_blanking; - do { - --_blank; - - #ifdef ESP32_SXXX - row[0 + _blank] |= BIT_OE; - row[dma_buff.rowBits[row_idx]->width - _blank - 1 ] |= BIT_OE; // (LAT pulse is (width-2) -1 pixel to compensate array index starting at 0 - #else - - // Original ESP32 WROOM FIFO Ordering Sucks - uint8_t _blank_row_tx_fifo_tmp = 0 + _blank; - (_blank_row_tx_fifo_tmp & 1U) ? --_blank_row_tx_fifo_tmp : ++_blank_row_tx_fifo_tmp; - row[_blank_row_tx_fifo_tmp] |= BIT_OE; - - _blank_row_tx_fifo_tmp = dma_buff.rowBits[row_idx]->width - _blank - 1; // (LAT pulse is (width-2) -1 pixel to compensate array index starting at 0 - (_blank_row_tx_fifo_tmp & 1U) ? --_blank_row_tx_fifo_tmp : ++_blank_row_tx_fifo_tmp; - row[_blank_row_tx_fifo_tmp] |= BIT_OE; - - #endif - - } while (_blank); - - } while(coloridx); - - } while(row_idx); -} - -/** - * @brief - reset OE bits in DMA buffer in a way to control brightness - * @param brt - brightness level from 0 to row_width - * @param _buff_id - buffer id to control - */ -void MatrixPanel_I2S_DMA::brtCtrlOE(int brt, const bool _buff_id){ - if (!initialized) - return; - - if (brt > PIXELS_PER_ROW - (MAX_LAT_BLANKING + 2)) // can't control values larger than (row_width - latch_blanking) to avoid ongoing issues being raised about brightness and ghosting. - brt = PIXELS_PER_ROW - (MAX_LAT_BLANKING + 2); // +2 for a bit of buffer... - - if (brt < 0) - brt = 0; - - // start with iterating all rows in dma_buff structure - int row_idx = dma_buff.rowBits.size(); - do { - --row_idx; - - // let's set OE control bits for specific pixels in each color_index subrows - uint8_t coloridx = dma_buff.rowBits[row_idx]->color_depth; - do { - --coloridx; - - // switch pointer to a row for a specific color index - ESP32_I2S_DMA_STORAGE_TYPE* row = dma_buff.rowBits[row_idx]->getDataPtr(coloridx, _buff_id); - - int x_coord = dma_buff.rowBits[row_idx]->width; - do { - --x_coord; - - // clear OE bit for all other pixels - row[x_coord] &= BITMASK_OE_CLEAR; - - // Brightness control via OE toggle - disable matrix output at specified x_coord - if((coloridx > lsbMsbTransitionBit || !coloridx) && ((x_coord) >= brt)){ - row[x_coord] |= BIT_OE; // Disable output after this point. - continue; - } - // special case for the bits *after* LSB through (lsbMsbTransitionBit) - OE is output after data is shifted, so need to set OE to fractional brightness - if(coloridx && coloridx <= lsbMsbTransitionBit) { - // divide brightness in half for each bit below lsbMsbTransitionBit - int lsbBrightness = brt >> (lsbMsbTransitionBit - coloridx + 1); - if((x_coord) >= lsbBrightness) { - row[x_coord] |= BIT_OE; // Disable output after this point. - continue; - } - } - - - } while(x_coord); - - // need to disable OE before/after latch to hide row transition - // Should be one clock or more before latch, otherwise can get ghosting - uint8_t _blank = m_cfg.latch_blanking; - do { - --_blank; - - #ifdef ESP32_SXXX - row[0 + _blank] |= BIT_OE; - #else - // Original ESP32 WROOM FIFO Ordering Sucks - uint8_t _blank_row_tx_fifo_tmp = 0 + _blank; - (_blank_row_tx_fifo_tmp & 1U) ? --_blank_row_tx_fifo_tmp : ++_blank_row_tx_fifo_tmp; - row[_blank_row_tx_fifo_tmp] |= BIT_OE; - #endif - - //row[0 + _blank] |= BIT_OE; - // no need, has been done already - //row[dma_buff.rowBits[row_idx]->width - _blank - 3 ] |= BIT_OE; // (LAT pulse is (width-2) -1 pixel to compensate array index starting at 0 - } while (_blank); - - } while(coloridx); - } while(row_idx); -} - - -/* - * overload for compatibility - */ - -bool MatrixPanel_I2S_DMA::begin(int r1, int g1, int b1, int r2, int g2, int b2, int a, int b, int c, int d, int e, int lat, int oe, int clk) { - - // RGB - m_cfg.gpio.r1 = r1; m_cfg.gpio.g1 = g1; m_cfg.gpio.b1 = b1; - m_cfg.gpio.r2 = r2; m_cfg.gpio.g2 = g2; m_cfg.gpio.b2 = b2; - - // Line Select - m_cfg.gpio.a = a; m_cfg.gpio.b = b; m_cfg.gpio.c = c; - m_cfg.gpio.d = d; m_cfg.gpio.e = e; - - // Clock & Control - m_cfg.gpio.lat = lat; m_cfg.gpio.oe = oe; m_cfg.gpio.clk = clk; - - return begin(); -} - - -/** - * @brief - Sets how many clock cycles to blank OE before/after LAT signal change - * @param uint8_t pulses - clocks before/after OE - * default is DEFAULT_LAT_BLANKING - * Max is MAX_LAT_BLANKING - * @returns - new value for m_cfg.latch_blanking - */ -uint8_t MatrixPanel_I2S_DMA::setLatBlanking(uint8_t pulses){ - if (pulses > MAX_LAT_BLANKING) - pulses = MAX_LAT_BLANKING; - - if (!pulses) - pulses = DEFAULT_LAT_BLANKING; - - m_cfg.latch_blanking = pulses; - setPanelBrightness(brightness); // set brightness to reset OE bits to the values matching new LAT blanking setting - return m_cfg.latch_blanking; -} - - -#ifndef NO_FAST_FUNCTIONS -/** - * @brief - update DMA buff drawing horizontal line at specified coordinates - * @param x_ccord - line start coordinate x - * @param y_ccord - line start coordinate y - * @param l - line length - * @param r,g,b, - RGB888 color - */ -void MatrixPanel_I2S_DMA::hlineDMA(int16_t x_coord, int16_t y_coord, int16_t l, uint8_t red, uint8_t green, uint8_t blue){ - if ( !initialized ) - return; - - if ( x_coord < 0 || y_coord < 0 || l < 1 || x_coord >= PIXELS_PER_ROW || y_coord >= m_cfg.mx_height) - return; - - - l = ( (x_coord + l) >= PIXELS_PER_ROW ) ? (PIXELS_PER_ROW - x_coord):l; - - //if (x_coord+l > PIXELS_PER_ROW) -// l = PIXELS_PER_ROW - x_coord + 1; // reset width to end of row - - /* LED Brightness Compensation */ -#ifndef NO_CIE1931 - red = lumConvTab[red]; - green = lumConvTab[green]; - blue = lumConvTab[blue]; -#endif - - uint16_t _colorbitclear = BITMASK_RGB1_CLEAR, _colorbitoffset = 0; - - if (y_coord >= ROWS_PER_FRAME){ // if we are drawing to the bottom part of the panel - _colorbitoffset = BITS_RGB2_OFFSET; - _colorbitclear = BITMASK_RGB2_CLEAR; - y_coord -= ROWS_PER_FRAME; - } - - // Iterating through color depth bits (8 iterations) - uint8_t color_depth_idx = PIXEL_COLOR_DEPTH_BITS; - do { - --color_depth_idx; - - // let's precalculate RGB1 and RGB2 bits than flood it over the entire DMA buffer - uint16_t RGB_output_bits = 0; -// uint8_t mask = (1 << color_depth_idx COLOR_DEPTH_LESS_THAN_8BIT_ADJUST); - #if PIXEL_COLOR_DEPTH_BITS < 8 - uint8_t mask = (1 << (color_depth_idx+MASK_OFFSET)); // expect 24 bit color (8 bits per RGB subpixel) - #else - uint8_t mask = (1 << (color_depth_idx)); // expect 24 bit color (8 bits per RGB subpixel) - #endif - - /* Per the .h file, the order of the output RGB bits is: - * BIT_B2, BIT_G2, BIT_R2, BIT_B1, BIT_G1, BIT_R1 */ - RGB_output_bits |= (bool)(blue & mask); // --B - RGB_output_bits <<= 1; - RGB_output_bits |= (bool)(green & mask); // -BG - RGB_output_bits <<= 1; - RGB_output_bits |= (bool)(red & mask); // BGR - RGB_output_bits <<= _colorbitoffset; // shift color bits to the required position - - // Get the contents at this address, - // it would represent a vector pointing to the full row of pixels for the specified color depth bit at Y coordinate - ESP32_I2S_DMA_STORAGE_TYPE *p = dma_buff.rowBits[y_coord]->getDataPtr(color_depth_idx, back_buffer_id); - // inlined version works slower here, dunno why :( - // ESP32_I2S_DMA_STORAGE_TYPE *p = getRowDataPtr(y_coord, color_depth_idx, back_buffer_id); - - int16_t _l = l; - do { // iterate pixels in a row - int16_t _x = x_coord + --_l; - -#ifdef ESP32_SXXX - // ESP 32 doesn't need byte flipping for TX FIFO. - uint16_t &v = p[_x]; -#else - // Save the calculated value to the bitplane memory in reverse order to account for I2S Tx FIFO mode1 ordering - uint16_t &v = p[_x & 1U ? --_x : ++_x]; -#endif - - v &= _colorbitclear; // reset color bits - v |= RGB_output_bits; // set new color bits - } while(_l); // iterate pixels in a row - } while(color_depth_idx); // end of color depth loop (8) -} // hlineDMA() - - -/** - * @brief - update DMA buff drawing vertical line at specified coordinates - * @param x_ccord - line start coordinate x - * @param y_ccord - line start coordinate y - * @param l - line length - * @param r,g,b, - RGB888 color - */ -void MatrixPanel_I2S_DMA::vlineDMA(int16_t x_coord, int16_t y_coord, int16_t l, uint8_t red, uint8_t green, uint8_t blue){ - if ( !initialized ) - return; - - if ( x_coord < 0 || y_coord < 0 || l < 1 || x_coord >= PIXELS_PER_ROW || y_coord >= m_cfg.mx_height) - return; - - // check for a length that goes beyond the height of the screen! Array out of bounds dma memory changes = screwed output #163 - l = ( (y_coord + l) >= m_cfg.mx_height ) ? (m_cfg.mx_height - y_coord):l; - //if (y_coord + l > m_cfg.mx_height) - /// l = m_cfg.mx_height - y_coord + 1; // reset width to end of col - - /* LED Brightness Compensation */ -#ifndef NO_CIE1931 - red = lumConvTab[red]; - green = lumConvTab[green]; - blue = lumConvTab[blue]; -#endif - -#ifndef ESP32_SXXX - // Save the calculated value to the bitplane memory in reverse order to account for I2S Tx FIFO mode1 ordering - x_coord & 1U ? --x_coord : ++x_coord; -#endif - - uint8_t color_depth_idx = PIXEL_COLOR_DEPTH_BITS; - do { // Iterating through color depth bits (8 iterations) - --color_depth_idx; - - // let's precalculate RGB1 and RGB2 bits than flood it over the entire DMA buffer -// uint8_t mask = (1 << color_depth_idx COLOR_DEPTH_LESS_THAN_8BIT_ADJUST); - #if PIXEL_COLOR_DEPTH_BITS < 8 - uint8_t mask = (1 << (color_depth_idx+MASK_OFFSET)); // expect 24 bit color (8 bits per RGB subpixel) - #else - uint8_t mask = (1 << (color_depth_idx)); // expect 24 bit color (8 bits per RGB subpixel) - #endif - uint16_t RGB_output_bits = 0; - - /* Per the .h file, the order of the output RGB bits is: - * BIT_B2, BIT_G2, BIT_R2, BIT_B1, BIT_G1, BIT_R1 */ - RGB_output_bits |= (bool)(blue & mask); // --B - RGB_output_bits <<= 1; - RGB_output_bits |= (bool)(green & mask); // -BG - RGB_output_bits <<= 1; - RGB_output_bits |= (bool)(red & mask); // BGR - - int16_t _l = 0, _y = y_coord; - uint16_t _colorbitclear = BITMASK_RGB1_CLEAR; - do { // iterate pixels in a column - - if (_y >= ROWS_PER_FRAME){ // if y-coord overlapped bottom-half panel - _y -= ROWS_PER_FRAME; - _colorbitclear = BITMASK_RGB2_CLEAR; - RGB_output_bits <<= BITS_RGB2_OFFSET; - } - - // Get the contents at this address, - // it would represent a vector pointing to the full row of pixels for the specified color depth bit at Y coordinate - ESP32_I2S_DMA_STORAGE_TYPE *p = getRowDataPtr(_y, color_depth_idx, back_buffer_id); - - p[x_coord] &= _colorbitclear; // reset RGB bits - p[x_coord] |= RGB_output_bits; // set new RGB bits - ++_y; - } while(++_l!=l); // iterate pixels in a col - } while(color_depth_idx); // end of color depth loop (8) -} // vlineDMA() - - -/** - * @brief - update DMA buff drawing a rectangular at specified coordinates - * this works much faster than multiple consecutive per-pixel calls to updateMatrixDMABuffer() - * @param int16_t x, int16_t y - coordinates of a top-left corner - * @param int16_t w, int16_t h - width and height of a rectangular, min is 1 px - * @param uint8_t r - RGB888 color - * @param uint8_t g - RGB888 color - * @param uint8_t b - RGB888 color - */ -void MatrixPanel_I2S_DMA::fillRectDMA(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t r, uint8_t g, uint8_t b){ - - // h-lines are >2 times faster than v-lines - // so will use it only for tall rects with h >2w - if (h>2*w){ - // draw using v-lines - do { - --w; - vlineDMA(x+w, y, h, r,g,b); - } while(w); - } else { - // draw using h-lines - do { - --h; - hlineDMA(x, y+h, w, r,g,b); - } while(h); - } -} - -#endif // NO_FAST_FUNCTIONS diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-I2S-DMA.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-I2S-DMA.h deleted file mode 100644 index d9b029a..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-I2S-DMA.h +++ /dev/null @@ -1,820 +0,0 @@ -#ifndef _ESP32_RGB_64_32_MATRIX_PANEL_I2S_DMA -#define _ESP32_RGB_64_32_MATRIX_PANEL_I2S_DMA -/***************************************************************************************/ -/* Core ESP32 hardware / idf includes! */ -#include -#include - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" -#include "freertos/queue.h" - -#include "esp_heap_caps.h" -#include "esp32_i2s_parallel_dma.h" - -#ifdef USE_GFX_ROOT - #include - #include "GFX.h" // Adafruit GFX core class -> https://github.com/mrfaptastic/GFX_Root -#elif !defined NO_GFX - #include "Adafruit_GFX.h" // Adafruit class with all the other stuff -#endif - -/******************************************************************************************* - * COMPILE-TIME OPTIONS - MUST BE PROVIDED as part of PlatformIO project build_flags. * - * Changing the values just here won't work - as defines needs to persist beyond the scope * - * of just this file. * - *******************************************************************************************/ -/* Enable serial debugging of the library, to see how memory is allocated etc. */ -//#define SERIAL_DEBUG 1 - -/* Do NOT build additional methods optimized for fast drawing, - * i.e. Adafruits drawFastHLine, drawFastVLine, etc... */ -//#define NO_FAST_FUNCTIONS - -/* Use GFX_Root (https://github.com/mrfaptastic/GFX_Root) instead of Adafruit_GFX library. - * > Removes Bus_IO & Wire.h library dependencies. - * > Provides 24bpp (CRGB) colour support for Adafruit_GFX functions like drawCircle etc. - * > Requires FastLED.h - */ -//#define USE_GFX_ROOT 1 - -/* Physical / Chained HUB75(s) RGB pixel WIDTH and HEIGHT. - * - * This library has been tested with a 64x32 and 64x64 RGB panels. - * If you want to chain two or more of these horizontally to make a 128x32 panel - * you can do so with the cable and then set the CHAIN_LENGTH to '2'. - * - * Also, if you use a 64x64 panel, then set the MATRIX_HEIGHT to '64' and an E_PIN; it will work! - * - * All of this is memory permitting of course (dependant on your sketch etc.) ... - * - */ -#ifndef MATRIX_WIDTH - #define MATRIX_WIDTH 64 // Single panel of 64 pixel width -#endif - -#ifndef MATRIX_HEIGHT - #define MATRIX_HEIGHT 32 // CHANGE THIS VALUE to 64 IF USING 64px HIGH panel(s) with E PIN -#endif - -#ifndef CHAIN_LENGTH - #define CHAIN_LENGTH 1 // Number of modules chained together, i.e. 4 panels chained result in virtualmatrix 64x4=256 px long -#endif - -/* ESP32 Default Pin definition. You can change this, but best if you keep it as is and provide custom pin mappings - * as part of the begin(...) function. - */ -// Default pin mapping for ESP32-S2 and ESP32-S3 -#ifdef ESP32_SXXX - - #define R1_PIN_DEFAULT 45 - #define G1_PIN_DEFAULT 42 - #define B1_PIN_DEFAULT 41 - #define R2_PIN_DEFAULT 40 - #define G2_PIN_DEFAULT 39 - #define B2_PIN_DEFAULT 38 - #define A_PIN_DEFAULT 37 - #define B_PIN_DEFAULT 36 - #define C_PIN_DEFAULT 35 - #define D_PIN_DEFAULT 34 - #define E_PIN_DEFAULT -1 // required for 1/32 scan panels, like 64x64. Any available pin would do, i.e. IO32 - #define LAT_PIN_DEFAULT 26 - #define OE_PIN_DEFAULT 21 - #define CLK_PIN_DEFAULT 33 - -// Else use default pin mapping for ESP32 Original WROOM module. -#else - - #define R1_PIN_DEFAULT 25 - #define G1_PIN_DEFAULT 26 - #define B1_PIN_DEFAULT 27 - #define R2_PIN_DEFAULT 14 - #define G2_PIN_DEFAULT 12 - #define B2_PIN_DEFAULT 13 - - #define A_PIN_DEFAULT 23 - #define B_PIN_DEFAULT 19 - #define C_PIN_DEFAULT 5 - #define D_PIN_DEFAULT 17 - #define E_PIN_DEFAULT -1 // IMPORTANT: Change to a valid pin if using a 64x64px panel. - - #define LAT_PIN_DEFAULT 4 - #define OE_PIN_DEFAULT 15 - #define CLK_PIN_DEFAULT 16 - -#endif - -// Interesting Fact: We end up using a uint16_t to send data in parallel to the HUB75... but -// given we only map to 14 physical output wires/bits, we waste 2 bits. - -/***************************************************************************************/ -/* Do not change definitions below unless you pretty sure you know what you are doing! */ - -// RGB Panel Constants / Calculated Values -#ifndef MATRIX_ROWS_IN_PARALLEL - #define MATRIX_ROWS_IN_PARALLEL 2 -#endif - -// 8bit per RGB color = 24 bit/per pixel, -// might be reduced to save DMA RAM -#ifndef PIXEL_COLOR_DEPTH_BITS - #define PIXEL_COLOR_DEPTH_BITS 8 -#endif - -#define COLOR_CHANNELS_PER_PIXEL 3 - -// #define NO_CIE1931 - - -/***************************************************************************************/ -/* Definitions below should NOT be ever changed without rewriting library logic */ -#define ESP32_I2S_DMA_MODE I2S_PARALLEL_WIDTH_16 // From esp32_i2s_parallel_v2.h = 16 bits in parallel -#define ESP32_I2S_DMA_STORAGE_TYPE uint16_t // DMA output of one uint16_t at a time. -#define CLKS_DURING_LATCH 0 // Not (yet) used. - -// Panel Upper half RGB (numbering according to order in DMA gpio_bus configuration) -#define BITS_RGB1_OFFSET 0 // Start point of RGB_X1 bits -#define BIT_R1 (1<<0) -#define BIT_G1 (1<<1) -#define BIT_B1 (1<<2) - -// Panel Lower half RGB -#define BITS_RGB2_OFFSET 3 // Start point of RGB_X2 bits -#define BIT_R2 (1<<3) -#define BIT_G2 (1<<4) -#define BIT_B2 (1<<5) - -// Panel Control Signals -#define BIT_LAT (1<<6) -#define BIT_OE (1<<7) - -// Panel GPIO Pin Addresses (A, B, C, D etc..) -#define BITS_ADDR_OFFSET 8 // Start point of address bits -#define BIT_A (1<<8) -#define BIT_B (1<<9) -#define BIT_C (1<<10) -#define BIT_D (1<<11) -#define BIT_E (1<<12) - -// BitMasks are pre-computed based on the above #define's for performance. -#define BITMASK_RGB1_CLEAR (0b1111111111111000) // inverted bitmask for R1G1B1 bit in pixel vector -#define BITMASK_RGB2_CLEAR (0b1111111111000111) // inverted bitmask for R2G2B2 bit in pixel vector -#define BITMASK_RGB12_CLEAR (0b1111111111000000) // inverted bitmask for R1G1B1R2G2B2 bit in pixel vector -#define BITMASK_CTRL_CLEAR (0b1110000000111111) // inverted bitmask for control bits ABCDE,LAT,OE in pixel vector -#define BITMASK_OE_CLEAR (0b1111111101111111) // inverted bitmask for control bit OE in pixel vector - -// How many clock cycles to blank OE before/after LAT signal change, default is 1 clock -#define DEFAULT_LAT_BLANKING 1 -// Max clock cycles to blank OE before/after LAT signal change -#define MAX_LAT_BLANKING 4 - -/***************************************************************************************/ -// Check compile-time only options -#if PIXEL_COLOR_DEPTH_BITS > 8 - #error "Pixel color depth bits cannot be greater than 8." -#elif PIXEL_COLOR_DEPTH_BITS < 2 - #error "Pixel color depth bits cannot be less than 2." -#endif - -/* This library is designed to take an 8 bit / 1 byte value (0-255) for each R G B colour sub-pixel. - * The PIXEL_COLOR_DEPTH_BITS should always be '8' as a result. - * However, if the library is to be used with lower colour depth (i.e. 6 bit colour), then we need to ensure the 8-bit value passed to the colour masking - * is adjusted accordingly to ensure the LSB's are shifted left to MSB, by the difference. Otherwise the colours will be all screwed up. - */ -#if PIXEL_COLOR_DEPTH_BITS != 8 -static constexpr uint8_t const MASK_OFFSET = 8-PIXEL_COLOR_DEPTH_BITS; -#endif - -/***************************************************************************************/ - -/** @brief - Structure holds raw DMA data to drive TWO full rows of pixels spanning through all chained modules - * Note: sizeof(data) must be multiple of 32 bits, as ESP32 DMA linked list buffer address pointer must be word-aligned - */ -struct rowBitStruct { - const size_t width; - const uint8_t color_depth; - const bool double_buff; - ESP32_I2S_DMA_STORAGE_TYPE *data; - - /** @brief - returns size of row of data vectorfor a SINGLE buff - * size (in bytes) of a vector holding full DMA data for a row of pixels with _dpth color bits - * a SINGLE buffer only size is accounted, when using double buffers it actually takes twice as much space - * but returned size is for a half of double-buffer - * - * default - returns full data vector size for a SINGLE buff - * - */ - size_t size(uint8_t _dpth=0 ) { if (!_dpth) _dpth = color_depth; return width * _dpth * sizeof(ESP32_I2S_DMA_STORAGE_TYPE); }; - - /** @brief - returns pointer to the row's data vector beginning at pixel[0] for _dpth color bit - * default - returns pointer to the data vector's head - * NOTE: this call might be very slow in loops. Due to poor instruction caching in esp32 it might be required a reread from flash - * every loop cycle, better use inlined #define instead in such cases - */ - ESP32_I2S_DMA_STORAGE_TYPE* getDataPtr(const uint8_t _dpth=0, const bool buff_id=0) { return &(data[_dpth*width + buff_id*(width*color_depth)]); }; - - // constructor - allocates DMA-capable memory to hold the struct data - rowBitStruct(const size_t _width, const uint8_t _depth, const bool _dbuff) : width(_width), color_depth(_depth), double_buff(_dbuff) { - data = (ESP32_I2S_DMA_STORAGE_TYPE *)heap_caps_malloc( size()+size()*double_buff, MALLOC_CAP_DMA); - } - ~rowBitStruct() { delete data;} -}; - - -/* frameStruct - * Note: A 'frameStruct' contains ALL the data for a full-frame (i.e. BOTH 2x16-row frames are - * are contained in parallel within the one uint16_t that is sent in parallel to the HUB75). - * - * This structure isn't actually allocated in one memory block anymore, as the library now allocates - * memory per row (per rowColorDepthStruct) instead. - */ -struct frameStruct { - uint8_t rows=0; // number of rows held in current frame, not used actually, just to keep the idea of struct - std::vector > rowBits; -}; - -/***************************************************************************************/ -//C/p'ed from https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/ -// Example calculator: https://gist.github.com/mathiasvr/19ce1d7b6caeab230934080ae1f1380e -// need to make sure this would end up in RAM for fastest access -#ifndef NO_CIE1931 -static const uint8_t DRAM_ATTR lumConvTab[]={ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 30, 30, 31, 31, 32, 33, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 86, 87, 88, 90, 91, 92, 93, 95, 96, 98, 99, 100, 102, 103, 105, 106, 107, 109, 110, 112, 113, 115, 116, 118, 120, 121, 123, 124, 126, 128, 129, 131, 133, 134, 136, 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, 156, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 192, 194, 196, 198, 200, 203, 205, 207, 209, 212, 214, 216, 218, 221, 223, 226, 228, 230, 233, 235, 238, 240, 243, 245, 248, 250, 253, 255, 255}; -#endif - -/** @brief - configuration values for HUB75_I2S driver - * This structure holds configuration vars that are used as - * an initialization values when creating an instance of MatrixPanel_I2S_DMA object. - * All params have it's default values. - */ -struct HUB75_I2S_CFG { - - /** - * Enumeration of hardware-specific chips - * used to drive matrix modules - */ - enum shift_driver {SHIFTREG=0, FM6124, FM6126A, ICN2038S, MBI5124, SM5266P}; - - /** - * I2S clock speed selector - */ - enum clk_speed {HZ_8M=8000000, HZ_10M=10000000, HZ_20M=20000000}; - - // Structure Variables - - // physical width of a single matrix panel module (in pixels, usually it is 64 ;) ) - uint16_t mx_width; - // physical height of a single matrix panel module (in pixels, usually almost always it is either 32 or 64) - uint16_t mx_height; - // number of chained panels regardless of the topology, default 1 - a single matrix module - uint16_t chain_length; - - /** - * GPIO pins mapping - */ - struct i2s_pins{ - int8_t r1, g1, b1, r2, g2, b2, a, b, c, d, e, lat, oe, clk; - } gpio; - - // Matrix driver chip type - default is a plain shift register - shift_driver driver; - // I2S clock speed - clk_speed i2sspeed; - // use DMA double buffer (twice as much RAM required) - bool double_buff; - // How many clock cycles to blank OE before/after LAT signal change, default is 1 clock - uint8_t latch_blanking; - - /** - * I2S clock phase - * 0 - data lines are clocked with negative edge - * Clk /¯\_/¯\_/ - * LAT __/¯¯¯\__ - * EO ¯¯¯¯¯¯\___ - * - * 1 - data lines are clocked with positive edge (default now as of 10 June 2021) - * https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/130 - * Clk \_/¯\_/¯\ - * LAT __/¯¯¯\__ - * EO ¯¯¯¯¯¯\__ - * - */ - bool clkphase; - - // Minimum refresh / scan rate needs to be configured on start due to LSBMSB_TRANSITION_BIT calculation in allocateDMAmemory() - uint8_t min_refresh_rate; - - // struct constructor - HUB75_I2S_CFG ( - uint16_t _w = MATRIX_WIDTH, - uint16_t _h = MATRIX_HEIGHT, - uint16_t _chain = CHAIN_LENGTH, - i2s_pins _pinmap = { - R1_PIN_DEFAULT, G1_PIN_DEFAULT, B1_PIN_DEFAULT, R2_PIN_DEFAULT, G2_PIN_DEFAULT, B2_PIN_DEFAULT, - A_PIN_DEFAULT, B_PIN_DEFAULT, C_PIN_DEFAULT, D_PIN_DEFAULT, E_PIN_DEFAULT, - LAT_PIN_DEFAULT, OE_PIN_DEFAULT, CLK_PIN_DEFAULT }, - shift_driver _drv = SHIFTREG, - bool _dbuff = false, - clk_speed _i2sspeed = HZ_10M, - uint8_t _latblk = 1, // Anything > 1 seems to cause artefacts on ICS panels - bool _clockphase = true, - uint8_t _min_refresh_rate = 85 - ) : mx_width(_w), - mx_height(_h), - chain_length(_chain), - gpio(_pinmap), - driver(_drv), i2sspeed(_i2sspeed), - double_buff(_dbuff), - latch_blanking(_latblk), - clkphase(_clockphase), - min_refresh_rate (_min_refresh_rate) {} -}; // end of structure HUB75_I2S_CFG - - - -/***************************************************************************************/ -#ifdef USE_GFX_ROOT -class MatrixPanel_I2S_DMA : public GFX { -#elif !defined NO_GFX -class MatrixPanel_I2S_DMA : public Adafruit_GFX { -#else -class MatrixPanel_I2S_DMA { -#endif - - // ------- PUBLIC ------- - public: - - /** - * MatrixPanel_I2S_DMA - * - * default predefined values are used for matrix configuration - * - */ - MatrixPanel_I2S_DMA() -#ifdef USE_GFX_ROOT - : GFX(MATRIX_WIDTH, MATRIX_HEIGHT) -#elif !defined NO_GFX - : Adafruit_GFX(MATRIX_WIDTH, MATRIX_HEIGHT) -#endif - {} - - /** - * MatrixPanel_I2S_DMA - * - * @param {HUB75_I2S_CFG} opts : structure with matrix configuration - * - */ - MatrixPanel_I2S_DMA(const HUB75_I2S_CFG& opts) : -#ifdef USE_GFX_ROOT - GFX(opts.mx_width*opts.chain_length, opts.mx_height), -#elif !defined NO_GFX - Adafruit_GFX(opts.mx_width*opts.chain_length, opts.mx_height), -#endif - m_cfg(opts) {} - - /* Propagate the DMA pin configuration, allocate DMA buffs and start data output, initially blank */ - bool begin(){ - - if (initialized) return true; // we don't do this twice or more! - - // Change 'if' to '1' to enable, 0 to not include this Serial output in compiled program - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Using pin %d for the R1_PIN\n"), m_cfg.gpio.r1); - Serial.printf_P(PSTR("Using pin %d for the G1_PIN\n"), m_cfg.gpio.g1); - Serial.printf_P(PSTR("Using pin %d for the B1_PIN\n"), m_cfg.gpio.b1); - Serial.printf_P(PSTR("Using pin %d for the R2_PIN\n"), m_cfg.gpio.r2); - Serial.printf_P(PSTR("Using pin %d for the G2_PIN\n"), m_cfg.gpio.g2); - Serial.printf_P(PSTR("Using pin %d for the B2_PIN\n"), m_cfg.gpio.b2); - Serial.printf_P(PSTR("Using pin %d for the A_PIN\n"), m_cfg.gpio.a); - Serial.printf_P(PSTR("Using pin %d for the B_PIN\n"), m_cfg.gpio.b); - Serial.printf_P(PSTR("Using pin %d for the C_PIN\n"), m_cfg.gpio.c); - Serial.printf_P(PSTR("Using pin %d for the D_PIN\n"), m_cfg.gpio.d); - Serial.printf_P(PSTR("Using pin %d for the E_PIN\n"), m_cfg.gpio.e); - Serial.printf_P(PSTR("Using pin %d for the LAT_PIN\n"), m_cfg.gpio.lat); - Serial.printf_P(PSTR("Using pin %d for the OE_PIN\n"), m_cfg.gpio.oe); - Serial.printf_P(PSTR("Using pin %d for the CLK_PIN\n"), m_cfg.gpio.clk); - #endif - - // initialize some specific panel drivers - if (m_cfg.driver) - shiftDriver(m_cfg); - - - /* As DMA buffers are dynamically allocated, we must allocated in begin() - * Ref: https://github.com/espressif/arduino-esp32/issues/831 - */ - if ( !allocateDMAmemory() ) { return false; } // couldn't even get the basic ram required. - - - // Flush the DMA buffers prior to configuring DMA - Avoid visual artefacts on boot. - resetbuffers(); // Must fill the DMA buffer with the initial output bit sequence or the panel will display garbage - - // Setup the ESP32 DMA Engine. Sprite_TM built this stuff. - configureDMA(m_cfg); //DMA and I2S configuration and setup - - //showDMABuffer(); // show backbuf_id of 0 - - #if SERIAL_DEBUG - if (!initialized) - Serial.println(F("MatrixPanel_I2S_DMA::begin() failed.")); - #endif - - return initialized; - - } - - // Obj destructor - ~MatrixPanel_I2S_DMA(){ - stopDMAoutput(); - - delete dmadesc_a; - - if (m_cfg.double_buff) - delete dmadesc_b; - - } - - - /* - * overload for compatibility - */ - bool begin(int r1, int g1 = G1_PIN_DEFAULT, int b1 = B1_PIN_DEFAULT, int r2 = R2_PIN_DEFAULT, int g2 = G2_PIN_DEFAULT, int b2 = B2_PIN_DEFAULT, int a = A_PIN_DEFAULT, int b = B_PIN_DEFAULT, int c = C_PIN_DEFAULT, int d = D_PIN_DEFAULT, int e = E_PIN_DEFAULT, int lat = LAT_PIN_DEFAULT, int oe = OE_PIN_DEFAULT, int clk = CLK_PIN_DEFAULT); - - - // Adafruit's BASIC DRAW API (565 colour format) - virtual void drawPixel(int16_t x, int16_t y, uint16_t color); // overwrite adafruit implementation - virtual void fillScreen(uint16_t color); // overwrite adafruit implementation - - /** - * A wrapper to fill whatever selected DMA buffer / screen with black - */ - inline void clearScreen(){ updateMatrixDMABuffer(0,0,0); }; - -#ifndef NO_FAST_FUNCTIONS - /** - * @brief - override Adafruit's FastVLine - * this works faster than multiple consecutive pixel by pixel drawPixel() call - */ - virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color){ - uint8_t r, g, b; - color565to888(color, r, g, b); - vlineDMA(x, y, h, r, g, b); - } - // rgb888 overload - virtual inline void drawFastVLine(int16_t x, int16_t y, int16_t h, uint8_t r, uint8_t g, uint8_t b){ vlineDMA(x, y, h, r, g, b); }; - - /** - * @brief - override Adafruit's FastHLine - * this works faster than multiple consecutive pixel by pixel drawPixel() call - */ - virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color){ - uint8_t r, g, b; - color565to888(color, r, g, b); - hlineDMA(x, y, w, r, g, b); - } - // rgb888 overload - virtual inline void drawFastHLine(int16_t x, int16_t y, int16_t w, uint8_t r, uint8_t g, uint8_t b){ hlineDMA(x, y, w, r, g, b); }; - - /** - * @brief - override Adafruit's fillRect - * this works much faster than multiple consecutive per-pixel drawPixel() calls - */ - virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color){ - uint8_t r, g, b; - color565to888(color, r, g, b); - fillRectDMA(x, y, w, h, r, g, b); - } - // rgb888 overload - virtual inline void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t r, uint8_t g, uint8_t b){fillRectDMA(x, y, w, h, r, g, b);} -#endif - - void fillScreenRGB888(uint8_t r, uint8_t g, uint8_t b); - void drawPixelRGB888(int16_t x, int16_t y, uint8_t r, uint8_t g, uint8_t b); - -#ifdef USE_GFX_ROOT - // 24bpp FASTLED CRGB colour struct support - void fillScreen(CRGB color); - void drawPixel(int16_t x, int16_t y, CRGB color); -#endif - - void drawIcon (int *ico, int16_t x, int16_t y, int16_t cols, int16_t rows); - - // Color 444 is a 4 bit scale, so 0 to 15, color 565 takes a 0-255 bit value, so scale up by 255/15 (i.e. 17)! - static uint16_t color444(uint8_t r, uint8_t g, uint8_t b) { return color565(r*17,g*17,b*17); } - - // Converts RGB888 to RGB565 - static uint16_t color565(uint8_t r, uint8_t g, uint8_t b); // This is what is used by Adafruit GFX! - - // Converts RGB333 to RGB565 - static uint16_t color333(uint8_t r, uint8_t g, uint8_t b); // This is what is used by Adafruit GFX! Not sure why they have a capital 'C' for this particular function. - - /** - * @brief - convert RGB565 to RGB888 - * @param uint16_t color - RGB565 input color - * @param uint8_t &r, &g, &b - refs to variables where converted colors would be emplaced - */ - static void color565to888(const uint16_t color, uint8_t &r, uint8_t &g, uint8_t &b); - - - inline void IRAM_ATTR flipDMABuffer() - { - if ( !m_cfg.double_buff) return; - - #if SERIAL_DEBUG - Serial.printf_P(PSTR("Set back buffer to: %d\n"), back_buffer_id); - #endif - - i2s_parallel_set_previous_buffer_not_free(); - // Wait before we allow any writing to the buffer. Stop flicker. - while(i2s_parallel_is_previous_buffer_free() == false) { } - - i2s_parallel_flip_to_buffer(ESP32_I2S_DEVICE, back_buffer_id); - // Flip to other buffer as the backbuffer. - // i.e. Graphic changes happen to this buffer, but aren't displayed until flipDMABuffer() is called again. - back_buffer_id ^= 1; - - i2s_parallel_set_previous_buffer_not_free(); - // Wait before we allow any writing to the buffer. Stop flicker. - while(i2s_parallel_is_previous_buffer_free() == false) { } - - - - - - } - - inline void setPanelBrightness(int b) - { - // Change to set the brightness of the display, range of 1 to matrixWidth (i.e. 1 - 64) - brightness = b; - if (!initialized) - return; - - brtCtrlOE(b); - if (m_cfg.double_buff) - brtCtrlOE(b, 1); - } - - /** - * this is just a wrapper to control brightness - * with an 8-bit value (0-255), very popular in FastLED-based sketches :) - * @param uint8_t b - 8-bit brightness value - */ - void setBrightness8(const uint8_t b) - { - setPanelBrightness(b * PIXELS_PER_ROW / 256); - } - - /** - * Contains the resulting refresh rate (scan rate) that will be achieved - * based on the i2sspeed, colour depth and min_refresh_rate requested. - */ - int calculated_refresh_rate = 0; - - /** - * @brief - Sets how many clock cycles to blank OE before/after LAT signal change - * @param uint8_t pulses - clocks before/after OE - * default is DEFAULT_LAT_BLANKING - * Max is MAX_LAT_BLANKING - * @returns - new value for m_cfg.latch_blanking - */ - uint8_t setLatBlanking(uint8_t pulses); - - /** - * Get a class configuration struct - * - */ - const HUB75_I2S_CFG& getCfg() const {return m_cfg;}; - - - /** - * Stop the ESP32 DMA Engine. Screen will forever be black until next ESP reboot. - */ - void stopDMAoutput() { - resetbuffers(); - i2s_parallel_stop_dma(ESP32_I2S_DEVICE); - } - - - - // ------- PROTECTED ------- - // those might be useful for child classes, like VirtualMatrixPanel - protected: - - /** - * @brief - clears and reinitializes color/control data in DMA buffs - * When allocated, DMA buffs might be dirty, so we need to blank it and initialize ABCDE,LAT,OE control bits. - * Those control bits are constants during the entire DMA sweep and never changed when updating just pixel color data - * so we could set it once on DMA buffs initialization and forget. - * This effectively clears buffers to blank BLACK and makes it ready to display output. - * (Brightness control via OE bit manipulation is another case) - */ - void clearFrameBuffer(bool _buff_id = 0); - - /* Update a specific pixel in the DMA buffer to a colour */ - void updateMatrixDMABuffer(int16_t x, int16_t y, uint8_t red, uint8_t green, uint8_t blue); - - /* Update the entire DMA buffer (aka. The RGB Panel) a certain colour (wipe the screen basically) */ - void updateMatrixDMABuffer(uint8_t red, uint8_t green, uint8_t blue); - - /** - * wipes DMA buffer(s) and reset all color/service bits - */ - inline void resetbuffers(){ - clearFrameBuffer(); - brtCtrlOE(brightness); - if (m_cfg.double_buff){ - clearFrameBuffer(1); - brtCtrlOE(brightness, 1); - } - } - - -#ifndef NO_FAST_FUNCTIONS - /** - * @brief - update DMA buff drawing horizontal line at specified coordinates - * @param x_ccord - line start coordinate x - * @param y_ccord - line start coordinate y - * @param l - line length - * @param r,g,b, - RGB888 color - */ - void hlineDMA(int16_t x_coord, int16_t y_coord, int16_t l, uint8_t red, uint8_t green, uint8_t blue); - - /** - * @brief - update DMA buff drawing horizontal line at specified coordinates - * @param x_ccord - line start coordinate x - * @param y_ccord - line start coordinate y - * @param l - line length - * @param r,g,b, - RGB888 color - */ - void vlineDMA(int16_t x_coord, int16_t y_coord, int16_t l, uint8_t red, uint8_t green, uint8_t blue); - - /** - * @brief - update DMA buff drawing a rectangular at specified coordinates - * uses Fast H/V line draw internally, works faster than multiple consecutive pixel by pixel calls to updateMatrixDMABuffer() - * @param int16_t x, int16_t y - coordinates of a top-left corner - * @param int16_t w, int16_t h - width and height of a rectangular, min is 1 px - * @param uint8_t r - RGB888 color - * @param uint8_t g - RGB888 color - * @param uint8_t b - RGB888 color - */ - void fillRectDMA(int16_t x_coord, int16_t y_coord, int16_t w, int16_t h, uint8_t r, uint8_t g, uint8_t b); -#endif - - // ------- PRIVATE ------- - private: - - // Matrix i2s settings - HUB75_I2S_CFG m_cfg; - - /* ESP32-HUB75-MatrixPanel-I2S-DMA functioning constants - * we can't change those once object instance initialized it's DMA structs - */ - const uint8_t ROWS_PER_FRAME = m_cfg.mx_height / MATRIX_ROWS_IN_PARALLEL; // RPF - rows per frame, either 16 or 32 depending on matrix module - const uint16_t PIXELS_PER_ROW = m_cfg.mx_width * m_cfg.chain_length; // number of pixels in a single row of all chained matrix modules (WIDTH of a combined matrix chain) - - // Other private variables - bool initialized = false; - int back_buffer_id = 0; // If using double buffer, which one is NOT active (ie. being displayed) to write too? - int brightness = 32; // If you get ghosting... reduce brightness level. 60 seems to be the limit before ghosting on a 64 pixel wide physical panel for some panels. - int lsbMsbTransitionBit = 0; // For colour depth calculations - - - // *** DMA FRAMEBUFFER structures - - // ESP 32 DMA Linked List descriptor - int desccount = 0; - lldesc_t * dmadesc_a = {0}; - lldesc_t * dmadesc_b = {0}; - - /* Pixel data is organized from LSB to MSB sequentially by row, from row 0 to row matrixHeight/matrixRowsInParallel - * (two rows of pixels are refreshed in parallel) - * Memory is allocated (malloc'd) by the row, and not in one massive chunk, for flexibility. - * The whole DMA framebuffer is just a vector of pointers to structs with ESP32_I2S_DMA_STORAGE_TYPE arrays - * Since it's dimensions is unknown prior to class initialization, we just declare it here as empty struct and will do all allocations later. - * Refer to rowBitStruct to get the idea of it's internal structure - */ - frameStruct dma_buff; - - - /* Calculate the memory available for DMA use, do some other stuff, and allocate accordingly */ - bool allocateDMAmemory(); - - /* Setup the DMA Link List chain and initiate the ESP32 DMA engine */ - void configureDMA(const HUB75_I2S_CFG& opts); - - /** - * pre-init procedures for specific drivers - * - */ - void shiftDriver(const HUB75_I2S_CFG& opts); - - /** - * @brief - FM6124-family chips initialization routine - */ - void fm6124init(const HUB75_I2S_CFG& _cfg); - - /** - * @brief - reset OE bits in DMA buffer in a way to control brightness - * @param brt - brightness level from 0 to row_width - * @param _buff_id - buffer id to control - */ - void brtCtrlOE(int brt, const bool _buff_id=0); - - -}; // end Class header - -/***************************************************************************************/ -// https://stackoverflow.com/questions/5057021/why-are-c-inline-functions-in-the-header -/* 2. functions declared in the header must be marked inline because otherwise, every translation unit which includes the header will contain a definition of the function, and the linker will complain about multiple definitions (a violation of the One Definition Rule). The inline keyword suppresses this, allowing multiple translation units to contain (identical) definitions. */ - -/** - * @brief - convert RGB565 to RGB888 - * @param uint16_t color - RGB565 input color - * @param uint8_t &r, &g, &b - refs to variables where converted colours would be emplaced - */ -inline void MatrixPanel_I2S_DMA::color565to888(const uint16_t color, uint8_t &r, uint8_t &g, uint8_t &b){ - r = ((((color >> 11) & 0x1F) * 527) + 23) >> 6; - g = ((((color >> 5) & 0x3F) * 259) + 33) >> 6; - b = (((color & 0x1F) * 527) + 23) >> 6; -} - -inline void MatrixPanel_I2S_DMA::drawPixel(int16_t x, int16_t y, uint16_t color) // adafruit virtual void override -{ - uint8_t r,g,b; - color565to888(color,r,g,b); - - updateMatrixDMABuffer( x, y, r, g, b); -} - -inline void MatrixPanel_I2S_DMA::fillScreen(uint16_t color) // adafruit virtual void override -{ - uint8_t r,g,b; - color565to888(color,r,g,b); - - updateMatrixDMABuffer(r, g, b); // RGB only (no pixel coordinate) version of 'updateMatrixDMABuffer' -} - -inline void MatrixPanel_I2S_DMA::drawPixelRGB888(int16_t x, int16_t y, uint8_t r, uint8_t g,uint8_t b) -{ - updateMatrixDMABuffer( x, y, r, g, b); -} - -inline void MatrixPanel_I2S_DMA::fillScreenRGB888(uint8_t r, uint8_t g,uint8_t b) -{ - updateMatrixDMABuffer(r, g, b); // RGB only (no pixel coordinate) version of 'updateMatrixDMABuffer' -} - -#ifdef USE_GFX_ROOT -// Support for CRGB values provided via FastLED -inline void MatrixPanel_I2S_DMA::drawPixel(int16_t x, int16_t y, CRGB color) -{ - updateMatrixDMABuffer( x, y, color.red, color.green, color.blue); -} - -inline void MatrixPanel_I2S_DMA::fillScreen(CRGB color) -{ - updateMatrixDMABuffer(color.red, color.green, color.blue); -} -#endif - - -// Pass 8-bit (each) R,G,B, get back 16-bit packed color -//https://github.com/squix78/ILI9341Buffer/blob/master/ILI9341_SPI.cpp -inline uint16_t MatrixPanel_I2S_DMA::color565(uint8_t r, uint8_t g, uint8_t b) { - return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3); -} - -// Promote 3/3/3 RGB to Adafruit_GFX 5/6/5 RRRrrGGGgggBBBbb -inline uint16_t MatrixPanel_I2S_DMA::color333(uint8_t r, uint8_t g, uint8_t b) { - return ((r & 0x7) << 13) | ((r & 0x6) << 10) | ((g & 0x7) << 8) | ((g & 0x7) << 5) | ((b & 0x7) << 2) | ((b & 0x6) >> 1); -} - -inline void MatrixPanel_I2S_DMA::drawIcon (int *ico, int16_t x, int16_t y, int16_t cols, int16_t rows) { -/* drawIcon draws a C style bitmap. -// Example 10x5px bitmap of a yellow sun -// - int half_sun [50] = { - 0x0000, 0x0000, 0x0000, 0xffe0, 0x0000, 0x0000, 0xffe0, 0x0000, 0x0000, 0x0000, - 0x0000, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe0, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, - 0xffe0, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0xffe0, - 0x0000, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0x0000, - }; - - MatrixPanel_I2S_DMA matrix; - - matrix.drawIcon (half_sun, 0,0,10,5); -*/ - - int i, j; - for (i = 0; i < rows; i++) { - for (j = 0; j < cols; j++) { - drawPixel (x + j, y + i, (uint16_t) ico[i * cols + j]); - } - } -} - - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-leddrivers.cpp b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-leddrivers.cpp deleted file mode 100644 index bb482a2..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-HUB75-MatrixPanel-leddrivers.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - Various LED Driver chips might need some specific code for initialisation/control logic - -*/ - -#include -#include "ESP32-HUB75-MatrixPanel-I2S-DMA.h" - -#define CLK_PULSE digitalWrite(_cfg.gpio.clk, HIGH); digitalWrite(_cfg.gpio.clk, LOW); - -/** - * @brief - pre-init procedures for specific led-drivers - * this method is called before DMA/I2S setup while GPIOs - * aint yet assigned for DMA operation - * - */ -void MatrixPanel_I2S_DMA::shiftDriver(const HUB75_I2S_CFG& _cfg){ - switch (_cfg.driver){ - case HUB75_I2S_CFG::ICN2038S: - case HUB75_I2S_CFG::FM6124: - case HUB75_I2S_CFG::FM6126A: - fm6124init(_cfg); - break; - case HUB75_I2S_CFG::MBI5124: - /* MBI5124 chips must be clocked with positive-edge, since it's LAT signal - * resets on clock's rising edge while high - * https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/files/5952216/5a542453754da.pdf - */ - m_cfg.clkphase=true; - break; - case HUB75_I2S_CFG::SHIFTREG: - default: - break; - } -} - - -void MatrixPanel_I2S_DMA::fm6124init(const HUB75_I2S_CFG& _cfg){ - #if SERIAL_DEBUG - Serial.println( F("MatrixPanel_I2S_DMA - initializing FM6124 driver...")); - #endif - bool REG1[16] = {0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0}; // this sets global matrix brightness power - bool REG2[16] = {0,0,0,0,0, 0,0,0,0,1,0, 0,0,0,0,0}; // a single bit enables the matrix output - - for (uint8_t _pin:{_cfg.gpio.r1, _cfg.gpio.r2, _cfg.gpio.g1, _cfg.gpio.g2, _cfg.gpio.b1, _cfg.gpio.b2, _cfg.gpio.clk, _cfg.gpio.lat, _cfg.gpio.oe}){ - pinMode(_pin, OUTPUT); - digitalWrite(_pin, LOW); - } - - digitalWrite(_cfg.gpio.oe, HIGH); // Disable Display - - // Send Data to control register REG1 - // this sets the matrix brightness actually - for (int l = 0; l < PIXELS_PER_ROW; l++){ - for (uint8_t _pin:{_cfg.gpio.r1, _cfg.gpio.r2, _cfg.gpio.g1, _cfg.gpio.g2, _cfg.gpio.b1, _cfg.gpio.b2}) - digitalWrite(_pin, REG1[l%16]); // we have 16 bits shifters and write the same value all over the matrix array - - if (l > PIXELS_PER_ROW - 12){ // pull the latch 11 clocks before the end of matrix so that REG1 starts counting to save the value - digitalWrite(_cfg.gpio.lat, HIGH); - } - CLK_PULSE - } - - // drop the latch and save data to the REG1 all over the FM6124 chips - digitalWrite(_cfg.gpio.lat, LOW); - - // Send Data to control register REG2 (enable LED output) - for (int l = 0; l < PIXELS_PER_ROW; l++){ - for (uint8_t _pin:{_cfg.gpio.r1, _cfg.gpio.r2, _cfg.gpio.g1, _cfg.gpio.g2, _cfg.gpio.b1, _cfg.gpio.b2}) - digitalWrite(_pin, REG2[l%16]); // we have 16 bits shifters and we write the same value all over the matrix array - - if (l > PIXELS_PER_ROW - 13){ // pull the latch 12 clocks before the end of matrix so that reg2 stars counting to save the value - digitalWrite(_cfg.gpio.lat, HIGH); - } - CLK_PULSE - } - - // drop the latch and save data to the REG1 all over the FM6126 chips - digitalWrite(_cfg.gpio.lat, LOW); - - // blank data regs to keep matrix clear after manipulations - for (uint8_t _pin:{_cfg.gpio.r1, _cfg.gpio.r2, _cfg.gpio.g1, _cfg.gpio.g2, _cfg.gpio.b1, _cfg.gpio.b2}) - digitalWrite(_pin, LOW); - - for (int l = 0; l < PIXELS_PER_ROW; ++l){ - CLK_PULSE - } - - digitalWrite(_cfg.gpio.lat, HIGH); - CLK_PULSE - digitalWrite(_cfg.gpio.lat, LOW); - digitalWrite(_cfg.gpio.oe, LOW); // Enable Display - CLK_PULSE -} \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-VirtualMatrixPanel-I2S-DMA.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-VirtualMatrixPanel-I2S-DMA.h deleted file mode 100644 index b2c36d0..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ /dev/null @@ -1,315 +0,0 @@ -#ifndef _ESP32_VIRTUAL_MATRIX_PANEL_I2S_DMA -#define _ESP32_VIRTUAL_MATRIX_PANEL_I2S_DMA - -/******************************************************************* - Class contributed by Brian Lough, and expanded by Faptastic. - - Originally designed to allow CHAINING of panels together to create - a 'bigger' display of panels. i.e. Chaining 4 panels into a 2x2 - grid. - - However, the function of this class has expanded now to also manage - the output for 1/16 scan panels, as the core DMA library is designed - ONLY FOR 1/16 scan matrix panels. - - YouTube: https://www.youtube.com/brianlough - Tindie: https://www.tindie.com/stores/brianlough/ - Twitter: https://twitter.com/witnessmenow - *******************************************************************/ - -#include "ESP32-HUB75-MatrixPanel-I2S-DMA.h" -#ifndef NO_GFX - #include -#endif - -struct VirtualCoords { - - int16_t x; - int16_t y; - int16_t virt_row; // chain of panels row - int16_t virt_col; // chain of panels col - - VirtualCoords() : x(0), y(0) - { } - -}; - -enum PANEL_SCAN_RATE {NORMAL_ONE_SIXTEEN, ONE_EIGHT_32, ONE_EIGHT_16}; - -#ifdef USE_GFX_ROOT -class VirtualMatrixPanel : public GFX -#elif !defined NO_GFX -class VirtualMatrixPanel : public Adafruit_GFX -#else -class VirtualMatrixPanel -#endif -{ - - public: - int16_t virtualResX; - int16_t virtualResY; - - int16_t vmodule_rows; - int16_t vmodule_cols; - - int16_t panelResX; - int16_t panelResY; - - int16_t dmaResX; // The width of the chain in pixels (as the DMA engine sees it) - - MatrixPanel_I2S_DMA *display; - - VirtualMatrixPanel(MatrixPanel_I2S_DMA &disp, int _vmodule_rows, int _vmodule_cols, int _panelResX, int _panelResY, bool serpentine_chain = true, bool top_down_chain = false) -#ifdef USE_GFX_ROOT - : GFX(_vmodule_cols*_panelResX, _vmodule_rows*_panelResY) -#elif !defined NO_GFX - : Adafruit_GFX(_vmodule_cols*_panelResX, _vmodule_rows*_panelResY) -#endif - { - this->display = &disp; - - panelResX = _panelResX; - panelResY = _panelResY; - - vmodule_rows = _vmodule_rows; - vmodule_cols = _vmodule_cols; - - virtualResX = vmodule_cols*_panelResX; - virtualResY = vmodule_rows*_panelResY; - - dmaResX = panelResX * vmodule_rows * vmodule_cols; - - - - /* Virtual Display width() and height() will return a real-world value. For example: - * Virtual Display width: 128 - * Virtual Display height: 64 - * - * So, not values that at 0 to X-1 - */ - - _s_chain_party = serpentine_chain; // serpentine, or 'S' chain? - _chain_top_down= top_down_chain; - - coords.x = coords.y = -1; // By default use an invalid co-ordinates that will be rejected by updateMatrixDMABuffer - - } - - // equivalent methods of the matrix library so it can be just swapped out. - virtual void drawPixel(int16_t x, int16_t y, uint16_t color); - virtual void fillScreen(uint16_t color); // overwrite adafruit implementation - virtual void fillScreenRGB888(uint8_t r, uint8_t g,uint8_t b); - void clearScreen() { display->clearScreen(); } - void drawPixelRGB888(int16_t x, int16_t y, uint8_t r, uint8_t g, uint8_t b); - - uint16_t color444(uint8_t r, uint8_t g, uint8_t b) { return display->color444(r, g, b); } - uint16_t color565(uint8_t r, uint8_t g, uint8_t b) { return display->color565(r, g, b); } - uint16_t color333(uint8_t r, uint8_t g, uint8_t b) { return display->color333(r, g, b); } - - void flipDMABuffer() { display->flipDMABuffer(); } - void drawDisplayTest(); - void setRotate(bool rotate); - - void setPhysicalPanelScanRate(PANEL_SCAN_RATE rate); - - protected: - - virtual VirtualCoords getCoords(int16_t &x, int16_t &y); - VirtualCoords coords; - - bool _s_chain_party = true; // Are we chained? Ain't no party like a... - bool _chain_top_down = false; // is the ESP at the top or bottom of the matrix of devices? - bool _rotate = false; - - PANEL_SCAN_RATE _panelScanRate = NORMAL_ONE_SIXTEEN; - -}; // end Class header - -/** - * Calculate virtual->real co-ordinate mapping to underlying single chain of panels connected to ESP32. - * Updates the private class member variable 'coords', so no need to use the return value. - * Not thread safe, but not a concern for ESP32 sketch anyway... I think. - */ -inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t &x, int16_t &y) { - //Serial.println("Called Base."); - coords.x = coords.y = -1; // By defalt use an invalid co-ordinates that will be rejected by updateMatrixDMABuffer - - // We want to rotate? - if (_rotate){ - int16_t temp_x=x; - x=y; - y=virtualResY-1-temp_x; - } - - if ( x < 0 || x >= virtualResX || y < 0 || y >= virtualResY ) { // Co-ordinates go from 0 to X-1 remember! otherwise they are out of range! - //Serial.printf("VirtualMatrixPanel::getCoords(): Invalid virtual display coordinate. x,y: %d, %d\r\n", x, y); - return coords; - } - - // Stupidity check - if ( (vmodule_rows == 1) && (vmodule_cols == 1)) // single panel... - { - coords.x = x; - coords.y = y; - return coords; - } - - uint8_t row = (y / panelResY) + 1; //a non indexed 0 row number - if( ( _s_chain_party && !_chain_top_down && (row % 2 == 0) ) // serpentine vertically stacked chain starting from bottom row (i.e. ESP closest to ground), upwards - || - ( _s_chain_party && _chain_top_down && (row % 2 != 0) ) // serpentine vertically stacked chain starting from the sky downwards - ) - { - // First portion gets you to the correct offset for the row you need - // Second portion inverts the x on the row - coords.x = ((y / panelResY) * (virtualResX)) + (virtualResX - x) - 1; - - // inverts the y the row - coords.y = panelResY - 1 - (y % panelResY); - } - else - { - // Normal chain pixel co-ordinate - coords.x = x + ((y / panelResY) * (virtualResX)) ; - coords.y = y % panelResY; - } - - // Reverse co-ordinates if panel chain from ESP starts from the TOP RIGHT - if (_chain_top_down) - { - /* - const HUB75_I2S_CFG _cfg = this->display->getCfg(); - coords.x = (_cfg.mx_width * _cfg.chain_length - 1) - coords.x; - coords.y = (_cfg.mx_height-1) - coords.y; - */ - coords.x = (dmaResX - 1) - coords.x; - coords.y = (panelResY-1) - coords.y; - } - - - /* START: Pixel remapping AGAIN to convert 1/16 SCAN output that the - * the underlying hardware library is designed for (because - * there's only 2 x RGB pins... and convert this to 1/8 or something - */ - if ( _panelScanRate == ONE_EIGHT_32) - { - /* Convert Real World 'VirtualMatrixPanel' co-ordinates (i.e. Real World pixel you're looking at - on the panel or chain of panels, per the chaining configuration) to a 1/8 panels - double 'stretched' and 'squished' coordinates which is what needs to be sent from the - DMA buffer. - - Note: Look at the One_Eight_1_8_ScanPanel code and you'll see that the DMA buffer is setup - as if the panel is 2 * W and 0.5 * H ! - */ - - /* - Serial.print("VirtualMatrixPanel Mapping ("); Serial.print(x, DEC); Serial.print(","); Serial.print(y, DEC); Serial.print(") "); - // to - Serial.print("to ("); Serial.print(coords.x, DEC); Serial.print(","); Serial.print(coords.y, DEC); Serial.println(") "); - */ - if ( (y & 8) == 0) { - coords.x += ((coords.x / panelResX)+1)*panelResX; // 1st, 3rd 'block' of 8 rows of pixels, offset by panel width in DMA buffer - } - else { - coords.x += (coords.x / panelResX)*panelResX; // 2nd, 4th 'block' of 8 rows of pixels, offset by panel width in DMA buffer - } - - // http://cpp.sh/4ak5u - // Real number of DMA y rows is half reality - // coords.y = (y / 16)*8 + (y & 0b00000111); - coords.y = (y >> 4)*8 + (y & 0b00000111); - - /* - Serial.print("OneEightScanPanel Mapping ("); Serial.print(x, DEC); Serial.print(","); Serial.print(y, DEC); Serial.print(") "); - // to - Serial.print("to ("); Serial.print(coords.x, DEC); Serial.print(","); Serial.print(coords.y, DEC); Serial.println(") "); - */ - } - - - if ( _panelScanRate == ONE_EIGHT_16) - { - if ((y & 8) == 0) { - coords.x += (panelResX>>2) * (((coords.x & 0xFFF0)>>4)+1); // 1st, 3rd 'block' of 8 rows of pixels, offset by panel width in DMA buffer - } else { - coords.x += (panelResX>>2) * (((coords.x & 0xFFF0)>>4)); // 2nd, 4th 'block' of 8 rows of pixels, offset by panel width in DMA buffer - } - - if (y < 32) - coords.y = (y >> 4) * 8 + (y & 0b00000111); - else{ - coords.y = ((y-32) >> 4) * 8 + (y & 0b00000111); - coords.x += 256; - } - } - - - //Serial.print("Mapping to x: "); Serial.print(coords.x, DEC); Serial.print(", y: "); Serial.println(coords.y, DEC); - return coords; -} - -inline void VirtualMatrixPanel::drawPixel(int16_t x, int16_t y, uint16_t color) { // adafruit virtual void override - getCoords(x, y); - this->display->drawPixel(coords.x, coords.y, color); -} - -inline void VirtualMatrixPanel::fillScreen(uint16_t color) { // adafruit virtual void override - this->display->fillScreen(color); -} - -inline void VirtualMatrixPanel::fillScreenRGB888(uint8_t r, uint8_t g,uint8_t b) { - this->display->fillScreenRGB888(r, g, b); -} - -inline void VirtualMatrixPanel::drawPixelRGB888(int16_t x, int16_t y, uint8_t r, uint8_t g, uint8_t b) { - getCoords(x, y); - this->display->drawPixelRGB888( coords.x, coords.y, r, g, b); -} - -inline void VirtualMatrixPanel::setRotate(bool rotate) { - _rotate=rotate; - -#ifndef NO_GFX - // We don't support rotation by degrees. - if (rotate) { setRotation(1); } else { setRotation(0); } -#endif -} - -inline void VirtualMatrixPanel::setPhysicalPanelScanRate(PANEL_SCAN_RATE rate) { - _panelScanRate=rate; -} - - - -#ifndef NO_GFX -inline void VirtualMatrixPanel::drawDisplayTest() -{ - this->display->setFont(&FreeSansBold12pt7b); - this->display->setTextColor(this->display->color565(255, 255, 0)); - this->display->setTextSize(1); - - for ( int panel = 0; panel < vmodule_cols*vmodule_rows; panel++ ) { - int top_left_x = (panel == 0) ? 0:(panel*panelResX); - this->display->drawRect( top_left_x, 0, panelResX, panelResY, this->display->color565( 0, 255, 0)); - this->display->setCursor(panel*panelResX, panelResY-3); - this->display->print((vmodule_cols*vmodule_rows)-panel); - } - -} -#endif -/* -// need to recreate this one, as it wouldn't work to just map where it starts. -inline void VirtualMatrixPanel::drawIcon (int *ico, int16_t x, int16_t y, int16_t icon_cols, int16_t icon_rows) { - int i, j; - for (i = 0; i < icon_rows; i++) { - for (j = 0; j < icon_cols; j++) { - // This is a call to this libraries version of drawPixel - // which will map each pixel, which is what we want. - //drawPixelRGB565 (x + j, y + i, ico[i * module_cols + j]); - drawPixel (x + j, y + i, ico[i * icon_cols + j]); - } - } -} -*/ - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/LICENSE.txt b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/LICENSE.txt deleted file mode 100644 index 72dc60d..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -The MIT License (MIT) - -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. diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/README.md deleted file mode 100644 index 6bd615d..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/README.md +++ /dev/null @@ -1,230 +0,0 @@ -# HUB75 RGB LED matrix library utilizing ESP32 DMA Engine - -__[BUILD](/doc/BuildOptions.md) | [EXAMPLES](/examples/README.md)__ | [![PlatformIO CI](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/actions/workflows/pio_build.yml/badge.svg)](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/actions/workflows/pio_build.yml) - - **Table of Content** - -- [Introduction](#introduction) - * [Features](#features) - * [Supported ESP32](#esp32-supported) - * [Supported Panels](#panels-supported) - * [Panel driver chips known to be working well](#panel-driver-chips-known-to-be-working-well) - * [Panels Not Supported](#panels-not-supported) - * [Update for 16x32 Panels](#update-for-16x32-panels) - * [Cool uses of this library](#cool-uses-of-this-library) -- [Getting Started](#getting-started) - * [1. Library Installation](#1-library-installation) - * [2. Wiring ESP32 with the LED Matrix Panel](#2-wiring-esp32-with-the-led-matrix-panel) - * [3. Run a Test Sketch](#3-run-a-test-sketch) -- [More Information](#more-information) - * [Build-time options](#doc/BuildOptions.md) - * [Memory constraints](#memory-constraints) - * [Can I use with a larger panel (i.e. 64x64px square panel)?](#can-i-use-with-a-larger-panel-ie-64x64px-square-panel) - * [Can I chain panels?](#can-i-chain-panels) - * [Panel Brightness](#panel-brightness) - * [Latch blanking](#latch-blanking) - * [Power, Power and Power!](#power--power-and-power) - * [Inspiration](#inspiration) - - [Thank you!](#thank-you) - -## Introduction -This ESP32 Arduino/IDF library for HUB75 / HUB75E connector type 64x32 RGB LED 1/16 Scan OR 64x64 RGB LED 1/32 Scan LED Matrix Panel, utilities the DMA functionality provided by the ESP32's I2S 'LCD Mode'. - -### Features -- **Low CPU overhead** - once initialized pixel data is pumped to the matrix inputs via DMA engine directly from memory -- **Fast** - updating pixel data involves only bit-wise logic over DMA buffer memory, no pins manipulation or blocking IO -- **Full screen BCM** - library utilizes [binary-code modulation](http://www.batsocks.co.uk/readme/art_bcm_5.htm) to render pixel color depth / brightness over the entire matrix -- **Variable color depth** - up to TrueColor 24 bits output is possible depending on matrix size/refresh rate required -- **CIE 1931** luminance [correction](https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/) (aka natural LED dimming) -- **Adafruit GFX API** - library could be build with AdafruitGFX, simplified GFX or without GFX API at all - -If you wanna ask "*...OK, OK, than what's the price for those features?*" I'll tell you - "[memory](/doc/i2s_memcalc.md), you pay it all by precious MCU's memory for DMA buffer". - -## ESP32 Supported -Espressif have kept the 'ESP32' name for all their chips for brand recognition, but their new variant MCU's are different to the ESP32 this library was built for. - -This library supports the *original* ESP32. That being the ESP-WROOM-32 module with ESP32‑D0WDQ6 chip from 2017. This MCU has 520kB of SRAM which is much more than all the recent 'reboots' of the ESP32 such as the S2, S3, C3 etc. If you want to use this library, use with an original ESP32 as it has the most SRAM for DMA. - -Support also exists for the ESP32-S2 and ESP32-S3. - -RISC-V ESP32's (like the C3) are not, and will never be supported as they do not have parallel DMA output required for this library. - -## Panels Supported -* 64x32 (width x height) pixel 1/16 Scan LED Matrix 'Indoor' Panel, such as this [typical RGB panel available for purchase](https://www.aliexpress.com/item/256-128mm-64-32-pixels-1-16-Scan-Indoor-3in1-SMD2121-RGB-full-color-P4-led/32810362851.html). -* 64x64 pixel 1/32 Scan LED Matrix 'Indoor' Panel. -* 32x16 pixel 1/4 Scan LED Matrix 'Indoor' Panel using an ingenious workaround as demonstrated in the 32x16_1_4_ScanPanel example. -* 126x64 [SM5266P](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/164) 1/32 Scan Panel - -Ones interested in internals of such matrices could find [this article](https://www.sparkfun.com/news/2650) useful. - -Due to the high-speed optimized nature of this library, only specific panels are supported. Please do not raise issues with respect to panels not supported on the list below. - -## Panel driver chips known to be working well - -* ICND2012 -* [RUC7258](http://www.ruichips.com/en/products.html?cateid=17496) -* FM6126A AKA ICN2038S, [FM6124](https://datasheet4u.com/datasheet-pdf/FINEMADELECTRONICS/FM6124/pdf.php?id=1309677) (Refer to [PatternPlasma](/examples/2_PatternPlasma) example on how to use.) -* SM5266P - -## Panels Not Supported -* 1/8 Scan LED Matrix Panels are not supported. -* RUL5358 / SHIFTREG_ABC_BIN_DE based panels are not supported. -* Any other panel not listed above. - -Please use an [alternative library](https://github.com/2dom/PxMatrix) if you bought one of these. - -## Update for 16x32 Panels -* There is a virtual panel class available to work with 16x32 panels (see: [examples/16x32 Panel](/examples/P6_32x16_1_4_ScanPanel). This Panel includes drawing lines and rectangles, text and scrolling text - -## Cool uses of this library -There are a number of great looking LED graphical display projects which leverage this library, these include: -* [128x64 Morph Clock](https://github.com/bogd/esp32-morphing-clock) -* [FFT Audio Visualisation](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/149) -* [Clock, GIF Animator and Audio Visualiser](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/153) -* [Aurora Audio Visualiser](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/188) -* [Big Visualisation](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/155) -* [Clockwise](https://jnthas.github.io/clockwise/) - -# Getting Started -## 1. Library Installation - -* Dependency: You will need to install Adafruit_GFX from the "Library > Manage Libraries" menu. -* Download and unzip this repository into your Arduino/libraries folder (or better still, use the Arduino 'add library from .zip' option. -* Library also tested to work fine with PlatformIO, install into your PlatformIO projects' lib/ folder as appropriate. Or just add it into [platformio.ini](/doc/BuildOptions.md) [lib_depth](https://docs.platformio.org/en/latest/projectconf/section_env_library.html#lib-deps) section. - -## 2. Wiring ESP32 with the LED Matrix Panel -By default the pin mapping is as follows (defaults defined in ESP32-HUB75-MatrixPanel-I2S-DMA.h). - -``` -HUB 75 PANEL ESP 32 PIN -+----------+ -| R1 G1 | R1 -> IO25 G1 -> IO26 -| B1 GND | B1 -> IO27 -| R2 G2 | R2 -> IO14 G2 -> IO12 -| B2 E | B2 -> IO13 E -> N/A (required for 1/32 scan panels, like 64x64. Any available pin would do, i.e. IO32 ) -| A B | A -> IO23 B -> IO19 -| C D | C -> IO05 D -> IO17 -| CLK LAT | CLK -> IO16 LAT -> IO 4 -| OE GND | OE -> IO15 GND -> ESP32 GND -+----------+ -``` - -However, if you want to change this, simply provide the wanted pin mapping as part of the class initialization structure. For example, in your sketch have something like the following: - -``` -// Change these to whatever suits -#define R1_PIN 25 -#define G1_PIN 26 -#define B1_PIN 27 -#define R2_PIN 14 -#define G2_PIN 12 -#define B2_PIN 13 -#define A_PIN 23 -#define B_PIN 22 -#define C_PIN 5 -#define D_PIN 17 -#define E_PIN -1 // required for 1/32 scan panels, like 64x64. Any available pin would do, i.e. IO32 -#define LAT_PIN 4 -#define OE_PIN 15 -#define CLK_PIN 16 - -HUB75_I2S_CFG::i2s_pins _pins={R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN, A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, LAT_PIN, OE_PIN, CLK_PIN}; -HUB75_I2S_CFG mxconfig( - 64, // Module width - 32, // Module height - 2, // chain length - _pins, // pin mapping -); -dma_display = new MatrixPanel_I2S_DMA(mxconfig); -``` - -Various people have created PCBs for which one can simply connect an ESP32 to a PCB, and then the PCB to the HUB75 connector, such as: - -* Brian Lough's [ESP32 I2S Matrix Shield](http://blough.ie/i2smat/) -* Charles Hallard's [WeMos Matrix Shield](https://github.com/hallard/WeMos-Matrix-Shield-DMA) -* Bogdan Sass's [Morph Clock Shield](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/110#discussioncomment-861152) - -Please contact or order these products from the respective authors. - -## 3. Run a Test Sketch -Below is a bare minimum sketch to draw a single white dot in the top left. You must call begin() before you call ANY pixel-drawing (fonts, lines, colours etc.) function of the MatrixPanel_I2S_DMA class. - -Once this is working, refer to the [PIO Test Patterns](/examples/PIO_TestPatterns) example. This sketch draws simple colors/lines/gradients over the entire matrix and it could help to troubleshoot various issues with ghosting, flickering, etc... ->Note: Requires the use of [PlatformIO](https://platformio.org/), which you should probably use if you aren't already. -# More Information -## Build-time options -Although Arduino IDE does not [seem](https://github.com/arduino/Arduino/issues/421) to offer any way of specifying compile-time options for external libs there are other IDE's (like [PlatformIO](https://platformio.org/)/[Eclipse](https://www.eclipse.org/ide/)) that could use that. Check [Build Options](doc/BuildOptions.md) document for reference. - -## Memory constraints -If you are going to use large/combined panels make sure to check for [memory constraints](/doc/i2s_memcalc.md). - -NOTE: You *cannot* use PSRAM to expand the amount of memory available to use by this library. ESP32 hardware [only allows DMA transfer from *internal* SRAM](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/55), so you will be limited to the 200KB or so of usable SRAM of the ESP32 regardless of how many megabytes of PSRAM you may have connected. - -## Can I use with a larger panel (i.e. 64x64px square panel)? -If you want to use with a 64x64 pixel panel (typically a HUB75*E* panel) you MUST configure a valid *E_PIN* to your ESP32 and connect it to the E pin of the HUB75 panel! Hence the 'E' in 'HUB75E' - -## Can I chain panels? -Yes! - -[Horizontal](https://user-images.githubusercontent.com/12006953/122657476-cd358d00-d15b-11eb-9c6c-99b61378c56a.mp4) - -For example: If you want to chain two of these horizontally to make a 128x32 panel you can do so by connecting the panels in series using the HUB75 ribbon cable. Than you must provide proper configuration structure to the class constructor letting it know that you use "one long virtual matrix chain". Refer to [Pattern Plasma](/examples/2_PatternPlasma/) example for all the details about configuration setup. - -Finally, if you wanted to chain 4 x (64x32px) panels to make 128x64px display (essentially a 2x2 grid of 64x32 LED Matrix modules), a little more magic will be required. Refer to the [Chained Panels](examples/ChainedPanels/) example. - -Resolutions beyond 128x64 are more likely to result in crashes due to [memory](/doc/i2s_memcalc.md) constraints etc. You are on your own after this point - PLEASE do not raise issues about this, the library can't magically defeat the SRAM memory constraints of the ESP32. - -![ezgif com-video-to-gif](https://user-images.githubusercontent.com/12006953/89837358-b64c0480-db60-11ea-870d-4b6482068a3b.gif) - - ## Panel Brightness - -By default you should not need to change / set the brightness setting as the default value (16) is sufficient for most purposes. Brightness can be changed by calling `setPanelBrightness(int XX)` or `setBrightness8(uint8_t XX)`. - -The value to pass `setPanelBrightness()` must be less than MATRIX_CHAIN_WIDTH in pixels. For example for a single 64x32 LED Matrix Module, a value must be less than 64. For 3 modules 64x32 it must be less than 192. However, if you set the brightness too high, you may experience ghosting. - -Also you may use method `setBrightness8(x)`, where x is a uint8_t value between 0-255. Library will recalculate required brightness level depending on matrix width (mostly useful with FastLED-based sketches). - -Example: -``` -void setup() { -Serial.begin(115200); - dma_display->begin(); // setup the LED matrix - dma_display->setBrightness8(90); //0-255 - dma_display->clearScreen(); -} -``` - -Summary: setPanelBrightness(xx) value can be any number from 0 (display off) to MATRIX_WIDTH-1. So if you are chaining multiple 64x32 panels, then this value may actually be > 64 (or you will have a dim display). Changing the brightness will have a huge impact on power usage. - -![It's better in real life](image.jpg) - - -## Latch blanking -If you are facing issues with image ghosting when pixels has clones with horizontal offset, than you try to change Latch blanking value. Latch blanking controls for how many clock pulses matrix output is disabled via EO signal before/after toggling LAT signal. It hides row bits transitioning and different panels may require longer times for proper operation. Default value is 1 clock before/after LAT row transition. This could be controlled with `MatrixPanel_I2S_DMA::setLatBlanking(uint8_t v)`. v could be between 1 to 4, default is 1, larger values won't give any benefit other than reducing brightness. - -An example: -``` -dma_display->setLatBlanking(2); -``` - -## Power, Power and Power! -Having a good power supply is CRITICAL, and it is highly recommended, for chains of LED Panels to have a 1000-2000uf capacitor soldered to the back of each LED Panel across the [GND and VCC pins](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/39#issuecomment-720780463), otherwise you WILL run into issues with 'flashy' graphics whereby a large amount of LEDs are turned on and off in succession (due to current/power draw peaks and troughs). - - - Refer to this guide written for the [rpi-rgb-led-matrix library](https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/wiring.md#a-word-about-power) for an explanation. -- Refer to this [example](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/39#issuecomment-722691127) issue of what can go wrong with a poor power supply. - - -- Refer to [this comment](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/35#issuecomment-726419862) in regards to certain panels not playing nice with voltages, and a 3.3volt signal that the ESP32 GPIO can only provide. - -## Inspiration -This project was inspired by: -* 'SmartMatrix': https://github.com/pixelmatix/SmartMatrix/tree/teensylc -* Sprite_TM's demo implementation here: https://www.esp32.com/viewtopic.php?f=17&t=3188 - -# Thank you! -* [Brian Lough](https://www.tindie.com/stores/brianlough/) ([youtube link](https://www.youtube.com/c/brianlough)) for providing code contributions, hardware and suggestions -* [Vortigont](https://github.com/vortigont) for his game changing code contributions and performance optimisations -* [Galaxy Man](https://github.com/Galaxy-Man) for donation of 1/16 scan panels to support the implemenation of led matrix panel chaining (virtual display) support -* [Pipimaxi](https://github.com/Pipimaxi) for the donation of a ESP32-S2 to enable support for ESP32 S2/S3's to be implemented -* [Mark Donners](https://github.com/donnersm) ('The Electronic Engineer' on [youtube](https://www.youtube.com/watch?v=bQ7c9Vlhyp0&t=118s)) for the donation of a 1/8 scan panel to build and test working support of these led matrix panels! -* And lots of others, let me know if I've missed you. diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/WiringExample.jpg b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/WiringExample.jpg deleted file mode 100644 index d33bf77..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/WiringExample.jpg and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/component.mk b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/component.mk deleted file mode 100644 index 049f190..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/component.mk +++ /dev/null @@ -1 +0,0 @@ -COMPONENT_ADD_INCLUDEDIRS = . diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/BuildOptions.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/BuildOptions.md deleted file mode 100644 index 1fc1687..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/BuildOptions.md +++ /dev/null @@ -1,31 +0,0 @@ -### Build Options and flags - -This lib supports build-time defines used to set some of the basic key features. -For example build flags could be set using PlatformIO's .ini file like this - -``` -[env] -framework = arduino -platform = espressif32 -lib_deps = - ESP32 HUB75 LED MATRIX PANEL DMA Display -build_flags = - -DSERIAL_DEBUG - -DNO_GFX -``` - -## Build flags - -| Flag | Description | Note | -| :------------ |---------------|-----| -| **SERIAL_DEBUG** |Print out detailed information about memory allocations, DMA descriptors setup and color depth [BCM](http://www.batsocks.co.uk/readme/art_bcm_5.htm) | -| **USE_GFX_ROOT** | Use [lightweight](https://github.com/mrfaptastic/Adafruit_GFX_Lite) version of AdafuitGFX, without Adafruit BusIO extensions | You **must** install [Adafruit_GFX_Lite](https://github.com/mrfaptastic/Adafruit_GFX_Lite) library instead of original AdafruitGFX| -| **NO_GFX** | Build without AdafuitGFX API, only native methods supported based on manipulating DMA buffer. I.e. no methods of drawing circles/shapes, typing text or using fonts!!! This might save some resources for applications using it's own internal graphics buffer or working solely with per-pixel manipulation. | Use this if you rely on FastLED, Neomatrix or any other API. For example [Aurora](/examples/AuroraDemo/) effects can work fine w/o AdafruitGFX. | -| **NO_FAST_FUNCTIONS** | Do not build auxiliary speed-optimized functions. Those are used to speed-up operations like drawing straight lines or rectangles. Otherwise lines/shapes are drawn using drawPixel() method. The trade-off for speed is RAM/code-size, take it or leave it ;) | If you are not using AdafruitGFX than you probably do not need this either| -|**NO_CIE1931**|Do not use LED brightness [compensation](https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/) described in [CIE 1931](https://en.wikipedia.org/wiki/CIE_1931_color_space). Normally library would adjust every pixel's RGB888 so that luminance (or brightness control) for the corresponding LED's would appear 'linear' to the human's eye. I.e. a white dot with rgb(128,128,128) would seem to be at 50% brightness between rgb(0,0,0) and rgb(255,255,255). Normally you would like to keep this enabled by default. Not only it makes brightness control "linear", it also makes colors more vivid, otherwise it looks brighter but 'bleached'.|You might want to turn it off in some special cases like:
  • Using some other overlay lib for intermediate calculations that makes it's own compensation, like FastLED's [dimming functions](http://fastled.io/docs/3.1/group___dimming.html).
  • running at low color depth's - it **might** (or might not) look better in shadows, darker gradients w/o compensation, try it
  • you run for as bright output as possible, no matter what (make sure you have proper powering)
  • you run for speed/save resources at all costs
| - -## Build-time variables - -| Flag | Description | Note | -| :------------ |---------------|-----| -| **PIXEL_COLOR_DEPTH_BITS=8** | Color depth per color per pixel in range 2-8. More bit's - more natural color. But on the other hand every additional bit:
  • eats ~2.5 bits of DMA memory per pixel
  • reduces matrix refresh rate in power of two due to nature of [BCM](http://www.batsocks.co.uk/readme/art_bcm_5.htm)
| Default is 8 bits per color per pixel, i.e. TrueColor 24 bit RGB. For higher resolutions, from 64x64 and above it is not possible to provide full 24 bits color without significant flickering OR reducing dynamic range in shadows. In that case using 5-6 bits at high res make very small difference to the humans eye actually. Refer to the [I2S memcalc](i2s_memcalc.md) for more details| \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/fillrate.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/fillrate.md deleted file mode 100644 index f667209..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/fillrate.md +++ /dev/null @@ -1,27 +0,0 @@ -## Estimating fillrate - -Here are some results of simple tests on filling DMA buffer with data. -Filling DMA buffer requires lots of memory operations on a bit level rather than doing simple byte/word wide store and copy. And it looks like it's quite a task both for esp32 core and compiler. -I've done this while optimizing loops and bit logic along with testing compiler results. - -So the testbed is: - - Matrix modules: 4 x FM6126A based 64x64 modules chained in 256x64 - -A testpatterns sketch: - - allocating single DMA buffs for 256x64 - - allocating (NUM_LEDS*3) bytes for CRGB buffer - - measuring microseconds for the following calls: - - clearScreen() - full blanking - - fillScreenRGB888() with monochrome/gray colors - - fill screen using drawPixel() - - filling some gradient into CRGB buff - - painting CRGB buff into DMA buff with looped drawPixelRGB888() - - drawing lines - - -||clearScreen()|drawPixelRGB888(), ticks|fillScreen()|fillScreen with a drawPixel()|fillRect() over Matrix|V-line with drawPixel|fast-V-line|H-line with drawPixel|fast-H-line| -|--|--|--|--|--|--|--|--|--|--| -|v1.2.4|1503113 ticks|9244 non-cached, 675 cached|1719 us, 412272 t|47149 us, 11315418 ticks|-|24505 us, 5880209 ticks|-|24200 us|-| -|FastLines|1503113 ticks|1350 non-cached, 405 cached|1677 us, 401198 t|28511 us, 6841440 ticks|10395 us|14462 us, 3469605 ticks|10391 us, 2492743 ticks|14575 us|5180 us, 1242041 ticks| - -to be continued... \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2s_memcalc.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2s_memcalc.md deleted file mode 100644 index f32a728..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2s_memcalc.md +++ /dev/null @@ -1,40 +0,0 @@ -### I2S HUB75 Calculator - -I've made this [spreadsheet](i2s_memcalc.xlsm) to estimate all of the main parameters for ESP32-HUB75-MatrixPanel-I2S-DMA lib driving any combination of matrices/chains so that I do not need to reflash it hundreds of times just to check for the debug info about memory. -Be sure to enable embedded macro's to allow refresh rate calculations. - -![](i2scalc.png) -Just fill-in all of the INPUT fields and get the OUTPUTs. - -So there are two main resources used to drive LED matrix - - Memory - - I2S clock speed (resulting in available bandwidth to pump pixel color data) - -And there are lot's of hogs for those: - - matrix resolution (number of pixels) - - number of modules in chain - - pixel color depth - - [BCM](http://www.batsocks.co.uk/readme/art_bcm_5.htm) LSB to MSB transition - - double buffering - -Equalising ones with the others results in **Refresh rate**, - -or (rough approximation) - - -[//]: # (github markdown does not like LaTex formulas) -[//]: # ($$RefreshRate=\frac{resolution \times chain \times (ColorDepth-LSB2MSB)}{ I ^2S _ {clock} }$$) - -So, how to find optimum balance for all of these? Obviously you can't change *resolution* and *chain length*, it is physical characteristics and there is not much you can do about it except cutting off your chain or pushing it to the memory limits. - -There are 3 parameters you can choose from (actually two:) - - **Color Depth** - predefined at [build-time]((/doc/BuildOptions.md)) option - - - I2S clock speed - run-time tunable with a very limited options - -- **LSB-to-MSB** transition - it can't be controlled in any way, library uses it internally trying to balance all of the above - -Using provided table it is possible to estimate all of the parameters before running the library. Besides calculating memory requirements it could help to find **optimum color depth** for your matrix configuration. For higher resolutions default 8 bits could be too much to sustain minimal refresh rate and avoid annoying flickering. So the library would increase MSB transition to keep the balance, thus reducing dynamic range in shadows and dark colors. As a result it is nearly almost the same as just reducing overall color depth. **But** reducing global color depth would also save lot's of precious RAM! -Now it's all up to you to decide :) - -/Vortigont/ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2s_memcalc.xlsm b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2s_memcalc.xlsm deleted file mode 100644 index 9f30ee4..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2s_memcalc.xlsm and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2scalc.png b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2scalc.png deleted file mode 100644 index f6396c1..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/doc/i2scalc.png and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_dma.c b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_dma.c deleted file mode 100644 index 82eebe6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_dma.c +++ /dev/null @@ -1,444 +0,0 @@ -/* - * ESP32_I2S_PARALLEL_DMA (Version 3) - * - * Author: Mrfaptastic @ https://github.com/mrfaptastic/ - * - * Description: Multi-ESP32 product DMA setup functions for WROOM & S2, S3 mcu's. - * - * Credits: - * 1) https://www.esp32.com/viewtopic.php?f=17&t=3188 for original ref. implementation - * 2) https://github.com/TobleMiner/esp_i2s_parallel for a cleaner implementation - * - */ - -// Header -#include "esp32_i2s_parallel_dma.h" -#include "esp32_i2s_parallel_mcu_def.h" - -#include -#include -#include -#include - -#include -#include -#include - -// For I2S state management. -static i2s_parallel_state_t *i2s_state = NULL; - -// ESP32-S2,S3,C3 only has IS20 -// Original ESP32 has two I2S's, but we'll stick with the lowest common denominator. - -#ifdef ESP32_ORIG -static i2s_dev_t* I2S[I2S_NUM_MAX] = {&I2S0, &I2S1}; -#else -static i2s_dev_t* I2S[I2S_NUM_MAX] = {&I2S0}; -#endif - -callback shiftCompleteCallback; -void setShiftCompleteCallback(callback f) { - shiftCompleteCallback = f; -} - -volatile int previousBufferOutputLoopCount = 0; -volatile bool previousBufferFree = true; - -static void IRAM_ATTR irq_hndlr(void* arg) { // if we use I2S1 (default) - -//i2s_port_t port = *((i2s_port_t*) arg); - -/* Saves a few cycles, no need to cast void ptr to i2s_port_t and then check 120 times second... */ - SET_PERI_REG_BITS(I2S_INT_CLR_REG(ESP32_I2S_DEVICE), I2S_OUT_EOF_INT_CLR_V, 1, I2S_OUT_EOF_INT_CLR_S); - - previousBufferFree = true; - -/* - if(shiftCompleteCallback) { // we've defined a callback function ? - shiftCompleteCallback(); - } -*/ - -} // end irq_hndlr - - -// For peripheral setup and configuration -static inline int get_bus_width(i2s_parallel_cfg_bits_t width) { - switch(width) { - case I2S_PARALLEL_WIDTH_8: - return 8; - case I2S_PARALLEL_WIDTH_16: - return 16; - case I2S_PARALLEL_WIDTH_24: - return 24; - default: - return -ESP_ERR_INVALID_ARG; - } -} - -static void iomux_set_signal(int gpio, int signal) { - if(gpio < 0) { - return; - } - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); - gpio_set_direction(gpio, GPIO_MODE_DEF_OUTPUT); - gpio_matrix_out(gpio, signal, false, false); - - // More mA the better... - gpio_set_drive_capability((gpio_num_t)gpio, (gpio_drive_cap_t)3); - -} - -static void dma_reset(i2s_dev_t* dev) { - dev->lc_conf.in_rst = 1; - dev->lc_conf.in_rst = 0; - dev->lc_conf.out_rst = 1; - dev->lc_conf.out_rst = 0; - - dev->lc_conf.ahbm_rst = 1; - dev->lc_conf.ahbm_rst = 0; - - -} - -static void fifo_reset(i2s_dev_t* dev) { - dev->conf.rx_fifo_reset = 1; - -#ifdef ESP32_SXXX - while(dev->conf.rx_fifo_reset_st); // esp32-s2 only -#endif - dev->conf.rx_fifo_reset = 0; - - dev->conf.tx_fifo_reset = 1; -#ifdef ESP32_SXXX - while(dev->conf.tx_fifo_reset_st); // esp32-s2 only -#endif - - dev->conf.tx_fifo_reset = 0; -} - -static void dev_reset(i2s_dev_t* dev) { - fifo_reset(dev); - dma_reset(dev); - dev->conf.rx_reset=1; - dev->conf.tx_reset=1; - dev->conf.rx_reset=0; - dev->conf.tx_reset=0; -} - -// DMA Linked List -// Size must be less than DMA_MAX - need to handle breaking long transfer into two descriptors before call -// DMA_MAX by the way is the maximum data packet size you can hold in one chunk -void link_dma_desc(volatile lldesc_t *dmadesc, volatile lldesc_t *prevdmadesc, void *memory, size_t size) -{ - if(size > DMA_MAX) size = DMA_MAX; - - dmadesc->size = size; - dmadesc->length = size; - dmadesc->buf = memory; - dmadesc->eof = 0; - dmadesc->sosf = 0; - dmadesc->owner = 1; - dmadesc->qe.stqe_next = 0; // will need to set this elsewhere - dmadesc->offset = 0; - - // link previous to current - if(prevdmadesc) - prevdmadesc->qe.stqe_next = (lldesc_t*)dmadesc; -} - - - -esp_err_t i2s_parallel_driver_install(i2s_port_t port, i2s_parallel_config_t* conf) { - - //port = I2S_NUM_0; /// override. - - if(port < I2S_NUM_0 || port >= I2S_NUM_MAX) { - return ESP_ERR_INVALID_ARG; - } - if(conf->sample_width < I2S_PARALLEL_WIDTH_8 || conf->sample_width >= I2S_PARALLEL_WIDTH_MAX) { - return ESP_ERR_INVALID_ARG; - } - if(conf->sample_rate > I2S_PARALLEL_CLOCK_HZ || conf->sample_rate < 1) { - return ESP_ERR_INVALID_ARG; - } - uint32_t clk_div_main = I2S_PARALLEL_CLOCK_HZ / conf->sample_rate / i2s_parallel_get_memory_width(port, conf->sample_width); - if(clk_div_main < 2 || clk_div_main > 0xFF) { - return ESP_ERR_INVALID_ARG; - } - - volatile int iomux_signal_base; - volatile int iomux_clock; - int irq_source; - - // Initialize I2S0 peripheral - if (port == I2S_NUM_0) { - periph_module_reset(PERIPH_I2S0_MODULE); - periph_module_enable(PERIPH_I2S0_MODULE); - iomux_clock = I2S0O_WS_OUT_IDX; - irq_source = ETS_I2S0_INTR_SOURCE; - - switch(conf->sample_width) { - case I2S_PARALLEL_WIDTH_8: - case I2S_PARALLEL_WIDTH_16: - iomux_signal_base = I2S0O_DATA_OUT8_IDX; - break; - case I2S_PARALLEL_WIDTH_24: - iomux_signal_base = I2S0O_DATA_OUT0_IDX; - break; - case I2S_PARALLEL_WIDTH_MAX: - return ESP_ERR_INVALID_ARG; - } - } -#ifdef ESP32_ORIG - // Can't compile if I2S1 if it doesn't exist with that hardware's IDF.... - else { -// I2S = &I2S1; - - periph_module_reset(PERIPH_I2S1_MODULE); - periph_module_enable(PERIPH_I2S1_MODULE); - iomux_clock = I2S1O_WS_OUT_IDX; - irq_source = ETS_I2S1_INTR_SOURCE; - - switch(conf->sample_width) { - case I2S_PARALLEL_WIDTH_16: - iomux_signal_base = I2S1O_DATA_OUT8_IDX; - break; - case I2S_PARALLEL_WIDTH_8: - case I2S_PARALLEL_WIDTH_24: - iomux_signal_base = I2S1O_DATA_OUT0_IDX; - break; - case I2S_PARALLEL_WIDTH_MAX: - return ESP_ERR_INVALID_ARG; - } - } -#endif - - // Setup GPIOs - int bus_width = get_bus_width(conf->sample_width); - - // Setup I2S peripheral - i2s_dev_t* dev = I2S[port]; - //dev_reset(dev); - - - // Setup GPIO's - for(int i = 0; i < bus_width; i++) { - iomux_set_signal(conf->gpio_bus[i], iomux_signal_base + i); - } - iomux_set_signal(conf->gpio_clk, iomux_clock); - - // invert clock phase if required - if (conf->clkphase) - GPIO.func_out_sel_cfg[conf->gpio_clk].inv_sel = 1; - - // Setup i2s clock - dev->sample_rate_conf.val = 0; - - // Third stage config, width of data to be written to IO (I think this should always be the actual data width?) - dev->sample_rate_conf.rx_bits_mod = bus_width; - dev->sample_rate_conf.tx_bits_mod = bus_width; - - dev->sample_rate_conf.rx_bck_div_num = 2; - dev->sample_rate_conf.tx_bck_div_num = 2; - - // Clock configuration - dev->clkm_conf.val=0; // Clear the clkm_conf struct - -#ifdef ESP32_SXXX - dev->clkm_conf.clk_sel = 2; // esp32-s2 only - dev->clkm_conf.clk_en = 1; -#endif - -#ifdef ESP32_ORIG - dev->clkm_conf.clka_en=0; // Use the 160mhz system clock (PLL_D2_CLK) when '0' -#endif - - dev->clkm_conf.clkm_div_b=0; // Clock numerator - dev->clkm_conf.clkm_div_a=1; // Clock denominator - - - // Note: clkm_div_num must only be set here AFTER clkm_div_b, clkm_div_a, etc. Or weird things happen! - // On original ESP32, max I2S DMA parallel speed is 20Mhz. - dev->clkm_conf.clkm_div_num = clk_div_main; - - - // I2S conf2 reg - dev->conf2.val = 0; - dev->conf2.lcd_en = 1; - dev->conf2.lcd_tx_wrx2_en=0; - dev->conf2.lcd_tx_sdx2_en=0; - - // I2S conf reg - dev->conf.val = 0; - -#ifdef ESP32_SXXX - dev->conf.tx_dma_equal=1; // esp32-s2 only - dev->conf.pre_req_en=1; // esp32-s2 only - enable I2S to prepare data earlier? wtf? -#endif - - // Now start setting up DMA FIFO - dev->fifo_conf.val = 0; - dev->fifo_conf.rx_data_num = 32; // Thresholds. - dev->fifo_conf.tx_data_num = 32; - dev->fifo_conf.dscr_en = 1; - -#ifdef ESP32_ORIG - - // Enable "One datum will be written twice in LCD mode" - for some reason, - // if we don't do this in 8-bit mode, data is updated on half-clocks not clocks - if(conf->sample_width == I2S_PARALLEL_WIDTH_8) - dev->conf2.lcd_tx_wrx2_en=1; - - // Not really described for non-pcm modes, although datasheet states it should be set correctly even for LCD mode - // First stage config. Configures how data is loaded into fifo - if(conf->sample_width == I2S_PARALLEL_WIDTH_24) { - // Mode 0, single 32-bit channel, linear 32 bit load to fifo - dev->fifo_conf.tx_fifo_mod = 3; - } else { - // Mode 1, single 16-bit channel, load 16 bit sample(*) into fifo and pad to 32 bit with zeros - // *Actually a 32 bit read where two samples are read at once. Length of fifo must thus still be word-aligned - dev->fifo_conf.tx_fifo_mod = 1; - } - - // Dictated by ESP32 datasheet - dev->fifo_conf.rx_fifo_mod_force_en = 1; - dev->fifo_conf.tx_fifo_mod_force_en = 1; - - // Second stage config - dev->conf_chan.val = 0; - - // 16-bit single channel data - dev->conf_chan.tx_chan_mod = 1; - dev->conf_chan.rx_chan_mod = 1; - -#endif - - - // Device Reset - dev_reset(dev); - dev->conf1.val = 0; - dev->conf1.tx_stop_en = 0; - - // Allocate I2S status structure for buffer swapping stuff - i2s_state = (i2s_parallel_state_t*) malloc(sizeof(i2s_parallel_state_t)); - assert(i2s_state != NULL); - i2s_parallel_state_t *state = i2s_state; - - state->desccount_a = conf->desccount_a; - state->desccount_b = conf->desccount_b; - state->dmadesc_a = conf->lldesc_a; - state->dmadesc_b = conf->lldesc_b; - state->i2s_interrupt_port_arg = port; // need to keep this somewhere in static memory for the ISR - - dev->timing.val = 0; - - // We using the double buffering switch logic? - if (conf->int_ena_out_eof) - { - // Get ISR setup - esp_err_t err = esp_intr_alloc(irq_source, - (int)(ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_LEVEL1), - irq_hndlr, - &state->i2s_interrupt_port_arg, NULL); - - if(err) { - return err; - } - - - // Setup interrupt handler which is focussed only on the (page 322 of Tech. Ref. Manual) - // "I2S_OUT_EOF_INT: Triggered when rxlink has finished sending a packet" - // ... whatever the hell that is supposed to mean... One massive linked list? So all pixels in the chain? - dev->int_ena.out_eof = 1; - } - - return ESP_OK; -} - - esp_err_t i2s_parallel_stop_dma(i2s_port_t port) { - if(port < I2S_NUM_0 || port >= I2S_NUM_MAX) { - return ESP_ERR_INVALID_ARG; - } - - i2s_dev_t* dev = I2S[port]; - - // Stop all ongoing DMA operations - dev->out_link.stop = 1; - dev->out_link.start = 0; - dev->conf.tx_start = 0; - - return ESP_OK; -} - - - esp_err_t i2s_parallel_send_dma(i2s_port_t port, lldesc_t* dma_descriptor) { - if(port < I2S_NUM_0 || port >= I2S_NUM_MAX) { - return ESP_ERR_INVALID_ARG; - } - - i2s_dev_t* dev = I2S[port]; - - - // Configure DMA burst mode - dev->lc_conf.val = I2S_OUT_DATA_BURST_EN | I2S_OUTDSCR_BURST_EN; - - // Set address of DMA descriptor - dev->out_link.addr = (uint32_t) dma_descriptor; - - // Start DMA operation - dev->out_link.stop = 0; - dev->out_link.start = 1; - - dev->conf.tx_start = 1; - - return ESP_OK; -} -/* -i2s_dev_t* i2s_parallel_get_dev(i2s_port_t port) { - if(port < I2S_NUM_0 || port >= I2S_NUM_MAX) { - return NULL; - } - -#ifdef ESP32_ORIG -if (port == I2S_NUM_1) - return &I2S1; -#endif - - return I2S0; // HARCODE THIS TO RETURN &I2S0 -} -*/ -// Double buffering flipping -// Flip to a buffer: 0 for bufa, 1 for bufb -// dmadesc_a and dmadesc_b point to the same memory if double buffering isn't enabled. -void i2s_parallel_flip_to_buffer(i2s_port_t port, int buffer_id) { - - if (i2s_state == NULL) { - return; // :-() - } - - lldesc_t *active_dma_chain; - if (buffer_id == 0) { - active_dma_chain=(lldesc_t*)&i2s_state->dmadesc_a[0]; - } else { - active_dma_chain=(lldesc_t*)&i2s_state->dmadesc_b[0]; - } - - // setup linked list to refresh from new buffer (continuously) when the end of the current list has been reached - i2s_state->dmadesc_a[i2s_state->desccount_a-1].qe.stqe_next = active_dma_chain; - i2s_state->dmadesc_b[i2s_state->desccount_b-1].qe.stqe_next = active_dma_chain; - - // we're still shifting out the buffer, so it shouldn't be written to yet. - //previousBufferFree = false; - i2s_parallel_set_previous_buffer_not_free(); -} - -bool i2s_parallel_is_previous_buffer_free() { - return previousBufferFree; -} - - -void i2s_parallel_set_previous_buffer_not_free() { - previousBufferFree = false; - previousBufferOutputLoopCount = 0; -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_dma.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_dma.h deleted file mode 100644 index d7678bc..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_dma.h +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once -/* - * ESP32_I2S_PARALLEL_DMA - */ - -#pragma once - -#if defined(ESP32) || defined(IDF_VER) - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -#include -#include -#include -//#include -//#include -#include -#include - - -// Get MCU Type and Max CLK Hz for MCU -#include - -typedef enum { - I2S_PARALLEL_WIDTH_8, - I2S_PARALLEL_WIDTH_16, - I2S_PARALLEL_WIDTH_24, - I2S_PARALLEL_WIDTH_MAX -} i2s_parallel_cfg_bits_t; - -typedef struct { - int gpio_bus[24]; // The parallel GPIOs to use, set gpio to -1 to disable - int gpio_clk; - int sample_rate; // 'clockspeed' - int sample_width; - int desccount_a; - lldesc_t * lldesc_a; - int desccount_b; // only used with double buffering - lldesc_t * lldesc_b; // only used with double buffering - bool clkphase; // Clock signal phase - bool int_ena_out_eof; // Do we raise an interrupt every time the DMA output loops? Don't do this unless we're doing double buffering! -} i2s_parallel_config_t; - -static inline int i2s_parallel_get_memory_width(i2s_port_t port, i2s_parallel_cfg_bits_t width) { - switch(width) { - case I2S_PARALLEL_WIDTH_8: - -#ifdef ESP32_ORIG - // Only I2S1 on the legacy ESP32 WROOM MCU supports space saving single byte 8 bit parallel access - if(port == I2S_NUM_1) { - return 1; - } else { - return 2; - } -#else - return 1; -#endif - - case I2S_PARALLEL_WIDTH_16: - return 2; - case I2S_PARALLEL_WIDTH_24: - return 4; - default: - return -ESP_ERR_INVALID_ARG; - } -} - -// DMA Linked List Creation -void link_dma_desc(volatile lldesc_t *dmadesc, volatile lldesc_t *prevdmadesc, void *memory, size_t size); - -// I2S DMA Peripheral Setup Functions -esp_err_t i2s_parallel_driver_install(i2s_port_t port, i2s_parallel_config_t* conf); -esp_err_t i2s_parallel_send_dma(i2s_port_t port, lldesc_t* dma_descriptor); -esp_err_t i2s_parallel_stop_dma(i2s_port_t port); -//i2s_dev_t* i2s_parallel_get_dev(i2s_port_t port); - -// For frame buffer flipping / double buffering -typedef struct { - volatile lldesc_t *dmadesc_a, *dmadesc_b; - int desccount_a, desccount_b; - i2s_port_t i2s_interrupt_port_arg; -} i2s_parallel_state_t; - -void i2s_parallel_flip_to_buffer(i2s_port_t port, int bufid); -bool i2s_parallel_is_previous_buffer_free(); -void i2s_parallel_set_previous_buffer_not_free(); - -// Callback function for when whole length of DMA chain has been sent out. -typedef void (*callback)(void); -void setShiftCompleteCallback(callback f); - - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_mcu_def.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_mcu_def.h deleted file mode 100644 index dd276da..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/esp32_i2s_parallel_mcu_def.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -/* Abstract the Espressif IDF ESP32 MCU variant compile-time defines - * into another list for the purposes of this library. - * - * i.e. I couldn't be bothered having to update the library when they - * release the ESP32S4,5,6,7, n+1 etc. if they are all fundamentally - * the same architecture. - */ -#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 - - #define ESP32_SXXX 1 - #define ESP32_I2S_DEVICE I2S_NUM_0 - - #define I2S_PARALLEL_CLOCK_HZ 160000000L - #define DMA_MAX (4096-4) - -#elif CONFIG_IDF_TARGET_ESP32 || defined(ESP32) - - // 2016 model that started it all, and this library. The best. - #define ESP32_ORIG 1 - #define ESP32_I2S_DEVICE I2S_NUM_0 - - #define I2S_PARALLEL_CLOCK_HZ 80000000L - #define DMA_MAX (4096-4) - -#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2 - - #error "ESPC-series RISC-V MCU's do not support parallel DMA and not supported by this library!" - #define ESP32_CXXX 1 - -#else - #error "ERROR: No ESP32 or ESP32 Espressif IDF detected at compile time." - -#endif \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/1_SimpleTestShapes/1_SimpleTestShapes.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/1_SimpleTestShapes/1_SimpleTestShapes.ino deleted file mode 100644 index db3b0d1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/1_SimpleTestShapes/1_SimpleTestShapes.ino +++ /dev/null @@ -1,166 +0,0 @@ - -// Example sketch which shows how to display some patterns -// on a 64x32 LED matrix -// - -#include - - -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. -#define PANEL_CHAIN 1 // Total number of panels chained one to another - -//MatrixPanel_I2S_DMA dma_display; -MatrixPanel_I2S_DMA *dma_display = nullptr; - -uint16_t myBLACK = dma_display->color565(0, 0, 0); -uint16_t myWHITE = dma_display->color565(255, 255, 255); -uint16_t myRED = dma_display->color565(255, 0, 0); -uint16_t myGREEN = dma_display->color565(0, 255, 0); -uint16_t myBLUE = dma_display->color565(0, 0, 255); - - - -// Input a value 0 to 255 to get a color value. -// The colours are a transition r - g - b - back to r. -// From: https://gist.github.com/davidegironi/3144efdc6d67e5df55438cc3cba613c8 -uint16_t colorWheel(uint8_t pos) { - if(pos < 85) { - return dma_display->color565(pos * 3, 255 - pos * 3, 0); - } else if(pos < 170) { - pos -= 85; - return dma_display->color565(255 - pos * 3, 0, pos * 3); - } else { - pos -= 170; - return dma_display->color565(0, pos * 3, 255 - pos * 3); - } -} - -void drawText(int colorWheelOffset) -{ - - // draw text with a rotating colour - dma_display->setTextSize(1); // size 1 == 8 pixels high - dma_display->setTextWrap(false); // Don't wrap at end of line - will do ourselves - - dma_display->setCursor(5, 0); // start at top left, with 8 pixel of spacing - uint8_t w = 0; - const char *str = "ESP32 DMA"; - for (w=0; wsetTextColor(colorWheel((w*32)+colorWheelOffset)); - dma_display->print(str[w]); - } - - dma_display->println(); - dma_display->print(" "); - for (w=9; w<18; w++) { - dma_display->setTextColor(colorWheel((w*32)+colorWheelOffset)); - dma_display->print("*"); - } - - dma_display->println(); - - dma_display->setTextColor(dma_display->color444(15,15,15)); - dma_display->println("LED MATRIX!"); - - // print each letter with a fixed rainbow color - dma_display->setTextColor(dma_display->color444(0,8,15)); - dma_display->print('3'); - dma_display->setTextColor(dma_display->color444(15,4,0)); - dma_display->print('2'); - dma_display->setTextColor(dma_display->color444(15,15,0)); - dma_display->print('x'); - dma_display->setTextColor(dma_display->color444(8,15,0)); - dma_display->print('6'); - dma_display->setTextColor(dma_display->color444(8,0,15)); - dma_display->print('4'); - - // Jump a half character - dma_display->setCursor(34, 24); - dma_display->setTextColor(dma_display->color444(0,15,15)); - dma_display->print("*"); - dma_display->setTextColor(dma_display->color444(15,0,0)); - dma_display->print('R'); - dma_display->setTextColor(dma_display->color444(0,15,0)); - dma_display->print('G'); - dma_display->setTextColor(dma_display->color444(0,0,15)); - dma_display->print("B"); - dma_display->setTextColor(dma_display->color444(15,0,8)); - dma_display->println("*"); - -} - - -void setup() { - - // Module configuration - HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // module width - PANEL_RES_Y, // module height - PANEL_CHAIN // Chain length - ); - - mxconfig.gpio.e = 18; - mxconfig.clkphase = false; - mxconfig.driver = HUB75_I2S_CFG::FM6126A; - - // Display Setup - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - dma_display->begin(); - dma_display->setBrightness8(90); //0-255 - dma_display->clearScreen(); - dma_display->fillScreen(myWHITE); - - // fix the screen with green - dma_display->fillRect(0, 0, dma_display->width(), dma_display->height(), dma_display->color444(0, 15, 0)); - delay(500); - - // draw a box in yellow - dma_display->drawRect(0, 0, dma_display->width(), dma_display->height(), dma_display->color444(15, 15, 0)); - delay(500); - - // draw an 'X' in red - dma_display->drawLine(0, 0, dma_display->width()-1, dma_display->height()-1, dma_display->color444(15, 0, 0)); - dma_display->drawLine(dma_display->width()-1, 0, 0, dma_display->height()-1, dma_display->color444(15, 0, 0)); - delay(500); - - // draw a blue circle - dma_display->drawCircle(10, 10, 10, dma_display->color444(0, 0, 15)); - delay(500); - - // fill a violet circle - dma_display->fillCircle(40, 21, 10, dma_display->color444(15, 0, 15)); - delay(500); - - // fill the screen with 'black' - dma_display->fillScreen(dma_display->color444(0, 0, 0)); - - //drawText(0); - -} - -uint8_t wheelval = 0; -void loop() { - - // animate by going through the colour wheel for the first two lines - drawText(wheelval); - wheelval +=1; - - delay(20); -/* - drawText(0); - delay(2000); - dma_display->clearScreen(); - dma_display->fillScreen(myBLACK); - delay(2000); - dma_display->fillScreen(myBLUE); - delay(2000); - dma_display->fillScreen(myRED); - delay(2000); - dma_display->fillScreen(myGREEN); - delay(2000); - dma_display->fillScreen(myWHITE); - dma_display->clearScreen(); - */ - -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/2_PatternPlasma.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/2_PatternPlasma.ino deleted file mode 100644 index 65f85b9..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/2_PatternPlasma.ino +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Portions of this code are adapted from Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from LedEffects Plasma by Robert Atkins: https://bitbucket.org/ratkins/ledeffects/src/26ed3c51912af6fac5f1304629c7b4ab7ac8ca4b/Plasma.cpp?at=default - * Copyright (c) 2013 Robert Atkins - * - * 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. - */ - - -// HUB75E pinout -// R1 | G1 -// B1 | GND -// R2 | G2 -// B2 | E -// A | B -// C | D -// CLK| LAT -// OE | GND - -/* Default library pin configuration for the reference - you can redefine only ones you need later on object creation - -#define R1 25 -#define G1 26 -#define BL1 27 -#define R2 14 -#define G2 12 -#define BL2 13 -#define CH_A 23 -#define CH_B 19 -#define CH_C 5 -#define CH_D 17 -#define CH_E -1 // assign to any available pin if using two panels or 64x64 panels with 1/32 scan -#define CLK 16 -#define LAT 4 -#define OE 15 - -*/ - - -#include -#include - -// Configure for your panel(s) as appropriate! -#define PANEL_WIDTH 64 -#define PANEL_HEIGHT 64 // Panel height of 64 will required PIN_E to be defined. -#define PANELS_NUMBER 2 // Number of chained panels, if just a single panel, obviously set to 1 -#define PIN_E 32 - -#define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER -#define PANE_HEIGHT PANEL_HEIGHT - - -// placeholder for the matrix object -MatrixPanel_I2S_DMA *dma_display = nullptr; - - -uint16_t time_counter = 0, cycles = 0, fps = 0; -unsigned long fps_timer; - -CRGB currentColor; -CRGBPalette16 palettes[] = {HeatColors_p, LavaColors_p, RainbowColors_p, RainbowStripeColors_p, CloudColors_p}; -CRGBPalette16 currentPalette = palettes[0]; - - -CRGB ColorFromCurrentPalette(uint8_t index = 0, uint8_t brightness = 255, TBlendType blendType = LINEARBLEND) { - return ColorFromPalette(currentPalette, index, brightness, blendType); -} - -void setup() { - - Serial.begin(115200); - - Serial.println(F("*****************************************************")); - Serial.println(F("* ESP32-HUB75-MatrixPanel-I2S-DMA DEMO *")); - Serial.println(F("*****************************************************")); - - /* - The configuration for MatrixPanel_I2S_DMA object is held in HUB75_I2S_CFG structure, - pls refer to the lib header file for full details. - All options has it's predefined default values. So we can create a new structure and redefine only the options we need - - // those are the defaults - mxconfig.mx_width = 64; // physical width of a single matrix panel module (in pixels, usually it is always 64 ;) ) - mxconfig.mx_height = 32; // physical height of a single matrix panel module (in pixels, usually almost always it is either 32 or 64) - mxconfig.chain_length = 1; // number of chained panels regardless of the topology, default 1 - a single matrix module - mxconfig.gpio.r1 = R1; // pin mappings - mxconfig.gpio.g1 = G1; - mxconfig.gpio.b1 = B1; // etc - mxconfig.driver = HUB75_I2S_CFG::SHIFT; // shift reg driver, default is plain shift register - mxconfig.double_buff = false; // use double buffer (twice amount of RAM required) - mxconfig.i2sspeed = HUB75_I2S_CFG::HZ_10M;// I2S clock speed, better leave as-is unless you want to experiment - */ - - /* - For example we have two 64x64 panels chained, so we need to customize our setup like this - - */ - HUB75_I2S_CFG mxconfig; - mxconfig.mx_height = PANEL_HEIGHT; // we have 64 pix heigh panels - mxconfig.chain_length = PANELS_NUMBER; // we have 2 panels chained - mxconfig.gpio.e = PIN_E; // we MUST assign pin e to some free pin on a board to drive 64 pix height panels with 1/32 scan - //mxconfig.driver = HUB75_I2S_CFG::FM6126A; // in case that we use panels based on FM6126A chip, we can change that - - /* - //Another way of creating config structure - //Custom pin mapping for all pins - HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK}; - HUB75_I2S_CFG mxconfig( - 64, // width - 64, // height - 4, // chain length - _pins, // pin mapping - HUB75_I2S_CFG::FM6126A // driver chip - ); - - */ - - - // OK, now we can create our matrix object - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - - // let's adjust default brightness to about 75% - dma_display->setBrightness8(192); // range is 0-255, 0 - 0%, 255 - 100% - - // Allocate memory and start DMA display - if( not dma_display->begin() ) - Serial.println("****** !KABOOM! I2S memory allocation failed ***********"); - - // well, hope we are OK, let's draw some colors first :) - Serial.println("Fill screen: RED"); - dma_display->fillScreenRGB888(255, 0, 0); - delay(1000); - - Serial.println("Fill screen: GREEN"); - dma_display->fillScreenRGB888(0, 255, 0); - delay(1000); - - Serial.println("Fill screen: BLUE"); - dma_display->fillScreenRGB888(0, 0, 255); - delay(1000); - - Serial.println("Fill screen: Neutral White"); - dma_display->fillScreenRGB888(64, 64, 64); - delay(1000); - - Serial.println("Fill screen: black"); - dma_display->fillScreenRGB888(0, 0, 0); - delay(1000); - - - // Set current FastLED palette - currentPalette = RainbowColors_p; - Serial.println("Starting plasma effect..."); - fps_timer = millis(); -} - -void loop() { - - for (int x = 0; x < PANE_WIDTH; x++) { - for (int y = 0; y < PANE_HEIGHT; y++) { - int16_t v = 0; - uint8_t wibble = sin8(time_counter); - v += sin16(x * wibble * 3 + time_counter); - v += cos16(y * (128 - wibble) + time_counter); - v += sin16(y * x * cos8(-time_counter) / 8); - - currentColor = ColorFromPalette(currentPalette, (v >> 8) + 127); //, brightness, currentBlendType); - dma_display->drawPixelRGB888(x, y, currentColor.r, currentColor.g, currentColor.b); - } - } - - ++time_counter; - ++cycles; - ++fps; - - if (cycles >= 1024) { - time_counter = 0; - cycles = 0; - currentPalette = palettes[random(0,sizeof(palettes)/sizeof(palettes[0]))]; - } - - // print FPS rate every 5 seconds - // Note: this is NOT a matrix refresh rate, it's the number of data frames being drawn to the DMA buffer per second - if (fps_timer + 5000 < millis()){ - Serial.printf_P(PSTR("Effect fps: %d\n"), fps/5); - fps_timer = millis(); - fps = 0; - } -} // end loop \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/PatternWave.jpg b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/PatternWave.jpg deleted file mode 100644 index e6ce3c3..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/PatternWave.jpg and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/README.md deleted file mode 100644 index 172a99f..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/2_PatternPlasma/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Wave Pattern - -Demo of the colours, and the little flicker. - -![It's better in real life](PatternWave.jpg) diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/3_FM6126Panel.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/3_FM6126Panel.ino deleted file mode 100644 index 3b706e1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/3_FM6126Panel.ino +++ /dev/null @@ -1,102 +0,0 @@ -// How to use this library with a FM6126 panel, thanks goes to: -// https://github.com/hzeller/rpi-rgb-led-matrix/issues/746 - -#include -#include -#include - -//////////////////////////////////////////////////////////////////// -// FM6126 support is still experimental - -// Output resolution and panel chain length configuration -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. -#define PANEL_CHAIN 1 // Total number of panels chained one to another - - -// placeholder for the matrix object -MatrixPanel_I2S_DMA *dma_display = nullptr; - -/////////////////////////////////////////////////////////////// - -// FastLED variables for pattern output -uint16_t time_counter = 0, cycles = 0, fps = 0; -unsigned long fps_timer; - -CRGB currentColor; -CRGBPalette16 palettes[] = {HeatColors_p, LavaColors_p, RainbowColors_p, RainbowStripeColors_p, CloudColors_p}; -CRGBPalette16 currentPalette = palettes[0]; - - -CRGB ColorFromCurrentPalette(uint8_t index = 0, uint8_t brightness = 255, TBlendType blendType = LINEARBLEND) { - return ColorFromPalette(currentPalette, index, brightness, blendType); -} - -void setup(){ - - /* - The configuration for MatrixPanel_I2S_DMA object is held in HUB75_I2S_CFG structure, - All options has it's predefined default values. So we can create a new structure and redefine only the options we need - - Please refer to the '2_PatternPlasma.ino' example for detailed example of how to use the MatrixPanel_I2S_DMA configuration - if you need to change the pin mappings etc. - */ - - HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // module width - PANEL_RES_Y, // module height - PANEL_CHAIN // Chain length - ); - - mxconfig.driver = HUB75_I2S_CFG::FM6126A; // in case that we use panels based on FM6126A chip, we can set it here before creating MatrixPanel_I2S_DMA object - - // OK, now we can create our matrix object - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - - // If you experience ghosting, you will need to reduce the brightness level, not all RGB Matrix - // Panels are the same - some seem to display ghosting artefacts at lower brightness levels. - // In the setup() function do something like: - - // let's adjust default brightness to about 75% - dma_display->setBrightness8(192); // range is 0-255, 0 - 0%, 255 - 100% - - // Allocate memory and start DMA display - if( not dma_display->begin() ) - Serial.println("****** !KABOOM! Insufficient memory - allocation failed ***********"); - - fps_timer = millis(); - -} - -void loop(){ - for (int x = 0; x < dma_display->width(); x++) { - for (int y = 0; y < dma_display->height(); y++) { - int16_t v = 0; - uint8_t wibble = sin8(time_counter); - v += sin16(x * wibble * 3 + time_counter); - v += cos16(y * (128 - wibble) + time_counter); - v += sin16(y * x * cos8(-time_counter) / 8); - - currentColor = ColorFromPalette(currentPalette, (v >> 8) + 127); //, brightness, currentBlendType); - dma_display->drawPixelRGB888(x, y, currentColor.r, currentColor.g, currentColor.b); - } - } - - ++time_counter; - ++cycles; - ++fps; - - if (cycles >= 1024) { - time_counter = 0; - cycles = 0; - currentPalette = palettes[random(0,sizeof(palettes)/sizeof(palettes[0]))]; - } - - // print FPS rate every 5 seconds - // Note: this is NOT a matrix refresh rate, it's the number of data frames being drawn to the DMA buffer per second - if (fps_timer + 5000 < millis()){ - Serial.printf_P(PSTR("Effect fps: %d\n"), fps/5); - fps_timer = millis(); - fps = 0; - } -} \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/FM6126A.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/FM6126A.md deleted file mode 100644 index 1641c16..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/FM6126A.md +++ /dev/null @@ -1,51 +0,0 @@ -## The mystery of control registers for FM6126A chips - - -The only available Datasheet for this chips is in Chinese and does not shed a light on what those two control regs are. - -An excellent insight could be found here https://github.com/hzeller/rpi-rgb-led-matrix/issues/746#issuecomment-453860510 - - - -So there are two regs in this chip - **REG1** and **REG2**, -one could be written with 12 clock pulses (and usually called reg12, dunno why :)) -the other one could be written with 13 clock pulses (and usually called reg13, dunno why :)) - - -I've done some measurements on power consumption while toggling bits of **REG1** and it looks that it could provide a fine grained brightness control over the entire matrix with no need for bitbanging over RGB or EO pins. -There are 6 bits (6 to 11) giving an increased brightness (compared to all-zeroes) and 4 bits (2-5) giving decreased brightness!!! -Still unclear if FM6112A brightness control is internally PWMed or current limited, might require some poking with oscilloscope. - -So it seems that the most bright (and hungry for power) value is bool REG1[16] = {0,0,0,0,0, 1,1,1,1,1,1, 0,0,0,0,0}; and not {0,1,1,1,1, 1,1,1,1,1,1, 1,1,1,1,1} as it is usually used. -I'm not sure about bit 1 - it is either not used or I was unable to measure it's influence to brightness/power. - -Giving at least 10 bits of hardware brightness control opens pretty nice options for offloading and simplifying matrix output. Should dig into this more deeper. - -Here are some of the measurements I've took for 2 64x64 panels filled with white color - reg value and corresponding current drain in amps. - - -|REG1 |bit value|Current, amps | -|--|--|--| -|REG1| 0111111 00000| >5 amps| -|REG1| 0100010 00000| 3.890 amp| -|REG1| 0100000 00000| 3.885 amp| -|REG1| 0011110 00000| 3.640 amp| -|REG1| 0011100 00000| 3.620 amp| -|REG1| 0011000 00000| 3.240 amp| -|REG1| 0010010 00000| 2.520 amp| -|REG1| 0010001 00000| 2.518 amp| -|REG1| 0010001 10000| 2.493 amp| -|REG1| 0010000 00000| 2.490 amp| -|REG1| 0010000 11110| 2.214 amp| -|REG1| 0001100 00000| 2.120 amp| -|REG1| 0001000 00000| 1.750 amp| -|REG1| 0000100 00000| 1.375 amp| -|REG1| 0000010 00000| 1.000 amp| -|REG1| **0000000 00000**| 0.995 amp| -|REG1| 0000001 11111| 0.700 amp| -|REG1| 0000000 01111| 0.690 amp| -|REG1| 0000000 10000| 0.690 amp| -|REG1| 0000000 11110| 0.686 amp| - - -/Vortigont/ \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/README.md deleted file mode 100644 index 65019e6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/3_FM6126Panel/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## FM6126 based LED Matrix Panel Reset ## - -FM6216 panels require a special reset sequence before they can be used, check your panel chipset if you have issues. Refer to this example. diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/AnimatedGIFPanel.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/AnimatedGIFPanel.ino deleted file mode 100644 index 4e79ff1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/AnimatedGIFPanel.ino +++ /dev/null @@ -1,294 +0,0 @@ -// Example sketch which shows how to display a 64x32 animated GIF image stored in FLASH memory -// on a 64x32 LED matrix -// -// Credits: https://github.com/bitbank2/AnimatedGIF/tree/master/examples/ESP32_LEDMatrix_I2S -// - -/* INSTRUCTIONS - * - * 1. First Run the 'ESP32 Sketch Data Upload Tool' in Arduino from the 'Tools' Menu. - * - If you don't know what this is or see it as an option, then read this: - * https://github.com/me-no-dev/arduino-esp32fs-plugin - * - This tool will upload the contents of the data/ directory in the sketch folder onto - * the ESP32 itself. - * - * 2. You can drop any animated GIF you want in there, but keep it to the resolution of the - * MATRIX you're displaying to. To resize a gif, use this online website: https://ezgif.com/ - * - * 3. Have fun. - */ - -#define FILESYSTEM SPIFFS -#include -#include -#include - -// ---------------------------- - -/* - * Below is an is the 'legacy' way of initialising the MatrixPanel_I2S_DMA class. - * i.e. MATRIX_WIDTH and MATRIX_HEIGHT are modified by compile-time directives. - * By default the library assumes a single 64x32 pixel panel is connected. - * - * Refer to the example '2_PatternPlasma' on the new / correct way to setup this library - * for different resolutions / panel chain lengths within the sketch 'setup()'. - * - */ - -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. -#define PANEL_CHAIN 1 // Total number of panels chained one to another - -//MatrixPanel_I2S_DMA dma_display; -MatrixPanel_I2S_DMA *dma_display = nullptr; - -uint16_t myBLACK = dma_display->color565(0, 0, 0); -uint16_t myWHITE = dma_display->color565(255, 255, 255); -uint16_t myRED = dma_display->color565(255, 0, 0); -uint16_t myGREEN = dma_display->color565(0, 255, 0); -uint16_t myBLUE = dma_display->color565(0, 0, 255); - - -AnimatedGIF gif; -File f; -int x_offset, y_offset; - - - -// Draw a line of image directly on the LED Matrix -void GIFDraw(GIFDRAW *pDraw) -{ - uint8_t *s; - uint16_t *d, *usPalette, usTemp[320]; - int x, y, iWidth; - - iWidth = pDraw->iWidth; - if (iWidth > MATRIX_WIDTH) - iWidth = MATRIX_WIDTH; - - usPalette = pDraw->pPalette; - y = pDraw->iY + pDraw->y; // current line - - s = pDraw->pPixels; - if (pDraw->ucDisposalMethod == 2) // restore to background color - { - for (x=0; xucTransparent) - s[x] = pDraw->ucBackground; - } - pDraw->ucHasTransparency = 0; - } - // Apply the new pixels to the main image - if (pDraw->ucHasTransparency) // if transparency used - { - uint8_t *pEnd, c, ucTransparent = pDraw->ucTransparent; - int x, iCount; - pEnd = s + pDraw->iWidth; - x = 0; - iCount = 0; // count non-transparent pixels - while(x < pDraw->iWidth) - { - c = ucTransparent-1; - d = usTemp; - while (c != ucTransparent && s < pEnd) - { - c = *s++; - if (c == ucTransparent) // done, stop - { - s--; // back up to treat it like transparent - } - else // opaque - { - *d++ = usPalette[c]; - iCount++; - } - } // while looking for opaque pixels - if (iCount) // any opaque pixels? - { - for(int xOffset = 0; xOffset < iCount; xOffset++ ){ - dma_display->drawPixel(x + xOffset, y, usTemp[xOffset]); // 565 Color Format - } - x += iCount; - iCount = 0; - } - // no, look for a run of transparent pixels - c = ucTransparent; - while (c == ucTransparent && s < pEnd) - { - c = *s++; - if (c == ucTransparent) - iCount++; - else - s--; - } - if (iCount) - { - x += iCount; // skip these - iCount = 0; - } - } - } - else // does not have transparency - { - s = pDraw->pPixels; - // Translate the 8-bit pixels through the RGB565 palette (already byte reversed) - for (x=0; xiWidth; x++) - { - dma_display->drawPixel(x, y, usPalette[*s++]); // color 565 - } - } -} /* GIFDraw() */ - - -void * GIFOpenFile(const char *fname, int32_t *pSize) -{ - Serial.print("Playing gif: "); - Serial.println(fname); - f = FILESYSTEM.open(fname); - if (f) - { - *pSize = f.size(); - return (void *)&f; - } - return NULL; -} /* GIFOpenFile() */ - -void GIFCloseFile(void *pHandle) -{ - File *f = static_cast(pHandle); - if (f != NULL) - f->close(); -} /* GIFCloseFile() */ - -int32_t GIFReadFile(GIFFILE *pFile, uint8_t *pBuf, int32_t iLen) -{ - int32_t iBytesRead; - iBytesRead = iLen; - File *f = static_cast(pFile->fHandle); - // Note: If you read a file all the way to the last byte, seek() stops working - if ((pFile->iSize - pFile->iPos) < iLen) - iBytesRead = pFile->iSize - pFile->iPos - 1; // <-- ugly work-around - if (iBytesRead <= 0) - return 0; - iBytesRead = (int32_t)f->read(pBuf, iBytesRead); - pFile->iPos = f->position(); - return iBytesRead; -} /* GIFReadFile() */ - -int32_t GIFSeekFile(GIFFILE *pFile, int32_t iPosition) -{ - int i = micros(); - File *f = static_cast(pFile->fHandle); - f->seek(iPosition); - pFile->iPos = (int32_t)f->position(); - i = micros() - i; -// Serial.printf("Seek time = %d us\n", i); - return pFile->iPos; -} /* GIFSeekFile() */ - -unsigned long start_tick = 0; - -void ShowGIF(char *name) -{ - start_tick = millis(); - - if (gif.open(name, GIFOpenFile, GIFCloseFile, GIFReadFile, GIFSeekFile, GIFDraw)) - { - x_offset = (MATRIX_WIDTH - gif.getCanvasWidth())/2; - if (x_offset < 0) x_offset = 0; - y_offset = (MATRIX_HEIGHT - gif.getCanvasHeight())/2; - if (y_offset < 0) y_offset = 0; - Serial.printf("Successfully opened GIF; Canvas size = %d x %d\n", gif.getCanvasWidth(), gif.getCanvasHeight()); - Serial.flush(); - while (gif.playFrame(true, NULL)) - { - if ( (millis() - start_tick) > 8000) { // we'll get bored after about 8 seconds of the same looping gif - break; - } - } - gif.close(); - } - -} /* ShowGIF() */ - - - -/************************* Arduino Sketch Setup and Loop() *******************************/ -void setup() { - -// - - HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // module width - PANEL_RES_Y, // module height - PANEL_CHAIN // Chain length - ); - - mxconfig.gpio.e = 18; - mxconfig.clkphase = false; - mxconfig.driver = HUB75_I2S_CFG::FM6126A; - - // Display Setup - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - dma_display->begin(); - dma_display->setBrightness8(90); //0-255 - dma_display->clearScreen(); - dma_display->fillScreen(myWHITE); - -// - - - Serial.begin(115200); - Serial.println("Starting AnimatedGIFs Sketch"); - - // Start filesystem - Serial.println(" * Loading SPIFFS"); - if(!SPIFFS.begin()){ - Serial.println("SPIFFS Mount Failed"); - } - - dma_display->begin(); - - /* all other pixel drawing functions can only be called after .begin() */ - dma_display->fillScreen(dma_display->color565(0, 0, 0)); - gif.begin(LITTLE_ENDIAN_PIXELS); - -} - -String gifDir = "/gifs"; // play all GIFs in this directory on the SD card -char filePath[256] = { 0 }; -File root, gifFile; - -void loop() -{ - while (1) // run forever - { - - root = FILESYSTEM.open(gifDir); - if (root) - { - gifFile = root.openNextFile(); - while (gifFile) - { - if (!gifFile.isDirectory()) // play it - { - - // C-strings... urghh... - memset(filePath, 0x0, sizeof(filePath)); - strcpy(filePath, gifFile.path()); - - // Show it. - ShowGIF(filePath); - - } - gifFile.close(); - gifFile = root.openNextFile(); - } - root.close(); - } // root - - delay(1000); // pause before restarting - - } // while -} \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/README.md deleted file mode 100644 index 63ff899..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## Animated GIF Decoding Example - -### Prerequisites -1. The excellent 'AnimatedGIF' library by Larry Bank needs to be installed: https://github.com/bitbank2/AnimatedGIF - -This is available via the Arduino Library manager, or can be placed in the 'libs' directory with PlatformIO. - -2. The files in the 'data' folder are written to the ESP32's SPIFFS file system. - - -## Credits - -https://github.com/bitbank2/AnimatedGIF diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/cartoon.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/cartoon.gif deleted file mode 100644 index 32a0e25..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/cartoon.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/ezgif.com-pacmn.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/ezgif.com-pacmn.gif deleted file mode 100644 index 0a219a4..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/ezgif.com-pacmn.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/loading.io-64x32px.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/loading.io-64x32px.gif deleted file mode 100644 index 342f8ae..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/loading.io-64x32px.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/matrix-spin.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/matrix-spin.gif deleted file mode 100644 index 7925d68..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/matrix-spin.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/parasite1.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/parasite1.gif deleted file mode 100644 index 8b8b67a..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/parasite1.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/parasite2.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/parasite2.gif deleted file mode 100644 index 60d03c7..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/parasite2.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/shock-gs.gif b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/shock-gs.gif deleted file mode 100644 index 1d023d9..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AnimatedGIFPanel/data/gifs/shock-gs.gif and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Attractor.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Attractor.h deleted file mode 100644 index 668ba53..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Attractor.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Attractor" in "The Nature of Code" by Daniel Shiffman: http://natureofcode.com/ - * Copyright (c) 2014 Daniel Shiffman - * http://www.shiffman.net - * - * 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 "Vector.h" - -class Attractor { -public: - float mass; // Mass, tied to size - float G; // Gravitational Constant - PVector location; // Location - - Attractor() { - location = PVector(MATRIX_CENTRE_X, MATRIX_CENTRE_Y); - mass = 10; - G = .5; - } - - PVector attract(Boid m) { - PVector force = location - m.location; // Calculate direction of force - float d = force.mag(); // Distance between objects - d = constrain(d, 5.0, 32.0); // Limiting the distance to eliminate "extreme" results for very close or very far objects - force.normalize(); // Normalize vector (distance doesn't matter here, we just want this vector for direction) - float strength = (G * mass * m.mass) / (d * d); // Calculate gravitational force magnitude - force *= strength; // Get force vector --> magnitude * direction - return force; - } -}; diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/AuroraDemo.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/AuroraDemo.ino deleted file mode 100644 index 14b61be..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/AuroraDemo.ino +++ /dev/null @@ -1,150 +0,0 @@ -#include - -/*--------------------- MATRIX GPIO CONFIG -------------------------*/ -#define R1_PIN 25 -#define G1_PIN 26 -#define B1_PIN 27 -#define R2_PIN 14 -#define G2_PIN 12 -#define B2_PIN 13 -#define A_PIN 23 -#define B_PIN 19 // Changed from library default -#define C_PIN 5 -#define D_PIN 17 -#define E_PIN -1 -#define LAT_PIN 4 -#define OE_PIN 15 -#define CLK_PIN 16 - - -/*--------------------- MATRIX PANEL CONFIG -------------------------*/ -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. -#define PANEL_CHAIN 1 // Total number of panels chained one to another - -/* -//Another way of creating config structure -//Custom pin mapping for all pins -HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK}; -HUB75_I2S_CFG mxconfig( - 64, // width - 64, // height - 4, // chain length - _pins, // pin mapping - HUB75_I2S_CFG::FM6126A // driver chip -); - -*/ -MatrixPanel_I2S_DMA *dma_display = nullptr; - -// Module configuration -HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // module width - PANEL_RES_Y, // module height - PANEL_CHAIN // Chain length -); - - -//mxconfig.gpio.e = -1; // Assign a pin if you have a 64x64 panel -//mxconfig.clkphase = false; // Change this if you have issues with ghosting. -//mxconfig.driver = HUB75_I2S_CFG::FM6126A; // Change this according to your pane. - - - -#include - -#include "Effects.h" -Effects effects; - -#include "Drawable.h" -#include "Playlist.h" -//#include "Geometry.h" - -#include "Patterns.h" -Patterns patterns; - -/* -------------------------- Some variables -------------------------- */ -unsigned long fps = 0, fps_timer; // fps (this is NOT a matrix refresh rate!) -unsigned int default_fps = 30, pattern_fps = 30; // default fps limit (this is not a matrix refresh counter!) -unsigned long ms_animation_max_duration = 20000; // 20 seconds -unsigned long last_frame=0, ms_previous=0; - -void setup() -{ - /************** SERIAL **************/ - Serial.begin(115200); - delay(250); - - /************** DISPLAY **************/ - Serial.println("...Starting Display"); - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - dma_display->begin(); - dma_display->setBrightness8(90); //0-255 - - dma_display->fillScreenRGB888(128,0,0); - delay(1000); - dma_display->fillScreenRGB888(0,0,128); - delay(1000); - dma_display->clearScreen(); - delay(1000); - Serial.println("**************** Starting Aurora Effects Demo ****************"); - - - // setup the effects generator - effects.Setup(); - - delay(500); - Serial.println("Effects being loaded: "); - listPatterns(); - - - patterns.moveRandom(1); // start from a random pattern - - Serial.print("Starting with pattern: "); - Serial.println(patterns.getCurrentPatternName()); - patterns.start(); - ms_previous = millis(); - fps_timer = millis(); -} - -void loop() -{ - // menu.run(mainMenuItems, mainMenuItemCount); - - if ( (millis() - ms_previous) > ms_animation_max_duration ) - { - patterns.stop(); - patterns.moveRandom(1); - //patterns.move(1); - patterns.start(); - - Serial.print("Changing pattern to: "); - Serial.println(patterns.getCurrentPatternName()); - - ms_previous = millis(); - - // Select a random palette as well - //effects.RandomPalette(); - } - - if ( 1000 / pattern_fps + last_frame < millis()){ - last_frame = millis(); - pattern_fps = patterns.drawFrame(); - if (!pattern_fps) - pattern_fps = default_fps; - - ++fps; - } - - if (fps_timer + 1000 < millis()){ - Serial.printf_P(PSTR("Effect fps: %ld\n"), fps); - fps_timer = millis(); - fps = 0; - } - -} - - -void listPatterns() { - patterns.listPatterns(); -} \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Boid.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Boid.h deleted file mode 100644 index 61a1758..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Boid.h +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Flocking" in "The Nature of Code" by Daniel Shiffman: http://natureofcode.com/ - * Copyright (c) 2014 Daniel Shiffman - * http://www.shiffman.net - * - * 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. - */ - -// Flocking -// Daniel Shiffman -// The Nature of Code, Spring 2009 - -// Boid class -// Methods for Separation, Cohesion, Alignment added - -class Boid { - public: - - PVector location; - PVector velocity; - PVector acceleration; - float maxforce; // Maximum steering force - float maxspeed; // Maximum speed - - float desiredseparation = 4; - float neighbordist = 8; - byte colorIndex = 0; - float mass; - - boolean enabled = true; - - Boid() {} - - Boid(float x, float y) { - acceleration = PVector(0, 0); - velocity = PVector(randomf(), randomf()); - location = PVector(x, y); - maxspeed = 1.5; - maxforce = 0.05; - } - - static float randomf() { - return mapfloat(random(0, 255), 0, 255, -.5, .5); - } - - static float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) { - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; - } - - void run(Boid boids [], uint8_t boidCount) { - flock(boids, boidCount); - update(); - // wrapAroundBorders(); - // render(); - } - - // Method to update location - void update() { - // Update velocity - velocity += acceleration; - // Limit speed - velocity.limit(maxspeed); - location += velocity; - // Reset acceleration to 0 each cycle - acceleration *= 0; - } - - void applyForce(PVector force) { - // We could add mass here if we want A = F / M - acceleration += force; - } - - void repelForce(PVector obstacle, float radius) { - //Force that drives boid away from obstacle. - - PVector futPos = location + velocity; //Calculate future position for more effective behavior. - PVector dist = obstacle - futPos; - float d = dist.mag(); - - if (d <= radius) { - PVector repelVec = location - obstacle; - repelVec.normalize(); - if (d != 0) { //Don't divide by zero. - // float scale = 1.0 / d; //The closer to the obstacle, the stronger the force. - repelVec.normalize(); - repelVec *= (maxforce * 7); - if (repelVec.mag() < 0) { //Don't let the boids turn around to avoid the obstacle. - repelVec.y = 0; - } - } - applyForce(repelVec); - } - } - - // We accumulate a new acceleration each time based on three rules - void flock(Boid boids [], uint8_t boidCount) { - PVector sep = separate(boids, boidCount); // Separation - PVector ali = align(boids, boidCount); // Alignment - PVector coh = cohesion(boids, boidCount); // Cohesion - // Arbitrarily weight these forces - sep *= 1.5; - ali *= 1.0; - coh *= 1.0; - // Add the force vectors to acceleration - applyForce(sep); - applyForce(ali); - applyForce(coh); - } - - // Separation - // Method checks for nearby boids and steers away - PVector separate(Boid boids [], uint8_t boidCount) { - PVector steer = PVector(0, 0); - int count = 0; - // For every boid in the system, check if it's too close - for (int i = 0; i < boidCount; i++) { - Boid other = boids[i]; - if (!other.enabled) - continue; - float d = location.dist(other.location); - // If the distance is greater than 0 and less than an arbitrary amount (0 when you are yourself) - if ((d > 0) && (d < desiredseparation)) { - // Calculate vector pointing away from neighbor - PVector diff = location - other.location; - diff.normalize(); - diff /= d; // Weight by distance - steer += diff; - count++; // Keep track of how many - } - } - // Average -- divide by how many - if (count > 0) { - steer /= (float) count; - } - - // As long as the vector is greater than 0 - if (steer.mag() > 0) { - // Implement Reynolds: Steering = Desired - Velocity - steer.normalize(); - steer *= maxspeed; - steer -= velocity; - steer.limit(maxforce); - } - return steer; - } - - // Alignment - // For every nearby boid in the system, calculate the average velocity - PVector align(Boid boids [], uint8_t boidCount) { - PVector sum = PVector(0, 0); - int count = 0; - for (int i = 0; i < boidCount; i++) { - Boid other = boids[i]; - if (!other.enabled) - continue; - float d = location.dist(other.location); - if ((d > 0) && (d < neighbordist)) { - sum += other.velocity; - count++; - } - } - if (count > 0) { - sum /= (float) count; - sum.normalize(); - sum *= maxspeed; - PVector steer = sum - velocity; - steer.limit(maxforce); - return steer; - } - else { - return PVector(0, 0); - } - } - - // Cohesion - // For the average location (i.e. center) of all nearby boids, calculate steering vector towards that location - PVector cohesion(Boid boids [], uint8_t boidCount) { - PVector sum = PVector(0, 0); // Start with empty vector to accumulate all locations - int count = 0; - for (int i = 0; i < boidCount; i++) { - Boid other = boids[i]; - if (!other.enabled) - continue; - float d = location.dist(other.location); - if ((d > 0) && (d < neighbordist)) { - sum += other.location; // Add location - count++; - } - } - if (count > 0) { - sum /= count; - return seek(sum); // Steer towards the location - } - else { - return PVector(0, 0); - } - } - - // A method that calculates and applies a steering force towards a target - // STEER = DESIRED MINUS VELOCITY - PVector seek(PVector target) { - PVector desired = target - location; // A vector pointing from the location to the target - // Normalize desired and scale to maximum speed - desired.normalize(); - desired *= maxspeed; - // Steering = Desired minus Velocity - PVector steer = desired - velocity; - steer.limit(maxforce); // Limit to maximum steering force - return steer; - } - - // A method that calculates a steering force towards a target - // STEER = DESIRED MINUS VELOCITY - void arrive(PVector target) { - PVector desired = target - location; // A vector pointing from the location to the target - float d = desired.mag(); - // Normalize desired and scale with arbitrary damping within 100 pixels - desired.normalize(); - if (d < 4) { - float m = map(d, 0, 100, 0, maxspeed); - desired *= m; - } - else { - desired *= maxspeed; - } - - // Steering = Desired minus Velocity - PVector steer = desired - velocity; - steer.limit(maxforce); // Limit to maximum steering force - applyForce(steer); - //Serial.println(d); - } - - void wrapAroundBorders() { - if (location.x < 0) location.x = MATRIX_WIDTH - 1; - if (location.y < 0) location.y = MATRIX_HEIGHT - 1; - if (location.x >= MATRIX_WIDTH) location.x = 0; - if (location.y >= MATRIX_HEIGHT) location.y = 0; - } - - void avoidBorders() { - PVector desired = velocity; - - if (location.x < 8) desired = PVector(maxspeed, velocity.y); - if (location.x >= MATRIX_WIDTH - 8) desired = PVector(-maxspeed, velocity.y); - if (location.y < 8) desired = PVector(velocity.x, maxspeed); - if (location.y >= MATRIX_HEIGHT - 8) desired = PVector(velocity.x, -maxspeed); - - if (desired != velocity) { - PVector steer = desired - velocity; - steer.limit(maxforce); - applyForce(steer); - } - - if (location.x < 0) location.x = 0; - if (location.y < 0) location.y = 0; - if (location.x >= MATRIX_WIDTH) location.x = MATRIX_WIDTH - 1; - if (location.y >= MATRIX_HEIGHT) location.y = MATRIX_HEIGHT - 1; - } - - bool bounceOffBorders(float bounce) { - bool bounced = false; - - if (location.x >= MATRIX_WIDTH) { - location.x = MATRIX_WIDTH - 1; - velocity.x *= -bounce; - bounced = true; - } - else if (location.x < 0) { - location.x = 0; - velocity.x *= -bounce; - bounced = true; - } - - if (location.y >= MATRIX_HEIGHT) { - location.y = MATRIX_HEIGHT - 1; - velocity.y *= -bounce; - bounced = true; - } - else if (location.y < 0) { - location.y = 0; - velocity.y *= -bounce; - bounced = true; - } - - return bounced; - } - - void render() { - //// Draw a triangle rotated in the direction of velocity - //float theta = velocity.heading2D() + radians(90); - //fill(175); - //stroke(0); - //pushMatrix(); - //translate(location.x,location.y); - //rotate(theta); - //beginShape(TRIANGLES); - //vertex(0, -r*2); - //vertex(-r, r*2); - //vertex(r, r*2); - //endShape(); - //popMatrix(); - //dma_display->drawBackgroundPixelRGB888(location.x, location.y, CRGB::Blue); - } -}; - -static const uint8_t AVAILABLE_BOID_COUNT = 40; -Boid boids[AVAILABLE_BOID_COUNT]; diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Drawable.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Drawable.h deleted file mode 100644 index 56b3eb2..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Drawable.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Drawable_H -#define Drawable_H - -class Drawable{ -public: - char* name; - - virtual bool isRunnable() { - return false; - } - - virtual bool isPlaylist() { - return false; - } - - // a single frame should be drawn as fast as possible, without any delay or blocking - // return how many millisecond delay is requested before the next call to drawFrame() - virtual unsigned int drawFrame() { - dma_display->fillScreen(0); - //backgroundLayer.fillScreen({ 0, 0, 0 }); - return 0; - }; - - virtual void printTesting() - { - Serial.println("Testing..."); - } - - virtual void start() {}; - virtual void stop() {}; -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Effects.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Effects.h deleted file mode 100644 index 1b50329..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Effects.h +++ /dev/null @@ -1,848 +0,0 @@ - -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Funky Clouds" by Stefan Petrick: https://gist.github.com/anonymous/876f908333cd95315c35 - * Portions of this code are adapted from "NoiseSmearing" by Stefan Petrick: https://gist.github.com/StefanPetrick/9ee2f677dbff64e3ba7a - * Copyright (c) 2014 Stefan Petrick - * http://www.stefan-petrick.de/wordpress_beta - * - * 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. - */ - -#ifndef Effects_H -#define Effects_H - -/* ---------------------------- GLOBAL CONSTANTS ----------------------------- */ - -const int MATRIX_CENTER_X = MATRIX_WIDTH / 2; -const int MATRIX_CENTER_Y = MATRIX_HEIGHT / 2; -// US vs GB, huh? :) -//const byte MATRIX_CENTRE_X = MATRIX_CENTER_X - 1; -//const byte MATRIX_CENTRE_Y = MATRIX_CENTER_Y - 1; -#define MATRIX_CENTRE_X MATRIX_CENTER_X -#define MATRIX_CENTRE_Y MATRIX_CENTER_Y - - -const uint16_t NUM_LEDS = (MATRIX_WIDTH * MATRIX_HEIGHT) + 1; // one led spare to capture out of bounds - -// forward declaration -uint16_t XY16( uint16_t x, uint16_t y); - -/* Convert x,y co-ordinate to flat array index. - * x and y positions start from 0, so must not be >= 'real' panel width or height - * (i.e. 64 pixels or 32 pixels.). Max value: MATRIX_WIDTH-1 etc. - * Ugh... uint8_t - really??? this weak method can't cope with 256+ pixel matrices :( - */ -uint16_t XY( uint8_t x, uint8_t y) -{ - return XY16(x, y); -} - -/** - * The one for 256+ matrices - * otherwise this: - * for (uint8_t i = 0; i < MATRIX_WIDTH; i++) {} - * turns into an infinite loop - */ -uint16_t XY16( uint16_t x, uint16_t y) -{ - if( x >= MATRIX_WIDTH) return 0; - if( y >= MATRIX_HEIGHT) return 0; - - return (y * MATRIX_WIDTH) + x + 1; // everything offset by one to compute out of bounds stuff - never displayed by ShowFrame() -} - - -uint8_t beatcos8(accum88 beats_per_minute, uint8_t lowest = 0, uint8_t highest = 255, uint32_t timebase = 0, uint8_t phase_offset = 0) -{ - uint8_t beat = beat8(beats_per_minute, timebase); - uint8_t beatcos = cos8(beat + phase_offset); - uint8_t rangewidth = highest - lowest; - uint8_t scaledbeat = scale8(beatcos, rangewidth); - uint8_t result = lowest + scaledbeat; - return result; -} - -uint8_t mapsin8(uint8_t theta, uint8_t lowest = 0, uint8_t highest = 255) { - uint8_t beatsin = sin8(theta); - uint8_t rangewidth = highest - lowest; - uint8_t scaledbeat = scale8(beatsin, rangewidth); - uint8_t result = lowest + scaledbeat; - return result; -} - -uint8_t mapcos8(uint8_t theta, uint8_t lowest = 0, uint8_t highest = 255) { - uint8_t beatcos = cos8(theta); - uint8_t rangewidth = highest - lowest; - uint8_t scaledbeat = scale8(beatcos, rangewidth); - uint8_t result = lowest + scaledbeat; - return result; -} - -// Array of temperature readings at each simulation cell -//byte heat[NUM_LEDS]; // none of the currently enabled effects uses this - -uint32_t noise_x; -uint32_t noise_y; -uint32_t noise_z; -uint32_t noise_scale_x; -uint32_t noise_scale_y; - -//uint8_t noise[MATRIX_WIDTH][MATRIX_HEIGHT]; -uint8_t **noise = nullptr; // we will allocate mem later -uint8_t noisesmoothing; - -class Effects { -public: - CRGB *leds; - //CRGB leds[NUM_LEDS]; - //CRGB leds2[NUM_LEDS]; // Faptastic: getting rid of this and any dependant effects or algos. to save memory 24*64*32 bytes of ram (50k). - - Effects(){ - // we do dynamic allocation for leds buffer, otherwise esp32 toolchain can't link static arrays of such a big size for 256+ matrices - leds = (CRGB *)malloc(NUM_LEDS * sizeof(CRGB)); - - // allocate mem for noise effect - // (there should be some guards for malloc errors eventually) - noise = (uint8_t **)malloc(MATRIX_WIDTH * sizeof(uint8_t *)); - for (int i = 0; i < MATRIX_WIDTH; ++i) { - noise[i] = (uint8_t *)malloc(MATRIX_HEIGHT * sizeof(uint8_t)); - } - - ClearFrame(); - //dma_display->clearScreen(); - } - ~Effects(){ - free(leds); - for (int i = 0; i < MATRIX_WIDTH; ++i) { - free(noise[i]); - } - free(noise); - } - - /* The only 'framebuffer' we have is what is contained in the leds and leds2 variables. - * We don't store what the color a particular pixel might be, other than when it's turned - * into raw electrical signal output gobbly-gook (i.e. the DMA matrix buffer), but this * is not reversible. - * - * As such, any time these effects want to write a pixel color, we first have to update - * the leds or leds2 array, and THEN write it to the RGB panel. This enables us to 'look up' the array to see what a pixel color was previously, each drawFrame(). - */ - void drawBackgroundFastLEDPixelCRGB(int16_t x, int16_t y, CRGB color) - { - leds[XY(x, y)] = color; - //dma_display->drawPixelRGB888(x, y, color.r, color.g, color.b); - } - - // write one pixel with the specified color from the current palette to coordinates - void Pixel(int x, int y, uint8_t colorIndex) { - leds[XY(x, y)] = ColorFromCurrentPalette(colorIndex); - //dma_display->drawPixelRGB888(x, y, temp.r, temp.g, temp.b); // now draw it? - } - - void PrepareFrame() { - // leds = (CRGB*) backgroundLayer.backBuffer(); - } - - void ShowFrame() { - //#if (FASTLED_VERSION >= 3001000) - // nblendPaletteTowardPalette(currentPalette, targetPalette, 24); - //#else - currentPalette = targetPalette; - //#endif - - // backgroundLayer.swapBuffers(); - // leds = (CRGB*) backgroundLayer.backBuffer(); - // LEDS.countFPS(); - - for (int y=0; ydrawPixelRGB888( x, y, leds[_pixel].r, leds[_pixel].g, leds[_pixel].b); - } // end loop to copy fast led to the dma matrix - } - } - - // scale the brightness of the screenbuffer down - void DimAll(byte value) - { - for (int i = 0; i < NUM_LEDS; i++) - { - leds[i].nscale8(value); - } - } - - void ClearFrame() - { - memset(leds, 0x00, NUM_LEDS * sizeof(CRGB)); // flush - } - - - -/* - void CircleStream(uint8_t value) { - DimAll(value); ShowFrame(); - - for (uint8_t offset = 0; offset < MATRIX_CENTER_X; offset++) { - boolean hasprev = false; - uint16_t prevxy = 0; - - for (uint8_t theta = 0; theta < 255; theta++) { - uint8_t x = mapcos8(theta, offset, (MATRIX_WIDTH - 1) - offset); - uint8_t y = mapsin8(theta, offset, (MATRIX_HEIGHT - 1) - offset); - - uint16_t xy = XY(x, y); - - if (hasprev) { - leds[prevxy] += leds[xy]; - } - - prevxy = xy; - hasprev = true; - } - } - - for (uint8_t x = 0; x < MATRIX_WIDTH; x++) { - for (uint8_t y = 0; y < MATRIX_HEIGHT; y++) { - uint16_t xy = XY(x, y); - leds[xy] = leds2[xy]; - leds[xy].nscale8(value); - leds2[xy].nscale8(value); - } - } - } -*/ - - // palettes - static const int paletteCount = 10; - int paletteIndex = -1; - TBlendType currentBlendType = LINEARBLEND; - CRGBPalette16 currentPalette; - CRGBPalette16 targetPalette; - char* currentPaletteName; - - static const int HeatColorsPaletteIndex = 6; - static const int RandomPaletteIndex = 9; - - void Setup() { - currentPalette = RainbowColors_p; - loadPalette(0); - NoiseVariablesSetup(); - } - - void CyclePalette(int offset = 1) { - loadPalette(paletteIndex + offset); - } - - void RandomPalette() { - loadPalette(RandomPaletteIndex); - } - - void loadPalette(int index) { - paletteIndex = index; - - if (paletteIndex >= paletteCount) - paletteIndex = 0; - else if (paletteIndex < 0) - paletteIndex = paletteCount - 1; - - switch (paletteIndex) { - case 0: - targetPalette = RainbowColors_p; - currentPaletteName = (char *)"Rainbow"; - break; - //case 1: - // targetPalette = RainbowStripeColors_p; - // currentPaletteName = (char *)"RainbowStripe"; - // break; - case 1: - targetPalette = OceanColors_p; - currentPaletteName = (char *)"Ocean"; - break; - case 2: - targetPalette = CloudColors_p; - currentPaletteName = (char *)"Cloud"; - break; - case 3: - targetPalette = ForestColors_p; - currentPaletteName = (char *)"Forest"; - break; - case 4: - targetPalette = PartyColors_p; - currentPaletteName = (char *)"Party"; - break; - case 5: - setupGrayscalePalette(); - currentPaletteName = (char *)"Grey"; - break; - case HeatColorsPaletteIndex: - targetPalette = HeatColors_p; - currentPaletteName = (char *)"Heat"; - break; - case 7: - targetPalette = LavaColors_p; - currentPaletteName = (char *)"Lava"; - break; - case 8: - setupIcePalette(); - currentPaletteName = (char *)"Ice"; - break; - case RandomPaletteIndex: - loadPalette(random(0, paletteCount - 1)); - paletteIndex = RandomPaletteIndex; - currentPaletteName = (char *)"Random"; - break; - } - } - - void setPalette(String paletteName) { - if (paletteName == "Rainbow") - loadPalette(0); - //else if (paletteName == "RainbowStripe") - // loadPalette(1); - else if (paletteName == "Ocean") - loadPalette(1); - else if (paletteName == "Cloud") - loadPalette(2); - else if (paletteName == "Forest") - loadPalette(3); - else if (paletteName == "Party") - loadPalette(4); - else if (paletteName == "Grayscale") - loadPalette(5); - else if (paletteName == "Heat") - loadPalette(6); - else if (paletteName == "Lava") - loadPalette(7); - else if (paletteName == "Ice") - loadPalette(8); - else if (paletteName == "Random") - RandomPalette(); - } - - void listPalettes() { - Serial.println(F("{")); - Serial.print(F(" \"count\": ")); - Serial.print(paletteCount); - Serial.println(","); - Serial.println(F(" \"results\": [")); - - String paletteNames [] = { - "Rainbow", - // "RainbowStripe", - "Ocean", - "Cloud", - "Forest", - "Party", - "Grayscale", - "Heat", - "Lava", - "Ice", - "Random" - }; - - for (int i = 0; i < paletteCount; i++) { - Serial.print(F(" \"")); - Serial.print(paletteNames[i]); - if (i == paletteCount - 1) - Serial.println(F("\"")); - else - Serial.println(F("\",")); - } - - Serial.println(" ]"); - Serial.println("}"); - } - - void setupGrayscalePalette() { - targetPalette = CRGBPalette16(CRGB::Black, CRGB::White); - } - - void setupIcePalette() { - targetPalette = CRGBPalette16(CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White); - } - - // Oscillators and Emitters - - // the oscillators: linear ramps 0-255 - byte osci[6]; - - // sin8(osci) swinging between 0 to MATRIX_WIDTH - 1 - byte p[6]; - - // set the speeds (and by that ratios) of the oscillators here - void MoveOscillators() { - osci[0] = osci[0] + 5; - osci[1] = osci[1] + 2; - osci[2] = osci[2] + 3; - osci[3] = osci[3] + 4; - osci[4] = osci[4] + 1; - if (osci[4] % 2 == 0) - osci[5] = osci[5] + 1; // .5 - for (int i = 0; i < 4; i++) { - p[i] = map8(sin8(osci[i]), 0, MATRIX_WIDTH - 1); //why? to keep the result in the range of 0-MATRIX_WIDTH (matrix size) - } - } - - - // All the caleidoscope functions work directly within the screenbuffer (leds array). - // Draw whatever you like in the area x(0-15) and y (0-15) and then copy it arround. - - // rotates the first 16x16 quadrant 3 times onto a 32x32 (+90 degrees rotation for each one) - void Caleidoscope1() { - for (int x = 0; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < MATRIX_CENTER_Y; y++) { - leds[XY16(MATRIX_WIDTH - 1 - x, y)] = leds[XY16(x, y)]; - leds[XY16(MATRIX_WIDTH - 1 - x, MATRIX_HEIGHT - 1 - y)] = leds[XY16(x, y)]; - leds[XY16(x, MATRIX_HEIGHT - 1 - y)] = leds[XY16(x, y)]; - } - } - } - - - // mirror the first 16x16 quadrant 3 times onto a 32x32 - void Caleidoscope2() { - for (int x = 0; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < MATRIX_CENTER_Y; y++) { - leds[XY16(MATRIX_WIDTH - 1 - x, y)] = leds[XY16(y, x)]; - leds[XY16(x, MATRIX_HEIGHT - 1 - y)] = leds[XY16(y, x)]; - leds[XY16(MATRIX_WIDTH - 1 - x, MATRIX_HEIGHT - 1 - y)] = leds[XY16(x, y)]; - } - } - } - - // copy one diagonal triangle into the other one within a 16x16 - void Caleidoscope3() { - for (int x = 0; x <= MATRIX_CENTRE_X && x < MATRIX_HEIGHT; x++) { - for (int y = 0; y <= x && y= 0; y--) { - leds[XY16(x, y)] = leds[XY16(y, x)]; - } - } - } - - void Caleidoscope6() { - for (int x = 1; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 7)] = leds[XY16(x, 0)]; - } //a - for (int x = 2; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 6)] = leds[XY16(x, 1)]; - } //b - for (int x = 3; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 5)] = leds[XY16(x, 2)]; - } //c - for (int x = 4; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 4)] = leds[XY16(x, 3)]; - } //d - for (int x = 5; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 3)] = leds[XY16(x, 4)]; - } //e - for (int x = 6; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 2)] = leds[XY16(x, 5)]; - } //f - for (int x = 7; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 1)] = leds[XY16(x, 6)]; - } //g - } - - // create a square twister to the left or counter-clockwise - // x and y for center, r for radius - void SpiralStream(int x, int y, int r, byte dimm) { - for (int d = r; d >= 0; d--) { // from the outside to the inside - for (int i = x - d; i <= x + d; i++) { - leds[XY16(i, y - d)] += leds[XY16(i + 1, y - d)]; // lowest row to the right - leds[XY16(i, y - d)].nscale8(dimm); - } - for (int i = y - d; i <= y + d; i++) { - leds[XY16(x + d, i)] += leds[XY16(x + d, i + 1)]; // right column up - leds[XY16(x + d, i)].nscale8(dimm); - } - for (int i = x + d; i >= x - d; i--) { - leds[XY16(i, y + d)] += leds[XY16(i - 1, y + d)]; // upper row to the left - leds[XY16(i, y + d)].nscale8(dimm); - } - for (int i = y + d; i >= y - d; i--) { - leds[XY16(x - d, i)] += leds[XY16(x - d, i - 1)]; // left column down - leds[XY16(x - d, i)].nscale8(dimm); - } - } - } - - // expand everything within a circle - void Expand(int centerX, int centerY, int radius, byte dimm) { - if (radius == 0) - return; - - int currentRadius = radius; - - while (currentRadius > 0) { - int a = radius, b = 0; - int radiusError = 1 - a; - - int nextRadius = currentRadius - 1; - int nextA = nextRadius - 1, nextB = 0; - int nextRadiusError = 1 - nextA; - - while (a >= b) - { - // move them out one pixel on the radius - leds[XY16(a + centerX, b + centerY)] = leds[XY16(nextA + centerX, nextB + centerY)]; - leds[XY16(b + centerX, a + centerY)] = leds[XY16(nextB + centerX, nextA + centerY)]; - leds[XY16(-a + centerX, b + centerY)] = leds[XY16(-nextA + centerX, nextB + centerY)]; - leds[XY16(-b + centerX, a + centerY)] = leds[XY16(-nextB + centerX, nextA + centerY)]; - leds[XY16(-a + centerX, -b + centerY)] = leds[XY16(-nextA + centerX, -nextB + centerY)]; - leds[XY16(-b + centerX, -a + centerY)] = leds[XY16(-nextB + centerX, -nextA + centerY)]; - leds[XY16(a + centerX, -b + centerY)] = leds[XY16(nextA + centerX, -nextB + centerY)]; - leds[XY16(b + centerX, -a + centerY)] = leds[XY16(nextB + centerX, -nextA + centerY)]; - - // dim them - leds[XY16(a + centerX, b + centerY)].nscale8(dimm); - leds[XY16(b + centerX, a + centerY)].nscale8(dimm); - leds[XY16(-a + centerX, b + centerY)].nscale8(dimm); - leds[XY16(-b + centerX, a + centerY)].nscale8(dimm); - leds[XY16(-a + centerX, -b + centerY)].nscale8(dimm); - leds[XY16(-b + centerX, -a + centerY)].nscale8(dimm); - leds[XY16(a + centerX, -b + centerY)].nscale8(dimm); - leds[XY16(b + centerX, -a + centerY)].nscale8(dimm); - - b++; - if (radiusError < 0) - radiusError += 2 * b + 1; - else - { - a--; - radiusError += 2 * (b - a + 1); - } - - nextB++; - if (nextRadiusError < 0) - nextRadiusError += 2 * nextB + 1; - else - { - nextA--; - nextRadiusError += 2 * (nextB - nextA + 1); - } - } - - currentRadius--; - } - } - - // give it a linear tail to the right - void StreamRight(byte scale, int fromX = 0, int toX = MATRIX_WIDTH, int fromY = 0, int toY = MATRIX_HEIGHT) - { - for (int x = fromX + 1; x < toX; x++) { - for (int y = fromY; y < toY; y++) { - leds[XY16(x, y)] += leds[XY16(x - 1, y)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int y = fromY; y < toY; y++) - leds[XY16(0, y)].nscale8(scale); - } - - // give it a linear tail to the left - void StreamLeft(byte scale, int fromX = MATRIX_WIDTH, int toX = 0, int fromY = 0, int toY = MATRIX_HEIGHT) - { - for (int x = toX; x < fromX; x++) { - for (int y = fromY; y < toY; y++) { - leds[XY16(x, y)] += leds[XY16(x + 1, y)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int y = fromY; y < toY; y++) - leds[XY16(0, y)].nscale8(scale); - } - - // give it a linear tail downwards - void StreamDown(byte scale) - { - for (int x = 0; x < MATRIX_WIDTH; x++) { - for (int y = 1; y < MATRIX_HEIGHT; y++) { - leds[XY16(x, y)] += leds[XY16(x, y - 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int x = 0; x < MATRIX_WIDTH; x++) - leds[XY16(x, 0)].nscale8(scale); - } - - // give it a linear tail upwards - void StreamUp(byte scale) - { - for (int x = 0; x < MATRIX_WIDTH; x++) { - for (int y = MATRIX_HEIGHT - 2; y >= 0; y--) { - leds[XY16(x, y)] += leds[XY16(x, y + 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int x = 0; x < MATRIX_WIDTH; x++) - leds[XY16(x, MATRIX_HEIGHT - 1)].nscale8(scale); - } - - // give it a linear tail up and to the left - void StreamUpAndLeft(byte scale) - { - for (int x = 0; x < MATRIX_WIDTH - 1; x++) { - for (int y = MATRIX_HEIGHT - 2; y >= 0; y--) { - leds[XY16(x, y)] += leds[XY16(x + 1, y + 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int x = 0; x < MATRIX_WIDTH; x++) - leds[XY16(x, MATRIX_HEIGHT - 1)].nscale8(scale); - for (int y = 0; y < MATRIX_HEIGHT; y++) - leds[XY16(MATRIX_WIDTH - 1, y)].nscale8(scale); - } - - // give it a linear tail up and to the right - void StreamUpAndRight(byte scale) - { - for (int x = 0; x < MATRIX_WIDTH - 1; x++) { - for (int y = MATRIX_HEIGHT - 2; y >= 0; y--) { - leds[XY16(x + 1, y)] += leds[XY16(x, y + 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - // fade the bottom row - for (int x = 0; x < MATRIX_WIDTH; x++) - leds[XY16(x, MATRIX_HEIGHT - 1)].nscale8(scale); - - // fade the right column - for (int y = 0; y < MATRIX_HEIGHT; y++) - leds[XY16(MATRIX_WIDTH - 1, y)].nscale8(scale); - } - - // just move everything one line down - void MoveDown() { - for (int y = MATRIX_HEIGHT - 1; y > 0; y--) { - for (int x = 0; x < MATRIX_WIDTH; x++) { - leds[XY16(x, y)] = leds[XY16(x, y - 1)]; - } - } - } - - // just move everything one line down - void VerticalMoveFrom(int start, int end) { - for (int y = end; y > start; y--) { - for (int x = 0; x < MATRIX_WIDTH; x++) { - leds[XY16(x, y)] = leds[XY16(x, y - 1)]; - } - } - } - - // copy the rectangle defined with 2 points x0, y0, x1, y1 - // to the rectangle beginning at x2, x3 - void Copy(byte x0, byte y0, byte x1, byte y1, byte x2, byte y2) { - for (int y = y0; y < y1 + 1; y++) { - for (int x = x0; x < x1 + 1; x++) { - leds[XY16(x + x2 - x0, y + y2 - y0)] = leds[XY16(x, y)]; - } - } - } - - // rotate + copy triangle (MATRIX_CENTER_X*MATRIX_CENTER_X) - void RotateTriangle() { - for (int x = 1; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < x; y++) { - leds[XY16(x, 7 - y)] = leds[XY16(7 - x, y)]; - } - } - } - - // mirror + copy triangle (MATRIX_CENTER_X*MATRIX_CENTER_X) - void MirrorTriangle() { - for (int x = 1; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < x; y++) { - leds[XY16(7 - y, x)] = leds[XY16(7 - x, y)]; - } - } - } - - // draw static rainbow triangle pattern (MATRIX_CENTER_XxWIDTH / 2) - // (just for debugging) - void RainbowTriangle() { - for (int i = 0; i < MATRIX_CENTER_X; i++) { - for (int j = 0; j <= i; j++) { - Pixel(7 - i, j, i * j * 4); - } - } - } - - void BresenhamLine(int x0, int y0, int x1, int y1, byte colorIndex) - { - BresenhamLine(x0, y0, x1, y1, ColorFromCurrentPalette(colorIndex)); - } - - void BresenhamLine(int x0, int y0, int x1, int y1, CRGB color) - { - int dx = abs(x1 - x0), sx = x0 < x1 ? 1 : -1; - int dy = -abs(y1 - y0), sy = y0 < y1 ? 1 : -1; - int err = dx + dy, e2; - for (;;) { - leds[XY16(x0, y0)] += color; - if (x0 == x1 && y0 == y1) break; - e2 = 2 * err; - if (e2 > dy) { - err += dy; - x0 += sx; - } - if (e2 < dx) { - err += dx; - y0 += sy; - } - } - } - - - CRGB ColorFromCurrentPalette(uint8_t index = 0, uint8_t brightness = 255, TBlendType blendType = LINEARBLEND) { - return ColorFromPalette(currentPalette, index, brightness, currentBlendType); - } - - CRGB HsvToRgb(uint8_t h, uint8_t s, uint8_t v) { - CHSV hsv = CHSV(h, s, v); - CRGB rgb; - hsv2rgb_spectrum(hsv, rgb); - return rgb; - } - - void NoiseVariablesSetup() { - noisesmoothing = 200; - - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - noise_scale_x = 6000; - noise_scale_y = 6000; - } - - void FillNoise() { - for (uint16_t i = 0; i < MATRIX_WIDTH; i++) { - uint32_t ioffset = noise_scale_x * (i - MATRIX_CENTRE_Y); - - for (uint16_t j = 0; j < MATRIX_HEIGHT; j++) { - uint32_t joffset = noise_scale_y * (j - MATRIX_CENTRE_Y); - - byte data = inoise16(noise_x + ioffset, noise_y + joffset, noise_z) >> 8; - - uint8_t olddata = noise[i][j]; - uint8_t newdata = scale8(olddata, noisesmoothing) + scale8(data, 256 - noisesmoothing); - data = newdata; - - noise[i][j] = data; - } - } - } - - // non leds2 memory version. - void MoveX(byte delta) - { - - CRGB tmp = 0; - - for (int y = 0; y < MATRIX_HEIGHT; y++) - { - - // Shift Left: https://codedost.com/c/arraypointers-in-c/c-program-shift-elements-array-left-direction/ - // Computationally heavier but doesn't need an entire leds2 array - - tmp = leds[XY16(0, y)]; - for (int m = 0; m < delta; m++) - { - // Do this delta time for each row... computationally expensive potentially. - for(int x = 0; x < MATRIX_WIDTH; x++) - { - leds[XY16(x, y)] = leds [XY16(x+1, y)]; - } - - leds[XY16(MATRIX_WIDTH-1, y)] = tmp; - } - - - /* - // Shift - for (int x = 0; x < MATRIX_WIDTH - delta; x++) { - leds2[XY(x, y)] = leds[XY(x + delta, y)]; - } - - // Wrap around - for (int x = MATRIX_WIDTH - delta; x < MATRIX_WIDTH; x++) { - leds2[XY(x, y)] = leds[XY(x + delta - MATRIX_WIDTH, y)]; - } - */ - } // end row loop - - /* - // write back to leds - for (uint8_t y = 0; y < MATRIX_HEIGHT; y++) { - for (uint8_t x = 0; x < MATRIX_WIDTH; x++) { - leds[XY(x, y)] = leds2[XY(x, y)]; - } - } - */ - } - - void MoveY(byte delta) - { - - CRGB tmp = 0; - for (int x = 0; x < MATRIX_WIDTH; x++) - { - tmp = leds[XY16(x, 0)]; - for (int m = 0; m < delta; m++) // moves - { - // Do this delta time for each row... computationally expensive potentially. - for(int y = 0; y < MATRIX_HEIGHT; y++) - { - leds[XY16(x, y)] = leds [XY16(x, y+1)]; - } - - leds[XY16(x, MATRIX_HEIGHT-1)] = tmp; - } - } // end column loop - } /// MoveY - - -}; - -#endif \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Geometry.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Geometry.h deleted file mode 100644 index 4e47557..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Geometry.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from Noel Bundy's work: https://github.com/TwystNeko/Object3d - * Copyright (c) 2014 Noel Bundy - * - * Portions of this code are adapted from the Petty library: https://code.google.com/p/peggy/ - * Copyright (c) 2008 Windell H Oskay. All right reserved. - * - * 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. - */ - -#ifndef Geometry_H -#define Geometry_H - -struct Vertex -{ - float x, y, z; - Vertex() - { - this->set(0, 0, 0); - } - - Vertex(float x, float y, float z) - { - this->set(x, y, z); - } - - void set(float x, float y, float z) - { - this->x = x; - this->y = y; - this->z = z; - } -}; - -struct EdgePoint -{ - int x, y; - boolean visible; - - EdgePoint() - { - this->set(0, 0); - this->visible = false; - } - - void set(int a, int b) - { - this->x = a; - this->y = b; - } -}; - -struct Point -{ - float x, y; - - Point() - { - set(0, 0); - } - - Point(float x, float y) - { - set(x, y); - } - - void set(float x, float y) - { - this->x = x; - this->y = y; - } - -}; - -struct squareFace -{ - int length; - int sommets[4]; - int ed[4]; - - squareFace() - { - set(-1, -1, -1, -1); - } - - squareFace(int a, int b, int c, int d) - { - this->length = 4; - this->sommets[0] = a; - this->sommets[1] = b; - this->sommets[2] = c; - this->sommets[3] = d; - } - - void set(int a, int b, int c, int d) - { - this->length = 4; - this->sommets[0] = a; - this->sommets[1] = b; - this->sommets[2] = c; - this->sommets[3] = d; - } - -}; - -struct triFace -{ - int length; - int sommets[3]; - int ed[3]; - - triFace() - { - set(-1,-1,-1); - } - triFace(int a, int b, int c) - { - this->length =3; - this->sommets[0]=a; - this->sommets[1]=b; - this->sommets[2]=c; - } - void set(int a, int b, int c) - { - this->length =3; - this->sommets[0]=a; - this->sommets[1]=b; - this->sommets[2]=c; - } -}; - -#endif \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternAttract.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternAttract.h deleted file mode 100644 index dcb6491..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternAttract.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternAttract_H - -class PatternAttract : public Drawable { -private: - const int count = 8; - Attractor attractor; - -public: - PatternAttract() { - name = (char *)"Attract"; - } - - void start() { - int direction = random(0, 2); - if (direction == 0) - direction = -1; - - for (int i = 0; i < count; i++) { - Boid boid = Boid(15, 31 - i); - boid.mass = 1; // random(0.1, 2); - boid.velocity.x = ((float) random(40, 50)) / 100.0; - boid.velocity.x *= direction; - boid.velocity.y = 0; - boid.colorIndex = i * 32; - boids[i] = boid; - //dim = random(170, 250); - } - } - - unsigned int drawFrame() { - // dim all pixels on the display - uint8_t dim = beatsin8(2, 170, 250); - effects.DimAll(dim); - - for (int i = 0; i < count; i++) { - Boid boid = boids[i]; - - PVector force = attractor.attract(boid); - boid.applyForce(force); - - boid.update(); - effects.drawBackgroundFastLEDPixelCRGB(boid.location.x, boid.location.y, effects.ColorFromCurrentPalette(boid.colorIndex)); - - boids[i] = boid; - } - - effects.ShowFrame(); - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternBounce.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternBounce.h deleted file mode 100644 index 7340514..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternBounce.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternBounce_H - -class PatternBounce : public Drawable { -private: - static const int count = 32; - PVector gravity = PVector(0, 0.0125); - -public: - PatternBounce() { - name = (char *)"Bounce"; - } - - void start() { - unsigned int colorWidth = 256 / count; - for (int i = 0; i < count; i++) { - Boid boid = Boid(i, 0); - boid.velocity.x = 0; - boid.velocity.y = i * -0.01; - boid.colorIndex = colorWidth * i; - boid.maxforce = 10; - boid.maxspeed = 10; - boids[i] = boid; - } - } - - unsigned int drawFrame() { - // dim all pixels on the display - effects.DimAll(170); effects.ShowFrame(); - - for (int i = 0; i < count; i++) { - Boid boid = boids[i]; - - boid.applyForce(gravity); - - boid.update(); - - effects.drawBackgroundFastLEDPixelCRGB(boid.location.x, boid.location.y, effects.ColorFromCurrentPalette(boid.colorIndex)); - - if (boid.location.y >= MATRIX_HEIGHT - 1) { - boid.location.y = MATRIX_HEIGHT - 1; - boid.velocity.y *= -1.0; - } - - boids[i] = boid; - } - - return 15; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternCube.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternCube.h deleted file mode 100644 index f2c60bc..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternCube.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from Noel Bundy's work: https://github.com/TwystNeko/Object3d - * Copyright (c) 2014 Noel Bundy - * - * Portions of this code are adapted from the Petty library: https://code.google.com/p/peggy/ - * Copyright (c) 2008 Windell H Oskay. All right reserved. - * - * 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. - */ - -#ifndef PatternCube_H -#define PatternCube_H - -class PatternCube : public Drawable { - private: - float focal = 30; // Focal of the camera - int cubeWidth = 28; // Cube size - float Angx = 20.0, AngxSpeed = 0.05; // rotation (angle+speed) around X-axis - float Angy = 10.0, AngySpeed = 0.05; // rotation (angle+speed) around Y-axis - float Ox = 15.5, Oy = 15.5; // position (x,y) of the frame center - int zCamera = 110; // distance from cube to the eye of the camera - - // Local vertices - Vertex local[8]; - // Camera aligned vertices - Vertex aligned[8]; - // On-screen projected vertices - Point screen[8]; - // Faces - squareFace face[6]; - // Edges - EdgePoint edge[12]; - int nbEdges; - // ModelView matrix - float m00, m01, m02, m10, m11, m12, m20, m21, m22; - - // constructs the cube - void make(int w) - { - nbEdges = 0; - - local[0].set(-w, w, w); - local[1].set(w, w, w); - local[2].set(w, -w, w); - local[3].set(-w, -w, w); - local[4].set(-w, w, -w); - local[5].set(w, w, -w); - local[6].set(w, -w, -w); - local[7].set(-w, -w, -w); - - face[0].set(1, 0, 3, 2); - face[1].set(0, 4, 7, 3); - face[2].set(4, 0, 1, 5); - face[3].set(4, 5, 6, 7); - face[4].set(1, 2, 6, 5); - face[5].set(2, 3, 7, 6); - - int f, i; - for (f = 0; f < 6; f++) - { - for (i = 0; i < face[f].length; i++) - { - face[f].ed[i] = this->findEdge(face[f].sommets[i], face[f].sommets[i ? i - 1 : face[f].length - 1]); - } - } - } - - // finds edges from faces - int findEdge(int a, int b) - { - int i; - for (i = 0; i < nbEdges; i++) - if ((edge[i].x == a && edge[i].y == b) || (edge[i].x == b && edge[i].y == a)) - return i; - edge[nbEdges++].set(a, b); - return i; - } - - // rotates according to angle x&y - void rotate(float angx, float angy) - { - int i; - float cx = cos(angx); - float sx = sin(angx); - float cy = cos(angy); - float sy = sin(angy); - - m00 = cy; - m01 = 0; - m02 = -sy; - m10 = sx * sy; - m11 = cx; - m12 = sx * cy; - m20 = cx * sy; - m21 = -sx; - m22 = cx * cy; - - for (i = 0; i < 8; i++) - { - aligned[i].x = m00 * local[i].x + m01 * local[i].y + m02 * local[i].z; - aligned[i].y = m10 * local[i].x + m11 * local[i].y + m12 * local[i].z; - aligned[i].z = m20 * local[i].x + m21 * local[i].y + m22 * local[i].z + zCamera; - - screen[i].x = floor((Ox + focal * aligned[i].x / aligned[i].z)); - screen[i].y = floor((Oy - focal * aligned[i].y / aligned[i].z)); - } - - for (i = 0; i < 12; i++) - edge[i].visible = false; - - Point *pa, *pb, *pc; - for (i = 0; i < 6; i++) - { - pa = screen + face[i].sommets[0]; - pb = screen + face[i].sommets[1]; - pc = screen + face[i].sommets[2]; - - boolean back = ((pb->x - pa->x) * (pc->y - pa->y) - (pb->y - pa->y) * (pc->x - pa->x)) < 0; - if (!back) - { - int j; - for (j = 0; j < 4; j++) - { - edge[face[i].ed[j]].visible = true; - } - } - } - } - - byte hue = 0; - int step = 0; - - public: - PatternCube() { - name = (char *)"Cube"; - make(cubeWidth); - } - - unsigned int drawFrame() { - uint8_t blurAmount = beatsin8(2, 10, 255); - -#if FASTLED_VERSION >= 3001000 - blur2d(effects.leds, MATRIX_WIDTH, MATRIX_HEIGHT, blurAmount); -#else - effects.DimAll(blurAmount); effects.ShowFrame(); -#endif - - zCamera = beatsin8(2, 100, 140); - AngxSpeed = beatsin8(3, 1, 10) / 100.0f; - AngySpeed = beatcos8(5, 1, 10) / 100.0f; - - // Update values - Angx += AngxSpeed; - Angy += AngySpeed; - if (Angx >= TWO_PI) - Angx -= TWO_PI; - if (Angy >= TWO_PI) - Angy -= TWO_PI; - - rotate(Angx, Angy); - - // Draw cube - int i; - - CRGB color = effects.ColorFromCurrentPalette(hue, 128); - - // Backface - EdgePoint *e; - for (i = 0; i < 12; i++) - { - e = edge + i; - if (!e->visible) { - dma_display->drawLine(screen[e->x].x, screen[e->x].y, screen[e->y].x, screen[e->y].y, color); - } - } - - color = effects.ColorFromCurrentPalette(hue, 255); - - // Frontface - for (i = 0; i < 12; i++) - { - e = edge + i; - if (e->visible) - { - dma_display->drawLine(screen[e->x].x, screen[e->x].y, screen[e->y].x, screen[e->y].y, color); - } - } - - step++; - if (step == 8) { - step = 0; - hue++; - } - - effects.ShowFrame(); - - return 20; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternElectricMandala.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternElectricMandala.h deleted file mode 100644 index 880de25..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternElectricMandala.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Funky Noise" by Stefan Petrick: https://github.com/StefanPetrick/FunkyNoise - * Copyright (c) 2014 Stefan Petrick - * http://www.stefan-petrick.de/wordpress_beta - * - * 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. - */ - -#ifndef PatternElectricMandala_H - -class PatternElectricMandala : public Drawable { - private: - - // The coordinates for 16-bit noise spaces. -#define NUM_LAYERS 1 - - // used for the random based animations - int16_t dx; - int16_t dy; - int16_t dz; - int16_t dsx; - int16_t dsy; - - public: - PatternElectricMandala() { - name = (char *)"ElectricMandala"; - } - - void start() { - // set to reasonable values to avoid a black out - noisesmoothing = 200; - - // just any free input pin - //random16_add_entropy(analogRead(18)); - - // fill coordinates with random values - // set zoom levels - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - noise_scale_x = 6000; - noise_scale_y = 6000; - - // for the random movement - dx = random8(); - dy = random8(); - dz = random8(); - dsx = random8(); - dsy = random8(); - } - - unsigned int drawFrame() { -#if FASTLED_VERSION >= 3001000 - // a new parameter set every 15 seconds - EVERY_N_SECONDS(15) { - //SetupRandomPalette3(); - dy = random16(500) - 250; // random16(2000) - 1000 is pretty fast but works fine, too - dx = random16(500) - 250; - dz = random16(500) - 250; - noise_scale_x = random16(10000) + 2000; - noise_scale_y = random16(10000) + 2000; - } -#endif - - noise_y += dy; - noise_x += dx; - noise_z += dz; - - effects.FillNoise(); - ShowNoiseLayer(0, 1, 0); - - effects.Caleidoscope3(); - effects.Caleidoscope1(); - - effects.ShowFrame(); - - return 30; - } - - // show just one layer - void ShowNoiseLayer(byte layer, byte colorrepeat, byte colorshift) { - for (uint16_t i = 0; i < MATRIX_WIDTH; i++) { - for (uint16_t j = 0; j < MATRIX_HEIGHT; j++) { - - uint8_t color = noise[i][j]; - - uint8_t bri = color; - - // assign a color depending on the actual palette - CRGB pixel = ColorFromPalette(effects.currentPalette, colorrepeat * (color + colorshift), bri); - - effects.leds[XY16(i, j)] = pixel; - } - } - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFire.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFire.h deleted file mode 100644 index 83aa67c..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFire.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from FastLED Fire2012 example by Mark Kriegsman: https://github.com/FastLED/FastLED/tree/master/examples/Fire2012WithPalette - * Copyright (c) 2013 FastLED - * - * 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. - */ - -#ifndef PatternFire_H -#define PatternFire_H - -#ifndef Effects_H -#include "Effects.h" -#endif - -class PatternFire : public Drawable { - private: - - public: - PatternFire() { - name = (char *)"Fire"; - } - - // There are two main parameters you can play with to control the look and - // feel of your fire: COOLING (used in step 1 above), and SPARKING (used - // in step 3 above). - // - // cooling: How much does the air cool as it rises? - // Less cooling = taller flames. More cooling = shorter flames. - // Default 55, suggested range 20-100 - int cooling = 100; - - // sparking: What chance (out of 255) is there that a new spark will be lit? - // Higher chance = more roaring fire. Lower chance = more flickery fire. - // Default 120, suggested range 50-200. - unsigned int sparking = 100; - - unsigned int drawFrame() { - // Add entropy to random number generator; we use a lot of it. - random16_add_entropy( random16()); - - effects.DimAll(235); - - for (int x = 0; x < MATRIX_WIDTH; x++) { - // Step 1. Cool down every cell a little - for (int y = 0; y < MATRIX_HEIGHT; y++) { - int xy = XY(x, y); - heat[xy] = qsub8(heat[xy], random8(0, ((cooling * 10) / MATRIX_HEIGHT) + 2)); - } - - // Step 2. Heat from each cell drifts 'up' and diffuses a little - for (int y = 0; y < MATRIX_HEIGHT; y++) { - heat[XY(x, y)] = (heat[XY(x, y + 1)] + heat[XY(x, y + 2)] + heat[XY(x, y + 2)]) / 3; - } - - // Step 2. Randomly ignite new 'sparks' of heat - if (random8() < sparking) { - // int x = (p[0] + p[1] + p[2]) / 3; - - int xy = XY(x, MATRIX_HEIGHT - 1); - heat[xy] = qadd8(heat[xy], random8(160, 255)); - } - - // Step 4. Map from heat cells to LED colors - for (int y = 0; y < MATRIX_HEIGHT; y++) { - int xy = XY(x, y); - byte colorIndex = heat[xy]; - - // Recommend that you use values 0-240 rather than - // the usual 0-255, as the last 15 colors will be - // 'wrapping around' from the hot end to the cold end, - // which looks wrong. - colorIndex = scale8(colorIndex, 200); - - // override color 0 to ensure a black background? - if (colorIndex != 0) - // effects.leds[xy] = CRGB::Black; - // else - effects.leds[xy] = effects.ColorFromCurrentPalette(colorIndex); - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(2); - effects.MoveFractionalNoiseX(2); - - - effects.ShowFrame(); - - return 15; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFlock.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFlock.h deleted file mode 100644 index 3ae31b1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFlock.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Flocking" in "The Nature of Code" by Daniel Shiffman: http://natureofcode.com/ - * Copyright (c) 2014 Daniel Shiffman - * http://www.shiffman.net - * - * 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. - */ - -// Flocking -// Daniel Shiffman -// The Nature of Code, Spring 2009 - -// Demonstration of Craig Reynolds' "Flocking" behavior -// See: http://www.red3d.com/cwr/ -// Rules: Cohesion, Separation, Alignment - -#ifndef PatternFlock_H -#define PatternFlock_H - -class PatternFlock : public Drawable { - public: - PatternFlock() { - name = (char *)"Flock"; - } - - static const int boidCount = 10; - Boid predator; - - PVector wind; - byte hue = 0; - bool predatorPresent = true; - - void start() { - for (int i = 0; i < boidCount; i++) { - boids[i] = Boid(15, 15); - boids[i].maxspeed = 0.380; - boids[i].maxforce = 0.015; - } - - predatorPresent = random(0, 2) >= 1; - if (predatorPresent) { - predator = Boid(31, 31); - predatorPresent = true; - predator.maxspeed = 0.385; - predator.maxforce = 0.020; - predator.neighbordist = 16.0; - predator.desiredseparation = 0.0; - } - } - - unsigned int drawFrame() { - effects.DimAll(230); effects.ShowFrame(); - - bool applyWind = random(0, 255) > 250; - if (applyWind) { - wind.x = Boid::randomf() * .015; - wind.y = Boid::randomf() * .015; - } - - CRGB color = effects.ColorFromCurrentPalette(hue); - - for (int i = 0; i < boidCount; i++) { - Boid * boid = &boids[i]; - - if (predatorPresent) { - // flee from predator - boid->repelForce(predator.location, 10); - } - - boid->run(boids, boidCount); - boid->wrapAroundBorders(); - PVector location = boid->location; - // PVector velocity = boid->velocity; - // backgroundLayer.drawLine(location.x, location.y, location.x - velocity.x, location.y - velocity.y, color); - // effects.leds[XY(location.x, location.y)] += color; - effects.drawBackgroundFastLEDPixelCRGB(location.x, location.y, color); - - if (applyWind) { - boid->applyForce(wind); - applyWind = false; - } - } - - if (predatorPresent) { - predator.run(boids, boidCount); - predator.wrapAroundBorders(); - color = effects.ColorFromCurrentPalette(hue + 128); - PVector location = predator.location; - // PVector velocity = predator.velocity; - // backgroundLayer.drawLine(location.x, location.y, location.x - velocity.x, location.y - velocity.y, color); - // effects.leds[XY(location.x, location.y)] += color; - effects.drawBackgroundFastLEDPixelCRGB(location.x, location.y, color); - } - - EVERY_N_MILLIS(200) { - hue++; - } - - EVERY_N_SECONDS(30) { - predatorPresent = !predatorPresent; - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFlowField.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFlowField.h deleted file mode 100644 index 38f1083..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternFlowField.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternFlowField_H - -class PatternFlowField : public Drawable { - public: - PatternFlowField() { - name = (char *)"FlowField"; - } - - uint16_t x; - uint16_t y; - uint16_t z; - - uint16_t speed = 1; - uint16_t scale = 26; - - static const int count = 40; - - byte hue = 0; - - void start() { - x = random16(); - y = random16(); - z = random16(); - - for (int i = 0; i < count; i++) { - boids[i] = Boid(random(MATRIX_WIDTH), 0); - } - } - - unsigned int drawFrame() { - effects.DimAll(240); - - // CRGB color = effects.ColorFromCurrentPalette(hue); - - for (int i = 0; i < count; i++) { - Boid * boid = &boids[i]; - - int ioffset = scale * boid->location.x; - int joffset = scale * boid->location.y; - - byte angle = inoise8(x + ioffset, y + joffset, z); - - boid->velocity.x = (float) sin8(angle) * 0.0078125 - 1.0; - boid->velocity.y = -((float)cos8(angle) * 0.0078125 - 1.0); - boid->update(); - - effects.drawBackgroundFastLEDPixelCRGB(boid->location.x, boid->location.y, effects.ColorFromCurrentPalette(angle + hue)); // color - - if (boid->location.x < 0 || boid->location.x >= MATRIX_WIDTH || - boid->location.y < 0 || boid->location.y >= MATRIX_HEIGHT) { - boid->location.x = random(MATRIX_WIDTH); - boid->location.y = 0; - } - } - - EVERY_N_MILLIS(200) { - hue++; - } - - x += speed; - y += speed; - z += speed; - - effects.ShowFrame(); - - return 50; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternIncrementalDrift.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternIncrementalDrift.h deleted file mode 100644 index f68c04f..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternIncrementalDrift.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternIncrementalDrift_H -#define PatternIncrementalDrift_H - -class PatternIncrementalDrift : public Drawable { - public: - PatternIncrementalDrift() { - name = (char *)"Incremental Drift"; - } - - unsigned int drawFrame() { - uint8_t dim = beatsin8(2, 230, 250); - effects.DimAll(dim); effects.ShowFrame(); - - for (int i = 2; i <= MATRIX_WIDTH / 2; i++) - { - CRGB color = effects.ColorFromCurrentPalette((i - 2) * (240 / (MATRIX_WIDTH / 2))); - - uint8_t x = beatcos8((17 - i) * 2, MATRIX_CENTER_X - i, MATRIX_CENTER_X + i); - uint8_t y = beatsin8((17 - i) * 2, MATRIX_CENTER_Y - i, MATRIX_CENTER_Y + i); - - effects.drawBackgroundFastLEDPixelCRGB(x, y, color); - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternIncrementalDrift2.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternIncrementalDrift2.h deleted file mode 100644 index 0ce06c2..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternIncrementalDrift2.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternIncrementalDrift2_H -#define PatternIncrementalDrift2_H - -class PatternIncrementalDrift2 : public Drawable { - public: - PatternIncrementalDrift2() { - name = (char *)"Incremental Drift Rose"; - } - - unsigned int drawFrame() { - uint8_t dim = beatsin8(2, 170, 250); - effects.DimAll(dim); effects.ShowFrame(); - - for (uint8_t i = 0; i < 32; i++) - { - CRGB color; - - uint8_t x = 0; - uint8_t y = 0; - - if (i < 16) { - x = beatcos8((i + 1) * 2, i, MATRIX_WIDTH - i); - y = beatsin8((i + 1) * 2, i, MATRIX_HEIGHT - i); - color = effects.ColorFromCurrentPalette(i * 14); - } - else - { - x = beatsin8((32 - i) * 2, MATRIX_WIDTH - i, i + 1); - y = beatcos8((32 - i) * 2, MATRIX_HEIGHT - i, i + 1); - color = effects.ColorFromCurrentPalette((31 - i) * 14); - } - - effects.drawBackgroundFastLEDPixelCRGB(x, y, color); - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternInfinity.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternInfinity.h deleted file mode 100644 index 0c068ad..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternInfinity.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternInfinity_H - -class PatternInfinity : public Drawable { -public: - PatternInfinity() { - name = (char *)"Infinity"; - } - - unsigned int drawFrame() { - // dim all pixels on the display slightly - // to 250/255 (98%) of their current brightness - blur2d(effects.leds, MATRIX_WIDTH > 255 ? 255 : MATRIX_WIDTH, MATRIX_HEIGHT > 255 ? 255 : MATRIX_HEIGHT, 250); - // effects.DimAll(250); effects.ShowFrame(); - - - // the Effects class has some sample oscillators - // that move from 0 to 255 at different speeds - effects.MoveOscillators(); - - // the horizontal position of the head of the infinity sign - // oscillates from 0 to the maximum horizontal and back - int x = (MATRIX_WIDTH - 1) - effects.p[1]; - - // the vertical position of the head oscillates - // from 8 to 23 and back (hard-coded for a 32x32 matrix) - int y = map8(sin8(effects.osci[3]), 8, 23); - - // the hue oscillates from 0 to 255, overflowing back to 0 - byte hue = sin8(effects.osci[5]); - - // draw a pixel at x,y using a color from the current palette - effects.Pixel(x, y, hue); - - effects.ShowFrame(); - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternInvaders.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternInvaders.h deleted file mode 100644 index e2df82e..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternInvaders.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Inspired by 'Space Invader Generator': https://the8bitpimp.wordpress.com/2013/05/07/space-invader-generator - * - * 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. - */ - -#ifndef PatternInvaders_H -#define PatternInvaders_H - -class PatternInvadersSmall : public Drawable { - private: - uint8_t x = 1; - uint8_t y = 1; - - public: - PatternInvadersSmall() { - name = (char *)"Invaders Small"; - } - - void start() { - dma_display->fillScreen(0); - } - - unsigned int drawFrame() { - CRGB color1 = effects.ColorFromCurrentPalette(random(0, 255)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - CRGB color = CRGB::Black; - - if (random(0, 2) == 1) color = color1; - - effects.drawBackgroundFastLEDPixelCRGB(x + i, y + j, color); - - if (i < 2) - effects.drawBackgroundFastLEDPixelCRGB(x + (4 - i), y + j, color); - } - } - - x += 6; - if (x > 25) { - x = 1; - y += 6; - } - - if (y > 25) y = x = 1; - - effects.ShowFrame(); - - return 125; - } -}; - -class PatternInvadersMedium : public Drawable { - private: - uint8_t x = 0; - uint8_t y = 0; - - public: - PatternInvadersMedium() { - name = (char *)"Invaders Medium"; - } - - void start() { - dma_display->fillScreen(0); - } - - unsigned int drawFrame() { - CRGB color1 = effects.ColorFromCurrentPalette(random(0, 255)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - CRGB color = CRGB::Black; - - if (random(0, 2) == 1) color = color1; - - dma_display->fillRect(x + (i * 2), y + (j * 2), x + (i * 2 + 1), y + (j * 2 + 1), color); - - if (i < 2) - dma_display->fillRect(x + (8 - i * 2), y + (j * 2), x + (9 - i * 2), y + (j * 2 + 1), color); - } - } - - x += 11; - if (x > 22) { - x = 0; - y += 11; - } - - if (y > 22) y = x = 0; - - effects.ShowFrame(); - - return 500; - } -}; - -class PatternInvadersLarge : public Drawable { - private: - - public: - PatternInvadersLarge() { - name = (char *)"Invaders Large"; - } - - void start() { - dma_display->fillScreen(0); - } - - unsigned int drawFrame() { - dma_display->fillScreen(0); - - CRGB color1 = effects.ColorFromCurrentPalette(random(0, 255)); - - for (int x = 0; x < 3; x++) { - for (int y = 0; y < 5; y++) { - CRGB color = CRGB::Black; - - if (random(0, 2) == 1) { - color = color1; - } - - dma_display->fillRect(1 + x * 6, 1 + y * 6, 5 + x * 6, 5 + y * 6, color); - - if (x < 2) - dma_display->fillRect(1 + (4 - x) * 6, 1 + y * 6, 5 + (4 - x) * 6, 5 + y * 6, color); - } - } - - effects.ShowFrame(); - - return 2000; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternLife.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternLife.h deleted file mode 100644 index 7c9ef30..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternLife.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from Andrew: http://pastebin.com/f22bfe94d - * which, in turn, was "Adapted from the Life example on the Processing.org site" - * - * Made much more colorful by J.B. Langston: https://github.com/jblang/aurora/commit/6db5a884e3df5d686445c4f6b669f1668841929b - * - * 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. - */ - -#ifndef PatternLife_H -#define PatternLife_H - -class Cell { -public: - byte alive : 1; - byte prev : 1; - byte hue: 6; - byte brightness; -}; - -class PatternLife : public Drawable { -private: - Cell world[MATRIX_WIDTH][MATRIX_HEIGHT]; - unsigned int density = 50; - int generation = 0; - - void randomFillWorld() { - for (int i = 0; i < MATRIX_WIDTH; i++) { - for (int j = 0; j < MATRIX_HEIGHT; j++) { - if (random(100) < density) { - world[i][j].alive = 1; - world[i][j].brightness = 255; - } - else { - world[i][j].alive = 0; - world[i][j].brightness = 0; - } - world[i][j].prev = world[i][j].alive; - world[i][j].hue = 0; - } - } - } - - int neighbours(int x, int y) { - return (world[(x + 1) % MATRIX_WIDTH][y].prev) + - (world[x][(y + 1) % MATRIX_HEIGHT].prev) + - (world[(x + MATRIX_WIDTH - 1) % MATRIX_WIDTH][y].prev) + - (world[x][(y + MATRIX_HEIGHT - 1) % MATRIX_HEIGHT].prev) + - (world[(x + 1) % MATRIX_WIDTH][(y + 1) % MATRIX_HEIGHT].prev) + - (world[(x + MATRIX_WIDTH - 1) % MATRIX_WIDTH][(y + 1) % MATRIX_HEIGHT].prev) + - (world[(x + MATRIX_WIDTH - 1) % MATRIX_WIDTH][(y + MATRIX_HEIGHT - 1) % MATRIX_HEIGHT].prev) + - (world[(x + 1) % MATRIX_WIDTH][(y + MATRIX_HEIGHT - 1) % MATRIX_HEIGHT].prev); - } - -public: - PatternLife() { - name = (char *)"Life"; - } - - unsigned int drawFrame() { - if (generation == 0) { - effects.ClearFrame(); - - randomFillWorld(); - } - - // Display current generation - for (int i = 0; i < MATRIX_WIDTH; i++) { - for (int j = 0; j < MATRIX_HEIGHT; j++) { - effects.leds[XY(i, j)] = effects.ColorFromCurrentPalette(world[i][j].hue * 4, world[i][j].brightness); - } - } - - // Birth and death cycle - for (int x = 0; x < MATRIX_WIDTH; x++) { - for (int y = 0; y < MATRIX_HEIGHT; y++) { - // Default is for cell to stay the same - if (world[x][y].brightness > 0 && world[x][y].prev == 0) - world[x][y].brightness *= 0.9; - int count = neighbours(x, y); - if (count == 3 && world[x][y].prev == 0) { - // A new cell is born - world[x][y].alive = 1; - world[x][y].hue += 2; - world[x][y].brightness = 255; - } else if ((count < 2 || count > 3) && world[x][y].prev == 1) { - // Cell dies - world[x][y].alive = 0; - } - } - } - - // Copy next generation into place - for (int x = 0; x < MATRIX_WIDTH; x++) { - for (int y = 0; y < MATRIX_HEIGHT; y++) { - world[x][y].prev = world[x][y].alive; - } - } - - - generation++; - if (generation >= 256) - generation = 0; - - effects.ShowFrame(); - - return 60; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternMaze.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternMaze.h deleted file mode 100644 index c469922..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternMaze.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Many thanks to Jamis Buck for the documentation of the Growing Tree maze generation algorithm: http://weblog.jamisbuck.org/2011/1/27/maze-generation-growing-tree-algorithm - * - * 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. - */ - -#ifndef PatternMaze_H -#define PatternMaze_H - -class PatternMaze : public Drawable { -private: - enum Directions { - None = 0, - Up = 1, - Down = 2, - Left = 4, - Right = 8, - }; - - struct Point{ - int x; - int y; - - static Point New(int x, int y) { - Point point; - point.x = x; - point.y = y; - return point; - } - - Point Move(Directions direction) { - switch (direction) - { - case Up: - return New(x, y - 1); - - case Down: - return New(x, y + 1); - - case Left: - return New(x - 1, y); - - case Right: - default: - return New(x + 1, y); - } - } - - static Directions Opposite(Directions direction) { - switch (direction) { - case Up: - return Down; - - case Down: - return Up; - - case Left: - return Right; - - case Right: - default: - return Left; - } - } - }; - -// int width = 16; -// int height = 16; - - static const int width = MATRIX_WIDTH / 2; - static const int height = MATRIX_HEIGHT / 2; - - - Directions grid[width][height]; - - Point point; - - Point cells[256]; - int cellCount = 0; - - int algorithm = 0; - int algorithmCount = 1; - - byte hue = 0; - byte hueOffset = 0; - - Directions directions[4] = { Up, Down, Left, Right }; - - void removeCell(int index) {// shift cells after index down one - for (int i = index; i < cellCount - 1; i++) { - cells[i] = cells[i + 1]; - } - - cellCount--; - } - - void shuffleDirections() { - for (int a = 0; a < 4; a++) - { - int r = random(a, 4); - Directions temp = directions[a]; - directions[a] = directions[r]; - directions[r] = temp; - } - } - - Point createPoint(int x, int y) { - Point point; - point.x = x; - point.y = y; - return point; - } - - CRGB chooseColor(int index) { - byte h = index + hueOffset; - - switch (algorithm) { - case 0: - default: - return effects.ColorFromCurrentPalette(h); - - case 1: - return effects.ColorFromCurrentPalette(hue++); - } - } - - int chooseIndex(int max) { - switch (algorithm) { - case 0: - default: - // choose newest (recursive backtracker) - return max - 1; - - case 1: - // choose random(Prim's) - return random(max); - - // case 2: - // // choose oldest (not good, so disabling) - // return 0; - } - } - - void generateMaze() { - while (cellCount > 1) { - drawNextCell(); - } - } - - void drawNextCell() { - int index = chooseIndex(cellCount); - - if (index < 0) - return; - - point = cells[index]; - - Point imagePoint = createPoint(point.x * 2, point.y * 2); - - //effects.drawBackgroundFastLEDPixelCRGB(imagePoint.x, imagePoint.y, CRGB(CRGB::Gray)); - - shuffleDirections(); - - CRGB color = chooseColor(index); - - for (int i = 0; i < 4; i++) { - Directions direction = directions[i]; - - Point newPoint = point.Move(direction); - if (newPoint.x >= 0 && newPoint.y >= 0 && newPoint.x < width && newPoint.y < height && grid[newPoint.y][newPoint.x] == None) { - grid[point.y][point.x] = (Directions) ((int) grid[point.y][point.x] | (int) direction); - grid[newPoint.y][newPoint.x] = (Directions) ((int) grid[newPoint.y][newPoint.x] | (int) point.Opposite(direction)); - - Point newImagePoint = imagePoint.Move(direction); - - effects.drawBackgroundFastLEDPixelCRGB(newImagePoint.x, newImagePoint.y, color); - - cellCount++; - cells[cellCount - 1] = newPoint; - - index = -1; - break; - } - } - - if (index > -1) { - Point finishedPoint = cells[index]; - imagePoint = createPoint(finishedPoint.x * 2, finishedPoint.y * 2); - effects.drawBackgroundFastLEDPixelCRGB(imagePoint.x, imagePoint.y, color); - - removeCell(index); - } - } - -public: - PatternMaze() { - name = (char *)"Maze"; - } - - unsigned int drawFrame() { - if (cellCount < 1) { - - effects.ClearFrame(); - - // reset the maze grid - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - grid[y][x] = None; - } - } - - int x = random(width); - int y = random(height); - - cells[0] = createPoint(x, y); - - cellCount = 1; - - hue = 0; - hueOffset = random(0, 256); - - } - - drawNextCell(); - - if (cellCount < 1) { - algorithm++; - if (algorithm >= algorithmCount) - algorithm = 0; - - return 0; - } - - effects.ShowFrame(); - - return 0; - } - - void start() { - effects.ClearFrame(); - cellCount = 0; - hue = 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternMunch.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternMunch.h deleted file mode 100644 index f580828..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternMunch.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Munch pattern created by J.B. Langston: https://github.com/jblang/aurora/blob/master/PatternMunch.h - * - * 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. - */ - -#ifndef PatternMunch_H -#define PatternMunch_H - - -class PatternMunch : public Drawable { -private: - byte count = 0; - byte dir = 1; - byte flip = 0; - byte generation = 0; - -public: - PatternMunch() { - name = (char *)"Munch"; - } - - unsigned int drawFrame() { - - for (uint16_t x = 0; x < MATRIX_WIDTH; x++) { - for (uint16_t y = 0; y < MATRIX_HEIGHT; y++) { - effects.leds[XY16(x, y)] = (x ^ y ^ flip) < count ? effects.ColorFromCurrentPalette(((x ^ y) << 2) + generation) : CRGB::Black; - - // The below is more pleasant - // effects.leds[XY(x, y)] = effects.ColorFromCurrentPalette(((x ^ y) << 2) + generation) ; - } - } - - count += dir; - - if (count <= 0 || count >= MATRIX_WIDTH) { - dir = -dir; - } - - if (count <= 0) { - if (flip == 0) - flip = MATRIX_WIDTH-1; - else - flip = 0; - } - - generation++; - - // show it ffs! - effects.ShowFrame(); - return 60; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternNoiseSmearing.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternNoiseSmearing.h deleted file mode 100644 index ab7ed7b..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternNoiseSmearing.h +++ /dev/null @@ -1,338 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* Portions of this code are adapted from "Noise Smearing" by Stefan Petrick: https://gist.githubusercontent.com/embedded-creations/5cd47d83cb0e04f4574d/raw/ebf6a82b4755d55cfba3bf6598f7b19047f89daf/NoiseSmearing.ino -* Copyright (c) 2014 Stefan Petrick -* http://www.stefan-petrick.de/wordpress_beta -* -* 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. -*/ - -#ifndef PatternNoiseSmearing_H -#define PatternNoiseSmearing_H - -byte patternNoiseSmearingHue = 0; - -class PatternMultipleStream : public Drawable { -public: - PatternMultipleStream() { - name = (char *)"MultipleStream"; - } - - // this pattern draws two points to the screen based on sin/cos if a counter - // (comment out NoiseSmearWithRadius to see pattern of pixels) - // these pixels are smeared by a large radius, giving a lot of movement - // the image is dimmed before each drawing to not saturate the screen with color - // the smear has an offset so the pixels usually have a trail leading toward the upper left - unsigned int drawFrame() { - static unsigned long counter = 0; -#if 0 - // this counter lets put delays between each frame and still get the same animation - counter++; -#else - // this counter updates in real time and can't be slowed down for debugging - counter = millis() / 10; -#endif - - byte x1 = 4 + sin8(counter * 2) / 10; - byte x2 = 8 + sin8(counter * 2) / 16; - byte y2 = 8 + cos8((counter * 2) / 3) / 16; - - effects.leds[XY(x1, x2)] = effects.ColorFromCurrentPalette(patternNoiseSmearingHue); - effects.leds[XY(x2, y2)] = effects.ColorFromCurrentPalette(patternNoiseSmearingHue + 128); - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(8); - effects.MoveFractionalNoiseX(); - - effects.MoveY(8); - effects.MoveFractionalNoiseY(); - - patternNoiseSmearingHue++; - - return 0; - } -}; - -class PatternMultipleStream2 : public Drawable { -public: - PatternMultipleStream2() { - name = (char *)"MultipleStream2"; - } - - unsigned int drawFrame() { - effects.DimAll(230); effects.ShowFrame(); - - byte xx = 4 + sin8(millis() / 9) / 10; - byte yy = 4 + cos8(millis() / 10) / 10; - effects.leds[XY(xx, yy)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue); - - xx = 8 + sin8(millis() / 10) / 16; - yy = 8 + cos8(millis() / 7) / 16; - effects.leds[XY(xx, yy)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue + 80); - - effects.leds[XY(15, 15)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue + 160); - - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - - patternNoiseSmearingHue++; - - return 0; - } -}; - -class PatternMultipleStream3 : public Drawable { -public: - PatternMultipleStream3() { - name = (char *)"MultipleStream3"; - } - - unsigned int drawFrame() { - //CLS(); - effects.DimAll(235); effects.ShowFrame(); - - for (uint8_t i = 3; i < 32; i = i + 4) { - effects.leds[XY(i, 15)] += effects.ColorFromCurrentPalette(i * 8); - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - - effects.ShowFrame(); - - return 1; - } -}; - -class PatternMultipleStream4 : public Drawable { -public: - PatternMultipleStream4() { - name = (char *)"MultipleStream4"; - } - - unsigned int drawFrame() { - - //CLS(); - effects.DimAll(235); effects.ShowFrame(); - - effects.leds[XY(15, 15)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue); - - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(8); - effects.MoveFractionalNoiseX(); - - effects.MoveY(8); - effects.MoveFractionalNoiseY(); - - patternNoiseSmearingHue++; - - return 0; - } -}; - -class PatternMultipleStream5 : public Drawable { -public: - PatternMultipleStream5() { - name = (char *)"MultipleStream5"; - } - - unsigned int drawFrame() { - - //CLS(); - effects.DimAll(235); effects.ShowFrame(); - - - for (uint8_t i = 3; i < 32; i = i + 4) { - effects.leds[XY(i, 31)] += effects.ColorFromCurrentPalette(i * 8); - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(4); - effects.MoveFractionalNoiseX(4); - - return 0; - } -}; - -class PatternMultipleStream8 : public Drawable { -public: - PatternMultipleStream8() { - name = (char *)"MultipleStream8"; - } - - unsigned int drawFrame() { - effects.DimAll(230); effects.ShowFrame(); - - // draw grid of rainbow dots on top of the dimmed image - for (uint8_t y = 1; y < 32; y = y + 6) { - for (uint8_t x = 1; x < 32; x = x + 6) { - - effects.leds[XY(x, y)] += effects.ColorFromCurrentPalette((x * y) / 4); - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseX(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseY(4); - - return 0; - } -}; - -class PatternPaletteSmear : public Drawable { -public: - PatternPaletteSmear() { - name = (char *)"PaletteSmear"; - } - - unsigned int drawFrame() { - - effects.DimAll(170); effects.ShowFrame(); - - // draw a rainbow color palette - for (uint8_t y = 0; y < MATRIX_HEIGHT; y++) { - for (uint8_t x = 0; x < MATRIX_WIDTH; x++) { - effects.leds[XY(x, y)] += effects.ColorFromCurrentPalette(x * 8, y * 8 + 7); - } - } - - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - - effects.FillNoise(); - - effects.MoveX(3); - //effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - effects.ShowFrame(); - - return 0; - } -}; - -class PatternRainbowFlag : public Drawable { -public: - PatternRainbowFlag() { - name = (char *)"RainbowFlag"; - } - - unsigned int drawFrame() { - effects.DimAll(10); effects.ShowFrame(); - - CRGB rainbow[7] = { - CRGB::Red, - CRGB::Orange, - CRGB::Yellow, - CRGB::Green, - CRGB::Blue, - CRGB::Violet - }; - - uint8_t y = 2; - - for (uint8_t c = 0; c < 6; c++) { - for (uint8_t j = 0; j < 5; j++) { - for (uint8_t x = 0; x < MATRIX_WIDTH; x++) { - effects.leds[XY(x, y)] += rainbow[c]; - } - - y++; - if (y >= MATRIX_HEIGHT) - break; - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - - return 0; - } -}; -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPendulumWave.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPendulumWave.h deleted file mode 100644 index 08fd5b7..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPendulumWave.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* -* Inspired by and based on a loading animation for Prismata by Lunarch Studios: -* http://www.reddit.com/r/gifs/comments/2on8si/connecting_to_server_so_mesmerizing/cmow0sz -* -* Lunarch Studios Inc. hereby publishes the Actionscript 3 source code pasted in this -* comment under the Creative Commons CC0 1.0 Universal Public Domain Dedication. -* Lunarch Studios Inc. waives all rights to the work worldwide under copyright law, -* including all related and neighboring rights, to the extent allowed by law. -* You can copy, modify, distribute and perform the work, even for commercial purposes, -* all without asking permission. -* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternPendulumWave_H -#define PatternPendulumWave_H - -#define WAVE_BPM 25 -#define AMP_BPM 2 -#define SKEW_BPM 4 -#define WAVE_TIMEMINSKEW MATRIX_WIDTH/8 -#define WAVE_TIMEMAXSKEW MATRIX_WIDTH/2 - -class PatternPendulumWave : public Drawable { - public: - PatternPendulumWave() { - name = (char *)"Pendulum Wave"; - } - - unsigned int drawFrame() { - effects.ClearFrame(); - - for (int x = 0; x < MATRIX_WIDTH; ++x) - { - uint16_t amp = beatsin16(AMP_BPM, MATRIX_HEIGHT/8, MATRIX_HEIGHT-1); - uint16_t offset = (MATRIX_HEIGHT - beatsin16(AMP_BPM, 0, MATRIX_HEIGHT))/2; - - uint8_t y = beatsin16(WAVE_BPM, 0, amp, x*beatsin16(SKEW_BPM, WAVE_TIMEMINSKEW, WAVE_TIMEMAXSKEW)) + offset; - - effects.drawBackgroundFastLEDPixelCRGB(x, y, effects.ColorFromCurrentPalette(x * 7)); - } - effects.ShowFrame(); - return 20; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPlasma.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPlasma.h deleted file mode 100644 index 99500b1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPlasma.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from LedEffects Plasma by Robert Atkins: https://bitbucket.org/ratkins/ledeffects/src/26ed3c51912af6fac5f1304629c7b4ab7ac8ca4b/Plasma.cpp?at=default - * Copyright (c) 2013 Robert Atkins - * - * 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. - */ - -#ifndef PatternPlasma_H -#define PatternPlasma_H - -class PatternPlasma : public Drawable { -private: - int time = 0; - int cycles = 0; - -public: - PatternPlasma() { - name = (char *)"Plasma"; - } - - unsigned int drawFrame() { - for (int x = 0; x < MATRIX_WIDTH; x++) { - for (int y = 0; y < MATRIX_HEIGHT; y++) { - int16_t v = 0; - uint8_t wibble = sin8(time); - v += sin16(x * wibble * 2 + time); - v += cos16(y * (128 - wibble) * 2 + time); - v += sin16(y * x * cos8(-time) / 2); - - effects.Pixel(x, y, (v >> 8) + 127); - } - } - - time += 1; - cycles++; - - if (cycles >= 2048) { - time = 0; - cycles = 0; - } - - effects.ShowFrame(); - - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPulse.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPulse.h deleted file mode 100644 index 4d4ba69..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternPulse.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Based at least in part on someone else's work that I can no longer find. - * Please let me know if you recognize any of this code! - * - * 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. - */ - -#ifndef PatternPulse_H -#define PatternPulse_H - -class PatternPulse : public Drawable { - private: - int hue; - int centerX = 0; - int centerY = 0; - int step = -1; - int maxSteps = 16; - float fadeRate = 0.8; - int diff; - - public: - PatternPulse() { - name = (char *)"Pulse"; - } - - unsigned int drawFrame() { - effects.DimAll(235); - - if (step == -1) { - centerX = random(32); - centerY = random(32); - hue = random(256); // 170; - step = 0; - } - - if (step == 0) { - dma_display->drawCircle(centerX, centerY, step, effects.ColorFromCurrentPalette(hue)); - step++; - } - else { - if (step < maxSteps) { - // initial pulse - dma_display->drawCircle(centerX, centerY, step, effects.ColorFromCurrentPalette(hue, pow(fadeRate, step - 2) * 255)); - - // secondary pulse - if (step > 3) { - dma_display->drawCircle(centerX, centerY, step - 3, effects.ColorFromCurrentPalette(hue, pow(fadeRate, step - 2) * 255)); - } - step++; - } - else { - step = -1; - } - } - - effects.standardNoiseSmearing(); - - effects.ShowFrame(); - - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternRadar.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternRadar.h deleted file mode 100644 index 1dc4484..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternRadar.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternRadar_H - -class PatternRadar : public Drawable { - private: - byte theta = 0; - byte hueoffset = 0; - - public: - PatternRadar() { - name = (char *)"Radar"; - } - - unsigned int drawFrame() { - effects.DimAll(254); effects.ShowFrame(); - - for (int offset = 0; offset < MATRIX_CENTER_X; offset++) { - byte hue = 255 - (offset * 16 + hueoffset); - CRGB color = effects.ColorFromCurrentPalette(hue); - uint8_t x = mapcos8(theta, offset, (MATRIX_WIDTH - 1) - offset); - uint8_t y = mapsin8(theta, offset, (MATRIX_HEIGHT - 1) - offset); - uint16_t xy = XY(x, y); - effects.leds[xy] = color; - - EVERY_N_MILLIS(25) { - theta += 2; - hueoffset += 1; - } - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSimplexNoise.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSimplexNoise.h deleted file mode 100644 index 0c47bff..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSimplexNoise.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from FastLED Fire2012 example by Mark Kriegsman: https://github.com/FastLED/FastLED/blob/master/examples/Noise/Noise.ino - * Copyright (c) 2013 FastLED - * - * 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. - */ - -#ifndef PatternSimplexNoise_H -#define PatternSimplexNoise_H - -class PatternSimplexNoise : public Drawable { - public: - PatternSimplexNoise() { - name = (char *)"Noise"; - } - - void start() { - // Initialize our coordinates to some random values - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - } - - unsigned int drawFrame() { -#if FASTLED_VERSION >= 3001000 - // a new parameter set every 15 seconds - EVERY_N_SECONDS(15) { - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - } -#endif - - uint32_t speed = 100; - - effects.FillNoise(); - ShowNoiseLayer(0, 1, 0); - - // noise_x += speed; - noise_y += speed; - noise_z += speed; - - effects.ShowFrame(); - - return 30; - } - - // show just one layer - void ShowNoiseLayer(byte layer, byte colorrepeat, byte colorshift) { - for (uint16_t i = 0; i < MATRIX_WIDTH; i++) { - for (uint16_t j = 0; j < MATRIX_HEIGHT; j++) { - uint8_t pixel = noise[i][j]; - - // assign a color depending on the actual palette - effects.leds[XY16(i, j)] = effects.ColorFromCurrentPalette(colorrepeat * (pixel + colorshift), pixel); - } - } - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSnake.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSnake.h deleted file mode 100644 index e25756f..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSnake.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from LedEffects Snake by Robert Atkins: https://bitbucket.org/ratkins/ledeffects/src/26ed3c51912af6fac5f1304629c7b4ab7ac8ca4b/Snake.cpp?at=default - * Copyright (c) 2013 Robert Atkins - * - * 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. - */ - -#ifndef PatternSnake_H -#define PatternSnake_H - -class PatternSnake : public Drawable { -private: - static const byte SNAKE_LENGTH = 16; - - CRGB colors[SNAKE_LENGTH]; - uint8_t initialHue; - - enum Direction { - UP, DOWN, LEFT, RIGHT - }; - - struct Pixel { - uint8_t x; - uint8_t y; - }; - - struct Snake { - Pixel pixels[SNAKE_LENGTH]; - - Direction direction; - - void newDirection() { - switch (direction) { - case UP: - case DOWN: - direction = random(0, 2) == 1 ? RIGHT : LEFT; - break; - - case LEFT: - case RIGHT: - direction = random(0, 2) == 1 ? DOWN : UP; - - default: - break; - } - } - - void shuffleDown() { - for (byte i = SNAKE_LENGTH - 1; i > 0; i--) { - pixels[i] = pixels[i - 1]; - } - } - - void reset() { - direction = UP; - for (int i = 0; i < SNAKE_LENGTH; i++) { - pixels[i].x = 0; - pixels[i].y = 0; - } - } - - void move() { - switch (direction) { - case UP: - pixels[0].y = (pixels[0].y + 1) % MATRIX_HEIGHT; - break; - case LEFT: - pixels[0].x = (pixels[0].x + 1) % MATRIX_WIDTH; - break; - case DOWN: - pixels[0].y = pixels[0].y == 0 ? MATRIX_HEIGHT - 1 : pixels[0].y - 1; - break; - case RIGHT: - pixels[0].x = pixels[0].x == 0 ? MATRIX_WIDTH - 1 : pixels[0].x - 1; - break; - } - } - - void draw(CRGB colors[SNAKE_LENGTH]) { - for (byte i = 0; i < SNAKE_LENGTH; i++) { - effects.leds[XY(pixels[i].x, pixels[i].y)] = colors[i] %= (255 - i * (255 / SNAKE_LENGTH)); - } - } - }; - - static const int snakeCount = 6; - Snake snakes[snakeCount]; - -public: - PatternSnake() { - name = (char *)"Snake"; - for (int i = 0; i < snakeCount; i++) { - Snake* snake = &snakes[i]; - snake->reset(); - } - } - - void start() - { - effects.ClearFrame(); - } - - unsigned int drawFrame() { - - - fill_palette(colors, SNAKE_LENGTH, initialHue++, 5, effects.currentPalette, 255, LINEARBLEND); - - for (int i = 0; i < snakeCount; i++) { - Snake* snake = &snakes[i]; - - snake->shuffleDown(); - - if (random(10) > 7) { - snake->newDirection(); - } - - snake->move(); - snake->draw(colors); - } - - effects.ShowFrame(); - - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpark.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpark.h deleted file mode 100644 index 74f3b16..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpark.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from FastLED Fire2012 example by Mark Kriegsman: https://github.com/FastLED/FastLED/tree/master/examples/Fire2012WithPalette - * Copyright (c) 2013 FastLED - * - * 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. - */ - -#ifndef PatternSpark_H -#define PatternSpark_H - -class PatternSpark : public Drawable { - private: - - public: - PatternSpark() { - name = (char *)"Spark"; - } - - // There are two main parameters you can play with to control the look and - // feel of your fire: COOLING (used in step 1 above), and SPARKING (used - // in step 3 above). - // - // COOLING: How much does the air cool as it rises? - // Less cooling = taller flames. More cooling = shorter flames. - // Default 55, suggested range 20-100 - uint8_t cooling = 100; - - // SPARKING: What chance (out of 255) is there that a new spark will be lit? - // Higher chance = more roaring fire. Lower chance = more flickery fire. - // Default 120, suggested range 50-200. - uint8_t sparking = 50; - - unsigned int drawFrame() { - // Add entropy to random number generator; we use a lot of it. - random16_add_entropy( random16()); - - effects.DimAll(235); effects.ShowFrame(); - - for (uint8_t x = 0; x < MATRIX_WIDTH; x++) { - // Step 1. Cool down every cell a little - for (int y = 0; y < MATRIX_HEIGHT; y++) { - int xy = XY(x, y); - heat[xy] = qsub8(heat[xy], random8(0, ((cooling * 10) / MATRIX_HEIGHT) + 2)); - } - - // Step 2. Heat from each cell drifts 'up' and diffuses a little - for (int y = 0; y < MATRIX_HEIGHT; y++) { - heat[XY(x, y)] = (heat[XY(x, y + 1)] + heat[XY(x, y + 2)] + heat[XY(x, y + 2)]) / 3; - } - - // Step 2. Randomly ignite new 'sparks' of heat - if (random8() < sparking) { - uint8_t xt = random8(MATRIX_CENTRE_X - 2, MATRIX_CENTER_X + 3); - - int xy = XY(xt, MATRIX_HEIGHT - 1); - heat[xy] = qadd8(heat[xy], random8(160, 255)); - } - - // Step 4. Map from heat cells to LED colors - for (int y = 0; y < MATRIX_HEIGHT; y++) { - int xy = XY(x, y); - byte colorIndex = heat[xy]; - - // Recommend that you use values 0-240 rather than - // the usual 0-255, as the last 15 colors will be - // 'wrapping around' from the hot end to the cold end, - // which looks wrong. - colorIndex = scale8(colorIndex, 240); - - // override color 0 to ensure a black background? - if (colorIndex != 0) - // effects.leds[xy] = CRGB::Black; - // else - effects.leds[xy] = effects.ColorFromCurrentPalette(colorIndex); - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseX(4); - - effects.ShowFrame(); - - return 15; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpin.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpin.h deleted file mode 100644 index c3497e7..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpin.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternSpin_H - - - -class PatternSpin : public Drawable { -public: - PatternSpin() { - name = (char *)"Spin"; - } - - float degrees = 0; - float radius = 16; - - float speedStart = 1; - float velocityStart = 0.6; - - float maxSpeed = 30; - - float speed = speedStart; - float velocity = velocityStart; - - void start() { - speed = speedStart; - velocity = velocityStart; - degrees = 0; - } - - unsigned int drawFrame() { - effects.DimAll(190); effects.ShowFrame(); - - CRGB color = effects.ColorFromCurrentPalette(speed * 8); - - // start position - int x; - int y; - - // target position - float targetDegrees = degrees + speed; - float targetRadians = radians(targetDegrees); - int targetX = (int) (MATRIX_CENTER_X + radius * cos(targetRadians)); - int targetY = (int) (MATRIX_CENTER_Y - radius * sin(targetRadians)); - - float tempDegrees = degrees; - - do{ - float radians = radians(tempDegrees); - x = (int) (MATRIX_CENTER_X + radius * cos(radians)); - y = (int) (MATRIX_CENTER_Y - radius * sin(radians)); - - effects.drawBackgroundFastLEDPixelCRGB(x, y, color); - effects.drawBackgroundFastLEDPixelCRGB(y, x, color); - - tempDegrees += 1; - if (tempDegrees >= 360) - tempDegrees = 0; - } while (x != targetX || y != targetY); - - degrees += speed; - - // add velocity to the particle each pass around the accelerator - if (degrees >= 360) { - degrees = 0; - speed += velocity; - if (speed <= speedStart) { - speed = speedStart; - velocity *= -1; - } - else if (speed > maxSpeed){ - speed = maxSpeed - velocity; - velocity *= -1; - } - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpiral.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpiral.h deleted file mode 100644 index b8e6f07..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpiral.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Portions of this code are adapted from "Funky Clouds" by Stefan Petrick: - * https://gist.github.com/anonymous/876f908333cd95315c35 - * - * Copyright (c) 2014 Stefan Petrick - * http://www.stefan-petrick.de/wordpress_beta - * - * 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. - */ - -#ifndef PatternSpiral_H -#define PatternSpiral_H - -class PatternSpiral : public Drawable { -private: - // Timer stuff (Oscillators) - struct timer { - unsigned long takt; - unsigned long lastMillis; - unsigned long count; - int delta; - byte up; - byte down; - }; - timer multiTimer[5]; - - int timers = sizeof(multiTimer) / sizeof(multiTimer[0]); - - // counts all variables with different speeds linear up and down - void UpdateTimers() - { - unsigned long now = millis(); - for (int i = 0; i < timers; i++) - { - while (now - multiTimer[i].lastMillis >= multiTimer[i].takt) - { - multiTimer[i].lastMillis += multiTimer[i].takt; - multiTimer[i].count = multiTimer[i].count + multiTimer[i].delta; - if ((multiTimer[i].count == multiTimer[i].up) || (multiTimer[i].count == multiTimer[i].down)) - { - multiTimer[i].delta = -multiTimer[i].delta; - } - } - } - } - -public: - PatternSpiral() { - name = (char *)"Spiral"; - } - - void start() { - // set all counting directions positive for the beginning - for (int i = 0; i < timers; i++) multiTimer[i].delta = 1; - - // set range (up/down), speed (takt=ms between steps) and starting point of all oscillators - - unsigned long now = millis(); - - multiTimer[0].lastMillis = now; - multiTimer[0].takt = 42; //x1 - multiTimer[0].up = MATRIX_WIDTH - 1; - multiTimer[0].down = 0; - multiTimer[0].count = 0; - - multiTimer[1].lastMillis = now; - multiTimer[1].takt = 55; //y1 - multiTimer[1].up = MATRIX_HEIGHT - 1; - multiTimer[1].down = 0; - multiTimer[1].count = 0; - - multiTimer[2].lastMillis = now; - multiTimer[2].takt = 3; //color - multiTimer[2].up = 255; - multiTimer[2].down = 0; - multiTimer[2].count = 0; - - multiTimer[3].lastMillis = now; - multiTimer[3].takt = 71; //x2 - multiTimer[3].up = MATRIX_WIDTH - 1; - multiTimer[3].down = 0; - multiTimer[3].count = 0; - - multiTimer[4].lastMillis = now; - multiTimer[4].takt = 89; //y2 - multiTimer[4].up = MATRIX_HEIGHT - 1; - multiTimer[4].down = 0; - multiTimer[4].count = 0; - } - - unsigned int drawFrame() { - // manage the Oscillators - UpdateTimers(); - - // draw just a line defined by 5 oscillators - effects.BresenhamLine( - multiTimer[3].count, // x1 - multiTimer[4].count, // y1 - multiTimer[0].count, // x2 - multiTimer[1].count, // y2 - multiTimer[2].count); // color - - // manipulate the screen buffer - // with fixed parameters (could be oscillators too) - // Params: center x, y, radius, scale color down - // --> NOTE: Affects always a SQUARE with an odd length - // effects.SpiralStream(15, 15, 10, 128); - - effects.SpiralStream(31, 15, 64, 128); // for 64 pixel wide matrix! - // effects.SpiralStream(47, 15, 10, 128); // for 64 pixel wide matrix! - - // why not several times?! - // effects.SpiralStream(16, 6, 6, 128); - // effects.SpiralStream(10, 24, 10, 128); - - // increase the contrast - effects.DimAll(250); effects.ShowFrame(); - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpiro.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpiro.h deleted file mode 100644 index c41a3c6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSpiro.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternSpiro_H - -class PatternSpiro : public Drawable { - private: - byte theta1 = 0; - byte theta2 = 0; - byte hueoffset = 0; - - uint8_t radiusx = MATRIX_WIDTH / 4; - uint8_t radiusy = MATRIX_HEIGHT / 4; - uint8_t minx = MATRIX_CENTER_X - radiusx; - uint8_t maxx = MATRIX_CENTER_X + radiusx + 1; - uint8_t miny = MATRIX_CENTER_Y - radiusy; - uint8_t maxy = MATRIX_CENTER_Y + radiusy + 1; - - uint8_t spirocount = 1; - uint8_t spirooffset = 256 / spirocount; - boolean spiroincrement = true; - - boolean handledChange = false; - - public: - PatternSpiro() { - name = (char *)"Spiro"; - } - - void start(){ - effects.ClearFrame(); - }; - - unsigned int drawFrame() { - blur2d(effects.leds, MATRIX_WIDTH > 255 ? 255 : MATRIX_WIDTH, MATRIX_HEIGHT > 255 ? 255 : MATRIX_HEIGHT, 192); - - boolean change = false; - - for (int i = 0; i < spirocount; i++) { - uint8_t x = mapsin8(theta1 + i * spirooffset, minx, maxx); - uint8_t y = mapcos8(theta1 + i * spirooffset, miny, maxy); - - uint8_t x2 = mapsin8(theta2 + i * spirooffset, x - radiusx, x + radiusx); - uint8_t y2 = mapcos8(theta2 + i * spirooffset, y - radiusy, y + radiusy); - - CRGB color = effects.ColorFromCurrentPalette(hueoffset + i * spirooffset, 128); - effects.leds[XY(x2, y2)] += color; - - if((x2 == MATRIX_CENTER_X && y2 == MATRIX_CENTER_Y) || - (x2 == MATRIX_CENTRE_X && y2 == MATRIX_CENTRE_Y)) change = true; - } - - theta2 += 1; - - EVERY_N_MILLIS(25) { - theta1 += 1; - } - - EVERY_N_MILLIS(100) { - if (change && !handledChange) { - handledChange = true; - - if (spirocount >= MATRIX_WIDTH || spirocount == 1) spiroincrement = !spiroincrement; - - if (spiroincrement) { - if(spirocount >= 4) - spirocount *= 2; - else - spirocount += 1; - } - else { - if(spirocount > 4) - spirocount /= 2; - else - spirocount -= 1; - } - - spirooffset = 256 / spirocount; - } - - if(!change) handledChange = false; - } - - EVERY_N_MILLIS(33) { - hueoffset += 1; - } - - effects.ShowFrame(); - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSwirl.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSwirl.h deleted file mode 100644 index a81ed61..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternSwirl.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* Portions of this code are adapted from SmartMatrixSwirl by Mark Kriegsman: https://gist.github.com/kriegsman/5adca44e14ad025e6d3b -* https://www.youtube.com/watch?v=bsGBT-50cts -* Copyright (c) 2014 Mark Kriegsman -* -* 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. -*/ - -#ifndef PatternSwirl_H - -class PatternSwirl : public Drawable { - private: - const uint8_t borderWidth = 2; - - public: - PatternSwirl() { - name = (char *)"Swirl"; - } - - void start() { - effects.ClearFrame(); - } - - unsigned int drawFrame() { - // Apply some blurring to whatever's already on the matrix - // Note that we never actually clear the matrix, we just constantly - // blur it repeatedly. Since the blurring is 'lossy', there's - // an automatic trend toward black -- by design. - uint8_t blurAmount = beatsin8(2, 10, 255); - -#if FASTLED_VERSION >= 3001000 - blur2d(effects.leds, MATRIX_WIDTH > 255 ? 255 : MATRIX_WIDTH, MATRIX_HEIGHT > 255 ? 255 : MATRIX_HEIGHT, blurAmount); -#else - effects.DimAll(blurAmount); -#endif - - // Use two out-of-sync sine waves - uint8_t i = beatsin8(256/MATRIX_HEIGHT, borderWidth, MATRIX_WIDTH - borderWidth); - uint8_t j = beatsin8(2048/MATRIX_WIDTH, borderWidth, MATRIX_HEIGHT - borderWidth); - - // Also calculate some reflections - uint8_t ni = (MATRIX_WIDTH - 1) - i; - uint8_t nj = (MATRIX_HEIGHT - 1) - j; - - // The color of each point shifts over time, each at a different speed. - uint16_t ms = millis(); - effects.leds[XY(i, j)] += effects.ColorFromCurrentPalette(ms / 11); - //effects.leds[XY(j, i)] += effects.ColorFromCurrentPalette(ms / 13); // this doesn't work for non-square matrices - effects.leds[XY(ni, nj)] += effects.ColorFromCurrentPalette(ms / 17); - //effects.leds[XY(nj, ni)] += effects.ColorFromCurrentPalette(ms / 29); // this doesn't work for non-square matrices - effects.leds[XY(i, nj)] += effects.ColorFromCurrentPalette(ms / 37); - effects.leds[XY(ni, j)] += effects.ColorFromCurrentPalette(ms / 41); - - - effects.ShowFrame(); - return 0; - - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternTest.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternTest.h deleted file mode 100644 index 61e870a..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternTest.h +++ /dev/null @@ -1,20 +0,0 @@ - -#ifndef PatternTest_H -#define PatternTest_H - -class PatternTest : public Drawable { - private: - - public: - PatternTest() { - name = (char *)"Test Pattern"; - } - - unsigned int drawFrame() { - - dma_display->fillScreen(dma_display->color565(128, 0, 0)); - return 1000; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternWave.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternWave.h deleted file mode 100644 index 8246a5f..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/PatternWave.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternWave_H -#define PatternWave_H - -class PatternWave : public Drawable { -private: - byte thetaUpdate = 0; - byte thetaUpdateFrequency = 0; - byte theta = 0; - - byte hueUpdate = 0; - byte hueUpdateFrequency = 0; - byte hue = 0; - - byte rotation = 0; - - uint8_t scale = 256 / MATRIX_WIDTH; - - uint8_t maxX = MATRIX_WIDTH - 1; - uint8_t maxY = MATRIX_HEIGHT - 1; - - uint8_t waveCount = 1; - -public: - PatternWave() { - name = (char *)"Wave"; - } - - void start() { - rotation = random(0, 4); - waveCount = random(1, 3); - - } - - unsigned int drawFrame() { - int n = 0; - - switch (rotation) { - case 0: - for (int x = 0; x < MATRIX_WIDTH; x++) { - n = quadwave8(x * 2 + theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(x, n, effects.ColorFromCurrentPalette(x + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(x, maxY - n, effects.ColorFromCurrentPalette(x + hue)); - } - break; - - case 1: - for (int y = 0; y < MATRIX_HEIGHT; y++) { - n = quadwave8(y * 2 + theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(n, y, effects.ColorFromCurrentPalette(y + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(maxX - n, y, effects.ColorFromCurrentPalette(y + hue)); - } - break; - - case 2: - for (int x = 0; x < MATRIX_WIDTH; x++) { - n = quadwave8(x * 2 - theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(x, n, effects.ColorFromCurrentPalette(x + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(x, maxY - n, effects.ColorFromCurrentPalette(x + hue)); - } - break; - - case 3: - for (int y = 0; y < MATRIX_HEIGHT; y++) { - n = quadwave8(y * 2 - theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(n, y, effects.ColorFromCurrentPalette(y + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(maxX - n, y, effects.ColorFromCurrentPalette(y + hue)); - } - break; - } - - effects.DimAll(254); - effects.ShowFrame(); - - if (thetaUpdate >= thetaUpdateFrequency) { - thetaUpdate = 0; - theta++; - } - else { - thetaUpdate++; - } - - if (hueUpdate >= hueUpdateFrequency) { - hueUpdate = 0; - hue++; - } - else { - hueUpdate++; - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Patterns.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Patterns.h deleted file mode 100644 index 100a545..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Patterns.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Patterns_H -#define Patterns_H - -#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0])) - -#include "Vector.h" -#include "Boid.h" -#include "Attractor.h" - -/* - * Note from mrfaptastic: - * - * Commented out patterns are due to the fact they either didn't work properly with a non-square display, - * or from my personal opinion, are crap. - */ - -#include "PatternTest.h" -//#include "PatternNoiseSmearing.h" // Doesn't seem to work, omitting. -#include "PatternSpiro.h" -#include "PatternRadar.h" -#include "PatternSwirl.h" -#include "PatternPendulumWave.h" -#include "PatternFlowField.h" -#include "PatternIncrementalDrift.h" -//#include "PatternIncrementalDrift2.h" // Doesn't seem to work, omitting. -#include "PatternMunch.h" -#include "PatternElectricMandala.h" -//#include "PatternSpin.h" // Doesn't seem to work, omitting. -#include "PatternSimplexNoise.h" -#include "PatternWave.h" -#include "PatternAttract.h" -//#include "PatternBounce.h" // Doesn't seem to work, omitting. -#include "PatternFlock.h" -#include "PatternInfinity.h" -#include "PatternPlasma.h" -#include "PatternSnake.h" -#include "PatternInvaders.h" -//#include "PatternCube.h" // Doesn't seem to work, omitting. -//#include "PatternFire.h" // Doesn't seem to work, omitting. -#include "PatternLife.h" -#include "PatternMaze.h" -//#include "PatternPulse.h" // Doesn't seem to work, omitting. -//#include "PatternSpark.h" // Doesn't seem to work, omitting. -#include "PatternSpiral.h" - -class Patterns : public Playlist { - private: - PatternTest patternTest; - // PatternRainbowFlag rainbowFlag; // doesn't work - // PatternPaletteSmear paletteSmear; - // PatternMultipleStream multipleStream; // doesn't work - // PatternMultipleStream2 multipleStream2; // doesn't work - // PatternMultipleStream3 multipleStream3; // doesn't work - // PatternMultipleStream4 multipleStream4; // doesn't work - // PatternMultipleStream5 multipleStream5; // doesn't work - // PatternMultipleStream8 multipleStream8; // doesn't work - PatternSpiro spiro; - // PatternRadar radar; - PatternSwirl swirl; - PatternPendulumWave pendulumWave; - PatternFlowField flowField; - PatternIncrementalDrift incrementalDrift; - // PatternIncrementalDrift2 incrementalDrift2; - PatternMunch munch; - PatternElectricMandala electricMandala; - // PatternSpin spin; - PatternSimplexNoise simplexNoise; - PatternWave wave; - PatternAttract attract; - // PatternBounce bounce; - PatternFlock flock; - PatternInfinity infinity; - PatternPlasma plasma; - PatternInvadersSmall invadersSmall; - // PatternInvadersMedium invadersMedium; - // PatternInvadersLarge invadersLarge; - PatternSnake snake; - // PatternCube cube; - // PatternFire fire; - PatternLife life; - PatternMaze maze; - // PatternPulse pulse; - // PatternSpark spark; - PatternSpiral spiral; - - int currentIndex = 0; - Drawable* currentItem; - - int getCurrentIndex() { - return currentIndex; - } - - //const static int PATTERN_COUNT = 37; - - const static int PATTERN_COUNT = 17; - - Drawable* shuffledItems[PATTERN_COUNT]; - - Drawable* items[PATTERN_COUNT] = { - // &patternTest, // ok - &spiro, // cool - // &paletteSmear, // fail - // &multipleStream, // fail - // &multipleStream8,// fail - // &multipleStream5,// fail - // &multipleStream3,// fail - // &radar, // fail - // &multipleStream4, // fail - // &multipleStream2, // fail - &life, // ok - &flowField, - &pendulumWave, //11 ok - - &incrementalDrift, //12 ok - // &incrementalDrift2, // 13 fail - &munch, // 14 ok - &electricMandala, // 15 ok - // &spin, // 16 ok but repetitive - &simplexNoise, // 17 - cool! - // &wave, // 18 ok (can't work with 256+ matrix due to uint8_t vars) - // &rainbowFlag, //20 // fail - &attract, // 21 ok - &swirl, // 22 - // &bounce, // bouncing line crap - &flock, // works - &infinity, // works - &plasma, // works - &invadersSmall, // works ish - // &invadersMedium, // fail - // &invadersLarge, // fail - &snake, // ok - // &cube, // works ish - // &fire, // ok ish - &maze, // ok - // &pulse,// fail - // &spark, // same as fire - &spiral, // ok - }; - - public: - Patterns() { - // add the items to the shuffledItems array - for (int a = 0; a < PATTERN_COUNT; a++) { - shuffledItems[a] = items[a]; - } - - shuffleItems(); - - this->currentItem = items[0]; - this->currentItem->start(); - } - - char* Drawable::name = (char *)"Patterns"; - - void stop() { - if (currentItem) - currentItem->stop(); - } - - void start() { - if (currentItem) - currentItem->start(); - } - - void move(int step) { - currentIndex += step; - - if (currentIndex >= PATTERN_COUNT) currentIndex = 0; - else if (currentIndex < 0) currentIndex = PATTERN_COUNT - 1; - - if (effects.paletteIndex == effects.RandomPaletteIndex) - effects.RandomPalette(); - - moveTo(currentIndex); - - //if (!isTimeAvailable && currentItem == &analogClock) - // move(step); - } - - void moveRandom(int step) { - currentIndex += step; - - if (currentIndex >= PATTERN_COUNT) currentIndex = 0; - else if (currentIndex < 0) currentIndex = PATTERN_COUNT - 1; - - if (effects.paletteIndex == effects.RandomPaletteIndex) - effects.RandomPalette(); - - if (currentItem) - currentItem->stop(); - - currentItem = shuffledItems[currentIndex]; - - if (currentItem) - currentItem->start(); - - // if (!isTimeAvailable && currentItem == &analogClock) - // moveRandom(step); - } - - void shuffleItems() { - for (int a = 0; a < PATTERN_COUNT; a++) - { - int r = random(a, PATTERN_COUNT); - Drawable* temp = shuffledItems[a]; - shuffledItems[a] = shuffledItems[r]; - shuffledItems[r] = temp; - } - } - - - unsigned int drawFrame() { - return currentItem->drawFrame(); - } - - void listPatterns() { - Serial.println(F("{")); - Serial.print(F(" \"count\": ")); - Serial.print(PATTERN_COUNT); - Serial.println(","); - Serial.println(F(" \"results\": [")); - - for (int i = 0; i < PATTERN_COUNT; i++) { - Serial.print(F(" \"")); - Serial.print(i, DEC); - Serial.print(F(": ")); - Serial.print(items[i]->name); - if (i == PATTERN_COUNT - 1) - Serial.println(F("\"")); - else - Serial.println(F("\",")); - } - - Serial.println(" ]"); - Serial.println("}"); - } - - char * getCurrentPatternName() - { - return currentItem->name; - } - - void moveTo(int index) { - if (currentItem) - currentItem->stop(); - - currentIndex = index; - - currentItem = items[currentIndex]; - - if (currentItem) - currentItem->start(); - } - - bool setPattern(String name) { - for (int i = 0; i < PATTERN_COUNT; i++) { - if (name.compareTo(items[i]->name) == 0) { - moveTo(i); - return true; - } - } - - return false; - } - - - bool setPattern(int index) { - if (index >= PATTERN_COUNT || index < 0) - return false; - - moveTo(index); - - return true; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Playlist.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Playlist.h deleted file mode 100644 index 29c0c87..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Playlist.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Playlist_H -#define Playlist_H - -class Playlist : public Drawable { -public: - virtual bool isPlaylist() { - return true; - } - - boolean isCurrentItemFinished = true; - - virtual void move(int step) = 0; - virtual void moveRandom(int step) = 0; - virtual int getCurrentIndex(); -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/README.md deleted file mode 100644 index 2344367..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/README.md +++ /dev/null @@ -1,6 +0,0 @@ -A port of Aurora visualisations -====== - -Not all of the visualisations have been ported. About 17 of 37 work, or have been included as I think they look best. - -Original source: https://github.com/pixelmatix/aurora \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Vector.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Vector.h deleted file mode 100644 index 8acbadc..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/AuroraDemo/Vector.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Vector_H -#define Vector_H - -template -class Vector2 { -public: - T x, y; - - Vector2() :x(0), y(0) {} - Vector2(T x, T y) : x(x), y(y) {} - Vector2(const Vector2& v) : x(v.x), y(v.y) {} - - Vector2& operator=(const Vector2& v) { - x = v.x; - y = v.y; - return *this; - } - - bool isEmpty() { - return x == 0 && y == 0; - } - - bool operator==(Vector2& v) { - return x == v.x && y == v.y; - } - - bool operator!=(Vector2& v) { - return !(x == y); - } - - Vector2 operator+(Vector2& v) { - return Vector2(x + v.x, y + v.y); - } - Vector2 operator-(Vector2& v) { - return Vector2(x - v.x, y - v.y); - } - - Vector2& operator+=(Vector2& v) { - x += v.x; - y += v.y; - return *this; - } - Vector2& operator-=(Vector2& v) { - x -= v.x; - y -= v.y; - return *this; - } - - Vector2 operator+(double s) { - return Vector2(x + s, y + s); - } - Vector2 operator-(double s) { - return Vector2(x - s, y - s); - } - Vector2 operator*(double s) { - return Vector2(x * s, y * s); - } - Vector2 operator/(double s) { - return Vector2(x / s, y / s); - } - - Vector2& operator+=(double s) { - x += s; - y += s; - return *this; - } - Vector2& operator-=(double s) { - x -= s; - y -= s; - return *this; - } - Vector2& operator*=(double s) { - x *= s; - y *= s; - return *this; - } - Vector2& operator/=(double s) { - x /= s; - y /= s; - return *this; - } - - void set(T x, T y) { - this->x = x; - this->y = y; - } - - void rotate(double deg) { - double theta = deg / 180.0 * M_PI; - double c = cos(theta); - double s = sin(theta); - double tx = x * c - y * s; - double ty = x * s + y * c; - x = tx; - y = ty; - } - - Vector2& normalize() { - if (length() == 0) return *this; - *this *= (1.0 / length()); - return *this; - } - - float dist(Vector2 v) const { - Vector2 d(v.x - x, v.y - y); - return d.length(); - } - float length() const { - return sqrt(x * x + y * y); - } - - float mag() const { - return length(); - } - - float magSq() { - return (x * x + y * y); - } - - void truncate(double length) { - double angle = atan2f(y, x); - x = length * cos(angle); - y = length * sin(angle); - } - - Vector2 ortho() const { - return Vector2(y, -x); - } - - static float dot(Vector2 v1, Vector2 v2) { - return v1.x * v2.x + v1.y * v2.y; - } - static float cross(Vector2 v1, Vector2 v2) { - return (v1.x * v2.y) - (v1.y * v2.x); - } - - void limit(float max) { - if (magSq() > max*max) { - normalize(); - *this *= max; - } - } -}; - -typedef Vector2 PVector; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/BitmapIcons.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/BitmapIcons.ino deleted file mode 100644 index ab1b6e4..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/BitmapIcons.ino +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include -#include "Dhole_weather_icons32px.h" - -/*--------------------- DEBUG -------------------------*/ -#define Sprintln(a) (Serial.println(a)) -#define SprintlnDEC(a, x) (Serial.println(a, x)) - -#define Sprint(a) (Serial.print(a)) -#define SprintDEC(a, x) (Serial.print(a, x)) - - -/*--------------------- RGB DISPLAY PINS -------------------------*/ -#define R1_PIN 25 -#define G1_PIN 26 -#define B1_PIN 27 -#define R2_PIN 14 -#define G2_PIN 12 -#define B2_PIN 13 -#define A_PIN 23 -#define B_PIN 19 // Changed from library default -#define C_PIN 5 -#define D_PIN 17 -#define E_PIN -1 -#define LAT_PIN 4 -#define OE_PIN 15 -#define CLK_PIN 16 - - -/*--------------------- MATRIX LILBRARY CONFIG -------------------------*/ -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. -#define PANEL_CHAIN 1 // Total number of panels chained one to another - -MatrixPanel_I2S_DMA *dma_display = nullptr; - -// Module configuration -HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // module width - PANEL_RES_Y, // module height - PANEL_CHAIN // Chain length -); - -/* -//Another way of creating config structure -//Custom pin mapping for all pins -HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK}; -HUB75_I2S_CFG mxconfig( - 64, // width - 64, // height - 4, // chain length - _pins, // pin mapping - HUB75_I2S_CFG::FM6126A // driver chip -); - -*/ - - -//mxconfig.gpio.e = -1; // Assign a pin if you have a 64x64 panel -//mxconfig.clkphase = false; // Change this if you have issues with ghosting. -//mxconfig.driver = HUB75_I2S_CFG::FM6126A; // Change this according to your pane. - - -/* - * Wifi Logo, generated with the following steps: - * - * Python and Paint.Net needs to be installed. - * - * 1. SAVE BITMAP AS 1BIT COLOUR in paint.net - * 2. Run: bmp2hex.py -i -x - * 3. Copy paste output into sketch. - * - */ - -const char wifi_image1bit[] PROGMEM = { - 0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0x00, - 0x00,0x00,0x00,0xf0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f, - 0x00,0x00,0x00,0x00,0xfe,0x07,0xe0,0x7f,0x00,0x00,0x00,0x80,0xff,0x00,0x00, - 0xff,0x01,0x00,0x00,0xc0,0x1f,0x00,0x00,0xf8,0x03,0x00,0x00,0xe0,0x0f,0x00, - 0x00,0xf0,0x07,0x00,0x00,0xf0,0x03,0xf0,0x0f,0xc0,0x0f,0x00,0x00,0xe0,0x01, - 0xff,0xff,0x80,0x07,0x00,0x00,0xc0,0xc0,0xff,0xff,0x03,0x03,0x00,0x00,0x00, - 0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xf8,0x0f,0xf0,0x1f,0x00,0x00,0x00, - 0x00,0xfc,0x01,0x80,0x3f,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x3e,0x00,0x00, - 0x00,0x00,0x38,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x10,0xe0,0x07,0x08,0x00, - 0x00,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00, - 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8, - 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00, - 0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00 }; - - -void drawXbm565(int x, int y, int width, int height, const char *xbm, uint16_t color = 0xffff) -{ - if (width % 8 != 0) { - width = ((width / 8) + 1) * 8; - } - for (int i = 0; i < width * height / 8; i++ ) { - unsigned char charColumn = pgm_read_byte(xbm + i); - for (int j = 0; j < 8; j++) { - int targetX = (i * 8 + j) % width + x; - int targetY = (8 * i / (width)) + y; - if (bitRead(charColumn, j)) { - dma_display->drawPixel(targetX, targetY, color); - } - } - } -} - -/* Bitmaps */ -int current_icon = 0; -static int num_icons = 22; - -static char icon_name[22][30] = { -"cloud_moon_bits", -"cloud_sun_bits", -"clouds_bits", -"cloud_wind_moon_bits", -"cloud_wind_sun_bits", -"cloud_wind_bits", -"cloud_bits", -"lightning_bits", -"moon_bits", -"rain0_sun_bits", -"rain0_bits", -"rain1_moon_bits", -"rain1_sun_bits", -"rain1_bits", -"rain2_bits", -"rain_lightning_bits", -"rain_snow_bits", -"snow_moon_bits", -"snow_sun_bits", -"snow_bits", -"sun_bits", -"wind_bits" }; - -static char *icon_bits[22] = { cloud_moon_bits, -cloud_sun_bits, -clouds_bits, -cloud_wind_moon_bits, -cloud_wind_sun_bits, -cloud_wind_bits, -cloud_bits, -lightning_bits, -moon_bits, -rain0_sun_bits, -rain0_bits, -rain1_moon_bits, -rain1_sun_bits, -rain1_bits, -rain2_bits, -rain_lightning_bits, -rain_snow_bits, -snow_moon_bits, -snow_sun_bits, -snow_bits, -sun_bits, -wind_bits}; - - - -void setup() { - - // put your setup code here, to run once: - delay(1000); Serial.begin(115200); delay(200); - - - /************** DISPLAY **************/ - Sprintln("...Starting Display"); - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - dma_display->begin(); - dma_display->setBrightness8(90); //0-255 - dma_display->clearScreen(); - - dma_display->fillScreen(dma_display->color444(0, 1, 0)); - - // Fade a Red Wifi Logo In - for (int r=0; r < 255; r++ ) - { - drawXbm565(0,0,64,32, wifi_image1bit, dma_display->color565(r,0,0)); - delay(10); - } - - delay(2000); - dma_display->clearScreen(); -} - - -void loop() { - - // Loop through Weather Icons - Serial.print("Showing icon "); - Serial.println(icon_name[current_icon]); - drawXbm565(0,0, 32, 32, icon_bits[current_icon]); - - current_icon = (current_icon +1 ) % num_icons; - delay(2000); - dma_display->clearScreen(); - -} \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/Dhole_weather_icons32px.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/Dhole_weather_icons32px.h deleted file mode 100644 index 5fb8b3b..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/Dhole_weather_icons32px.h +++ /dev/null @@ -1,308 +0,0 @@ -#define cloud_moon_width 32 -#define cloud_moon_height 32 -static char cloud_moon_bits[] = { - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, - 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0xF0, 0x87, 0xC3, - 0x00, 0xFC, 0x1F, 0xFF, 0x00, 0x1E, 0x3C, 0xFE, 0x00, 0x06, 0x30, 0x60, - 0x00, 0x07, 0xF0, 0x79, 0x00, 0x03, 0xE0, 0x3F, 0xE0, 0x03, 0x00, 0x0F, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x07, 0x38, 0x00, 0x80, 0x03, - 0xF0, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define cloud_sun_width 32 -#define cloud_sun_height 32 -static char cloud_sun_bits[] = { - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x80, 0xC1, 0x60, - 0x00, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF3, 0x33, 0x00, 0x00, 0xF8, 0x07, - 0x00, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0xF0, 0x07, 0x18, - 0x00, 0xFC, 0x1F, 0xD8, 0x00, 0x1E, 0x3C, 0xD8, 0x00, 0x06, 0x30, 0x18, - 0x00, 0x07, 0xF0, 0x1D, 0x00, 0x03, 0xE0, 0x0F, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x07, 0x38, 0x00, 0x80, 0x03, - 0xF0, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define clouds_width 32 -#define clouds_height 32 -static char clouds_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, - 0x00, 0xE0, 0xC1, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0xF0, 0x07, 0x1F, - 0x00, 0xFC, 0x1F, 0x3E, 0x00, 0x1E, 0x3C, 0x70, 0x00, 0x06, 0x30, 0xE0, - 0x00, 0x07, 0xF0, 0xC1, 0x00, 0x03, 0xE0, 0xC3, 0xE0, 0x03, 0x00, 0xC7, - 0xF0, 0x01, 0x00, 0xCE, 0x38, 0x00, 0x00, 0xCC, 0x1C, 0x00, 0x00, 0xEC, - 0x0C, 0x00, 0x00, 0x6C, 0x0C, 0x00, 0x00, 0x2C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x07, 0x38, 0x00, 0x80, 0x03, - 0xF0, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define cloud_wind_moon_width 32 -#define cloud_wind_moon_height 32 -static char cloud_wind_moon_bits[] = { - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, - 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0xF0, 0x87, 0xC3, - 0x00, 0xFC, 0x1F, 0xFF, 0x00, 0x1E, 0x3C, 0xFE, 0x00, 0x06, 0x30, 0x60, - 0x00, 0x07, 0xF0, 0x79, 0x00, 0x03, 0xE0, 0x3F, 0xE0, 0x03, 0x00, 0x0F, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, - 0xFC, 0xFF, 0x3F, 0x0E, 0xFC, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x80, 0x03, - 0xFF, 0xFF, 0xEF, 0x01, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define cloud_wind_sun_width 32 -#define cloud_wind_sun_height 32 -static char cloud_wind_sun_bits[] = { - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x80, 0xC1, 0x60, - 0x00, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF3, 0x33, 0x00, 0x00, 0xF8, 0x07, - 0x00, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0xF0, 0x07, 0x18, - 0x00, 0xFC, 0x1F, 0xD8, 0x00, 0x1E, 0x3C, 0xD8, 0x00, 0x06, 0x30, 0x18, - 0x00, 0x07, 0xF0, 0x1D, 0x00, 0x03, 0xE0, 0x0F, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, - 0xFC, 0xFF, 0x3F, 0x0E, 0xFC, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x80, 0x03, - 0xFF, 0xFF, 0xEF, 0x01, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define cloud_wind_width 32 -#define cloud_wind_height 32 -static char cloud_wind_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, - 0xFC, 0xFF, 0x3F, 0x0E, 0xFC, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x80, 0x03, - 0xFF, 0xFF, 0xEF, 0x01, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define cloud_width 32 -#define cloud_height 32 -static char cloud_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x07, 0x38, 0x00, 0x80, 0x03, - 0xF0, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define lightning_width 32 -#define lightning_height 32 -static char lightning_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0xC0, 0x01, 0x0C, - 0x0C, 0xC0, 0x01, 0x0E, 0x1C, 0xC0, 0x00, 0x07, 0x38, 0xE0, 0x80, 0x03, - 0xF0, 0x6F, 0xFC, 0x01, 0xE0, 0xEF, 0xFD, 0x00, 0x00, 0x80, 0x01, 0x00, - 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define moon_width 32 -#define moon_height 32 -static char moon_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x80, 0x1B, 0x00, 0x00, 0xC0, 0x19, 0x00, 0x00, 0xE0, 0x1C, 0x00, 0x00, - 0x60, 0x0C, 0x00, 0x00, 0x70, 0x0C, 0x00, 0x00, 0x30, 0x0C, 0x00, 0x00, - 0x30, 0x0C, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x18, 0x38, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x18, 0x70, 0x00, 0x00, - 0x38, 0xE0, 0x01, 0x18, 0x30, 0xC0, 0x87, 0x1F, 0x70, 0x00, 0xFF, 0x1F, - 0x60, 0x00, 0xFC, 0x0C, 0xE0, 0x00, 0x00, 0x0E, 0xC0, 0x01, 0x00, 0x07, - 0x80, 0x03, 0x80, 0x03, 0x00, 0x0F, 0xE0, 0x01, 0x00, 0x3E, 0xFC, 0x00, - 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain0_sun_width 32 -#define rain0_sun_height 32 -static char rain0_sun_bits[] = { - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x80, 0xC1, 0x60, - 0x00, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF3, 0x33, 0x00, 0x00, 0xF8, 0x07, - 0x00, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0xF0, 0x07, 0x18, - 0x00, 0xFC, 0x1F, 0xD8, 0x00, 0x1E, 0x3C, 0xD8, 0x00, 0x06, 0x30, 0x18, - 0x00, 0x07, 0xF0, 0x1D, 0x00, 0x03, 0xE0, 0x0F, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x60, 0x06, 0x0C, - 0x0C, 0x60, 0x06, 0x0E, 0x1C, 0x70, 0x07, 0x07, 0x38, 0x30, 0x83, 0x03, - 0xF0, 0x33, 0xFB, 0x01, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0xCC, 0x00, 0x00, - 0x00, 0xCC, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain0_width 32 -#define rain0_height 32 -static char rain0_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x60, 0x06, 0x0C, - 0x0C, 0x60, 0x06, 0x0E, 0x1C, 0x70, 0x07, 0x07, 0x38, 0x30, 0x83, 0x03, - 0xF0, 0x33, 0xFB, 0x01, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0xCC, 0x00, 0x00, - 0x00, 0xCC, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain1_moon_width 32 -#define rain1_moon_height 32 -static char rain1_moon_bits[] = { - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, - 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0xF0, 0x87, 0xC3, - 0x00, 0xFC, 0x1F, 0xFF, 0x00, 0x1E, 0x3C, 0xFE, 0x00, 0x06, 0x30, 0x60, - 0x00, 0x07, 0xF0, 0x79, 0x00, 0x03, 0xE0, 0x3F, 0xE0, 0x03, 0x00, 0x0F, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x60, 0x06, 0x0C, - 0x0C, 0x60, 0x06, 0x0E, 0x1C, 0x70, 0x07, 0x07, 0x38, 0x30, 0x83, 0x03, - 0xF0, 0xBB, 0xFB, 0x01, 0xE0, 0x99, 0xF9, 0x00, 0x00, 0xDC, 0x01, 0x00, - 0x00, 0xCC, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain1_sun_width 32 -#define rain1_sun_height 32 -static char rain1_sun_bits[] = { - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x80, 0xC1, 0x60, - 0x00, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF3, 0x33, 0x00, 0x00, 0xF8, 0x07, - 0x00, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0xF0, 0x07, 0x18, - 0x00, 0xFC, 0x1F, 0xD8, 0x00, 0x1E, 0x3C, 0xD8, 0x00, 0x06, 0x30, 0x18, - 0x00, 0x07, 0xF0, 0x1D, 0x00, 0x03, 0xE0, 0x0F, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x60, 0x06, 0x0C, - 0x0C, 0x60, 0x06, 0x0E, 0x1C, 0x70, 0x07, 0x07, 0x38, 0x30, 0x83, 0x03, - 0xF0, 0xBB, 0xFB, 0x01, 0xE0, 0x99, 0xF9, 0x00, 0x00, 0xDC, 0x01, 0x00, - 0x00, 0xCC, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain1_width 32 -#define rain1_height 32 -static char rain1_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x60, 0x06, 0x0C, - 0x0C, 0x60, 0x06, 0x0E, 0x1C, 0x70, 0x07, 0x07, 0x38, 0x30, 0x83, 0x03, - 0xF0, 0xBB, 0xFB, 0x01, 0xE0, 0x99, 0xF9, 0x00, 0x00, 0xDC, 0x01, 0x00, - 0x00, 0xCC, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain2_width 32 -#define rain2_height 32 -static char rain2_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x66, 0x66, 0x0C, - 0x0C, 0x66, 0x66, 0x0E, 0x1C, 0x77, 0x77, 0x07, 0x38, 0x33, 0x33, 0x03, - 0xB0, 0xBB, 0xBB, 0x01, 0x80, 0x99, 0x99, 0x00, 0xC0, 0xDD, 0x1D, 0x00, - 0xC0, 0xCC, 0x0C, 0x00, 0xC0, 0xEE, 0x0C, 0x00, 0x00, 0x66, 0x00, 0x00, - 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain_lightning_width 32 -#define rain_lightning_height 32 -static char rain_lightning_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0xCC, 0x1C, 0x0C, - 0x0C, 0xCC, 0x1C, 0x0E, 0x1C, 0xEE, 0x0C, 0x07, 0x38, 0x66, 0x8E, 0x03, - 0x70, 0x77, 0xC6, 0x01, 0x20, 0x33, 0xDE, 0x00, 0x80, 0x3B, 0x18, 0x00, - 0x80, 0x19, 0x0C, 0x00, 0x80, 0x1D, 0x0C, 0x00, 0x00, 0x0C, 0x04, 0x00, - 0x00, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define rain_snow_width 32 -#define rain_snow_height 32 -static char rain_snow_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0xCC, 0x08, 0x0C, - 0x0C, 0xCC, 0x1C, 0x0E, 0x1C, 0xEE, 0x36, 0x07, 0x38, 0x66, 0x9C, 0x03, - 0x70, 0x77, 0xC8, 0x01, 0x20, 0x33, 0xE2, 0x00, 0x80, 0x3B, 0x07, 0x00, - 0x80, 0x99, 0x0D, 0x00, 0x80, 0x1D, 0x07, 0x00, 0x00, 0x0C, 0x02, 0x00, - 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define snow_moon_width 32 -#define snow_moon_height 32 -static char snow_moon_bits[] = { - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, - 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0xF0, 0x87, 0xC3, - 0x00, 0xFC, 0x1F, 0xFF, 0x00, 0x1E, 0x3C, 0xFE, 0x00, 0x06, 0x30, 0x60, - 0x00, 0x07, 0xF0, 0x79, 0x00, 0x03, 0xE0, 0x3F, 0xE0, 0x03, 0x00, 0x0F, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x40, 0x00, 0x07, 0x38, 0xE0, 0x80, 0x03, - 0xF0, 0xB1, 0xF1, 0x01, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x44, 0x04, 0x00, - 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00, 0x0E, 0x0E, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define snow_sun_width 32 -#define snow_sun_height 32 -static char snow_sun_bits[] = { - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x80, 0xC1, 0x60, - 0x00, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF3, 0x33, 0x00, 0x00, 0xF8, 0x07, - 0x00, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0xF0, 0x07, 0x18, - 0x00, 0xFC, 0x1F, 0xD8, 0x00, 0x1E, 0x3C, 0xD8, 0x00, 0x06, 0x30, 0x18, - 0x00, 0x07, 0xF0, 0x1D, 0x00, 0x03, 0xE0, 0x0F, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x40, 0x00, 0x07, 0x38, 0xE0, 0x80, 0x03, - 0xF0, 0xB1, 0xF1, 0x01, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x44, 0x04, 0x00, - 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00, 0x0E, 0x0E, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define snow_width 32 -#define snow_height 32 -static char snow_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, - 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x06, 0x30, 0x00, - 0x00, 0x07, 0xF0, 0x01, 0x00, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x07, - 0xF0, 0x01, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x0C, 0x1C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, - 0x0C, 0x00, 0x00, 0x0E, 0x1C, 0x40, 0x00, 0x07, 0x38, 0xE0, 0x80, 0x03, - 0xF0, 0xB1, 0xF1, 0x01, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x44, 0x04, 0x00, - 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00, 0x0E, 0x0E, 0x00, - 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define sun_width 32 -#define sun_height 32 -static char sun_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, - 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x83, 0xC1, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0xE6, 0x67, 0x00, 0x00, 0xF0, 0x0F, 0x00, - 0x00, 0x38, 0x1C, 0x00, 0x00, 0x1C, 0x38, 0x00, 0x00, 0x0C, 0x30, 0x00, - 0xF0, 0x0D, 0xB0, 0x0F, 0xF0, 0x0D, 0xB0, 0x0F, 0x00, 0x0C, 0x30, 0x00, - 0x00, 0x1C, 0x38, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0xF0, 0x0F, 0x00, - 0x00, 0xE6, 0x67, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x83, 0xC1, 0x00, - 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, - 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -#define wind_width 32 -#define wind_height 32 -static char wind_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x80, 0x01, - 0xF0, 0xFF, 0xFF, 0x19, 0xF0, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x30, - 0xFC, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, - 0xF0, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/README.md deleted file mode 100644 index 155365e..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Xbm Bitmap example -## Requirements -* To generate the required Xbm data to be copied into the Sketch. Have python and [paint.net](https://www.getpaint.net/) installed. -* Bitmap should match the resolution of your display configuration. - -## Instructions - 1. SAVE BITMAP AS 1BIT COLOUR in paint.net - 1. Run: bmp2hex.py -i -x (e.g. "bmp2hex.py -i -x WiFi1bit.bmp") - 1. Copy paste output into sketch. - - ![bmp2hex usage screenshot](screenshot.jpg) - - diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/WiFi1bit.bmp b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/WiFi1bit.bmp deleted file mode 100644 index 2bace87..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/WiFi1bit.bmp and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/bmp2hex.py b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/bmp2hex.py deleted file mode 100644 index 49e1c65..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/bmp2hex.py +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/env python - -##@file bmp2hex.py -# @ingroup util -# A script for converting a 1-bit bitmap to HEX for use in an Arduino sketch. -# -# The BMP format is well publicized. The byte order of the actual bitmap is a -# little unusual. The image is stored bottom to top, left to right. In addition, -# The pixel rows are rounded to DWORDS which are 4 bytes long. SO, to convert this -# to left to right, top to bottom, no byte padding. We have to do some calculations -# as we loop through the rows and bytes of the image. See below for more -# -# Usage: -# >>>bmp2hex.py [-i] [-r] [-n] [-d] [-x] [-w ] [-b ] -# -# @param infile The file to convert. -# @param tablename The name of the table to create -# @param raw "-r", bitmap written as raw table [optional] -# @param invert "-i", to invert image pixel colors [optional] -# @param tablewidth "-w , The number of characters for each row of the output table [optional] -# @param sizebytes "-b , Bytes = 0, 1, or 2. 0 = auto. 1 = 1-byte for sizes. 2 = 2-byte sizes (big endian) [optional] -# @param named "-n", use a names structure [optional] -## @param double "-d", use double bytes rather than single ones [optional] -# @param xbm "-x", use XBM format (bits reversed in byte) [optional] -# @param version "-v", returns version number -# -# @author Robert Gallup 2016-02 -# -# Author: Robert Gallup (bg@robertgallup.com) -# License: MIT Opensource License -# -# Copyright 2016-2018 Robert Gallup -# - -import sys, array, os, textwrap, math, random, argparse - -class DEFAULTS(object): - STRUCTURE_NAME = 'GFXMeta' - VERSION = '2.3.4' - -def main (): - - # Default parameters - infile = "" - tablename = "" - tablewidth = 16 - sizebytes = 0 - invert = False - raw = False - named = False - double = False - xbm = False - version = False - - # Set up parser and handle arguments - parser = argparse.ArgumentParser() - # parser.add_argument ("infile", help="The BMP file(s) to convert", type=argparse.FileType('r'), nargs='+', default=['-']) - parser.add_argument ("infile", help="The BMP file(s) to convert", type=argparse.FileType('r'), nargs='*', default=['-']) - parser.add_argument ("-r", "--raw", help="Outputs all data in raw table format", action="store_true") - parser.add_argument ("-i", "--invert", help="Inverts bitmap pixels", action="store_true") - parser.add_argument ("-w", "--width", help="Output table width in hex bytes [default: 16]", type=int) - parser.add_argument ("-b", "--bytes", help="Byte width of BMP sizes: 0=auto, 1, or 2 (big endian) [default: 0]", type=int) - parser.add_argument ("-n", "--named", help="Uses named structure (" + DEFAULTS.STRUCTURE_NAME + ") for data", action="store_true") -# parser.add_argument ("-d", "--double", help="Defines data in 'words' rather than bytes", action="store_true") - parser.add_argument ("-x", "--xbm", help="Uses XBM bit order (low order bit is first pixel of byte)", action="store_true") - parser.add_argument ("-v", "--version", help="Returns the current bmp2hex version", action="store_true") - args = parser.parse_args() - - # Required arguments - infile = args.infile - - # Options - if args.raw: - raw = args.raw - if args.invert: - invert = args.invert - if args.width: - tablewidth = args.width - if args.bytes: - sizebytes = args.bytes % 3 - if args.named: - named = args.named - # if args.double: - # double = args.double - double = False - if args.xbm: - xbm = args.xbm - if args.version: - print ('// bmp2hex version ' + DEFAULTS.VERSION) - - # Output named structure, if requested - if (named): - print ('struct ' + DEFAULTS.STRUCTURE_NAME + ' {') - print (' unsigned int width;') - print (' unsigned int height;') - print (' unsigned int bitDepth;') - print (' int baseline;') - print (' ' + getDoubleType(double)[0] + 'pixel_data;') - print ('};') - print ('') - - # Do the work - for f in args.infile: - if f == '-': - sys.exit() - bmp2hex(f.name, tablewidth, sizebytes, invert, raw, named, double, xbm) - -# Utility function. Return a long int from array (little endian) -def getLONG(a, n): - return (a[n+3] * (2**24)) + (a[n+2] * (2**16)) + (a[n+1] * (2**8)) + (a[n]) - -# Utility function. Return an int from array (little endian) -def getINT(a, n): - return ((a[n+1] * (2**8)) + (a[n])) - -# Reverses pixels in byte -def reflect(a): - r = 0 - for i in range(8): - r <<= 1 - r |= (a & 0x01) - a >>= 1 - return (r) - -# Returns as a tuple, the data type and length for double versus short data types -def getDoubleType (d): - if d: - dType = 'uint16_t' + ' *' - dLen = 2 - else: - dType = 'uint8_t' + ' *' - dLen = 1 - - return (dType, dLen) - - -# Main conversion function -def bmp2hex(infile, tablewidth, sizebytes, invert, raw, named, double, xbm): - - # Set up some variables to handle the "-d" option - (pixelDataType, dataByteLength) = getDoubleType(double) - - # Set the table name to the uppercase root of the file name - tablename = os.path.splitext(infile)[0].upper() - - # Convert tablewidth to characters from hex bytes - tablewidth = int(tablewidth) * 6 - - # Initialize output buffer - outstring = '' - - # Open File - fin = open(os.path.expanduser(infile), "rb") - uint8_tstoread = os.path.getsize(os.path.expanduser(infile)) - valuesfromfile = array.array('B') - try: - valuesfromfile.fromfile(fin, uint8_tstoread) - finally: - fin.close() - - # Get bytes from file - values=valuesfromfile.tolist() - - # Exit if it's not a Windows BMP - if ((values[0] != 0x42) or (values[1] != 0x4D)): - sys.exit ("Error: Unsupported BMP format. Make sure your file is a Windows BMP.") - - # Calculate width, height - dataOffset = getLONG(values, 10) # Offset to image data - pixelWidth = getLONG(values, 18) # Width of image - pixelHeight = getLONG(values, 22) # Height of image - bitDepth = getINT (values, 28) # Bits per pixel - dataSize = getLONG(values, 34) # Size of raw data - - # Calculate line width in bytes and padded byte width (each row is padded to 4-byte multiples) - byteWidth = int(math.ceil(float(pixelWidth * bitDepth)/8.0)) - paddedWidth = int(math.ceil(float(byteWidth)/4.0)*4.0) - - # For auto (sizebytes = 0), set sizebytes to 1 or 2, depending on size of the bitmap - if (sizebytes==0): - if (pixelWidth>255) or (pixelHeight>255): - sizebytes = 2 - else: - sizebytes = 1 - - # The invert byte is set based on the invert command line flag (but, the logic is reversed for 1-bit files) - invertbyte = 0xFF if invert else 0x00 - if (bitDepth == 1): - invertbyte = invertbyte ^ 0xFF - - # Output the hex table declaration - # With "raw" output, output just an array of chars - if (raw): - # Output the data declaration - print ('PROGMEM unsigned char const ' + tablename + ' [] = {') - - # Output the size of the BMP - if (not (sizebytes%2)): - print ("{0:#04X}".format((pixelWidth>>8) & 0xFF) + ", " + "{0:#04X}".format(pixelWidth & 0xFF) + ", " + \ - "{0:#04X}".format((pixelHeight>>8) & 0xFF) + ", " + "{0:#04X}".format(pixelHeight & 0xFF) + ",") - else: - print ("{0:#04X}".format(pixelWidth & 0xFF) + ", " + "{0:#04X}".format(pixelHeight & 0xFF) + ",") - - elif (named): - print ('PROGMEM ' + getDoubleType(double)[0] + ' const ' + tablename + '_PIXELS[] = {') - - elif (xbm): - print ('#define ' + tablename + '_width ' + str(pixelWidth)) - print ('#define ' + tablename + '_height ' + str(pixelHeight)) - print ('PROGMEM ' + getDoubleType(double)[0] + ' const ' + tablename + '_bits[] = {') - - else: - print ('PROGMEM const struct {') - print (' unsigned int width;') - print (' unsigned int height;') - print (' unsigned int bitDepth;') - print (' ' + pixelDataType + 'pixel_data[{0}];'.format(byteWidth * pixelHeight / dataByteLength)) - print ('} ' + tablename + ' = {') - print ('{0}, {1}, {2}, {{'.format(pixelWidth, pixelHeight, bitDepth)) - - # Generate HEX bytes for pixel data in output buffer - try: - for i in range(pixelHeight): - for j in range (byteWidth): - ndx = dataOffset + ((pixelHeight-1-i) * paddedWidth) + j - v = values[ndx] ^ invertbyte - if (xbm): - v = reflect(v) - # print ("{0:#04x}".format(v)) - outstring += "{0:#04x}".format(v) + ", " - - # Wrap the output buffer. Print. Then, finish. - finally: - outstring = textwrap.fill(outstring[:-2], tablewidth) - print (outstring) - - if (named): - print ('};') - print (DEFAULTS.STRUCTURE_NAME + ' const ' + tablename + ' = {{{0}, {1}, {2}, 0, '.format(pixelWidth, pixelHeight, bitDepth) + \ - pixelDataType + tablename + "_PIXELS};\n\n") - else: - if (not (raw or xbm)): - print ("}") - print ("};") - - -# Only run if launched from commandline -if __name__ == '__main__': main() \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/screenshot.jpg b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/screenshot.jpg deleted file mode 100644 index 1148260..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BitmapIcons/screenshot.jpg and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BouncingSquares/BouncingSquares.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BouncingSquares/BouncingSquares.ino deleted file mode 100644 index 6a01225..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/BouncingSquares/BouncingSquares.ino +++ /dev/null @@ -1,84 +0,0 @@ -#include - -MatrixPanel_I2S_DMA *display = nullptr; - -uint16_t myDARK = display->color565(64, 64, 64); -uint16_t myWHITE = display->color565(192, 192, 192); -uint16_t myRED = display->color565(255, 0, 0); -uint16_t myGREEN = display->color565(0, 255, 0); -uint16_t myBLUE = display->color565(0, 0, 255); - -uint16_t colours[5] = { myDARK, myWHITE, myRED, myGREEN, myBLUE }; - -struct Square -{ - float xpos, ypos; - float velocityx; - float velocityy; - boolean xdir, ydir; - uint16_t square_size; - uint16_t colour; -}; - -const int numSquares = 25; -Square Squares[numSquares]; - -void setup() -{ - // put your setup code here, to run once: - delay(1000); - Serial.begin(115200); - delay(200); - - Serial.println("...Starting Display"); - HUB75_I2S_CFG mxconfig; - //mxconfig.double_buff = true; // Turn of double buffer - mxconfig.clkphase = false; - - // OK, now we can create our matrix object - display = new MatrixPanel_I2S_DMA(mxconfig); - display->begin(); // setup display with pins as pre-defined in the library - - // Create some Squares - for (int i = 0; i < numSquares; i++) - { - Squares[i].square_size = random(2,10); - Squares[i].xpos = random(0, display->width() - Squares[i].square_size); - Squares[i].ypos = random(0, display->height() - Squares[i].square_size); - Squares[i].velocityx = static_cast (rand()) / static_cast (RAND_MAX); - Squares[i].velocityy = static_cast (rand()) / static_cast (RAND_MAX); - //Squares[i].xdir = (random(2) == 1) ? true:false; - //Squares[i].ydir = (random(2) == 1) ? true:false; - - int random_num = random(6); - Squares[i].colour = colours[random_num]; - } -} - -void loop() -{ - display->flipDMABuffer(); // not used if double buffering isn't enabled - delay(25); - display->clearScreen(); - - for (int i = 0; i < numSquares; i++) - { - // Draw rect and then calculate - display->fillRect(Squares[i].xpos, Squares[i].ypos, Squares[i].square_size, Squares[i].square_size, Squares[i].colour); - - if (Squares[i].square_size + Squares[i].xpos >= display->width()) { - Squares[i].velocityx *= -1; - } else if (Squares[i].xpos <= 0) { - Squares[i].velocityx = abs (Squares[i].velocityx); - } - - if (Squares[i].square_size + Squares[i].ypos >= display->height()) { - Squares[i].velocityy *= -1; - } else if (Squares[i].ypos <= 0) { - Squares[i].velocityy = abs (Squares[i].velocityy); - } - - Squares[i].xpos += Squares[i].velocityx; - Squares[i].ypos += Squares[i].velocityy; - } -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/ChainedPanels.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/ChainedPanels.ino deleted file mode 100644 index 33379c6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/ChainedPanels.ino +++ /dev/null @@ -1,239 +0,0 @@ -/****************************************************************************** - ----------- - Steps to use - ----------- - - 1) In the sketch (i.e. this example): - - - Set values for NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, PANEL_CHAIN. - There are comments beside them explaining what they are in more detail. - - Other than where the matrix is defined and matrix.begin in the setup, you - should now be using the virtual display for everything (drawing pixels, writing text etc). - You can do a find and replace of all calls if it's an existing sketch - (just make sure you don't replace the definition and the matrix.begin) - - If the sketch makes use of MATRIX_HEIGHT or MATRIX_WIDTH, these will need to be - replaced with the width and height of your virtual screen. - Either make new defines and use that, or you can use virtualDisp.width() or .height() - - Thanks to: - - * Brian Lough for the original example as raised in this issue: - https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/26 - - YouTube: https://www.youtube.com/brianlough - Tindie: https://www.tindie.com/stores/brianlough/ - Twitter: https://twitter.com/witnessmenow - - * Galaxy-Man for the kind donation of panels make/test that this is possible: - https://github.com/Galaxy-Man - -*****************************************************************************/ - - - /****************************************************************************** - * VIRTUAL DISPLAY / MATRIX PANEL CHAINING CONFIGURATION - * - * Note 1: If chaining from the top right to the left, and then S curving down - * then serpentine_chain = true and top_down_chain = true - * (these being the last two parameters of the virtualDisp(...) constructor. - * - * Note 2: If chaining starts from the bottom up, then top_down_chain = false. - * - * Note 3: By default, this library has serpentine_chain = true, that is, every - * second row has the panels 'upside down' (rotated 180), so the output - * pin of the row above is right above the input connector of the next - * row. - - Example 1 panel chaining: - +-----------------+-----------------+-------------------+ - | 64x32px PANEL 3 | 64x32px PANEL 2 | 64x32px PANEL 1 | - | ------------ <-------- | ------------xx | - | [OUT] | [IN] | [OUT] [IN] | [OUT] [ESP IN] | - +--------|--------+-----------------+-------------------+ - | 64x32px|PANEL 4 | 64x32px PANEL 5 | 64x32px PANEL 6 | - | \|/ ----------> | -----> | - | [IN] [OUT] | [IN] [OUT] | [IN] [OUT] | - +-----------------+-----------------+-------------------+ - - Example 1 configuration: - - #define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. - #define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - - #define NUM_ROWS 2 // Number of rows of chained INDIVIDUAL PANELS - #define NUM_COLS 3 // Number of INDIVIDUAL PANELS per ROW - - virtualDisp(dma_display, NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, true, true); - - = 192x64 px virtual display, with the top left of panel 3 being pixel co-ord (0,0) - - ========================================================== - - Example 2 panel chaining: - - +-------------------+ - | 64x32px PANEL 1 | - | ----------------- | - | [OUT] [ESP IN] | - +-------------------+ - | 64x32px PANEL 2 | - | | - | [IN] [OUT] | - +-------------------+ - | 64x32px PANEL 3 | - | | - | [OUT] [IN] | - +-------------------+ - | 64x32px PANEL 4 | - | | - | [IN] [OUT] | - +-------------------+ - - Example 2 configuration: - - #define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. - #define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - - #define NUM_ROWS 4 // Number of rows of chained INDIVIDUAL PANELS - #define NUM_COLS 1 // Number of INDIVIDUAL PANELS per ROW - - virtualDisp(dma_display, NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, true, true); - - virtualDisp(dma_display, NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, true, true); - - = 128x64 px virtual display, with the top left of panel 1 being pixel co-ord (0,0) - - ========================================================== - - Example 3 panel chaining (bottom up): - - +-----------------+-----------------+ - | 64x32px PANEL 4 | 64x32px PANEL 3 | - | <---------- | - | [OUT] [IN] | [OUT] [in] | - +-----------------+-----------------+ - | 64x32px PANEL 1 | 64x32px PANEL 2 | - | ----------> | - | [ESP IN] [OUT] | [IN] [OUT] | - +-----------------+-----------------+ - - Example 1 configuration: - - #define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. - #define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - - #define NUM_ROWS 2 // Number of rows of chained INDIVIDUAL PANELS - #define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW - - virtualDisp(dma_display, NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, true, false); - - = 128x64 px virtual display, with the top left of panel 4 being pixel co-ord (0,0) - -*/ - - - - -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - -#define NUM_ROWS 2 // Number of rows of chained INDIVIDUAL PANELS -#define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW -#define PANEL_CHAIN NUM_ROWS*NUM_COLS // total number of panels chained one to another - -// Change this to your needs, for details on VirtualPanel pls read the PDF! -#define SERPENT true -#define TOPDOWN false - -// library includes -#include - -// placeholder for the matrix object -MatrixPanel_I2S_DMA *dma_display = nullptr; - -// placeholder for the virtual display object -VirtualMatrixPanel *virtualDisp = nullptr; - - -/****************************************************************************** - * Setup! - ******************************************************************************/ -void setup() { - - delay(2000); - Serial.begin(115200); - Serial.println(""); Serial.println(""); Serial.println(""); - Serial.println("*****************************************************"); - Serial.println(" HELLO !"); - Serial.println("*****************************************************"); - - - /****************************************************************************** - * Create physical DMA panel class AND virtual (chained) display class. - ******************************************************************************/ - - /* - The configuration for MatrixPanel_I2S_DMA object is held in HUB75_I2S_CFG structure, - All options has it's predefined default values. So we can create a new structure and redefine only the options we need - - Please refer to the '2_PatternPlasma.ino' example for detailed example of how to use the MatrixPanel_I2S_DMA configuration - */ - - HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // module width - PANEL_RES_Y, // module height - PANEL_CHAIN // chain length - ); - - //mxconfig.driver = HUB75_I2S_CFG::FM6126A; // in case that we use panels based on FM6126A chip, we can set it here before creating MatrixPanel_I2S_DMA object - - // Sanity checks - if (NUM_ROWS <= 1) { - Serial.println(F("There is no reason to use the VirtualDisplay class for a single horizontal chain and row!")); - } - - // OK, now we can create our matrix object - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - - // let's adjust default brightness to about 75% - dma_display->setBrightness8(192); // range is 0-255, 0 - 0%, 255 - 100% - - // Allocate memory and start DMA display - if( not dma_display->begin() ) - Serial.println("****** !KABOOM! I2S memory allocation failed ***********"); - - // create VirtualDisplay object based on our newly created dma_display object - virtualDisp = new VirtualMatrixPanel((*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, SERPENT, TOPDOWN); - - // So far so good, so continue - virtualDisp->fillScreen(virtualDisp->color444(0, 0, 0)); - virtualDisp->drawDisplayTest(); // draw text numbering on each screen to check connectivity - - delay(3000); - - Serial.println("Chain of 64x32 panels for this example:"); - Serial.println("+--------+---------+"); - Serial.println("| 4 | 3 |"); - Serial.println("| | |"); - Serial.println("+--------+---------+"); - Serial.println("| 1 | 2 |"); - Serial.println("| (ESP) | |"); - Serial.println("+--------+---------+"); - - virtualDisp->setFont(&FreeSansBold12pt7b); - virtualDisp->setTextColor(virtualDisp->color565(0, 0, 255)); - virtualDisp->setTextSize(2); - virtualDisp->setCursor(10, virtualDisp->height()-20); - - // Red text inside red rect (2 pix in from edge) - virtualDisp->print("1234"); - virtualDisp->drawRect(1,1, virtualDisp->width()-2, virtualDisp->height()-2, virtualDisp->color565(255,0,0)); - - // White line from top left to bottom right - virtualDisp->drawLine(0,0, virtualDisp->width()-1, virtualDisp->height()-1, virtualDisp->color565(255,255,255)); -} - -void loop() { - - -} // end loop diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/README.md deleted file mode 100644 index ca55860..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/README.md +++ /dev/null @@ -1,41 +0,0 @@ -## Chained Panels example - Chaining individual LED matrix panels to make a larger panel ## - -This is the PatternPlasma Demo adopted for use with multiple LED Matrix Panel displays arranged in a non standard order (i.e. a grid) to make a bigger display. - -### What do we mean by 'non standard order'? ### - -When you link / chain multiple panels together, the ESP32-HUB75-MatrixPanel-I2S-DMA library treats as one wide horizontal panel. This would be a 'standard' (default) order. - -Non-standard order is essentially the creation of a non-horizontal-only display that you can draw to in the same way you would any other display, with VirtualDisplay library looking after the pixel mapping to the physical chained panels. - -For example: You bought four (4) 64x32px panels, and wanted to use them to create a 128x64pixel display. You would use the VirtualMatrixPanel class. - -[Refer to this document](VirtualMatrixPanel.pdf) for an explanation and refer to this example on how to use. - - -### Steps to Use ### - -1. [Refer to this document](VirtualMatrixPanel.pdf) for an explanation and refer to this example on how to use. - -2. In your Arduino sketch, configure these defines accordingly: -``` -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - -#define NUM_ROWS 2 // Number of rows of chained INDIVIDUAL PANELS -#define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW -``` - -3. In your Arduino sketch, use the 'VirtualMatrixPanel' class instance (virtualDisp) to draw to the display (i.e. drawPixel), instead of the underling MatrixPanel_I2S_DMA class instance (dma_display). - - -#### Thanks to #### -* Brian Lough for the Virtual to Real pixel co-ordinate code. - -YouTube: https://www.youtube.com/brianlough - -Tindie: https://www.tindie.com/stores/brianlough/ - -Twitter: https://twitter.com/witnessmenow - -* Galaxy-Man for the donation of hardware for testing. diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/VirtualMatrixPanel.odp b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/VirtualMatrixPanel.odp deleted file mode 100644 index c0b2082..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/VirtualMatrixPanel.odp and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/VirtualMatrixPanel.pdf b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/VirtualMatrixPanel.pdf deleted file mode 100644 index cddb4ea..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanels/VirtualMatrixPanel.pdf and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Attractor.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Attractor.h deleted file mode 100644 index 668ba53..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Attractor.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Attractor" in "The Nature of Code" by Daniel Shiffman: http://natureofcode.com/ - * Copyright (c) 2014 Daniel Shiffman - * http://www.shiffman.net - * - * 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 "Vector.h" - -class Attractor { -public: - float mass; // Mass, tied to size - float G; // Gravitational Constant - PVector location; // Location - - Attractor() { - location = PVector(MATRIX_CENTRE_X, MATRIX_CENTRE_Y); - mass = 10; - G = .5; - } - - PVector attract(Boid m) { - PVector force = location - m.location; // Calculate direction of force - float d = force.mag(); // Distance between objects - d = constrain(d, 5.0, 32.0); // Limiting the distance to eliminate "extreme" results for very close or very far objects - force.normalize(); // Normalize vector (distance doesn't matter here, we just want this vector for direction) - float strength = (G * mass * m.mass) / (d * d); // Calculate gravitational force magnitude - force *= strength; // Get force vector --> magnitude * direction - return force; - } -}; diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Boid.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Boid.h deleted file mode 100644 index fa5a9e6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Boid.h +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Flocking" in "The Nature of Code" by Daniel Shiffman: http://natureofcode.com/ - * Copyright (c) 2014 Daniel Shiffman - * http://www.shiffman.net - * - * 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. - */ - -// Flocking -// Daniel Shiffman -// The Nature of Code, Spring 2009 - -// Boid class -// Methods for Separation, Cohesion, Alignment added - -class Boid { - public: - - PVector location; - PVector velocity; - PVector acceleration; - float maxforce; // Maximum steering force - float maxspeed; // Maximum speed - - float desiredseparation = 4; - float neighbordist = 8; - byte colorIndex = 0; - float mass; - - boolean enabled = true; - - Boid() {} - - Boid(float x, float y) { - acceleration = PVector(0, 0); - velocity = PVector(randomf(), randomf()); - location = PVector(x, y); - maxspeed = 1.5; - maxforce = 0.05; - } - - static float randomf() { - return mapfloat(random(0, 255), 0, 255, -.5, .5); - } - - static float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) { - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; - } - - void run(Boid boids [], uint8_t boidCount) { - flock(boids, boidCount); - update(); - // wrapAroundBorders(); - // render(); - } - - // Method to update location - void update() { - // Update velocity - velocity += acceleration; - // Limit speed - velocity.limit(maxspeed); - location += velocity; - // Reset acceleration to 0 each cycle - acceleration *= 0; - } - - void applyForce(PVector force) { - // We could add mass here if we want A = F / M - acceleration += force; - } - - void repelForce(PVector obstacle, float radius) { - //Force that drives boid away from obstacle. - - PVector futPos = location + velocity; //Calculate future position for more effective behavior. - PVector dist = obstacle - futPos; - float d = dist.mag(); - - if (d <= radius) { - PVector repelVec = location - obstacle; - repelVec.normalize(); - if (d != 0) { //Don't divide by zero. - // float scale = 1.0 / d; //The closer to the obstacle, the stronger the force. - repelVec.normalize(); - repelVec *= (maxforce * 7); - if (repelVec.mag() < 0) { //Don't let the boids turn around to avoid the obstacle. - repelVec.y = 0; - } - } - applyForce(repelVec); - } - } - - // We accumulate a new acceleration each time based on three rules - void flock(Boid boids [], uint8_t boidCount) { - PVector sep = separate(boids, boidCount); // Separation - PVector ali = align(boids, boidCount); // Alignment - PVector coh = cohesion(boids, boidCount); // Cohesion - // Arbitrarily weight these forces - sep *= 1.5; - ali *= 1.0; - coh *= 1.0; - // Add the force vectors to acceleration - applyForce(sep); - applyForce(ali); - applyForce(coh); - } - - // Separation - // Method checks for nearby boids and steers away - PVector separate(Boid boids [], uint8_t boidCount) { - PVector steer = PVector(0, 0); - int count = 0; - // For every boid in the system, check if it's too close - for (int i = 0; i < boidCount; i++) { - Boid other = boids[i]; - if (!other.enabled) - continue; - float d = location.dist(other.location); - // If the distance is greater than 0 and less than an arbitrary amount (0 when you are yourself) - if ((d > 0) && (d < desiredseparation)) { - // Calculate vector pointing away from neighbor - PVector diff = location - other.location; - diff.normalize(); - diff /= d; // Weight by distance - steer += diff; - count++; // Keep track of how many - } - } - // Average -- divide by how many - if (count > 0) { - steer /= (float) count; - } - - // As long as the vector is greater than 0 - if (steer.mag() > 0) { - // Implement Reynolds: Steering = Desired - Velocity - steer.normalize(); - steer *= maxspeed; - steer -= velocity; - steer.limit(maxforce); - } - return steer; - } - - // Alignment - // For every nearby boid in the system, calculate the average velocity - PVector align(Boid boids [], uint8_t boidCount) { - PVector sum = PVector(0, 0); - int count = 0; - for (int i = 0; i < boidCount; i++) { - Boid other = boids[i]; - if (!other.enabled) - continue; - float d = location.dist(other.location); - if ((d > 0) && (d < neighbordist)) { - sum += other.velocity; - count++; - } - } - if (count > 0) { - sum /= (float) count; - sum.normalize(); - sum *= maxspeed; - PVector steer = sum - velocity; - steer.limit(maxforce); - return steer; - } - else { - return PVector(0, 0); - } - } - - // Cohesion - // For the average location (i.e. center) of all nearby boids, calculate steering vector towards that location - PVector cohesion(Boid boids [], uint8_t boidCount) { - PVector sum = PVector(0, 0); // Start with empty vector to accumulate all locations - int count = 0; - for (int i = 0; i < boidCount; i++) { - Boid other = boids[i]; - if (!other.enabled) - continue; - float d = location.dist(other.location); - if ((d > 0) && (d < neighbordist)) { - sum += other.location; // Add location - count++; - } - } - if (count > 0) { - sum /= count; - return seek(sum); // Steer towards the location - } - else { - return PVector(0, 0); - } - } - - // A method that calculates and applies a steering force towards a target - // STEER = DESIRED MINUS VELOCITY - PVector seek(PVector target) { - PVector desired = target - location; // A vector pointing from the location to the target - // Normalize desired and scale to maximum speed - desired.normalize(); - desired *= maxspeed; - // Steering = Desired minus Velocity - PVector steer = desired - velocity; - steer.limit(maxforce); // Limit to maximum steering force - return steer; - } - - // A method that calculates a steering force towards a target - // STEER = DESIRED MINUS VELOCITY - void arrive(PVector target) { - PVector desired = target - location; // A vector pointing from the location to the target - float d = desired.mag(); - // Normalize desired and scale with arbitrary damping within 100 pixels - desired.normalize(); - if (d < 4) { - float m = map(d, 0, 100, 0, maxspeed); - desired *= m; - } - else { - desired *= maxspeed; - } - - // Steering = Desired minus Velocity - PVector steer = desired - velocity; - steer.limit(maxforce); // Limit to maximum steering force - applyForce(steer); - //Serial.println(d); - } - - void wrapAroundBorders() { - if (location.x < 0) location.x = VPANEL_W - 1; - if (location.y < 0) location.y = VPANEL_H - 1; - if (location.x >= VPANEL_W) location.x = 0; - if (location.y >= VPANEL_H) location.y = 0; - } - - void avoidBorders() { - PVector desired = velocity; - - if (location.x < 8) desired = PVector(maxspeed, velocity.y); - if (location.x >= VPANEL_W - 8) desired = PVector(-maxspeed, velocity.y); - if (location.y < 8) desired = PVector(velocity.x, maxspeed); - if (location.y >= VPANEL_H - 8) desired = PVector(velocity.x, -maxspeed); - - if (desired != velocity) { - PVector steer = desired - velocity; - steer.limit(maxforce); - applyForce(steer); - } - - if (location.x < 0) location.x = 0; - if (location.y < 0) location.y = 0; - if (location.x >= VPANEL_W) location.x = VPANEL_W - 1; - if (location.y >= VPANEL_H) location.y = VPANEL_H - 1; - } - - bool bounceOffBorders(float bounce) { - bool bounced = false; - - if (location.x >= VPANEL_W) { - location.x = VPANEL_W - 1; - velocity.x *= -bounce; - bounced = true; - } - else if (location.x < 0) { - location.x = 0; - velocity.x *= -bounce; - bounced = true; - } - - if (location.y >= VPANEL_H) { - location.y = VPANEL_H - 1; - velocity.y *= -bounce; - bounced = true; - } - else if (location.y < 0) { - location.y = 0; - velocity.y *= -bounce; - bounced = true; - } - - return bounced; - } - - void render() { - //// Draw a triangle rotated in the direction of velocity - //float theta = velocity.heading2D() + radians(90); - //fill(175); - //stroke(0); - //pushMatrix(); - //translate(location.x,location.y); - //rotate(theta); - //beginShape(TRIANGLES); - //vertex(0, -r*2); - //vertex(-r, r*2); - //vertex(r, r*2); - //endShape(); - //popMatrix(); - //matrix.drawBackgroundPixelRGB888(location.x, location.y, CRGB::Blue); - } -}; - -static const uint8_t AVAILABLE_BOID_COUNT = 40; -Boid boids[AVAILABLE_BOID_COUNT]; diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/ChainedPanelsAuroraDemo.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/ChainedPanelsAuroraDemo.ino deleted file mode 100644 index 957201f..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/ChainedPanelsAuroraDemo.ino +++ /dev/null @@ -1,209 +0,0 @@ -#include - -/* Default library pin configuration for the reference - you can redefine only ones you need later on object creation - -#define R1 25 -#define G1 26 -#define BL1 27 -#define R2 14 -#define G2 12 -#define BL2 13 -#define CH_A 23 -#define CH_B 19 -#define CH_C 5 -#define CH_D 17 -#define CH_E -1 // assign to any available pin if using two panels or 64x64 panels with 1/32 scan -#define CLK 16 -#define LAT 4 -#define OE 15 - -*/ - - -/* -------------------------- Display Config Initialisation -------------------- */ -// Assume we have four 64x32 panels daisy-chained and ESP32 attached to the bottom right corner -#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. -#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - -#define NUM_ROWS 2 // Number of rows of chained INDIVIDUAL PANELS -#define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW -#define PANEL_CHAIN NUM_ROWS*NUM_COLS // total number of panels chained one to another - -// Change this to your needs, for details on VirtualPanel pls see ChainedPanels example -#define SERPENT false -#define TOPDOWN false - -// Virtual Panel dimensions - our combined panel would be a square 4x4 modules with a combined resolution of 128x128 pixels -#define VPANEL_W PANEL_RES_X*NUM_COLS // Kosso: All Pattern files have had the MATRIX_WIDTH and MATRIX_HEIGHT replaced by these. -#define VPANEL_H PANEL_RES_Y*NUM_ROWS // - -// Kosso added: Button with debounce -#define BTN_PIN 0 // Pattern advance. Using EPS32 Boot button. -int buttonState; // the current reading from the input pin -int lastButtonState = LOW; // the previous reading from the input pin -unsigned long lastDebounceTime = 0; // the last time the output pin was toggled -unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers - -// The palettes are set to change every 60 seconds. - -// Kosso added: Non-volatile memory to save last pattern index. -#include -Preferences preferences; -int lastPattern = 0; - - -/* -------------------------- Class Initialisation -------------------------- */ -#include -#include // Used for some mathematics calculations and effects. - -// placeholder for the matrix object -MatrixPanel_I2S_DMA *matrix = nullptr; - -// placeholder for the virtual display object -VirtualMatrixPanel *virtualDisp = nullptr; - -// Aurora related -#include "Effects.h" -Effects effects; - -#include "Drawable.h" -#include "Playlist.h" -//#include "Geometry.h" -#include "Patterns.h" -Patterns patterns; - -/* -------------------------- Some variables -------------------------- */ -unsigned long ms_current = 0; -unsigned long ms_previous = 0; -unsigned long ms_animation_max_duration = 20000; // 10 seconds -unsigned long next_frame = 0; - -void listPatterns(); - -void setup() -{ - // Setup serial interface - Serial.begin(115200); - delay(250); - - // Added a button to manually advance the pattern index. - pinMode(BTN_PIN, INPUT); - // For saving last pattern index. TO reboot with same. - preferences.begin("RGBMATRIX", false); - lastPattern = preferences.getInt("lastPattern", 0); - - // Configure your matrix setup here - HUB75_I2S_CFG mxconfig(PANEL_RES_X, PANEL_RES_Y, PANEL_CHAIN); - - // custom pin mapping (if required) - //HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK}; - //mxconfig.gpio = _pins; - - // in case that we use panels based on FM6126A chip, we can change that - //mxconfig.driver = HUB75_I2S_CFG::FM6126A; - - // FM6126A panels could be cloked at 20MHz with no visual artefacts - // mxconfig.i2sspeed = HUB75_I2S_CFG::HZ_20M; - - // OK, now we can create our matrix object - matrix = new MatrixPanel_I2S_DMA(mxconfig); - - // let's adjust default brightness to about 75% - matrix->setBrightness8(96); // range is 0-255, 0 - 0%, 255 - 100% - - // Allocate memory and start DMA display - if( not matrix->begin() ) - Serial.println("****** !KABOOM! I2S memory allocation failed ***********"); - - // create VirtualDisplay object based on our newly created dma_display object - virtualDisp = new VirtualMatrixPanel((*matrix), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, SERPENT, TOPDOWN); - - Serial.println("**************** Starting Aurora Effects Demo ****************"); - - Serial.print("MATRIX_WIDTH: "); Serial.println(PANEL_RES_X*PANEL_CHAIN); - Serial.print("MATRIX_HEIGHT: "); Serial.println(PANEL_RES_Y); - -#ifdef VPANEL_W - Serial.println("VIRTUAL PANEL WIDTH " + String(VPANEL_W)); - Serial.println("VIRTUAL PANEL HEIGHT " + String(VPANEL_H)); -#endif - - // setup the effects generator - effects.Setup(); - - delay(500); - Serial.println("Effects being loaded: "); - listPatterns(); - - Serial.println("LastPattern index: " + String(lastPattern)); - - patterns.setPattern(lastPattern); // // simple noise - patterns.start(); - - Serial.print("Starting with pattern: "); - Serial.println(patterns.getCurrentPatternName()); - - preferences.end(); - -} - - -void patternAdvance(){ - // Go to next pattern in the list (se Patterns.h) - patterns.stop(); - patterns.moveRandom(1); - //patterns.move(1); - patterns.start(); - // Select a random palette as well - effects.RandomPalette(); - Serial.print("Changing pattern to: "); - Serial.println(patterns.getCurrentPatternName()); - //Serial.println(patterns.getPatternIndex()); - //lastPattern = patterns.getPatternIndex(); - // Save last index. - preferences.begin("RGBMATRIX", false); - preferences.putInt("lastPattern", lastPattern); - preferences.end(); - -} - -void loop() -{ - // Boot button Pattern advance with debounce - int reading = digitalRead(BTN_PIN); - if (reading != lastButtonState) { - lastDebounceTime = millis(); - } - - if ((millis() - lastDebounceTime) > debounceDelay) { - if (reading != buttonState) { - buttonState = reading; - if (buttonState == LOW) { - Serial.println("NEXT PATTERN ..."); - patternAdvance(); - } - } - } - lastButtonState = reading; - // end button debounce - - ms_current = millis(); - - if ( (ms_current - ms_previous) > ms_animation_max_duration ) - { - patternAdvance(); - // just auto-change the palette - effects.RandomPalette(); - ms_previous = ms_current; - } - - if ( next_frame < ms_current) - next_frame = patterns.drawFrame() + ms_current; - -} - - -void listPatterns() { - patterns.listPatterns(); -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Drawable.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Drawable.h deleted file mode 100644 index b2169fe..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Drawable.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Drawable_H -#define Drawable_H - -class Drawable{ -public: - char* name; - - virtual bool isRunnable() { - return false; - } - - virtual bool isPlaylist() { - return false; - } - - // a single frame should be drawn as fast as possible, without any delay or blocking - // return how many millisecond delay is requested before the next call to drawFrame() - virtual unsigned int drawFrame() { - matrix->fillScreen(0); - //backgroundLayer.fillScreen({ 0, 0, 0 }); - return 0; - }; - - virtual void printTesting() - { - Serial.println("Testing..."); - } - - virtual void start() {}; - virtual void stop() {}; -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Effects.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Effects.h deleted file mode 100644 index 3d4affb..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Effects.h +++ /dev/null @@ -1,852 +0,0 @@ - -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Funky Clouds" by Stefan Petrick: https://gist.github.com/anonymous/876f908333cd95315c35 - * Portions of this code are adapted from "NoiseSmearing" by Stefan Petrick: https://gist.github.com/StefanPetrick/9ee2f677dbff64e3ba7a - * Copyright (c) 2014 Stefan Petrick - * http://www.stefan-petrick.de/wordpress_beta - * - * 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. - */ - -#ifndef Effects_H -#define Effects_H - -/* ---------------------------- GLOBAL CONSTANTS ----------------------------- */ - -const int MATRIX_CENTER_X = VPANEL_W / 2; -const int MATRIX_CENTER_Y = VPANEL_H / 2; -// US vs GB, huh? :) -//const byte MATRIX_CENTRE_X = MATRIX_CENTER_X - 1; -//const byte MATRIX_CENTRE_Y = MATRIX_CENTER_Y - 1; -#define MATRIX_CENTRE_X MATRIX_CENTER_X -#define MATRIX_CENTRE_Y MATRIX_CENTER_Y - - -const uint16_t NUM_LEDS = (VPANEL_W * VPANEL_H) + 1; // one led spare to capture out of bounds - -// forward declaration -uint16_t XY16( uint16_t x, uint16_t y); - -/* Convert x,y co-ordinate to flat array index. - * x and y positions start from 0, so must not be >= 'real' panel width or height - * (i.e. 64 pixels or 32 pixels.). Max value: VPANEL_W-1 etc. - * Ugh... uint8_t - really??? this weak method can't cope with 256+ pixel matrices :( - */ -uint16_t XY( uint8_t x, uint8_t y) -{ - return XY16(x, y); -} - -/** - * The one for 256+ matrices - * otherwise this: - * for (uint8_t i = 0; i < VPANEL_W; i++) {} - * turns into an infinite loop - */ -uint16_t XY16( uint16_t x, uint16_t y) -{ - if( x >= VPANEL_W) return 0; - if( y >= VPANEL_H) return 0; - - return (y * VPANEL_W) + x + 1; // everything offset by one to compute out of bounds stuff - never displayed by ShowFrame() -} - - -uint8_t beatcos8(accum88 beats_per_minute, uint8_t lowest = 0, uint8_t highest = 255, uint32_t timebase = 0, uint8_t phase_offset = 0) -{ - uint8_t beat = beat8(beats_per_minute, timebase); - uint8_t beatcos = cos8(beat + phase_offset); - uint8_t rangewidth = highest - lowest; - uint8_t scaledbeat = scale8(beatcos, rangewidth); - uint8_t result = lowest + scaledbeat; - return result; -} - -uint8_t mapsin8(uint8_t theta, uint8_t lowest = 0, uint8_t highest = 255) { - uint8_t beatsin = sin8(theta); - uint8_t rangewidth = highest - lowest; - uint8_t scaledbeat = scale8(beatsin, rangewidth); - uint8_t result = lowest + scaledbeat; - return result; -} - -uint8_t mapcos8(uint8_t theta, uint8_t lowest = 0, uint8_t highest = 255) { - uint8_t beatcos = cos8(theta); - uint8_t rangewidth = highest - lowest; - uint8_t scaledbeat = scale8(beatcos, rangewidth); - uint8_t result = lowest + scaledbeat; - return result; -} - -// Array of temperature readings at each simulation cell -//byte heat[NUM_LEDS]; // none of the currently enabled effects uses this - -uint32_t noise_x; -uint32_t noise_y; -uint32_t noise_z; -uint32_t noise_scale_x; -uint32_t noise_scale_y; - -//uint8_t noise[VPANEL_W][VPANEL_H]; -uint8_t **noise = nullptr; // we will allocate mem later -uint8_t noisesmoothing; - -class Effects { -public: - CRGB *leds; - - Effects(){ - // we do dynamic allocation for leds buffer, otherwise esp32 toolchain can't link static arrays of such a big size for 256+ matrices - leds = (CRGB *)malloc(NUM_LEDS * sizeof(CRGB)); - - // allocate mem for noise effect - // (there should be some guards for malloc errors eventually) - noise = (uint8_t **)malloc(VPANEL_W * sizeof(uint8_t *)); - for (int i = 0; i < VPANEL_W; ++i) { - noise[i] = (uint8_t *)malloc(VPANEL_H * sizeof(uint8_t)); - } - - ClearFrame(); - } - ~Effects(){ - free(leds); - for (int i = 0; i < VPANEL_W; ++i) { - free(noise[i]); - } - free(noise); - } - - /* The only 'framebuffer' we have is what is contained in the leds and leds2 variables. - * We don't store what the color a particular pixel might be, other than when it's turned - * into raw electrical signal output gobbly-gook (i.e. the DMA matrix buffer), but this * is not reversible. - * - * As such, any time these effects want to write a pixel color, we first have to update - * the leds or leds2 array, and THEN write it to the RGB panel. This enables us to 'look up' the array to see what a pixel color was previously, each drawFrame(). - */ - void drawBackgroundFastLEDPixelCRGB(int16_t x, int16_t y, CRGB color) - { - leds[XY(x, y)] = color; - //matrix.drawPixelRGB888(x, y, color.r, color.g, color.b); - } - - // write one pixel with the specified color from the current palette to coordinates - void Pixel(int x, int y, uint8_t colorIndex) { - leds[XY(x, y)] = ColorFromCurrentPalette(colorIndex); - //matrix.drawPixelRGB888(x, y, temp.r, temp.g, temp.b); // now draw it? - } - - void PrepareFrame() { - // leds = (CRGB*) backgroundLayer.backBuffer(); - } - - void ShowFrame() { - //#if (FASTLED_VERSION >= 3001000) - // nblendPaletteTowardPalette(currentPalette, targetPalette, 24); - //#else - currentPalette = targetPalette; - //#endif - - // backgroundLayer.swapBuffers(); - // leds = (CRGB*) backgroundLayer.backBuffer(); - // LEDS.countFPS(); - - for (int y=0; ydrawPixelRGB888( x, y, leds[_pixel].r, leds[_pixel].g, leds[_pixel].b); - } // end loop to copy fast led to the dma matrix - } - } - - // scale the brightness of the screenbuffer down - void DimAll(byte value) - { - for (int i = 0; i < NUM_LEDS; i++) - { - leds[i].nscale8(value); - } - } - - void ClearFrame() - { - memset(leds, 0x00, NUM_LEDS * sizeof(CRGB)); // flush - } - - - -/* - void CircleStream(uint8_t value) { - DimAll(value); ShowFrame(); - - for (uint8_t offset = 0; offset < MATRIX_CENTER_X; offset++) { - boolean hasprev = false; - uint16_t prevxy = 0; - - for (uint8_t theta = 0; theta < 255; theta++) { - uint8_t x = mapcos8(theta, offset, (VPANEL_W - 1) - offset); - uint8_t y = mapsin8(theta, offset, (VPANEL_H - 1) - offset); - - uint16_t xy = XY(x, y); - - if (hasprev) { - leds[prevxy] += leds[xy]; - } - - prevxy = xy; - hasprev = true; - } - } - - for (uint8_t x = 0; x < VPANEL_W; x++) { - for (uint8_t y = 0; y < VPANEL_H; y++) { - uint16_t xy = XY(x, y); - leds[xy] = leds2[xy]; - leds[xy].nscale8(value); - leds2[xy].nscale8(value); - } - } - } -*/ - - // palettes - static const int paletteCount = 10; - int paletteIndex = -1; - TBlendType currentBlendType = LINEARBLEND; - CRGBPalette16 currentPalette; - CRGBPalette16 targetPalette; - char* currentPaletteName; - - static const int HeatColorsPaletteIndex = 6; - static const int RandomPaletteIndex = 9; - - void Setup() { - currentPalette = RainbowColors_p; - loadPalette(0); - NoiseVariablesSetup(); - } - - void CyclePalette(int offset = 1) { - loadPalette(paletteIndex + offset); - } - - void RandomPalette() { - loadPalette(RandomPaletteIndex); - } - - void loadPalette(int index) { - paletteIndex = index; - - if (paletteIndex >= paletteCount) - paletteIndex = 0; - else if (paletteIndex < 0) - paletteIndex = paletteCount - 1; - - switch (paletteIndex) { - case 0: - targetPalette = RainbowColors_p; - currentPaletteName = (char *)"Rainbow"; - break; - //case 1: - // targetPalette = RainbowStripeColors_p; - // currentPaletteName = (char *)"RainbowStripe"; - // break; - case 1: - targetPalette = OceanColors_p; - currentPaletteName = (char *)"Ocean"; - break; - case 2: - targetPalette = CloudColors_p; - currentPaletteName = (char *)"Cloud"; - break; - case 3: - targetPalette = ForestColors_p; - currentPaletteName = (char *)"Forest"; - break; - case 4: - targetPalette = PartyColors_p; - currentPaletteName = (char *)"Party"; - break; - case 5: - setupGrayscalePalette(); - currentPaletteName = (char *)"Grey"; - break; - case HeatColorsPaletteIndex: - targetPalette = HeatColors_p; - currentPaletteName = (char *)"Heat"; - break; - case 7: - targetPalette = LavaColors_p; - currentPaletteName = (char *)"Lava"; - break; - case 8: - setupIcePalette(); - currentPaletteName = (char *)"Ice"; - break; - case RandomPaletteIndex: - loadPalette(random(0, paletteCount - 1)); - paletteIndex = RandomPaletteIndex; - currentPaletteName = (char *)"Random"; - break; - } - } - - void setPalette(String paletteName) { - if (paletteName == "Rainbow") - loadPalette(0); - //else if (paletteName == "RainbowStripe") - // loadPalette(1); - else if (paletteName == "Ocean") - loadPalette(1); - else if (paletteName == "Cloud") - loadPalette(2); - else if (paletteName == "Forest") - loadPalette(3); - else if (paletteName == "Party") - loadPalette(4); - else if (paletteName == "Grayscale") - loadPalette(5); - else if (paletteName == "Heat") - loadPalette(6); - else if (paletteName == "Lava") - loadPalette(7); - else if (paletteName == "Ice") - loadPalette(8); - else if (paletteName == "Random") - RandomPalette(); - } - - void listPalettes() { - Serial.println(F("{")); - Serial.print(F(" \"count\": ")); - Serial.print(paletteCount); - Serial.println(","); - Serial.println(F(" \"results\": [")); - - String paletteNames [] = { - "Rainbow", - // "RainbowStripe", - "Ocean", - "Cloud", - "Forest", - "Party", - "Grayscale", - "Heat", - "Lava", - "Ice", - "Random" - }; - - for (int i = 0; i < paletteCount; i++) { - Serial.print(F(" \"")); - Serial.print(paletteNames[i]); - if (i == paletteCount - 1) - Serial.println(F("\"")); - else - Serial.println(F("\",")); - } - - Serial.println(" ]"); - Serial.println("}"); - } - - void setupGrayscalePalette() { - targetPalette = CRGBPalette16(CRGB::Black, CRGB::White); - } - - void setupIcePalette() { - targetPalette = CRGBPalette16(CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White); - } - - // Oscillators and Emitters - - // the oscillators: linear ramps 0-255 - byte osci[6]; - - // sin8(osci) swinging between 0 to VPANEL_W - 1 - byte p[6]; - - // set the speeds (and by that ratios) of the oscillators here - void MoveOscillators() { - osci[0] = osci[0] + 5; - osci[1] = osci[1] + 2; - osci[2] = osci[2] + 3; - osci[3] = osci[3] + 4; - osci[4] = osci[4] + 1; - if (osci[4] % 2 == 0) - osci[5] = osci[5] + 1; // .5 - for (int i = 0; i < 4; i++) { - p[i] = map8(sin8(osci[i]), 0, VPANEL_W - 1); //why? to keep the result in the range of 0-VPANEL_W (matrix size) - } - } - - - // All the caleidoscope functions work directly within the screenbuffer (leds array). - // Draw whatever you like in the area x(0-15) and y (0-15) and then copy it arround. - - // rotates the first 16x16 quadrant 3 times onto a 32x32 (+90 degrees rotation for each one) - void Caleidoscope1() { - for (int x = 0; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < MATRIX_CENTER_Y; y++) { - leds[XY16(VPANEL_W - 1 - x, y)] = leds[XY16(x, y)]; - leds[XY16(VPANEL_W - 1 - x, VPANEL_H - 1 - y)] = leds[XY16(x, y)]; - leds[XY16(x, VPANEL_H - 1 - y)] = leds[XY16(x, y)]; - } - } - } - - - // mirror the first 16x16 quadrant 3 times onto a 32x32 - void Caleidoscope2() { - for (int x = 0; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < MATRIX_CENTER_Y; y++) { - leds[XY16(VPANEL_W - 1 - x, y)] = leds[XY16(y, x)]; - leds[XY16(x, VPANEL_H - 1 - y)] = leds[XY16(y, x)]; - leds[XY16(VPANEL_W - 1 - x, VPANEL_H - 1 - y)] = leds[XY16(x, y)]; - } - } - } - - // copy one diagonal triangle into the other one within a 16x16 - void Caleidoscope3() { - for (int x = 0; x <= MATRIX_CENTRE_X && x < VPANEL_H; x++) { - for (int y = 0; y <= x && y= 0; y--) { - leds[XY16(x, y)] = leds[XY16(y, x)]; - } - } - } - - void Caleidoscope6() { - for (int x = 1; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 7)] = leds[XY16(x, 0)]; - } //a - for (int x = 2; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 6)] = leds[XY16(x, 1)]; - } //b - for (int x = 3; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 5)] = leds[XY16(x, 2)]; - } //c - for (int x = 4; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 4)] = leds[XY16(x, 3)]; - } //d - for (int x = 5; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 3)] = leds[XY16(x, 4)]; - } //e - for (int x = 6; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 2)] = leds[XY16(x, 5)]; - } //f - for (int x = 7; x < MATRIX_CENTER_X; x++) { - leds[XY16(7 - x, 1)] = leds[XY16(x, 6)]; - } //g - } - - // create a square twister to the left or counter-clockwise - // x and y for center, r for radius - void SpiralStream(int x, int y, int r, byte dimm) { - for (int d = r; d >= 0; d--) { // from the outside to the inside - for (int i = x - d; i <= x + d; i++) { - leds[XY16(i, y - d)] += leds[XY16(i + 1, y - d)]; // lowest row to the right - leds[XY16(i, y - d)].nscale8(dimm); - } - for (int i = y - d; i <= y + d; i++) { - leds[XY16(x + d, i)] += leds[XY16(x + d, i + 1)]; // right column up - leds[XY16(x + d, i)].nscale8(dimm); - } - for (int i = x + d; i >= x - d; i--) { - leds[XY16(i, y + d)] += leds[XY16(i - 1, y + d)]; // upper row to the left - leds[XY16(i, y + d)].nscale8(dimm); - } - for (int i = y + d; i >= y - d; i--) { - leds[XY16(x - d, i)] += leds[XY16(x - d, i - 1)]; // left column down - leds[XY16(x - d, i)].nscale8(dimm); - } - } - } - - // expand everything within a circle - void Expand(int centerX, int centerY, int radius, byte dimm) { - if (radius == 0) - return; - - int currentRadius = radius; - - while (currentRadius > 0) { - int a = radius, b = 0; - int radiusError = 1 - a; - - int nextRadius = currentRadius - 1; - int nextA = nextRadius - 1, nextB = 0; - int nextRadiusError = 1 - nextA; - - while (a >= b) - { - // move them out one pixel on the radius - leds[XY16(a + centerX, b + centerY)] = leds[XY16(nextA + centerX, nextB + centerY)]; - leds[XY16(b + centerX, a + centerY)] = leds[XY16(nextB + centerX, nextA + centerY)]; - leds[XY16(-a + centerX, b + centerY)] = leds[XY16(-nextA + centerX, nextB + centerY)]; - leds[XY16(-b + centerX, a + centerY)] = leds[XY16(-nextB + centerX, nextA + centerY)]; - leds[XY16(-a + centerX, -b + centerY)] = leds[XY16(-nextA + centerX, -nextB + centerY)]; - leds[XY16(-b + centerX, -a + centerY)] = leds[XY16(-nextB + centerX, -nextA + centerY)]; - leds[XY16(a + centerX, -b + centerY)] = leds[XY16(nextA + centerX, -nextB + centerY)]; - leds[XY16(b + centerX, -a + centerY)] = leds[XY16(nextB + centerX, -nextA + centerY)]; - - // dim them - leds[XY16(a + centerX, b + centerY)].nscale8(dimm); - leds[XY16(b + centerX, a + centerY)].nscale8(dimm); - leds[XY16(-a + centerX, b + centerY)].nscale8(dimm); - leds[XY16(-b + centerX, a + centerY)].nscale8(dimm); - leds[XY16(-a + centerX, -b + centerY)].nscale8(dimm); - leds[XY16(-b + centerX, -a + centerY)].nscale8(dimm); - leds[XY16(a + centerX, -b + centerY)].nscale8(dimm); - leds[XY16(b + centerX, -a + centerY)].nscale8(dimm); - - b++; - if (radiusError < 0) - radiusError += 2 * b + 1; - else - { - a--; - radiusError += 2 * (b - a + 1); - } - - nextB++; - if (nextRadiusError < 0) - nextRadiusError += 2 * nextB + 1; - else - { - nextA--; - nextRadiusError += 2 * (nextB - nextA + 1); - } - } - - currentRadius--; - } - } - - // give it a linear tail to the right - void StreamRight(byte scale, int fromX = 0, int toX = VPANEL_W, int fromY = 0, int toY = VPANEL_H) - { - for (int x = fromX + 1; x < toX; x++) { - for (int y = fromY; y < toY; y++) { - leds[XY16(x, y)] += leds[XY16(x - 1, y)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int y = fromY; y < toY; y++) - leds[XY16(0, y)].nscale8(scale); - } - - // give it a linear tail to the left - void StreamLeft(byte scale, int fromX = VPANEL_W, int toX = 0, int fromY = 0, int toY = VPANEL_H) - { - for (int x = toX; x < fromX; x++) { - for (int y = fromY; y < toY; y++) { - leds[XY16(x, y)] += leds[XY16(x + 1, y)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int y = fromY; y < toY; y++) - leds[XY16(0, y)].nscale8(scale); - } - - // give it a linear tail downwards - void StreamDown(byte scale) - { - for (int x = 0; x < VPANEL_W; x++) { - for (int y = 1; y < VPANEL_H; y++) { - leds[XY16(x, y)] += leds[XY16(x, y - 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int x = 0; x < VPANEL_W; x++) - leds[XY16(x, 0)].nscale8(scale); - } - - // give it a linear tail upwards - void StreamUp(byte scale) - { - for (int x = 0; x < VPANEL_W; x++) { - for (int y = VPANEL_H - 2; y >= 0; y--) { - leds[XY16(x, y)] += leds[XY16(x, y + 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int x = 0; x < VPANEL_W; x++) - leds[XY16(x, VPANEL_H - 1)].nscale8(scale); - } - - // give it a linear tail up and to the left - void StreamUpAndLeft(byte scale) - { - for (int x = 0; x < VPANEL_W - 1; x++) { - for (int y = VPANEL_H - 2; y >= 0; y--) { - leds[XY16(x, y)] += leds[XY16(x + 1, y + 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - for (int x = 0; x < VPANEL_W; x++) - leds[XY16(x, VPANEL_H - 1)].nscale8(scale); - for (int y = 0; y < VPANEL_H; y++) - leds[XY16(VPANEL_W - 1, y)].nscale8(scale); - } - - // give it a linear tail up and to the right - void StreamUpAndRight(byte scale) - { - for (int x = 0; x < VPANEL_W - 1; x++) { - for (int y = VPANEL_H - 2; y >= 0; y--) { - leds[XY16(x + 1, y)] += leds[XY16(x, y + 1)]; - leds[XY16(x, y)].nscale8(scale); - } - } - // fade the bottom row - for (int x = 0; x < VPANEL_W; x++) - leds[XY16(x, VPANEL_H - 1)].nscale8(scale); - - // fade the right column - for (int y = 0; y < VPANEL_H; y++) - leds[XY16(VPANEL_W - 1, y)].nscale8(scale); - } - - // just move everything one line down - void MoveDown() { - for (int y = VPANEL_H - 1; y > 0; y--) { - for (int x = 0; x < VPANEL_W; x++) { - leds[XY16(x, y)] = leds[XY16(x, y - 1)]; - } - } - } - - // just move everything one line down - void VerticalMoveFrom(int start, int end) { - for (int y = end; y > start; y--) { - for (int x = 0; x < VPANEL_W; x++) { - leds[XY16(x, y)] = leds[XY16(x, y - 1)]; - } - } - } - - // copy the rectangle defined with 2 points x0, y0, x1, y1 - // to the rectangle beginning at x2, x3 - void Copy(byte x0, byte y0, byte x1, byte y1, byte x2, byte y2) { - for (int y = y0; y < y1 + 1; y++) { - for (int x = x0; x < x1 + 1; x++) { - leds[XY16(x + x2 - x0, y + y2 - y0)] = leds[XY16(x, y)]; - } - } - } - - // rotate + copy triangle (MATRIX_CENTER_X*MATRIX_CENTER_X) - void RotateTriangle() { - for (int x = 1; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < x; y++) { - leds[XY16(x, 7 - y)] = leds[XY16(7 - x, y)]; - } - } - } - - // mirror + copy triangle (MATRIX_CENTER_X*MATRIX_CENTER_X) - void MirrorTriangle() { - for (int x = 1; x < MATRIX_CENTER_X; x++) { - for (int y = 0; y < x; y++) { - leds[XY16(7 - y, x)] = leds[XY16(7 - x, y)]; - } - } - } - - // draw static rainbow triangle pattern (MATRIX_CENTER_XxWIDTH / 2) - // (just for debugging) - void RainbowTriangle() { - for (int i = 0; i < MATRIX_CENTER_X; i++) { - for (int j = 0; j <= i; j++) { - Pixel(7 - i, j, i * j * 4); - } - } - } - - void BresenhamLine(int x0, int y0, int x1, int y1, byte colorIndex) - { - BresenhamLine(x0, y0, x1, y1, ColorFromCurrentPalette(colorIndex)); - } - - void BresenhamLine(int x0, int y0, int x1, int y1, CRGB color) - { - int dx = abs(x1 - x0), sx = x0 < x1 ? 1 : -1; - int dy = -abs(y1 - y0), sy = y0 < y1 ? 1 : -1; - int err = dx + dy, e2; - for (;;) { - leds[XY16(x0, y0)] += color; - if (x0 == x1 && y0 == y1) break; - e2 = 2 * err; - if (e2 > dy) { - err += dy; - x0 += sx; - } - if (e2 < dx) { - err += dx; - y0 += sy; - } - } - } - - // write one pixel with the specified color from the current palette to coordinates - /* - void Pixel(int x, int y, uint8_t colorIndex) { - leds[XY(x, y)] = ColorFromCurrentPalette(colorIndex); - matrix.drawBackgroundPixelRGB888(x,y, leds[XY(x, y)]); // now draw it? - } - */ - - CRGB ColorFromCurrentPalette(uint8_t index = 0, uint8_t brightness = 255, TBlendType blendType = LINEARBLEND) { - return ColorFromPalette(currentPalette, index, brightness, currentBlendType); - } - - CRGB HsvToRgb(uint8_t h, uint8_t s, uint8_t v) { - CHSV hsv = CHSV(h, s, v); - CRGB rgb; - hsv2rgb_spectrum(hsv, rgb); - return rgb; - } - - void NoiseVariablesSetup() { - noisesmoothing = 200; - - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - noise_scale_x = 6000; - noise_scale_y = 6000; - } - - void FillNoise() { - for (uint16_t i = 0; i < VPANEL_W; i++) { - uint32_t ioffset = noise_scale_x * (i - MATRIX_CENTRE_Y); - - for (uint16_t j = 0; j < VPANEL_H; j++) { - uint32_t joffset = noise_scale_y * (j - MATRIX_CENTRE_Y); - - byte data = inoise16(noise_x + ioffset, noise_y + joffset, noise_z) >> 8; - - uint8_t olddata = noise[i][j]; - uint8_t newdata = scale8(olddata, noisesmoothing) + scale8(data, 256 - noisesmoothing); - data = newdata; - - noise[i][j] = data; - } - } - } - - // non leds2 memory version. - void MoveX(byte delta) - { - - CRGB tmp = 0; - - for (int y = 0; y < VPANEL_H; y++) - { - - // Shift Left: https://codedost.com/c/arraypointers-in-c/c-program-shift-elements-array-left-direction/ - // Computationally heavier but doesn't need an entire leds2 array - - tmp = leds[XY16(0, y)]; - for (int m = 0; m < delta; m++) - { - // Do this delta time for each row... computationally expensive potentially. - for(int x = 0; x < VPANEL_W; x++) - { - leds[XY16(x, y)] = leds [XY16(x+1, y)]; - } - - leds[XY16(VPANEL_W-1, y)] = tmp; - } - - - /* - // Shift - for (int x = 0; x < VPANEL_W - delta; x++) { - leds2[XY(x, y)] = leds[XY(x + delta, y)]; - } - - // Wrap around - for (int x = VPANEL_W - delta; x < VPANEL_W; x++) { - leds2[XY(x, y)] = leds[XY(x + delta - VPANEL_W, y)]; - } - */ - } // end row loop - - /* - // write back to leds - for (uint8_t y = 0; y < VPANEL_H; y++) { - for (uint8_t x = 0; x < VPANEL_W; x++) { - leds[XY(x, y)] = leds2[XY(x, y)]; - } - } - */ - } - - void MoveY(byte delta) - { - - CRGB tmp = 0; - for (int x = 0; x < VPANEL_W; x++) - { - tmp = leds[XY16(x, 0)]; - for (int m = 0; m < delta; m++) // moves - { - // Do this delta time for each row... computationally expensive potentially. - for(int y = 0; y < VPANEL_H; y++) - { - leds[XY16(x, y)] = leds [XY16(x, y+1)]; - } - - leds[XY16(x, VPANEL_H-1)] = tmp; - } - } // end column loop - } /// MoveY - - -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Geometry.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Geometry.h deleted file mode 100644 index 4e47557..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Geometry.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from Noel Bundy's work: https://github.com/TwystNeko/Object3d - * Copyright (c) 2014 Noel Bundy - * - * Portions of this code are adapted from the Petty library: https://code.google.com/p/peggy/ - * Copyright (c) 2008 Windell H Oskay. All right reserved. - * - * 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. - */ - -#ifndef Geometry_H -#define Geometry_H - -struct Vertex -{ - float x, y, z; - Vertex() - { - this->set(0, 0, 0); - } - - Vertex(float x, float y, float z) - { - this->set(x, y, z); - } - - void set(float x, float y, float z) - { - this->x = x; - this->y = y; - this->z = z; - } -}; - -struct EdgePoint -{ - int x, y; - boolean visible; - - EdgePoint() - { - this->set(0, 0); - this->visible = false; - } - - void set(int a, int b) - { - this->x = a; - this->y = b; - } -}; - -struct Point -{ - float x, y; - - Point() - { - set(0, 0); - } - - Point(float x, float y) - { - set(x, y); - } - - void set(float x, float y) - { - this->x = x; - this->y = y; - } - -}; - -struct squareFace -{ - int length; - int sommets[4]; - int ed[4]; - - squareFace() - { - set(-1, -1, -1, -1); - } - - squareFace(int a, int b, int c, int d) - { - this->length = 4; - this->sommets[0] = a; - this->sommets[1] = b; - this->sommets[2] = c; - this->sommets[3] = d; - } - - void set(int a, int b, int c, int d) - { - this->length = 4; - this->sommets[0] = a; - this->sommets[1] = b; - this->sommets[2] = c; - this->sommets[3] = d; - } - -}; - -struct triFace -{ - int length; - int sommets[3]; - int ed[3]; - - triFace() - { - set(-1,-1,-1); - } - triFace(int a, int b, int c) - { - this->length =3; - this->sommets[0]=a; - this->sommets[1]=b; - this->sommets[2]=c; - } - void set(int a, int b, int c) - { - this->length =3; - this->sommets[0]=a; - this->sommets[1]=b; - this->sommets[2]=c; - } -}; - -#endif \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PaletteFireKoz.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PaletteFireKoz.h deleted file mode 100644 index 86799ee..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PaletteFireKoz.h +++ /dev/null @@ -1,3 +0,0 @@ -const uint8_t PROGMEM palette_fire[] = {/* RGB888 R,G,B,R,G,B,R,G,B,... */ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x05,0x00,0x00,0x0a,0x00,0x00,0x10,0x00,0x00,0x15,0x00,0x00,0x1b,0x00,0x00,0x20,0x00,0x00,0x25,0x00,0x00,0x2b,0x00,0x00,0x31,0x00,0x00,0x36,0x00,0x00,0x3c,0x00,0x00,0x41,0x00,0x00,0x46,0x00,0x00,0x4c,0x00,0x00,0x52,0x00,0x00,0x57,0x00,0x00,0x5d,0x00,0x00,0x62,0x00,0x00,0x68,0x00,0x00,0x6d,0x00,0x00,0x73,0x00,0x00,0x79,0x00,0x00,0x7e,0x00,0x00,0x83,0x00,0x00,0x89,0x00,0x00,0x8e,0x00,0x00,0x94,0x00,0x00,0x9a,0x00,0x00,0x9f,0x00,0x00,0xa5,0x00,0x00,0xaa,0x00,0x00,0xb0,0x00,0x00,0xb5,0x00,0x00,0xbb,0x00,0x00,0xc0,0x00,0x00,0xc6,0x00,0x00,0xcb,0x00,0x00,0xd1,0x00,0x00,0xd7,0x00,0x00,0xdc,0x00,0x00,0xe1,0x00,0x00,0xe6,0x00,0x00,0xe8,0x02,0x00,0xe9,0x08,0x00,0xe9,0x0f,0x00,0xe9,0x13,0x00,0xe9,0x16,0x00,0xe9,0x1b,0x00,0xe9,0x21,0x00,0xe9,0x26,0x00,0xe9,0x2a,0x00,0xe9,0x2e,0x00,0xe9,0x32,0x00,0xe9,0x37,0x00,0xe9,0x3b,0x00,0xe9,0x3f,0x00,0xe9,0x44,0x00,0xe9,0x4a,0x00,0xe9,0x4e,0x00,0xe9,0x52,0x00,0xe9,0x56,0x00,0xe9,0x5a,0x00,0xe9,0x5d,0x00,0xe9,0x63,0x00,0xe9,0x67,0x00,0xe9,0x6b,0x00,0xe9,0x71,0x00,0xe9,0x77,0x00,0xe9,0x78,0x00,0xe9,0x7c,0x00,0xe9,0x81,0x00,0xe9,0x86,0x00,0xe9,0x8b,0x00,0xe9,0x8f,0x00,0xe9,0x93,0x00,0xe9,0x99,0x00,0xe9,0x9d,0x00,0xe9,0xa0,0x00,0xe9,0xa4,0x00,0xe9,0xaa,0x00,0xe9,0xb0,0x00,0xe9,0xb4,0x00,0xe9,0xb5,0x00,0xe9,0xb9,0x00,0xe9,0xbe,0x00,0xe9,0xc3,0x00,0xe9,0xc9,0x00,0xe9,0xce,0x00,0xe9,0xd2,0x00,0xe9,0xd6,0x00,0xe9,0xd9,0x00,0xe9,0xdd,0x00,0xe9,0xe2,0x00,0xe9,0xe7,0x02,0xe9,0xe9,0x0e,0xe9,0xe9,0x1c,0xe9,0xe9,0x28,0xe9,0xe9,0x38,0xe9,0xe9,0x48,0xe9,0xe9,0x57,0xe9,0xe9,0x67,0xe9,0xe9,0x73,0xe9,0xe9,0x81,0xe9,0xe9,0x90,0xe9,0xe9,0xa1,0xe9,0xe9,0xb1,0xe9,0xe9,0xbf,0xe9,0xe9,0xcb,0xe9,0xe9,0xcb,0xe9,0xe9,0xcd,0xe9,0xe9,0xd9,0xe9,0xe9,0xe5,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe6,0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe0,0xe0,0xe0,0xdc,0xdc,0xdc,0xd8,0xd8,0xd8,0xd2,0xd2,0xd2,0xca,0xca,0xca,0xc1,0xc1,0xc1,0xb7,0xb7,0xb7,0xab,0xab,0xab,0x9d,0x9d,0x9d,0x8f,0x8f,0x8f,0x81,0x81,0x81,0x72,0x72,0x72,0x64,0x64,0x64,0x56,0x56,0x56,0x4a,0x4a,0x4a,0x3e,0x3e,0x3e,0x33,0x33,0x33,0x2a,0x2a,0x2a,0x22,0x22,0x22,0x1b,0x1b,0x1b,0x16,0x16,0x16,0x11,0x11,0x11,0x0d,0x0d,0x0d,0x0b,0x0b,0x0b,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternAttract.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternAttract.h deleted file mode 100644 index dcb6491..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternAttract.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternAttract_H - -class PatternAttract : public Drawable { -private: - const int count = 8; - Attractor attractor; - -public: - PatternAttract() { - name = (char *)"Attract"; - } - - void start() { - int direction = random(0, 2); - if (direction == 0) - direction = -1; - - for (int i = 0; i < count; i++) { - Boid boid = Boid(15, 31 - i); - boid.mass = 1; // random(0.1, 2); - boid.velocity.x = ((float) random(40, 50)) / 100.0; - boid.velocity.x *= direction; - boid.velocity.y = 0; - boid.colorIndex = i * 32; - boids[i] = boid; - //dim = random(170, 250); - } - } - - unsigned int drawFrame() { - // dim all pixels on the display - uint8_t dim = beatsin8(2, 170, 250); - effects.DimAll(dim); - - for (int i = 0; i < count; i++) { - Boid boid = boids[i]; - - PVector force = attractor.attract(boid); - boid.applyForce(force); - - boid.update(); - effects.drawBackgroundFastLEDPixelCRGB(boid.location.x, boid.location.y, effects.ColorFromCurrentPalette(boid.colorIndex)); - - boids[i] = boid; - } - - effects.ShowFrame(); - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternBounce.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternBounce.h deleted file mode 100644 index c0d595a..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternBounce.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternBounce_H - -class PatternBounce : public Drawable { -private: - static const int count = 32; - PVector gravity = PVector(0, 0.0125); - -public: - PatternBounce() { - name = (char *)"Bounce"; - } - - void start() { - unsigned int colorWidth = 256 / count; - for (int i = 0; i < count; i++) { - Boid boid = Boid(i, 0); - boid.velocity.x = 0; - boid.velocity.y = i * -0.01; - boid.colorIndex = colorWidth * i; - boid.maxforce = 10; - boid.maxspeed = 10; - boids[i] = boid; - } - } - - unsigned int drawFrame() { - // dim all pixels on the display - effects.DimAll(170); effects.ShowFrame(); - - for (int i = 0; i < count; i++) { - Boid boid = boids[i]; - - boid.applyForce(gravity); - - boid.update(); - - effects.drawBackgroundFastLEDPixelCRGB(boid.location.x, boid.location.y, effects.ColorFromCurrentPalette(boid.colorIndex)); - - if (boid.location.y >= VPANEL_H - 1) { - boid.location.y = VPANEL_H - 1; - boid.velocity.y *= -1.0; - } - - boids[i] = boid; - } - - return 15; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternCube.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternCube.h deleted file mode 100644 index bebf5c8..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternCube.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from Noel Bundy's work: https://github.com/TwystNeko/Object3d - * Copyright (c) 2014 Noel Bundy - * - * Portions of this code are adapted from the Petty library: https://code.google.com/p/peggy/ - * Copyright (c) 2008 Windell H Oskay. All right reserved. - * - * 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. - */ - -#ifndef PatternCube_H -#define PatternCube_H - -class PatternCube : public Drawable { - private: - float focal = 30; // Focal of the camera - int cubeWidth = 28; // Cube size - float Angx = 20.0, AngxSpeed = 0.05; // rotation (angle+speed) around X-axis - float Angy = 10.0, AngySpeed = 0.05; // rotation (angle+speed) around Y-axis - float Ox = 15.5, Oy = 15.5; // position (x,y) of the frame center - int zCamera = 110; // distance from cube to the eye of the camera - - // Local vertices - Vertex local[8]; - // Camera aligned vertices - Vertex aligned[8]; - // On-screen projected vertices - Point screen[8]; - // Faces - squareFace face[6]; - // Edges - EdgePoint edge[12]; - int nbEdges; - // ModelView matrix - float m00, m01, m02, m10, m11, m12, m20, m21, m22; - - // constructs the cube - void make(int w) - { - nbEdges = 0; - - local[0].set(-w, w, w); - local[1].set(w, w, w); - local[2].set(w, -w, w); - local[3].set(-w, -w, w); - local[4].set(-w, w, -w); - local[5].set(w, w, -w); - local[6].set(w, -w, -w); - local[7].set(-w, -w, -w); - - face[0].set(1, 0, 3, 2); - face[1].set(0, 4, 7, 3); - face[2].set(4, 0, 1, 5); - face[3].set(4, 5, 6, 7); - face[4].set(1, 2, 6, 5); - face[5].set(2, 3, 7, 6); - - int f, i; - for (f = 0; f < 6; f++) - { - for (i = 0; i < face[f].length; i++) - { - face[f].ed[i] = this->findEdge(face[f].sommets[i], face[f].sommets[i ? i - 1 : face[f].length - 1]); - } - } - } - - // finds edges from faces - int findEdge(int a, int b) - { - int i; - for (i = 0; i < nbEdges; i++) - if ((edge[i].x == a && edge[i].y == b) || (edge[i].x == b && edge[i].y == a)) - return i; - edge[nbEdges++].set(a, b); - return i; - } - - // rotates according to angle x&y - void rotate(float angx, float angy) - { - int i; - float cx = cos(angx); - float sx = sin(angx); - float cy = cos(angy); - float sy = sin(angy); - - m00 = cy; - m01 = 0; - m02 = -sy; - m10 = sx * sy; - m11 = cx; - m12 = sx * cy; - m20 = cx * sy; - m21 = -sx; - m22 = cx * cy; - - for (i = 0; i < 8; i++) - { - aligned[i].x = m00 * local[i].x + m01 * local[i].y + m02 * local[i].z; - aligned[i].y = m10 * local[i].x + m11 * local[i].y + m12 * local[i].z; - aligned[i].z = m20 * local[i].x + m21 * local[i].y + m22 * local[i].z + zCamera; - - screen[i].x = floor((Ox + focal * aligned[i].x / aligned[i].z)); - screen[i].y = floor((Oy - focal * aligned[i].y / aligned[i].z)); - } - - for (i = 0; i < 12; i++) - edge[i].visible = false; - - Point *pa, *pb, *pc; - for (i = 0; i < 6; i++) - { - pa = screen + face[i].sommets[0]; - pb = screen + face[i].sommets[1]; - pc = screen + face[i].sommets[2]; - - boolean back = ((pb->x - pa->x) * (pc->y - pa->y) - (pb->y - pa->y) * (pc->x - pa->x)) < 0; - if (!back) - { - int j; - for (j = 0; j < 4; j++) - { - edge[face[i].ed[j]].visible = true; - } - } - } - } - - byte hue = 0; - int step = 0; - - public: - PatternCube() { - name = (char *)"Cube"; - make(cubeWidth); - } - - unsigned int drawFrame() { - uint8_t blurAmount = beatsin8(2, 10, 255); - -#if FASTLED_VERSION >= 3001000 - blur2d(effects.leds, VPANEL_W, VPANEL_H, blurAmount); -#else - effects.DimAll(blurAmount); effects.ShowFrame(); -#endif - - zCamera = beatsin8(2, 100, 140); - AngxSpeed = beatsin8(3, 1, 10) / 100.0f; - AngySpeed = beatcos8(5, 1, 10) / 100.0f; - - // Update values - Angx += AngxSpeed; - Angy += AngySpeed; - if (Angx >= TWO_PI) - Angx -= TWO_PI; - if (Angy >= TWO_PI) - Angy -= TWO_PI; - - rotate(Angx, Angy); - - // Draw cube - int i; - - CRGB color = effects.ColorFromCurrentPalette(hue, 128); - - // Backface - EdgePoint *e; - for (i = 0; i < 12; i++) - { - e = edge + i; - if (!e->visible) { - matrix.drawLine(screen[e->x].x, screen[e->x].y, screen[e->y].x, screen[e->y].y, color); - } - } - - color = effects.ColorFromCurrentPalette(hue, 255); - - // Frontface - for (i = 0; i < 12; i++) - { - e = edge + i; - if (e->visible) - { - matrix.drawLine(screen[e->x].x, screen[e->x].y, screen[e->y].x, screen[e->y].y, color); - } - } - - step++; - if (step == 8) { - step = 0; - hue++; - } - - effects.ShowFrame(); - - return 20; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternElectricMandala.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternElectricMandala.h deleted file mode 100644 index 1977a83..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternElectricMandala.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Funky Noise" by Stefan Petrick: https://github.com/StefanPetrick/FunkyNoise - * Copyright (c) 2014 Stefan Petrick - * http://www.stefan-petrick.de/wordpress_beta - * - * 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. - */ - -#ifndef PatternElectricMandala_H - -class PatternElectricMandala : public Drawable { - private: - - // The coordinates for 16-bit noise spaces. -#define NUM_LAYERS 1 - - // used for the random based animations - int16_t dx; - int16_t dy; - int16_t dz; - int16_t dsx; - int16_t dsy; - - public: - PatternElectricMandala() { - name = (char *)"ElectricMandala"; - } - - void start() { - // set to reasonable values to avoid a black out - noisesmoothing = 200; - - // just any free input pin - //random16_add_entropy(analogRead(18)); - - // fill coordinates with random values - // set zoom levels - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - noise_scale_x = 6000; - noise_scale_y = 6000; - - // for the random movement - dx = random8(); - dy = random8(); - dz = random8(); - dsx = random8(); - dsy = random8(); - } - - unsigned int drawFrame() { -#if FASTLED_VERSION >= 3001000 - // a new parameter set every 15 seconds - EVERY_N_SECONDS(15) { - //SetupRandomPalette3(); - dy = random16(500) - 250; // random16(2000) - 1000 is pretty fast but works fine, too - dx = random16(500) - 250; - dz = random16(500) - 250; - noise_scale_x = random16(10000) + 2000; - noise_scale_y = random16(10000) + 2000; - } -#endif - - noise_y += dy; - noise_x += dx; - noise_z += dz; - - effects.FillNoise(); - ShowNoiseLayer(0, 1, 0); - - effects.Caleidoscope3(); - effects.Caleidoscope1(); - - effects.ShowFrame(); - - return 30; - } - - // show just one layer - void ShowNoiseLayer(byte layer, byte colorrepeat, byte colorshift) { - for (uint16_t i = 0; i < VPANEL_W; i++) { - for (uint16_t j = 0; j < VPANEL_H; j++) { - - uint8_t color = noise[i][j]; - - uint8_t bri = color; - - // assign a color depending on the actual palette - CRGB pixel = ColorFromPalette(effects.currentPalette, colorrepeat * (color + colorshift), bri); - - effects.leds[XY16(i, j)] = pixel; - } - } - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFire.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFire.h deleted file mode 100644 index 731aff9..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFire.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from FastLED Fire2012 example by Mark Kriegsman: https://github.com/FastLED/FastLED/tree/master/examples/Fire2012WithPalette - * Copyright (c) 2013 FastLED - * - * 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. - */ - -#ifndef PatternFire_H -#define PatternFire_H - -#ifndef Effects_H -#include "Effects.h" -#endif - -class PatternFire : public Drawable { - private: - - public: - PatternFire() { - name = (char *)"Fire"; - } - - // There are two main parameters you can play with to control the look and - // feel of your fire: COOLING (used in step 1 above), and SPARKING (used - // in step 3 above). - // - // cooling: How much does the air cool as it rises? - // Less cooling = taller flames. More cooling = shorter flames. - // Default 55, suggested range 20-100 - int cooling = 100; - - // sparking: What chance (out of 255) is there that a new spark will be lit? - // Higher chance = more roaring fire. Lower chance = more flickery fire. - // Default 120, suggested range 50-200. - unsigned int sparking = 100; - - unsigned int drawFrame() { - // Add entropy to random number generator; we use a lot of it. - random16_add_entropy( random16()); - - effects.DimAll(235); - - for (int x = 0; x < VPANEL_W; x++) { - // Step 1. Cool down every cell a little - for (int y = 0; y < VPANEL_H; y++) { - int xy = XY(x, y); - heat[xy] = qsub8(heat[xy], random8(0, ((cooling * 10) / VPANEL_H) + 2)); - } - - // Step 2. Heat from each cell drifts 'up' and diffuses a little - for (int y = 0; y < VPANEL_H; y++) { - heat[XY(x, y)] = (heat[XY(x, y + 1)] + heat[XY(x, y + 2)] + heat[XY(x, y + 2)]) / 3; - } - - // Step 2. Randomly ignite new 'sparks' of heat - if (random8() < sparking) { - // int x = (p[0] + p[1] + p[2]) / 3; - - int xy = XY(x, VPANEL_H - 1); - heat[xy] = qadd8(heat[xy], random8(160, 255)); - } - - // Step 4. Map from heat cells to LED colors - for (int y = 0; y < VPANEL_H; y++) { - int xy = XY(x, y); - byte colorIndex = heat[xy]; - - // Recommend that you use values 0-240 rather than - // the usual 0-255, as the last 15 colors will be - // 'wrapping around' from the hot end to the cold end, - // which looks wrong. - colorIndex = scale8(colorIndex, 200); - - // override color 0 to ensure a black background? - if (colorIndex != 0) - // effects.leds[xy] = CRGB::Black; - // else - effects.leds[xy] = effects.ColorFromCurrentPalette(colorIndex); - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(2); - effects.MoveFractionalNoiseX(2); - - - effects.ShowFrame(); - - return 15; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFireKoz.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFireKoz.h deleted file mode 100644 index c553d6b..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFireKoz.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - Aurora: https://github.com/pixelmatix/aurora - Copyright (c) 2014 Jason Coon - - Added by @Kosso. Cobbled together from various places which I can't remember. I'll update this when I track it down. - Requires PaletteFireKoz.h - - 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. -*/ - -#ifndef PatternFireKoz_H -#define PatternFireKoz_H - -class PatternFireKoz : public Drawable { - private: - - const int FIRE_HEIGHT = 800; - - int Bit = 0, NBit = 1; - float fire_c; - // might not need this buffer here... there some led buffers set up in Effects.h - uint8_t fireBuffer[VPANEL_W][VPANEL_H][2]; - - public: - PatternFireKoz() { - name = (char *)"FireKoz"; - } - - unsigned int drawFrame() { - - for (int x = 1; x < VPANEL_W - 1; x++) - { - fireBuffer[x][VPANEL_H - 2][Bit] = random(0, FIRE_HEIGHT); - if (random(0, 100) > 80) - { - fireBuffer[x][VPANEL_H - 2][Bit] = 0; - fireBuffer[x][VPANEL_H - 3][Bit] = 0; - } - } - for (int y = 1; y < VPANEL_H - 1; y++) - { - for (int x = 1; x < VPANEL_W - 1; x++) - { - fire_c = (fireBuffer[x - 1][y][Bit] + - fireBuffer[x + 1][y][Bit] + - fireBuffer[x][y - 1][Bit] + - fireBuffer[x][y + 1][Bit] + - fireBuffer[x][y][Bit]) / - 5.0; - - fire_c = (fireBuffer[x - 1][y][Bit] + - fireBuffer[x + 1][y][Bit] + - fireBuffer[x][y - 1][Bit] + - fireBuffer[x][y + 1][Bit] + - fireBuffer[x][y][Bit]) / - 5.0; - - if (fire_c > (FIRE_HEIGHT / 2) && fire_c < FIRE_HEIGHT) { - fire_c -= 0.2; - } else if (fire_c > (FIRE_HEIGHT / 4) && fire_c < (FIRE_HEIGHT / 2)) { - fire_c -= 0.4; - } else if (fire_c <= (FIRE_HEIGHT / 8)) { - fire_c -= 0.7; - } else { - fire_c -= 1; - } - if (fire_c < 0) - fire_c = 0; - if (fire_c >= FIRE_HEIGHT + 1) - fire_c = FIRE_HEIGHT - 1; - fireBuffer[x][y - 1][NBit] = fire_c; - int index = (int)fire_c * 3; - if (fire_c == 0) - { - effects.drawBackgroundFastLEDPixelCRGB(x, y, CRGB(0, 0, 0)); - } - else - { - effects.drawBackgroundFastLEDPixelCRGB(x, y, CRGB(palette_fire[index], palette_fire[index + 1], palette_fire[index + 2])); - } - } - } - //display.drawRect(0, 0, VPANEL_W, VPANEL_H, display.color565(25, 25, 25)); - - NBit = Bit; - Bit = 1 - Bit; - - effects.ShowFrame(); - - return 30; // no idea what this is for... - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFlock.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFlock.h deleted file mode 100644 index 3ae31b1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFlock.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from "Flocking" in "The Nature of Code" by Daniel Shiffman: http://natureofcode.com/ - * Copyright (c) 2014 Daniel Shiffman - * http://www.shiffman.net - * - * 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. - */ - -// Flocking -// Daniel Shiffman -// The Nature of Code, Spring 2009 - -// Demonstration of Craig Reynolds' "Flocking" behavior -// See: http://www.red3d.com/cwr/ -// Rules: Cohesion, Separation, Alignment - -#ifndef PatternFlock_H -#define PatternFlock_H - -class PatternFlock : public Drawable { - public: - PatternFlock() { - name = (char *)"Flock"; - } - - static const int boidCount = 10; - Boid predator; - - PVector wind; - byte hue = 0; - bool predatorPresent = true; - - void start() { - for (int i = 0; i < boidCount; i++) { - boids[i] = Boid(15, 15); - boids[i].maxspeed = 0.380; - boids[i].maxforce = 0.015; - } - - predatorPresent = random(0, 2) >= 1; - if (predatorPresent) { - predator = Boid(31, 31); - predatorPresent = true; - predator.maxspeed = 0.385; - predator.maxforce = 0.020; - predator.neighbordist = 16.0; - predator.desiredseparation = 0.0; - } - } - - unsigned int drawFrame() { - effects.DimAll(230); effects.ShowFrame(); - - bool applyWind = random(0, 255) > 250; - if (applyWind) { - wind.x = Boid::randomf() * .015; - wind.y = Boid::randomf() * .015; - } - - CRGB color = effects.ColorFromCurrentPalette(hue); - - for (int i = 0; i < boidCount; i++) { - Boid * boid = &boids[i]; - - if (predatorPresent) { - // flee from predator - boid->repelForce(predator.location, 10); - } - - boid->run(boids, boidCount); - boid->wrapAroundBorders(); - PVector location = boid->location; - // PVector velocity = boid->velocity; - // backgroundLayer.drawLine(location.x, location.y, location.x - velocity.x, location.y - velocity.y, color); - // effects.leds[XY(location.x, location.y)] += color; - effects.drawBackgroundFastLEDPixelCRGB(location.x, location.y, color); - - if (applyWind) { - boid->applyForce(wind); - applyWind = false; - } - } - - if (predatorPresent) { - predator.run(boids, boidCount); - predator.wrapAroundBorders(); - color = effects.ColorFromCurrentPalette(hue + 128); - PVector location = predator.location; - // PVector velocity = predator.velocity; - // backgroundLayer.drawLine(location.x, location.y, location.x - velocity.x, location.y - velocity.y, color); - // effects.leds[XY(location.x, location.y)] += color; - effects.drawBackgroundFastLEDPixelCRGB(location.x, location.y, color); - } - - EVERY_N_MILLIS(200) { - hue++; - } - - EVERY_N_SECONDS(30) { - predatorPresent = !predatorPresent; - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFlowField.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFlowField.h deleted file mode 100644 index be91ff2..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternFlowField.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternFlowField_H - -class PatternFlowField : public Drawable { - public: - PatternFlowField() { - name = (char *)"FlowField"; - } - - uint16_t x; - uint16_t y; - uint16_t z; - - uint16_t speed = 1; - uint16_t scale = 26; - - static const int count = 40; - - byte hue = 0; - - void start() { - x = random16(); - y = random16(); - z = random16(); - - for (int i = 0; i < count; i++) { - boids[i] = Boid(random(VPANEL_W), 0); - } - } - - unsigned int drawFrame() { - effects.DimAll(240); - - // CRGB color = effects.ColorFromCurrentPalette(hue); - - for (int i = 0; i < count; i++) { - Boid * boid = &boids[i]; - - int ioffset = scale * boid->location.x; - int joffset = scale * boid->location.y; - - byte angle = inoise8(x + ioffset, y + joffset, z); - - boid->velocity.x = (float) sin8(angle) * 0.0078125 - 1.0; - boid->velocity.y = -((float)cos8(angle) * 0.0078125 - 1.0); - boid->update(); - - effects.drawBackgroundFastLEDPixelCRGB(boid->location.x, boid->location.y, effects.ColorFromCurrentPalette(angle + hue)); // color - - if (boid->location.x < 0 || boid->location.x >= VPANEL_W || - boid->location.y < 0 || boid->location.y >= VPANEL_H) { - boid->location.x = random(VPANEL_W); - boid->location.y = 0; - } - } - - EVERY_N_MILLIS(200) { - hue++; - } - - x += speed; - y += speed; - z += speed; - - effects.ShowFrame(); - - return 50; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternIncrementalDrift.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternIncrementalDrift.h deleted file mode 100644 index 573c765..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternIncrementalDrift.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternIncrementalDrift_H -#define PatternIncrementalDrift_H - -class PatternIncrementalDrift : public Drawable { - public: - PatternIncrementalDrift() { - name = (char *)"Incremental Drift"; - } - - unsigned int drawFrame() { - uint8_t dim = beatsin8(2, 230, 250); - effects.DimAll(dim); effects.ShowFrame(); - - for (int i = 2; i <= VPANEL_W / 2; i++) - { - CRGB color = effects.ColorFromCurrentPalette((i - 2) * (240 / (VPANEL_W / 2))); - - uint8_t x = beatcos8((17 - i) * 2, MATRIX_CENTER_X - i, MATRIX_CENTER_X + i); - uint8_t y = beatsin8((17 - i) * 2, MATRIX_CENTER_Y - i, MATRIX_CENTER_Y + i); - - effects.drawBackgroundFastLEDPixelCRGB(x, y, color); - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternIncrementalDrift2.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternIncrementalDrift2.h deleted file mode 100644 index 03312f6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternIncrementalDrift2.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternIncrementalDrift2_H -#define PatternIncrementalDrift2_H - -class PatternIncrementalDrift2 : public Drawable { - public: - PatternIncrementalDrift2() { - name = (char *)"Incremental Drift Rose"; - } - - unsigned int drawFrame() { - uint8_t dim = beatsin8(2, 170, 250); - effects.DimAll(dim); effects.ShowFrame(); - - for (int i = 2; i < VPANEL_H / 2; ++i) - //for (uint8_t i = 0; i < 32; i++) - { - CRGB color; - - uint8_t x = 0; - uint8_t y = 0; - - if (i < 16) { - x = beatcos8((i + 1) * 2, i, VPANEL_W - i); - y = beatsin8((i + 1) * 2, i, VPANEL_H - i); - color = effects.ColorFromCurrentPalette(i * 14); - } - else - { - x = beatsin8((32 - i) * 2, VPANEL_W - i, i + 1); - y = beatcos8((32 - i) * 2, VPANEL_H - i, i + 1); - color = effects.ColorFromCurrentPalette((31 - i) * 14); - } - - effects.drawBackgroundFastLEDPixelCRGB(x, y, color); - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternInfinity.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternInfinity.h deleted file mode 100644 index c99f329..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternInfinity.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternInfinity_H - -class PatternInfinity : public Drawable { -public: - PatternInfinity() { - name = (char *)"Infinity"; - } - - unsigned int drawFrame() { - // dim all pixels on the display slightly - // to 250/255 (98%) of their current brightness - blur2d(effects.leds, VPANEL_W > 255 ? 255 : VPANEL_W, VPANEL_H > 255 ? 255 : VPANEL_H, 250); - // effects.DimAll(250); effects.ShowFrame(); - - - // the Effects class has some sample oscillators - // that move from 0 to 255 at different speeds - effects.MoveOscillators(); - - // the horizontal position of the head of the infinity sign - // oscillates from 0 to the maximum horizontal and back - int x = (VPANEL_W - 1) - effects.p[1]; - - // the vertical position of the head oscillates - // from 8 to 23 and back (hard-coded for a 32x32 matrix) - int y = map8(sin8(effects.osci[3]), 8, 23); - - // the hue oscillates from 0 to 255, overflowing back to 0 - byte hue = sin8(effects.osci[5]); - - // draw a pixel at x,y using a color from the current palette - effects.Pixel(x, y, hue); - - effects.ShowFrame(); - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternInvaders.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternInvaders.h deleted file mode 100644 index 98f3200..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternInvaders.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Inspired by 'Space Invader Generator': https://the8bitpimp.wordpress.com/2013/05/07/space-invader-generator - * - * 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. - */ - -#ifndef PatternInvaders_H -#define PatternInvaders_H - -class PatternInvadersSmall : public Drawable { - private: - uint8_t x = 1; - uint8_t y = 1; - - public: - PatternInvadersSmall() { - name = (char *)"Invaders Small"; - } - - void start() { - matrix->fillScreen(0); - } - - unsigned int drawFrame() { - CRGB color1 = effects.ColorFromCurrentPalette(random(0, 255)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - CRGB color = CRGB::Black; - - if (random(0, 2) == 1) color = color1; - - effects.drawBackgroundFastLEDPixelCRGB(x + i, y + j, color); - - if (i < 2) - effects.drawBackgroundFastLEDPixelCRGB(x + (4 - i), y + j, color); - } - } - - x += 6; - if (x > 25) { - x = 1; - y += 6; - } - - if (y > 25) y = x = 1; - - effects.ShowFrame(); - - return 125; - } -}; - -class PatternInvadersMedium : public Drawable { - private: - uint8_t x = 0; - uint8_t y = 0; - - public: - PatternInvadersMedium() { - name = (char *)"Invaders Medium"; - } - - void start() { - matrix->fillScreen(0); - } - - unsigned int drawFrame() { - CRGB color1 = effects.ColorFromCurrentPalette(random(0, 255)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 5; j++) { - CRGB color = CRGB::Black; - - if (random(0, 2) == 1) color = color1; - - matrix->fillRect(x + (i * 2), y + (j * 2), x + (i * 2 + 1), y + (j * 2 + 1), color); - - if (i < 2) - matrix->fillRect(x + (8 - i * 2), y + (j * 2), x + (9 - i * 2), y + (j * 2 + 1), color); - } - } - - x += 11; - if (x > 22) { - x = 0; - y += 11; - } - - if (y > 22) y = x = 0; - - effects.ShowFrame(); - - return 500; - } -}; - -class PatternInvadersLarge : public Drawable { - private: - - public: - PatternInvadersLarge() { - name = (char *)"Invaders Large"; - } - - void start() { - matrix->fillScreen(0); - } - - unsigned int drawFrame() { - matrix->fillScreen(0); - - CRGB color1 = effects.ColorFromCurrentPalette(random(0, 255)); - - for (int x = 0; x < 3; x++) { - for (int y = 0; y < 5; y++) { - CRGB color = CRGB::Black; - - if (random(0, 2) == 1) { - color = color1; - } - - matrix->fillRect(1 + x * 6, 1 + y * 6, 5 + x * 6, 5 + y * 6, color); - - if (x < 2) - matrix->fillRect(1 + (4 - x) * 6, 1 + y * 6, 5 + (4 - x) * 6, 5 + y * 6, color); - } - } - - effects.ShowFrame(); - - return 2000; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternLife.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternLife.h deleted file mode 100644 index 8074e40..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternLife.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from Andrew: http://pastebin.com/f22bfe94d - * which, in turn, was "Adapted from the Life example on the Processing.org site" - * - * Made much more colorful by J.B. Langston: https://github.com/jblang/aurora/commit/6db5a884e3df5d686445c4f6b669f1668841929b - * - * 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. - */ - -#ifndef PatternLife_H -#define PatternLife_H - -class Cell { -public: - byte alive : 1; - byte prev : 1; - byte hue: 6; - byte brightness; -}; - -class PatternLife : public Drawable { -private: - Cell world[VPANEL_W][VPANEL_H]; - unsigned int density = 50; - int generation = 0; - - void randomFillWorld() { - for (int i = 0; i < VPANEL_W; i++) { - for (int j = 0; j < VPANEL_H; j++) { - if (random(100) < density) { - world[i][j].alive = 1; - world[i][j].brightness = 255; - } - else { - world[i][j].alive = 0; - world[i][j].brightness = 0; - } - world[i][j].prev = world[i][j].alive; - world[i][j].hue = 0; - } - } - } - - int neighbours(int x, int y) { - return (world[(x + 1) % VPANEL_W][y].prev) + - (world[x][(y + 1) % VPANEL_H].prev) + - (world[(x + VPANEL_W - 1) % VPANEL_W][y].prev) + - (world[x][(y + VPANEL_H - 1) % VPANEL_H].prev) + - (world[(x + 1) % VPANEL_W][(y + 1) % VPANEL_H].prev) + - (world[(x + VPANEL_W - 1) % VPANEL_W][(y + 1) % VPANEL_H].prev) + - (world[(x + VPANEL_W - 1) % VPANEL_W][(y + VPANEL_H - 1) % VPANEL_H].prev) + - (world[(x + 1) % VPANEL_W][(y + VPANEL_H - 1) % VPANEL_H].prev); - } - -public: - PatternLife() { - name = (char *)"Life"; - } - - unsigned int drawFrame() { - if (generation == 0) { - effects.ClearFrame(); - - randomFillWorld(); - } - - // Display current generation - for (int i = 0; i < VPANEL_W; i++) { - for (int j = 0; j < VPANEL_H; j++) { - effects.leds[XY(i, j)] = effects.ColorFromCurrentPalette(world[i][j].hue * 4, world[i][j].brightness); - } - } - - // Birth and death cycle - for (int x = 0; x < VPANEL_W; x++) { - for (int y = 0; y < VPANEL_H; y++) { - // Default is for cell to stay the same - if (world[x][y].brightness > 0 && world[x][y].prev == 0) - world[x][y].brightness *= 0.9; - int count = neighbours(x, y); - if (count == 3 && world[x][y].prev == 0) { - // A new cell is born - world[x][y].alive = 1; - world[x][y].hue += 2; - world[x][y].brightness = 255; - } else if ((count < 2 || count > 3) && world[x][y].prev == 1) { - // Cell dies - world[x][y].alive = 0; - } - } - } - - // Copy next generation into place - for (int x = 0; x < VPANEL_W; x++) { - for (int y = 0; y < VPANEL_H; y++) { - world[x][y].prev = world[x][y].alive; - } - } - - - generation++; - if (generation >= 256) - generation = 0; - - effects.ShowFrame(); - - return 60; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternMaze.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternMaze.h deleted file mode 100644 index b4e26a9..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternMaze.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Many thanks to Jamis Buck for the documentation of the Growing Tree maze generation algorithm: http://weblog.jamisbuck.org/2011/1/27/maze-generation-growing-tree-algorithm - * - * 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. - */ - -#ifndef PatternMaze_H -#define PatternMaze_H - -class PatternMaze : public Drawable { -private: - enum Directions { - None = 0, - Up = 1, - Down = 2, - Left = 4, - Right = 8, - }; - - struct Point{ - int x; - int y; - - static Point New(int x, int y) { - Point point; - point.x = x; - point.y = y; - return point; - } - - Point Move(Directions direction) { - switch (direction) - { - case Up: - return New(x, y - 1); - - case Down: - return New(x, y + 1); - - case Left: - return New(x - 1, y); - - case Right: - default: - return New(x + 1, y); - } - } - - static Directions Opposite(Directions direction) { - switch (direction) { - case Up: - return Down; - - case Down: - return Up; - - case Left: - return Right; - - case Right: - default: - return Left; - } - } - }; - -// int width = 16; -// int height = 16; - - static const int width = VPANEL_W / 2; - static const int height = VPANEL_H / 2; - - - Directions grid[width][height]; - - Point point; - - Point cells[256]; - int cellCount = 0; - - int algorithm = 0; - int algorithmCount = 1; - - byte hue = 0; - byte hueOffset = 0; - - Directions directions[4] = { Up, Down, Left, Right }; - - void removeCell(int index) {// shift cells after index down one - for (int i = index; i < cellCount - 1; i++) { - cells[i] = cells[i + 1]; - } - - cellCount--; - } - - void shuffleDirections() { - for (int a = 0; a < 4; a++) - { - int r = random(a, 4); - Directions temp = directions[a]; - directions[a] = directions[r]; - directions[r] = temp; - } - } - - Point createPoint(int x, int y) { - Point point; - point.x = x; - point.y = y; - return point; - } - - CRGB chooseColor(int index) { - byte h = index + hueOffset; - - switch (algorithm) { - case 0: - default: - return effects.ColorFromCurrentPalette(h); - - case 1: - return effects.ColorFromCurrentPalette(hue++); - } - } - - int chooseIndex(int max) { - switch (algorithm) { - case 0: - default: - // choose newest (recursive backtracker) - return max - 1; - - case 1: - // choose random(Prim's) - return random(max); - - // case 2: - // // choose oldest (not good, so disabling) - // return 0; - } - } - - void generateMaze() { - while (cellCount > 1) { - drawNextCell(); - } - } - - void drawNextCell() { - int index = chooseIndex(cellCount); - - if (index < 0) - return; - - point = cells[index]; - - Point imagePoint = createPoint(point.x * 2, point.y * 2); - - //effects.drawBackgroundFastLEDPixelCRGB(imagePoint.x, imagePoint.y, CRGB(CRGB::Gray)); - - shuffleDirections(); - - CRGB color = chooseColor(index); - - for (int i = 0; i < 4; i++) { - Directions direction = directions[i]; - - Point newPoint = point.Move(direction); - if (newPoint.x >= 0 && newPoint.y >= 0 && newPoint.x < width && newPoint.y < height && grid[newPoint.y][newPoint.x] == None) { - grid[point.y][point.x] = (Directions) ((int) grid[point.y][point.x] | (int) direction); - grid[newPoint.y][newPoint.x] = (Directions) ((int) grid[newPoint.y][newPoint.x] | (int) point.Opposite(direction)); - - Point newImagePoint = imagePoint.Move(direction); - - effects.drawBackgroundFastLEDPixelCRGB(newImagePoint.x, newImagePoint.y, color); - - cellCount++; - cells[cellCount - 1] = newPoint; - - index = -1; - break; - } - } - - if (index > -1) { - Point finishedPoint = cells[index]; - imagePoint = createPoint(finishedPoint.x * 2, finishedPoint.y * 2); - effects.drawBackgroundFastLEDPixelCRGB(imagePoint.x, imagePoint.y, color); - - removeCell(index); - } - } - -public: - PatternMaze() { - name = (char *)"Maze"; - } - - unsigned int drawFrame() { - if (cellCount < 1) { - - effects.ClearFrame(); - - // reset the maze grid - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - grid[y][x] = None; - } - } - - int x = random(width); - int y = random(height); - - cells[0] = createPoint(x, y); - - cellCount = 1; - - hue = 0; - hueOffset = random(0, 256); - - } - - drawNextCell(); - - if (cellCount < 1) { - algorithm++; - if (algorithm >= algorithmCount) - algorithm = 0; - - return 0; - } - - effects.ShowFrame(); - - return 0; - } - - void start() { - effects.ClearFrame(); - cellCount = 0; - hue = 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternMunch.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternMunch.h deleted file mode 100644 index 092dca1..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternMunch.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Munch pattern created by J.B. Langston: https://github.com/jblang/aurora/blob/master/PatternMunch.h - * - * 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. - */ - -#ifndef PatternMunch_H -#define PatternMunch_H - - -class PatternMunch : public Drawable { -private: - byte count = 0; - byte dir = 1; - byte flip = 0; - byte generation = 0; - -public: - PatternMunch() { - name = (char *)"Munch"; - } - - unsigned int drawFrame() { - - for (uint16_t x = 0; x < VPANEL_W; x++) { - for (uint16_t y = 0; y < VPANEL_H; y++) { - effects.leds[XY16(x, y)] = (x ^ y ^ flip) < count ? effects.ColorFromCurrentPalette(((x ^ y) << 2) + generation) : CRGB::Black; - - // The below is more pleasant - // effects.leds[XY(x, y)] = effects.ColorFromCurrentPalette(((x ^ y) << 2) + generation) ; - } - } - - count += dir; - - if (count <= 0 || count >= VPANEL_W) { - dir = -dir; - } - - if (count <= 0) { - if (flip == 0) - flip = VPANEL_W-1; - else - flip = 0; - } - - generation++; - - // show it ffs! - effects.ShowFrame(); - return 60; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternNoiseSmearing.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternNoiseSmearing.h deleted file mode 100644 index 2d6723a..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternNoiseSmearing.h +++ /dev/null @@ -1,338 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* Portions of this code are adapted from "Noise Smearing" by Stefan Petrick: https://gist.githubusercontent.com/embedded-creations/5cd47d83cb0e04f4574d/raw/ebf6a82b4755d55cfba3bf6598f7b19047f89daf/NoiseSmearing.ino -* Copyright (c) 2014 Stefan Petrick -* http://www.stefan-petrick.de/wordpress_beta -* -* 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. -*/ - -#ifndef PatternNoiseSmearing_H -#define PatternNoiseSmearing_H - -byte patternNoiseSmearingHue = 0; - -class PatternMultipleStream : public Drawable { -public: - PatternMultipleStream() { - name = (char *)"MultipleStream"; - } - - // this pattern draws two points to the screen based on sin/cos if a counter - // (comment out NoiseSmearWithRadius to see pattern of pixels) - // these pixels are smeared by a large radius, giving a lot of movement - // the image is dimmed before each drawing to not saturate the screen with color - // the smear has an offset so the pixels usually have a trail leading toward the upper left - unsigned int drawFrame() { - static unsigned long counter = 0; -#if 0 - // this counter lets put delays between each frame and still get the same animation - counter++; -#else - // this counter updates in real time and can't be slowed down for debugging - counter = millis() / 10; -#endif - - byte x1 = 4 + sin8(counter * 2) / 10; - byte x2 = 8 + sin8(counter * 2) / 16; - byte y2 = 8 + cos8((counter * 2) / 3) / 16; - - effects.leds[XY(x1, x2)] = effects.ColorFromCurrentPalette(patternNoiseSmearingHue); - effects.leds[XY(x2, y2)] = effects.ColorFromCurrentPalette(patternNoiseSmearingHue + 128); - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(8); - effects.MoveFractionalNoiseX(); - - effects.MoveY(8); - effects.MoveFractionalNoiseY(); - - patternNoiseSmearingHue++; - - return 0; - } -}; - -class PatternMultipleStream2 : public Drawable { -public: - PatternMultipleStream2() { - name = (char *)"MultipleStream2"; - } - - unsigned int drawFrame() { - effects.DimAll(230); effects.ShowFrame(); - - byte xx = 4 + sin8(millis() / 9) / 10; - byte yy = 4 + cos8(millis() / 10) / 10; - effects.leds[XY(xx, yy)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue); - - xx = 8 + sin8(millis() / 10) / 16; - yy = 8 + cos8(millis() / 7) / 16; - effects.leds[XY(xx, yy)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue + 80); - - effects.leds[XY(15, 15)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue + 160); - - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - - patternNoiseSmearingHue++; - - return 0; - } -}; - -class PatternMultipleStream3 : public Drawable { -public: - PatternMultipleStream3() { - name = (char *)"MultipleStream3"; - } - - unsigned int drawFrame() { - //CLS(); - effects.DimAll(235); effects.ShowFrame(); - - for (uint8_t i = 3; i < 32; i = i + 4) { - effects.leds[XY(i, 15)] += effects.ColorFromCurrentPalette(i * 8); - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - - effects.ShowFrame(); - - return 1; - } -}; - -class PatternMultipleStream4 : public Drawable { -public: - PatternMultipleStream4() { - name = (char *)"MultipleStream4"; - } - - unsigned int drawFrame() { - - //CLS(); - effects.DimAll(235); effects.ShowFrame(); - - effects.leds[XY(15, 15)] += effects.ColorFromCurrentPalette(patternNoiseSmearingHue); - - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(8); - effects.MoveFractionalNoiseX(); - - effects.MoveY(8); - effects.MoveFractionalNoiseY(); - - patternNoiseSmearingHue++; - - return 0; - } -}; - -class PatternMultipleStream5 : public Drawable { -public: - PatternMultipleStream5() { - name = (char *)"MultipleStream5"; - } - - unsigned int drawFrame() { - - //CLS(); - effects.DimAll(235); effects.ShowFrame(); - - - for (uint8_t i = 3; i < 32; i = i + 4) { - effects.leds[XY(i, 31)] += effects.ColorFromCurrentPalette(i * 8); - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(4); - effects.MoveFractionalNoiseX(4); - - return 0; - } -}; - -class PatternMultipleStream8 : public Drawable { -public: - PatternMultipleStream8() { - name = (char *)"MultipleStream8"; - } - - unsigned int drawFrame() { - effects.DimAll(230); effects.ShowFrame(); - - // draw grid of rainbow dots on top of the dimmed image - for (uint8_t y = 1; y < 32; y = y + 6) { - for (uint8_t x = 1; x < 32; x = x + 6) { - - effects.leds[XY(x, y)] += effects.ColorFromCurrentPalette((x * y) / 4); - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseX(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseY(4); - - return 0; - } -}; - -class PatternPaletteSmear : public Drawable { -public: - PatternPaletteSmear() { - name = (char *)"PaletteSmear"; - } - - unsigned int drawFrame() { - - effects.DimAll(170); effects.ShowFrame(); - - // draw a rainbow color palette - for (uint8_t y = 0; y < VPANEL_H; y++) { - for (uint8_t x = 0; x < VPANEL_W; x++) { - effects.leds[XY(x, y)] += effects.ColorFromCurrentPalette(x * 8, y * 8 + 7); - } - } - - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - - effects.FillNoise(); - - effects.MoveX(3); - //effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - effects.ShowFrame(); - - return 0; - } -}; - -class PatternRainbowFlag : public Drawable { -public: - PatternRainbowFlag() { - name = (char *)"RainbowFlag"; - } - - unsigned int drawFrame() { - effects.DimAll(10); effects.ShowFrame(); - - CRGB rainbow[7] = { - CRGB::Red, - CRGB::Orange, - CRGB::Yellow, - CRGB::Green, - CRGB::Blue, - CRGB::Violet - }; - - uint8_t y = 2; - - for (uint8_t c = 0; c < 6; c++) { - for (uint8_t j = 0; j < 5; j++) { - for (uint8_t x = 0; x < VPANEL_W; x++) { - effects.leds[XY(x, y)] += rainbow[c]; - } - - y++; - if (y >= VPANEL_H) - break; - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseY(4); - - effects.MoveY(3); - effects.MoveFractionalNoiseX(4); - - return 0; - } -}; -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPendulumWave.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPendulumWave.h deleted file mode 100644 index 985e15a..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPendulumWave.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* -* Inspired by and based on a loading animation for Prismata by Lunarch Studios: -* http://www.reddit.com/r/gifs/comments/2on8si/connecting_to_server_so_mesmerizing/cmow0sz -* -* Lunarch Studios Inc. hereby publishes the Actionscript 3 source code pasted in this -* comment under the Creative Commons CC0 1.0 Universal Public Domain Dedication. -* Lunarch Studios Inc. waives all rights to the work worldwide under copyright law, -* including all related and neighboring rights, to the extent allowed by law. -* You can copy, modify, distribute and perform the work, even for commercial purposes, -* all without asking permission. -* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternPendulumWave_H -#define PatternPendulumWave_H - -#define WAVE_BPM 25 -#define AMP_BPM 2 -#define SKEW_BPM 4 -#define WAVE_TIMEMINSKEW VPANEL_W/8 -#define WAVE_TIMEMAXSKEW VPANEL_W/2 - -class PatternPendulumWave : public Drawable { - public: - PatternPendulumWave() { - name = (char *)"Pendulum Wave"; - } - - unsigned int drawFrame() { - effects.ClearFrame(); - - for (int x = 0; x < VPANEL_W; ++x) - { - uint16_t amp = beatsin16(AMP_BPM, VPANEL_H/8, VPANEL_H-1); - uint16_t offset = (VPANEL_H - beatsin16(AMP_BPM, 0, VPANEL_H))/2; - - uint8_t y = beatsin16(WAVE_BPM, 0, amp, x*beatsin16(SKEW_BPM, WAVE_TIMEMINSKEW, WAVE_TIMEMAXSKEW)) + offset; - - effects.drawBackgroundFastLEDPixelCRGB(x, y, effects.ColorFromCurrentPalette(x * 7)); - } - effects.ShowFrame(); - return 20; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPlasma.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPlasma.h deleted file mode 100644 index dcecc97..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPlasma.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from LedEffects Plasma by Robert Atkins: https://bitbucket.org/ratkins/ledeffects/src/26ed3c51912af6fac5f1304629c7b4ab7ac8ca4b/Plasma.cpp?at=default - * Copyright (c) 2013 Robert Atkins - * - * 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. - */ - -#ifndef PatternPlasma_H -#define PatternPlasma_H - -class PatternPlasma : public Drawable { -private: - int time = 0; - int cycles = 0; - -public: - PatternPlasma() { - name = (char *)"Plasma"; - } - - unsigned int drawFrame() { - for (int x = 0; x < VPANEL_W; x++) { - for (int y = 0; y < VPANEL_H; y++) { - int16_t v = 0; - uint8_t wibble = sin8(time); - v += sin16(x * wibble * 6 + time); - v += cos16(y * (128 - wibble) * 6 + time); - v += sin16(y * x * cos8(-time) / 8); - - effects.Pixel(x, y, (v >> 8) + 127); - } - } - - time += 1; - cycles++; - - if (cycles >= 2048) { - time = 0; - cycles = 0; - } - - effects.ShowFrame(); - - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPulse.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPulse.h deleted file mode 100644 index 8992a4d..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternPulse.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Based at least in part on someone else's work that I can no longer find. - * Please let me know if you recognize any of this code! - * - * 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. - */ - -#ifndef PatternPulse_H -#define PatternPulse_H - -class PatternPulse : public Drawable { - private: - int hue; - int centerX = 0; - int centerY = 0; - int step = -1; - int maxSteps = 16; - float fadeRate = 0.8; - int diff; - - public: - PatternPulse() { - name = (char *)"Pulse"; - } - - unsigned int drawFrame() { - effects.DimAll(235); - - if (step == -1) { - centerX = random(32); - centerY = random(32); - hue = random(256); // 170; - step = 0; - } - - if (step == 0) { - matrix.drawCircle(centerX, centerY, step, effects.ColorFromCurrentPalette(hue)); - step++; - } - else { - if (step < maxSteps) { - // initial pulse - matrix.drawCircle(centerX, centerY, step, effects.ColorFromCurrentPalette(hue, pow(fadeRate, step - 2) * 255)); - - // secondary pulse - if (step > 3) { - matrix.drawCircle(centerX, centerY, step - 3, effects.ColorFromCurrentPalette(hue, pow(fadeRate, step - 2) * 255)); - } - step++; - } - else { - step = -1; - } - } - - effects.standardNoiseSmearing(); - - effects.ShowFrame(); - - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternRadar.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternRadar.h deleted file mode 100644 index 602078b..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternRadar.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternRadar_H - -class PatternRadar : public Drawable { - private: - byte theta = 0; - byte hueoffset = 0; - - public: - PatternRadar() { - name = (char *)"Radar"; - } - - unsigned int drawFrame() { - effects.DimAll(254); effects.ShowFrame(); - - for (int offset = 0; offset < MATRIX_CENTER_X; offset++) { - byte hue = 255 - (offset * 16 + hueoffset); - CRGB color = effects.ColorFromCurrentPalette(hue); - uint8_t x = mapcos8(theta, offset, (VPANEL_W - 1) - offset); - uint8_t y = mapsin8(theta, offset, (VPANEL_H - 1) - offset); - uint16_t xy = XY(x, y); - effects.leds[xy] = color; - - EVERY_N_MILLIS(25) { - theta += 2; - hueoffset += 1; - } - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSimplexNoise.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSimplexNoise.h deleted file mode 100644 index 3810ec0..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSimplexNoise.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from FastLED Fire2012 example by Mark Kriegsman: https://github.com/FastLED/FastLED/blob/master/examples/Noise/Noise.ino - * Copyright (c) 2013 FastLED - * - * 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. - */ - -#ifndef PatternSimplexNoise_H -#define PatternSimplexNoise_H - -class PatternSimplexNoise : public Drawable { - public: - PatternSimplexNoise() { - name = (char *)"Noise"; - } - - void start() { - // Initialize our coordinates to some random values - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - } - - unsigned int drawFrame() { -#if FASTLED_VERSION >= 3001000 - // a new parameter set every 15 seconds - EVERY_N_SECONDS(15) { - noise_x = random16(); - noise_y = random16(); - noise_z = random16(); - } -#endif - - uint32_t speed = 100; - - effects.FillNoise(); - ShowNoiseLayer(0, 1, 0); - - // noise_x += speed; - noise_y += speed; - noise_z += speed; - - effects.ShowFrame(); - - return 30; - } - - // show just one layer - void ShowNoiseLayer(byte layer, byte colorrepeat, byte colorshift) { - for (uint16_t i = 0; i < VPANEL_W; i++) { - for (uint16_t j = 0; j < VPANEL_H; j++) { - uint8_t pixel = noise[i][j]; - - // assign a color depending on the actual palette - effects.leds[XY16(i, j)] = effects.ColorFromCurrentPalette(colorrepeat * (pixel + colorshift), pixel); - } - } - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSnake.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSnake.h deleted file mode 100644 index 00895ab..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSnake.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from LedEffects Snake by Robert Atkins: https://bitbucket.org/ratkins/ledeffects/src/26ed3c51912af6fac5f1304629c7b4ab7ac8ca4b/Snake.cpp?at=default - * Copyright (c) 2013 Robert Atkins - * - * 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. - */ - -#ifndef PatternSnake_H -#define PatternSnake_H - -class PatternSnake : public Drawable { -private: - static const byte SNAKE_LENGTH = 16; - - CRGB colors[SNAKE_LENGTH]; - uint8_t initialHue; - - enum Direction { - UP, DOWN, LEFT, RIGHT - }; - - struct Pixel { - uint8_t x; - uint8_t y; - }; - - struct Snake { - Pixel pixels[SNAKE_LENGTH]; - - Direction direction; - - void newDirection() { - switch (direction) { - case UP: - case DOWN: - direction = random(0, 2) == 1 ? RIGHT : LEFT; - break; - - case LEFT: - case RIGHT: - direction = random(0, 2) == 1 ? DOWN : UP; - - default: - break; - } - } - - void shuffleDown() { - for (byte i = SNAKE_LENGTH - 1; i > 0; i--) { - pixels[i] = pixels[i - 1]; - } - } - - void reset() { - direction = UP; - for (int i = 0; i < SNAKE_LENGTH; i++) { - pixels[i].x = 0; - pixels[i].y = 0; - } - } - - void move() { - switch (direction) { - case UP: - pixels[0].y = (pixels[0].y + 1) % VPANEL_H; - break; - case LEFT: - pixels[0].x = (pixels[0].x + 1) % VPANEL_W; - break; - case DOWN: - pixels[0].y = pixels[0].y == 0 ? VPANEL_H - 1 : pixels[0].y - 1; - break; - case RIGHT: - pixels[0].x = pixels[0].x == 0 ? VPANEL_W - 1 : pixels[0].x - 1; - break; - } - } - - void draw(CRGB colors[SNAKE_LENGTH]) { - for (byte i = 0; i < SNAKE_LENGTH; i++) { - effects.leds[XY(pixels[i].x, pixels[i].y)] = colors[i] %= (255 - i * (255 / SNAKE_LENGTH)); - } - } - }; - - static const int snakeCount = 6; - Snake snakes[snakeCount]; - -public: - PatternSnake() { - name = (char *)"Snake"; - for (int i = 0; i < snakeCount; i++) { - Snake* snake = &snakes[i]; - snake->reset(); - } - } - - void start() - { - effects.ClearFrame(); - } - - unsigned int drawFrame() { - - - fill_palette(colors, SNAKE_LENGTH, initialHue++, 5, effects.currentPalette, 255, LINEARBLEND); - - for (int i = 0; i < snakeCount; i++) { - Snake* snake = &snakes[i]; - - snake->shuffleDown(); - - if (random(10) > 7) { - snake->newDirection(); - } - - snake->move(); - snake->draw(colors); - } - - effects.ShowFrame(); - - return 30; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpark.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpark.h deleted file mode 100644 index 059d97c..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpark.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * Portions of this code are adapted from FastLED Fire2012 example by Mark Kriegsman: https://github.com/FastLED/FastLED/tree/master/examples/Fire2012WithPalette - * Copyright (c) 2013 FastLED - * - * 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. - */ - -#ifndef PatternSpark_H -#define PatternSpark_H - -class PatternSpark : public Drawable { - private: - - public: - PatternSpark() { - name = (char *)"Spark"; - } - - // There are two main parameters you can play with to control the look and - // feel of your fire: COOLING (used in step 1 above), and SPARKING (used - // in step 3 above). - // - // COOLING: How much does the air cool as it rises? - // Less cooling = taller flames. More cooling = shorter flames. - // Default 55, suggested range 20-100 - uint8_t cooling = 100; - - // SPARKING: What chance (out of 255) is there that a new spark will be lit? - // Higher chance = more roaring fire. Lower chance = more flickery fire. - // Default 120, suggested range 50-200. - uint8_t sparking = 50; - - unsigned int drawFrame() { - // Add entropy to random number generator; we use a lot of it. - random16_add_entropy( random16()); - - effects.DimAll(235); effects.ShowFrame(); - - for (uint8_t x = 0; x < VPANEL_W; x++) { - // Step 1. Cool down every cell a little - for (int y = 0; y < VPANEL_H; y++) { - int xy = XY(x, y); - heat[xy] = qsub8(heat[xy], random8(0, ((cooling * 10) / VPANEL_H) + 2)); - } - - // Step 2. Heat from each cell drifts 'up' and diffuses a little - for (int y = 0; y < VPANEL_H; y++) { - heat[XY(x, y)] = (heat[XY(x, y + 1)] + heat[XY(x, y + 2)] + heat[XY(x, y + 2)]) / 3; - } - - // Step 2. Randomly ignite new 'sparks' of heat - if (random8() < sparking) { - uint8_t xt = random8(MATRIX_CENTRE_X - 2, MATRIX_CENTER_X + 3); - - int xy = XY(xt, VPANEL_H - 1); - heat[xy] = qadd8(heat[xy], random8(160, 255)); - } - - // Step 4. Map from heat cells to LED colors - for (int y = 0; y < VPANEL_H; y++) { - int xy = XY(x, y); - byte colorIndex = heat[xy]; - - // Recommend that you use values 0-240 rather than - // the usual 0-255, as the last 15 colors will be - // 'wrapping around' from the hot end to the cold end, - // which looks wrong. - colorIndex = scale8(colorIndex, 240); - - // override color 0 to ensure a black background? - if (colorIndex != 0) - // effects.leds[xy] = CRGB::Black; - // else - effects.leds[xy] = effects.ColorFromCurrentPalette(colorIndex); - } - } - - // Noise - noise_x += 1000; - noise_y += 1000; - noise_z += 1000; - noise_scale_x = 4000; - noise_scale_y = 4000; - effects.FillNoise(); - - effects.MoveX(3); - effects.MoveFractionalNoiseX(4); - - effects.ShowFrame(); - - return 15; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpin.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpin.h deleted file mode 100644 index c3497e7..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpin.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* 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. -*/ - -#ifndef PatternSpin_H - - - -class PatternSpin : public Drawable { -public: - PatternSpin() { - name = (char *)"Spin"; - } - - float degrees = 0; - float radius = 16; - - float speedStart = 1; - float velocityStart = 0.6; - - float maxSpeed = 30; - - float speed = speedStart; - float velocity = velocityStart; - - void start() { - speed = speedStart; - velocity = velocityStart; - degrees = 0; - } - - unsigned int drawFrame() { - effects.DimAll(190); effects.ShowFrame(); - - CRGB color = effects.ColorFromCurrentPalette(speed * 8); - - // start position - int x; - int y; - - // target position - float targetDegrees = degrees + speed; - float targetRadians = radians(targetDegrees); - int targetX = (int) (MATRIX_CENTER_X + radius * cos(targetRadians)); - int targetY = (int) (MATRIX_CENTER_Y - radius * sin(targetRadians)); - - float tempDegrees = degrees; - - do{ - float radians = radians(tempDegrees); - x = (int) (MATRIX_CENTER_X + radius * cos(radians)); - y = (int) (MATRIX_CENTER_Y - radius * sin(radians)); - - effects.drawBackgroundFastLEDPixelCRGB(x, y, color); - effects.drawBackgroundFastLEDPixelCRGB(y, x, color); - - tempDegrees += 1; - if (tempDegrees >= 360) - tempDegrees = 0; - } while (x != targetX || y != targetY); - - degrees += speed; - - // add velocity to the particle each pass around the accelerator - if (degrees >= 360) { - degrees = 0; - speed += velocity; - if (speed <= speedStart) { - speed = speedStart; - velocity *= -1; - } - else if (speed > maxSpeed){ - speed = maxSpeed - velocity; - velocity *= -1; - } - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpiral.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpiral.h deleted file mode 100644 index 64ef15d..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpiral.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Portions of this code are adapted from "Funky Clouds" by Stefan Petrick: - * https://gist.github.com/anonymous/876f908333cd95315c35 - * - * Copyright (c) 2014 Stefan Petrick - * http://www.stefan-petrick.de/wordpress_beta - * - * 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. - */ - -#ifndef PatternSpiral_H -#define PatternSpiral_H - -class PatternSpiral : public Drawable { -private: - // Timer stuff (Oscillators) - struct timer { - unsigned long takt; - unsigned long lastMillis; - unsigned long count; - int delta; - byte up; - byte down; - }; - timer multiTimer[5]; - - int timers = sizeof(multiTimer) / sizeof(multiTimer[0]); - - // counts all variables with different speeds linear up and down - void UpdateTimers() - { - unsigned long now = millis(); - for (int i = 0; i < timers; i++) - { - while (now - multiTimer[i].lastMillis >= multiTimer[i].takt) - { - multiTimer[i].lastMillis += multiTimer[i].takt; - multiTimer[i].count = multiTimer[i].count + multiTimer[i].delta; - if ((multiTimer[i].count == multiTimer[i].up) || (multiTimer[i].count == multiTimer[i].down)) - { - multiTimer[i].delta = -multiTimer[i].delta; - } - } - } - } - -public: - PatternSpiral() { - name = (char *)"Spiral"; - } - - void start() { - // set all counting directions positive for the beginning - for (int i = 0; i < timers; i++) multiTimer[i].delta = 1; - - // set range (up/down), speed (takt=ms between steps) and starting point of all oscillators - - unsigned long now = millis(); - - multiTimer[0].lastMillis = now; - multiTimer[0].takt = 42; //x1 - multiTimer[0].up = VPANEL_W - 1; - multiTimer[0].down = 0; - multiTimer[0].count = 0; - - multiTimer[1].lastMillis = now; - multiTimer[1].takt = 55; //y1 - multiTimer[1].up = VPANEL_H - 1; - multiTimer[1].down = 0; - multiTimer[1].count = 0; - - multiTimer[2].lastMillis = now; - multiTimer[2].takt = 3; //color - multiTimer[2].up = 255; - multiTimer[2].down = 0; - multiTimer[2].count = 0; - - multiTimer[3].lastMillis = now; - multiTimer[3].takt = 71; //x2 - multiTimer[3].up = VPANEL_W - 1; - multiTimer[3].down = 0; - multiTimer[3].count = 0; - - multiTimer[4].lastMillis = now; - multiTimer[4].takt = 89; //y2 - multiTimer[4].up = VPANEL_H - 1; - multiTimer[4].down = 0; - multiTimer[4].count = 0; - } - - unsigned int drawFrame() { - // manage the Oscillators - UpdateTimers(); - - // draw just a line defined by 5 oscillators - effects.BresenhamLine( - multiTimer[3].count, // x1 - multiTimer[4].count, // y1 - multiTimer[0].count, // x2 - multiTimer[1].count, // y2 - multiTimer[2].count); // color - - // manipulate the screen buffer - // with fixed parameters (could be oscillators too) - // Params: center x, y, radius, scale color down - // --> NOTE: Affects always a SQUARE with an odd length - // effects.SpiralStream(15, 15, 10, 128); - - effects.SpiralStream(31, 15, 64, 128); // for 64 pixel wide matrix! - // effects.SpiralStream(47, 15, 10, 128); // for 64 pixel wide matrix! - - // why not several times?! - // effects.SpiralStream(16, 6, 6, 128); - // effects.SpiralStream(10, 24, 10, 128); - - // increase the contrast - effects.DimAll(250); effects.ShowFrame(); - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpiro.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpiro.h deleted file mode 100644 index 4b91e12..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSpiro.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternSpiro_H - -class PatternSpiro : public Drawable { - private: - byte theta1 = 0; - byte theta2 = 0; - byte hueoffset = 0; - - uint8_t radiusx = VPANEL_W / 4; - uint8_t radiusy = VPANEL_H / 4; - uint8_t minx = MATRIX_CENTER_X - radiusx; - uint8_t maxx = MATRIX_CENTER_X + radiusx + 1; - uint8_t miny = MATRIX_CENTER_Y - radiusy; - uint8_t maxy = MATRIX_CENTER_Y + radiusy + 1; - - uint8_t spirocount = 1; - uint8_t spirooffset = 256 / spirocount; - boolean spiroincrement = true; - - boolean handledChange = false; - - public: - PatternSpiro() { - name = (char *)"Spiro"; - } - - void start(){ - effects.ClearFrame(); - }; - - unsigned int drawFrame() { - blur2d(effects.leds, VPANEL_W > 255 ? 255 : VPANEL_W, VPANEL_H > 255 ? 255 : VPANEL_H, 192); - - boolean change = false; - - for (int i = 0; i < spirocount; i++) { - uint8_t x = mapsin8(theta1 + i * spirooffset, minx, maxx); - uint8_t y = mapcos8(theta1 + i * spirooffset, miny, maxy); - - uint8_t x2 = mapsin8(theta2 + i * spirooffset, x - radiusx, x + radiusx); - uint8_t y2 = mapcos8(theta2 + i * spirooffset, y - radiusy, y + radiusy); - - CRGB color = effects.ColorFromCurrentPalette(hueoffset + i * spirooffset, 128); - effects.leds[XY(x2, y2)] += color; - - if((x2 == MATRIX_CENTER_X && y2 == MATRIX_CENTER_Y) || - (x2 == MATRIX_CENTRE_X && y2 == MATRIX_CENTRE_Y)) change = true; - } - - theta2 += 1; - - EVERY_N_MILLIS(25) { - theta1 += 1; - } - - EVERY_N_MILLIS(100) { - if (change && !handledChange) { - handledChange = true; - - if (spirocount >= VPANEL_W || spirocount == 1) spiroincrement = !spiroincrement; - - if (spiroincrement) { - if(spirocount >= 4) - spirocount *= 2; - else - spirocount += 1; - } - else { - if(spirocount > 4) - spirocount /= 2; - else - spirocount -= 1; - } - - spirooffset = 256 / spirocount; - } - - if(!change) handledChange = false; - } - - EVERY_N_MILLIS(33) { - hueoffset += 1; - } - - effects.ShowFrame(); - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSwirl.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSwirl.h deleted file mode 100644 index 49f3273..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternSwirl.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Aurora: https://github.com/pixelmatix/aurora -* Copyright (c) 2014 Jason Coon -* -* Portions of this code are adapted from SmartMatrixSwirl by Mark Kriegsman: https://gist.github.com/kriegsman/5adca44e14ad025e6d3b -* https://www.youtube.com/watch?v=bsGBT-50cts -* Copyright (c) 2014 Mark Kriegsman -* -* 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. -*/ - -#ifndef PatternSwirl_H - -class PatternSwirl : public Drawable { - private: - const uint8_t borderWidth = 2; - - public: - PatternSwirl() { - name = (char *)"Swirl"; - } - - void start() { - effects.ClearFrame(); - } - - unsigned int drawFrame() { - // Apply some blurring to whatever's already on the matrix - // Note that we never actually clear the matrix, we just constantly - // blur it repeatedly. Since the blurring is 'lossy', there's - // an automatic trend toward black -- by design. - uint8_t blurAmount = beatsin8(2, 10, 255); - -#if FASTLED_VERSION >= 3001000 - blur2d(effects.leds, VPANEL_W > 255 ? 255 : VPANEL_W, VPANEL_H > 255 ? 255 : VPANEL_H, blurAmount); -#else - effects.DimAll(blurAmount); -#endif - - // Use two out-of-sync sine waves - uint8_t i = beatsin8(256/VPANEL_H, borderWidth, VPANEL_W - borderWidth); - uint8_t j = beatsin8(2048/VPANEL_W, borderWidth, VPANEL_H - borderWidth); - - // Also calculate some reflections - uint8_t ni = (VPANEL_W - 1) - i; - uint8_t nj = (VPANEL_H - 1) - j; - - // The color of each point shifts over time, each at a different speed. - uint16_t ms = millis(); - effects.leds[XY(i, j)] += effects.ColorFromCurrentPalette(ms / 11); - //effects.leds[XY(j, i)] += effects.ColorFromCurrentPalette(ms / 13); // this doesn't work for non-square matrices - effects.leds[XY(ni, nj)] += effects.ColorFromCurrentPalette(ms / 17); - //effects.leds[XY(nj, ni)] += effects.ColorFromCurrentPalette(ms / 29); // this doesn't work for non-square matrices - effects.leds[XY(i, nj)] += effects.ColorFromCurrentPalette(ms / 37); - effects.leds[XY(ni, j)] += effects.ColorFromCurrentPalette(ms / 41); - - - effects.ShowFrame(); - return 0; - - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternTest.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternTest.h deleted file mode 100644 index 7a4a07d..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternTest.h +++ /dev/null @@ -1,20 +0,0 @@ - -#ifndef PatternTest_H -#define PatternTest_H - -class PatternTest : public Drawable { - private: - - public: - PatternTest() { - name = (char *)"Test Pattern"; - } - - unsigned int drawFrame() { - - matrix->fillScreen(matrix->color565(128, 0, 0)); - return 1000; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternWave.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternWave.h deleted file mode 100644 index 90e7448..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/PatternWave.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef PatternWave_H -#define PatternWave_H - -class PatternWave : public Drawable { -private: - byte thetaUpdate = 0; - byte thetaUpdateFrequency = 0; - byte theta = 0; - - byte hueUpdate = 0; - byte hueUpdateFrequency = 0; - byte hue = 0; - - byte rotation = 0; - - uint8_t scale = 256 / VPANEL_W; - - uint8_t maxX = VPANEL_W - 1; - uint8_t maxY = VPANEL_H - 1; - - uint8_t waveCount = 1; - -public: - PatternWave() { - name = (char *)"Wave"; - } - - void start() { - rotation = random(0, 4); - waveCount = random(1, 3); - - } - - unsigned int drawFrame() { - int n = 0; - - switch (rotation) { - case 0: - for (int x = 0; x < VPANEL_W; x++) { - n = quadwave8(x * 2 + theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(x, n, effects.ColorFromCurrentPalette(x + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(x, maxY - n, effects.ColorFromCurrentPalette(x + hue)); - } - break; - - case 1: - for (int y = 0; y < VPANEL_H; y++) { - n = quadwave8(y * 2 + theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(n, y, effects.ColorFromCurrentPalette(y + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(maxX - n, y, effects.ColorFromCurrentPalette(y + hue)); - } - break; - - case 2: - for (int x = 0; x < VPANEL_W; x++) { - n = quadwave8(x * 2 - theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(x, n, effects.ColorFromCurrentPalette(x + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(x, maxY - n, effects.ColorFromCurrentPalette(x + hue)); - } - break; - - case 3: - for (int y = 0; y < VPANEL_H; y++) { - n = quadwave8(y * 2 - theta) / scale; - effects.drawBackgroundFastLEDPixelCRGB(n, y, effects.ColorFromCurrentPalette(y + hue)); - if (waveCount == 2) - effects.drawBackgroundFastLEDPixelCRGB(maxX - n, y, effects.ColorFromCurrentPalette(y + hue)); - } - break; - } - - effects.DimAll(254); - effects.ShowFrame(); - - if (thetaUpdate >= thetaUpdateFrequency) { - thetaUpdate = 0; - theta++; - } - else { - thetaUpdate++; - } - - if (hueUpdate >= hueUpdateFrequency) { - hueUpdate = 0; - hue++; - } - else { - hueUpdate++; - } - - return 0; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Patterns.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Patterns.h deleted file mode 100644 index 398d57b..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Patterns.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Patterns_H -#define Patterns_H - -#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0])) - -#include "Vector.h" -#include "Boid.h" -#include "Attractor.h" - -/* - * Note from mrfaptastic: - * - * Commented out patterns are due to the fact they either didn't work properly with a non-square display, - * or from my personal opinion, are crap. - */ - -#include "PatternTest.h" -//#include "PatternNoiseSmearing.h" // Doesn't seem to work, omitting. -#include "PatternSpiro.h" -#include "PatternRadar.h" -#include "PatternSwirl.h" -#include "PatternPendulumWave.h" -#include "PatternFlowField.h" -#include "PatternIncrementalDrift.h" -#include "PatternIncrementalDrift2.h" // Doesn't seem to work, omitting. -#include "PatternMunch.h" -#include "PatternElectricMandala.h" -//#include "PatternSpin.h" // Doesn't seem to work, omitting. -#include "PatternSimplexNoise.h" -#include "PatternWave.h" -#include "PatternAttract.h" -//#include "PatternBounce.h" // Doesn't seem to work, omitting. -#include "PatternFlock.h" -#include "PatternInfinity.h" -#include "PatternPlasma.h" -#include "PatternSnake.h" -#include "PatternInvaders.h" -//#include "PatternCube.h" // Doesn't seem to work, omitting. -//#include "PatternFire.h" // Doesn't seem to work, omitting. -#include "PatternLife.h" -#include "PatternMaze.h" -//#include "PatternPulse.h" // Doesn't seem to work, omitting. -//#include "PatternSpark.h" // Doesn't seem to work, omitting. -#include "PatternSpiral.h" - -class Patterns : public Playlist { - private: - PatternTest patternTest; - // PatternRainbowFlag rainbowFlag; // doesn't work - // PatternPaletteSmear paletteSmear; - // PatternMultipleStream multipleStream; // doesn't work - // PatternMultipleStream2 multipleStream2; // doesn't work - // PatternMultipleStream3 multipleStream3; // doesn't work - // PatternMultipleStream4 multipleStream4; // doesn't work - // PatternMultipleStream5 multipleStream5; // doesn't work - // PatternMultipleStream8 multipleStream8; // doesn't work - PatternSpiro spiro; - // PatternRadar radar; - PatternSwirl swirl; - PatternPendulumWave pendulumWave; - PatternFlowField flowField; - PatternIncrementalDrift incrementalDrift; - PatternIncrementalDrift2 incrementalDrift2; - PatternMunch munch; - PatternElectricMandala electricMandala; - // PatternSpin spin; - PatternSimplexNoise simplexNoise; - PatternWave wave; - PatternAttract attract; - // PatternBounce bounce; - PatternFlock flock; - PatternInfinity infinity; - PatternPlasma plasma; - PatternInvadersSmall invadersSmall; - // PatternInvadersMedium invadersMedium; - // PatternInvadersLarge invadersLarge; - PatternSnake snake; - // PatternCube cube; - // PatternFire fire; - PatternLife life; - PatternMaze maze; - // PatternPulse pulse; - // PatternSpark spark; - PatternSpiral spiral; - - int currentIndex = 0; - Drawable* currentItem; - - int getCurrentIndex() { - return currentIndex; - } - - const static int PATTERN_COUNT = 14; - - Drawable* shuffledItems[PATTERN_COUNT]; - - Drawable* items[PATTERN_COUNT] = { - // &patternTest, // ok - &spiro, // cool - // &paletteSmear, // fail - // &multipleStream, // fail - // &multipleStream8,// fail - // &multipleStream5,// fail - // &multipleStream3,// fail - // &radar, // fail - // &multipleStream4, // fail - // &multipleStream2, // fail - &life, // ok - &flowField, - &pendulumWave, //11 ok - - &incrementalDrift, //12 ok - &incrementalDrift2, // 13 fail - &munch, // 14 ok - // &electricMandala, // 15 ok, but ugly (vortigont) - // &spin, // 16 ok but repetitive - // &simplexNoise, // 17 - cool! - // &wave, // 18 ok (can't work with 256+ matrix due to uint8_t vars) - // &rainbowFlag, //20 // fail - &attract, // 21 ok - // &swirl, // 22 ok, but ugly (vortigont) - // &bounce, // bouncing line crap - &flock, // works - &infinity, // works - &plasma, // works - // &invadersSmall, // works ish, but ugly (vortigont) - // &invadersMedium, // fail - // &invadersLarge, // fail - &snake, // ok - // &cube, // works ish - // &fire, // ok ish - &maze, // ok - // &pulse,// fail - // &spark, // same as fire - &spiral, // ok - }; - - public: - Patterns() { - // add the items to the shuffledItems array - for (int a = 0; a < PATTERN_COUNT; a++) { - shuffledItems[a] = items[a]; - } - - shuffleItems(); - - this->currentItem = items[0]; - this->currentItem->start(); - } - - char* Drawable::name = (char *)"Patterns"; - - void stop() { - if (currentItem) - currentItem->stop(); - } - - void start() { - if (currentItem) - currentItem->start(); - } - - void move(int step) { - currentIndex += step; - - if (currentIndex >= PATTERN_COUNT) currentIndex = 0; - else if (currentIndex < 0) currentIndex = PATTERN_COUNT - 1; - - if (effects.paletteIndex == effects.RandomPaletteIndex) - effects.RandomPalette(); - - moveTo(currentIndex); - - //if (!isTimeAvailable && currentItem == &analogClock) - // move(step); - } - - void moveRandom(int step) { - currentIndex += step; - - if (currentIndex >= PATTERN_COUNT) currentIndex = 0; - else if (currentIndex < 0) currentIndex = PATTERN_COUNT - 1; - - if (effects.paletteIndex == effects.RandomPaletteIndex) - effects.RandomPalette(); - - if (currentItem) - currentItem->stop(); - - currentItem = shuffledItems[currentIndex]; - - if (currentItem) - currentItem->start(); - - // if (!isTimeAvailable && currentItem == &analogClock) - // moveRandom(step); - } - - void shuffleItems() { - for (int a = 0; a < PATTERN_COUNT; a++) - { - int r = random(a, PATTERN_COUNT); - Drawable* temp = shuffledItems[a]; - shuffledItems[a] = shuffledItems[r]; - shuffledItems[r] = temp; - } - } - - - unsigned int drawFrame() { - return currentItem->drawFrame(); - } - - void listPatterns() { - Serial.println(F("{")); - Serial.print(F(" \"count\": ")); - Serial.print(PATTERN_COUNT); - Serial.println(","); - Serial.println(F(" \"results\": [")); - - for (int i = 0; i < PATTERN_COUNT; i++) { - Serial.print(F(" \"")); - Serial.print(i, DEC); - Serial.print(F(": ")); - Serial.print(items[i]->name); - if (i == PATTERN_COUNT - 1) - Serial.println(F("\"")); - else - Serial.println(F("\",")); - } - - Serial.println(" ]"); - Serial.println("}"); - } - - char * getCurrentPatternName() - { - return currentItem->name; - } - - void moveTo(int index) { - if (currentItem) - currentItem->stop(); - - currentIndex = index; - - currentItem = items[currentIndex]; - - if (currentItem) - currentItem->start(); - } - - bool setPattern(String name) { - for (int i = 0; i < PATTERN_COUNT; i++) { - if (name.compareTo(items[i]->name) == 0) { - moveTo(i); - return true; - } - } - - return false; - } - - - bool setPattern(int index) { - if (index >= PATTERN_COUNT || index < 0) - return false; - - moveTo(index); - - return true; - } -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Playlist.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Playlist.h deleted file mode 100644 index 29c0c87..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Playlist.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Playlist_H -#define Playlist_H - -class Playlist : public Drawable { -public: - virtual bool isPlaylist() { - return true; - } - - boolean isCurrentItemFinished = true; - - virtual void move(int step) = 0; - virtual void moveRandom(int step) = 0; - virtual int getCurrentIndex(); -}; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Vector.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Vector.h deleted file mode 100644 index 8acbadc..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsAuroraDemo/Vector.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Aurora: https://github.com/pixelmatix/aurora - * Copyright (c) 2014 Jason Coon - * - * 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. - */ - -#ifndef Vector_H -#define Vector_H - -template -class Vector2 { -public: - T x, y; - - Vector2() :x(0), y(0) {} - Vector2(T x, T y) : x(x), y(y) {} - Vector2(const Vector2& v) : x(v.x), y(v.y) {} - - Vector2& operator=(const Vector2& v) { - x = v.x; - y = v.y; - return *this; - } - - bool isEmpty() { - return x == 0 && y == 0; - } - - bool operator==(Vector2& v) { - return x == v.x && y == v.y; - } - - bool operator!=(Vector2& v) { - return !(x == y); - } - - Vector2 operator+(Vector2& v) { - return Vector2(x + v.x, y + v.y); - } - Vector2 operator-(Vector2& v) { - return Vector2(x - v.x, y - v.y); - } - - Vector2& operator+=(Vector2& v) { - x += v.x; - y += v.y; - return *this; - } - Vector2& operator-=(Vector2& v) { - x -= v.x; - y -= v.y; - return *this; - } - - Vector2 operator+(double s) { - return Vector2(x + s, y + s); - } - Vector2 operator-(double s) { - return Vector2(x - s, y - s); - } - Vector2 operator*(double s) { - return Vector2(x * s, y * s); - } - Vector2 operator/(double s) { - return Vector2(x / s, y / s); - } - - Vector2& operator+=(double s) { - x += s; - y += s; - return *this; - } - Vector2& operator-=(double s) { - x -= s; - y -= s; - return *this; - } - Vector2& operator*=(double s) { - x *= s; - y *= s; - return *this; - } - Vector2& operator/=(double s) { - x /= s; - y /= s; - return *this; - } - - void set(T x, T y) { - this->x = x; - this->y = y; - } - - void rotate(double deg) { - double theta = deg / 180.0 * M_PI; - double c = cos(theta); - double s = sin(theta); - double tx = x * c - y * s; - double ty = x * s + y * c; - x = tx; - y = ty; - } - - Vector2& normalize() { - if (length() == 0) return *this; - *this *= (1.0 / length()); - return *this; - } - - float dist(Vector2 v) const { - Vector2 d(v.x - x, v.y - y); - return d.length(); - } - float length() const { - return sqrt(x * x + y * y); - } - - float mag() const { - return length(); - } - - float magSq() { - return (x * x + y * y); - } - - void truncate(double length) { - double angle = atan2f(y, x); - x = length * cos(angle); - y = length * sin(angle); - } - - Vector2 ortho() const { - return Vector2(y, -x); - } - - static float dot(Vector2 v1, Vector2 v2) { - return v1.x * v2.x + v1.y * v2.y; - } - static float cross(Vector2 v1, Vector2 v2) { - return (v1.x * v2.y) - (v1.y * v2.x); - } - - void limit(float max) { - if (magSq() > max*max) { - normalize(); - *this *= max; - } - } -}; - -typedef Vector2 PVector; - -#endif diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/ChainedPanelsScreenBuffer.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/ChainedPanelsScreenBuffer.ino deleted file mode 100644 index b5de3c3..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/ChainedPanelsScreenBuffer.ino +++ /dev/null @@ -1,146 +0,0 @@ -/************************************************************************* - * IMPORANT PLEASE READ THE INFORMATION BELOW! - * - * This example implements a 'pixel buffer' which is essentally an - * off-screen copy of what is intended to be sent to output (LED panels) - * - * This essentially means DOUBLE THE AMOUNT OF MEMORY is required to - * to store the off-screen image/pixel/display buffer WITH a similar - * amount of memory used for the DMA output buffer for the physical panels. - * - * This means the practical resolution you will be able to output with the - * ESP32 will be CUT IN HALF. Do not try to run huge chains of - * LED Matrix Panels using this buffer, you will run out of memory. - * - * Please DO NOT raise issues @ github about running out of memory, - * we can't do anything about it. It's an ESP32, not a Raspberry Pi! - * - *************************************************************************/ - -/* Use the FastLED_Pixel_Buffer class to handle panel chaining - * (it's based on the VirtualMatrixPanel class) AND also create an - * off-screen CRGB FastLED pixel buffer. - */ -#include "FastLED_Pixel_Buffer.h" - - // Panel configuration - #define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. - #define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - - #define NUM_ROWS 1 // Number of rows of chained INDIVIDUAL PANELS - #define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW - - // Change this to your needs, for details please read the PDF in - // the 'ChainedPanels'example folder! - #define SERPENT true - #define TOPDOWN false - - // placeholder for the matrix object - MatrixPanel_I2S_DMA *dma_display = nullptr; - - // placeholder for the virtual display object - VirtualMatrixPanel_FastLED_Pixel_Buffer *FastLED_Pixel_Buff = nullptr; - - /****************************************************************************** - * Setup! - ******************************************************************************/ - void setup() - { - delay(250); - - Serial.begin(115200); - Serial.println(""); Serial.println(""); Serial.println(""); - Serial.println("*****************************************************"); - Serial.println("* FastLED Pixel BufferDemonstration *"); - Serial.println("*****************************************************"); - -/* - // 62x32 1/8 Scan Panels don't have a D and E pin! - - HUB75_I2S_CFG::i2s_pins _pins = { - R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN, - A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, - LAT_PIN, OE_PIN, CLK_PIN - }; -*/ - HUB75_I2S_CFG mxconfig( - PANEL_RES_X, // DO NOT CHANGE THIS - PANEL_RES_Y, // DO NOT CHANGE THIS - NUM_ROWS*NUM_COLS // DO NOT CHANGE THIS - //,_pins // Uncomment to enable custom pins - ); - - mxconfig.clkphase = false; // Change this if you see pixels showing up shifted wrongly by one column the left or right. - //mxconfig.driver = HUB75_I2S_CFG::FM6126A; // in case that we use panels based on FM6126A chip, we can set it here before creating MatrixPanel_I2S_DMA object - - // Do NOT use mxconfig.double_buffer when using this pixel buffer. - - // OK, now we can create our matrix object - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - - // let's adjust default physical panel brightness to about 75% - dma_display->setBrightness8(96); // range is 0-255, 0 - 0%, 255 - 100% - - // Allocate memory and start DMA electrical output to physical panels - if( not dma_display->begin() ) - Serial.println("****** !KABOOM! I2S memory allocation failed ***********"); - - dma_display->clearScreen(); - delay(500); - - // NOW, create the 'Virtual Matrix Panel' class with a FastLED Pixel Buffer! Pass it a dma_display hardware library pointer to use. - FastLED_Pixel_Buff = new VirtualMatrixPanel_FastLED_Pixel_Buffer((*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, SERPENT, TOPDOWN); - - if( not FastLED_Pixel_Buff->allocateMemory() ) - Serial.println("****** !KABOOM! Unable to find enough memory for the FastLED pixel buffer! ***********"); - - } - - - // Borrowed from the SimpleTextShapes example. - uint16_t colorWheel(uint8_t pos) { - if(pos < 85) { - return dma_display->color565(pos * 3, 255 - pos * 3, 0); - } else if(pos < 170) { - pos -= 85; - return dma_display->color565(255 - pos * 3, 0, pos * 3); - } else { - pos -= 170; - return dma_display->color565(0, pos * 3, 255 - pos * 3); - } - } - - /* A crap demonstration of using the pixel buffer. - * 1) Draw text at an incrementing (going down) y coordinate - * 2) Move down a pixel row - * 3) Draw the text again, fade the 'old' pixels. Using the pixel buffer to update all pixels on screen. - * 4) 'show' (send) the pixel buffer to the DMA output. - * 5) LOOP - */ - - uint8_t y_coord = 0; - uint8_t wheel = 0; - - void loop() - { - // draw text with a rotating colour - FastLED_Pixel_Buff->dimAll(200); // Dim all pixels by 250/255 - - FastLED_Pixel_Buff->setTextSize(1); // size 1 == 8 pixels high - FastLED_Pixel_Buff->setTextWrap(false); // Don't wrap at end of line - will do ourselves - - FastLED_Pixel_Buff->setCursor(FastLED_Pixel_Buff->width()/4, y_coord); // start at top left, with 8 pixel of spacing - FastLED_Pixel_Buff->setTextColor(colorWheel(wheel++)); - - FastLED_Pixel_Buff->print("MythicalForce"); - - FastLED_Pixel_Buff->show(); // IMPORTANT -> SEND Pixel Buffer to DMA / Panel Output! - - y_coord++; - - if ( y_coord >= FastLED_Pixel_Buff->height()) - y_coord = 0; - - delay(35); - - } // end loop diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/FastLED_Pixel_Buffer.cpp b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/FastLED_Pixel_Buffer.cpp deleted file mode 100644 index 79e19c9..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/FastLED_Pixel_Buffer.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Experimental layer class to do play with pixel in an off-screen buffer before painting to the DMA - * - * Requires FastLED - * - * Faptastic 2020-2021 - **/ - -#include "FastLED_Pixel_Buffer.h" - -/** - * The one for 256+ matrices - * otherwise this: - * for (uint8_t i = 0; i < MATRIX_WIDTH; i++) {} - * turns into an infinite loop - */ -inline uint16_t VirtualMatrixPanel_FastLED_Pixel_Buffer::XY16( uint16_t x, uint16_t y) { - - if (x >= virtualResX) return 0; - if (y >= virtualResY) return 0; - - return (y * virtualResX) + x + 1; // everything offset by one to compute out of bounds stuff - never displayed by ShowFrame() -} - -// For adafruit -void VirtualMatrixPanel_FastLED_Pixel_Buffer::drawPixel(int16_t x, int16_t y, uint16_t color) { - - //Serial.println("calling our drawpixel!"); - - // 565 color conversion - uint8_t r = ((((color >> 11) & 0x1F) * 527) + 23) >> 6; - uint8_t g = ((((color >> 5) & 0x3F) * 259) + 33) >> 6; - uint8_t b = (((color & 0x1F) * 527) + 23) >> 6; - - this->drawPixel(x, y, CRGB(r,g,b)); -} - -void VirtualMatrixPanel_FastLED_Pixel_Buffer::drawPixel(int16_t x, int16_t y, int r, int g, int b) { - this->drawPixel(x, y, CRGB(r,g,b)); -} - -// We actually just draw to ourselves... to our buffer -void VirtualMatrixPanel_FastLED_Pixel_Buffer::drawPixel(int16_t x, int16_t y, CRGB color) -{ - //Serial.printf("updated x y : %d %d", x, y); - buffer[XY16(x,y)] = color; -} - -CRGB VirtualMatrixPanel_FastLED_Pixel_Buffer::getPixel(int16_t x, int16_t y) -{ - return buffer[XY16(x,y)]; -} - -/** - * Dim all the pixels on the layer. - */ -void VirtualMatrixPanel_FastLED_Pixel_Buffer::dimAll(byte value) { - - //Serial.println("performing dimall"); - // nscale8 max value is 255, or it'll flip back to 0 - // (documentation is wrong when it says x/256), it's actually x/255 - /* - for (int y = 0; y < LAYER_HEIGHT; y++) { - for (int x = 0; x < LAYER_WIDTH; x++) { - pixels->data[y][x].nscale8(value); - }} - */ - dimRect(0,0, virtualResX, virtualResY, value); -} - -/** - * Dim all the pixels in a rectangular option of the layer the layer. - */ -void VirtualMatrixPanel_FastLED_Pixel_Buffer::dimRect(int16_t x, int16_t y, int16_t w, int16_t h, byte value) { - for (int16_t i = x; i < x + w; i++) - { - for (int16_t j = y; j < y + h; j++) - { - buffer[XY16(i,j)].nscale8(value); - } - } -} - -void VirtualMatrixPanel_FastLED_Pixel_Buffer::clear() { - memset(buffer, CRGB(0,0,0), (virtualResX * virtualResY) ); -} - -/** - * Actually Send the CRGB FastLED buffer to the DMA engine / Physical Panels! - * Do this via the underlying 'VirtualMatrixPanel' that does all the pixel-remapping for - * all sorts of chained panels, and panel scan types. - */ -void VirtualMatrixPanel_FastLED_Pixel_Buffer::show() { - - //Serial.println("Doing Show"); - - CRGB _pixel = 0; - for (int16_t y = 0; y < virtualResY; y++) { - for (int16_t x = 0; x < virtualResX; x++) - { - //VirtualMatrixPanel::getCoords(x, y); // call to base to update coords for chaining approach - _pixel = buffer[XY16(x,y)]; - drawPixelRGB888( x, y, _pixel.r, _pixel.g, _pixel.b); // call VirtualMatrixPanel::drawPixelRGB888(...) - //drawPixelRGB888( x, y, 0, 0, 128); // call VirtualMatrixPanel::drawPixelRGB888(...) - } // end loop to copy fast led to the dma matrix - } - -} // show - -/** - * Cleanup should we delete this buffer class. Unlikely during runtime. - */ -VirtualMatrixPanel_FastLED_Pixel_Buffer::~VirtualMatrixPanel_FastLED_Pixel_Buffer(void) -{ - delete(buffer); -} \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/FastLED_Pixel_Buffer.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/FastLED_Pixel_Buffer.h deleted file mode 100644 index 28db7d5..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/ChainedPanelsScreenBuffer/FastLED_Pixel_Buffer.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef VIRTUAL_MATRIX_PANEL_FASTLED_LAYER -#define VIRTUAL_MATRIX_PANEL_FASTLED_LAYER - -#include -#include - -class VirtualMatrixPanel_FastLED_Pixel_Buffer : public VirtualMatrixPanel -{ - public: - using VirtualMatrixPanel::VirtualMatrixPanel; // perform VirtualMatrixPanel class constructor - - bool allocateMemory() // allocate memory - { - // https://www.geeksforgeeks.org/how-to-declare-a-2d-array-dynamically-in-c-using-new-operator/ - buffer = new CRGB[virtualResX * virtualResY]; // These are defined in the underliny - - if (!buffer) { return false; } - - Serial.printf("Allocated %d bytes of memory for pixel buffer.\r\n", sizeof(CRGB)*((virtualResX * virtualResY)+1)); - this->clear(); - - return true; - - } // end Buffer - - virtual void drawPixel(int16_t x, int16_t y, uint16_t color); // overwrite adafruit implementation - void drawPixel(int16_t x, int16_t y, int r, int g, int b); // Buffer implementation - void drawPixel(int16_t x, int16_t y, CRGB color); // Buffer implementation - CRGB getPixel(int16_t x, int16_t y); // Returns a pixel value from the buffer. - - - void dimAll(byte value); - void dimRect(int16_t x, int16_t y, int16_t w, int16_t h, byte value); - - void clear(); - - void show(); // Send buffer to physical hardware / DMA engine. - - // Release Memory - ~VirtualMatrixPanel_FastLED_Pixel_Buffer(void); - - protected: - uint16_t XY16( uint16_t x, uint16_t y); - - private: - CRGB* buffer = nullptr; -}; - - - -#endif \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino deleted file mode 100644 index d44bb76..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino +++ /dev/null @@ -1,151 +0,0 @@ -/************************************************************************* - * Description: - * - * The underlying implementation of the ESP32-HUB75-MatrixPanel-I2S-DMA only - * supports output to 1/16 or 1/32 scan panels - which means outputting - * two lines at the same time, 16 or 32 rows apart. This cannot be changed - * at the DMA layer as it would require a messy and complex rebuild of the - * library's DMA internals. - * - * However, it is possible to connect 1/8 scan panels to this same library and - * 'trick' the output to work correctly on these panels by way of adjusting the - * pixel co-ordinates that are 'sent' to the ESP32-HUB75-MatrixPanel-I2S-DMA - * library. - * - **************************************************************************/ -#include "ESP32-HUB75-MatrixPanel-I2S-DMA.h" - -/* Use the Virtual Display class to re-map co-ordinates such that they draw - * correctly on a 32x16 1/8 Scan panel (or chain of such panels). - */ -#include "ESP32-VirtualMatrixPanel-I2S-DMA.h" - - - // Panel configuration - #define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module. - #define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module. - - - #define NUM_ROWS 1 // Number of rows of chained INDIVIDUAL PANELS - #define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW - - // ^^^ NOTE: DEFAULT EXAMPLE SETUP IS FOR A CHAIN OF TWO x 1/8 SCAN PANELS - - // Change this to your needs, for details on VirtualPanel pls read the PDF! - #define SERPENT true - #define TOPDOWN false - - // placeholder for the matrix object - MatrixPanel_I2S_DMA *dma_display = nullptr; - - // placeholder for the virtual display object - VirtualMatrixPanel *OneEightMatrixDisplay = nullptr; - - /****************************************************************************** - * Setup! - ******************************************************************************/ - void setup() - { - delay(250); - - Serial.begin(115200); - Serial.println(""); Serial.println(""); Serial.println(""); - Serial.println("*****************************************************"); - Serial.println("* 1/8 Scan Panel Demonstration *"); - Serial.println("*****************************************************"); - -/* - // 62x32 1/8 Scan Panels don't have a D and E pin! - - HUB75_I2S_CFG::i2s_pins _pins = { - R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN, - A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, - LAT_PIN, OE_PIN, CLK_PIN - }; -*/ - HUB75_I2S_CFG mxconfig( - PANEL_RES_X*2, // DO NOT CHANGE THIS - PANEL_RES_Y/2, // DO NOT CHANGE THIS - NUM_ROWS*NUM_COLS // DO NOT CHANGE THIS - //,_pins // Uncomment to enable custom pins - ); - - mxconfig.clkphase = false; // Change this if you see pixels showing up shifted wrongly by one column the left or right. - - //mxconfig.driver = HUB75_I2S_CFG::FM6126A; // in case that we use panels based on FM6126A chip, we can set it here before creating MatrixPanel_I2S_DMA object - - // OK, now we can create our matrix object - dma_display = new MatrixPanel_I2S_DMA(mxconfig); - - // let's adjust default brightness to about 75% - dma_display->setBrightness8(96); // range is 0-255, 0 - 0%, 255 - 100% - - // Allocate memory and start DMA display - if( not dma_display->begin() ) - Serial.println("****** !KABOOM! I2S memory allocation failed ***********"); - - - dma_display->clearScreen(); - delay(500); - - // create OneEightMatrixDisplaylay object based on our newly created dma_display object - OneEightMatrixDisplay = new VirtualMatrixPanel((*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, SERPENT, TOPDOWN); - - // THE IMPORTANT BIT BELOW! - OneEightMatrixDisplay->setPhysicalPanelScanRate(ONE_EIGHT_32); - } - - - void loop() { - - // What the panel sees from the DMA engine! - for (int i=PANEL_RES_X*2+10; i< PANEL_RES_X*(NUM_ROWS*NUM_COLS)*2; i++) - { - dma_display->drawLine(i, 0, i, 7, dma_display->color565(255, 0, 0)); // red - delay(10); - } - - dma_display->clearScreen(); - delay(1000); -/* - // Try again using the pixel / dma memory remapper - for (int i=PANEL_RES_X+5; i< (PANEL_RES_X*2)-1; i++) - { - OneEightMatrixDisplay->drawLine(i, 0, i, 7, dma_display->color565(0, 0, 255)); // blue - delay(10); - } -*/ - - // Try again using the pixel / dma memory remapper - int offset = PANEL_RES_X*((NUM_ROWS*NUM_COLS)-1); - for (int i=0; i< PANEL_RES_X; i++) - { - OneEightMatrixDisplay->drawLine(i+offset, 0, i+offset, 7, dma_display->color565(0, 0, 255)); // blue - OneEightMatrixDisplay->drawLine(i+offset, 8, i+offset, 15, dma_display->color565(0, 128,0)); // g - OneEightMatrixDisplay->drawLine(i+offset, 16, i+offset, 23, dma_display->color565(128, 0,0)); // red - OneEightMatrixDisplay->drawLine(i+offset, 24, i+offset, 31, dma_display->color565(0, 128, 128)); // blue - delay(10); - } - - delay(1000); - - - // Print on each chained panel 1/8 module! - // This only really works for a single horizontal chain - for (int i = 0; i < NUM_ROWS*NUM_COLS; i++) - { - OneEightMatrixDisplay->setTextColor(OneEightMatrixDisplay->color565(255, 255, 255)); - OneEightMatrixDisplay->setCursor(i*PANEL_RES_X+7, OneEightMatrixDisplay->height()/3); - - // Red text inside red rect (2 pix in from edge) - OneEightMatrixDisplay->print("Panel " + String(i+1)); - OneEightMatrixDisplay->drawRect(1,1, OneEightMatrixDisplay->width()-2, OneEightMatrixDisplay->height()-2, OneEightMatrixDisplay->color565(255,0,0)); - - // White line from top left to bottom right - OneEightMatrixDisplay->drawLine(0,0, OneEightMatrixDisplay->width()-1, OneEightMatrixDisplay->height()-1, OneEightMatrixDisplay->color565(255,255,255)); - } - - delay(2000); - dma_display->clearScreen(); - - } // end loop diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Eight_1_8_ScanPanel/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Eight_1_8_ScanPanel/README.md deleted file mode 100644 index 2fd55b9..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Eight_1_8_ScanPanel/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Using this library with 32x16 1/8 Scan Panels - -## Problem -ESP32-HUB75-MatrixPanel-I2S-DMA library will not display output correctly with 1/8 scan panels such [as this](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/154) by default. - -## Solution -It is possible to connect 1/8 scan panels to this library and 'trick' the output to work correctly on these panels by way of adjusting the pixel co-ordinates that are 'sent' to the underlying ESP32-HUB75-MatrixPanel-I2S-DMA library (in this example, it is the 'dmaOutput' class). diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/OneQuarterScanMatrixPanel.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/OneQuarterScanMatrixPanel.h deleted file mode 100644 index 885b937..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/OneQuarterScanMatrixPanel.h +++ /dev/null @@ -1,451 +0,0 @@ - -/* - Patch class for 32x16 RGB Matrix panels - - reimplement all functions which use x,y coordinates - -*/ - -#ifndef ESP_HUB75_32x16MatrixPanel -#define ESP_HUB75_32x16MatrixPanel - -#include "ESP32-HUB75-MatrixPanel-I2S-DMA.h" -#include -#include "glcdfont.c" - -struct VirtualCoords { - int16_t x; - int16_t y; -}; - -#define VP_WIDTH 32 -#define VP_HEIGHT 16 -#define DEFAULT_FONT_W 5 -#define DEFAULT_FONT_H 7 -#define PIXEL_SPACE 1 // space between chars in a string - - -/* --- PRINTF_BYTE_TO_BINARY macro's --- */ -#define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c" -#define PRINTF_BYTE_TO_BINARY_INT8(i) \ - (((i) & 0x80ll) ? '1' : '0'), \ - (((i) & 0x40ll) ? '1' : '0'), \ - (((i) & 0x20ll) ? '1' : '0'), \ - (((i) & 0x10ll) ? '1' : '0'), \ - (((i) & 0x08ll) ? '1' : '0'), \ - (((i) & 0x04ll) ? '1' : '0'), \ - (((i) & 0x02ll) ? '1' : '0'), \ - (((i) & 0x01ll) ? '1' : '0') - -#define PRINTF_BINARY_PATTERN_INT16 \ - PRINTF_BINARY_PATTERN_INT8 PRINTF_BINARY_PATTERN_INT8 -#define PRINTF_BYTE_TO_BINARY_INT16(i) \ - PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i) - - -/* --- end macros --- */ - - -class QuarterScanMatrixPanel : public Adafruit_GFX -{ - - public: - - MatrixPanel_I2S_DMA *display; - - QuarterScanMatrixPanel(MatrixPanel_I2S_DMA &disp) : Adafruit_GFX(64, 32) - { - this->display = &disp; - size_x = size_y = 1 ; - wrap = false; - cursor_x = cursor_y = 0; - dir = 1; - loop = true; - - } - - VirtualCoords getCoords(int16_t x, int16_t y); - int16_t getVirtualX(int16_t x) { - VirtualCoords coords = getCoords(x, 0); - return coords.x; - } - int16_t getVirtualY(int16_t y) { - VirtualCoords coords = getCoords(0,y); - return coords.y; - } -// int16_t getVirtualY(int16_t y) {return getCoords(0,y).y;} - /** extended function to draw lines/rects/... **/ - virtual uint8_t width() {return VP_WIDTH;}; - virtual uint8_t height() {return VP_HEIGHT;}; - - virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); - virtual void drawHLine(int16_t x0, int16_t y0, int16_t w, uint16_t color); - virtual void drawVLine(int16_t x0, int16_t y0, int16_t h, uint16_t color); - virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); - - virtual void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size); - virtual void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size_x, uint8_t size_y); - virtual void scrollChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint16_t dir, uint16_t speed); - virtual void drawString(int16_t x, int16_t y, unsigned char* c, uint16_t color, uint16_t bg); - virtual size_t write(unsigned char c); // write a character on current cursor position - virtual size_t write(const char *str); // write a character array (string) on current cursor position - - virtual void setTextWrap(bool w); - virtual void setCursor (int16_t x, int16_t y); - void setTextFGColor(uint16_t color) {textFGColor = color;}; - void setTextBGColor(uint16_t color) {textBGColor = color;}; - void setTextSize(uint8_t x, uint8_t y) {size_x = x; size_y = y;}; // magnification, default = 1 - - void setScrollDir(uint8_t d = 1) { dir = (d != 1) ? 0 : 1;}; // set scroll dir default = 1 - void setScroolLoop (bool b = true) { loop = b;} ; // scroll text in a loop, default true - void scrollText(const char *str, uint16_t speed, uint16_t pixels); - /**------------------------------------------**/ - - // equivalent methods of the matrix library so it can be just swapped out. - virtual void drawPixel(int16_t x, int16_t y, uint16_t color); - virtual void fillScreen(uint16_t color); // overwrite adafruit implementation - void clearScreen() { fillScreen(0); } - //void drawPixelRGB565(int16_t x, int16_t y, uint16_t color); - void drawPixelRGB888(int16_t x, int16_t y, uint8_t r, uint8_t g, uint8_t b); - //void drawPixelRGB24(int16_t x, int16_t y, RGB24 color); - void drawIcon (int *ico, int16_t x, int16_t y, int16_t module_cols, int16_t module_rows); - - uint16_t color444(uint8_t r, uint8_t g, uint8_t b) { - return display->color444(r, g, b); - } - uint16_t color565(uint8_t r, uint8_t g, uint8_t b) { - return display->color565(r, g, b); - } - uint16_t color333(uint8_t r, uint8_t g, uint8_t b) { - return display->color333(r, g, b); - } - - void flipDMABuffer() { display->flipDMABuffer(); } - void showDMABuffer() { display->showDMABuffer(); } - - void drawDisplayTest(); - - protected: - int16_t cursor_x, cursor_y; // Cursor position - uint8_t size_x, size_y; // Font size Multiplier default = 1 => 5x7 Font (5width,7Height) - uint16_t textFGColor, textBGColor; - bool wrap ; // < If set, 'wrap' text at right edge of display - uint8_t dir ; // used for scrolling text direction - bool loop ; // used for scrolling text in a loop - - private: - VirtualCoords coords; - -}; // end Class header - - -/*************************************************************************************** - - @brief scroll text from right to left or vice versa on current cursor position - please note, this function is not interruptable. - - @param *c pointer to \0 terminated string - @param pixels number of pixels to scroll, if 0, than scroll complete text - @param speed velocity of scrolling in ms -***************************************************************************************/ -void QuarterScanMatrixPanel::scrollText(const char *str,uint16_t speed, uint16_t pixels = 0) { - // first we put all columns of every char inside str into a big array of lines - // than we move through this array and draw line per line and move this line - // one position to dir - const uint8_t xSize = 6; - uint16_t len = strlen(str); - uint8_t array[len * xSize]; // size of array number of chars * width of char - //uint16_t lenArray = sizeof(array)/sizeof(array[0]); - uint16_t aPtr = 0; - // - // generate array - char c = *str; - // Serial.printf("size *str (%d), size array: (%d) \n", len, lenArray); - - while (c) { - // Serial.printf("** %c ** \n", c); - // read font line per line. A line is a column inside a char - for (int8_t i = 0; i < 5; i++) { - uint8_t line = pgm_read_byte(&font[c * 5 + i]); - array[aPtr++] = line; - // Serial.printf("%d - Line " PRINTF_BINARY_PATTERN_INT8 "\n", i, PRINTF_BYTE_TO_BINARY_INT8(line) ); - } - str++; - c = *str; - array[aPtr++] = 0x00; // line with 0 (space between chars) - - } - array[aPtr++] = 0x00; // line with 0 (space between chars) -/* - Serial.printf("---------------------------- \n"); - for (aPtr=0; aPtr < (len*xSize); aPtr++) { - Serial.printf("%d - Line " PRINTF_BINARY_PATTERN_INT8 "\n", aPtr, PRINTF_BYTE_TO_BINARY_INT8(array[aPtr]) ); - } -*/ - - int16_t x,y,lastX, p; - lastX = (dir) ? VP_WIDTH : 0; - x = cursor_x; - y = cursor_y; - Serial.printf("X: %d, Y: %d \n", x,y); - p=0; - pixels = (pixels) ? pixels : len * xSize; - - while (p <= pixels) { - // remove last pixel positions - fillRect(x,y,5,7,textBGColor); - // set new pixel position - x = (dir) ? lastX - p : lastX + p - pixels; - // iterator through our array - for (uint8_t i=0; i < (len*xSize); i++) { - uint8_t line = array[i]; - //Serial.printf("%d:%d : " PRINTF_BINARY_PATTERN_INT8 "\n", x, i, PRINTF_BYTE_TO_BINARY_INT8(line) ); - // read line and shift from right to left - // start with bit 0 (top of char) to 7(bottom) - for (uint8_t j=0; j < 8; j++, line>>=1) { - if (line & 1) { - // got 1, if x + i outside panel ignore pixel - if (x + i >= 0 && x + i < VP_WIDTH) { - drawPixel(x + i, y + j, textFGColor); - } - } - else { - // got 0 - if (x + i >= 0 && x + i < VP_WIDTH) { - drawPixel(x + i, y + j, textBGColor); - } - } // if - } // for j - } // for i - p++; - delay(speed); - - } // while -} - -inline size_t QuarterScanMatrixPanel::write(const char *str) { - uint8_t x, y; - x=cursor_x; - y=cursor_y; - char c = *str; - while (c) { - //Serial.printf("%c ", c); - write(c); - str++; - c = *str; - x = x + ((DEFAULT_FONT_W + PIXEL_SPACE) * size_x); - setCursor(x,y); - } - Serial.printf("\n"); - return 1; -} - -inline size_t QuarterScanMatrixPanel::write(unsigned char c) { - Serial.printf("\twrite(%d, %d, %c)\n", cursor_x, cursor_y, c); - drawChar(cursor_x, cursor_y, c, textFGColor, textBGColor, size_x, size_y); - return 1; -} - -void QuarterScanMatrixPanel::setTextWrap(bool w) {this->display->setTextWrap(w);} -void QuarterScanMatrixPanel::setCursor(int16_t x, int16_t y) { - cursor_x = x; - cursor_y = y; -} - - -/* - new for 16x32 panels - */ -inline void QuarterScanMatrixPanel::drawLine(int16_t x, int16_t y, int16_t x1, int16_t y1, uint16_t color) -{ - int16_t a,b; - for (a=x; a <= x1; a++) { - for (b=y; b <= y1; b++) { - drawPixel(a,b,color); - } - } -} - -inline void QuarterScanMatrixPanel::drawHLine(int16_t x, int16_t y, int16_t w, uint16_t color) -{ - drawLine(x,y,x+w,y, color); -} - -inline void QuarterScanMatrixPanel::drawVLine(int16_t x, int16_t y, int16_t h, uint16_t color) -{ - drawLine(x,y,x,y+h, color); -} - -inline void QuarterScanMatrixPanel::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) -{ - for (int16_t i = x; i < x + w; i++) { - drawVLine(i, y, h, color); - } -} - -void QuarterScanMatrixPanel::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size) -{ - drawChar(x,y,c,color, bg, size, size); -} - -inline void QuarterScanMatrixPanel::scrollChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint16_t dir, uint16_t speed){ - - if ((x >= VP_WIDTH) || - (y >= VP_HEIGHT) || - ((x + 6 * size_x-1) < 0) || - ((y + 8 * size_y-1) <0)) - return; - setTextWrap(true); - // text wrap is only for the right end of the panel, to scroll soft out of the left of panel - // algorithm should wrap the character from left to right - - - // loop s = scroll-loop, scrolls char 5 pixels into dir - uint8_t lastX = x; - for (int8_t s = 0; s < 6; s++) { - // loop i : width of a character - Serial.printf("X:%d ", x); - - // clear current position - fillRect(x,y,5,7,0); - x = lastX - s; - for (int8_t i = 0; i < 5; i++) { - // first line is the first vertical part of a character and 8bits long - // last bit is everytime 0 - // we read 5 lines with 8 bit (5x7 char + 8bit with zeros) - // Example : char A (90deg cw) - // 01111100 - // 00010010 - // 00010001 - // 00010010 - // 01111100 - uint8_t line = pgm_read_byte(&font[c * 5 + i]); - // shift from right to left bit per bit - // loop j = height of a character - // loop through a column of current character - Serial.printf("i:%d ", i); - // ignore all pixels outside panel - if (x+i >= VP_WIDTH) continue; - - for (int8_t j=0; j < 8; j++, line >>= 1) { - if (line & 1) { - Serial.printf - (" ON %d", x+i); - // we read 1 - if (x >= 0) { - drawPixel(x+i, y+j, color); - } - else if (x+i >= 0) { - drawPixel(x+i, y+j, color); - } - } - else if (bg != color) { - // we read 0 - Serial.printf(" OFF %d", x+i); - - if (x >= 0) { - drawPixel(x+i, y+j, bg); - } - else if (x+i >= 0) { - drawPixel(x+i, y+j, bg); - } - } - } - } - Serial.printf("\n"); - delay(speed); - } -} - - -inline void QuarterScanMatrixPanel::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size_x, uint8_t size_y) -{ - //Serial.printf("unmapped : drawChar(%d, %d, %c) \n",x, y, c); - - // note: remapping to 16x32 coordinates is done inside drawPixel() or fillRect - - if ((x >= VP_WIDTH) || - (y >= VP_HEIGHT) || - ((x + 6 * size_x-1) < 0) || - ((y + 8 * size_y-1) <0)) - return; - //Serial.printf("Font-Array : %d \n", sizeof(font)); - for (int8_t i = 0; i < 5; i++) { - uint8_t line = pgm_read_byte(&font[c * 5 + i]); - //Serial.printf("%d - Line " PRINTF_BINARY_PATTERN_INT8 "\n", i, PRINTF_BYTE_TO_BINARY_INT8(line) ); - for (int8_t j = 0; j < 8; j++, line >>= 1) { - if (line & 1) { - if (size_x == 1 && size_y == 1) - //Serial.printf(""); - drawPixel(x + i, y + j, color); - else - // remark: it's important to call function with original coordinates for x/y - fillRect(x + i * size_x, y + j * size_y, size_x, size_y, - color); - } else if (bg != color) { - if (size_x == 1 && size_y == 1) - drawPixel(x + i, y + j, bg); - else - // remark: it's important to call function with original coordinates for x/y - fillRect(x + i * size_x, y + j * size_y, size_x, size_y, bg); - } - } - } - -} - -inline void QuarterScanMatrixPanel::drawString(int16_t x, int16_t y, unsigned char* c, uint16_t color, uint16_t bg) { - -} - -inline VirtualCoords QuarterScanMatrixPanel::getCoords(int16_t x, int16_t y) -{ - const int y_remap[] = { 0,1,8,9,4,5,12,13,16,17,24,25,22,23,30,31 }; - if (y > VP_HEIGHT) - y = VP_HEIGHT; - if (x > VP_WIDTH) - x = VP_WIDTH; - coords.x = x + VP_WIDTH; - coords.y = y_remap[y]; - return coords; -} - - -/* -------------------------*/ - -inline void QuarterScanMatrixPanel::drawPixel(int16_t x, int16_t y, uint16_t color) -{ - VirtualCoords coords = getCoords(x, y); - this->display->drawPixel(coords.x, coords.y, color); -} - -inline void QuarterScanMatrixPanel::fillScreen(uint16_t color) // adafruit virtual void override -{ - // No need to map this. - this->display->fillScreen(color); -} -/* -inline void QuarterScanMatrixPanel::drawPixelRGB565(int16_t x, int16_t y, uint16_t color) -{ - VirtualCoords coords = getCoords(x, y); - this->display->drawPixelRGB565( coords.x, coords.y, color); -} -*/ - - -inline void QuarterScanMatrixPanel::drawPixelRGB888(int16_t x, int16_t y, uint8_t r, uint8_t g, uint8_t b) -{ - VirtualCoords coords = getCoords(x, y); - this->display->drawPixelRGB888( coords.x, coords.y, r, g, b); -} -/* -inline void QuarterScanMatrixPanel::drawPixelRGB24(int16_t x, int16_t y, RGB24 color) -{ - VirtualCoords coords = getCoords(x, y); - this->display->drawPixelRGB24(coords.x, coords.y, color); -} -*/ - - -// need to recreate this one, as it wouldn't work to just map where it starts. -inline void QuarterScanMatrixPanel::drawIcon (int *ico, int16_t x, int16_t y, int16_t module_cols, int16_t module_rows) { } - -#endif \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/One_Quarter_1_4_ScanPanel.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/One_Quarter_1_4_ScanPanel.ino deleted file mode 100644 index 16e47d8..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/One_Quarter_1_4_ScanPanel.ino +++ /dev/null @@ -1,226 +0,0 @@ -/************************************************************************* - * Contributor: https://github.com/mrRobot62 - * - * Description: - * - * The underlying implementation of the ESP32-HUB75-MatrixPanel-I2S-DMA only - * supports output to 1/16 or 1/32 scan panels (two scan parallel scan lines) - * this is fixed and cannot be changed. - * - * However, it is possible to connect 1/4 scan panels to this same library and - * 'trick' the output to work correctly on these panels by way of adjusting the - * pixel co-ordinates that are 'sent' to the ESP32-HUB75-MatrixPanel-I2S-DMA - * library (in this example, it is the 'dmaOutput' class). - * - * This is done by way of the 'QuarterScanMatrixPanel.h' class that sends - * adjusted x,y co-ordinates to the underlying ESP32-HUB75-MatrixPanel-I2S-DMA - * library's drawPixel routine. - * - * Refer to the 'getCoords' function within 'QuarterScanMatrixPanel.h' - * - **************************************************************************/ - - // PLEASE NOTE THIS EXAMPLE NO LONGER WORKS AS OF AUGUST 2021 - // IT NEEDS TO BE UPDATED TO THE NEW WAY OF USING THE LIBRARY - -// uncomment to use custom pins, then provide below -#define USE_CUSTOM_PINS - -/* Pin 1,3,5,7,9,11,13,15 */ -#define R1_PIN 25 -#define B1_PIN 27 -#define R2_PIN 14 -#define B2_PIN 13 -#define A_PIN 23 -#define C_PIN 5 -#define CLK_PIN 16 -#define OE_PIN 15 - -/* Pin 2,6,10,12,14 */ -#define G1_PIN 26 -#define G2_PIN 12 -#define B_PIN 19 -#define D_PIN 17 -#define LAT_PIN 4 -#define E_PIN -1 // required for 1/32 scan panels - -#include "OneQuarterScanMatrixPanel.h" // Virtual Display to re-map co-ordinates such that they draw correctly on a 32x16 1/4 Scan panel -#include - -/* - * Below is an is the 'legacy' way of initialising the MatrixPanel_I2S_DMA class. - * i.e. MATRIX_WIDTH and MATRIX_HEIGHT are modified by compile-time directives. - * By default the library assumes a single 64x32 pixel panel is connected. - * - * Refer to the example '2_PatternPlasma' on the new / correct way to setup this library - * for different resolutions / panel chain lengths within the sketch 'setup()'. - * - */ -MatrixPanel_I2S_DMA dmaOutput; - -// Create virtual 1/2 to 1/4 scan pixel co-ordinate mapping class. -QuarterScanMatrixPanel display(dmaOutput); - -#include - -int time_counter = 0; -int cycles = 0; - -CRGBPalette16 currentPalette; -CRGB currentColor; - - -CRGB ColorFromCurrentPalette(uint8_t index = 0, uint8_t brightness = 255, TBlendType blendType = LINEARBLEND) { - return ColorFromPalette(currentPalette, index, brightness, blendType); -} - -typedef struct Matrix { - uint8_t x; - uint8_t y; -} Matrix; - -Matrix matrix; - - -void testSimpleChars(uint16_t timeout) { - - /** drawChar() **/ - Serial.println("draw chars with drawChar()"); - display.fillScreen(display.color444(0,0,0)); - - uint16_t myFGColor = display.color565(180,0,0); - uint16_t myBGColor = display.color565(0,50,0); - display.fillScreen(display.color444(0,0,0)); - display.drawChar(0,0,'X',myFGColor, myFGColor,1); - display.drawChar(16,1,'Y',myFGColor, myBGColor,1); - display.drawChar(3,9,'Z',myFGColor, myFGColor,1); - display.drawChar(16,9,'4',display.color565(0,220,0), myBGColor,1); - delay(timeout); - -} - -void testSimpleCharString(uint16_t timeout) { - uint8_t x,y,w,h; - w = 6; h=8; - x = 0; y=0; - display.fillScreen(display.color444(0,0,0)); - display.setTextFGColor(display.color565(0,60,180)); - display.setCursor(x,y); display.write('L'); - display.setCursor(x+w,y); display.write('u'); - display.setCursor(x+(2*w),y); display.write('n'); - display.setCursor(x+(3*w),y); display.write('a'); - display.setTextFGColor(display.color565(180,60,140)); - display.setCursor(x+(4*w),y); display.write('X'); - - delay(timeout); - -} - -void testTextString(uint16_t timeout) { - display.fillScreen(display.color444(0,0,0)); - display.setTextFGColor(display.color565(0,60,255)); - - display.setCursor(0,5); - display.write("HURRA"); - delay(timeout); -} - -void testWrapChar(const char c, uint16_t speed, uint16_t timeout) { - display.setTextWrap(true); - for (uint8_t i = 32; i > 0; i--) { - display.fillScreen(display.color444(0,0,0)); - display.setCursor(i, 5); - display.write(c); - delay(speed); - } - delay(timeout); -} - -void testScrollingChar(const char c, uint16_t speed, uint16_t timeout) { - Serial.println("Scrolling Char"); - uint16_t myFGColor = display.color565(180,0,0); - uint16_t myBGColor = display.color565(60,120,0); - display.fillScreen(display.color444(0,0,0)); - display.setTextWrap(true); - // from right to left with wrap - display.scrollChar(31,5,c, myFGColor, myFGColor, 1, speed); - // left out with wrap - delay(500); - display.scrollChar(0,5,c, myBGColor, myBGColor, 1, speed); - - delay(timeout); -} - -void testScrollingText(const char *str, uint16_t speed, uint16_t timeout) { - Serial.println("Scrolling Text as loop"); - // pre config - uint16_t red = display.color565(255,0,100); - uint16_t blue100 = display.color565(0,0,100); - uint16_t black = display.color565(0,0,0); - uint16_t green = display.color565(0,255,0); - uint16_t green150 = display.color565(0,150,0); - - display.fillScreen(display.color565(0,0,0)); - display.setCursor(31,5); - display.setScrollDir(1); - - /** black background **/ - display.setTextFGColor(green150); - display.scrollText("** Welcome **", speed); - display.fillScreen(black); - delay(timeout / 2) ; - - /** scrolling with colored background */ - display.fillRect(0,4,VP_WIDTH,8,blue100); - // scrolling, using default pixels size = length of string (not used parameter pixels) - display.setTextFGColor(red); - display.setTextBGColor(blue100); - display.scrollText(str, speed); - delay(timeout / 2) ; - - // same as above but now from left to right - display.setScrollDir(0); - display.setTextFGColor(blue100); - display.setTextBGColor(red); - display.fillRect(0,4,VP_WIDTH,8,red); - display.scrollText(str, speed, 0); - - delay(timeout); - display.fillScreen(black); - display.setTextFGColor(red); - - -} - -void setup() { - - Serial.begin(115200); - delay(500); - Serial.println("*****************************************************"); - Serial.println(" dmaOutput 32x16 !"); - Serial.println("*****************************************************"); - -#ifdef USE_CUSTOM_PINS - dmaOutput.begin(R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN, A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, LAT_PIN, OE_PIN, CLK_PIN ); // setup the LED matrix -#else - display.begin(true); // init buffers -#endif - - // fill the screen with 'black' - display.fillScreen(display.color444(0, 0, 0)); - - // Set current FastLED palette - currentPalette = RainbowColors_p; - // display.fillScreen(display.color565(0, 0, 0)); -} - -void loop() { - display.fillScreen(display.color444(0, 0, 0)); - //testSimpleChars(1500); - //testSimpleCharString (1500); - testTextString(2000); - // length = 16 bytes without \0 - //testWrapChar('A', 250, 1500); - //testScrollingChar('X', 250, 2000); - testScrollingText("Scrolling 16x32", 100, 2000); -} // end loop \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/README.md deleted file mode 100644 index 817ef5e..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/One_Quarter_1_4_ScanPanel/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# Using this library with 32x16 1/4 Scan Panels - -## Problem -ESP32-HUB75-MatrixPanel-I2S-DMA library will not display output correctly with 1/4 scan panels such [as this](https://de.aliexpress.com/item/33017477904.html?spm=a2g0o.detail.1000023.16.1fedd556Yw52Zi&algo_pvid=4329f1c0-04d2-43d9-bdfd-7d4ee95e6b40&algo_expid=4329f1c0-04d2-43d9-bdfd-7d4ee95e6b40-52&btsid=9a8bf2b5-334b-45ea-a849-063d7461362e&ws_ab_test=searchweb0_0,searchweb201602_10,searchweb201603_60%5BAliExpress%2016x32%5D). - -## Solution -It is possible to connect 1/4 scan panels to this library and 'trick' the output to work correctly on these panels by way of adjusting the pixel co-ordinates that are 'sent' to the ESP32-HUB75-MatrixPanel-I2S-DMA library (in this example, it is the 'dmaOutput' class). - -Creation of a 'QuarterScanMatrixPanel.h' class which sends an adjusted x,y co-ordinates to the underlying ESP32-HUB75-MatrixPanel-I2S-DMA library's drawPixel routine, to trick the output to look pixel perfect. Refer to the 'getCoords' function within 'QuarterScanMatrixPanel.h' - -## Limitations - -* Only one font (glcd - standard font) is implemented. This font can't be resized. - -## New functions (and adapted function) in this QuarterScanMatrixPanel class -### drawLine -`void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)` - -Parameters should be self explained. x0/y0 upper left corner, x1/y1 lower right corner - -### drawHLine -`void drawHLine(int16_t x0, int16_t y0, int16_t w, uint16_t color)` - -Draw a fast horizontal line with length `w`. Starting at `x0/y0` - -### drawVLine -`void drawVLine(int16_t x0, int16_t y0, int16_t h, uint16_t color)` - -Draw a fast vertical line with length `h` Starting at `x0/y0` - -### fillRect -`void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)` - -Draw a rectangle starting at `x/y` with width `w` and height `h`in `color` - -### drawChar (5x7) Standard font -`drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size)` - -Draw a char at position x/y in `color` with a background color `bg` -`size` is ignored. - -### writeChar (5x7) -`size_t write(unsigned char c)` - -Write a char at current cursor position with current foreground and background color. - -### writeString (5x7) -`size_t write(const char *c)` - -Write a string at current cursor position with current foreground and background color. -You have to use `setCursor(x,y)` and `setTextFGColor() / setTextBGColor()` - -### drawString (5x7) -`void drawString(int16_t x, int16_t y, unsigned char* c, uint16_t color, uint16_t bg)` - -Draw String at position x/y wit foreground `color` and background `bg` -Example: `display.drawString(0,5,"**Welcome**",display.color565(0,60,255));` - -### void setScrollDir(uint8_t d = 1) -Set scrolling direction 0=left to right, 1= right to left (default) - -### scrollText -`void scrollText(const char *str, uint16_t speed, uint16_t pixels)` - -Scroll text `str` into `setScrollDir`. Speed indicates how fast in ms per pixel, pixels are the number pixes which should be scrolled, if not set or 0, than pixels is calculates by size of `*str` - -### drawPixel(int16_t x, int16_t y, uint16_t color) -Draw a pixel at x/y in `color`. This function is the atomic function for all above drawing functions - -### clearScreen() (all pixels off (black)) -Same as `fillScreen(0)` - - -## Example videos: -https://user-images.githubusercontent.com/949032/104838449-4aae5600-58bb-11eb-802f-a358b49a9315.mp4 - -https://user-images.githubusercontent.com/949032/104366906-5647f880-551a-11eb-9792-a6f8276629e6.mp4 - diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/README.md deleted file mode 100644 index ac988f6..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Test Patterns - -Simple solid colors, gradients and test line patterns, could be used to test matrices for proper operation, flickering and estimate fillrate timings. - -It is also used in CI test builds to check different build flags scenarios. - -Should be build and uploaded as a [platformio](https://platformio.org/) project - - -To build with Arduino's framework use -``` -pio run -t upload -``` - -To build using ESP32 IDF with arduino's component use -``` -pio run -t upload -e idfarduino -``` diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/platformio.ini b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/platformio.ini deleted file mode 100644 index 3505b2d..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/platformio.ini +++ /dev/null @@ -1,90 +0,0 @@ -[platformio] -;default_envs = esp32 -description = HUB75 ESP32 I2S DMA test patterns example -;src_dir = src - -[env] -framework = arduino -platform = espressif32 -board = wemos_d1_mini32 -lib_deps = - fastled/FastLED - https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git -build_flags = -upload_speed = 460800 -monitor_speed = 115200 -monitor_filters = esp32_exception_decoder - -[env:esp32] -build_flags = - ${env.build_flags} - -DTEST_FASTLINES -lib_deps = - ${env.lib_deps} - Wire - adafruit/Adafruit BusIO - adafruit/Adafruit GFX Library - -[env:debug] -build_flags = - ${env.build_flags} - -DTEST_FASTLINES - -DSERIAL_DEBUG -lib_deps = - ${env.lib_deps} - Wire - adafruit/Adafruit BusIO - adafruit/Adafruit GFX Library - -; build without GFX functions -[env:minimal] -build_flags = - ${env.build_flags} - -DNO_GFX - -DNO_FAST_FUNCTIONS - -DNO_CIE1931 -lib_deps = - ${env.lib_deps} - -; Virtual Panel test -[env:vpane] -build_flags = - ${env.build_flags} - -DNO_FAST_FUNCTIONS - -DVIRTUAL_PANE -lib_deps = - ${env.lib_deps} - Wire - adafruit/Adafruit BusIO - adafruit/Adafruit GFX Library - -; Virtual Panel test -[env:vpane_minimal] -build_flags = - ${env.build_flags} - -DVIRTUAL_PANE - -DNO_GFX - -DNO_FAST_FUNCTIONS - -DNO_CIE1931 -lib_deps = - ${env.lib_deps} - Wire - adafruit/Adafruit BusIO - adafruit/Adafruit GFX Library - -; PIO CI can't handle IDF git modules properly (yet) -;[env:idfarduino] -;platform = espressif32 -;platform_packages = -; ; use a special branch -; framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#idf-release/v4.4 -;framework = arduino, espidf -;build_flags = -; ${env.build_flags} -; -DARDUINO=200 -; -DESP32 -; ;-DUSE_FASTLINES -; -DNO_GFX -;lib_deps = -; ${env.lib_deps} -; https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/sdkconfig.defaults b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/sdkconfig.defaults deleted file mode 100644 index 909461e..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/sdkconfig.defaults +++ /dev/null @@ -1,18 +0,0 @@ -# Override some defaults to enable Arduino framework -CONFIG_ENABLE_ARDUINO_DEPENDS=y -CONFIG_AUTOSTART_ARDUINO=y -CONFIG_ARDUINO_RUN_CORE1=y -CONFIG_ARDUINO_RUNNING_CORE=1 -CONFIG_ARDUINO_EVENT_RUN_CORE1=y -CONFIG_ARDUINO_EVENT_RUNNING_CORE=1 -CONFIG_ARDUINO_UDP_RUN_CORE1=y -CONFIG_ARDUINO_UDP_RUNNING_CORE=1 -CONFIG_DISABLE_HAL_LOCKS=y -CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_ERROR=y -CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL=1 -CONFIG_ARDUHAL_PARTITION_SCHEME_DEFAULT=y -CONFIG_ARDUHAL_PARTITION_SCHEME="default" -CONFIG_AUTOCONNECT_WIFI=y -CONFIG_ARDUINO_SELECTIVE_WiFi=y -CONFIG_MBEDTLS_PSK_MODES=y -CONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/CMakeLists.txt b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/CMakeLists.txt deleted file mode 100644 index 483bc0c..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -# This file was automatically generated for projects -# without default 'CMakeLists.txt' file. - -FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*) - -idf_component_register(SRCS ${app_sources}) diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/main.cpp b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/main.cpp deleted file mode 100644 index 6325b63..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/main.cpp +++ /dev/null @@ -1,455 +0,0 @@ -// How to use this library with a FM6126 panel, thanks goes to: -// https://github.com/hzeller/rpi-rgb-led-matrix/issues/746 - -/* -// IDF -#include -#include -#include -#include -#include "sdkconfig.h" -*/ -#include -#include "xtensa/core-macros.h" -#ifdef VIRTUAL_PANE -#include -#else -#include -#endif -#include "main.h" - -// HUB75E pinout -// R1 | G1 -// B1 | GND -// R2 | G2 -// B2 | E -// A | B -// C | D -// CLK| LAT -// OE | GND - -/* Default library pin configuration for the reference - you can redefine only ones you need later on object creation -#define R1 25 -#define G1 26 -#define BL1 27 -#define R2 14 -#define G2 12 -#define BL2 13 -#define CH_A 23 -#define CH_B 19 -#define CH_C 5 -#define CH_D 17 -#define CH_E -1 // assign to any available pin if using panels with 1/32 scan -#define CLK 16 -#define LAT 4 -#define OE 15 -*/ - -// Configure for your panel(s) as appropriate! -#define PIN_E 32 -#define PANEL_WIDTH 64 -#define PANEL_HEIGHT 64 // Panel height of 64 will required PIN_E to be defined. - -#ifdef VIRTUAL_PANE - #define PANELS_NUMBER 4 // Number of chained panels, if just a single panel, obviously set to 1 -#else - #define PANELS_NUMBER 2 // Number of chained panels, if just a single panel, obviously set to 1 -#endif - -#define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER -#define PANE_HEIGHT PANEL_HEIGHT -#define NUM_LEDS PANE_WIDTH*PANE_HEIGHT - -#ifdef VIRTUAL_PANE - #define NUM_ROWS 2 // Number of rows of chained INDIVIDUAL PANELS - #define NUM_COLS 2 // Number of INDIVIDUAL PANELS per ROW - #define PANEL_CHAIN NUM_ROWS*NUM_COLS // total number of panels chained one to another - // Change this to your needs, for details on VirtualPanel pls read the PDF! - #define SERPENT true - #define TOPDOWN false -#endif - - -#ifdef VIRTUAL_PANE -VirtualMatrixPanel *matrix = nullptr; -MatrixPanel_I2S_DMA *chain = nullptr; -#else -MatrixPanel_I2S_DMA *matrix = nullptr; -#endif -// patten change delay -#define PATTERN_DELAY 2000 - -uint16_t time_counter = 0, cycles = 0, fps = 0; -unsigned long fps_timer; - -// gradient buffer -CRGB *ledbuff; -// - -unsigned long t1, t2, s1=0, s2=0, s3=0; -uint32_t ccount1, ccount2; - -uint8_t color1 = 0, color2 = 0, color3 = 0; -uint16_t x,y; - -const char *str = "* ESP32 I2S DMA *"; - -void setup(){ - - Serial.begin(BAUD_RATE); - Serial.println("Starting pattern test..."); - - // redefine pins if required - //HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK}; - HUB75_I2S_CFG mxconfig(PANEL_WIDTH, PANEL_HEIGHT, PANELS_NUMBER); - - mxconfig.gpio.e = PIN_E; - mxconfig.driver = HUB75_I2S_CFG::FM6126A; // for panels using FM6126A chips - -#ifndef VIRTUAL_PANE - matrix = new MatrixPanel_I2S_DMA(mxconfig); - matrix->begin(); - matrix->setBrightness8(255); -#else - chain = new MatrixPanel_I2S_DMA(mxconfig); - chain->begin(); - chain->setBrightness8(255); - // create VirtualDisplay object based on our newly created dma_display object - matrix = new VirtualMatrixPanel((*chain), NUM_ROWS, NUM_COLS, PANEL_WIDTH, PANEL_HEIGHT, SERPENT, TOPDOWN); -#endif - - ledbuff = (CRGB *)malloc(NUM_LEDS * sizeof(CRGB)); // allocate buffer for some tests - buffclear(ledbuff); -} - -uint8_t wheelval = 0; -void loop(){ - - Serial.printf("Cycle: %d\n", ++cycles); - -#ifndef NO_GFX - drawText(wheelval++); -#endif - - Serial.print("Estimating clearScreen() - "); - ccount1 = XTHAL_GET_CCOUNT(); - matrix->clearScreen(); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - Serial.printf("%d ticks\n", ccount1); - delay(PATTERN_DELAY); - -/* -// Power supply tester -// slowly fills matrix with white, stressing PSU - for (int y=0; y!=PANE_HEIGHT; ++y){ - for (int x=0; x!=PANE_WIDTH; ++x){ - matrix->drawPixelRGB888(x, y, 255,255,255); - //matrix->drawPixelRGB888(x, y-1, 255,0,0); // pls, be gentle :) - delay(10); - } - } - delay(5000); -*/ - -#ifndef VIRTUAL_PANE - // simple solid colors - Serial.println("Fill screen: RED"); - matrix->fillScreenRGB888(255, 0, 0); - delay(PATTERN_DELAY); - Serial.println("Fill screen: GREEN"); - matrix->fillScreenRGB888(0, 255, 0); - delay(PATTERN_DELAY); - Serial.println("Fill screen: BLUE"); - matrix->fillScreenRGB888(0, 0, 255); - delay(PATTERN_DELAY); -#endif - - for (uint8_t i=5; i; --i){ - Serial.print("Estimating single drawPixelRGB888(r, g, b) ticks: "); - color1 = random8(); - ccount1 = XTHAL_GET_CCOUNT(); - matrix->drawPixelRGB888(i,i, color1, color1, color1); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - Serial.printf("%d ticks\n", ccount1); - } - -// Clearing CRGB ledbuff - Serial.print("Estimating ledbuff clear time: "); - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - buffclear(ledbuff); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n\n", t2, ccount1); - -#ifndef VIRTUAL_PANE - // Bare fillscreen(r, g, b) - Serial.print("Estimating fillscreenRGB888(r, g, b) time: "); - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - matrix->fillScreenRGB888(64, 64, 64); // white - ccount2 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - s1+=t2; - Serial.printf("%lu us, avg: %lu, ccnt: %d\n", t2, s1/cycles, ccount2); - delay(PATTERN_DELAY); -#endif - - Serial.print("Estimating full-screen fillrate with looped drawPixelRGB888(): "); - y = PANE_HEIGHT; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - --y; - uint16_t x = PANE_WIDTH; - do { - --x; - matrix->drawPixelRGB888( x, y, 0, 0, 0); - } while(x); - } while(y); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - - - -// created random color gradient in ledbuff - uint8_t color1 = 0; - uint8_t color2 = random8(); - uint8_t color3 = 0; - - for (uint16_t i = 0; ifillRect(0, 0, PANE_WIDTH, PANE_HEIGHT, 0, 224, 0); - t2 = micros()-t1; - Serial.printf("%lu us\n", t2); - delay(PATTERN_DELAY); - - - Serial.print("Chessboard with fillRect(): "); // шахматка - matrix->fillScreen(0); - x =0, y = 0; - color1 = random8(); - color2 = random8(); - color3 = random8(); - bool toggle=0; - t1 = micros(); - do { - do{ - matrix->fillRect(x, y, 8, 8, color1, color2, color3); - x+=16; - }while(x < PANE_WIDTH); - y+=8; - toggle = !toggle; - x = toggle ? 8 : 0; - }while(y < PANE_HEIGHT); - t2 = micros()-t1; - Serial.printf("%lu us\n", t2); - delay(PATTERN_DELAY); -#endif - -// ======== V-Lines ========== - Serial.println("Estimating V-lines with drawPixelRGB888(): "); // - matrix->fillScreen(0); - color1 = random8(); - color2 = random8(); - x = y = 0; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - y=0; - do{ - matrix->drawPixelRGB888(x, y, color1, color2, color3); - } while(++y != PANE_HEIGHT); - x+=2; - } while(x != PANE_WIDTH); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - delay(PATTERN_DELAY); - -#ifdef TEST_FASTLINES - Serial.println("Estimating V-lines with vlineDMA(): "); // - matrix->fillScreen(0); - color2 = random8(); - x = y = 0; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - matrix->drawFastVLine(x, y, PANE_HEIGHT, color1, color2, color3); - x+=2; - } while(x != PANE_WIDTH); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - delay(PATTERN_DELAY); - - Serial.println("Estimating V-lines with fillRect(): "); // - matrix->fillScreen(0); - color1 = random8(); - color2 = random8(); - x = y = 0; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - matrix->fillRect(x, y, 1, PANE_HEIGHT, color1, color2, color3); - x+=2; - } while(x != PANE_WIDTH); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - delay(PATTERN_DELAY); -#endif - - - -// ======== H-Lines ========== - Serial.println("Estimating H-lines with drawPixelRGB888(): "); // - matrix->fillScreen(0); - color2 = random8(); - x = y = 0; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - x=0; - do{ - matrix->drawPixelRGB888(x, y, color1, color2, color3); - } while(++x != PANE_WIDTH); - y+=2; - } while(y != PANE_HEIGHT); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - delay(PATTERN_DELAY); - -#ifdef TEST_FASTLINES - Serial.println("Estimating H-lines with hlineDMA(): "); - matrix->fillScreen(0); - color2 = random8(); - color3 = random8(); - x = y = 0; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - matrix->drawFastHLine(x, y, PANE_WIDTH, color1, color2, color3); - y+=2; - } while(y != PANE_HEIGHT); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - delay(PATTERN_DELAY); - - Serial.println("Estimating H-lines with fillRect(): "); // - matrix->fillScreen(0); - color2 = random8(); - color3 = random8(); - x = y = 0; - t1 = micros(); - ccount1 = XTHAL_GET_CCOUNT(); - do { - matrix->fillRect(x, y, PANE_WIDTH, 1, color1, color2, color3); - y+=2; - } while(y != PANE_HEIGHT); - ccount1 = XTHAL_GET_CCOUNT() - ccount1; - t2 = micros()-t1; - Serial.printf("%lu us, %u ticks\n", t2, ccount1); - delay(PATTERN_DELAY); -#endif - - - - - Serial.println("\n====\n"); - - // take a rest for a while - delay(10000); -} - - -void buffclear(CRGB *buf){ - memset(buf, 0x00, NUM_LEDS * sizeof(CRGB)); // flush buffer to black -} - -void IRAM_ATTR mxfill(CRGB *leds){ - uint16_t y = PANE_HEIGHT; - do { - --y; - uint16_t x = PANE_WIDTH; - do { - --x; - uint16_t _pixel = y * PANE_WIDTH + x; - matrix->drawPixelRGB888( x, y, leds[_pixel].r, leds[_pixel].g, leds[_pixel].b); - } while(x); - } while(y); -} -// - -/** - * The one for 256+ matrices - * otherwise this: - * for (uint8_t i = 0; i < MATRIX_WIDTH; i++) {} - * turns into an infinite loop - */ -uint16_t XY16( uint16_t x, uint16_t y) -{ - if (xsetTextSize(1); // size 1 == 8 pixels high - matrix->setTextWrap(false); // Don't wrap at end of line - will do ourselves - - matrix->setCursor(5, 5); // start at top left, with 5,5 pixel of spacing - uint8_t w = 0; - - for (w=0; wsetTextColor(colorWheel((w*32)+colorWheelOffset)); - matrix->print(str[w]); - } -} -#endif - -uint16_t colorWheel(uint8_t pos) { - if(pos < 85) { - return matrix->color565(pos * 3, 255 - pos * 3, 0); - } else if(pos < 170) { - pos -= 85; - return matrix->color565(255 - pos * 3, 0, pos * 3); - } else { - pos -= 170; - return matrix->color565(0, pos * 3, 255 - pos * 3); - } -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/main.h b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/main.h deleted file mode 100644 index a1310f4..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/PIO_TestPatterns/src/main.h +++ /dev/null @@ -1,10 +0,0 @@ - -#include - -#define BAUD_RATE 115200 // serial debug port baud rate - -void buffclear(CRGB *buf); -uint16_t XY16( uint16_t x, uint16_t y); -void mxfill(CRGB *leds); -uint16_t colorWheel(uint8_t pos); -void drawText(int colorWheelOffset); \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/README.md b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/README.md deleted file mode 100644 index 5197413..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/README.md +++ /dev/null @@ -1,14 +0,0 @@ -| Example Name |Description | -|--|--| -|1_SimpleTestShapes |Example for new starters - how to display basic shapes. | -|2_PatternPlasma |Example for new starters - how to display a cool plasma pattern. | -|3_FM6126Panel |Example for new starters - how to initialise FM6126/FM6126A panels with this library. -|AnimatedGIFPanel |Using Larry Bank's GIF Decoder to display animated GIFs. | -|AuroraDemo |Simple example demonstrating various animated effects. | -|BitmapIcons |Simple example of how to display a bitmap image to the display. | -|ChainedPanels |Popular example on how to use the 'VirtualMatrixPanel' class to chain multiple LED Matrix Panels to form a much bigger display! Refer to the README within this example's folder! | -|ChainedPanelsAuroraDemo |As above, but showing a large trippy plasma animation. | -|ChainedPanelsScreenBuffer |Using the same 'VirtualMatrixPanel' class but also implementing a FastLED off-screen pixel buffer to do cool stuff. | -|One_Quarter_1_4_ScanPanel |Using this library with a 32w x 16h 1/4 Scan LED Matrix Panel. Custom co-ordinate remapping logic required. NOT WORKING. | -|One_Eighth_1_8_ScanPanel |Using this library with a 64w x 32h 1/8 Scan LED Matrix Panel. Custom co-ordinate remapping logic required. -|PIO_TestPatterns |Non-Arduino example of how to display basic shapes. | diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/SmoothDoubleBuffer/SmoothDoubleBuffer.ino b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/SmoothDoubleBuffer/SmoothDoubleBuffer.ino deleted file mode 100644 index 6e40c36..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/examples/SmoothDoubleBuffer/SmoothDoubleBuffer.ino +++ /dev/null @@ -1,71 +0,0 @@ -#include - -MatrixPanel_I2S_DMA *display = nullptr; - -const byte row0 = 2+0*11; -const byte row1 = 2+1*11; -const byte row2 = 2+2*11; - -int start_x = 0; -int buffer_id = 0; - - -void setup() -{ - // put your setup code here, to run once: - delay(1000); - Serial.begin(115200); - delay(200); - - Serial.println("...Starting Display"); - HUB75_I2S_CFG mxconfig; - mxconfig.double_buff = true; // Turn of double buffer - mxconfig.clkphase = true; - - // OK, now we can create our matrix object - display = new MatrixPanel_I2S_DMA(mxconfig); - - display->begin(); // setup display with pins as pre-defined in the library - - start_x = display->width(); -} -/* - This example draws a red square on one buffer only, and a green square on another buffer only. - It then flips between buffers as fast as possible whilst moving them as well - to give the impression they're both on screen at the same time! - - The only thing that's painted to both buffers is a blue square. - */ -const int square_size = 16; -void loop() -{ - display->flipDMABuffer(); - //if ( !display->backbuffready() ) return; - //display->showDMABuffer(); - display->clearScreen(); - - buffer_id ^= 1; - - // Blue square on the left is printed to BOTH buffers. - display->fillRect(0, 0, square_size/2, square_size/2, display->color565(0,0,200)); - - start_x--; - - if (buffer_id) - { - display->setCursor(3, row1); - display->setTextColor(display->color565(200, 0, 0)); - display->fillRect(start_x, 6, square_size, square_size, display->color565(200,0,0)); - //delay(40); // simulate slow drawing operation - } - else - { - display->setCursor(3, row2); - display->setTextColor(display->color565(0, 200, 0)); - display->fillRect(10, start_x, square_size, square_size, display->color565(0,200,0)); - } - - display->printf("Buffer %d", buffer_id); - - if (start_x < (-1*square_size)) start_x = display->width()+square_size; - -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/image.jpg b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/image.jpg deleted file mode 100644 index f0c9cbe..0000000 Binary files a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/image.jpg and /dev/null differ diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/keywords.txt b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/keywords.txt deleted file mode 100644 index b6ccefa..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/keywords.txt +++ /dev/null @@ -1,18 +0,0 @@ -RGB64x32MatrixPanel_I2S_DMA KEYWORD1 -MatrixPanel_I2S_DMA KEYWORD1 -Layer KEYWORD1 -fillScreen KEYWORD2 -clearScreen KEYWORD2 -fillScreenRGB888 KEYWORD2 -drawPixelRGB565 KEYWORD2 -drawPixelRGB888 KEYWORD2 -drawPixelRGB24 KEYWORD2 -drawIcon KEYWORD2 -color444 KEYWORD2 -color565 KEYWORD2 -color333 KEYWORD2 -flipDMABuffer KEYWORD2 -showDMABuffer KEYWORD2 -setPanelBrightness KEYWORD2 -setMinRefreshRate KEYWORD2 -RGB24 KEYWORD1 \ No newline at end of file diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/library.json b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/library.json deleted file mode 100644 index 0b09eac..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/library.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "ESP32 HUB75 LED MATRIX PANEL DMA Display", - "keywords": "hub75, esp32, display, dma, rgb matrix", - "description": "An experimental Adafruit GFX compatible library for 64x32 or 64x64 LED matrix modules using the ESP32 DMA Engine for ultra-fast refresh rates, no-interrupts and therefore very low CPU usage.", - "repository": { - "type": "git", - "url": "https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git" - }, - "authors": { - "name": "Faptastic", - "url": "https://github.com/mrfaptastic/" - }, - "version": "2.0.7", - "frameworks": "arduino", - "platforms": "esp32", - "examples": [ - "examples/1_SimpleTestShapes/*.ino", - "examples/1_SimpleTestShapes/*.cpp", - "examples/1_SimpleTestShapes/*.h", - "examples/2_PatternPlasma/*.ino", - "examples/2_PatternPlasma/*.cpp", - "examples/2_PatternPlasma/*.h", - "examples/3_FM6126Panel/*.ino", - "examples/3_FM6126Panel/*.cpp", - "examples/3_FM6126Panel/*.h", - "examples/ChainedPanels/*.ino", - "examples/ChainedPanels/*.h", - "examples/ChainedPanels/*.cpp" - ] -} diff --git a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/library.properties b/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/library.properties deleted file mode 100644 index ce8c832..0000000 --- a/lib/HUB75/ESP32-HUB75-MatrixPanel-I2S-DMA/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=ESP32 HUB75 LED MATRIX PANEL DMA Display -version=2.0.7 -author=Faptastic -maintainer=Faptastic -sentence=Experimental DMA based LED Matrix HUB75 Library -paragraph=An experimental Adafruit GFX compatible library for 64x32 or 64x64 LED matrix modules using the ESP32 DMA Engine for ultra-fast refresh rates, no-interrupts and therefore very low CPU usage. -category=Display -url=https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA -architectures=esp32 diff --git a/lib/HUB75/library.json b/lib/HUB75/library.json deleted file mode 100644 index 077ca8b..0000000 --- a/lib/HUB75/library.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ESP32-HUB75-MatrixPanel-I2S-DMA", - "build": { - "includeDir": "ESP32-HUB75-MatrixPanel-I2S-DMA", - "srcFilter": [ - "+", - "+" - ] - } -} \ No newline at end of file diff --git a/lib/assets/assets.h b/lib/assets/assets.h index 0cec96d..46021d7 100644 --- a/lib/assets/assets.h +++ b/lib/assets/assets.h @@ -5,3 +5,6 @@ extern const uint8_t ASSET_NOAPPS_WEBP[]; extern size_t ASSET_NOAPPS_WEBP_LEN; + +extern const uint8_t ASSET_LAZY_DADDY_MP3[]; +extern size_t ASSET_LAZY_DADDY_MP3_LEN; diff --git a/lib/assets/lazy_daddy_jukebox_29617.c b/lib/assets/lazy_daddy_jukebox_29617.c new file mode 100644 index 0000000..6423510 --- /dev/null +++ b/lib/assets/lazy_daddy_jukebox_29617.c @@ -0,0 +1,851 @@ +// Public domain sample from: +// https://www.loc.gov/item/jukebox-29617/ + +#include +#include +const size_t ASSET_LAZY_DADDY_MP3_LEN = 14889; +const uint8_t ASSET_LAZY_DADDY_MP3[] = + "\x49\x44\x33\x03\x00\x00\x00\x00\x01\x27\x54\x41\x4c\x42\x00\x00\x00" + "\x1b\x00\x00\x00\x54\x68\x65\x20\x4e\x61\x74\x69\x6f\x6e\x61\x6c\x20" + "\x4a\x75\x6b\x65\x62\x6f\x78\x3a\x20\x4a\x61\x7a\x7a\x54\x50\x45\x31" + "\x00\x00\x00\x18\x00\x00\x00\x4c\x61\x72\x72\x79\x20\x53\x68\x69\x65" + "\x6c\x64\x73\x3a\x20\x63\x6f\x6d\x70\x6f\x73\x65\x72\x54\x58\x58\x58" + "\x00\x00\x00\x17\x00\x00\x00\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x4c" + "\x61\x76\x66\x35\x38\x2e\x32\x36\x2e\x31\x30\x31\x54\x59\x45\x52\x00" + "\x00\x00\x05\x00\x00\x00\x31\x39\x31\x38\x54\x44\x52\x43\x00\x00\x00" + "\x05\x00\x00\x00\x31\x39\x31\x38\x54\x49\x54\x32\x00\x00\x00\x17\x00" + "\x00\x00\x4c\x61\x7a\x79\x20\x64\x61\x64\x64\x79\x20\x30\x30\x31\x20" + "\x28\x30\x30\x3a\x32\x35\x29\xff\xfb\x94\xc4\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x69\x6e\x67\x00\x00" + "\x00\x0f\x00\x00\x00\x31\x00\x00\x39\x78\x00\x0d\x0d\x12\x12\x18\x18" + "\x1d\x1d\x21\x21\x26\x26\x2b\x2b\x31\x31\x36\x36\x3c\x3c\x41\x41\x46" + "\x46\x4b\x4b\x50\x50\x55\x55\x5a\x5a\x60\x60\x65\x65\x6a\x6a\x6e\x6e" + "\x73\x73\x78\x78\x7e\x7e\x83\x83\x88\x88\x88\x8c\x8c\x91\x91\x96\x96" + "\x9b\x9b\xa0\xa0\xa5\xa5\xab\xab\xb1\xb1\xb8\xb8\xbe\xbe\xc3\xc3\xc7" + "\xc7\xcc\xcc\xd1\xd1\xd6\xd6\xda\xda\xdf\xdf\xe4\xe4\xe9\xe9\xed\xed" + "\xf2\xf2\xf7\xf7\xfc\xfc\xff\xff\x00\x00\x00\x50\x4c\x41\x4d\x45\x33" + "\x2e\x31\x30\x30\x04\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x15\x20\x24" + "\x03\x2e\x81\x00\x01\xe0\x00\x00\x39\x78\x5d\xe5\x2b\x41\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\xff\xfb\xd4\xc4\x00\x00\x08\x58\x11\x5d\xb4\x30\x00\x23\x76\x40\x6a" + "\xbf\x33\x40\x00\x00\x00\xa2\x20\xd9\x23\x91\xce\xef\xc0\x80\x00\x02" + "\x1c\xe0\x7e\x50\x1f\x07\xc1\xf0\x7f\x04\x01\x00\x40\x1f\x07\xc1\xf0" + "\x7c\x1c\x04\x01\x00\x43\x89\xc1\xf0\x70\xe6\x50\x1f\xff\x07\xf9\x40" + "\x40\x10\x04\x1d\xe5\x01\x07\x7f\x82\x07\x3e\x5d\xff\xca\x02\x01\x8f" + "\x50\x62\x50\x41\x88\x45\x50\x89\xd0\xa8\x56\x16\x5c\xe5\x8a\xda\xda" + "\x2c\x26\xf8\xc1\x8a\x52\x0c\x48\x04\x89\xde\x58\x2d\x54\xb0\x26\xe8" + "\xb8\x46\xe1\x43\x81\x8b\xae\x38\x90\x21\x87\x6c\x30\x04\x70\x14\x51" + "\x25\x01\x84\x00\x3c\x21\x68\x40\x41\x4b\x0d\xb6\x03\x6c\x2c\x0c\xa1" + "\xb0\x02\x08\x5e\x16\x13\x62\x78\x9d\x1d\x63\x32\x1e\xf8\xe4\x12\x03" + "\x20\x33\x84\x1d\x22\xe1\x68\x88\x0e\xd6\x25\x0a\x23\x8c\x73\xc4\xf0" + "\x88\xf4\x4b\x11\xa7\x0c\xd0\x4c\xbc\x6c\x64\x4e\x9b\x0f\x52\x2c\x66" + "\x4e\x90\x33\x41\xc4\x37\xc9\xc2\xb9\x36\x5b\x30\x2b\x1c\x3e\x64\xc6" + "\xd2\xa9\x3c\x5c\x3e\x6c\x2d\x65\xc2\x80\xf0\x6f\x23\xcd\x0d\x88\x89" + "\xa9\x1a\x5c\x28\x90\xf2\x2a\x29\x42\x26\x48\x13\x66\x26\xc5\xc4\x4c" + "\x92\x3c\xb3\xa6\x67\xd6\x83\x9e\x1e\xf6\x30\x2e\x2c\xdc\xdd\xd0\xeb" + "\x3a\x5f\x42\x75\x73\x04\x93\xfb\x2e\x52\x3c\xb4\x7d\x76\xd0\x2c\x93" + "\x87\xcd\x79\xd3\x53\xd9\xa1\xc3\x7b\x7f\xff\xff\xfe\xb5\x37\xff\xff" + "\xff\xe6\xa7\x15\xb3\x11\x54\x42\x52\x09\x24\x28\x00\x4f\x01\x93\x08" + "\x66\x42\x55\x02\xa8\x91\xbd\xe8\x1e\x02\x9a\xad\x79\x1d\x97\x63\x94" + "\xf4\x40\xb2\x07\x4a\xa8\xa1\x60\xdc\xf3\xcb\x10\xc3\xfb\x2a\x64\x23" + "\x14\x14\x20\x94\x5e\x4b\x79\xee\x19\xe4\x96\xbb\xdc\x6c\x40\xcd\x2f" + "\xe1\xab\xee\x27\x84\xb8\xb4\xab\x5e\xb6\x66\xbb\x6b\xe3\xbe\xbf\xe9" + "\x66\xb8\xee\xa6\xa2\x74\xeb\xff\xfa\x79\x5f\xb8\x95\xd7\x5f\xe2\xf8" + "\xbf\xd1\xd7\xab\x8f\x8f\xff\xf4\xe9\x39\xae\xb9\x44\x4c\xff\x02\x10" + "\xb2\x21\x53\x32\x42\x0f\x22\x24\x80\x00\x64\x18\x7d\xe2\x13\x60\x63" + "\x00\xa0\x03\x20\x86\x80\x82\x81\xd2\x3a\x2b\x34\xe5\x56\x0b\x7a\xa4" + "\xaf\x80\xba\x7c\x2c\xa7\x93\xc7\xc0\x93\x35\xfe\x18\xcd\x00\xde\x25" + "\x68\x81\x49\x70\x4f\xbf\x67\x8e\xf1\xe2\x2a\x1b\x95\x1c\x30\xc3\x88" + "\xd2\x61\xd3\x9d\x4a\xca\x56\x9c\xcd\x38\xa1\x4e\xe4\x69\xa2\x8e\x30" + "\xae\x91\xac\xb6\xba\x08\xc6\x16\x2b\xd0\x30\x58\x38\x1e\x23\x4a\x7d" + "\x09\x3b\xea\xef\x61\x33\x8f\x42\x64\x6f\xff\x18\xfd\x05\x86\x08\x96" + "\x3a\xc3\x1f\xf4\x42\x56\xb2\xaa\x14\xac\x43\xb3\xc6\x20\xf8\xc0\x05" + "\xb6\x03\x76\x64\x54\x2f\x6c\x71\x20\x8d\xf9\x1c\x33\x23\x11\x44\xa0" + "\x2f\x71\x00\x12\x68\x40\x4c\x97\x13\x52\x50\x28\x2d\xda\x82\x54\xc6" + "\xec\xcd\x34\x71\xf3\xbb\x58\x80\x31\xaf\xd4\xa9\x8a\xba\x94\xf7\x56" + "\x35\x2c\xdd\x34\xe4\xfe\xbb\x7b\xb9\x1c\x56\x98\x91\xc3\x55\x79\x10" + "\x19\x07\xc5\x89\xb2\xd0\xa5\x04\x27\xe8\x74\x63\x0c\x20\x18\x88\x2c" + "\xfe\x10\x40\xc9\x4f\xda\x57\xd0\xc3\x0b\x33\x7e\xa8\x82\xdd\x83\x6c" + "\x8d\xba\x55\x8a\x5f\xff\xff\xfc\xaf\x2b\x7f\x56\x76\xd5\xec\x7a\x74" + "\x78\x26\xb7\xa1\x0e\x3a\xe2\xea\x32\x80\x04\x8c\xf0\xa7\xfc\x81\x01" + "\x01\x2d\x8b\x74\x4b\x32\x00\xca\x58\xab\x7c\xb0\x31\x38\xc3\x3a\x0a" + "\x31\x97\xdb\xa5\x63\x4a\xd7\x1f\x99\x2a\x0d\x12\x2c\xd3\x3f\xc8\x8e" + "\xe1\x43\x71\xf4\xe5\xa1\xa6\xa0\x91\x21\x6f\xa3\xc5\x90\x54\x1b\x08" + "\x22\xc7\x63\x4c\x2c\xba\x2c\x74\x74\x2c\x4d\xb2\x2a\xbd\xa2\x54\x9a" + "\xb7\x0e\x61\xff\xfb\x74\xc4\xe5\x00\x0e\x61\x73\x5f\xfd\xa4\x00\x22" + "\x1e\x2f\xeb\x3d\xa7\x95\x7d\x3a\xb4\xab\x1f\x43\x1c\xa8\x74\x3e\xf4" + "\x53\xbd\x48\xbe\x60\x8e\x71\x85\xb3\xa3\x31\x1a\xcb\x32\x17\xff\x6f" + "\xff\x46\xe8\x4c\x8c\x8d\xe7\x7c\xda\xb4\x8d\xd8\x01\x61\x0a\xec\x15" + "\xe3\x8c\xdd\x5b\x4e\x28\x3f\x29\x7d\x82\xf3\x0b\x1d\x10\x9b\x28\xb3" + "\x82\x1d\x68\x14\xb4\x36\x45\xe8\xf3\xf1\x10\x19\x03\xb9\x52\xf2\xa9" + "\x39\xf8\x6e\x5a\xa4\x6e\x7e\x6c\x01\xdd\xce\xb3\xa1\x9d\x5c\xa5\x4d" + "\x9a\x55\x35\x49\x72\xb0\x09\xd2\x53\x08\x00\x16\x13\x12\xe1\x12\xe1" + "\xb5\x21\x6a\xce\xe8\x88\x2e\xb4\x9b\x19\x7b\xbb\x39\x6f\x67\x90\xee" + "\x18\x82\x3e\x62\xf7\x59\x41\xcc\x38\x49\xc0\xe6\x61\x70\xfb\x4c\x62" + "\x30\x97\x41\x7f\x8d\xff\xfb\xb4\xef\x1d\xb8\x90\x90\xef\x0b\x4a\x86" + "\x62\x03\xa2\x6d\xc2\x60\x66\x30\x67\xa9\x29\xbb\xa3\x18\xeb\x63\x45" + "\x36\x71\xc4\x62\x03\x0c\x12\x8e\x34\x53\x4b\x10\x82\x84\x64\xc4\x66" + "\xbf\x53\xe1\x4c\xda\x83\x87\x38\xf5\x33\x47\xc2\xdb\x46\x19\xfc\x16" + "\x27\xdb\x9e\x0e\xce\x4c\xdf\x15\x38\x6d\x75\xe3\x06\xb2\x56\xd7\x19" + "\x02\xcb\x76\x86\xbd\xb4\xdb\x70\x36\x12\xe6\xa0\xf1\xcf\xab\x2a\x89" + "\xf9\x9a\xfa\x8a\x9a\xa9\xa5\xb6\x6a\xe1\xab\x98\xbe\x62\x1a\x06\x5f" + "\xec\x3d\xff\xfb\x74\xc4\xed\x00\x0f\x3d\x77\x61\xec\x0c\x59\x69\xfa" + "\x2f\xab\x35\x84\x16\xed\x24\xcb\x85\x19\x5f\x03\x7c\xa9\x76\x33\xfa" + "\xff\xff\xff\xf9\x09\x6b\x0e\x07\xad\x72\xa1\xec\xc2\x2b\xd7\xf3\x5c" + "\x59\x9f\xff\xaf\x47\xc5\xd7\x23\x66\x97\x82\x09\x7c\x6d\x13\x40\xea" + "\x23\x6a\xa6\x19\x4c\xbd\x10\x73\x19\x53\x03\x04\x7d\x3d\x2d\xa9\x84" + "\x4b\xee\xc4\xda\xe4\x34\xa6\xab\xba\x17\x17\x09\x5d\x9d\x2d\xf2\x81" + "\x04\x9c\xc0\xdb\x12\x92\xe1\xc5\x10\xa5\x2b\x7f\x7c\x04\x8d\x9e\x60" + "\x82\x32\xf0\xf1\xaf\x38\xe3\x37\x4c\x5a\x7b\xbe\xe6\xea\xf5\x1d\xdb" + "\x75\xa7\xb8\xec\x6f\xca\x7f\x90\x3a\x71\x61\xb4\xf1\xe5\xaa\x39\xf9" + "\x5a\xb2\xd0\xdb\x69\x79\xa5\x66\x2e\x9d\x1a\xf2\xb9\xb9\x0b\x34\xef" + "\xa0\xd9\xca\x0a\xe0\xe0\xdd\xd3\x95\x12\xf6\x02\x13\xd2\xc0\x66\xa8" + "\x88\xa1\x9e\x6d\x24\x59\x3f\x5a\x0b\x45\x03\x10\x6a\x32\x44\xd5\x0e" + "\x29\x8c\x96\x0b\xcc\xa6\xe4\x82\xa5\x87\xef\x20\xdc\x09\x7a\xb3\x55" + "\x4a\x28\x8c\x5d\xe0\x53\x8c\x79\xd5\x37\x0a\x01\xad\x01\x43\xe4\x5d" + "\x19\xea\xc7\xa5\x6a\xb1\x8d\x5b\x28\xc9\x58\x89\x83\x21\xcd\x43\xbd" + "\x0a\xe1\x45\xc4\x26\x35\x35\x75\xb2\xfe\x52\x70\x46\x71\x88\xe4\x22" + "\x22\x3a\xea\x28\xc8\xdf\xcf\xe9\xb9\x2b\x95\xf5\xac\xe7\x93\x11\x42" + "\x36\xff\xfb\x74\xc4\xf6\x00\x10\x35\x81\x59\xac\x0c\xb9\x02\x04\x30" + "\x6c\x3d\x96\x22\x1c\x5e\x54\xdb\x3e\x3e\x47\x3f\xff\x85\xf1\xb1\x7f" + "\x90\xbf\xf6\xff\x15\x82\xba\x52\xb3\x13\x25\x23\x41\x06\xab\x48\x92" + "\x81\x61\x58\x6b\xb2\x48\x50\xb9\x76\x95\xd9\x31\x40\xe0\xb3\xca\x5a" + "\x9d\x4b\x4e\x53\x22\xaa\x84\xde\xe1\x4e\xb4\x60\x7a\xf6\x94\x31\xf5" + "\xdd\x34\x95\x72\x1e\xbb\x42\xf1\xa2\xab\x10\x79\x1d\x6a\xdb\x0f\x0c" + "\x8c\x4b\x85\x15\x10\xaf\x44\x8c\xac\x72\x74\x77\xcb\x96\xa1\x47\x09" + "\xa7\x5a\x0b\x2c\x0a\xe0\x6a\xfa\x04\x88\xd0\x5a\x64\x4a\x78\x01\x22" + "\xc5\xa6\x34\x73\xbd\x11\xdb\xbc\x38\xd2\xb4\x89\x47\xa4\xa4\x8b\x6f" + "\x35\x7e\x52\x2e\x35\x51\xdd\x49\x11\x28\x9c\x54\xba\x14\x6d\x4a\x0d" + "\x32\xcb\x40\xc9\x6a\xfe\x77\xff\xff\xff\x7f\xff\xff\xf9\xc9\x36\x7c" + "\x78\xd0\xe8\xae\x9c\x62\x45\x63\x46\x20\x35\xc4\x80\x04\xd4\x36\x5f" + "\xb3\x2a\xcb\x25\x0e\x27\x22\x66\x87\x4d\x4e\x25\xe9\x80\xa3\xea\x0f" + "\x2a\x13\xc3\x23\x01\xcc\x44\x1c\x4f\x28\x4f\x01\x4f\xbc\x9d\x7e\x8e" + "\xbf\x3d\x35\x42\xb0\xd2\x3c\x53\xde\x6f\xaa\xc7\x5b\x51\xfc\xbc\xfb" + "\xb6\x66\xaa\x6b\x55\x54\xf9\x75\x80\xa6\x7c\xa6\x0e\x50\xb3\x67\x1c" + "\xe3\x34\xc6\x5c\xd6\x33\x51\x79\xd2\x2e\x9d\xda\x53\x33\xb6\x3a\xc0" + "\xff\xfb\x64\xc4\xfa\x00\x0f\xcd\x6b\x61\xec\xa4\xf1\xe1\xfa\x2f\x6b" + "\x3d\x84\x8e\x90\x4b\x4e\x11\x50\xbb\x79\xb7\xcf\x1c\xb2\x41\xc0\x27" + "\xf9\x5a\xab\x59\x09\xc3\xe7\x2a\xb7\x46\x87\x46\x80\x49\xb6\x91\x23" + "\x8f\x84\x8f\xd1\x93\x14\x6b\x04\x2d\x0c\x54\x21\x3b\x83\x8c\x38\x25" + "\xbb\x4d\x1f\x58\x58\xcb\x01\x40\xf6\x26\xc3\xea\x54\x29\x30\x20\x4c" + "\x01\xc0\xd1\xe4\x46\xaf\xfa\x94\xc4\x65\xf2\x59\x24\xae\xb1\x36\x1e" + "\xcb\x70\xee\x5c\xff\xc4\xcd\xce\x5b\x95\xab\xe4\x66\x92\x5b\x5f\x75" + "\x48\xde\x5c\xe1\xe6\xb5\x5e\x7d\xc3\xaa\xee\x7b\xb3\xf3\x99\xae\xaf" + "\x47\xab\xcc\x47\x30\xe5\x36\xc7\x36\x77\xbf\xab\xd5\xff\xea\xf9\x9f" + "\x6d\x06\xcf\x84\xa7\x6a\x44\x74\xc2\x48\x2c\x76\x1e\x38\x95\x20\x3a" + "\xa5\x15\x28\x49\x6b\x44\x90\x26\xaa\x51\x4a\x04\x21\x38\x24\x86\x01" + "\x16\x26\x79\x09\x3e\x81\x07\x34\xc6\x44\xbb\x82\x22\x66\x04\x4e\x4b" + "\x00\x40\x22\x4a\xc3\x3b\xc5\xbf\xd4\xdd\xab\x08\xcf\xbb\xeb\xa1\x2f" + "\x00\xd7\x16\xa5\x88\x4d\x17\x75\x31\x8a\x1c\x32\xb5\x08\xec\xf2\x0f" + "\x79\xc2\xff\xfb\x74\xc4\xe9\x00\x12\xb1\x63\x57\xed\x30\xd4\xc1\xd7" + "\x24\xeb\xfd\x86\x0d\xbc\xf4\x7d\x42\x93\x64\xc6\x97\xf5\xe2\xdb\x4e" + "\xd2\x1e\x8d\xeb\xd9\xd0\xa6\x28\x99\xc6\x35\xdc\x5f\x28\xb9\xe8\x2c" + "\xf7\x1c\x65\x39\xca\xa1\xcd\xc7\x7a\xa5\xda\x3d\xf5\x74\x5f\xd8\xde" + "\x8f\x54\xff\x90\x29\xa2\x4f\xe4\x25\xbc\xe7\xb2\xc6\x07\x85\xb1\x73" + "\x29\xdc\x68\x03\x4d\x21\x5a\xd4\x7c\x42\x83\x17\x0b\x92\xb0\x84\x63" + "\x1b\x23\x46\x09\x0a\x52\xf1\xd0\x0c\x91\xd4\xa2\x52\x02\x0d\xb3\x30" + "\x04\x25\x3e\x0f\xba\x71\x4a\xe2\x94\x33\x60\xc2\x55\xaf\x19\xec\x25" + "\xc9\xe7\x72\x96\x5f\x7d\xd9\x56\xaa\xba\x81\x65\xf5\xb5\xbb\xd9\xc4" + "\xe7\x30\xbc\xba\x64\x47\x23\x49\x80\x56\xd4\xad\xb8\xbf\x03\xa5\x5b" + "\x74\xf4\xe5\xee\xb2\x1e\x0c\xcb\xd3\x8f\xe9\x53\x50\x8e\x8c\x4e\xa8" + "\xca\xdc\x8c\x74\xef\x42\x31\xa7\x75\x75\x72\x11\x05\x0e\x2f\x23\x44" + "\x19\x04\x18\xe8\x42\x11\xa2\x6d\xfe\x91\x20\x2a\x52\x4b\xd9\xa1\x00" + "\x3e\x5e\x56\x60\x1a\x8e\x85\x54\x77\x6e\x32\x15\x0d\x2d\xd6\x77\x07" + "\x5d\x6f\x8b\x99\x1c\x26\x0c\xb5\xae\x8b\x46\x62\xe0\xc0\xd8\xbb\x81" + "\x9a\x14\xcf\xc3\xef\x1d\x02\x7f\xc3\xd2\x5e\xe1\x54\x80\x6a\x6c\x65" + "\x11\xa5\x96\x9c\x52\x28\xcd\x3c\x51\x27\xa0\xdb\xd7\xe3\x34\x9e\xfc" + "\x58\xff\xfb\x74\xc4\xe8\x80\x0f\xb5\x81\x67\xec\x24\xf1\xe2\x04\xa8" + "\xeb\xfd\x96\x16\xa4\x19\x4e\x8e\xb1\x29\xce\x47\x66\x24\xe3\xc6\x92" + "\x3e\x81\x91\x58\x62\x46\xc6\xc8\x10\xe4\x84\xa9\x29\xc5\xe5\x52\x77" + "\x0c\x89\xce\x84\xd5\xa3\x57\x2c\x5b\x82\xd6\x3e\xfc\x79\x4e\xa7\x7e" + "\x6f\x0c\xf0\xcb\x5a\xcd\x32\xc3\x04\x2d\x25\x8e\xce\x20\x3a\x2f\x38" + "\x60\xbd\x07\xd5\xff\xfe\xd5\xfa\xfc\x87\x1a\x97\x52\xde\xb3\xb5\x43" + "\x17\x94\x80\xa3\x29\x1b\x69\x27\x0a\xcb\xaf\x48\x58\x16\x78\xdf\x8c" + "\x22\x10\xcd\x81\x57\x17\x81\x47\x8a\x47\x33\xc1\x60\x14\x16\x68\x43" + "\x48\x70\xc5\x03\xe0\x84\x8c\xc2\x45\xa1\x52\xfb\xa0\xef\x09\x2c\xa2" + "\x16\xae\xda\x88\xa4\x84\xa7\x42\xd8\x0e\x06\x3e\x6c\x6e\x32\xa0\x90" + "\xd9\x25\x8d\x6a\x17\x2e\xdc\x54\xca\xcd\x86\x41\xde\x30\xaa\x78\x4b" + "\xba\x7a\x4a\xaa\xba\xe5\xed\xd2\x5d\xd2\xdb\x83\x25\x7d\xd7\xf1\x97" + "\x1d\xb8\xf2\x2b\x8a\x8f\x44\x10\xcb\xa7\xfe\x7e\x44\x83\x7a\x2e\x78" + "\x46\x71\xfb\x73\x5f\xff\x22\xff\xff\x91\x45\x82\x3f\xc1\x12\x2f\x78" + "\x2b\x1e\x96\xa1\x9a\x6b\x2b\x60\xba\x44\xc9\x31\x0b\xb8\xc3\x8c\x07" + "\x59\xa0\x72\x00\xb4\xc7\x86\x1e\x22\x05\x46\x71\xeb\x97\xba\xc4\x2c" + "\xfc\xb4\x42\x3b\xda\x40\x10\x34\x65\xa2\xcc\x03\x0d\x9d\xd7\x70\x4e" + "\xff\xfb\x84\xc4\xee\x80\x11\xf9\x75\x5f\xec\x98\xba\xa2\x44\xac\x2c" + "\x7d\x93\x23\x25\xf9\x6e\xa9\x77\x71\x98\xff\xa8\xa3\x01\x11\x7a\x2c" + "\x5e\x12\x2c\x92\x4b\x5b\x44\x19\x6c\x70\xc9\x13\x70\xce\xbd\x43\xcd" + "\x3c\x4a\x34\x32\x9e\x7b\x2a\x54\xdd\x62\xd4\xea\xcf\xdf\x4b\x0f\x36" + "\x77\x44\x9a\xce\x28\xf2\xfa\x95\x1e\x21\x27\xd8\xd3\x94\x8c\x3d\xaa" + "\x3d\x06\xac\x7f\xf2\xbf\xe1\x25\x08\x82\xf8\x16\x28\xe2\x62\xc2\xca" + "\xda\x15\x84\xb3\x93\x08\xe3\x48\x83\x4e\xc2\x5e\xc8\xa4\x21\xe2\xe1" + "\x01\x88\x79\x30\x79\x00\x5f\xe4\xed\x72\x81\x81\x50\xb5\x16\x9b\x00" + "\x4d\x20\xc0\xab\x41\x96\x51\x2a\x4e\x3b\xf5\x3f\x89\x3a\xf7\xfd\x2f" + "\x2c\x2e\x6a\xba\xb9\xf9\xd1\x77\xf2\xc6\xbe\x3f\x76\xf4\x76\x29\x6e" + "\x9f\xba\x11\x22\x0b\x5d\x82\x29\xa5\xbb\x8a\x27\x2d\xae\xb8\x95\x9d" + "\xc9\xac\x5e\xbc\x55\xaa\x71\x08\x23\xdd\xde\x5f\x48\xd0\xf8\x3b\x9f" + "\xff\x2c\x7f\x9f\x13\x24\x0a\x08\xd5\xe9\xb9\xd6\xff\xff\x63\xbf\x8b" + "\xe1\xae\x1b\xc5\xf6\x66\x14\x06\x71\x80\xd0\x7a\x47\x60\x39\x29\x17" + "\x20\x6a\x9a\xa2\xbf\x9c\x94\x97\x20\x59\x30\xcd\x4c\x40\x21\xa9\x80" + "\x1b\x20\x13\x6c\xf4\x78\xc4\xab\x4c\x13\x18\x57\xa8\x29\x22\x4d\x29" + "\xb9\x72\x59\xf3\x65\x4d\x29\x9b\xf2\x5b\x2a\x62\x50\x3f\xc2\xb8\x0a" + "\xcd\xd5\xb9\x3d\xa0\xbf\xef\x30\x26\xa2\x17\x1a\x69\x34\x8e\x50\xdb" + "\x91\x02\xb8\x6b\xf8\x21\x79\xa9\xab\x7b\xb8\x5a\x9a\xf9\x4c\xc7\xb1" + "\x1d\x14\x9c\xc4\x99\xe5\x87\xbf\xf1\x62\xf9\x18\xe9\xff\xfb\x74\xc4" + "\xfb\x80\x11\x71\x77\x59\xec\xe1\x0b\x42\x03\xae\xec\x7d\x94\x16\xe4" + "\x65\x92\x97\x1a\xc2\xe3\x85\xcc\xd8\x22\x0c\x1a\xc2\x93\xb2\x55\xfe" + "\x8a\x7a\x10\x8d\xfe\xa0\x66\xab\xb9\xb0\xfb\x24\x03\x08\x6a\x08\xc4" + "\xc3\x83\x09\x62\x4d\x12\xc8\xd0\x84\x80\x00\x04\x52\xa9\x84\x7a\x18" + "\xe2\x1a\xc2\x8e\x2e\x81\x26\x02\x45\x69\x94\x80\x10\xa3\x08\x47\x40" + "\xc9\xa8\x58\x80\x41\x45\x42\xa0\xbd\x0f\x13\x10\xb7\x33\x9b\x3c\x4d" + "\x9e\x5f\xc2\x99\x81\x65\x81\x25\x0a\x24\x64\x82\x90\x0a\x3c\x89\x90" + "\xb5\xd9\x0c\xb6\xa1\xdb\x8e\xed\xea\x6f\x97\xd1\x63\xdf\x3d\x4f\xab" + "\x98\x38\xea\xe7\x97\xbf\xf2\xa8\xa2\xa7\x46\x6c\xc3\x6d\xa9\x44\x3d" + "\xbe\x34\xa3\xa2\xf5\x71\x6e\x65\x29\x23\xe5\x76\x77\x4a\xd4\xa3\xb5" + "\x20\xfb\xab\x15\x4d\x40\xf8\x90\xeb\x7e\xa1\xd1\x42\x0d\x41\xd0\xb1" + "\xc4\x1c\xd6\x01\xd2\xf8\x0f\xf1\x69\x6c\x5a\x46\x49\x46\x07\x76\xe2" + "\xe9\x38\xe6\x94\x1b\x31\x78\xc0\x40\xa6\xa0\x3c\x63\x80\xa0\x82\x14" + "\x50\x85\x4f\x0c\x83\x65\x42\x10\x23\x85\xba\x2c\xab\x76\x0e\x0f\x2a" + "\x92\x9c\x94\x79\x18\xfb\x53\x99\xa1\xd6\x4f\x9e\x30\xe0\x24\xa6\x51" + "\xe3\xfd\x04\x2c\x1e\x7a\x93\x35\x4a\x99\x16\xbb\x93\x27\x98\x5a\x1a" + "\xaf\x71\xc4\xf6\xf7\x2d\xba\x53\xde\xf6\x65\xf7\xff\xfb\x74\xc4\xfa" + "\x80\x10\x71\x7d\x5f\xec\x0d\x1b\x6a\x16\x2f\x6a\xb9\x94\x16\xb0\x2e" + "\x6d\x7c\x6f\xf9\x7f\xe2\xdf\xa2\x3a\x8b\x8d\x41\xf8\xd3\xf4\xa1\xd3" + "\xe9\xc3\x4c\x55\x7f\xca\xc7\xff\x17\x2a\xd2\xa0\x7c\xc4\x8d\x3e\xbf" + "\xfe\x0a\x38\x4c\x28\xef\x83\x25\xc6\x04\x82\xb2\x96\x2b\x23\x64\x94" + "\x4e\xd5\xc2\x08\xb2\x23\x16\xf1\x94\x11\x40\x73\x89\xe0\xe7\x53\x34" + "\x32\x62\xd3\xee\x02\x86\xc4\x06\xb7\xe1\x70\x53\x56\x57\x00\xaa\x95" + "\x25\x24\xcd\xf2\x00\x12\x8b\xb6\x2c\xe0\x8c\xd5\x29\x09\xd1\x22\x26" + "\x82\xac\xab\x04\x09\xf9\xd8\xef\x9e\xc1\x14\xd6\xcc\xcf\x70\x9b\x68" + "\x98\x6b\x4a\xc9\x96\xf7\xe2\x62\x36\x5a\xa7\x48\x8a\xba\x38\xe3\xca" + "\x2e\xc8\xf1\xac\xac\xaf\xf5\x14\x7d\x00\xaa\x42\xb2\x1a\x36\xe3\x86" + "\x37\x0f\xf0\x80\x88\x81\x47\x7f\xff\xe8\xf8\xd4\xff\x95\xbf\xc6\x36" + "\xc8\x45\x35\x2d\x38\xdb\x6b\x6a\x5a\x12\xac\xd8\x9f\xd0\xb0\x9f\x0a" + "\x00\xc3\x09\x1c\xe3\x38\xda\x0b\x65\x22\x72\x72\xb6\x22\x61\xca\x81" + "\x90\x4e\x35\x15\x51\xda\x68\xe2\xc0\xbd\x53\x7f\x9a\x8d\x4f\x72\x9a" + "\xa5\x86\xb3\xdb\xea\x70\x4a\x26\xa5\x91\x69\xa1\x6a\x20\x40\x09\x48" + "\xab\x91\x97\xd2\x39\xe5\x9c\xcd\x5d\xb4\x54\x25\x72\x59\x30\xb2\xc6" + "\x98\x6a\x70\x4c\x22\x17\xb1\x49\x4c\x3a\xd6\xff\xfb\x74\xc4\xfb\x80" + "\x11\xfd\x7f\x57\xec\x98\xb7\x02\x1b\x2d\xab\xbd\x8c\xa1\xa5\xd7\x1b" + "\x30\xd0\x9e\x88\x35\x07\xe4\x35\x8d\x91\xd5\x0e\x24\x10\x89\x57\xae" + "\xf1\x97\xc3\x07\x48\x2a\x6c\xc2\x57\xc4\x53\x25\x5f\x35\x7f\x15\x8d" + "\x0f\x7f\xfe\xdd\xe6\xff\xff\xa1\xf4\x7c\x07\x74\x82\xa3\x16\x93\x68" + "\xa9\x4e\xf6\x02\x09\x2d\x40\x01\xfb\x06\xe2\x21\xd3\x82\x95\x0b\x84" + "\xb0\xe4\x80\xad\xa1\x20\x9c\x14\x73\x82\x84\x2d\x29\x60\x21\x61\x08" + "\x45\xd7\xa1\x28\x0b\x53\x57\x33\x21\x01\xd4\xd9\x24\xb0\x06\x6c\x5b" + "\x24\x4d\xde\x34\x55\xe5\x25\x8e\x1a\xf9\xef\xc9\x8a\xc6\xc2\xbf\x26" + "\xbe\xab\xf2\xc7\x8b\x2a\x5c\xf7\x36\xb4\x5c\xc6\x2b\x0f\x7f\xf5\x30" + "\xb3\x71\x7a\xc3\x44\xb3\x1c\x42\x23\x5c\x8b\x3c\xc5\x14\x69\x0d\xc8" + "\xfb\xab\x5d\x8f\xff\x91\x8f\xce\x59\x8f\xf9\x75\xda\xe4\x9f\xa6\x79" + "\x31\x5b\xd2\x16\x20\xf2\xdd\xfe\xb1\x73\x64\x83\x82\x0c\xcb\x04\xc5" + "\x6d\x9e\x2a\xc3\x58\x35\x04\x4a\x42\x53\x1e\x91\xb4\x89\x43\x62\x3c" + "\x89\xdc\x35\x63\x34\x30\xdc\x26\xf0\x48\xa0\x41\x71\x48\x2c\x4a\xc0" + "\x60\x6b\x39\x99\x47\x4c\x13\xc8\x95\x2a\x2c\x17\x11\x76\x46\x4d\x00" + "\x9d\xd8\x7f\x50\xf1\x20\x09\x61\xbb\x6d\xc9\xf5\x76\xe6\xe7\x4b\x6e" + "\x10\x0d\xf3\xb9\xfa\x5c\x6c\x7d\x4c\x8a\xff\xfb\x74\xc4\xf5\x80\x0f" + "\xf5\x81\x5b\xec\xa4\xb6\xe2\x35\x30\x2c\x3d\xbc\x20\xfc\x5f\x23\x73" + "\xa1\x3b\x76\x8e\xe9\x89\xac\x89\x3e\x8c\x20\xf5\x55\x2c\x72\xdb\x4f" + "\x55\xaf\x2f\x0f\xa4\xc7\x01\xaa\xa9\x4f\x36\x6f\xf5\xe6\x5e\xbe\x51" + "\xba\x57\xcc\xd7\xd7\x4f\xf7\x2e\xfe\x56\x1d\x25\xe1\xff\x02\xe2\xef" + "\xff\x90\x75\x60\xca\xa4\xd8\x08\xb2\xa1\xd5\x2f\x23\x24\x00\x00\xe4" + "\x9a\xa0\x41\x21\x79\x1f\x52\xaa\xa0\x52\xd1\x94\xb7\x49\x7c\xf0\x2b" + "\xd2\x41\x17\xf2\x46\x57\x2a\x07\x54\x69\x34\x1c\x0c\x16\x00\x52\xc0" + "\xd6\xe7\x23\x05\x66\x94\x90\x1d\x0f\x84\x7b\xfa\x61\xba\x55\x5d\x1e" + "\xef\x06\x60\xe6\x27\xb2\x89\x14\x29\x95\xc6\x25\x81\x0d\x50\x63\x98" + "\x36\x15\xaa\xc7\x44\x67\xc1\x99\x68\xbe\xf1\xe5\x75\x1c\x2b\xd8\x78" + "\x39\xc2\xc1\x1a\x53\xec\x28\x2b\xe0\x62\xef\xc5\x00\x15\xe0\xfc\x65" + "\x6d\xf1\x82\x7b\xb5\x1d\xff\x5e\x22\x1d\xec\x53\xd3\x92\x0f\x09\x84" + "\xec\x59\x44\xd2\x49\x92\x21\x0d\xe0\xf0\x20\x1b\x63\x04\x80\xf2\x64" + "\x89\x80\xa9\x53\x78\xbd\x6d\x26\x22\x19\x0a\xe8\xf2\x9c\x69\x56\xf5" + "\xf5\xc7\x00\x81\xfb\x97\x61\xa5\x12\x5c\x37\xda\x65\x60\x66\x45\x6b" + "\x36\xea\xf7\xf6\xf9\x89\xda\x86\x91\xba\xe9\x91\x26\xdc\x09\x70\x4c" + "\x48\xe8\xe4\xe0\xb3\x9b\x32\x15\x5f\xff\xfb\x74\xc4\xf4\x80\x12\xa5" + "\x81\x55\xec\xa1\x35\xca\x13\xaf\xea\xfd\x93\x0e\xd9\x5d\x4c\x17\x28" + "\x50\x9f\x83\x0a\x46\x25\x90\xb6\xd8\x3f\xd6\x53\x43\xb3\xac\xef\x2a" + "\xf0\x6c\x9c\xcb\xd7\xc1\x16\x06\xa1\xc9\xc8\xc1\xc5\x2f\xff\xfe\x84" + "\x2a\x87\x03\xc4\xb3\xa5\x29\xac\x69\x15\x04\xae\xd0\x9f\xd0\x4b\xe0" + "\x60\xef\x94\x06\xd0\x04\xaa\x16\xd9\x05\x9c\x91\xe9\xf0\x80\xfd\x95" + "\x1c\x81\x32\x57\xbe\xad\xbb\x65\x47\xdd\xcb\x32\xac\xfd\x29\xc6\x16" + "\x6c\x72\x13\xdd\x5a\xb7\x4b\x03\x4d\xc4\xe7\xe4\x44\x0e\x9b\x0b\x52" + "\xb0\xe2\xd8\x17\x53\x6d\x42\x59\xee\x50\x6c\xca\x9c\x6a\xfc\x6f\xfb" + "\xf7\xe2\xdc\xf3\x6b\x3b\x6e\x25\x9d\x8f\x78\x9c\x8a\x3c\xde\xfe\x77" + "\xc6\xaa\xf5\x9d\xf4\xa5\x58\xef\xf3\x0d\x59\x8f\x28\xe4\x8a\x1e\x62" + "\xbf\xf4\x01\xab\x8a\xc5\xe3\x8d\x44\x32\x9f\x98\x3e\x45\xe7\x0d\x35" + "\xe0\x99\x8f\xdb\x23\x4c\xc2\x70\xde\x86\x54\x00\x45\xb2\x9b\xc1\x99" + "\xc1\x25\x00\x8c\x30\x60\xc8\x60\xab\x12\x10\xba\x08\x08\x8a\x37\x08" + "\x7a\x46\xfd\xbf\xfa\x14\x18\x0c\x9b\x00\x96\x54\x86\x60\xbd\x50\xcd" + "\xcf\x49\x69\xe2\x09\x89\x5d\x96\x78\x2a\x4c\x4a\x34\x99\xec\xa3\x3a" + "\xbc\x23\x04\x28\xa6\x6d\x97\x2a\x95\x03\x2c\xbe\x62\x7f\x77\x1c\xfe" + "\x9c\xdd\xbe\xff\x7d\x3b\x7f\xe3\xff\xfb\x74\xc4\xed\x00\x0f\xbd\x3b" + "\x5b\xec\xbc\x70\xe1\xde\xaa\x6b\x3d\x86\x0e\x90\x1d\xf6\xbd\x34\x47" + "\xaf\xd9\x98\xd6\x1e\x43\xa6\xe8\xe8\x73\x9f\xff\xe9\x5f\xda\xa6\xa3" + "\xff\x38\xe7\xc7\x54\x27\x6c\x54\x5b\xf8\xa0\xf2\xa3\x68\x8f\x2d\x88" + "\x52\xc6\x77\x34\x37\x24\x20\x04\x88\xa5\xdc\x8f\x8e\x09\x1e\x18\x63" + "\xca\x12\x02\x0c\x80\x4b\x14\xd5\xa2\x21\x05\x5a\x20\x93\xc1\xc2\xdf" + "\x94\xb7\x2d\x6c\x35\x1a\x66\x69\xc5\x1a\x8b\x4b\x61\x98\x75\xf6\x60" + "\xf7\xc9\x52\x40\x22\x47\x51\x13\x1d\x8d\x4e\x8b\x94\x15\xf5\x70\x7e" + "\x33\x22\x4c\x7f\x39\x1f\x9f\xa5\x58\xb6\x92\xb7\x6a\xa6\x35\x7e\x76" + "\x3a\x55\x4b\xff\x26\x63\xa4\x23\xac\x45\x87\x55\x56\xe7\xf9\x15\x2d" + "\x53\xff\xe7\x94\x7e\x86\x7e\x8d\xa1\x87\xf9\xe7\xd0\xea\x19\x6f\x3d" + "\xea\x11\x13\x3e\xaa\x66\x62\xe6\x21\xdc\x45\x75\x71\x09\x53\x63\x10" + "\xad\x96\xca\x68\x48\x2a\x35\x1d\x1d\x59\xb5\x0b\x16\x58\x18\xa5\xc0" + "\xee\x0b\x48\x8b\xc8\x1f\x93\xbe\x1a\x3c\x3e\x30\x5c\x6f\xb1\x25\xa2" + "\x86\x94\xf6\x2a\x67\xce\x30\x0e\x4f\x53\xbd\xb1\x18\xb4\x33\xec\x12" + "\x02\x26\x52\x73\x75\x0b\x0f\x85\x21\xd5\x29\x16\x85\x14\x15\x98\x44" + "\x72\xc5\x85\xa3\x2b\x05\x85\x18\x23\x42\xd8\x30\xf9\xba\x8f\xa3\xda" + "\x6e\xb4\x15\x42\xa7\x18\x26\xff\xfb\x74\xc4\xf7\x80\x10\x89\x7f\x59" + "\xec\x18\xf9\x02\x16\xb0\x2b\x7d\x93\x1e\xe8\xdc\x39\xd4\xe2\x02\xdf" + "\x8c\x1c\x46\x15\x01\xc4\x59\x4f\x51\xfe\x81\xf1\x82\xbe\x57\x14\x11" + "\x15\x51\xf8\xf1\x99\x85\x5a\x30\x6a\x46\x0e\xbb\x84\xaa\x99\x0b\x17" + "\xa4\xf6\xcb\x28\x14\x50\x2d\x86\x56\x55\x21\xb7\x15\x28\x71\xe1\x73" + "\x43\x04\x67\x0d\xc8\x98\x39\x84\x3b\x87\x14\x83\xe9\x80\x50\x5c\xce" + "\x63\x01\x20\x36\xc5\xfd\x4d\xda\x6c\x09\x13\x61\xa4\xba\xd0\xd7\x24" + "\x6e\xbb\x52\x77\x92\x34\x4d\xd0\x7a\x30\x2a\xe4\x9f\x3b\xbf\xbe\xe7" + "\xfc\xba\x52\x65\xee\x4e\x4d\xde\x41\x86\xe9\x97\xa1\x36\x62\x58\xb9" + "\xd8\x4d\x31\xcf\x43\x25\x33\xca\x65\xa8\x99\xea\x87\xb7\x7f\x77\x6c" + "\xc9\xe3\x23\xd4\xac\xc4\xe4\x21\x38\xb7\xfe\xa2\x17\x7c\x8c\x2c\x4c" + "\x2c\x25\x89\xcc\x25\xa0\x82\x54\x1d\xc4\x2e\x6d\x92\xc0\x1f\x09\x2c" + "\x95\x87\x0b\x48\x21\x18\x32\x45\x48\xaa\x32\x59\x3e\x56\xb8\xf0\x2e" + "\xb4\x54\x68\x73\x56\x70\xd0\xf8\x2e\x28\x21\x08\x2c\x1f\xb5\x7b\x72" + "\xd4\xa9\x16\xba\xfe\xc8\xf9\x94\x41\x96\xcb\x71\xa5\x80\x21\x73\x73" + "\x31\x70\x48\x9c\x4c\x4b\x86\x61\x96\x98\xc4\x1c\x0c\xab\x86\x0c\xc5" + "\x1e\x02\x70\xc6\x19\x0a\x53\xbe\x00\x5a\xb1\xd3\xc8\xe6\x94\xcf\x5a" + "\x75\xbc\x46\xcc\x93\x1c\xff\xfb\x74\xc4\xf8\x00\x10\x71\x83\x5b\xed" + "\x18\xf5\x62\x16\xae\xea\xbd\x91\x96\xe1\x45\x72\x79\x8e\x23\xfc\x03" + "\xee\x58\x24\x0c\x9d\x41\xaf\x51\x97\x0a\x1c\x80\x65\x6e\xb9\xd3\x4b" + "\x86\xc1\x85\x09\xdc\x21\x68\x80\xb8\x39\x55\x1f\x2c\x44\x00\x8a\xe5" + "\x09\x7f\x09\x2e\x02\xd1\x66\x0a\xaa\x1a\x38\x74\xa1\x90\x68\xd0\xbb" + "\xe1\x82\x72\xa3\xe0\xc0\x14\x9d\x8d\x27\x78\x24\x14\xf3\x12\x1c\x77" + "\xb5\xe9\x7a\x77\x3e\xcd\xc6\x9c\x6b\x8d\x3d\xdc\x81\x04\x62\x78\x3a" + "\xa7\xe1\x60\x87\xc1\xec\x15\x68\x91\x97\xab\x3f\x1e\x67\x61\x02\xaf" + "\x28\xd5\x19\x60\x44\xbf\x53\x62\xcc\xf8\x27\xcd\x51\x9c\x8b\xeb\x08" + "\xe2\xcf\x12\x14\xe2\x42\xfc\x89\xbf\xe6\x43\x11\xd3\xe7\xc9\xae\x59" + "\x33\x63\x39\x8f\xc6\xf2\x37\x42\x05\x9f\xa9\x72\x8b\xd4\x4a\x10\x39" + "\x89\x09\x83\x9a\x33\xfa\xa4\xc8\x2c\xd1\x1d\xd3\x90\xc4\x5a\x88\x08" + "\x2c\x00\x8e\x65\xfa\x56\xf1\xd8\xb1\x2a\xa9\x48\xb9\x56\x20\x5d\x8e" + "\xe4\x10\xe5\x87\x04\x99\x98\xeb\x29\xe7\x33\x04\x5e\xca\x97\xd6\x59" + "\x64\x32\x03\xa5\x53\x8c\x0b\x49\x03\x94\x88\x30\x44\x33\x1d\x37\x56" + "\xef\x2b\xbc\x48\xd5\x85\x9a\x19\xc6\xb6\xc3\xc9\x97\x17\x51\xe2\x24" + "\xd5\x97\x3d\x8b\x5c\xaf\xf1\x73\x47\xfc\x20\xee\x20\x65\xfe\xb7\xb7" + "\x16\xdd\xd0\xfc\xba\xff\xfb\x74\xc4\xf8\x80\x0f\xd9\x77\x55\xac\xa4" + "\xb6\xc2\x15\x21\x2a\xbd\xa1\x9b\x20\x6f\xf8\x1e\x76\xa4\x6d\x53\xca" + "\xf3\x43\x6b\x8e\x76\x69\xff\xf8\x0c\x14\x0a\xc4\x41\x8d\xfd\xdf\x10" + "\x73\x90\x0d\x45\x55\x8c\xa0\x97\x17\x34\x2f\x2b\x4c\x00\x46\xe6\xca" + "\x15\xb4\xd8\xf5\x8a\x1c\x69\x59\x4e\x81\x21\x4a\xb2\x12\xb0\xcc\x60" + "\x24\xa3\x7c\xc5\x43\x4b\xab\xad\x51\x64\xcb\xb0\xb1\xcf\xea\x5d\x5b" + "\x88\x4a\xe4\x10\xec\x49\x97\xa0\xd0\x29\x84\x1c\xce\x40\xab\x2e\x0f" + "\xb2\x0a\x12\x38\x65\x2a\xc7\x8f\x12\x96\xdd\xcf\xf1\x66\x02\x41\xa0" + "\x42\x51\x42\x62\x87\xc7\x84\x7e\x9e\x4a\x13\xe9\x10\x2d\x5b\xf5\x75" + "\x3e\xa9\x03\xa5\xfa\xa7\xff\x0e\x1b\x3f\x4a\x9a\x7d\x07\x4b\x96\x8e" + "\x2e\xdc\xa8\xd0\x1b\xa7\x12\x34\x28\x1e\x7e\x60\xb7\x29\x90\x3f\x6c" + "\x68\x00\x84\xc6\x72\x40\x9a\xa0\x15\xd7\x10\x32\x42\x09\x35\xc7\x28" + "\xa5\xb3\x41\x0b\x1c\xe4\x06\x50\x52\xbe\x4d\x54\xf3\x7f\x5b\xaa\x99" + "\x31\xfd\x73\xf0\xb3\x1d\x44\x4b\x26\x58\x03\x42\x10\xd3\x4b\x32\x24" + "\x6e\x31\x9a\x71\x83\xdc\xa5\xe8\xba\x28\x96\x96\x58\x6c\xa2\xe8\xe3" + "\xac\xa0\xb0\x9e\x5a\x63\x61\xed\x8b\x57\x29\xe6\xf2\xad\x15\x6a\x6d" + "\xf7\x0e\xf9\x35\x72\xd7\xeb\x5d\x06\x74\x2f\xb2\x09\x4b\x6f\x8e\xc5" + "\x37\x7a\x27\x47\xff\xfb\x74\xc4\xfc\x00\x10\x31\x81\x5d\xec\x18\x76" + "\xe2\x22\xaf\x6b\xbd\x87\xa2\x4d\xec\x20\x52\x9b\x73\xf8\xcf\xdd\xbc" + "\x77\xd3\x33\xb2\x52\x5a\xff\x2c\x96\x7f\xff\xfc\x41\x1c\xff\xc8\xa4" + "\x54\x9b\xa3\xe7\x91\x9f\x20\x76\x28\x23\x1d\x2c\x4c\xb4\x81\x6d\x2d" + "\xd3\x11\xb0\x72\xf3\xe2\x20\x87\x57\x16\x98\xbf\xe9\xd6\xbb\x55\xa3" + "\x49\x4a\xba\x97\x69\x09\x4c\x5f\x7a\x67\xe8\xad\x33\x35\x7b\x2e\xca" + "\x14\xb7\x47\x6a\xc9\x87\x31\x86\x15\xea\xcb\xaa\xa3\xdf\xba\x0b\x94" + "\xf7\xa3\x67\x0b\x1c\x82\x2d\x26\x1e\xd3\x7b\xfc\x36\x66\x8c\x24\xe8" + "\x24\x1f\x75\x76\xaa\xbc\xe9\xff\x32\xed\xfb\xc3\x6d\xa9\x86\xcb\x0e" + "\x73\x57\x46\x7e\xc5\x52\xe3\x1f\xb1\x7a\x2f\xa7\x20\xdf\xea\xdf\x42" + "\x95\x3f\xf4\x62\xfc\x91\x48\x10\xff\xa0\x4b\x98\x80\x6c\x50\x84\x56" + "\x69\x5b\x69\x04\x8b\x53\x45\x4a\x63\x05\xc6\xc2\x03\x8e\x03\x7e\x04" + "\x81\xb8\x6c\xad\xb5\xc9\xd1\x42\x92\xc9\x30\x58\xae\xf7\x11\x60\xb2" + "\x18\x1d\x72\x0e\x13\x88\x89\x98\xc5\x88\x01\x86\xb7\xd4\x95\x2e\x9c" + "\x92\x36\x49\x8d\x0c\x9e\x42\x8d\x48\x7c\xb4\xd1\xb6\xc4\xa0\xee\xc5" + "\x92\x74\x4d\x31\x4d\xa9\x6a\x24\x8b\xff\x02\x26\x66\xcd\xff\x21\xa2" + "\x4e\x22\xc1\xcd\x46\x08\x67\x7b\xbc\x3a\xcc\x10\x60\xf4\x29\xdf\x9d" + "\x58\x61\x44\xff\xfb\x74\xc4\xfc\x00\x0f\x81\x45\x5d\xec\x18\x76\x62" + "\x3f\x2f\x2b\xbd\x94\x9a\x95\x97\xbe\x9c\x14\xc4\x2e\xad\x6a\xfd\x45" + "\x1a\x84\x78\x08\xf4\x8d\x36\x40\xed\x19\xc4\xae\x63\x61\x58\x1c\x48" + "\x11\xc7\xdc\x22\xb8\xe9\x03\x09\x8b\x5f\x74\x10\x71\xfe\x1d\x39\x6e" + "\x44\x25\xea\xa4\xb0\x70\xca\xaa\x9b\xd0\x84\x41\x7b\xb5\xb7\x6b\x52" + "\xe6\x7f\x6f\x83\xae\x18\x66\x76\x1d\x58\xfc\xc0\xfc\x20\x11\x49\xa3" + "\x4f\x47\x0f\x07\x96\x36\x96\x4e\x17\xb2\x4e\x87\x5b\x30\x3b\x82\x61" + "\xa8\x7f\xad\xb9\xd1\x72\x5b\xd8\xcb\xdb\xa9\xd9\xb9\x55\x6e\xd6\xe5" + "\xa0\xd1\x92\xe7\x96\x78\xc6\x74\x26\x37\xb1\x2c\xbd\x5f\xd4\x5f\xfa" + "\x0f\x83\x10\x02\x2b\xc2\xfc\xf1\x3f\x24\x4c\x45\x94\x86\x0f\x49\x64" + "\x17\x69\x22\x6d\x86\x20\xb2\x31\x92\xf3\xbc\xc2\x11\x24\xfa\x9a\x84" + "\x22\x9d\x88\xbb\x8c\xc5\x61\x1b\x96\x9b\xf4\xd8\x2f\x24\x38\xb0\x50" + "\x7e\x55\xc7\x04\x10\x5a\x4e\x5f\xca\xa7\x2b\x28\x64\xfd\x87\x52\x8f" + "\x44\x1f\x2c\x4c\x8d\xa5\x5c\xba\x3e\xba\x2f\xaa\xc1\x60\xf4\xe1\x0d" + "\xf6\x92\xac\x33\x7a\x92\x6c\xe2\x7b\x17\x42\xbb\x34\x1a\x39\x6a\x60" + "\xc8\x0f\xfd\x4a\x43\x32\xbe\xa5\x22\xba\x11\x95\xca\xe5\x2a\x28\x96" + "\x47\x29\x45\x06\xfa\xa7\xe4\xa7\xab\xff\xc1\xb5\x11\xba\xbd\x11\xbd" + "\x19\x47\xff\xfb\x64\xc4\xfb\x80\x0f\x9d\x7f\x59\xec\xb0\x74\x81\xda" + "\x1f\x6b\x7d\xa4\x8e\x68\x75\x75\xec\x57\x2a\xc6\xd4\x0f\x6c\x75\x41" + "\x0d\x84\x8a\x92\x01\x04\x7d\x45\xd1\x48\xa4\xb0\x14\xb8\x30\x25\x68" + "\x81\x98\x63\x1a\xa5\x21\x4a\xdd\x15\x12\x82\x17\xd6\xb7\xe2\xc0\x87" + "\x8f\x7f\x3f\xd5\x7a\x68\x71\x63\x3d\x95\xa3\x58\x85\x36\xcf\x23\x2f" + "\x8d\xb1\xcd\xc6\x35\x1f\xd3\xb0\xf6\x43\xf9\x3a\x58\x56\xe1\x39\x65" + "\x5c\x25\x8b\x5d\x1d\x94\x1e\xae\xd3\x71\x42\xc1\xa8\xa4\xe7\x53\xba" + "\x8e\xab\x94\xe6\xe8\x4b\x8a\x87\x02\x02\x66\x78\x40\x7b\x1b\xaf\xac" + "\x41\xad\x6f\xca\xaa\xcf\xd5\xfe\xbe\x5a\x07\x5b\xca\x2a\x82\x82\x21" + "\xd6\xd0\xe5\x38\xed\x96\x40\xaa\x3c\x11\x92\x68\xc9\x74\xf8\x14\xfc" + "\x87\xc6\x16\xe2\x08\x0c\xa2\x65\xcd\x41\x8b\xea\x68\xb5\x5e\x07\x81" + "\x99\xf1\x27\x73\x69\xab\xd1\x3d\x67\x31\xc1\x4e\xc9\x41\xbc\x68\xb9" + "\xdc\x2f\x29\xdd\x9d\xa1\x39\x24\xe9\xe2\xc5\x99\x34\xea\x9c\x94\x7c" + "\x4e\x26\x7f\x66\x1e\x1e\x6d\x26\x0b\xcb\xca\xab\xa7\xb0\xa9\xa4\xdc" + "\xe1\x91\x4e\x7e\xff\xfb\x74\xc4\xef\x00\x10\x9d\x49\x5b\xec\xa0\x57" + "\x81\xfe\x2f\xab\xbd\x84\x8a\xd8\x49\x6d\x76\xd8\xc7\xd6\xa9\xd1\xc8" + "\x51\x77\x28\x86\xeb\xa1\xf6\x43\x09\xf4\x71\x2f\x8e\x93\x89\xb1\xc5" + "\xaa\x7f\x99\xca\xdd\x03\xa3\xf3\x9f\x20\xa2\x08\x31\xdc\x51\xbe\x67" + "\x0f\x83\x9e\xf4\x1d\x32\x7d\x54\x09\x73\x94\x07\x1b\x69\x04\xc5\xf1" + "\x00\x82\xf0\x65\x52\x9e\x31\xcc\x60\xa0\xf6\x15\x37\x79\x0f\x9b\x1c" + "\xa1\xfa\x42\xbe\x92\x15\x6f\xa3\x2a\x2c\x92\x12\x0b\xe5\x45\x2c\x3b" + "\x2e\x93\x4f\x7e\x79\x76\xb3\x49\x75\xee\xf4\x23\x8b\x18\x27\x2c\xe1" + "\x9b\x6a\x36\x21\x91\x62\xac\x78\x32\x96\x63\xc1\xe2\xaf\x2e\x8b\xc8" + "\xb1\xc7\x1b\x95\x6a\xaf\x2d\xc9\x4e\x89\x49\xd4\xac\x39\x1f\x56\x41" + "\x45\xee\xec\xd3\x1b\xf4\xd3\xb7\x68\x87\x1f\xc6\x7c\x6f\x1f\xc6\xbc" + "\x72\x0a\xc3\x47\x8b\x45\xc5\x08\x4c\x8c\xc1\xe1\x6e\x2b\x41\x00\xf6" + "\xb9\x66\x27\xea\x02\xed\x39\x87\xed\xae\xc9\x42\x33\x5d\x65\x46\x38" + "\xec\x60\xe4\x59\x86\x0f\x5a\x93\xdd\x69\x4a\x8e\x0f\x5d\xaa\xad\x9a" + "\xb3\xb5\x74\x12\x8d\x10\x90\x4e\xb6\x51\x86\xee\x24\x55\x7d\xd2\x7e" + "\x15\xf0\x7f\x5a\x15\x46\x4e\x85\xb8\x5c\x13\x2a\x0f\x32\x3e\xd2\x3a" + "\x91\x02\x28\x16\x11\x8d\xaf\x48\x8e\x3f\x61\x8c\xc4\xb2\xcc\x61\x46" + "\xf5\xa2\xb7\xff\xfb\x74\xc4\xf2\x00\x10\x91\x7f\x63\xec\x24\xb7\x22" + "\x14\xad\xeb\xfd\x84\x96\xe5\x39\x54\x8a\x69\x98\x4e\x7b\x68\x51\x1c" + "\x3b\x07\x84\x5b\xcc\x14\x9f\xe6\xea\x4d\x7f\xe7\xdb\xff\xd3\xf4\xbf" + "\x37\xff\xfc\x1a\x05\xe3\x7f\xc3\xa8\x2a\xaf\xaa\x3e\xa6\xd7\x0f\xae" + "\x91\xc7\x42\x45\x96\xa6\x59\xa6\x90\xf1\x61\x23\x0e\x28\x69\x04\x38" + "\x7e\x62\xc5\x20\x3a\x59\x00\x91\x11\x6d\x90\xa0\x4c\x70\x31\xe0\x1a" + "\xfd\x35\xeb\xe9\x7a\x9c\x17\xbf\x7e\x3e\xf5\x84\x01\xab\x44\x8d\x76" + "\x1a\xd4\x0e\x8a\xed\xe5\x37\xb2\xc6\x6b\x1b\x91\x41\x2a\x9e\x3d\x3a" + "\xb3\xd2\xca\xbd\xce\xb9\x25\xaf\xb5\xc8\xf2\x28\x65\x9e\x9f\x7b\x0e" + "\x21\xba\xd2\xae\x2c\x63\x9d\x7c\x5a\xc5\xb8\x28\x1c\x28\x1d\xcf\x68" + "\x3b\xbf\xbf\xf9\x7f\xe0\xff\xfd\x54\x91\x00\x42\x2c\x75\x7f\xe2\x9f" + "\xfe\x95\xc1\x45\x09\x07\xa1\x2b\xff\xff\xc2\x8a\xad\xc2\x30\x4b\x14" + "\x00\x49\x64\x49\x98\x6d\xce\x18\xd2\x9d\x85\x07\x6a\x45\xa9\x4d\x60" + "\x60\x81\x52\x2b\x3e\xe9\x7d\xb7\x81\x9a\xe4\xdc\x1a\xbb\x7e\xc8\xe1" + "\x18\xfd\x55\x3a\x11\x83\x53\x09\xeb\x53\x1b\xc1\x9f\x5c\xc5\x77\x5e" + "\xdc\x10\x14\x53\x54\x65\x23\x53\x4e\xea\x73\xeb\x88\xa2\xca\xe4\xb7" + "\xb8\xa9\x12\xb2\xa9\x2e\xcb\x67\x58\x9e\xa2\xce\x76\x2d\x8e\x71\x8f" + "\x3b\xd1\xff\xfb\x74\xc4\xf2\x80\x10\x89\x7b\x55\xec\x20\xb7\x09\xe9" + "\x2f\xec\x3d\x93\x0a\xe8\x48\x8a\xc6\xd0\xca\x45\xfb\xa1\x8c\x28\x64" + "\x51\xe5\x16\x51\x71\x0a\xa7\xc4\x3c\xde\x8a\x7e\xac\x5f\xf4\x67\x98" + "\x76\xa1\xa2\x4e\x2c\x2a\x1b\xf6\xfc\x6b\xcf\x92\xec\x9e\x4e\xa5\xca" + "\x0f\xbe\x95\x47\x87\xcf\xc2\x05\x9d\x10\xb8\xac\x48\x54\x50\xc3\x03" + "\x06\x4a\x8c\x00\x26\xec\x2d\x2c\x64\x2e\x93\x23\xc1\x4e\xa1\x4b\xdd" + "\xff\x5e\x58\xc3\x8d\x89\x95\xb0\x6f\xfe\x7d\xeb\x32\x7a\x79\x66\x51" + "\x27\x35\x20\x12\xc6\x90\x03\xa9\x68\x34\x53\x02\x64\x41\xc1\x7a\x1c" + "\x6d\x31\x36\x4f\xbf\xb5\x77\x12\x6b\xeb\xa0\x20\x61\x5e\xa2\xbb\x15" + "\x34\xdb\xcf\x6c\xff\xb7\x86\x6c\x99\xdf\xde\xd9\xa4\xa5\x0a\x52\x2b" + "\xaa\x2e\xfa\x98\x65\xf6\xbd\xed\xfe\x8e\x77\xa1\xdf\xe8\x0e\x9e\x35" + "\x23\xa9\x1a\x8d\x4c\x3b\xff\x78\xec\xd4\x39\x64\xb6\xa1\xd9\x62\x64" + "\xbc\x37\xd3\x2e\x69\x81\x62\x5d\x91\x09\x62\x01\x13\x50\x12\x24\xaa" + "\x01\x51\xd9\x3c\x10\x99\xf9\x21\xf2\x71\xa4\xfa\x7d\x24\x64\xf6\x7c" + "\x6c\xa0\x65\x64\x75\x6b\xe1\x63\x9d\x83\x60\x5d\xbc\x64\xb8\xd4\x98" + "\xda\xd5\x82\xb9\xb1\xdf\xd5\x9d\xa0\x45\xde\x46\xd4\xea\x6d\xca\xce" + "\xcf\x3f\x2a\x25\xba\x0c\x11\xbd\x74\x06\xb4\xd1\x74\x13\x63\xee\x2a" + "\x76\xff\xfb\x74\xc4\xf8\x80\x11\x55\x81\x63\xec\xa5\x15\x22\x0c\xb0" + "\x2a\xfd\x94\x96\xd9\x32\xa9\x5f\xc4\x5e\xac\xd7\x88\xb6\xad\x33\xd0" + "\xe8\x80\x95\x41\xa9\x80\x86\x88\x00\x7f\xff\xb3\x6a\xef\xd9\xbc\x8a" + "\x71\x33\x9d\x40\x20\x67\x68\x7e\x82\x08\x82\xb0\x0f\xe9\x5b\x27\x89" + "\x70\x03\x9f\x33\x0b\x60\x86\x50\x09\x48\x9d\xa0\x44\x62\xac\xc9\x7f" + "\x3f\x2c\xcd\x53\x61\x24\x22\x1c\xc2\x05\x26\x94\xb7\x9c\xf8\xf0\xe9" + "\x91\x8e\x6f\xac\x69\x27\x00\xb9\xc7\xf1\x98\x48\xf5\x5a\x99\x18\x27" + "\x74\x8e\xb3\xaf\xa5\x12\x5d\x5c\xcd\xf4\x59\x5d\x8b\xf4\x4b\x22\x25" + "\xd9\xa8\xe7\x2b\x3c\x86\x72\x9a\xad\x46\x31\xec\xca\x74\x9e\x6a\xbf" + "\xfe\x84\x26\xa7\x15\x95\x07\x0b\x8d\x1d\x13\x12\xa1\x05\xbc\x8f\x46" + "\xf4\x14\x29\xc4\xce\x81\xcf\x1a\xfd\x05\x5d\x64\x10\x01\x4f\xe5\xcb" + "\x0a\x98\x85\x09\x70\x83\x19\x00\x4c\x12\xc4\x67\x44\xa1\x59\x40\x08" + "\x31\x20\x80\x10\x02\x53\x4f\x7b\x9e\xa9\xa5\x0f\x2b\x1c\xd5\x0b\x16" + "\x96\xa9\xa4\x5e\x9f\xb5\xa2\xab\x3d\x18\x29\x2b\x7b\xcc\xc8\x27\x88" + "\x65\x9e\x12\x19\x06\x1a\xc5\x10\x8e\xe3\xae\x59\x16\xb5\x19\x73\x98" + "\xaf\x2a\x31\x11\x38\x74\x55\xd9\xcc\x49\x93\xde\x20\xf2\x34\xbe\xe6" + "\xa5\xdc\xb8\xb6\x8b\x9a\xc7\x98\x83\x6f\x66\xd5\xef\xce\xcc\xfd\x0a" + "\xff\xfb\x74\xc4\xf7\x00\x10\x95\x81\x65\xed\x98\xf7\xa2\x09\xaf\xab" + "\xfd\x93\x16\xe4\xa6\x21\x7c\xbc\xab\x52\xa2\x1d\xd7\xf5\x9b\x2b\xfa" + "\x37\x9b\x29\x5c\x21\xa7\x86\x82\x9a\x7c\x66\x09\xa2\xb1\x18\xdb\x69" + "\x92\x12\xa1\x8a\x12\x18\xc0\x58\xb1\x7d\x47\x4c\x05\x18\x86\x74\x0d" + "\xab\x16\x6d\x58\xc2\x42\xf1\xf1\x62\x08\x98\x34\x85\x8f\xff\x9d\xd4" + "\xff\x62\xb5\x2f\x63\xfa\x34\x87\x6d\x0f\x6b\x1f\x78\xc9\x9b\x5d\xea" + "\xb5\x8e\x66\x18\xc6\xb9\x0c\x9f\x0a\x75\x06\x6c\xd3\x01\x33\x67\xf5" + "\x0a\xac\x23\xaa\x13\xc9\x5c\x94\x28\x63\x2e\xf0\xdc\x58\xb9\x83\x67" + "\xd9\x4b\x5c\xaa\xfe\x7f\xc9\xb0\xd0\x70\x3a\x19\x77\x12\xac\x1d\x09" + "\xba\xb1\x8f\xff\x76\x61\xc5\xc3\xab\x0c\xa3\x74\x36\x80\xdc\x8d\xa2" + "\x50\x4e\x28\x96\x58\x30\x71\xa4\x1a\x76\x88\xcc\x62\xa4\x02\x91\x4d" + "\x25\x1b\x53\x48\x38\x7a\xbc\xa8\x51\x69\xb7\x4e\xf8\x17\x74\x33\xc5" + "\x40\xdb\xcf\xf5\xe7\x38\xf9\xbb\x28\x0c\xdc\x28\xf2\x68\xa9\x34\x0e" + "\x5c\x22\xdd\x27\xb8\x45\x98\x9a\x67\x53\x54\xa2\x9d\x46\xc8\xd8\x0c" + "\x4a\xab\x9d\xa1\x00\x45\xba\x0e\x62\x3a\x99\xb2\x98\xa3\x31\x47\x0e" + "\xff\x3f\xe1\x51\xfa\x10\xfa\x36\x82\x83\x67\xfa\x9f\x45\x3a\x36\xda" + "\x0a\x6c\x8c\x8a\xe4\xbe\xac\x7b\x2b\xf1\x40\x3b\x88\x55\x3a\x86\xff" + "\xfb\x64\xc4\xf9\x00\x90\x41\x7b\x55\xcc\x98\xb5\x09\xea\x2f\xaa\xb9" + "\xa4\x0a\xb1\x0a\x92\x81\x19\x5c\x85\x22\x89\xbb\x6d\x73\x85\x4f\x46" + "\x30\x94\x9f\x07\x18\x38\xef\xd2\x38\xc0\xb1\xf6\xcc\xd6\xb7\x06\x32" + "\xfb\x8a\xc4\xd3\x37\xbd\xd6\x63\x2c\x5e\x6f\xb9\x20\x83\xe2\x28\x4c" + "\x14\xd8\x7b\x0e\xd8\xb9\x22\x9a\x19\x47\x75\x5a\x01\x87\xee\xe9\x19" + "\x22\x89\x35\x23\x9d\xd3\x53\x9e\x9f\xc4\x2a\xc7\xd3\x73\xa7\xa8\x2d" + "\xd5\x44\x37\x76\x80\xd5\xc6\x73\xef\x80\x39\xf9\xfc\xff\x8c\x87\x93" + "\xc2\xe9\x44\x4f\x26\xff\xe3\xc3\x9a\xcf\xf0\xf4\xd4\x54\x6a\x14\x19" + "\xfe\x98\x65\xdc\x26\x2f\x95\x37\x54\x17\x60\xca\x1d\xf6\xc6\xe2\xa3" + "\xe5\xb4\x84\x80\x23\x46\x88\x42\x22\x03\x88\xd6\x5a\x17\x55\xa6\x28" + "\x63\xf8\xd8\xd7\x87\xd7\x7b\xa2\xb3\xcc\xb7\x3b\x5d\x92\x24\x42\xe2" + "\x9b\xc7\xdd\xa8\xf4\x7e\x9b\x65\x52\x02\x41\xed\x2c\x85\x6b\x91\xf6" + "\x09\x93\x6d\x6d\x6d\x29\xca\x2b\x63\x90\xa1\x1a\x75\xdc\x41\x8a\x83" + "\x15\x49\x91\x2a\x5e\xce\xe8\x54\x31\x50\xcb\x49\x0e\xe2\x6b\x22\x54" + "\x64\xff\xfb\x74\xc4\xe8\x00\x0e\xcd\x0b\x57\xec\x24\x74\xc1\xef\x2f" + "\xaa\xfd\x83\x0a\x98\x59\x1c\x46\x28\xa7\x49\x1b\xa1\x27\x1e\xed\xc5" + "\x9a\x7d\x1c\x6a\x91\xe2\x1f\xfa\x84\x4c\x72\x71\xc3\xe3\x45\xcc\xd0" + "\xf3\x5f\x01\x38\x3b\x6a\xab\xa6\x0b\xd4\xb4\x2d\x5d\x48\x20\x8e\xa3" + "\x54\x4b\x10\x19\x14\xf9\x67\xed\x85\x31\x15\x4a\xd2\xf3\xae\xe1\xad" + "\xd4\x15\xf6\x8f\x4c\xc4\x14\x62\x01\xb9\xbf\x86\x11\x9a\xc6\x18\x79" + "\xb0\x0a\xb3\x0b\xb2\xd0\xa1\x46\x10\x76\x8f\x73\xad\x9a\x5b\x18\x7b" + "\x4a\x6c\x61\x1e\x8a\xb5\xb2\x25\x91\xce\x56\x64\x67\xd6\x38\xc5\x56" + "\x54\x7a\x36\x44\x6a\xa7\x73\x1b\x0e\x8f\x1e\x30\x48\xa1\xe2\x87\x0a" + "\x1e\x61\xb8\xcc\x36\x1c\x1e\xbf\xc9\xdd\xe7\x7f\xfb\x7b\x32\x90\x93" + "\x0a\x54\x7e\xab\xe8\x2d\x8c\x9e\xf8\x2c\xb2\x73\x09\x6c\x68\x10\x83" + "\xd9\xaf\xf4\x05\x05\xc8\xb0\xd1\xa8\xa8\x11\x30\x84\x0b\x05\xe2\x89" + "\x72\xe4\x35\x66\x79\x67\x50\x4b\xc8\xb5\xe6\xe7\x39\x85\x6a\x46\xef" + "\x39\xde\xfd\x5f\x52\x1f\xba\xcd\xc2\x81\x33\x9f\x7a\x38\xe3\xcb\x94" + "\x59\x4a\xba\x94\xd9\x90\x8c\xc8\xc2\x00\x84\x76\x1f\x19\xea\xf2\x99" + "\xba\x11\x5a\x57\xeb\x22\x25\x4e\xee\x4d\x89\xe6\x44\x35\x08\xc4\x77" + "\xe3\x58\x88\xf2\x23\x29\x19\x7c\xd5\x5f\xc9\xec\x35\x9d\xa6\x65\x0e" + "\xff\xfb\x74\xc4\xf4\x00\x0f\xa5\x63\x57\xec\x18\x75\x0a\x09\x2e\x2b" + "\xbd\x84\x96\x99\x1e\x88\x1d\x93\x84\x25\x5e\x07\x7f\x96\x08\x93\x30" + "\x0a\xdc\x68\x94\xcf\xf0\x1e\xf0\xea\x81\x49\xb7\xc2\x49\xa6\xd8\x80" + "\x41\xc1\x94\x1c\x31\x28\x12\x28\xed\xbd\xd8\xbe\x30\x6d\xf7\xef\xf1" + "\xfc\xa2\x4e\x24\xf0\xb4\xc5\x71\xd2\x44\xe6\x4e\xd9\xa2\x52\x40\xfd" + "\xb7\xe4\xf4\xb4\x88\x24\xaa\xe6\x62\x24\x08\x3b\xe9\x6c\x9f\x71\xad" + "\xbd\x17\x36\xe3\xf8\x7f\xff\x29\xf7\xd9\xb7\x77\xac\xac\x8c\x68\x86" + "\xb7\xf5\xb3\xb9\x6c\xab\xb1\x6f\x59\x77\xd4\x74\x5e\x43\x91\xe3\xad" + "\x67\xfc\x5d\xa2\x3a\xa9\x4a\xda\xc4\x8a\x3e\x8a\x9a\x50\x73\xd0\x54" + "\x0b\x37\x4c\x13\x06\x48\x5d\x94\x00\x00\x19\xc4\x9a\xa0\x26\x99\x66" + "\xdb\x93\x25\x72\x84\x14\xb4\xe8\xf0\x1c\xaa\xec\x45\xfc\x5c\x0d\x85" + "\xe4\x8d\x08\xbd\x52\xe2\xf1\xc9\xd7\xb2\x01\x46\x40\x0a\x84\x57\x33" + "\x06\x40\x06\x99\x73\x5e\x6c\xd3\xff\x17\x93\x91\x1e\xcf\xb3\xe5\x90" + "\x5e\xfc\x5e\x24\xba\x32\xca\x4a\x67\x72\x42\x51\xf3\x95\x47\x37\x8b" + "\x31\x05\x4c\xc9\xb8\x69\x15\xa5\x5a\x85\x9f\x4e\x87\xb4\x44\x9c\x97" + "\xe0\x6b\x65\xbe\x38\x1c\x87\xd7\x71\xcd\x62\xf7\xf9\x47\xfb\x07\x0c" + "\x38\x99\x52\x58\xe6\x2b\x7a\x41\x1b\xfa\x2e\x16\x4b\xc2\x1b\xff\xff" + "\xfb\x64\xc4\xf9\x80\x0f\x01\x81\x61\xec\x18\xb4\xe1\xdf\xb0\x2b\xfd" + "\xa3\x0a\xa4\x83\x02\x3f\xaa\xfd\xd0\xff\x55\x33\xbd\x8e\x5a\x78\x99" + "\x07\x71\x54\x0e\x89\x00\x00\x03\xed\x65\x33\x80\xc5\x50\xd0\x39\x30" + "\x60\xcb\xfd\x3c\x56\xba\x3e\xb5\x2c\x59\x75\xfd\xc7\x61\xd6\x8f\x0c" + "\x59\xab\x2f\xab\x4f\xae\x69\x6c\x53\x3b\x4d\x2d\x86\xb5\xe8\x5c\x5a" + "\xd0\x18\x75\xc9\xcb\x54\x64\x3b\x73\x6a\x68\xd2\xcc\xd2\x9b\xb7\x63" + "\xd0\x9f\x06\x49\xce\x8d\xa1\x4f\x8a\xc3\x5d\xd4\xd7\x1d\x5a\xc5\x2b" + "\x2e\x90\xdb\x83\x2b\x58\xc8\xc7\x3a\x83\x36\x5c\x03\xca\x22\xa7\xff" + "\x24\x9a\xb8\xeb\xba\x73\xc9\xff\x3d\xee\x9e\x44\xa9\x2f\x8d\x17\x9e" + "\xd1\x0b\xf3\xa4\xeb\x41\x85\xcd\xb5\xff\xf2\x42\x7b\xde\xff\xd3\xdf" + "\xe3\x15\x1c\xfa\x94\x96\x82\x71\x10\xa2\x90\x84\x83\x92\x20\x00\x09" + "\xc8\x6a\x80\x28\xe0\xa8\x68\xf8\x2c\x84\x04\x3c\x51\x77\x80\xc4\xaa" + "\x2b\xcc\x7a\x51\x0d\x4a\xe0\x18\x1e\xca\xb4\x7c\x53\x29\x6c\x42\xdc" + "\x83\x48\x72\x6a\x17\xe1\x6f\x24\x13\x04\x53\xe5\x9c\x5a\x59\xcb\xb6" + "\xaa\xff\xfb\x74\xc4\xef\x00\x0f\x9d\x81\x57\xec\x98\xb3\xc2\x47\x30" + "\x2a\xbd\x86\x19\xac\x4d\xee\xcd\xbc\x2b\xdc\xbf\xc3\x35\xd0\x40\xb6" + "\x25\xce\x91\x9e\x57\x9a\x54\x76\x2a\x72\xf5\x8a\x99\xef\xb2\xd5\x3c" + "\xfa\x85\x63\x9a\xd2\x85\xc2\xe9\x30\xcf\xd7\xe0\x75\x65\xe2\x77\x9b" + "\xfd\x24\x51\x63\x35\x1e\x69\x53\xdc\x44\x14\xb8\xa3\xea\x6e\xac\x89" + "\x04\xda\xb5\x8a\xa8\x18\xa4\x66\x2e\xa3\x20\x00\x07\x15\x0d\xa4\xd0" + "\x80\x61\xd1\x1d\x52\x0d\xb2\x7a\x02\xdd\x25\x8c\xb1\x8a\xb4\xe5\xb5" + "\x84\x45\xbf\x56\x64\x21\xab\x27\x94\x46\x21\xa9\x5c\xee\xd3\x4d\xbd" + "\xd3\x8b\x38\xef\x34\x28\x56\x70\x88\x94\xd5\x08\xe2\xb4\xb3\x1d\x47" + "\x5b\x61\x4c\xc9\xb2\x16\x31\x05\xb2\x2f\x1f\xd5\xd7\xc2\xe4\x44\x53" + "\xa4\xe9\x57\x69\x4f\x16\x72\xbf\x2b\x39\x2a\xdd\x15\x04\x1b\xaa\x81" + "\x9e\x8f\x71\x82\xc6\x22\x0a\xa8\x98\xa8\xc5\xe2\x63\xf8\xc1\xd1\x25" + "\x67\x15\xff\xf2\x18\x76\x20\x24\xf9\x1f\xa6\xea\x26\x26\x99\xe1\xdc" + "\x19\x91\x18\x7d\x40\x03\xc5\xb1\x21\x2c\xd1\x33\x88\xf7\x05\x18\x20" + "\xa1\xf8\x89\x12\xe3\xe7\x17\x7c\x5a\xfc\x0e\xe5\xa7\xd0\xe0\x0c\xde" + "\x2e\xfc\xb0\xfb\xb2\xe6\x57\xfa\x06\x06\xdf\xa7\xac\xdc\x46\x95\x91" + "\x49\xe3\x6c\xc1\x65\xd9\x76\x63\x70\xdc\xe1\xc7\xe5\x3a\x34\x59\x0e" + "\xff\xfb\x74\xc4\xed\x00\x12\x2d\x81\x53\xec\x99\x37\x61\xfc\x2f\xaa" + "\x3d\x91\x97\x61\x42\xb6\xdd\x26\x3b\xda\x89\x08\x89\xc4\xbe\x18\x40" + "\x09\x04\x26\xf8\x89\xc5\xd0\xa0\xbb\x1f\x47\x65\x52\x8d\x93\xf2\x99" + "\xa9\xe1\x9f\xaf\x5f\x4b\xd1\x74\xeb\x0b\xe9\x2b\xd6\x34\x4d\xbd\x17" + "\xcc\xa7\x59\x55\x8b\x31\xba\x18\xa0\x9f\x89\x7f\xf7\x12\x6a\x24\xd7" + "\xe7\x4e\x5e\xd0\x3e\x60\x74\x3a\x76\xed\x47\x11\x12\xd3\x84\xce\x99" + "\xb9\xe4\xcc\xae\x5e\xec\xb0\xbb\x56\x4c\xb4\x71\x32\x4f\x31\xed\x31" + "\xac\x24\x47\x7a\xd5\xaa\xac\x07\xb7\x67\x0f\x1a\x00\x00\x4d\xa3\x48" + "\xf4\x57\x0a\x35\x40\x45\x04\x22\x5a\xd0\x4d\xa4\x38\x2a\x2c\x1c\x95" + "\xef\x01\x66\xf4\xa4\x19\x61\x04\x43\x95\x8f\xc6\xa4\x43\x0e\xe7\xc0" + "\xa7\x5c\x73\xb0\x8c\x53\xa0\xf5\x8b\x15\x4c\x6d\xb3\xc5\x6b\x58\x67" + "\xa8\x41\xa9\x04\xe8\xbe\x47\x0f\x65\xed\x18\xce\xfa\xd8\xcd\x58\x5c" + "\xf6\xa5\x44\xfb\x9c\xd8\xcd\x9d\xba\xf1\xe9\x6a\xde\x9d\x1c\x62\x30" + "\x87\xe0\x4f\x08\x24\x44\x5a\xe5\x04\x75\xe2\xc8\xca\xf9\xa4\xf9\x6b" + "\x33\x63\x3f\xf9\xe3\x1a\x1e\x87\x45\xa1\xf9\x86\x91\xce\xc9\xe7\xee" + "\x89\x8a\xfc\x97\xe7\x6d\x86\x3d\x6e\x45\x06\xad\xfc\x9d\xb9\xb7\x5d" + "\xde\x39\x3e\x42\xc0\xe7\x2b\x64\x02\x7e\x8c\xaf\x44\x64\x8e\x12\xff" + "\xfb\x84\xc4\xea\x00\x50\x59\x7f\x57\xec\x18\xb6\xea\xb2\x2f\xe9\xbd" + "\x93\x33\x14\x11\x3a\x9b\x37\x31\x80\x93\xfc\x54\x35\x17\x60\xe8\xac" + "\xd9\xd1\x52\x00\x80\x11\x6c\x48\x0b\x5a\xa1\x78\x84\x6b\x40\xb4\x02" + "\xa7\x26\xb2\x4d\xe3\x03\xf5\xcc\x28\x8e\x7a\xce\xf1\x12\x9d\x8d\xc6" + "\x3e\xad\x48\x2e\xda\xa2\x6a\x0c\x37\xcd\x91\x63\x4d\x02\x05\xb1\x35" + "\x31\x4b\xc7\xf9\x8f\xb9\x6f\x7d\x51\xb1\xee\xe0\x45\xac\x48\xaf\x73" + "\xff\xb6\x35\xe9\x9c\x5a\x94\xbf\xf0\xb3\x6c\xea\x0e\x37\xe5\x83\xac" + "\xe2\xd8\x8d\x4f\x9a\xfc\x5f\xf9\x3d\xef\x7b\x62\x78\xb1\xb7\x4f\xfe" + "\x75\xfe\x7e\x7f\xff\xff\xfd\xab\xff\xff\xfc\xcd\x9b\x6b\x75\xff\xe6" + "\xfa\x85\x58\x8f\x96\x6a\xc2\x65\xcd\xd3\x55\x32\x48\x76\x97\xa9\x4b" + "\xa0\xb0\x20\x24\xc6\x23\x77\xac\x04\x6b\x12\x22\x08\x47\xe0\xc2\x41" + "\x40\x84\x21\xfc\x60\xc3\x31\x83\x42\x00\xd3\x40\x61\x50\xe0\xe6\x33" + "\x11\x16\xcc\x50\x40\x32\xb8\xc8\xcb\x42\x50\xc5\xf9\x5b\x37\x68\xaa" + "\x11\xe7\x08\x1b\x01\x02\x80\x88\x2a\x25\xc5\x51\x80\x32\x96\x4a\x09" + "\x21\x03\x33\xa3\x4d\x50\xcf\x8d\x40\x61\x20\x70\x81\x11\x55\x0d\x7d" + "\xa1\xf0\x31\x3a\x89\x32\xa4\xd3\x79\x9d\x22\x73\x33\x53\x65\xb3\x61" + "\x6b\x39\xb3\x8b\xa1\x9c\xa6\xa5\x87\xb9\x88\xdf\x52\xd6\x96\xc9\x5e" + "\x85\xd3\x29\xca\x1f\x99\x6e\x0f\x82\xc3\xe9\x93\xc6\x9c\x47\xca\x21" + "\x00\x2e\xe7\x49\x95\x3b\x2e\x15\x3d\xd9\x24\xa5\xe7\xb3\x3d\x13\x94" + "\x3a\x93\x71\x38\x1e\x16\xf5\x38\xf4\xb1\x17\xe6\xff\xfb\x84\xc4\xef" + "\x80\x12\x75\x81\x55\xec\x3c\xd0\xe2\x69\xaf\xeb\x7e\xb2\xf0\x04\x25" + "\x11\x8e\x5a\x82\xa4\x94\xb4\xf7\x6d\x47\xa0\x88\x8c\x69\xd0\x95\x41" + "\x31\x76\x58\xcc\xda\xdb\xb7\xab\x54\x34\xd2\x9d\xc4\x67\x60\xa9\x4c" + "\xbb\x92\xfa\x48\x1a\x01\xdd\x06\x7f\x7e\x93\xac\x32\x10\xe8\x4e\xcb" + "\xe6\xdd\xfa\x68\x1e\x57\x45\x2b\x76\xb6\xf4\xd2\xc3\x35\x2a\xda\x81" + "\xa6\xa5\xf2\x5d\x55\xfa\xb5\xf9\x2a\xb9\x8e\xaa\x53\x4a\x1f\x8a\x4d" + "\xd8\xd6\x19\xd4\xe7\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfd" + "\xea\x1b\xdb\xef\xe5\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xfc\xc4\xf5\x75\x49\x35\xb9\xa8\x5a\xda\x45\x04\x6e\x48\x98\x4b" + "\x7c\xd3\x3c\xa0\x05\x86\x24\x19\x9d\x47\xd1\x9d\x88\xc5\x5f\xd7\xa1" + "\x69\xca\xe3\x2f\x78\x29\x12\xe4\x4c\x0a\x9d\x09\x07\x9a\x1d\x2f\x61" + "\x21\x79\xb0\x48\x1f\x8a\x97\x58\xf3\x65\x94\xd6\xcb\x98\xe9\x55\x37" + "\x55\xb7\xa8\x5a\x36\x52\x31\xb9\xab\xb2\x1f\x26\xee\xea\x1c\xc3\x78" + "\xfe\x1f\x48\xef\x6f\x51\x1c\x32\x99\xed\xbf\xde\x72\xcb\xe3\xe1\x95" + "\x2d\x5e\x90\x2f\xff\xff\x86\x57\x2f\xff\xff\xdf\x5f\xff\xeb\x5f\x2f" + "\x86\x7c\x42\x6d\x86\x7f\xe7\xab\x51\x5e\xcc\x98\xa5\xbd\x97\x47\x83" + "\x75\x0b\x23\x6d\xc4\xce\x60\x25\x94\x98\x40\x58\xe0\x18\xd0\x23\x65" + "\x49\xe2\x40\x95\x52\x05\x17\x0f\x03\xe9\xd5\xa1\x5a\x79\x71\x61\xdd" + "\x66\x6f\x95\x36\xe4\x8b\xe5\x73\xc9\xe8\x1d\x6e\xd5\xcf\x1e\x53\xca" + "\x3b\x12\xbf\xab\x97\xed\x5f\x02\xff\xfb\x94\xc4\xf6\x00\x25\x96\x05" + "\x55\xf9\xcd\x10\x01\xff\xaf\xeb\xbf\xb2\xb0\x04\xd4\x2a\xcd\xe2\xcc" + "\xa5\x77\xa8\x89\xb9\x15\x4d\x21\x82\x6a\x06\x6c\x5e\x27\x1b\xcd\x55" + "\xe2\x4a\xd0\xa1\x6c\x8c\xe4\x87\xfe\x14\x84\x6e\x7c\x33\x3a\x04\x07" + "\x57\xf9\xf5\x27\xf3\x4a\xdd\x5f\x93\x8c\x60\xa7\x70\x77\x40\x80\xdf" + "\xaa\xf3\x20\xb0\xc2\xec\x44\xe5\x48\x55\x03\x90\x48\xe3\x85\x14\x23" + "\x63\x61\x7f\x0c\xc5\x0e\x88\x20\x84\x24\x44\x70\xb1\x59\xa2\xce\x4c" + "\x34\x88\x68\x71\x5f\xae\xd5\xd6\x2a\xf8\xdf\xdc\xca\x24\x80\x09\x16" + "\xab\xdf\xb1\xba\xb4\x91\x7b\xb2\x88\xe3\xc8\x42\x8a\x85\x2f\xcc\x3a" + "\x43\x7a\x19\x93\x62\x13\xc5\xae\x26\x39\xe8\x95\xba\xda\xcd\x32\x51" + "\xf8\xc3\x0e\x83\x4d\x70\xb8\x81\x98\x67\xe7\xc9\xa2\x56\xd5\x6d\x5a" + "\xc6\x2a\x8e\x0a\x95\x37\xfd\x0b\xbf\xb3\x3b\x1d\xa4\x7d\x20\xb4\x47" + "\x06\xfd\x18\x23\xf8\xfc\xf4\x2e\x21\xbc\xda\x2e\xb3\x93\x37\x6b\x4d" + "\xa9\x49\xdb\x12\x82\x67\x44\xa2\x92\xbc\x44\x25\x2d\x0b\x3c\x15\x30" + "\xa8\xcb\x2a\xa5\xf2\xd6\x78\xcd\x30\x68\xea\x89\x72\xaa\xda\x5f\xee" + "\x31\xe0\x31\xe8\x3a\x69\xfc\x9f\x8f\x7c\x7e\xe6\x10\xa4\x81\x68\x4e" + "\x17\xb5\x40\x35\x10\xf3\x4a\x5e\x88\xd0\x2d\xfd\x54\x6e\x93\x6a\xc9" + "\x7d\x28\xa4\x24\x76\xd5\x09\x30\xb0\xf1\xcd\x3d\x5f\x3e\xf1\xcf\x7a" + "\x35\xef\x5b\x35\x4c\x7f\x3e\xdd\x57\x0a\x91\x03\x71\x94\x56\xd3\xba" + "\xac\xf2\xd7\xf7\xff\xf2\x1c\x5c\xa5\x43\x33\x87\x63\xb8\x04\xa5\xf7" + "\x7b\x52\x4e\xca\xc7\xf5\x0d\x61\x39\x06\xb5\xc8\x89\x60\xb4\xb6\x02" + "\x34\x1d\x82\x5e\x0a\xc0\x32\x71\xa6\x79\x55\x96\x2a\x34\xbb\x6c\xc1" + "\x9a\xf2\x91\xd2\xb3\xc2\x9b\x0a\x7c\x50\x67\x95\x69\xb1\x10\x32\xfc" + "\xe8\xff\xfb\x84\xc4\xd5\x00\x0f\xb5\x7f\x59\xed\x8c\x59\x01\xe5\xad" + "\xea\xfd\x83\x0a\xe0\xf9\x49\x43\x2c\x94\xdf\xcb\x0a\x1c\x22\x4a\x9c" + "\xd4\x55\x1d\x65\x8a\x21\x4b\x8d\x15\x15\x81\x9d\xf1\x39\x47\x8a\x8a" + "\x1b\xc9\x4d\x9d\xe3\x1d\x91\x25\x09\x18\x6e\xe9\x0e\xc4\x5b\x36\x94" + "\xe7\x6d\xcc\x64\x7f\xda\xa4\x6b\x37\xbb\x93\x45\x7d\xb5\x46\x91\x0b" + "\x7f\x93\xf6\x68\x2f\x06\x76\x96\xc2\xea\x6d\x46\xae\x87\xf4\x06\x90" + "\x60\x05\x10\x00\x6b\x03\x00\xe0\x51\xd2\xa7\x19\x29\x85\x1d\x2d\x30" + "\x66\x0c\x54\xe1\x61\x41\x02\xa0\x44\xf2\x6e\x2b\x22\xf1\x50\x1b\x88" + "\xa5\x83\xc4\x61\xac\x2f\x66\xe1\x05\x18\x3b\xd6\x5e\xde\x1b\xb4\x24" + "\x21\x98\xb2\x88\x90\x37\x99\xd0\xbb\x7a\x72\x50\x4a\xd6\xca\x24\x27" + "\x1d\x75\xb3\xae\x99\x79\xdb\x26\x0d\x53\x79\x40\x9f\x99\x74\x35\x74" + "\x1d\x04\x90\x4d\x15\xb7\xc9\x25\x2a\xc4\xde\xa4\x9b\x6a\xa6\x88\x8c" + "\xfa\x15\x07\xa0\xe2\x90\x6b\x68\x51\x85\x0f\x98\xc2\x95\x2e\xa5\x2e" + "\xd2\xbf\x8c\x0e\xf1\x62\x10\x1f\x33\xf2\xf0\xf3\x0d\x16\xab\x33\xc4" + "\x83\xa7\x7b\x76\x55\xb9\xb4\x79\xa7\x0a\x0e\xca\x88\x00\x18\xa5\x42" + "\xd5\x50\x42\x39\x31\xb0\x29\x54\x53\x15\x93\x4e\x58\xa8\x39\x17\xa5" + "\x2b\x26\x8b\x65\x93\x19\x56\x88\x21\x12\x39\x5f\x52\x48\xea\xef\xa2" + "\xd7\x75\xf3\xf1\x9c\x24\xe2\x90\x39\x1a\xc9\x3e\x76\x24\xc4\xa8\x0a" + "\xf3\xa4\x8c\xc4\x94\x5e\x4d\x57\xf9\x71\x82\x91\xab\x7c\x8e\xc6\x2f" + "\x8f\xcf\x24\xea\x13\xe7\x9b\x77\x2a\x0c\xcb\xf5\x8c\x5e\xff\xfb\x74" + "\xc4\xf7\x00\x10\x65\x81\x5b\xed\x19\x14\x81\xef\x30\x6b\x3d\x94\x0a" + "\xe1\x49\xc0\xc6\x09\x4b\xd3\xd9\x83\x42\x43\xc0\x84\x32\xcf\xf0\x90" + "\x0b\xeb\x5e\x5c\x47\xbc\xd8\x0c\xc3\xa5\x19\x75\x70\x92\x48\xa0\xd2" + "\xd4\x08\xbd\x63\x45\x2d\xd3\x09\x43\x82\x0e\x71\xa5\xb7\x16\x5e\x8f" + "\xad\x97\x93\x2a\xd2\xc4\x10\xb6\xc6\x38\x5a\xc9\x9a\xdb\xfd\xfd\x46" + "\x98\x37\x31\x10\x8c\x92\x5d\xd2\x62\x64\xb6\x86\x21\x70\x91\x91\xc4" + "\x0d\xd6\xa5\x83\xad\x34\xc3\x10\x53\x82\xc5\x91\x0e\xb5\x50\xa9\x9b" + "\x14\x3a\x15\x7a\x2f\x97\xc2\xd2\xbf\x79\x7f\xfa\xdb\x93\x77\xc1\x85" + "\x80\x07\x85\x8d\x4a\xc0\xa4\x8b\xb8\xa8\x6f\x16\xdc\xa2\xea\xef\x2e" + "\x92\xc1\x2b\xee\xb2\xbb\x1c\x40\xba\xd4\xc8\x0c\x4d\x88\xae\x24\x30" + "\xa1\x21\xa1\x15\xc6\x4a\x22\x90\x3b\xf1\xb2\x81\x34\xe6\x43\x3f\x00" + "\x7e\x0e\x68\x8d\x0c\x25\xe7\xfc\xf5\x1c\x60\x58\x6b\x5e\x59\x35\x82" + "\x4b\x24\x3b\xac\x86\x13\x3f\xa6\x7b\x81\xe4\x09\x59\xb3\xf1\x46\x02" + "\x51\x88\xa9\x99\x16\xd2\x7b\x2b\xda\x9f\xd0\x59\xde\x88\x54\x61\x47" + "\xbe\xa4\x20\x25\x74\x2b\x55\xef\x94\x2a\x19\xfd\x5a\x54\xfd\xf4\x33" + "\xab\x2b\x67\x7f\xea\xdd\x1f\x49\x0b\x81\xb5\x04\x02\x3b\x50\x54\x39" + "\xcf\x30\x1b\x76\x85\xbe\xed\x2b\xb2\xc4\x0b\x35\x8d\xff\xfb\x64\xc4" + "\xfd\x00\x12\x1d\x81\x4b\xcd\x18\xb5\x81\xcc\x23\x2b\xbd\x93\x0e\xa4" + "\x21\x40\xda\xbb\x4b\xe0\xc7\x25\x1a\x85\x52\x6c\xc0\x18\xc4\x94\x80" + "\x14\x32\x69\xba\xed\x9a\xfc\x71\xe5\x2f\xf2\x79\xad\x0e\x67\x52\x65" + "\xa3\xe3\xff\xc7\x36\x25\x3a\x82\x9a\xda\xb0\xa3\x20\x11\x03\xcd\x64" + "\x90\x6f\x36\x93\x9d\x57\x7c\x0b\x74\x29\x16\xc3\x72\xff\x7a\xaf\xf3" + "\xdc\xcb\xce\x57\x4e\xf5\xd4\xf9\xd4\x20\x38\xe8\x61\xce\xae\xfe\x9f" + "\xcd\x3d\xea\xea\x77\x43\x3e\x8c\xff\xff\xeb\x4c\x23\x1d\x23\x28\x57" + "\xe4\x8b\x0a\x54\x2c\xca\x35\x2d\xa9\x07\x66\x40\xce\x0d\x11\xd9\x2a" + "\x44\x04\x64\x71\x6b\x16\xc8\x30\x42\xde\x41\xb6\x7e\x8e\x01\xce\x6b" + "\xe8\x62\xd6\xda\x84\xca\xb8\xdc\x19\x4f\x19\x77\x9f\x4e\xfe\xb3\x4e" + "\x55\x47\x2b\xab\xa7\x23\xbb\x99\x00\x86\x49\x96\x70\x5a\x01\xa1\xac" + "\x42\x08\x22\x40\xa6\x1a\x49\x20\x47\xbc\xbd\x5e\x79\x28\xfd\x6f\xf2" + "\x6d\xcc\xc2\xb2\xba\xd5\xb2\x2e\xa8\xaf\x91\xc5\x09\x14\xa8\xa0\x27" + "\x9b\xc9\xee\xc8\x66\x5f\xce\x98\xc7\x27\xf4\x62\x75\x7f\xc4\xff\xfb" + "\x74\xc4\xe8\x80\x0e\x91\x05\x61\xec\x18\x74\xe1\xe4\x2e\x6b\xfd\x83" + "\x0a\xa5\x1f\xfe\x23\xcc\x57\x6e\x06\x60\xce\x2a\xbb\xca\x1c\x92\xb2" + "\x0d\x5c\x95\xd6\x42\x40\x91\x14\x5e\x42\x00\x31\x71\x90\xaf\x11\x60" + "\x18\x00\x1b\x68\x05\x52\x45\xf0\x82\xed\xc3\x5c\x26\x49\xc4\x9e\xfe" + "\x84\xc1\xa7\x39\xec\x2e\x7a\x8a\xff\x15\x66\x1a\xc4\x89\x5d\x63\x74" + "\xe6\x61\xc6\xc4\x8c\x46\x2f\xac\xda\x28\xdc\x73\xfe\x74\xf3\xa8\x8a" + "\xe5\x2a\x92\xa7\xcd\xbc\x7f\xc9\xb5\xfd\xd3\xeb\x17\x6b\xe9\x46\xfe" + "\xe7\xd4\xf8\x94\x25\x10\x1c\x70\xd3\x5f\xfc\x8b\x1d\xe5\x5d\xff\xfd" + "\xaa\xfc\x96\x3b\xff\x95\xe4\xaa\xe1\xc2\x28\x60\x82\x36\xca\x00\x10" + "\xdd\x4b\x8b\x0d\x8a\x09\x2b\x43\x93\x4b\x2a\x08\x32\x55\xf5\xd5\x09" + "\x51\xe6\xb8\xc4\xbe\x4a\xef\x4a\x5c\xdc\xb2\xc3\x72\x84\xca\xb1\x86" + "\xbd\xe8\x8a\x20\xc9\x96\x5d\x95\x54\x82\x4a\x7e\x4b\xf7\x23\x2e\x69" + "\xa4\xf1\x5d\x2d\x4a\xcb\x54\x44\x1d\x99\x7c\xc5\x7d\xa8\x28\x10\xa0" + "\x2e\x04\x2a\xc3\xfc\x48\x20\x8a\xd4\x24\x68\x90\xd4\x1b\xe1\xb0\x59" + "\xe5\xd6\xd0\x4c\x2f\x52\x38\x9d\x7a\x7f\x93\x9f\x11\x3b\xc4\xd5\x30" + "\xe2\xff\xe1\x57\xf0\x85\xa1\x13\xfe\xc1\x3a\x1d\xeb\x13\xe4\x2a\x89" + "\xa8\x1a\xa2\x74\x18\xe3\x69\xa4\xc4\x2b\x77\x11\x35\x69\xff\xfb\x64" + "\xc4\xf7\x00\x0e\xf5\x75\x61\xec\x98\xf5\x69\xd2\x2f\x2b\xbd\x83\x16" + "\xa5\x31\xd2\xfa\xd2\x97\x94\x43\x9e\x23\xe2\xc3\x18\x06\x71\x87\xd1" + "\x25\xa2\xd1\x6d\xfa\x7b\x36\x42\x1e\x81\x6e\x93\x32\x9c\x50\x69\x41" + "\xd9\x23\xb6\xae\x7a\xec\xd4\xed\xfc\x56\xce\xdd\x94\x4c\x43\xd6\xbf" + "\xba\x23\xc9\x6a\x93\xe4\x62\x0c\x3b\x33\xfb\xd7\xaa\xcf\xf5\xd9\x0e" + "\x49\x57\x3a\x5f\x5c\x9d\x90\x87\x33\x0e\xc7\x3b\xb3\x3b\x61\xaf\x36" + "\xf3\xfe\xa7\xfc\xd2\x67\x7b\x4b\xaf\xa6\x52\x4f\xbd\x8b\xd3\x55\xf3" + "\x7f\xe5\x27\x8e\x54\x3a\x45\xd9\xc5\x02\xd7\xf8\x44\xf3\x5f\x77\xfb" + "\x63\xa2\xa6\x23\x73\x87\x30\x9d\x0f\x79\x64\x68\xb2\x3a\xa5\xd6\x07" + "\x08\x5d\xa2\x01\x8b\xca\x92\x21\x60\xad\xa0\x19\x39\x21\x88\x65\x14" + "\xff\x8d\x41\xb2\x55\x8c\x67\x62\xa4\xad\x1e\x61\xfb\xbd\xc6\x5e\x4a" + "\x35\xcf\x46\x8c\x01\x98\x0c\x7f\xa8\xf7\x10\xa2\x14\xe7\x5e\xd9\x31" + "\xf3\x3d\x57\x97\xdf\xf7\x42\x59\xa1\xea\x22\xba\x4a\x5e\x1a\x9e\xbb" + "\x73\x58\x89\xa1\x4a\x87\x2b\x86\x56\xe7\x3b\x14\xa6\xa3\x37\xab\xff" + "\xfb\x74\xc4\xee\x00\x0e\x49\x3f\x5d\xed\x3d\x09\x81\xfc\x2e\xab\x3d" + "\x93\x0e\xa4\x5f\x5f\xb6\x9f\xd7\xa3\xf6\xf5\x68\x84\x6e\xf0\xba\xf8" + "\x3d\x89\x02\x34\x3e\x37\x6e\xa8\x29\xb2\xc0\x1b\x6b\x6d\x12\xc8\xc6" + "\x90\x18\x20\x19\xa5\x39\x02\x11\x54\x51\x04\x26\x59\xf2\xe5\x21\x0b" + "\x49\x9a\xce\xde\xa3\x8d\x45\x9f\x21\x1a\xb7\xeb\xfe\x61\x45\x32\xcf" + "\x9e\xe6\xbb\x0d\xb2\x7d\x1a\x36\x04\xee\x6d\x84\x16\x7d\x85\x93\x82" + "\x26\xe5\x77\xac\xe1\x51\x24\x04\x74\x78\xe8\x56\x54\x89\x8b\x47\x52" + "\xb1\x8c\xe4\x39\x9d\xdd\xae\xea\x73\xab\xbe\x5e\x9b\x5a\x5d\x17\xfb" + "\xb2\x95\x95\xfd\x13\xed\xfa\xcd\xed\x43\x30\x98\xc4\x42\x3c\x32\x9a" + "\xac\x6c\x1c\xc0\x82\xec\x6c\x5e\x98\x34\x23\x09\x46\xa1\x20\x82\x73" + "\xb2\x74\xb0\xc1\xe2\x0d\x38\xbc\xcc\xa0\x64\x27\x01\x60\x9f\x0d\x5e" + "\x06\x7f\x53\x01\xc0\x95\xd6\x82\x9c\xe9\x6f\xfb\xa6\xa8\xdd\x56\xf2" + "\xb5\x36\x07\x88\xd2\x46\xa5\x46\x16\x04\xea\x31\x2d\x2f\x3b\xe3\x77" + "\xa2\x46\xc1\xfb\xfc\x8f\xf7\xdc\xc1\x1d\xa5\x33\x32\xb2\x23\x9d\x15" + "\x5d\xae\x0d\xd9\x66\x49\x9e\x4d\x1e\xfb\x10\xf4\x3b\xcc\x63\x36\x8d" + "\xac\xa8\x65\xfd\xdb\x4b\x29\x1b\xbb\x37\xf9\x66\xdc\xc6\xd5\x4c\xe1" + "\xdb\xe1\x86\x0e\xda\x8c\xc1\x5c\xa6\xc2\x6b\x75\x6d\xa6\x80\xff\xfb" + "\x64\xc4\xfa\x80\x11\x09\x81\x57\xec\x3c\xcb\x01\xd6\xac\x2b\xbd\x93" + "\x0a\xa9\x64\x36\x67\x48\x2a\x23\x4b\x0a\x88\xd1\x10\x74\x08\x5b\xec" + "\x5e\x75\xc6\xfc\x35\xb0\x08\x11\xc6\x95\x79\xa9\x37\x48\xaf\x69\xc8" + "\xc4\x35\x24\x95\x9e\x44\xcd\x6f\x6b\x56\x06\x57\x52\x1b\x21\xc7\x9a" + "\xd4\x2e\x73\xcb\x98\xc1\x14\x05\x02\x84\x7f\x37\xa7\xa4\x35\x2c\xee" + "\xc9\xce\x14\x2c\xc1\x76\x31\x39\x64\x64\xf0\xb4\x6c\xfe\x4f\xcf\xa4" + "\x65\xe5\x97\xc3\x3b\xb6\xa6\x5a\x11\x96\xb8\xc8\x7f\x22\xf0\x85\x14" + "\x3c\x26\x7e\x57\xcc\x6e\x0e\x12\x42\xdd\x9a\xd2\xc4\xa2\x69\x5a\x70" + "\x94\x46\x1d\x97\x1d\x06\xd2\xb0\x19\x32\x58\x01\x9e\x0a\xed\x30\x28" + "\xe4\xd7\xa9\x24\x1e\x03\x34\x47\xa7\xf5\xeb\x87\xd6\x12\x63\x2a\xb0" + "\x3c\xab\xb4\xd1\x2e\xd2\x58\xa3\xbd\x37\x4c\x95\xea\x80\x0a\x09\x04" + "\x8a\x60\x0a\xd8\x53\x44\x3e\x44\x52\x45\xe9\x69\x2e\xa7\x78\x27\x20" + "\x9e\xac\x72\x02\x2a\x51\x85\xc5\xce\x0a\x63\x95\x06\xa0\xae\x6e\xda" + "\x9d\xfb\x6e\x6d\xe4\x74\xe6\xb4\xd2\xea\xff\x31\x3f\x43\x9f\x27\x7b" + "\xff\xfb\x74\xc4\xe9\x00\x0e\xf5\x7b\x5b\xec\xa4\x54\x89\xd4\x2e\xea" + "\xbd\x83\x0a\x99\xdc\x9d\x0b\x22\x44\xe4\x9a\x03\xbe\x4a\x39\xf0\x36" + "\x32\x60\x0d\x94\x01\x12\x46\x1e\x41\xb0\x40\x2d\x60\x59\xa5\x2a\x13" + "\xdc\x60\xe6\xc6\x05\x0d\x43\xa8\x56\x08\x2a\x1b\x01\x99\x1e\x32\xd0" + "\xb3\x27\x6d\x45\x80\x72\x68\x6b\x96\x60\xa1\xce\x3d\xe4\x5c\x61\x48" + "\x48\xd7\x11\x6c\x59\x86\x07\xee\x63\xb5\x0d\x86\xd2\xa9\x1d\xe5\xf6" + "\x4b\xa4\xad\xdf\x3e\x5a\x9f\x88\xb9\xca\xbe\x74\x17\x9a\xc6\x6a\x91" + "\x4d\x4f\x15\xfe\xaa\xf1\xf7\x8d\xad\x25\x75\xbf\xff\xba\x5a\xff\xbc" + "\xaa\xe6\x8b\xfc\x53\x1b\xae\x45\x2d\x17\x29\x0b\x34\xd9\x54\xbc\xc0" + "\x72\x7d\x0b\x4e\xab\xb3\x48\xf1\xbb\x9a\x15\x6a\xf4\x89\xa4\x85\xa2" + "\x11\xa8\x21\x1f\x10\x0d\x45\xd0\x1e\x51\x96\x7e\x34\x63\xf9\xc0\x28" + "\x06\x35\x09\x1c\x80\xc9\x9d\x0a\x6c\x4b\x7d\x9e\xb4\x88\xab\xcd\x67" + "\x57\x5e\xbb\x19\x4a\x33\x05\x07\x33\x87\x4a\x4a\x43\xca\x1b\x42\x53" + "\x28\x8b\x90\xad\x73\x7b\xec\x1d\x1e\x69\x0c\x66\xcc\x66\xf7\xbe\x33" + "\xd9\xcf\x49\xb2\x0d\x09\xeb\x25\xed\x7d\xf0\xbf\x11\xde\x8f\xc9\x75" + "\x27\x3f\x67\x53\x29\x27\x39\x9d\x02\xa4\xe6\x57\xff\xfe\x54\x65\x45" + "\xe5\xab\x66\xe6\x51\xf9\xf0\xad\xf3\x1f\xf0\xf5\x7b\x71\x58\x35\xff" + "\xfb\x64\xc4\xf8\x00\x0e\xd5\x4b\x5d\xec\xb0\x71\x01\xdf\xae\x6b\x3d" + "\x81\x96\xe1\x71\x3b\x1b\x48\xa0\x40\x59\xa6\x11\x20\x66\x82\xd1\xf2" + "\x41\x8a\xb1\x87\x14\x6a\x3a\x99\x28\x18\x44\xc5\x65\xb2\x83\x9d\x61" + "\x4a\x23\x33\xec\x91\xb3\x63\xdb\x51\x4b\x35\xe1\xfb\xb5\xbf\x1c\x24" + "\x96\x88\x83\xd6\x92\xa4\x0a\x48\xd5\x6d\x18\x5c\x9c\x8e\x8d\x3e\xb6" + "\xcd\x7b\x62\x37\x1b\xad\xaf\xf9\x59\xde\xa1\x50\x5c\x4e\xe9\x95\x7e" + "\x37\x3d\x0b\x44\xdc\xa5\x52\x5d\x45\x52\x5e\x5b\x98\xaf\x08\xd2\xa1" + "\xfc\x23\x7a\x37\xd1\x94\xa2\xbe\x7c\x93\xbe\xad\xc2\xb7\xea\xe0\x9f" + "\x38\x12\xd0\xfd\x60\xb0\xb6\xce\x9a\xe8\xd9\x05\x87\x8d\x83\x86\x5c" + "\x1c\x04\xbd\x1d\x02\x6d\xb1\x40\xb8\x98\x92\xc4\x5b\xb6\xe5\x04\xd8" + "\x42\xc4\x03\x17\x8b\xb4\xed\x91\xb2\xd0\x3e\xf2\xda\x6c\x39\x0e\x7d" + "\x6b\x74\x91\xd9\x8a\x85\x93\x1b\xb3\xce\xb2\xd0\x22\x42\xb4\xd8\xbd" + "\x9a\x83\xdf\x2a\x3a\xca\x5b\xe2\x6f\x8a\xc8\x27\xfa\x1b\x8e\x8d\x96" + "\xfb\xb3\x2f\xcd\xbb\xf4\x67\xbd\x1c\xaf\x62\xd4\x1e\x4f\xe5\xb4\xca" + "\xad\xff\xfb\x74\xc4\xee\x00\x10\x4d\x89\x4d\xcc\xbd\x0c\x81\xe8\x30" + "\x2b\xbd\x83\x0a\xb4\x37\x55\x6f\x85\x6c\x88\xad\xb1\xf0\x6c\x5c\xb6" + "\x7f\xf6\xfd\x1e\x2b\x26\xcf\xe0\x59\x5b\xc5\x4d\x6c\x6c\x91\x0c\xe4" + "\x47\xf4\xcc\x25\x31\xc4\xa0\x53\x42\x11\x54\x4a\xc4\x18\x21\x6d\xe8" + "\xa0\x44\xe1\x9b\x2a\x02\x2e\x28\x70\x89\x73\x27\x5c\x8b\x44\x48\x31" + "\x40\x6b\x76\x22\x77\xb0\xad\x05\xd6\xaf\x1f\x97\x5a\xb9\x88\x29\x84" + "\xca\x20\xaf\x27\x39\x13\x88\xa4\x24\x56\xc2\xda\xa9\x37\x48\xa8\x8a" + "\x83\x7a\x8b\x84\x55\xb7\xae\xef\xed\x93\x3a\xec\x85\xb1\x2b\x4b\x71" + "\x5d\x35\x7a\xfb\xab\xd8\x96\x72\xaa\x55\xd1\xa3\xc4\xc5\x10\x82\xb4" + "\x51\x8f\x27\x8b\x7f\x5a\x09\x15\x6d\x16\x8a\x7d\xdb\x91\xa2\x6f\x09" + "\x83\x87\x17\x9e\xc6\x14\xec\xed\x1a\x2e\xb3\xd6\x0f\x29\xd1\x07\xb5" + "\xad\xa2\x19\xd8\xef\x01\xa2\xad\x11\xa6\x17\x4e\xc9\x32\x41\x36\x77" + "\x88\x45\x11\xdb\xa4\x35\x32\x71\xc2\x53\xee\xc6\x0a\xa2\x08\x34\x66" + "\x6e\x06\x1b\x43\x40\x5a\x4c\x37\x14\x20\x51\x0c\x16\x7b\x34\x58\x69" + "\x3b\x15\x76\xcf\x12\x5c\x29\xf7\x0e\x9a\xec\xf4\xca\xd4\xab\xef\x55" + "\xd4\x2c\xa2\x46\x6e\xa7\xcb\xd6\x6d\x47\x28\x3d\x14\xdc\xbb\x69\x1d" + "\x09\xdd\xcb\x64\xde\xc8\xea\x9f\xf3\xfb\xa7\x5e\x7d\xab\x64\x47\x15" + "\xff\xfb\x64\xc4\xf5\x00\x0f\x5d\x73\x53\xec\x98\x57\x01\xd8\x2e\xab" + "\xbd\x83\x0a\xe4\x95\xc8\xe7\x13\xc3\x98\x13\x05\x47\x57\x05\x92\xbc" + "\x80\x89\x3c\xb3\x3f\x75\xb1\x23\x49\xc4\x69\x33\x40\x51\x63\xc4\xa1" + "\xa7\x60\xd2\xa0\x87\xe0\xa1\x18\x83\xc1\xd8\x61\x61\x03\x00\x8b\x5e" + "\xab\x42\x48\xad\xc8\x72\x4c\x1e\x5e\xd4\x4f\x98\x31\x1e\xd6\xed\x47" + "\x5a\x86\x6e\xcd\x9a\x28\xca\x33\xf6\x21\x08\x03\x61\x14\x25\x04\x90" + "\x2f\x34\xde\x14\x81\x54\xfe\xa8\x0f\x2e\xd1\xf9\x56\xd0\xf3\x9a\xde" + "\xbb\x11\xa7\xa6\x45\x4b\xf4\xd3\xb8\xe4\x2e\x65\x75\x2a\x16\x8c\x92" + "\x27\xd5\xb4\xe8\xf3\x69\xf6\xbf\x43\xca\xc8\x91\x22\x1e\x71\xe5\x09" + "\x2b\x87\x09\x30\x80\x6f\x10\x1c\xd3\xd2\x31\x05\x0e\x03\xe3\x69\x14" + "\x59\x01\x28\xfa\x2a\x20\x22\x36\xe0\x22\x54\xb0\xc3\x33\x25\x89\x1c" + "\x41\xc3\x13\x1f\xa6\xea\x34\x60\xf0\xb0\x3b\x40\xab\x26\x52\xa7\x5b" + "\xbb\xfb\x19\x7b\x5e\xf7\x9e\x23\x45\x45\x0c\xc5\x6f\x50\x29\x07\x23" + "\x9a\x5d\x53\x2f\xaa\x30\x08\xe8\xbb\x79\x22\xaf\x26\xff\xb2\xaf\x71" + "\x57\x5e\xff\xfb\x74\xc4\xea\x00\x11\x8d\x83\x59\xed\x18\xb7\x61\xe2" + "\xaf\x2b\x7d\x84\x0a\x7c\xf3\xf6\xbc\xa6\x6b\xff\x26\xa5\x9d\xad\xea" + "\x77\xc6\xee\x57\xef\x0f\xd4\xb5\x2a\x79\x1f\x41\xb1\x63\xcc\x4f\xfe" + "\x5b\xff\xd5\x3d\x5f\xf0\xe7\x8e\x12\x30\x49\x1b\x49\x16\xab\xbf\x15" + "\x72\x35\x5f\x90\x68\x18\xc3\x3f\x19\x40\x00\xc9\x85\xd0\x70\x8c\x28" + "\x96\x82\x02\x42\x82\x93\x06\x2e\x03\x58\x34\x72\xce\x38\xb0\xac\x91" + "\xfb\x79\x18\x12\x55\x23\xdb\x05\xd4\xaa\xdd\x37\x25\x2a\x97\x72\x38" + "\xcd\x2b\xe9\x8b\xbc\x10\x28\x92\x0f\xc5\x5a\x17\x84\x93\xc2\xe5\xb3" + "\x66\x9d\xe1\xf2\xe9\x0d\xcd\x1b\x2d\xb7\x29\x20\x61\xce\xb3\x6b\xdc" + "\xac\xac\x55\x47\xb3\xeb\x23\x72\xa8\xe9\xa8\x5d\xcd\xec\x58\x55\x71" + "\x8e\x68\x96\xbf\xf8\x69\xa2\xff\xe4\xcb\xc6\xa4\x57\xf9\x5b\xd3\xd7" + "\xc9\xb5\xfb\x5f\xf5\xc8\x84\x3e\xc4\x2b\x07\x8d\x25\x05\x47\x46\x0c" + "\x5f\xc8\xa2\x69\xac\xa0\xa7\x17\xb2\x2e\xd2\x48\x00\x0e\x19\x07\xb6" + "\x01\x32\x03\x52\xdc\xc5\x20\x49\x60\x53\x62\xc1\xc4\xeb\x03\x09\x98" + "\xc6\x0a\x4a\xe5\xbc\xe4\xce\xa4\x32\xee\x69\x40\x1b\x33\x77\xa0\x15" + "\x1b\x8f\x4a\x89\xc9\x48\x51\x51\xa8\xdd\xaf\x2e\x7a\x9d\x52\xbd\x12" + "\xc4\xc0\x42\xb0\x46\xca\xb1\xa8\x08\x41\x4f\x4c\xae\x8c\x19\x8c\x08" + "\xd8\xff\xfb\x74\xc4\xed\x00\x10\x0d\x81\x53\xec\x98\xb7\x01\xf4\x2f" + "\xe9\xbd\x93\x1e\xe8\x2a\x84\x01\xf8\xdf\xed\x05\x78\x5d\x8d\x4b\xc1" + "\x90\x98\xe1\x73\x82\x83\x0a\xa1\x42\x18\x30\x6c\x5d\xc3\x03\x93\xcf" + "\xc2\x8d\x6d\x13\xad\x20\x62\x29\x30\xdc\x5c\x05\xdd\x5a\x4f\x04\x4b" + "\x15\x19\x85\x0b\x8f\x65\x6a\x7b\x42\x35\x53\x40\x1d\xae\xd1\x34\x4b" + "\xca\xa7\x09\x34\x23\x63\x65\x41\x80\x11\x90\xea\x18\x9b\x45\xcd\x5b" + "\xb0\xd4\x5c\xb9\xad\x37\xf1\xeb\x01\xe1\x53\x32\x96\xfe\x44\x26\x37" + "\x53\x42\xc8\x89\x01\xa5\x59\x59\x13\x5e\xfa\xa8\x61\xaa\x92\xe7\x59" + "\xad\x8a\x16\x7a\xa9\x42\x91\xac\x60\xa0\x2c\xce\x02\x27\xcd\x5d\x4b" + "\x01\x18\x08\xe1\x2e\x6d\x56\x7c\x3f\x3f\xfa\xb1\x9b\xf6\x6d\x54\x29" + "\x61\x52\xab\x16\x13\x6e\xff\x37\x1c\x8a\x82\x8b\x8b\xbf\xff\xff\x2a" + "\x69\x23\x8d\x84\xef"; diff --git a/platformio.ini b/platformio.ini index 03f1d73..77a36a0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,8 +9,8 @@ ; https://docs.platformio.org/page/projectconf.html [env] -platform = espressif32 @ 6.1.0 -framework = espidf, arduino +platform = espressif32 @ 6.8.1 +framework = espidf monitor_speed = 115200 monitor_rts = 0 monitor_dtr = 0 diff --git a/sdkconfig b/sdkconfig index 2aee0ed..ef352c1 100644 --- a/sdkconfig +++ b/sdkconfig @@ -1,43 +1,273 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) Project Configuration -# +# Espressif IoT Development Framework (ESP-IDF) 5.3.0 Project Configuration +# +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" +CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_DPORT_WORKAROUND="Not determined" +CONFIG_SOC_CAPS_ECO_VER_MAX=301 +CONFIG_SOC_ADC_SUPPORTED=y +CONFIG_SOC_DAC_SUPPORTED=y +CONFIG_SOC_UART_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_GPTIMER_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_PHY_SUPPORTED=y +CONFIG_SOC_WIFI_SUPPORTED=y +CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_EFUSE_SUPPORTED=y +CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y +CONFIG_SOC_RTC_MEM_SUPPORTED=y +CONFIG_SOC_I2S_SUPPORTED=y +CONFIG_SOC_RMT_SUPPORTED=y +CONFIG_SOC_SDM_SUPPORTED=y +CONFIG_SOC_GPSPI_SUPPORTED=y +CONFIG_SOC_LEDC_SUPPORTED=y +CONFIG_SOC_I2C_SUPPORTED=y +CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_AES_SUPPORTED=y +CONFIG_SOC_MPI_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_FLASH_ENC_SUPPORTED=y +CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y +CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y +CONFIG_SOC_CLK_TREE_SUPPORTED=y +CONFIG_SOC_MPU_SUPPORTED=y +CONFIG_SOC_WDT_SUPPORTED=y +CONFIG_SOC_SPI_FLASH_SUPPORTED=y +CONFIG_SOC_RNG_SUPPORTED=y +CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y +CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y +CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y +CONFIG_SOC_PM_SUPPORTED=y +CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 +CONFIG_SOC_XTAL_SUPPORT_26M=y +CONFIG_SOC_XTAL_SUPPORT_40M=y +CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DMA_SUPPORTED=y +CONFIG_SOC_ADC_PERIPH_NUM=2 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 +CONFIG_SOC_ADC_ATTEN_NUM=4 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=16 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 +CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 +CONFIG_SOC_ADC_DIGI_MONITOR_NUM=0 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_SHARED_POWER=y +CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y +CONFIG_SOC_IDCACHE_PER_CORE=y +CONFIG_SOC_CPU_CORES_NUM=2 +CONFIG_SOC_CPU_INTR_NUM=32 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 +CONFIG_SOC_DAC_CHAN_NUM=2 +CONFIG_SOC_DAC_RESOLUTION=8 +CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y +CONFIG_SOC_GPIO_PORT=1 +CONFIG_SOC_GPIO_PIN_COUNT=40 +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF +CONFIG_SOC_GPIO_IN_RANGE_MAX=39 +CONFIG_SOC_GPIO_OUT_RANGE_MAX=33 +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA +CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y +CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_HP_I2C_NUM=2 +CONFIG_SOC_I2C_FIFO_LEN=32 +CONFIG_SOC_I2C_CMD_REG_NUM=16 +CONFIG_SOC_I2C_SUPPORT_SLAVE=y +CONFIG_SOC_I2C_SUPPORT_APB=y +CONFIG_SOC_I2C_STOP_INDEPENDENT=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_1=y +CONFIG_SOC_I2S_SUPPORTS_APLL=y +CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y +CONFIG_SOC_I2S_SUPPORTS_PDM=y +CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y +CONFIG_SOC_I2S_SUPPORTS_ADC=y +CONFIG_SOC_I2S_SUPPORTS_DAC=y +CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y +CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y +CONFIG_SOC_I2S_LCD_I80_VARIANT=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=2 +CONFIG_SOC_LCD_I80_BUS_WIDTH=24 +CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y +CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y +CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MMU_PERIPH_NUM=2 +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 +CONFIG_SOC_RMT_GROUPS=1 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 +CONFIG_SOC_RMT_SUPPORT_REF_TICK=y +CONFIG_SOC_RMT_SUPPORT_APB=y +CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y +CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_SDM_GROUPS=1 +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 +CONFIG_SOC_SDM_CLK_SUPPORT_APB=y +CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y +CONFIG_SOC_SPI_AS_CS_SUPPORTED=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_DMA_CHAN_NUM=2 +CONFIG_SOC_SPI_MAX_CS_NUM=3 +CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 +CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_TIMER_GROUPS=2 +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y +CONFIG_SOC_TOUCH_SENSOR_VERSION=1 +CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TOUCH_SAMPLER_NUM=1 +CONFIG_SOC_TWAI_CONTROLLER_NUM=1 +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_HP_NUM=3 +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_REF_TICK=y +CONFIG_SOC_UART_FIFO_LEN=128 +CONFIG_SOC_UART_BITRATE_MAX=5000000 +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y +CONFIG_SOC_SHA_ENDIANNESS_BE=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 +CONFIG_SOC_MPI_OPERATIONS_NUM=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_192=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_SECURE_BOOT_V1=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y +CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y +CONFIG_SOC_CLK_APLL_SUPPORTED=y +CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y +CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y +CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y +CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_WIFI_WAPI_SUPPORT=y +CONFIG_SOC_WIFI_CSI_SUPPORT=y +CONFIG_SOC_WIFI_MESH_SUPPORT=y +CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y +CONFIG_SOC_WIFI_NAN_SUPPORT=y +CONFIG_SOC_BLE_SUPPORTED=y +CONFIG_SOC_BLE_MESH_SUPPORTED=y +CONFIG_SOC_BT_CLASSIC_SUPPORTED=y +CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_BT_H2C_ENC_KEY_CTRL_ENH_VSC_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y +CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_SOC_EMAC_RMII_CLK_OUT_INTERNAL_LOOPBACK=y CONFIG_IDF_CMAKE=y +CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_INIT_VERSION="5.3.0" CONFIG_IDF_TARGET_ESP32=y CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 -# -# SDK tool configuration -# -CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-" -# CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set -# end of SDK tool configuration - # # Build type # CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +# CONFIG_APP_BUILD_TYPE_RAM is not set CONFIG_APP_BUILD_GENERATE_BINARIES=y CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y +# CONFIG_APP_REPRODUCIBLE_BUILD is not set +# CONFIG_APP_NO_BLOBS is not set +# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # end of Build type # -# Application manager +# Bootloader config # -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 -# end of Application manager # -# Bootloader config +# Bootloader manager # +CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y +CONFIG_BOOTLOADER_PROJECT_VER=1 +# end of Bootloader manager + CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set @@ -50,6 +280,14 @@ CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y # CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set CONFIG_BOOTLOADER_LOG_LEVEL=3 + +# +# Serial Flash Configurations +# +# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set +CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y +# end of Serial Flash Configurations + # CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set @@ -58,27 +296,53 @@ CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y CONFIG_BOOTLOADER_WDT_ENABLE=y # CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y +# CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set # CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y # end of Bootloader config # # Security features # +CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y +CONFIG_SECURE_BOOT_V1_SUPPORTED=y +CONFIG_SECURE_BOOT_V2_PREFERRED=y # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set # end of Security features +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +CONFIG_ESP_ROM_HAS_CRC_LE=y +CONFIG_ESP_ROM_HAS_CRC_BE=y +CONFIG_ESP_ROM_HAS_MZ_CRC32=y +CONFIG_ESP_ROM_HAS_JPEG_DECODE=y +CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y +CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y +CONFIG_ESP_ROM_HAS_NEWLIB=y +CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y +CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y +CONFIG_ESP_ROM_HAS_SW_FLOAT=y +CONFIG_ESP_ROM_USB_OTG_NUM=-1 +CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1 +CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y + # # Serial flasher config # -CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 # CONFIG_ESPTOOLPY_NO_STUB is not set # CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set # CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set @@ -100,22 +364,13 @@ CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set CONFIG_ESPTOOLPY_FLASHSIZE="2MB" -CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set CONFIG_ESPTOOLPY_BEFORE="default_reset" CONFIG_ESPTOOLPY_AFTER_RESET=y # CONFIG_ESPTOOLPY_AFTER_NORESET is not set CONFIG_ESPTOOLPY_AFTER="hard_reset" -# CONFIG_ESPTOOLPY_MONITOR_BAUD_CONSOLE is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y -# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 # end of Serial flasher config @@ -132,69 +387,18 @@ CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_MD5=y # end of Partition Table -# -# Arduino Configuration -# -CONFIG_ARDUINO_VARIANT="esp32" -CONFIG_ENABLE_ARDUINO_DEPENDS=y -# CONFIG_AUTOSTART_ARDUINO is not set -# CONFIG_ARDUINO_RUN_CORE0 is not set -CONFIG_ARDUINO_RUN_CORE1=y -# CONFIG_ARDUINO_RUN_NO_AFFINITY is not set -CONFIG_ARDUINO_RUNNING_CORE=1 -CONFIG_ARDUINO_LOOP_STACK_SIZE=8192 -# CONFIG_ARDUINO_EVENT_RUN_CORE0 is not set -CONFIG_ARDUINO_EVENT_RUN_CORE1=y -# CONFIG_ARDUINO_EVENT_RUN_NO_AFFINITY is not set -CONFIG_ARDUINO_EVENT_RUNNING_CORE=1 -# CONFIG_ARDUINO_SERIAL_EVENT_RUN_CORE0 is not set -# CONFIG_ARDUINO_SERIAL_EVENT_RUN_CORE1 is not set -CONFIG_ARDUINO_SERIAL_EVENT_RUN_NO_AFFINITY=y -CONFIG_ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE=-1 -CONFIG_ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE=2048 -CONFIG_ARDUINO_SERIAL_EVENT_TASK_PRIORITY=24 -CONFIG_ARDUINO_UDP_RUN_CORE0=y -# CONFIG_ARDUINO_UDP_RUN_CORE1 is not set -# CONFIG_ARDUINO_UDP_RUN_NO_AFFINITY is not set -CONFIG_ARDUINO_UDP_RUNNING_CORE=0 -CONFIG_ARDUINO_UDP_TASK_PRIORITY=3 -# CONFIG_ARDUINO_ISR_IRAM is not set -# CONFIG_DISABLE_HAL_LOCKS is not set - -# -# Debug Log Configuration -# -# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_NONE is not set -CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_ERROR=y -# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_WARN is not set -# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_INFO is not set -# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL=1 -# CONFIG_ARDUHAL_LOG_COLORS is not set -# CONFIG_ARDUHAL_ESP_LOG is not set -# end of Debug Log Configuration - -CONFIG_ARDUHAL_PARTITION_SCHEME_DEFAULT=y -# CONFIG_ARDUHAL_PARTITION_SCHEME_MINIMAL is not set -# CONFIG_ARDUHAL_PARTITION_SCHEME_NO_OTA is not set -# CONFIG_ARDUHAL_PARTITION_SCHEME_HUGE_APP is not set -# CONFIG_ARDUHAL_PARTITION_SCHEME_MIN_SPIFFS is not set -CONFIG_ARDUHAL_PARTITION_SCHEME="default" -# CONFIG_ARDUINO_SELECTIVE_COMPILATION is not set -# end of Arduino Configuration - # # Compiler options # -CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +CONFIG_COMPILER_OPTIMIZATION_PERF=y # CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=1 # CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set CONFIG_COMPILER_HIDE_PATHS_MACROS=y # CONFIG_COMPILER_CXX_EXCEPTIONS is not set @@ -204,8 +408,13 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set # CONFIG_COMPILER_DUMP_RTL_FILES is not set +CONFIG_COMPILER_RT_LIB_GCCLIB=y +CONFIG_COMPILER_RT_LIB_NAME="gcc" +# CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING is not set +CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE=y # end of Compiler options # @@ -217,91 +426,374 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # # CONFIG_APPTRACE_DEST_JTAG is not set CONFIG_APPTRACE_DEST_NONE=y +# CONFIG_APPTRACE_DEST_UART1 is not set +# CONFIG_APPTRACE_DEST_UART2 is not set +CONFIG_APPTRACE_DEST_UART_NONE=y +CONFIG_APPTRACE_UART_TASK_PRIO=1 CONFIG_APPTRACE_LOCK_ENABLE=y # end of Application Level Tracing # -# ESP-ASIO +# Bluetooth # -# CONFIG_ASIO_SSL_SUPPORT is not set -# end of ESP-ASIO +CONFIG_BT_ENABLED=y +CONFIG_BT_BLUEDROID_ENABLED=y +# CONFIG_BT_NIMBLE_ENABLED is not set +# CONFIG_BT_CONTROLLER_ONLY is not set +CONFIG_BT_CONTROLLER_ENABLED=y +# CONFIG_BT_CONTROLLER_DISABLED is not set + +# +# Bluedroid Options +# +CONFIG_BT_BTC_TASK_STACK_SIZE=3072 +CONFIG_BT_BLUEDROID_PINNED_TO_CORE_0=y +# CONFIG_BT_BLUEDROID_PINNED_TO_CORE_1 is not set +CONFIG_BT_BLUEDROID_PINNED_TO_CORE=0 +CONFIG_BT_BTU_TASK_STACK_SIZE=4096 +# CONFIG_BT_BLUEDROID_MEM_DEBUG is not set +CONFIG_BT_BLUEDROID_ESP_COEX_VSC=y +# CONFIG_BT_CLASSIC_ENABLED is not set +CONFIG_BT_BLE_ENABLED=y +CONFIG_BT_GATTS_ENABLE=y +# CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set +# CONFIG_BT_BLE_BLUFI_ENABLE is not set +CONFIG_BT_GATT_MAX_SR_PROFILES=8 +CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100 +# CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set +CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_AUTO=y +CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MODE=0 +# CONFIG_BT_GATTS_ROBUST_CACHING_ENABLED is not set +# CONFIG_BT_GATTS_DEVICE_NAME_WRITABLE is not set +# CONFIG_BT_GATTS_APPEARANCE_WRITABLE is not set +# CONFIG_BT_GATTC_ENABLE is not set +# CONFIG_BT_BLE_SMP_ENABLE is not set +# CONFIG_BT_STACK_NO_LOG is not set + +# +# BT DEBUG LOG LEVEL +# +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_HCI_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_HCI_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BTM_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BTM_TRACE_LEVEL=2 +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_L2CAP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL=2 +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_SDP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_SDP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_GAP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_GAP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BNEP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BNEP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_PAN_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_PAN_TRACE_LEVEL=2 +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_A2D_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_A2D_TRACE_LEVEL=2 +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_AVDT_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_AVDT_TRACE_LEVEL=2 +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_AVCT_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_AVCT_TRACE_LEVEL=2 +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_AVRC_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_AVRC_TRACE_LEVEL=2 +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_MCA_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_MCA_TRACE_LEVEL=2 +# CONFIG_BT_LOG_HID_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_HID_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_HID_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_HID_TRACE_LEVEL=2 +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_APPL_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_APPL_TRACE_LEVEL=2 +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_GATT_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_GATT_TRACE_LEVEL=2 +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_SMP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_SMP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BTIF_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BTIF_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BTC_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BTC_TRACE_LEVEL=2 +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_OSI_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_OSI_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2 +# end of BT DEBUG LOG LEVEL + +CONFIG_BT_ACL_CONNECTIONS=4 +CONFIG_BT_MULTI_CONNECTION_ENBALE=y +CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y +CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y +# CONFIG_BT_BLE_HOST_QUEUE_CONG_CHECK is not set +# CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set +CONFIG_BT_BLE_ESTAB_LINK_CONN_TOUT=30 +CONFIG_BT_MAX_DEVICE_NAME_LEN=32 +# CONFIG_BT_BLE_RPA_SUPPORTED is not set +CONFIG_BT_BLE_RPA_TIMEOUT=900 +# CONFIG_BT_BLE_42_FEATURES_SUPPORTED is not set +# CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL is not set +# end of Bluedroid Options + +# +# Controller Options +# +CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y +# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set +# CONFIG_BTDM_CTRL_MODE_BTDM is not set +CONFIG_BTDM_CTRL_BLE_MAX_CONN=3 +CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 +CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 +CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 +CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y +# CONFIG_BTDM_CTRL_PINNED_TO_CORE_1 is not set +CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 +CONFIG_BTDM_CTRL_HCI_MODE_VHCI=y +# CONFIG_BTDM_CTRL_HCI_MODE_UART_H4 is not set + +# +# MODEM SLEEP Options +# +CONFIG_BTDM_CTRL_MODEM_SLEEP=y +CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y +# CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_EVED is not set +CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y +# end of MODEM SLEEP Options + +CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y +CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 +CONFIG_BTDM_BLE_SCAN_DUPL=y +CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y +# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set +# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set +CONFIG_BTDM_SCAN_DUPL_TYPE=0 +CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=200 +CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD=0 +# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set +CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y +# CONFIG_BTDM_CTRL_SCAN_BACKOFF_UPPERLIMITMAX is not set +CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y +CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 +CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 +CONFIG_BTDM_RESERVE_DRAM=0xdb5c +CONFIG_BTDM_CTRL_HLI=y +# end of Controller Options + +# +# Common Options +# +CONFIG_BT_ALARM_MAX_NUM=50 +# end of Common Options + +# CONFIG_BT_HCI_LOG_DEBUG_EN is not set +# end of Bluetooth + +# CONFIG_BLE_MESH is not set # -# Bluetooth +# Console Library # -# CONFIG_BT_ENABLED is not set -# end of Bluetooth +# CONFIG_CONSOLE_SORTED_HELP is not set +# end of Console Library # -# CoAP Configuration +# Driver Configurations # -CONFIG_COAP_MBEDTLS_PSK=y -# CONFIG_COAP_MBEDTLS_PKI is not set -# CONFIG_COAP_MBEDTLS_DEBUG is not set -CONFIG_COAP_LOG_DEFAULT_LEVEL=0 -# end of CoAP Configuration # -# Driver configurations +# TWAI Configuration # +# CONFIG_TWAI_ISR_IN_IRAM is not set +# CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set +# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set +# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set +# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set +# CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM is not set +# end of TWAI Configuration # -# ADC configuration +# Legacy ADC Driver Configuration # -# CONFIG_ADC_FORCE_XPD_FSM is not set CONFIG_ADC_DISABLE_DAC=y -# end of ADC configuration +# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set # -# MCPWM configuration +# Legacy ADC Calibration Configuration # -# CONFIG_MCPWM_ISR_IN_IRAM is not set -# end of MCPWM configuration +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y +# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy ADC Calibration Configuration +# end of Legacy ADC Driver Configuration # -# SPI configuration +# Legacy DAC Driver Configurations # -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI configuration +# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy DAC Driver Configurations # -# TWAI configuration +# Legacy MCPWM Driver Configurations # -# CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC=y -CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST=y -CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID=y -CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT=y -# end of TWAI configuration +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy MCPWM Driver Configurations # -# UART configuration +# Legacy Timer Group Driver Configurations # -# CONFIG_UART_ISR_IN_IRAM is not set -# end of UART configuration +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy Timer Group Driver Configurations # -# RTCIO configuration +# Legacy RMT Driver Configurations # -# CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC is not set -# end of RTCIO configuration +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy RMT Driver Configurations # -# GPIO Configuration +# Legacy I2S Driver Configurations # -# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set -# end of GPIO Configuration +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy I2S Driver Configurations + +# +# Legacy PCNT Driver Configurations +# +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy PCNT Driver Configurations # -# GDMA Configuration +# Legacy SDM Driver Configurations # -# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# end of GDMA Configuration -# end of Driver configurations +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy SDM Driver Configurations +# end of Driver Configurations # # eFuse Bit Manager @@ -320,154 +812,133 @@ CONFIG_EFUSE_MAX_BLK_LEN=192 CONFIG_ESP_TLS_USING_MBEDTLS=y # CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set # CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set +# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set # CONFIG_ESP_TLS_INSECURE is not set # end of ESP-TLS # -# ESP32-specific +# ADC and ADC Calibration # -CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y -CONFIG_ESP32_REV_MIN_0=y -# CONFIG_ESP32_REV_MIN_1 is not set -# CONFIG_ESP32_REV_MIN_2 is not set -# CONFIG_ESP32_REV_MIN_3 is not set -CONFIG_ESP32_REV_MIN=0 -CONFIG_ESP32_DPORT_WORKAROUND=y -# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y -# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 -CONFIG_ESP32_SPIRAM_SUPPORT=y +# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set # -# SPI RAM config +# ADC Calibration Configurations # -CONFIG_SPIRAM_TYPE_AUTO=y -# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set -CONFIG_SPIRAM_SIZE=-1 -CONFIG_SPIRAM_SPEED_40M=y -CONFIG_SPIRAM=y -CONFIG_SPIRAM_BOOT_INIT=y -# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set -# CONFIG_SPIRAM_USE_MEMMAP is not set -# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set -CONFIG_SPIRAM_USE_MALLOC=y -CONFIG_SPIRAM_MEMTEST=y -CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 -# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set -CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 -# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set -# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set -CONFIG_SPIRAM_CACHE_WORKAROUND=y +CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y +CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CALI_LUT_ENABLE=y +# end of ADC Calibration Configurations + +CONFIG_ADC_DISABLE_DAC_OUTPUT=y +# CONFIG_ADC_ENABLE_DEBUG_LOG is not set +# end of ADC and ADC Calibration # -# SPIRAM cache workaround debugging +# Wireless Coexistence # -CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_MEMW=y -# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST is not set -# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_NOPS is not set -# end of SPIRAM cache workaround debugging +CONFIG_ESP_COEX_ENABLED=y +# CONFIG_ESP_COEX_SW_COEXIST_ENABLE is not set +# end of Wireless Coexistence # -# SPIRAM workaround libraries placement +# Common ESP-related # -CONFIG_SPIRAM_CACHE_LIBJMP_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBMATH_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBNUMPARSER_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBIO_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBTIME_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBCHAR_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBMEM_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBSTR_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBRAND_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBENV_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBFILE_IN_IRAM=y -CONFIG_SPIRAM_CACHE_LIBMISC_IN_IRAM=y -# end of SPIRAM workaround libraries placement +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# end of Common ESP-related -CONFIG_SPIRAM_BANKSWITCH_ENABLE=y -CONFIG_SPIRAM_BANKSWITCH_RESERVE=8 -# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set +# +# ESP-Driver:DAC Configurations +# +# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set +# CONFIG_DAC_ISR_IRAM_SAFE is not set +# CONFIG_DAC_ENABLE_DEBUG_LOG is not set +CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y +# end of ESP-Driver:DAC Configurations # -# PSRAM clock and cs IO for ESP32-DOWD +# ESP-Driver:GPIO Configurations # -CONFIG_D0WD_PSRAM_CLK_IO=17 -CONFIG_D0WD_PSRAM_CS_IO=16 -# end of PSRAM clock and cs IO for ESP32-DOWD +# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of ESP-Driver:GPIO Configurations # -# PSRAM clock and cs IO for ESP32-D2WD +# ESP-Driver:GPTimer Configurations # -CONFIG_D2WD_PSRAM_CLK_IO=9 -CONFIG_D2WD_PSRAM_CS_IO=10 -# end of PSRAM clock and cs IO for ESP32-D2WD +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:GPTimer Configurations # -# PSRAM clock and cs IO for ESP32-PICO +# ESP-Driver:I2C Configurations # -CONFIG_PICO_PSRAM_CS_IO=10 -# end of PSRAM clock and cs IO for ESP32-PICO +# CONFIG_I2C_ISR_IRAM_SAFE is not set +# CONFIG_I2C_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:I2C Configurations -# CONFIG_SPIRAM_CUSTOM_SPIWP_SD3_PIN is not set -CONFIG_SPIRAM_SPIWP_SD3_PIN=7 -# CONFIG_SPIRAM_2T_MODE is not set -# end of SPI RAM config +# +# ESP-Driver:I2S Configurations +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:I2S Configurations -# CONFIG_ESP32_TRAX is not set -CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_ESP32_ULP_COPROC_ENABLED is not set -CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=0 -CONFIG_ESP32_DEBUG_OCDAWARE=y -CONFIG_ESP32_BROWNOUT_DET=y -CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_ESP32_BROWNOUT_DET_LVL=0 -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32_XTAL_FREQ_40=y -# CONFIG_ESP32_XTAL_FREQ_26 is not set -# CONFIG_ESP32_XTAL_FREQ_AUTO is not set -CONFIG_ESP32_XTAL_FREQ=40 -# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_ESP32_NO_BLOBS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set -# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set -CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 -# end of ESP32-specific +# +# ESP-Driver:LEDC Configurations +# +# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set +# end of ESP-Driver:LEDC Configurations # -# ADC-Calibration +# ESP-Driver:MCPWM Configurations # -CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y -CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CAL_LUT_ENABLE=y -# end of ADC-Calibration +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:MCPWM Configurations # -# Common ESP-related +# ESP-Driver:PCNT Configurations # -CONFIG_ESP_ERR_TO_NAME_LOOKUP=y -# end of Common ESP-related +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:PCNT Configurations + +# +# ESP-Driver:RMT Configurations +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:RMT Configurations + +# +# ESP-Driver:Sigma Delta Modulator Configurations +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:Sigma Delta Modulator Configurations + +# +# ESP-Driver:SPI Configurations +# +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# end of ESP-Driver:SPI Configurations + +# +# ESP-Driver:UART Configurations +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of ESP-Driver:UART Configurations # # Ethernet @@ -481,11 +952,12 @@ CONFIG_ETH_RMII_CLK_IN_GPIO=0 CONFIG_ETH_DMA_BUFFER_SIZE=512 CONFIG_ETH_DMA_RX_BUFFER_NUM=10 CONFIG_ETH_DMA_TX_BUFFER_NUM=10 -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set +# CONFIG_ETH_IRAM_OPTIMIZATION is not set +# CONFIG_ETH_USE_SPI_ETHERNET is not set +CONFIG_ETH_USE_OPENETH=y +CONFIG_ETH_OPENETH_DMA_RX_BUFFER_NUM=4 +CONFIG_ETH_OPENETH_DMA_TX_BUFFER_NUM=1 +# CONFIG_ETH_TRANSMIT_MUTEX is not set # end of Ethernet # @@ -499,6 +971,10 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # # GDB Stub # +CONFIG_ESP_GDBSTUB_ENABLED=y +# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set +CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y +CONFIG_ESP_GDBSTUB_MAX_TASKS=32 # end of GDB Stub # @@ -506,7 +982,8 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y # CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set +CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH=y +# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set # end of ESP HTTP client # @@ -518,24 +995,45 @@ CONFIG_HTTPD_ERR_RESP_NO_DELAY=y CONFIG_HTTPD_PURGE_BUF_LEN=32 # CONFIG_HTTPD_LOG_PURGE_DATA is not set # CONFIG_HTTPD_WS_SUPPORT is not set +# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set # end of HTTP Server # # ESP HTTPS OTA # -# CONFIG_OTA_ALLOW_HTTP is not set +# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set +CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP=y # end of ESP HTTPS OTA # # ESP HTTPS server # -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set # end of ESP HTTPS server # # Hardware Settings # +# +# Chip revision +# +# CONFIG_ESP32_REV_MIN_0 is not set +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_1_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +CONFIG_ESP32_REV_MIN_3=y +# CONFIG_ESP32_REV_MIN_3_1 is not set +CONFIG_ESP32_REV_MIN=3 +CONFIG_ESP32_REV_MIN_FULL=300 +CONFIG_ESP_REV_MIN_FULL=300 + +# +# Maximum Supported ESP32 Revision (Rev v3.99) +# +CONFIG_ESP32_REV_MAX_FULL=399 +CONFIG_ESP_REV_MAX_FULL=399 +# end of Chip revision + # # MAC Config # @@ -543,43 +1041,69 @@ CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y +CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set +# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set # end of MAC Config # # Sleep Config # +# CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND is not set +# CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND is not set CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y # CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set -CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y -CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y -# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set +CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 +# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set +# CONFIG_ESP_SLEEP_DEBUG is not set +CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y # end of Sleep Config # # RTC Clock Config # +# CONFIG_RTC_CLK_SRC_INT_RC is not set +# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_RTC_CLK_SRC_EXT_OSC is not set +CONFIG_RTC_CLK_SRC_INT_8MD256=y +CONFIG_RTC_CLK_CAL_CYCLES=1024 # end of RTC Clock Config -# end of Hardware Settings # -# IPC (Inter-Processor Call) +# Peripheral Control # -CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_IPC_ISR_ENABLE=y -# end of IPC (Inter-Processor Call) +CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# end of Peripheral Control + +# +# Main XTAL Config +# +# CONFIG_XTAL_FREQ_26 is not set +CONFIG_XTAL_FREQ_40=y +# CONFIG_XTAL_FREQ_AUTO is not set +CONFIG_XTAL_FREQ=40 +# end of Main XTAL Config + +CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y +# end of Hardware Settings # # LCD and Touch Panel # +# +# LCD Touch Drivers are maintained in the IDF Component Registry +# + # # LCD Peripheral Configuration # CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_ENABLE_DEBUG_LOG is not set # end of LCD Peripheral Configuration # end of LCD and Touch Panel @@ -589,17 +1113,31 @@ CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 CONFIG_ESP_NETIF_TCPIP_LWIP=y # CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y +CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y +# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set +# CONFIG_ESP_NETIF_L2_TAP is not set +# CONFIG_ESP_NETIF_BRIDGE_EN is not set # end of ESP NETIF Adapter +# +# Partition API Configuration +# +# end of Partition API Configuration + # # PHY # +CONFIG_ESP_PHY_ENABLED=y CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP_PHY_MAX_TX_POWER=20 CONFIG_ESP_PHY_REDUCE_TX_POWER=y +CONFIG_ESP_PHY_RF_CAL_PARTIAL=y +# CONFIG_ESP_PHY_RF_CAL_NONE is not set +# CONFIG_ESP_PHY_RF_CAL_FULL is not set +CONFIG_ESP_PHY_CALIBRATION_MODE=0 +# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set # end of PHY # @@ -608,21 +1146,106 @@ CONFIG_ESP_PHY_REDUCE_TX_POWER=y # CONFIG_PM_ENABLE is not set # end of Power Management +# +# ESP PSRAM +# +CONFIG_SPIRAM=y + +# +# SPI RAM config +# +CONFIG_SPIRAM_MODE_QUAD=y +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_SPEED_40M=y +CONFIG_SPIRAM_SPEED=40 +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +# CONFIG_SPIRAM_USE_MEMMAP is not set +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +CONFIG_SPIRAM_USE_MALLOC=y +# CONFIG_SPIRAM_MEMTEST is not set +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0 +CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536 +# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set +# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set + +# +# SPIRAM cache workaround debugging +# +# end of SPIRAM cache workaround debugging + +CONFIG_SPIRAM_BANKSWITCH_ENABLE=y +CONFIG_SPIRAM_BANKSWITCH_RESERVE=25 +# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set + +# +# PSRAM clock and cs IO for ESP32-DOWD +# +CONFIG_D0WD_PSRAM_CLK_IO=17 +CONFIG_D0WD_PSRAM_CS_IO=16 +# end of PSRAM clock and cs IO for ESP32-DOWD + +# +# PSRAM clock and cs IO for ESP32-D2WD +# +CONFIG_D2WD_PSRAM_CLK_IO=9 +CONFIG_D2WD_PSRAM_CS_IO=10 +# end of PSRAM clock and cs IO for ESP32-D2WD + +# +# PSRAM clock and cs IO for ESP32-PICO-D4 +# +CONFIG_PICO_PSRAM_CS_IO=10 +# end of PSRAM clock and cs IO for ESP32-PICO-D4 + +# CONFIG_SPIRAM_CUSTOM_SPIWP_SD3_PIN is not set +CONFIG_SPIRAM_SPIWP_SD3_PIN=7 +# CONFIG_SPIRAM_2T_MODE is not set +# end of SPI RAM config +# end of ESP PSRAM + # # ESP Ringbuf # # CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH is not set # end of ESP Ringbuf # # ESP System Settings # +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 + +# +# Memory +# +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set + +# +# Non-backward compatible options +# +# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set +# end of Non-backward compatible options +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set +CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 # # Memory protection @@ -641,66 +1264,125 @@ CONFIG_ESP_CONSOLE_UART_DEFAULT=y # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_NONE is not set CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_MULTIPLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 CONFIG_ESP_INT_WDT_CHECK_CPU1=y -CONFIG_ESP_TASK_WDT=y +CONFIG_ESP_TASK_WDT_EN=y +CONFIG_ESP_TASK_WDT_INIT=y # CONFIG_ESP_TASK_WDT_PANIC is not set CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP_PANIC_HANDLER_IRAM is not set # CONFIG_ESP_DEBUG_STUBS_ENABLE is not set -# CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set -CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y +CONFIG_ESP_DEBUG_OCDAWARE=y +CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5=y + +# +# Brownout Detector +# +CONFIG_ESP_BROWNOUT_DET=y +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=0 +# end of Brownout Detector + +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set +CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y +CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y # end of ESP System Settings # -# High resolution timer (esp_timer) +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# ESP Timer (High Resolution Timer) # # CONFIG_ESP_TIMER_PROFILING is not set CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 +# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set +CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 +CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y +CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -# CONFIG_ESP_TIMER_IMPL_FRC2 is not set CONFIG_ESP_TIMER_IMPL_TG0_LAC=y -# end of High resolution timer (esp_timer) +# end of ESP Timer (High Resolution Timer) # # Wi-Fi # -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 -CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 -CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP_WIFI_ENABLED=y +CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=8 +CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +CONFIG_ESP_WIFI_STATIC_TX_BUFFER=y +CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP_WIFI_CACHE_TX_BUFFER_NUM=32 +CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y +# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set +CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 +CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 +# CONFIG_ESP_WIFI_CSI_ENABLED is not set +# CONFIG_ESP_WIFI_AMPDU_TX_ENABLED is not set +# CONFIG_ESP_WIFI_AMPDU_RX_ENABLED is not set +# CONFIG_ESP_WIFI_AMSDU_TX_ENABLED is not set +CONFIG_ESP_WIFI_NVS_ENABLED=y +CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 +# CONFIG_ESP_WIFI_IRAM_OPT is not set +# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set +# CONFIG_ESP_WIFI_RX_IRAM_OPT is not set +CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP_WIFI_ENABLE_SAE_PK=y +CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 +CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 +CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 +# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set # CONFIG_ESP_WIFI_GMAC_SUPPORT is not set -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SOFTAP_SUPPORT is not set # CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 +# CONFIG_ESP_WIFI_NAN_ENABLE is not set +CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y +CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y +# CONFIG_ESP_WIFI_WAPI_PSK is not set +# CONFIG_ESP_WIFI_11KV_SUPPORT is not set +# CONFIG_ESP_WIFI_MBO_SUPPORT is not set +# CONFIG_ESP_WIFI_DPP_SUPPORT is not set +# CONFIG_ESP_WIFI_11R_SUPPORT is not set + +# +# WPS Configuration Options +# +# CONFIG_ESP_WIFI_WPS_STRICT is not set +# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set +# end of WPS Configuration Options + +# CONFIG_ESP_WIFI_DEBUG_PRINT is not set +# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set +CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y +# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set # end of Wi-Fi # @@ -714,6 +1396,12 @@ CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y # # FAT Filesystem support # +CONFIG_FATFS_VOLUME_COUNT=2 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +# CONFIG_FATFS_SECTOR_512 is not set +CONFIG_FATFS_SECTOR_4096=y # CONFIG_FATFS_CODEPAGE_DYNAMIC is not set CONFIG_FATFS_CODEPAGE_437=y # CONFIG_FATFS_CODEPAGE_720 is not set @@ -737,87 +1425,78 @@ CONFIG_FATFS_CODEPAGE_437=y # CONFIG_FATFS_CODEPAGE_949 is not set # CONFIG_FATFS_CODEPAGE_950 is not set CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set CONFIG_FATFS_FS_LOCK=0 CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y # CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# CONFIG_FATFS_IMMEDIATE_FSYNC is not set +# CONFIG_FATFS_USE_LABEL is not set +CONFIG_FATFS_LINK_LOCK=y # end of FAT Filesystem support # -# Modbus configuration -# -CONFIG_FMB_COMM_MODE_TCP_EN=y -CONFIG_FMB_TCP_PORT_DEFAULT=502 -CONFIG_FMB_TCP_PORT_MAX_CONN=5 -CONFIG_FMB_TCP_CONNECTION_TOUT_SEC=20 -CONFIG_FMB_COMM_MODE_RTU_EN=y -CONFIG_FMB_COMM_MODE_ASCII_EN=y -CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 -CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 -CONFIG_FMB_QUEUE_LENGTH=20 -CONFIG_FMB_PORT_TASK_STACK_SIZE=4096 -CONFIG_FMB_SERIAL_BUF_SIZE=256 -CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8 -CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000 -CONFIG_FMB_PORT_TASK_PRIO=10 -# CONFIG_FMB_PORT_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_FMB_PORT_TASK_AFFINITY_CPU0=y -# CONFIG_FMB_PORT_TASK_AFFINITY_CPU1 is not set -CONFIG_FMB_PORT_TASK_AFFINITY=0x0 -CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT=y -CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233 -CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 -CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 -CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 -CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 -# CONFIG_FMB_TIMER_PORT_ENABLED is not set -# CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD is not set -# end of Modbus configuration +# FreeRTOS +# # -# FreeRTOS +# Kernel # +# CONFIG_FREERTOS_SMP is not set # CONFIG_FREERTOS_UNICORE is not set -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y -CONFIG_FREERTOS_CORETIMER_0=y -# CONFIG_FREERTOS_CORETIMER_1 is not set -CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y -# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set -# CONFIG_FREERTOS_ASSERT_DISABLE is not set CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -# CONFIG_FREERTOS_LEGACY_HOOKS is not set +# CONFIG_FREERTOS_USE_IDLE_HOOK is not set +# CONFIG_FREERTOS_USE_TICK_HOOK is not set CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set +# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set +CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set +CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y +CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y +# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set +# end of Kernel + +# +# Port +# +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y +# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set +# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y +CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +# end of Port + +CONFIG_FREERTOS_PORT=y +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y -# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y +CONFIG_FREERTOS_NUMBER_OF_CORES=2 # end of FreeRTOS # @@ -825,9 +1504,10 @@ CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y # CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y # CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_HAL_ASSERTION_ENABLE is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 +# CONFIG_HAL_ASSERTION_SILENT is not set +CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=1 +CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y +CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y # end of Hardware Abstraction Layer (HAL) and Low Level (LL) # @@ -839,21 +1519,12 @@ CONFIG_HEAP_POISONING_DISABLED=y CONFIG_HEAP_TRACING_OFF=y # CONFIG_HEAP_TRACING_STANDALONE is not set # CONFIG_HEAP_TRACING_TOHOST is not set +# CONFIG_HEAP_USE_HOOKS is not set +# CONFIG_HEAP_TASK_TRACKING is not set # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set +# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set # end of Heap memory debugging -# -# jsmn -# -# CONFIG_JSMN_PARENT_LINKS is not set -# CONFIG_JSMN_STRICT is not set -# end of jsmn - -# -# libsodium -# -# end of libsodium - # # Log output # @@ -868,6 +1539,7 @@ CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set CONFIG_LOG_MAXIMUM_LEVEL=3 +# CONFIG_LOG_MASTER_LEVEL is not set CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set @@ -876,13 +1548,19 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # # LWIP # -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +CONFIG_LWIP_ENABLE=y +CONFIG_LWIP_LOCAL_HOSTNAME="Tidbyt" # CONFIG_LWIP_NETIF_API is not set +CONFIG_LWIP_TCPIP_TASK_PRIO=18 # CONFIG_LWIP_TCPIP_CORE_LOCKING is not set +# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y # CONFIG_LWIP_L2_TO_L3_COPY is not set # CONFIG_LWIP_IRAM_OPTIMIZATION is not set +# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set CONFIG_LWIP_TIMERS_ONDEMAND=y +CONFIG_LWIP_ND6=y +# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set CONFIG_LWIP_MAX_SOCKETS=10 # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set # CONFIG_LWIP_SO_LINGER is not set @@ -890,31 +1568,35 @@ CONFIG_LWIP_SO_REUSE=y CONFIG_LWIP_SO_REUSE_RXTOALL=y CONFIG_LWIP_SO_RCVBUF=y # CONFIG_LWIP_NETBUF_RECVINFO is not set +CONFIG_LWIP_IP_DEFAULT_TTL=64 CONFIG_LWIP_IP4_FRAG=y CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP4_REASSEMBLY is not set # CONFIG_LWIP_IP6_REASSEMBLY is not set +CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 # CONFIG_LWIP_IP_FORWARD is not set # CONFIG_LWIP_STATS is not set -# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set CONFIG_LWIP_ESP_GRATUITOUS_ARP=y CONFIG_LWIP_GARP_TMR_INTERVAL=60 +CONFIG_LWIP_ESP_MLDV6_REPORT=y +CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y +# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set # CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set +CONFIG_LWIP_DHCP_RESTORE_LAST_IP=y CONFIG_LWIP_DHCP_OPTIONS_LEN=68 +CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 +CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 # # DHCP server # -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +# CONFIG_LWIP_DHCPS is not set # end of DHCP server # CONFIG_LWIP_AUTOIP is not set +CONFIG_LWIP_IPV4=y CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 @@ -930,7 +1612,7 @@ CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 +CONFIG_LWIP_TCP_SYNMAXRTX=6 CONFIG_LWIP_TCP_MSS=1440 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 @@ -938,12 +1620,15 @@ CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y +CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 +CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=0 # CONFIG_LWIP_TCP_SACK_OUT is not set -# CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 # end of TCP @@ -992,8 +1677,18 @@ CONFIG_LWIP_MAX_RAW_PCBS=16 CONFIG_LWIP_SNTP_MAX_SERVERS=1 # CONFIG_LWIP_DHCP_GET_NTP_SRV is not set CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +CONFIG_LWIP_SNTP_STARTUP_DELAY=y +CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 # end of SNTP +# +# DNS +# +CONFIG_LWIP_DNS_MAX_SERVERS=3 +# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set +# end of DNS + +CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 CONFIG_LWIP_ESP_LWIP_ASSERT=y # @@ -1008,9 +1703,15 @@ CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y # CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set # CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y # CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set # CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y +# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set # end of Hooks # CONFIG_LWIP_DEBUG is not set @@ -1019,8 +1720,8 @@ CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y # # mbedTLS # -CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC is not set +# CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC is not set +CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y # CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set # CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y @@ -1030,13 +1731,14 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # CONFIG_MBEDTLS_DEBUG is not set # -# mbedTLS v2.28.x related +# mbedTLS v3.x related # +# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set # CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set # CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set # CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y -# end of mbedTLS v2.28.x related +# end of mbedTLS v3.x related # # Certificate Bundle @@ -1046,35 +1748,39 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -# CONFIG_MBEDTLS_CMAC_C is not set +CONFIG_MBEDTLS_CMAC_C=y CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y +# CONFIG_MBEDTLS_HARDWARE_MPI is not set CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set # CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_SHA512_C=y -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT is not set # CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +CONFIG_MBEDTLS_TLS_CLIENT_ONLY=y # CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y CONFIG_MBEDTLS_TLS_CLIENT=y CONFIG_MBEDTLS_TLS_ENABLED=y # # TLS Key Exchange Methods # -# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_PSK_MODES=y +# CONFIG_MBEDTLS_KEY_EXCHANGE_PSK is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK=y +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK=y CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y @@ -1083,16 +1789,11 @@ CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y # end of TLS Key Exchange Methods CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set -CONFIG_MBEDTLS_SSL_PROTO_TLS1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y # CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set CONFIG_MBEDTLS_SSL_ALPN=y CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_X509_CHECK_KEY_USAGE=y -CONFIG_MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE=y CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y # @@ -1101,9 +1802,6 @@ CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y CONFIG_MBEDTLS_AES_C=y # CONFIG_MBEDTLS_CAMELLIA_C is not set # CONFIG_MBEDTLS_DES_C is not set -CONFIG_MBEDTLS_RC4_DISABLED=y -# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set -# CONFIG_MBEDTLS_RC4_ENABLED is not set # CONFIG_MBEDTLS_BLOWFISH_C is not set # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y @@ -1118,11 +1816,12 @@ CONFIG_MBEDTLS_GCM_C=y # CONFIG_MBEDTLS_PEM_PARSE_C=y CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +# CONFIG_MBEDTLS_X509_CRL_PARSE_C is not set +# CONFIG_MBEDTLS_X509_CSR_PARSE_C is not set # end of Certificates CONFIG_MBEDTLS_ECP_C=y +# CONFIG_MBEDTLS_DHM_C is not set CONFIG_MBEDTLS_ECDH_C=y CONFIG_MBEDTLS_ECDSA_C=y # CONFIG_MBEDTLS_ECJPAKE_C is not set @@ -1139,43 +1838,29 @@ CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y CONFIG_MBEDTLS_ECP_NIST_OPTIM=y +CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y # CONFIG_MBEDTLS_POLY1305_C is not set # CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set -# CONFIG_MBEDTLS_SECURITY_RISKS is not set +CONFIG_MBEDTLS_ERROR_STRINGS=y # end of mbedTLS -# -# mDNS -# -CONFIG_MDNS_MAX_SERVICES=10 -CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_TASK_STACK_SIZE=4096 -# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_MDNS_TASK_AFFINITY_CPU0=y -# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set -CONFIG_MDNS_TASK_AFFINITY=0x0 -CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 -# CONFIG_MDNS_STRICT_MODE is not set -CONFIG_MDNS_TIMER_PERIOD_MS=100 -# CONFIG_MDNS_NETWORKING_SOCKET is not set -CONFIG_MDNS_MULTIPLE_INSTANCE=y -# end of mDNS - # # ESP-MQTT Configurations # CONFIG_MQTT_PROTOCOL_311=y +# CONFIG_MQTT_PROTOCOL_5 is not set CONFIG_MQTT_TRANSPORT_SSL=y CONFIG_MQTT_TRANSPORT_WEBSOCKET=y CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y # CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set +CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED=y # CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set # CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set +CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED=y +# CONFIG_MQTT_USE_CORE_0 is not set +CONFIG_MQTT_USE_CORE_1=y # CONFIG_MQTT_CUSTOM_OUTBOX is not set # end of ESP-MQTT Configurations @@ -1189,29 +1874,56 @@ CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y # CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y # CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y +# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set # end of Newlib +CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND=y + # # NVS # # CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set # end of NVS # -# OpenSSL +# OpenThread # -# CONFIG_OPENSSL_DEBUG is not set -CONFIG_OPENSSL_ERROR_STACK=y -# CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set -CONFIG_OPENSSL_ASSERT_EXIT=y -# end of OpenSSL +# CONFIG_OPENTHREAD_ENABLED is not set # -# OpenThread +# Thread Operational Dataset # -# CONFIG_OPENTHREAD_ENABLED is not set +CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" +CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" +CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 +CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 +CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" +CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" +CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" +# end of Thread Operational Dataset + +CONFIG_OPENTHREAD_XTAL_ACCURACY=130 +# CONFIG_OPENTHREAD_SPINEL_ONLY is not set +CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y + +# +# Thread Address Query Config +# +# end of Thread Address Query Config # end of OpenThread +# +# Protocomm +# +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y +# end of Protocomm + # # PThreads # @@ -1225,6 +1937,36 @@ CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads +# +# MMU Config +# +CONFIG_MMU_PAGE_SIZE_64KB=y +CONFIG_MMU_PAGE_MODE="64KB" +CONFIG_MMU_PAGE_SIZE=0x10000 +# end of MMU Config + +# +# Main Flash configuration +# + +# +# SPI Flash behavior when brownout +# +CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y +CONFIG_SPI_FLASH_BROWNOUT_RESET=y +# end of SPI Flash behavior when brownout + +# +# Optional and Experimental Features (READ DOCS FIRST) +# + +# +# Features here require specific hardware (READ DOCS FIRST!) +# +CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 +# end of Optional and Experimental Features (READ DOCS FIRST) +# end of Main Flash configuration + # # SPI Flash driver # @@ -1234,7 +1976,6 @@ CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set # CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y @@ -1248,6 +1989,11 @@ CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 # # Auto-detect flash chips # +CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y @@ -1304,9 +2050,21 @@ CONFIG_SPIFFS_USE_MTIME=y # CONFIG_WS_TRANSPORT=y CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set # end of Websocket # end of TCP Transport +# +# Ultra Low Power (ULP) Co-processor +# +# CONFIG_ULP_COPROC_ENABLED is not set + +# +# ULP Debugging Options +# +# end of ULP Debugging Options +# end of Ultra Low Power (ULP) Co-processor + # # Unity unit testing library # @@ -1326,7 +2084,9 @@ CONFIG_VFS_SUPPORT_IO=y CONFIG_VFS_SUPPORT_DIR=y CONFIG_VFS_SUPPORT_SELECT=y CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y +# CONFIG_VFS_SELECT_IN_RAM is not set CONFIG_VFS_SUPPORT_TERMIOS=y +CONFIG_VFS_MAX_COUNT=8 # # Host File System I/O (Semihosting) @@ -1348,32 +2108,30 @@ CONFIG_WL_SECTOR_SIZE=4096 # CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 +# CONFIG_WIFI_PROV_BLE_BONDING is not set # CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION is not set +# CONFIG_WIFI_PROV_KEEP_BLE_ON_AFTER_PROV is not set +CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y +# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set # end of Wi-Fi Provisioning Manager # -# Supplicant +# Audio playback # -CONFIG_WPA_MBEDTLS_CRYPTO=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# end of Supplicant +CONFIG_AUDIO_PLAYER_ENABLE_MP3=y +CONFIG_AUDIO_PLAYER_ENABLE_WAV=y +CONFIG_AUDIO_PLAYER_LOG_LEVEL=0 +# end of Audio playback # end of Component config -# -# Compatibility options -# -# CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set -# end of Compatibility options +# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set # Deprecated options for backward compatibility -CONFIG_TOOLPREFIX="xtensa-esp32-elf-" +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +# CONFIG_NO_BLOBS is not set +# CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set @@ -1381,82 +2139,286 @@ CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set CONFIG_LOG_BOOTLOADER_LEVEL=3 -# CONFIG_APP_ROLLBACK_ENABLE is not set +CONFIG_APP_ROLLBACK_ENABLE=y +# CONFIG_APP_ANTI_ROLLBACK is not set # CONFIG_FLASH_ENCRYPTION_ENABLED is not set # CONFIG_FLASHMODE_QIO is not set # CONFIG_FLASHMODE_QOUT is not set CONFIG_FLASHMODE_DIO=y # CONFIG_FLASHMODE_DOUT is not set -# CONFIG_MONITOR_BAUD_9600B is not set -# CONFIG_MONITOR_BAUD_57600B is not set -CONFIG_MONITOR_BAUD_115200B=y -# CONFIG_MONITOR_BAUD_230400B is not set -# CONFIG_MONITOR_BAUD_921600B is not set -# CONFIG_MONITOR_BAUD_2MB is not set -# CONFIG_MONITOR_BAUD_OTHER is not set -CONFIG_MONITOR_BAUD_OTHER_VAL=115200 CONFIG_MONITOR_BAUD=115200 -CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set +# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED is not set +CONFIG_OPTIMIZATION_ASSERTIONS_SILENT=y # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=1 # CONFIG_CXX_EXCEPTIONS is not set CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_NORM is not set # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_DISABLE_GCC8_WARNINGS is not set # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +CONFIG_BLUEDROID_ENABLED=y +# CONFIG_NIMBLE_ENABLED is not set +CONFIG_BTC_TASK_STACK_SIZE=3072 +CONFIG_BLUEDROID_PINNED_TO_CORE_0=y +# CONFIG_BLUEDROID_PINNED_TO_CORE_1 is not set +CONFIG_BLUEDROID_PINNED_TO_CORE=0 +CONFIG_BTU_TASK_STACK_SIZE=4096 +# CONFIG_BLUEDROID_MEM_DEBUG is not set +# CONFIG_CLASSIC_BT_ENABLED is not set +CONFIG_GATTS_ENABLE=y +# CONFIG_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set +CONFIG_GATTS_SEND_SERVICE_CHANGE_AUTO=y +CONFIG_GATTS_SEND_SERVICE_CHANGE_MODE=0 +# CONFIG_GATTC_ENABLE is not set +# CONFIG_BLE_SMP_ENABLE is not set +# CONFIG_HCI_TRACE_LEVEL_NONE is not set +# CONFIG_HCI_TRACE_LEVEL_ERROR is not set +CONFIG_HCI_TRACE_LEVEL_WARNING=y +# CONFIG_HCI_TRACE_LEVEL_API is not set +# CONFIG_HCI_TRACE_LEVEL_EVENT is not set +# CONFIG_HCI_TRACE_LEVEL_DEBUG is not set +# CONFIG_HCI_TRACE_LEVEL_VERBOSE is not set +CONFIG_HCI_INITIAL_TRACE_LEVEL=2 +# CONFIG_BTM_TRACE_LEVEL_NONE is not set +# CONFIG_BTM_TRACE_LEVEL_ERROR is not set +CONFIG_BTM_TRACE_LEVEL_WARNING=y +# CONFIG_BTM_TRACE_LEVEL_API is not set +# CONFIG_BTM_TRACE_LEVEL_EVENT is not set +# CONFIG_BTM_TRACE_LEVEL_DEBUG is not set +# CONFIG_BTM_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTM_INITIAL_TRACE_LEVEL=2 +# CONFIG_L2CAP_TRACE_LEVEL_NONE is not set +# CONFIG_L2CAP_TRACE_LEVEL_ERROR is not set +CONFIG_L2CAP_TRACE_LEVEL_WARNING=y +# CONFIG_L2CAP_TRACE_LEVEL_API is not set +# CONFIG_L2CAP_TRACE_LEVEL_EVENT is not set +# CONFIG_L2CAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_L2CAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_L2CAP_INITIAL_TRACE_LEVEL=2 +# CONFIG_RFCOMM_TRACE_LEVEL_NONE is not set +# CONFIG_RFCOMM_TRACE_LEVEL_ERROR is not set +CONFIG_RFCOMM_TRACE_LEVEL_WARNING=y +# CONFIG_RFCOMM_TRACE_LEVEL_API is not set +# CONFIG_RFCOMM_TRACE_LEVEL_EVENT is not set +# CONFIG_RFCOMM_TRACE_LEVEL_DEBUG is not set +# CONFIG_RFCOMM_TRACE_LEVEL_VERBOSE is not set +CONFIG_RFCOMM_INITIAL_TRACE_LEVEL=2 +# CONFIG_SDP_TRACE_LEVEL_NONE is not set +# CONFIG_SDP_TRACE_LEVEL_ERROR is not set +CONFIG_SDP_TRACE_LEVEL_WARNING=y +# CONFIG_SDP_TRACE_LEVEL_API is not set +# CONFIG_SDP_TRACE_LEVEL_EVENT is not set +# CONFIG_SDP_TRACE_LEVEL_DEBUG is not set +# CONFIG_SDP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTH_LOG_SDP_INITIAL_TRACE_LEVEL=2 +# CONFIG_GAP_TRACE_LEVEL_NONE is not set +# CONFIG_GAP_TRACE_LEVEL_ERROR is not set +CONFIG_GAP_TRACE_LEVEL_WARNING=y +# CONFIG_GAP_TRACE_LEVEL_API is not set +# CONFIG_GAP_TRACE_LEVEL_EVENT is not set +# CONFIG_GAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_GAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_GAP_INITIAL_TRACE_LEVEL=2 +CONFIG_BNEP_INITIAL_TRACE_LEVEL=2 +# CONFIG_PAN_TRACE_LEVEL_NONE is not set +# CONFIG_PAN_TRACE_LEVEL_ERROR is not set +CONFIG_PAN_TRACE_LEVEL_WARNING=y +# CONFIG_PAN_TRACE_LEVEL_API is not set +# CONFIG_PAN_TRACE_LEVEL_EVENT is not set +# CONFIG_PAN_TRACE_LEVEL_DEBUG is not set +# CONFIG_PAN_TRACE_LEVEL_VERBOSE is not set +CONFIG_PAN_INITIAL_TRACE_LEVEL=2 +# CONFIG_A2D_TRACE_LEVEL_NONE is not set +# CONFIG_A2D_TRACE_LEVEL_ERROR is not set +CONFIG_A2D_TRACE_LEVEL_WARNING=y +# CONFIG_A2D_TRACE_LEVEL_API is not set +# CONFIG_A2D_TRACE_LEVEL_EVENT is not set +# CONFIG_A2D_TRACE_LEVEL_DEBUG is not set +# CONFIG_A2D_TRACE_LEVEL_VERBOSE is not set +CONFIG_A2D_INITIAL_TRACE_LEVEL=2 +# CONFIG_AVDT_TRACE_LEVEL_NONE is not set +# CONFIG_AVDT_TRACE_LEVEL_ERROR is not set +CONFIG_AVDT_TRACE_LEVEL_WARNING=y +# CONFIG_AVDT_TRACE_LEVEL_API is not set +# CONFIG_AVDT_TRACE_LEVEL_EVENT is not set +# CONFIG_AVDT_TRACE_LEVEL_DEBUG is not set +# CONFIG_AVDT_TRACE_LEVEL_VERBOSE is not set +CONFIG_AVDT_INITIAL_TRACE_LEVEL=2 +# CONFIG_AVCT_TRACE_LEVEL_NONE is not set +# CONFIG_AVCT_TRACE_LEVEL_ERROR is not set +CONFIG_AVCT_TRACE_LEVEL_WARNING=y +# CONFIG_AVCT_TRACE_LEVEL_API is not set +# CONFIG_AVCT_TRACE_LEVEL_EVENT is not set +# CONFIG_AVCT_TRACE_LEVEL_DEBUG is not set +# CONFIG_AVCT_TRACE_LEVEL_VERBOSE is not set +CONFIG_AVCT_INITIAL_TRACE_LEVEL=2 +# CONFIG_AVRC_TRACE_LEVEL_NONE is not set +# CONFIG_AVRC_TRACE_LEVEL_ERROR is not set +CONFIG_AVRC_TRACE_LEVEL_WARNING=y +# CONFIG_AVRC_TRACE_LEVEL_API is not set +# CONFIG_AVRC_TRACE_LEVEL_EVENT is not set +# CONFIG_AVRC_TRACE_LEVEL_DEBUG is not set +# CONFIG_AVRC_TRACE_LEVEL_VERBOSE is not set +CONFIG_AVRC_INITIAL_TRACE_LEVEL=2 +# CONFIG_MCA_TRACE_LEVEL_NONE is not set +# CONFIG_MCA_TRACE_LEVEL_ERROR is not set +CONFIG_MCA_TRACE_LEVEL_WARNING=y +# CONFIG_MCA_TRACE_LEVEL_API is not set +# CONFIG_MCA_TRACE_LEVEL_EVENT is not set +# CONFIG_MCA_TRACE_LEVEL_DEBUG is not set +# CONFIG_MCA_TRACE_LEVEL_VERBOSE is not set +CONFIG_MCA_INITIAL_TRACE_LEVEL=2 +# CONFIG_HID_TRACE_LEVEL_NONE is not set +# CONFIG_HID_TRACE_LEVEL_ERROR is not set +CONFIG_HID_TRACE_LEVEL_WARNING=y +# CONFIG_HID_TRACE_LEVEL_API is not set +# CONFIG_HID_TRACE_LEVEL_EVENT is not set +# CONFIG_HID_TRACE_LEVEL_DEBUG is not set +# CONFIG_HID_TRACE_LEVEL_VERBOSE is not set +CONFIG_HID_INITIAL_TRACE_LEVEL=2 +# CONFIG_APPL_TRACE_LEVEL_NONE is not set +# CONFIG_APPL_TRACE_LEVEL_ERROR is not set +CONFIG_APPL_TRACE_LEVEL_WARNING=y +# CONFIG_APPL_TRACE_LEVEL_API is not set +# CONFIG_APPL_TRACE_LEVEL_EVENT is not set +# CONFIG_APPL_TRACE_LEVEL_DEBUG is not set +# CONFIG_APPL_TRACE_LEVEL_VERBOSE is not set +CONFIG_APPL_INITIAL_TRACE_LEVEL=2 +# CONFIG_GATT_TRACE_LEVEL_NONE is not set +# CONFIG_GATT_TRACE_LEVEL_ERROR is not set +CONFIG_GATT_TRACE_LEVEL_WARNING=y +# CONFIG_GATT_TRACE_LEVEL_API is not set +# CONFIG_GATT_TRACE_LEVEL_EVENT is not set +# CONFIG_GATT_TRACE_LEVEL_DEBUG is not set +# CONFIG_GATT_TRACE_LEVEL_VERBOSE is not set +CONFIG_GATT_INITIAL_TRACE_LEVEL=2 +# CONFIG_SMP_TRACE_LEVEL_NONE is not set +# CONFIG_SMP_TRACE_LEVEL_ERROR is not set +CONFIG_SMP_TRACE_LEVEL_WARNING=y +# CONFIG_SMP_TRACE_LEVEL_API is not set +# CONFIG_SMP_TRACE_LEVEL_EVENT is not set +# CONFIG_SMP_TRACE_LEVEL_DEBUG is not set +# CONFIG_SMP_TRACE_LEVEL_VERBOSE is not set +CONFIG_SMP_INITIAL_TRACE_LEVEL=2 +# CONFIG_BTIF_TRACE_LEVEL_NONE is not set +# CONFIG_BTIF_TRACE_LEVEL_ERROR is not set +CONFIG_BTIF_TRACE_LEVEL_WARNING=y +# CONFIG_BTIF_TRACE_LEVEL_API is not set +# CONFIG_BTIF_TRACE_LEVEL_EVENT is not set +# CONFIG_BTIF_TRACE_LEVEL_DEBUG is not set +# CONFIG_BTIF_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTIF_INITIAL_TRACE_LEVEL=2 +# CONFIG_BTC_TRACE_LEVEL_NONE is not set +# CONFIG_BTC_TRACE_LEVEL_ERROR is not set +CONFIG_BTC_TRACE_LEVEL_WARNING=y +# CONFIG_BTC_TRACE_LEVEL_API is not set +# CONFIG_BTC_TRACE_LEVEL_EVENT is not set +# CONFIG_BTC_TRACE_LEVEL_DEBUG is not set +# CONFIG_BTC_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTC_INITIAL_TRACE_LEVEL=2 +# CONFIG_OSI_TRACE_LEVEL_NONE is not set +# CONFIG_OSI_TRACE_LEVEL_ERROR is not set +CONFIG_OSI_TRACE_LEVEL_WARNING=y +# CONFIG_OSI_TRACE_LEVEL_API is not set +# CONFIG_OSI_TRACE_LEVEL_EVENT is not set +# CONFIG_OSI_TRACE_LEVEL_DEBUG is not set +# CONFIG_OSI_TRACE_LEVEL_VERBOSE is not set +CONFIG_OSI_INITIAL_TRACE_LEVEL=2 +# CONFIG_BLUFI_TRACE_LEVEL_NONE is not set +# CONFIG_BLUFI_TRACE_LEVEL_ERROR is not set +CONFIG_BLUFI_TRACE_LEVEL_WARNING=y +# CONFIG_BLUFI_TRACE_LEVEL_API is not set +# CONFIG_BLUFI_TRACE_LEVEL_EVENT is not set +# CONFIG_BLUFI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BLUFI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2 +# CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK is not set +# CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY is not set +CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30 +CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y +# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set +# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3 +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 +CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y +# CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set +CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y +CONFIG_BLE_SCAN_DUPLICATE=y +CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y +# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set +# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set +CONFIG_SCAN_DUPLICATE_TYPE=0 +CONFIG_DUPLICATE_SCAN_CACHE_SIZE=200 +# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set +CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y +CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y +CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 +CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_ADC2_DISABLE_DAC=y -CONFIG_SPIRAM_SUPPORT=y -# CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST is not set -CONFIG_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_ULP_COPROC_ENABLED is not set -CONFIG_ULP_COPROC_RESERVE_MEM=0 -CONFIG_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=0 -CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_NO_BLOBS is not set -# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_SW_COEXIST_ENABLE is not set +# CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE is not set +# CONFIG_ESP_WIFI_SW_COEXIST_ENABLE is not set +# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +CONFIG_GDBSTUB_SUPPORT_TASKS=y +CONFIG_GDBSTUB_MAX_TASKS=32 +CONFIG_OTA_ALLOW_HTTP=y # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 -# CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND is not set -CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +# CONFIG_ESP32_RTC_CLK_SRC_INT_RC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256=y +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +# CONFIG_ESP32_XTAL_FREQ_26 is not set +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 +CONFIG_REDUCE_PHY_TX_POWER=y CONFIG_ESP32_REDUCE_PHY_TX_POWER=y -# CONFIG_ESP32S2_PANIC_PRINT_HALT is not set -CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y -# CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP32S2_PANIC_GDBSTUB is not set +CONFIG_SPIRAM_SUPPORT=y +CONFIG_ESP32_SPIRAM_SUPPORT=y +CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB is not set CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_MAIN_TASK_STACK_SIZE=3584 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set # CONFIG_ESP_CONSOLE_UART_NONE is not set CONFIG_CONSOLE_UART=y CONFIG_CONSOLE_UART_NUM=0 @@ -1465,46 +2427,87 @@ CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 CONFIG_INT_WDT_CHECK_CPU1=y CONFIG_TASK_WDT=y +CONFIG_ESP_TASK_WDT=y # CONFIG_TASK_WDT_PANIC is not set CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_BROWNOUT_DET=y +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +CONFIG_IPC_TASK_STACK_SIZE=1024 CONFIG_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP32_WIFI_ENABLED=y +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +# CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED is not set +# CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED is not set +# CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED is not set +# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +# CONFIG_ESP32_WIFI_IRAM_OPT is not set +# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set +CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y +CONFIG_WPA_MBEDTLS_CRYPTO=y +CONFIG_WPA_MBEDTLS_TLS_CLIENT=y +# CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# CONFIG_WPA_11R_SUPPORT is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 -CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 -CONFIG_MB_QUEUE_LENGTH=20 -CONFIG_MB_SERIAL_TASK_STACK_SIZE=4096 -CONFIG_MB_SERIAL_BUF_SIZE=256 -CONFIG_MB_SERIAL_TASK_PRIO=10 -CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT=y -CONFIG_MB_CONTROLLER_SLAVE_ID=0x00112233 -CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 -CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 -CONFIG_MB_CONTROLLER_STACK_SIZE=4096 -CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 -# CONFIG_MB_TIMER_PORT_ENABLED is not set -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set CONFIG_TIMER_TASK_PRIORITY=1 CONFIG_TIMER_TASK_STACK_DEPTH=2048 CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set +# CONFIG_HAL_ASSERTION_SILIENT is not set # CONFIG_L2_TO_L3_COPY is not set -# CONFIG_USE_ONLY_LWIP_SELECT is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 CONFIG_TCPIP_RECVMBOX_SIZE=32 CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 +CONFIG_TCP_SYNMAXRTX=6 CONFIG_TCP_MSS=1440 CONFIG_TCP_MSL=60000 CONFIG_TCP_SND_BUF_DEFAULT=5744 CONFIG_TCP_WND_DEFAULT=5744 CONFIG_TCP_RECVMBOX_SIZE=6 CONFIG_TCP_QUEUE_OOSEQ=y -# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set @@ -1515,6 +2518,12 @@ CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_PPP_SUPPORT is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 @@ -1526,6 +2535,7 @@ CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set +# CONFIG_ESP32_ULP_COPROC_ENABLED is not set CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_SUPPORT_TERMIOS=y CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 diff --git a/sdkconfig.gen2 b/sdkconfig.gen2 deleted file mode 100644 index cb65490..0000000 --- a/sdkconfig.gen2 +++ /dev/null @@ -1,2398 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.1.2 Project Configuration -# -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" -CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" -CONFIG_SOC_DPORT_WORKAROUND="Not determined" -CONFIG_SOC_CAPS_ECO_VER_MAX=301 -CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_DAC_SUPPORTED=y -CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_MCPWM_SUPPORTED=y -CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_SDMMC_HOST_SUPPORTED=y -CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_PCNT_SUPPORTED=y -CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y -CONFIG_SOC_EMAC_SUPPORTED=y -CONFIG_SOC_ULP_SUPPORTED=y -CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y -CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y -CONFIG_SOC_RTC_MEM_SUPPORTED=y -CONFIG_SOC_I2S_SUPPORTED=y -CONFIG_SOC_RMT_SUPPORTED=y -CONFIG_SOC_SDM_SUPPORTED=y -CONFIG_SOC_GPSPI_SUPPORTED=y -CONFIG_SOC_LEDC_SUPPORTED=y -CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SUPPORT_COEXISTENCE=y -CONFIG_SOC_AES_SUPPORTED=y -CONFIG_SOC_MPI_SUPPORTED=y -CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_FLASH_ENC_SUPPORTED=y -CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y -CONFIG_SOC_BOD_SUPPORTED=y -CONFIG_SOC_ULP_FSM_SUPPORTED=y -CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 -CONFIG_SOC_XTAL_SUPPORT_26M=y -CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y -CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_DMA_SUPPORTED=y -CONFIG_SOC_ADC_PERIPH_NUM=2 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 -CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 -CONFIG_SOC_ADC_PATT_LEN_MAX=16 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 -CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 -CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 -CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_IDCACHE_PER_CORE=y -CONFIG_SOC_CPU_CORES_NUM=2 -CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FPU=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINT_SIZE=64 -CONFIG_SOC_DAC_CHAN_NUM=2 -CONFIG_SOC_DAC_RESOLUTION=8 -CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y -CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=40 -CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA -CONFIG_SOC_I2C_NUM=2 -CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=16 -CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_APB=y -CONFIG_SOC_I2S_NUM=2 -CONFIG_SOC_I2S_HW_VERSION_1=y -CONFIG_SOC_I2S_SUPPORTS_APLL=y -CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PDM=y -CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 -CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y -CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 -CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y -CONFIG_SOC_I2S_SUPPORTS_ADC=y -CONFIG_SOC_I2S_SUPPORTS_DAC=y -CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y -CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y -CONFIG_SOC_I2S_LCD_I80_VARIANT=y -CONFIG_SOC_LCD_I80_SUPPORTED=y -CONFIG_SOC_LCD_I80_BUSES=2 -CONFIG_SOC_LCD_I80_BUS_WIDTH=24 -CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y -CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y -CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y -CONFIG_SOC_LEDC_CHANNEL_NUM=8 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 -CONFIG_SOC_MCPWM_GROUPS=2 -CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 -CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 -CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 -CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y -CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 -CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 -CONFIG_SOC_MMU_PERIPH_NUM=2 -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 -CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 -CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 -CONFIG_SOC_PCNT_GROUPS=1 -CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 -CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 -CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 -CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 -CONFIG_SOC_RMT_SUPPORT_REF_TICK=y -CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y -CONFIG_SOC_RTCIO_PIN_COUNT=18 -CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y -CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y -CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y -CONFIG_SOC_SDM_GROUPS=1 -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 -CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y -CONFIG_SOC_SPI_AS_CS_SUPPORTED=y -CONFIG_SOC_SPI_PERIPH_NUM=3 -CONFIG_SOC_SPI_DMA_CHAN_NUM=2 -CONFIG_SOC_SPI_MAX_CS_NUM=3 -CONFIG_SOC_SPI_SUPPORT_CLK_APB=y -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 -CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 -CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TOUCH_VERSION_1=y -CONFIG_SOC_TOUCH_SENSOR_NUM=10 -CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF -CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y -CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y -CONFIG_SOC_UART_NUM=3 -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_REF_TICK=y -CONFIG_SOC_UART_FIFO_LEN=128 -CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_SPIRAM_SUPPORTED=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y -CONFIG_SOC_SHA_SUPPORT_SHA384=y -CONFIG_SOC_SHA_SUPPORT_SHA512=y -CONFIG_SOC_RSA_MAX_BIT_LEN=4096 -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_192=y -CONFIG_SOC_AES_SUPPORT_AES_256=y -CONFIG_SOC_SECURE_BOOT_V1=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 -CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y -CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y -CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_MODEM_PD=y -CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y -CONFIG_SOC_CLK_APLL_SUPPORTED=y -CONFIG_SOC_APLL_MULTIPLIER_OUT_MIN_HZ=350000000 -CONFIG_SOC_APLL_MULTIPLIER_OUT_MAX_HZ=500000000 -CONFIG_SOC_APLL_MIN_HZ=5303031 -CONFIG_SOC_APLL_MAX_HZ=125000000 -CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y -CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y -CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_SDMMC_USE_IOMUX=y -CONFIG_SOC_SDMMC_NUM_SLOTS=2 -CONFIG_SOC_WIFI_WAPI_SUPPORT=y -CONFIG_SOC_WIFI_CSI_SUPPORT=y -CONFIG_SOC_WIFI_MESH_SUPPORT=y -CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_NAN_SUPPORT=y -CONFIG_SOC_BLE_SUPPORTED=y -CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BT_CLASSIC_SUPPORTED=y -CONFIG_SOC_BLUFI_SUPPORTED=y -CONFIG_SOC_ULP_HAS_ADC=y -CONFIG_SOC_PHY_COMBO_MODULE=y -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TARGET_ARCH_XTENSA=y -CONFIG_IDF_TARGET_ARCH="xtensa" -CONFIG_IDF_TARGET="esp32" -CONFIG_IDF_TARGET_ESP32=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# CONFIG_APP_REPRODUCIBLE_BUILD is not set -# CONFIG_APP_NO_BLOBS is not set -# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set -# end of Build type - -# -# Bootloader config -# -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=3 -# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set -CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y -# CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y -# end of Bootloader config - -# -# Security features -# -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V1_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -# end of Security features - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 -# end of Application manager - -CONFIG_ESP_ROM_HAS_CRC_LE=y -CONFIG_ESP_ROM_HAS_CRC_BE=y -CONFIG_ESP_ROM_HAS_MZ_CRC32=y -CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y -CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y -CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y - -# -# Serial flasher config -# -# CONFIG_ESPTOOLPY_NO_STUB is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE_DIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y -CONFIG_ESPTOOLPY_FLASHMODE="dio" -# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set -CONFIG_ESPTOOLPY_FLASHFREQ_40M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="40m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="2MB" -# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -CONFIG_PARTITION_TABLE_SINGLE_APP=y -# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -# CONFIG_PARTITION_TABLE_CUSTOM is not set -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# Compiler options -# -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -CONFIG_COMPILER_OPTIMIZATION_PERF=y -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=1 -# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set -CONFIG_COMPILER_HIDE_PATHS_MACROS=y -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_UART2 is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -CONFIG_BT_ENABLED=y -CONFIG_BT_BLUEDROID_ENABLED=y -# CONFIG_BT_NIMBLE_ENABLED is not set -# CONFIG_BT_CONTROLLER_ONLY is not set -CONFIG_BT_CONTROLLER_ENABLED=y -# CONFIG_BT_CONTROLLER_DISABLED is not set - -# -# Bluedroid Options -# -CONFIG_BT_BTC_TASK_STACK_SIZE=3072 -CONFIG_BT_BLUEDROID_PINNED_TO_CORE_0=y -# CONFIG_BT_BLUEDROID_PINNED_TO_CORE_1 is not set -CONFIG_BT_BLUEDROID_PINNED_TO_CORE=0 -CONFIG_BT_BTU_TASK_STACK_SIZE=4096 -# CONFIG_BT_BLUEDROID_MEM_DEBUG is not set -# CONFIG_BT_CLASSIC_ENABLED is not set -CONFIG_BT_BLE_ENABLED=y -CONFIG_BT_GATTS_ENABLE=y -# CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set -# CONFIG_BT_BLE_BLUFI_ENABLE is not set -CONFIG_BT_GATT_MAX_SR_PROFILES=8 -CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100 -# CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set -CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_AUTO=y -CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MODE=0 -# CONFIG_BT_GATTS_ROBUST_CACHING_ENABLED is not set -# CONFIG_BT_GATTS_DEVICE_NAME_WRITABLE is not set -# CONFIG_BT_GATTS_APPEARANCE_WRITABLE is not set -# CONFIG_BT_GATTC_ENABLE is not set -# CONFIG_BT_BLE_SMP_ENABLE is not set -# CONFIG_BT_STACK_NO_LOG is not set - -# -# BT DEBUG LOG LEVEL -# -# CONFIG_BT_LOG_HCI_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_HCI_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_HCI_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_HCI_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_HCI_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_HCI_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_HCI_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_HCI_TRACE_LEVEL=2 -# CONFIG_BT_LOG_BTM_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_BTM_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_BTM_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_BTM_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_BTM_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_BTM_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_BTM_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_BTM_TRACE_LEVEL=2 -# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_L2CAP_TRACE_LEVEL=2 -# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL=2 -# CONFIG_BT_LOG_SDP_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_SDP_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_SDP_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_SDP_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_SDP_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_SDP_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_SDP_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_SDP_TRACE_LEVEL=2 -# CONFIG_BT_LOG_GAP_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_GAP_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_GAP_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_GAP_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_GAP_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_GAP_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_GAP_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_GAP_TRACE_LEVEL=2 -# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_BNEP_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_BNEP_TRACE_LEVEL=2 -# CONFIG_BT_LOG_PAN_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_PAN_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_PAN_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_PAN_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_PAN_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_PAN_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_PAN_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_PAN_TRACE_LEVEL=2 -# CONFIG_BT_LOG_A2D_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_A2D_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_A2D_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_A2D_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_A2D_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_A2D_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_A2D_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_A2D_TRACE_LEVEL=2 -# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_AVDT_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_AVDT_TRACE_LEVEL=2 -# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_AVCT_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_AVCT_TRACE_LEVEL=2 -# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_AVRC_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_AVRC_TRACE_LEVEL=2 -# CONFIG_BT_LOG_MCA_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_MCA_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_MCA_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_MCA_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_MCA_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_MCA_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_MCA_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_MCA_TRACE_LEVEL=2 -# CONFIG_BT_LOG_HID_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_HID_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_HID_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_HID_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_HID_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_HID_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_HID_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_HID_TRACE_LEVEL=2 -# CONFIG_BT_LOG_APPL_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_APPL_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_APPL_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_APPL_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_APPL_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_APPL_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_APPL_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_APPL_TRACE_LEVEL=2 -# CONFIG_BT_LOG_GATT_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_GATT_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_GATT_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_GATT_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_GATT_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_GATT_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_GATT_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_GATT_TRACE_LEVEL=2 -# CONFIG_BT_LOG_SMP_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_SMP_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_SMP_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_SMP_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_SMP_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_SMP_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_SMP_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_SMP_TRACE_LEVEL=2 -# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_BTIF_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_BTIF_TRACE_LEVEL=2 -# CONFIG_BT_LOG_BTC_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_BTC_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_BTC_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_BTC_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_BTC_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_BTC_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_BTC_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_BTC_TRACE_LEVEL=2 -# CONFIG_BT_LOG_OSI_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_OSI_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_OSI_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_OSI_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_OSI_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_OSI_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_OSI_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_OSI_TRACE_LEVEL=2 -# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_NONE is not set -# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_ERROR is not set -CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_WARNING=y -# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_API is not set -# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_EVENT is not set -# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_DEBUG is not set -# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_VERBOSE is not set -CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2 -# end of BT DEBUG LOG LEVEL - -CONFIG_BT_ACL_CONNECTIONS=4 -CONFIG_BT_MULTI_CONNECTION_ENBALE=y -CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y -CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y -# CONFIG_BT_BLE_HOST_QUEUE_CONG_CHECK is not set -# CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set -CONFIG_BT_BLE_ESTAB_LINK_CONN_TOUT=30 -CONFIG_BT_MAX_DEVICE_NAME_LEN=32 -# CONFIG_BT_BLE_RPA_SUPPORTED is not set -CONFIG_BT_BLE_RPA_TIMEOUT=900 -# CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL is not set -# end of Bluedroid Options - -# -# Controller Options -# -CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y -# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set -# CONFIG_BTDM_CTRL_MODE_BTDM is not set -CONFIG_BTDM_CTRL_BLE_MAX_CONN=3 -CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 -CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 -CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 -CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3 -CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 -CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 -CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y -# CONFIG_BTDM_CTRL_PINNED_TO_CORE_1 is not set -CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 -CONFIG_BTDM_CTRL_HCI_MODE_VHCI=y -# CONFIG_BTDM_CTRL_HCI_MODE_UART_H4 is not set - -# -# MODEM SLEEP Options -# -CONFIG_BTDM_CTRL_MODEM_SLEEP=y -CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y -# CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_EVED is not set -CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y -# end of MODEM SLEEP Options - -CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y -CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 -CONFIG_BTDM_BLE_SCAN_DUPL=y -CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y -# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set -# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set -CONFIG_BTDM_SCAN_DUPL_TYPE=0 -CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=200 -CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD=0 -# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set -CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y -CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y -CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 -CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 -CONFIG_BTDM_RESERVE_DRAM=0xdb5c -CONFIG_BTDM_CTRL_HLI=y -# end of Controller Options -# end of Bluetooth - -# CONFIG_BLE_MESH is not set - -# -# Driver Configurations -# - -# -# Legacy ADC Configuration -# -CONFIG_ADC_DISABLE_DAC=y -# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set - -# -# Legacy ADC Calibration Configuration -# -CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y -CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CAL_LUT_ENABLE=y -# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy ADC Calibration Configuration -# end of Legacy ADC Configuration - -# -# SPI Configuration -# -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI Configuration - -# -# TWAI Configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -# CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set -# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set -# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set -# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set -# CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM is not set -# end of TWAI Configuration - -# -# UART Configuration -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of UART Configuration - -# -# GPIO Configuration -# -# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of GPIO Configuration - -# -# Sigma Delta Modulator Configuration -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of Sigma Delta Modulator Configuration - -# -# GPTimer Configuration -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of GPTimer Configuration - -# -# PCNT Configuration -# -# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_PCNT_ISR_IRAM_SAFE is not set -# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set -# end of PCNT Configuration - -# -# RMT Configuration -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of RMT Configuration - -# -# MCPWM Configuration -# -# CONFIG_MCPWM_ISR_IRAM_SAFE is not set -# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set -# end of MCPWM Configuration - -# -# I2S Configuration -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of I2S Configuration - -# -# DAC Configuration -# -# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set -# CONFIG_DAC_ISR_IRAM_SAFE is not set -# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_DAC_ENABLE_DEBUG_LOG is not set -CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y -# end of DAC Configuration -# end of Driver Configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set -CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set -CONFIG_EFUSE_MAX_BLK_LEN=192 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set - -# -# ADC Calibration Configurations -# -CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y -CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CALI_LUT_ENABLE=y -# end of ADC Calibration Configurations - -CONFIG_ADC_DISABLE_DAC_OUTPUT=y -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -# CONFIG_ESP_COEX_SW_COEXIST_ENABLE is not set -# end of Wireless Coexistence - -# -# Common ESP-related -# -CONFIG_ESP_ERR_TO_NAME_LOOKUP=y -# end of Common ESP-related - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_ESP32_EMAC=y -CONFIG_ETH_PHY_INTERFACE_RMII=y -CONFIG_ETH_RMII_CLK_INPUT=y -# CONFIG_ETH_RMII_CLK_OUTPUT is not set -CONFIG_ETH_RMII_CLK_IN_GPIO=0 -CONFIG_ETH_DMA_BUFFER_SIZE=512 -CONFIG_ETH_DMA_RX_BUFFER_NUM=10 -CONFIG_ETH_DMA_TX_BUFFER_NUM=10 -# CONFIG_ETH_IRAM_OPTIMIZATION is not set -# CONFIG_ETH_USE_SPI_ETHERNET is not set -CONFIG_ETH_USE_OPENETH=y -CONFIG_ETH_OPENETH_DMA_RX_BUFFER_NUM=4 -CONFIG_ETH_OPENETH_DMA_TX_BUFFER_NUM=1 -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y -# end of Event Loop Library - -# -# GDB Stub -# -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH=y -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP=y -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# end of ESP HTTPS server - -# -# Hardware Settings -# - -# -# Chip revision -# -# CONFIG_ESP32_REV_MIN_0 is not set -# CONFIG_ESP32_REV_MIN_1 is not set -# CONFIG_ESP32_REV_MIN_1_1 is not set -# CONFIG_ESP32_REV_MIN_2 is not set -CONFIG_ESP32_REV_MIN_3=y -# CONFIG_ESP32_REV_MIN_3_1 is not set -CONFIG_ESP32_REV_MIN=3 -CONFIG_ESP32_REV_MIN_FULL=300 -CONFIG_ESP_REV_MIN_FULL=300 - -# -# Maximum Supported ESP32 Revision (Rev v3.99) -# -CONFIG_ESP32_REV_MAX_FULL=399 -CONFIG_ESP_REV_MAX_FULL=399 -# end of Chip revision - -# -# MAC Config -# -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y -# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set -# end of MAC Config - -# -# Sleep Config -# -# CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND is not set -# CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND is not set -CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y -# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set -CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# end of Sleep Config - -# -# RTC Clock Config -# -# CONFIG_RTC_CLK_SRC_INT_RC is not set -# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_RTC_CLK_SRC_EXT_OSC is not set -CONFIG_RTC_CLK_SRC_INT_8MD256=y -CONFIG_RTC_CLK_CAL_CYCLES=1024 -# end of RTC Clock Config - -# -# Peripheral Control -# -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y -# end of Peripheral Control - -# -# Main XTAL Config -# -# CONFIG_XTAL_FREQ_26 is not set -CONFIG_XTAL_FREQ_40=y -# CONFIG_XTAL_FREQ_AUTO is not set -CONFIG_XTAL_FREQ=40 -# end of Main XTAL Config -# end of Hardware Settings - -# -# LCD and Touch Panel -# - -# -# LCD Touch Drivers are maintained in the IDF Component Registry -# - -# -# LCD Peripheral Configuration -# -CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# end of LCD Peripheral Configuration -# end of LCD and Touch Panel - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# end of ESP NETIF Adapter - -# -# Partition API Configuration -# -# end of Partition API Configuration - -# -# PHY -# -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -CONFIG_ESP_PHY_REDUCE_TX_POWER=y -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# end of PHY - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -# end of Power Management - -# -# ESP PSRAM -# -CONFIG_SPIRAM=y - -# -# SPI RAM config -# -CONFIG_SPIRAM_MODE_QUAD=y -CONFIG_SPIRAM_TYPE_AUTO=y -# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set -CONFIG_SPIRAM_SPEED_40M=y -CONFIG_SPIRAM_SPEED=40 -CONFIG_SPIRAM_BOOT_INIT=y -# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set -# CONFIG_SPIRAM_USE_MEMMAP is not set -# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set -CONFIG_SPIRAM_USE_MALLOC=y -# CONFIG_SPIRAM_MEMTEST is not set -CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0 -CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y -CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536 -# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set -# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set - -# -# SPIRAM cache workaround debugging -# -# end of SPIRAM cache workaround debugging - -CONFIG_SPIRAM_BANKSWITCH_ENABLE=y -CONFIG_SPIRAM_BANKSWITCH_RESERVE=25 -# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set - -# -# PSRAM clock and cs IO for ESP32-DOWD -# -CONFIG_D0WD_PSRAM_CLK_IO=17 -CONFIG_D0WD_PSRAM_CS_IO=16 -# end of PSRAM clock and cs IO for ESP32-DOWD - -# -# PSRAM clock and cs IO for ESP32-D2WD -# -CONFIG_D2WD_PSRAM_CLK_IO=9 -CONFIG_D2WD_PSRAM_CS_IO=10 -# end of PSRAM clock and cs IO for ESP32-D2WD - -# -# PSRAM clock and cs IO for ESP32-PICO-D4 -# -CONFIG_PICO_PSRAM_CS_IO=10 -# end of PSRAM clock and cs IO for ESP32-PICO-D4 - -# CONFIG_SPIRAM_CUSTOM_SPIWP_SD3_PIN is not set -CONFIG_SPIRAM_SPIWP_SD3_PIN=7 -# CONFIG_SPIRAM_2T_MODE is not set -# end of SPI RAM config -# end of ESP PSRAM - -# -# ESP Ringbuf -# -# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set -# end of ESP Ringbuf - -# -# ESP System Settings -# -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 - -# -# Memory -# -# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set - -# -# Non-backward compatible options -# -CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM=y -# end of Non-backward compatible options -# end of Memory - -# -# Trace memory -# -# CONFIG_ESP32_TRAX is not set -CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 -# end of Trace memory - -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y -# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 - -# -# Memory protection -# -# end of Memory protection - -CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 -CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y -# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set -# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_MULTIPLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_INT_WDT_CHECK_CPU1=y -CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP_DEBUG_OCDAWARE=y -CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5=y - -# -# Brownout Detector -# -CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=0 -# end of Brownout Detector - -# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set -CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y -CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -# end of ESP System Settings - -# -# IPC (Inter-Processor Call) -# -CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_IPC_ISR_ENABLE=y -# end of IPC (Inter-Processor Call) - -# -# High resolution timer (esp_timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 -# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set -CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 -CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 -CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y -# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_TG0_LAC=y -# end of High resolution timer (esp_timer) - -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=8 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -CONFIG_ESP_WIFI_STATIC_TX_BUFFER=y -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 -CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 -CONFIG_ESP_WIFI_CACHE_TX_BUFFER_NUM=32 -CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -# CONFIG_ESP_WIFI_AMPDU_TX_ENABLED is not set -# CONFIG_ESP_WIFI_AMPDU_RX_ENABLED is not set -# CONFIG_ESP_WIFI_AMSDU_TX_ENABLED is not set -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP_WIFI_IRAM_OPT=y -CONFIG_ESP_WIFI_EXTRA_IRAM_OPT=y -CONFIG_ESP_WIFI_RX_IRAM_OPT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set -# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set -# CONFIG_ESP_WIFI_SOFTAP_SUPPORT is not set -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -# CONFIG_ESP_WIFI_NAN_ENABLE is not set -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -# CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# end of FAT Filesystem support - -# -# FreeRTOS -# - -# -# Kernel -# -# CONFIG_FREERTOS_SMP is not set -# CONFIG_FREERTOS_UNICORE is not set -CONFIG_FREERTOS_HZ=1000 -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -# CONFIG_FREERTOS_USE_IDLE_HOOK is not set -# CONFIG_FREERTOS_USE_TICK_HOOK is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 -CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY=y -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 -# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -# end of Kernel - -# -# Port -# -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set -CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y -CONFIG_FREERTOS_CORETIMER_0=y -# CONFIG_FREERTOS_CORETIMER_1 is not set -CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y -CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y -# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y -# end of Port - -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -# end of FreeRTOS - -# -# Hardware Abstraction Layer (HAL) and Low Level (LL) -# -CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y -# CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILENT is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=1 -CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y -CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# end of Hardware Abstraction Layer (HAL) and Low Level (LL) - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_USE_HOOKS is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set -# end of Heap memory debugging - -CONFIG_IEEE802154_CCA_THRESHOLD=-60 -CONFIG_IEEE802154_PENDING_TABLE_SIZE=20 - -# -# Log output -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y -# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set -# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set -CONFIG_LOG_MAXIMUM_LEVEL=3 -CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Log output - -# -# LWIP -# -CONFIG_LWIP_LOCAL_HOSTNAME="Tidbyt" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -CONFIG_LWIP_SO_RCVBUF=y -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -CONFIG_LWIP_DHCP_RESTORE_LAST_IP=y -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -# CONFIG_LWIP_DHCPS is not set -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=6 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 -CONFIG_LWIP_TCP_WND_DEFAULT=5744 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -# CONFIG_LWIP_WND_SCALE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_LWIP_PPP_SUPPORT is not set -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=1 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -# end of SNTP - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y -# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# mbedTLS -# -# CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC is not set -CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set -# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set -CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# mbedTLS v3.x related -# -# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set -# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set -# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set -# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set -CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y -# end of mbedTLS v3.x related - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE=y -CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE_PATH="certs/" -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y -CONFIG_MBEDTLS_HARDWARE_AES=y -# CONFIG_MBEDTLS_HARDWARE_MPI is not set -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA512_C=y -# CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT is not set -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -CONFIG_MBEDTLS_TLS_CLIENT_ONLY=y -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -CONFIG_MBEDTLS_PSK_MODES=y -# CONFIG_MBEDTLS_KEY_EXCHANGE_PSK is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK=y -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK=y -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_NIST_KW_C is not set -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -# CONFIG_MBEDTLS_X509_CRL_PARSE_C is not set -# CONFIG_MBEDTLS_X509_CSR_PARSE_C is not set -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -# CONFIG_MBEDTLS_DHM_C is not set -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -# end of mbedTLS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED=y -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED=y -# CONFIG_MQTT_USE_CORE_0 is not set -CONFIG_MQTT_USE_CORE_1=y -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -# CONFIG_NEWLIB_NANO_FORMAT is not set -CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y -# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set -# end of Newlib - -# -# NVS -# -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# Thread Operational Dataset -# -CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" -CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" -CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 -CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 -CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" -CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" -CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" -# end of Thread Operational Dataset - -CONFIG_OPENTHREAD_XTAL_ACCURACY=130 -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -# end of Protocomm - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y -# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set -# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# MMU Config -# -CONFIG_MMU_PAGE_SIZE_64KB=y -CONFIG_MMU_PAGE_MODE="64KB" -CONFIG_MMU_PAGE_SIZE=0x10000 -# end of MMU Config - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set -# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set - -# -# SPI Flash behavior when brownout -# -CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y -CONFIG_SPI_FLASH_BROWNOUT_RESET=y -# end of SPI Flash behavior when brownout - -# -# Auto-detect flash chips -# -CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y -CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=1024 -# CONFIG_WS_DYNAMIC_BUFFER is not set -# end of Websocket -# end of TCP Transport - -# -# Ultra Low Power (ULP) Co-processor -# -# CONFIG_ULP_COPROC_ENABLED is not set -# end of Ultra Low Power (ULP) Co-processor - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_64BIT is not set -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# Root Hub configuration -# -# end of Root Hub configuration - -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -# CONFIG_WIFI_PROV_BLE_BONDING is not set -# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION is not set -# CONFIG_WIFI_PROV_KEEP_BLE_ON_AFTER_PROV is not set -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - -# -# Audio playback -# -CONFIG_AUDIO_PLAYER_ENABLE_MP3=y -# CONFIG_AUDIO_PLAYER_ENABLE_WAV is not set -CONFIG_AUDIO_PLAYER_LOG_LEVEL=0 -# end of Audio playback - -# -# DSP Library -# -CONFIG_DSP_OPTIMIZATIONS_SUPPORTED=y -# CONFIG_DSP_ANSI is not set -CONFIG_DSP_OPTIMIZED=y -CONFIG_DSP_OPTIMIZATION=1 -# CONFIG_DSP_MAX_FFT_SIZE_512 is not set -# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set -# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set -CONFIG_DSP_MAX_FFT_SIZE_4096=y -# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set -# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set -# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set -CONFIG_DSP_MAX_FFT_SIZE=4096 -# end of DSP Library - -# -# mDNS -# -CONFIG_MDNS_MAX_INTERFACES=3 -CONFIG_MDNS_MAX_SERVICES=10 -CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_ACTION_QUEUE_LEN=16 -CONFIG_MDNS_TASK_STACK_SIZE=4096 -# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_MDNS_TASK_AFFINITY_CPU0=y -# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set -CONFIG_MDNS_TASK_AFFINITY=0x0 -CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 -CONFIG_MDNS_TIMER_PERIOD_MS=100 -# CONFIG_MDNS_NETWORKING_SOCKET is not set -# CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES is not set -# CONFIG_MDNS_ENABLE_DEBUG_PRINTS is not set -# CONFIG_MDNS_RESPOND_REVERSE_QUERIES is not set -CONFIG_MDNS_MULTIPLE_INSTANCE=y - -# -# MDNS Predefined interfaces -# -CONFIG_MDNS_PREDEF_NETIF_STA=y -CONFIG_MDNS_PREDEF_NETIF_AP=y -CONFIG_MDNS_PREDEF_NETIF_ETH=y -# end of MDNS Predefined interfaces -# end of mDNS - -# -# libsodium -# -# end of libsodium -# end of Component config - -# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set - -# Deprecated options for backward compatibility -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -# CONFIG_NO_BLOBS is not set -# CONFIG_ESP32_NO_BLOBS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=3 -CONFIG_APP_ROLLBACK_ENABLE=y -# CONFIG_APP_ANTI_ROLLBACK is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -# CONFIG_FLASHMODE_QIO is not set -# CONFIG_FLASHMODE_QOUT is not set -CONFIG_FLASHMODE_DIO=y -# CONFIG_FLASHMODE_DOUT is not set -CONFIG_MONITOR_BAUD=115200 -# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED is not set -CONFIG_OPTIMIZATION_ASSERTIONS_SILENT=y -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=1 -# CONFIG_CXX_EXCEPTIONS is not set -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -CONFIG_BLUEDROID_ENABLED=y -# CONFIG_NIMBLE_ENABLED is not set -CONFIG_BTC_TASK_STACK_SIZE=3072 -CONFIG_BLUEDROID_PINNED_TO_CORE_0=y -# CONFIG_BLUEDROID_PINNED_TO_CORE_1 is not set -CONFIG_BLUEDROID_PINNED_TO_CORE=0 -CONFIG_BTU_TASK_STACK_SIZE=4096 -# CONFIG_BLUEDROID_MEM_DEBUG is not set -# CONFIG_CLASSIC_BT_ENABLED is not set -CONFIG_GATTS_ENABLE=y -# CONFIG_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set -CONFIG_GATTS_SEND_SERVICE_CHANGE_AUTO=y -CONFIG_GATTS_SEND_SERVICE_CHANGE_MODE=0 -# CONFIG_GATTC_ENABLE is not set -# CONFIG_BLE_SMP_ENABLE is not set -# CONFIG_HCI_TRACE_LEVEL_NONE is not set -# CONFIG_HCI_TRACE_LEVEL_ERROR is not set -CONFIG_HCI_TRACE_LEVEL_WARNING=y -# CONFIG_HCI_TRACE_LEVEL_API is not set -# CONFIG_HCI_TRACE_LEVEL_EVENT is not set -# CONFIG_HCI_TRACE_LEVEL_DEBUG is not set -# CONFIG_HCI_TRACE_LEVEL_VERBOSE is not set -CONFIG_HCI_INITIAL_TRACE_LEVEL=2 -# CONFIG_BTM_TRACE_LEVEL_NONE is not set -# CONFIG_BTM_TRACE_LEVEL_ERROR is not set -CONFIG_BTM_TRACE_LEVEL_WARNING=y -# CONFIG_BTM_TRACE_LEVEL_API is not set -# CONFIG_BTM_TRACE_LEVEL_EVENT is not set -# CONFIG_BTM_TRACE_LEVEL_DEBUG is not set -# CONFIG_BTM_TRACE_LEVEL_VERBOSE is not set -CONFIG_BTM_INITIAL_TRACE_LEVEL=2 -# CONFIG_L2CAP_TRACE_LEVEL_NONE is not set -# CONFIG_L2CAP_TRACE_LEVEL_ERROR is not set -CONFIG_L2CAP_TRACE_LEVEL_WARNING=y -# CONFIG_L2CAP_TRACE_LEVEL_API is not set -# CONFIG_L2CAP_TRACE_LEVEL_EVENT is not set -# CONFIG_L2CAP_TRACE_LEVEL_DEBUG is not set -# CONFIG_L2CAP_TRACE_LEVEL_VERBOSE is not set -CONFIG_L2CAP_INITIAL_TRACE_LEVEL=2 -# CONFIG_RFCOMM_TRACE_LEVEL_NONE is not set -# CONFIG_RFCOMM_TRACE_LEVEL_ERROR is not set -CONFIG_RFCOMM_TRACE_LEVEL_WARNING=y -# CONFIG_RFCOMM_TRACE_LEVEL_API is not set -# CONFIG_RFCOMM_TRACE_LEVEL_EVENT is not set -# CONFIG_RFCOMM_TRACE_LEVEL_DEBUG is not set -# CONFIG_RFCOMM_TRACE_LEVEL_VERBOSE is not set -CONFIG_RFCOMM_INITIAL_TRACE_LEVEL=2 -# CONFIG_SDP_TRACE_LEVEL_NONE is not set -# CONFIG_SDP_TRACE_LEVEL_ERROR is not set -CONFIG_SDP_TRACE_LEVEL_WARNING=y -# CONFIG_SDP_TRACE_LEVEL_API is not set -# CONFIG_SDP_TRACE_LEVEL_EVENT is not set -# CONFIG_SDP_TRACE_LEVEL_DEBUG is not set -# CONFIG_SDP_TRACE_LEVEL_VERBOSE is not set -CONFIG_BTH_LOG_SDP_INITIAL_TRACE_LEVEL=2 -# CONFIG_GAP_TRACE_LEVEL_NONE is not set -# CONFIG_GAP_TRACE_LEVEL_ERROR is not set -CONFIG_GAP_TRACE_LEVEL_WARNING=y -# CONFIG_GAP_TRACE_LEVEL_API is not set -# CONFIG_GAP_TRACE_LEVEL_EVENT is not set -# CONFIG_GAP_TRACE_LEVEL_DEBUG is not set -# CONFIG_GAP_TRACE_LEVEL_VERBOSE is not set -CONFIG_GAP_INITIAL_TRACE_LEVEL=2 -CONFIG_BNEP_INITIAL_TRACE_LEVEL=2 -# CONFIG_PAN_TRACE_LEVEL_NONE is not set -# CONFIG_PAN_TRACE_LEVEL_ERROR is not set -CONFIG_PAN_TRACE_LEVEL_WARNING=y -# CONFIG_PAN_TRACE_LEVEL_API is not set -# CONFIG_PAN_TRACE_LEVEL_EVENT is not set -# CONFIG_PAN_TRACE_LEVEL_DEBUG is not set -# CONFIG_PAN_TRACE_LEVEL_VERBOSE is not set -CONFIG_PAN_INITIAL_TRACE_LEVEL=2 -# CONFIG_A2D_TRACE_LEVEL_NONE is not set -# CONFIG_A2D_TRACE_LEVEL_ERROR is not set -CONFIG_A2D_TRACE_LEVEL_WARNING=y -# CONFIG_A2D_TRACE_LEVEL_API is not set -# CONFIG_A2D_TRACE_LEVEL_EVENT is not set -# CONFIG_A2D_TRACE_LEVEL_DEBUG is not set -# CONFIG_A2D_TRACE_LEVEL_VERBOSE is not set -CONFIG_A2D_INITIAL_TRACE_LEVEL=2 -# CONFIG_AVDT_TRACE_LEVEL_NONE is not set -# CONFIG_AVDT_TRACE_LEVEL_ERROR is not set -CONFIG_AVDT_TRACE_LEVEL_WARNING=y -# CONFIG_AVDT_TRACE_LEVEL_API is not set -# CONFIG_AVDT_TRACE_LEVEL_EVENT is not set -# CONFIG_AVDT_TRACE_LEVEL_DEBUG is not set -# CONFIG_AVDT_TRACE_LEVEL_VERBOSE is not set -CONFIG_AVDT_INITIAL_TRACE_LEVEL=2 -# CONFIG_AVCT_TRACE_LEVEL_NONE is not set -# CONFIG_AVCT_TRACE_LEVEL_ERROR is not set -CONFIG_AVCT_TRACE_LEVEL_WARNING=y -# CONFIG_AVCT_TRACE_LEVEL_API is not set -# CONFIG_AVCT_TRACE_LEVEL_EVENT is not set -# CONFIG_AVCT_TRACE_LEVEL_DEBUG is not set -# CONFIG_AVCT_TRACE_LEVEL_VERBOSE is not set -CONFIG_AVCT_INITIAL_TRACE_LEVEL=2 -# CONFIG_AVRC_TRACE_LEVEL_NONE is not set -# CONFIG_AVRC_TRACE_LEVEL_ERROR is not set -CONFIG_AVRC_TRACE_LEVEL_WARNING=y -# CONFIG_AVRC_TRACE_LEVEL_API is not set -# CONFIG_AVRC_TRACE_LEVEL_EVENT is not set -# CONFIG_AVRC_TRACE_LEVEL_DEBUG is not set -# CONFIG_AVRC_TRACE_LEVEL_VERBOSE is not set -CONFIG_AVRC_INITIAL_TRACE_LEVEL=2 -# CONFIG_MCA_TRACE_LEVEL_NONE is not set -# CONFIG_MCA_TRACE_LEVEL_ERROR is not set -CONFIG_MCA_TRACE_LEVEL_WARNING=y -# CONFIG_MCA_TRACE_LEVEL_API is not set -# CONFIG_MCA_TRACE_LEVEL_EVENT is not set -# CONFIG_MCA_TRACE_LEVEL_DEBUG is not set -# CONFIG_MCA_TRACE_LEVEL_VERBOSE is not set -CONFIG_MCA_INITIAL_TRACE_LEVEL=2 -# CONFIG_HID_TRACE_LEVEL_NONE is not set -# CONFIG_HID_TRACE_LEVEL_ERROR is not set -CONFIG_HID_TRACE_LEVEL_WARNING=y -# CONFIG_HID_TRACE_LEVEL_API is not set -# CONFIG_HID_TRACE_LEVEL_EVENT is not set -# CONFIG_HID_TRACE_LEVEL_DEBUG is not set -# CONFIG_HID_TRACE_LEVEL_VERBOSE is not set -CONFIG_HID_INITIAL_TRACE_LEVEL=2 -# CONFIG_APPL_TRACE_LEVEL_NONE is not set -# CONFIG_APPL_TRACE_LEVEL_ERROR is not set -CONFIG_APPL_TRACE_LEVEL_WARNING=y -# CONFIG_APPL_TRACE_LEVEL_API is not set -# CONFIG_APPL_TRACE_LEVEL_EVENT is not set -# CONFIG_APPL_TRACE_LEVEL_DEBUG is not set -# CONFIG_APPL_TRACE_LEVEL_VERBOSE is not set -CONFIG_APPL_INITIAL_TRACE_LEVEL=2 -# CONFIG_GATT_TRACE_LEVEL_NONE is not set -# CONFIG_GATT_TRACE_LEVEL_ERROR is not set -CONFIG_GATT_TRACE_LEVEL_WARNING=y -# CONFIG_GATT_TRACE_LEVEL_API is not set -# CONFIG_GATT_TRACE_LEVEL_EVENT is not set -# CONFIG_GATT_TRACE_LEVEL_DEBUG is not set -# CONFIG_GATT_TRACE_LEVEL_VERBOSE is not set -CONFIG_GATT_INITIAL_TRACE_LEVEL=2 -# CONFIG_SMP_TRACE_LEVEL_NONE is not set -# CONFIG_SMP_TRACE_LEVEL_ERROR is not set -CONFIG_SMP_TRACE_LEVEL_WARNING=y -# CONFIG_SMP_TRACE_LEVEL_API is not set -# CONFIG_SMP_TRACE_LEVEL_EVENT is not set -# CONFIG_SMP_TRACE_LEVEL_DEBUG is not set -# CONFIG_SMP_TRACE_LEVEL_VERBOSE is not set -CONFIG_SMP_INITIAL_TRACE_LEVEL=2 -# CONFIG_BTIF_TRACE_LEVEL_NONE is not set -# CONFIG_BTIF_TRACE_LEVEL_ERROR is not set -CONFIG_BTIF_TRACE_LEVEL_WARNING=y -# CONFIG_BTIF_TRACE_LEVEL_API is not set -# CONFIG_BTIF_TRACE_LEVEL_EVENT is not set -# CONFIG_BTIF_TRACE_LEVEL_DEBUG is not set -# CONFIG_BTIF_TRACE_LEVEL_VERBOSE is not set -CONFIG_BTIF_INITIAL_TRACE_LEVEL=2 -# CONFIG_BTC_TRACE_LEVEL_NONE is not set -# CONFIG_BTC_TRACE_LEVEL_ERROR is not set -CONFIG_BTC_TRACE_LEVEL_WARNING=y -# CONFIG_BTC_TRACE_LEVEL_API is not set -# CONFIG_BTC_TRACE_LEVEL_EVENT is not set -# CONFIG_BTC_TRACE_LEVEL_DEBUG is not set -# CONFIG_BTC_TRACE_LEVEL_VERBOSE is not set -CONFIG_BTC_INITIAL_TRACE_LEVEL=2 -# CONFIG_OSI_TRACE_LEVEL_NONE is not set -# CONFIG_OSI_TRACE_LEVEL_ERROR is not set -CONFIG_OSI_TRACE_LEVEL_WARNING=y -# CONFIG_OSI_TRACE_LEVEL_API is not set -# CONFIG_OSI_TRACE_LEVEL_EVENT is not set -# CONFIG_OSI_TRACE_LEVEL_DEBUG is not set -# CONFIG_OSI_TRACE_LEVEL_VERBOSE is not set -CONFIG_OSI_INITIAL_TRACE_LEVEL=2 -# CONFIG_BLUFI_TRACE_LEVEL_NONE is not set -# CONFIG_BLUFI_TRACE_LEVEL_ERROR is not set -CONFIG_BLUFI_TRACE_LEVEL_WARNING=y -# CONFIG_BLUFI_TRACE_LEVEL_API is not set -# CONFIG_BLUFI_TRACE_LEVEL_EVENT is not set -# CONFIG_BLUFI_TRACE_LEVEL_DEBUG is not set -# CONFIG_BLUFI_TRACE_LEVEL_VERBOSE is not set -CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2 -# CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK is not set -# CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY is not set -CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30 -CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y -# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set -# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set -CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3 -CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3 -CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 -CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 -CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 -CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y -# CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set -CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y -CONFIG_BLE_SCAN_DUPLICATE=y -CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y -# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set -# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set -CONFIG_SCAN_DUPLICATE_TYPE=0 -CONFIG_DUPLICATE_SCAN_CACHE_SIZE=200 -# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set -CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y -CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y -CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 -CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 -CONFIG_ADC2_DISABLE_DAC=y -# CONFIG_MCPWM_ISR_IN_IRAM is not set -# CONFIG_SW_COEXIST_ENABLE is not set -# CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE is not set -# CONFIG_ESP_WIFI_SW_COEXIST_ENABLE is not set -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_OTA_ALLOW_HTTP=y -# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set -CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y -CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 -CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 -# CONFIG_ESP32_RTC_CLK_SRC_INT_RC is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC is not set -# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set -# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set -CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256=y -CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256=y -CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 -# CONFIG_ESP32_XTAL_FREQ_26 is not set -CONFIG_ESP32_XTAL_FREQ_40=y -# CONFIG_ESP32_XTAL_FREQ_AUTO is not set -CONFIG_ESP32_XTAL_FREQ=40 -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -CONFIG_REDUCE_PHY_TX_POWER=y -CONFIG_ESP32_REDUCE_PHY_TX_POWER=y -CONFIG_SPIRAM_SUPPORT=y -CONFIG_ESP32_SPIRAM_SUPPORT=y -CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST=y -# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set -# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y -CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 -CONFIG_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_ESP32_PANIC_PRINT_HALT is not set -CONFIG_ESP32_PANIC_PRINT_REBOOT=y -# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP32_PANIC_GDBSTUB is not set -CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_CONSOLE_UART_NONE is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_INT_WDT_CHECK_CPU1=y -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32_DEBUG_OCDAWARE=y -CONFIG_BROWNOUT_DET=y -CONFIG_ESP32_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_0=y -CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=0 -CONFIG_ESP32_BROWNOUT_DET_LVL=0 -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -CONFIG_IPC_TASK_STACK_SIZE=1024 -CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 -CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 -CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -# CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED is not set -# CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED is not set -# CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED is not set -# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_TIMER_QUEUE_LENGTH=10 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -# CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=32 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=6 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5744 -CONFIG_TCP_WND_DEFAULT=5744 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -# CONFIG_ESP32_ULP_COPROC_ENABLED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# End of deprecated options diff --git a/src/audio.c b/src/audio.c new file mode 100644 index 0000000..b9e0e13 --- /dev/null +++ b/src/audio.c @@ -0,0 +1,134 @@ +#ifdef TIDBYT_GEN2 + +#include +#include +#include +#include +#include + +static const char *TAG = "audio"; + +#define I2S_NUM (I2S_NUM_0) +#define I2S_SAMPLE_RATE (44100) + +#define I2S_PINS \ + { \ + .mclk = (gpio_num_t)-1, .bclk = GPIO_NUM_12, .ws = GPIO_NUM_13, \ + .dout = GPIO_NUM_14, .din = (gpio_num_t)-1, \ + .invert_flags = { \ + .mclk_inv = false, \ + .bclk_inv = false, \ + .ws_inv = false, \ + }, \ + } + +static i2s_chan_handle_t _tx; + +static esp_err_t _setI2SClock(uint32_t rate, uint32_t bitWidth, + i2s_slot_mode_t mode) { + ESP_LOGI(TAG, "setI2SClock: rate=%lu, bitWidth=%lu, mode=%d", rate, bitWidth, + mode); + + esp_err_t ret = ESP_OK; + + i2s_std_config_t config = { + .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(rate), + .slot_cfg = I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG( + (i2s_data_bit_width_t)bitWidth, mode), + .gpio_cfg = I2S_PINS, + }; + + ret |= i2s_channel_disable(_tx); + ret |= i2s_channel_reconfig_std_clock(_tx, &config.clk_cfg); + ret |= i2s_channel_reconfig_std_slot(_tx, &config.slot_cfg); + ret |= i2s_channel_enable(_tx); + + return ret; +} + +static esp_err_t _i2sWrite(void *buf, size_t len, size_t *bytesWritten, + uint32_t timeout) { + if (len % 2 != 0) { + return ESP_ERR_INVALID_SIZE; + } + + return i2s_channel_write(_tx, (uint8_t *)buf, len, bytesWritten, timeout); +} + +static esp_err_t _initI2S() { + esp_err_t ret = ESP_OK; + + i2s_std_config_t config = { + .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG(I2S_SAMPLE_RATE), + .slot_cfg = I2S_STD_MSB_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, + I2S_SLOT_MODE_STEREO), + .gpio_cfg = I2S_PINS}; + + i2s_chan_config_t channels = + I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM, I2S_ROLE_MASTER); + channels.dma_frame_num *= 2; + channels.auto_clear = true; + ret = i2s_new_channel(&channels, &_tx, NULL); + if (ret != ESP_OK) { + return ret; + } + + ret |= i2s_channel_init_std_mode(_tx, &config); + ret |= i2s_channel_enable(_tx); + + return ret; +} + +static esp_err_t _mute_cb(AUDIO_PLAYER_MUTE_SETTING setting) { + ESP_LOGI(TAG, "Mute setting: %d", setting); + return ESP_OK; +} + +static void _shutdown() { + audio_player_delete(); + i2s_channel_disable(_tx); + i2s_del_channel(_tx); +} + +esp_err_t audio_initialize() { + esp_err_t ret = _initI2S(); + if (ret != ESP_OK) { + return ret; + } + + audio_player_config_t config = { + .mute_fn = _mute_cb, + .clk_set_fn = _setI2SClock, + .write_fn = _i2sWrite, + .priority = configMAX_PRIORITIES - 1, + .coreID = tskNO_AFFINITY, + }; + ret = audio_player_new(config); + if (ret != ESP_OK) { + return ret; + } + + esp_register_shutdown_handler(&_shutdown); + + return ESP_OK; +} + +esp_err_t audio_play(const unsigned char *data, size_t length) { + FILE *fp = fmemopen((void *)data, length, "rb"); + assert(fp != NULL); + + return audio_player_play(fp); +} + +#else + +#include +#include + +esp_err_t audio_play(const unsigned char *data, size_t length) { + return ESP_OK; +} + +esp_err_t audio_initialize() { return ESP_OK; } + +#endif diff --git a/src/audio.h b/src/audio.h new file mode 100644 index 0000000..2b72de1 --- /dev/null +++ b/src/audio.h @@ -0,0 +1,4 @@ +#pragma once + +esp_err_t audio_initialize(); +esp_err_t audio_play(const unsigned char *data, size_t length); diff --git a/src/main.c b/src/main.c index 21acd1d..4c28304 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,7 @@ #include #include +#include "audio.h" #include "display.h" #include "flash.h" #include "gfx.h" @@ -38,12 +39,21 @@ void app_main(void) { } esp_register_shutdown_handler(&wifi_shutdown); + // Setup audio. + if (audio_initialize() != ESP_OK) { + ESP_LOGE(TAG, "failed to initialize audio"); + return; + } + uint8_t mac[6]; if (!wifi_get_mac(mac)) { ESP_LOGI(TAG, "WiFi MAC: %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } + // Play a sample. This will only have an effect on Gen 2 devices. + audio_play(ASSET_LAZY_DADDY_MP3, ASSET_LAZY_DADDY_MP3_LEN); + for (;;) { uint8_t* webp; size_t len; diff --git a/src/remote.c b/src/remote.c index 6eb1da9..c0b8a40 100644 --- a/src/remote.c +++ b/src/remote.c @@ -42,6 +42,10 @@ static esp_err_t _httpCallback(esp_http_client_event_t* event) { event->header_value); break; + case HTTP_EVENT_REDIRECT: + ESP_LOGD(TAG, "HTTP_EVENT_REDIRECT"); + break; + case HTTP_EVENT_ON_DATA: ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", event->data_len); diff --git a/src/wifi.c b/src/wifi.c index b541c90..047be42 100644 --- a/src/wifi.c +++ b/src/wifi.c @@ -87,9 +87,9 @@ int wifi_initialize(const char* ssid, const char* password) { } wifi_config_t wifi_config = {0}; - strncpy((char*)wifi_config.sta.ssid, ssid, sizeof(wifi_config.sta.ssid)); + strncpy((char*)wifi_config.sta.ssid, ssid, sizeof(wifi_config.sta.ssid) - 1); strncpy((char*)wifi_config.sta.password, password, - sizeof(wifi_config.sta.password)); + sizeof(wifi_config.sta.password) - 1); err = esp_wifi_set_mode(WIFI_MODE_STA); if (err != ESP_OK) { ESP_LOGE(TAG, "Set mode failed: %s", esp_err_to_name(err));