diff --git a/examples/Modulino_LEDMatrix/LEDMatrixBasic/LEDMatrixBasic.ino b/examples/Modulino_LEDMatrix/LEDMatrixBasic/LEDMatrixBasic.ino index cd2cb0a..1fd3101 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixBasic/LEDMatrixBasic.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixBasic/LEDMatrixBasic.ino @@ -5,7 +5,7 @@ * Initial author: Sebastian Romero (s.romero@arduino.cc) */ -#include "Modulino_LED_Matrix.h" +#include #include "LEDMatrixGallery.h" // This header contains predefined animations for the LED matrix display. ModulinoLEDMatrix matrix; diff --git a/examples/Modulino_LEDMatrix/LEDMatrixFromEditor/LEDMatrixFromEditor.ino b/examples/Modulino_LEDMatrix/LEDMatrixFromEditor/LEDMatrixFromEditor.ino index f0dc11a..4a9b3f9 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixFromEditor/LEDMatrixFromEditor.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixFromEditor/LEDMatrixFromEditor.ino @@ -6,7 +6,7 @@ * Initial author: Sebastian Romero (s.romero@arduino.cc) */ -#include "Modulino_LED_Matrix.h" +#include #include "animation.h" ModulinoLEDMatrix matrix; diff --git a/examples/Modulino_LEDMatrix/LEDMatrixGalleryShowcase/LEDMatrixGalleryShowcase.ino b/examples/Modulino_LEDMatrix/LEDMatrixGalleryShowcase/LEDMatrixGalleryShowcase.ino index 8ede484..e7394a5 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixGalleryShowcase/LEDMatrixGalleryShowcase.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixGalleryShowcase/LEDMatrixGalleryShowcase.ino @@ -13,8 +13,7 @@ This example code is in the public domain. */ -#include "Modulino.h" -#include "Modulino_LED_Matrix.h" +#include #include "LEDMatrixGallery.h" ModulinoLEDMatrix matrix; diff --git a/examples/Modulino_LEDMatrix/LEDMatrixGrayscale/LEDMatrixGrayscale.ino b/examples/Modulino_LEDMatrix/LEDMatrixGrayscale/LEDMatrixGrayscale.ino index d92da91..703b4eb 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixGrayscale/LEDMatrixGrayscale.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixGrayscale/LEDMatrixGrayscale.ino @@ -5,7 +5,7 @@ * Initial author: Sebastian Romero (s.romero@arduino.cc) */ -#include "Modulino_LED_Matrix.h" +#include #include "flames_animation.h" /* Graphic in 4-bit grayscale */ diff --git a/examples/Modulino_LEDMatrix/LEDMatrixMultiple/LEDMatrixMultiple.ino b/examples/Modulino_LEDMatrix/LEDMatrixMultiple/LEDMatrixMultiple.ino index 6b10d89..96a8928 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixMultiple/LEDMatrixMultiple.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixMultiple/LEDMatrixMultiple.ino @@ -7,7 +7,7 @@ * Initial author: Sebastian Romero (s.romero@arduino.cc) */ -#include "Modulino_LED_Matrix.h" +#include constexpr uint8_t animation[][16] = { { 0x00, 0x00, 0x00, 0x7c, 0x82, 0x82, 0x82, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00 }, diff --git a/examples/Modulino_LEDMatrix/LEDMatrixShapes/LEDMatrixShapes.ino b/examples/Modulino_LEDMatrix/LEDMatrixShapes/LEDMatrixShapes.ino index 0caa848..8979cb2 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixShapes/LEDMatrixShapes.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixShapes/LEDMatrixShapes.ino @@ -7,7 +7,7 @@ */ #include "ArduinoGraphics.h" -#include "Modulino_LED_Matrix.h" +#include ModulinoLEDMatrix matrix; diff --git a/examples/Modulino_LEDMatrix/LEDMatrixTextCapture/LEDMatrixTextCapture.ino b/examples/Modulino_LEDMatrix/LEDMatrixTextCapture/LEDMatrixTextCapture.ino index 265f603..92e02a5 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixTextCapture/LEDMatrixTextCapture.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixTextCapture/LEDMatrixTextCapture.ino @@ -7,7 +7,7 @@ */ #include "ArduinoGraphics.h" -#include "Modulino_LED_Matrix.h" +#include ModulinoLEDMatrix matrix; @@ -16,10 +16,11 @@ ModulinoLEDMatrix matrix; // Each frame needs space for pixels + duration. // For Modulino 12x8, that's 12 bytes pixels + 4 bytes duration = 16 bytes. constexpr size_t FRAMES = 128; +constexpr size_t FRAME_SIZE = ModulinoLEDMatrix::MONOCHROMATIC_ANIMATION_FRAME_SIZE; // Frame buffers for the animations. This is where the captured frames will be stored. -uint8_t animation1Buffer[FRAMES][MONOCHROMATIC_ANIMATION_FRAME_SIZE]; -uint8_t animation2Buffer[FRAMES][MONOCHROMATIC_ANIMATION_FRAME_SIZE]; +uint8_t animation1Buffer[FRAMES][FRAME_SIZE]; +uint8_t animation2Buffer[FRAMES][FRAME_SIZE]; // Variables to hold the actual used size of the buffers after capturing the animations. // This is important because the captured animation might not use all the allocated space. @@ -53,14 +54,14 @@ void prepareAnimations(){ Serial.print("Remaining bytes for animation 1: "); Serial.println(sizeof(animation1Buffer) - animation1UsedBytes); Serial.print("Frames captured for animation 1: "); - Serial.println(animation1UsedBytes / MONOCHROMATIC_ANIMATION_FRAME_SIZE); + Serial.println(animation1UsedBytes / FRAME_SIZE); Serial.print("Bytes used for animation 2: "); Serial.println(animation2UsedBytes); Serial.print("Remaining bytes for animation 2: "); Serial.println(sizeof(animation2Buffer) - animation2UsedBytes); Serial.print("Frames captured for animation 2: "); - Serial.println(animation2UsedBytes / MONOCHROMATIC_ANIMATION_FRAME_SIZE); + Serial.println(animation2UsedBytes / FRAME_SIZE); } void setup() { diff --git a/examples/Modulino_LEDMatrix/LEDMatrixTextScroll/LEDMatrixTextScroll.ino b/examples/Modulino_LEDMatrix/LEDMatrixTextScroll/LEDMatrixTextScroll.ino index 6620bad..a2c5340 100644 --- a/examples/Modulino_LEDMatrix/LEDMatrixTextScroll/LEDMatrixTextScroll.ino +++ b/examples/Modulino_LEDMatrix/LEDMatrixTextScroll/LEDMatrixTextScroll.ino @@ -6,7 +6,7 @@ */ #include "ArduinoGraphics.h" -#include "Modulino_LED_Matrix.h" +#include ModulinoLEDMatrix matrix; diff --git a/examples/Modulino_LEDMatrix/LEDMatrixVertical/LEDMatrixVertical.ino b/examples/Modulino_LEDMatrix/LEDMatrixVertical/LEDMatrixVertical.ino new file mode 100644 index 0000000..e34fb24 --- /dev/null +++ b/examples/Modulino_LEDMatrix/LEDMatrixVertical/LEDMatrixVertical.ino @@ -0,0 +1,42 @@ +/** + * This example shows how to use the Modulino LED Matrix library to display + * basic graphics and animations on the Modulino LED Matrix display using the column-major order (vertical) mode. + * Frames in column-major order are more efficiently rendered on the LED matrix display, as they align with the way the display processes data. + * + * Initial author: Sebastian Romero (s.romero@arduino.cc) + */ + +#include +#include "LEDMatrixGalleryVertical.h" // This header contains predefined animations for the LED matrix display. + +ModulinoLEDMatrix matrix; + +void setup() { + if (!matrix.begin()) { + // If initialization fails, we enter an infinite loop and + // blink the built-in LED to indicate an error. + while (true){ + digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // Blink built-in LED to indicate error + delay(500); + } + } + + // Animations in column-major order require + // setting the display mode to MonochromaticVertical + matrix.setMode(DisplayMode::MonochromaticVertical); +} + +void loop() { + // Play startup animation from gallery + matrix.setSequence(LEDMATRIX_ANIMATION_STARTUP_VERTICAL); + matrix.play(); + delay(500); + + // Show the UNO icon from the gallery + matrix.setFrame(LEDMATRIX_UNO_VERTICAL); + delay(1000); + + // Clear the display + matrix.clear(); + delay(500); +} \ No newline at end of file diff --git a/examples/Modulino_Thermo/Temperature_Humidity_Matrix/Temperature_Humidity_Matrix.ino b/examples/Modulino_Thermo/Temperature_Humidity_Matrix/Temperature_Humidity_Matrix.ino index b1792b3..552fb31 100644 --- a/examples/Modulino_Thermo/Temperature_Humidity_Matrix/Temperature_Humidity_Matrix.ino +++ b/examples/Modulino_Thermo/Temperature_Humidity_Matrix/Temperature_Humidity_Matrix.ino @@ -25,8 +25,8 @@ * SPDX-License-Identifier: MPL-2.0 */ -#include #include "ArduinoGraphics.h" +#include #include "Arduino_LED_Matrix.h" // Create a ModulinoThermo object diff --git a/src/LEDMatrixGallery.h b/src/LEDMatrixGallery.h index 41567b1..fed40a4 100644 --- a/src/LEDMatrixGallery.h +++ b/src/LEDMatrixGallery.h @@ -1,635 +1,602 @@ -#pragma once - -constexpr uint32_t LEDMATRIX_BLUETOOTH[3] = { 0x00181492, 0x54381038, 0x54921418 }; - -constexpr uint32_t LEDMATRIX_BOOTLOADER_ON[3] = { 0x00003844, 0x808e8044, 0x38000000 }; - -constexpr uint32_t LEDMATRIX_CHIP[3] = { 0x000054fe, 0x44c644fe, 0x54000000 }; - -constexpr uint32_t LEDMATRIX_CLOUD_WIFI[3] = { 0x304e4a91, 0x817a007c, 0x82394410 }; - -constexpr uint32_t LEDMATRIX_DANGER[3] = { 0x00c0b08c, 0x82ad828c, 0xb0c00000 }; - -constexpr uint32_t LEDMATRIX_EMOJI_BASIC[3] = { 0x00000026, 0x26202026, 0x26000000 }; - -constexpr uint32_t LEDMATRIX_EMOJI_HAPPY[3] = { 0x00000066, 0x46404046, 0x66000000 }; - -constexpr uint32_t LEDMATRIX_EMOJI_SAD[3] = { 0x00000066, 0x26202026, 0x66000000 }; - -constexpr uint32_t LEDMATRIX_HEART_BIG[3] = { 0x000e1121, 0x42844221, 0x110e0000 }; - -constexpr uint32_t LEDMATRIX_HEART_SMALL[3] = { 0x00000018, 0x24482418, 0x00000000 }; - -constexpr uint32_t LEDMATRIX_LIKE[3] = { 0x0000f888, 0xf884828f, 0x88780000 }; - -constexpr uint32_t LEDMATRIX_MUSIC_NOTE[3] = { 0x0000c0ff, 0x03030363, 0x7f000000 }; - -constexpr uint32_t LEDMATRIX_RESISTOR[3] = { 0x081c141c, 0x141c1414, 0x14141c08 }; - -constexpr uint32_t LEDMATRIX_UNO[3] = { 0x0cff8d81, 0xa1a1a1a1, 0x81877800 }; - +#ifndef _LEDMATRIX_GALLERY_H_ +#define _LEDMATRIX_GALLERY_H_ + +/* Icons */ +constexpr uint32_t LEDMATRIX_BLUETOOTH[] = { 0x10428, 0xa4517ff0, 0x50088104, 66 }; +constexpr uint32_t LEDMATRIX_BOOTLOADER_ON[] = { 0x4015, 0x2482082, 0x81100e0, 66 }; +constexpr uint32_t LEDMATRIX_CHIP[] = { 0x1503f, 0x81103181, 0x103f8150, 66 }; +constexpr uint32_t LEDMATRIX_CLOUD_WIFI[] = { 0x18464841, 0x26549558, 0x54652188, 66 }; +constexpr uint32_t LEDMATRIX_DANGER[] = { 0x400a015, 0x1502082, 0x484047fc, 66 }; +constexpr uint32_t LEDMATRIX_EMOJI_BASIC[] = { 0x19819, 0x80000001, 0xf8000000, 66 }; +constexpr uint32_t LEDMATRIX_EMOJI_HAPPY[] = { 0x19819, 0x80000001, 0x81f8000, 66 }; +constexpr uint32_t LEDMATRIX_EMOJI_SAD[] = { 0x19819, 0x80000001, 0xf8108000, 66 }; +constexpr uint32_t LEDMATRIX_HEART_BIG[] = { 0x3184a444, 0x44042081, 0x100a0040, 66 }; +constexpr uint32_t LEDMATRIX_HEART_SMALL[] = { 0xa, 0x1501100, 0xa0040000, 66 }; +constexpr uint32_t LEDMATRIX_LIKE[] = { 0x1003005, 0x39c2842, 0x842843f8, 66 }; +constexpr uint32_t LEDMATRIX_MUSIC_NOTE[] = { 0x1f81f810, 0x81081081, 0x18318300, 66 }; +constexpr uint32_t LEDMATRIX_RESISTOR[] = { 0x7f, 0xed437fe0, 0x0, 66 }; +constexpr uint32_t LEDMATRIX_UNO[] = { 0x7fc404e0, 0x4e024024, 0xf24027fc, 66 }; + +/* Animations */ constexpr uint32_t LEDMATRIX_ANIMATION_STARTUP[][4] = { - { 0x0, 0x0, 0x0, 66 }, - { 0x0, 0x10000000, 0x0, 66 }, - { 0x20, 0x10000000, 0x0, 40 }, - { 0x2020, 0x10000000, 0x0, 40 }, - { 0x202020, 0x10000000, 0x0, 40 }, - { 0x10202020, 0x10000000, 0x0, 40 }, - { 0x18202020, 0x10000000, 0x0, 40 }, - { 0x1c202020, 0x10000000, 0x0, 40 }, - { 0x1c222020, 0x10000000, 0x0, 30 }, - { 0x1c222220, 0x10000000, 0x0, 30 }, - { 0x1c222222, 0x10000000, 0x0, 30 }, - { 0x1c222222, 0x14000000, 0x0, 30 }, - { 0x1c222222, 0x14080000, 0x0, 30 }, - { 0x1c222222, 0x14081000, 0x0, 30 }, - { 0x1c222222, 0x14081020, 0x0, 30 }, - { 0x1c222222, 0x14081020, 0x20000000, 30 }, - { 0x1c222222, 0x14081020, 0x20200000, 30 }, - { 0x1c222222, 0x14081020, 0x20201000, 40 }, - { 0x1c222222, 0x14081020, 0x20201800, 40 }, - { 0x1c222222, 0x14081020, 0x20201c00, 40 }, - { 0x1c222222, 0x14081020, 0x20221c00, 40 }, - { 0x1c222222, 0x14081020, 0x22221c00, 40 }, - { 0x1c222222, 0x14081022, 0x22221c00, 66 }, - { 0x1c222222, 0x14081422, 0x22221c00, 240 }, - { 0x1c223222, 0x14081422, 0x26221c02, 66 }, - { 0x1c222a22, 0x14081422, 0x2a221c01, 400 }, - { 0x222a2214, 0x814222a, 0x221c0100, 66 }, - { 0x2a221408, 0x14222a22, 0x1c01003c, 66 }, - { 0x22140814, 0x222a221c, 0x1003c0a, 66 }, - { 0x14081422, 0x2a221c01, 0x3c0a0a, 66 }, - { 0x814222a, 0x221c0100, 0x3c0a0a3c, 66 }, - { 0x14222a22, 0x1c01003c, 0xa0a3c00, 66 }, - { 0x222a221c, 0x1003c0a, 0xa3c003e, 66 }, - { 0x2a221c01, 0x3c0a0a, 0x3c003e0a, 66 }, - { 0x221c0100, 0x3c0a0a3c, 0x3e0a0a, 66 }, - { 0x1c01003c, 0xa0a3c00, 0x3e0a0a34, 66 }, - { 0x1003c0a, 0xa3c003e, 0xa0a3400, 66 }, - { 0x3c0a0a, 0x3c003e0a, 0xa34003e, 100 }, - { 0x3c0a0a3c, 0x3e0a0a, 0x34003e22, 66 }, - { 0xa0a3c00, 0x3e0a0a34, 0x3e2222, 66 }, - { 0xa3c003e, 0xa0a3400, 0x3e22221c, 66 }, - { 0x3c003e0a, 0xa34003e, 0x22221c00, 66 }, - { 0x3e0a0a, 0x34003e22, 0x221c001e, 66 }, - { 0x3e0a0a34, 0x3e2222, 0x1c001e20, 66 }, - { 0xa0a3400, 0x3e22221c, 0x1e2020, 66 }, - { 0xa34003e, 0x22221c00, 0x1e20201e, 66 }, - { 0x34003e22, 0x221c001e, 0x20201e00, 66 }, - { 0x3e2222, 0x1c001e20, 0x201e0022, 66 }, - { 0x3e22221c, 0x1e2020, 0x1e00223e, 66 }, - { 0x22221c00, 0x1e20201e, 0x223e22, 66 }, - { 0x221c001e, 0x20201e00, 0x223e2200, 66 }, - { 0x1c001e20, 0x201e0022, 0x3e22003e, 66 }, - { 0x1e2020, 0x1e00223e, 0x22003e04, 66 }, - { 0x1e20201e, 0x223e22, 0x3e0408, 66 }, - { 0x20201e00, 0x223e2200, 0x3e04083e, 66 }, - { 0x201e0022, 0x3e22003e, 0x4083e00, 66 }, - { 0x1e00223e, 0x22003e04, 0x83e001c, 66 }, - { 0x223e22, 0x3e0408, 0x3e001c22, 66 }, - { 0x223e2200, 0x3e04083e, 0x1c2222, 66 }, - { 0x3e22003e, 0x4083e00, 0x1c22221c, 66 }, - { 0x22003e04, 0x83e001c, 0x22221c00, 66 }, - { 0x3e0408, 0x3e001c22, 0x221c0000, 66 }, - { 0x3e04083e, 0x1c2222, 0x1c000000, 66 }, - { 0x4083e00, 0x1c22221c, 0x0, 66 }, - { 0x83e001c, 0x22221c00, 0x0, 66 }, - { 0x3e001c22, 0x221c0000, 0x0, 66 }, - { 0x1c2222, 0x1c000000, 0x0, 66 }, - { 0x1c22221c, 0x0, 0x0, 66 }, - { 0x22221c00, 0x0, 0x0, 66 }, - { 0x221c0000, 0x0, 0x0, 66 }, - { 0x1c000000, 0x0, 0x0, 66 }, - { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0x800, 0x0, 66 }, + { 0x0, 0x801, 0x0, 40 }, + { 0x0, 0x803, 0x0, 40 }, + { 0x0, 0x807, 0x0, 40 }, + { 0x0, 0x8807, 0x0, 40 }, + { 0x0, 0x8008807, 0x0, 40 }, + { 0x80, 0x8008807, 0x0, 40 }, + { 0x40080, 0x8008807, 0x0, 30 }, + { 0x60080, 0x8008807, 0x0, 30 }, + { 0x70080, 0x8008807, 0x0, 30 }, + { 0x70088, 0x8008807, 0x0, 30 }, + { 0x70088, 0x8408807, 0x0, 30 }, + { 0x70088, 0x8408a07, 0x0, 30 }, + { 0x70088, 0x8408a07, 0x10000000, 30 }, + { 0x70088, 0x8408a07, 0x18000000, 30 }, + { 0x70088, 0x8408a07, 0x1c000000, 30 }, + { 0x70088, 0x8408a27, 0x1c000000, 40 }, + { 0x70088, 0x8428a27, 0x1c000000, 40 }, + { 0x70088, 0x28428a27, 0x1c000000, 40 }, + { 0x70488, 0x28428a27, 0x1c000000, 40 }, + { 0x70c88, 0x28428a27, 0x1c000000, 40 }, + { 0x71c88, 0x28428a27, 0x1c000000, 66 }, + { 0x71c8a, 0x28428a27, 0x1c000000, 240 }, + { 0x71d8a, 0xa842aa27, 0x1c000000, 66 }, + { 0x171c8a, 0x2a4a8a27, 0x1c000000, 400 }, + { 0x2e3814, 0x4494144e, 0x38000000, 66 }, + { 0x4c7028, 0x9929289c, 0x71000000, 66 }, + { 0x88e151, 0x22535128, 0xe2000000, 66 }, + { 0x101c3a2, 0x44a7a241, 0xc4000000, 66 }, + { 0x2038644, 0x994f4493, 0x89000000, 66 }, + { 0x4070c89, 0x229e8927, 0x12000000, 66 }, + { 0x80e1912, 0x553d125e, 0x25000000, 66 }, + { 0x100c3324, 0xaa7b24ac, 0x4a000000, 66 }, + { 0x20086749, 0x44f74948, 0x94000000, 66 }, + { 0x4000ce92, 0x99ee9291, 0x29000000, 66 }, + { 0x80019c25, 0x23dc2522, 0x52000000, 66 }, + { 0x3394a, 0x57b94a54, 0xa5000000, 100 }, + { 0x67394, 0xaf7294a9, 0x4b000000, 66 }, + { 0xce729, 0x4ee42942, 0x97000000, 66 }, + { 0x9ce52, 0x9dc95295, 0x2e000000, 66 }, + { 0x39ca5, 0x2b92a52a, 0x5c000000, 66 }, + { 0x7394a, 0x57254a54, 0xb8000000, 66 }, + { 0xe7294, 0xae4a94a9, 0x71000000, 66 }, + { 0xce429, 0x4c942942, 0xe3000000, 66 }, + { 0x9c952, 0x99295295, 0xc6000000, 66 }, + { 0x392a5, 0x2252a52b, 0x8c000000, 66 }, + { 0x7254a, 0x44a44a47, 0x19000000, 66 }, + { 0xe4b94, 0x9949949e, 0x33000000, 66 }, + { 0xc9729, 0x2292292c, 0x67000000, 66 }, + { 0x92e52, 0x45245248, 0xce000000, 66 }, + { 0x25da4, 0x9a49a491, 0x9d000000, 66 }, + { 0x4ba49, 0x34924923, 0x3a000000, 66 }, + { 0x97492, 0x69259246, 0x74000000, 66 }, + { 0x2e924, 0xd24b249c, 0xe9000000, 66 }, + { 0x5d249, 0xa4964929, 0xd2000000, 66 }, + { 0xba493, 0x592d9253, 0xa4000000, 66 }, + { 0x74926, 0xa25a24a7, 0x49000000, 66 }, + { 0xe934d, 0x44b4494e, 0x93000000, 66 }, + { 0xd269a, 0x9969929d, 0x26000000, 66 }, + { 0xa4c35, 0x22d2252a, 0x4c000000, 66 }, + { 0x4986a, 0x45a44a44, 0x98000000, 66 }, + { 0x930d4, 0x8b489489, 0x30000000, 66 }, + { 0x260a9, 0x6902902, 0x60000000, 66 }, + { 0x4c052, 0xd205204, 0xc0000000, 66 }, + { 0x980a4, 0xa40a409, 0x80000000, 66 }, + { 0x30048, 0x4804803, 0x0, 66 }, + { 0x60090, 0x9009006, 0x0, 66 }, + { 0xc0020, 0x200200c, 0x0, 66 }, + { 0x80040, 0x4004008, 0x0, 66 }, + { 0x80, 0x8008000, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_TETRIS_INTRO[][4] = { - { 0x1010100, 0x0, 0x0, 66 }, - { 0x2030200, 0x0, 0x0, 66 }, - { 0x4060400, 0x0, 0x0, 66 }, - { 0x80c0800, 0x0, 0x0, 66 }, - { 0x10181000, 0x101, 0x0, 66 }, - { 0x20302000, 0x303, 0x0, 66 }, - { 0x40604000, 0x606, 0x0, 66 }, - { 0x80c08000, 0xc0c, 0x0, 66 }, - { 0x80c08000, 0x1818, 0x0, 66 }, - { 0x80c08001, 0x1013030, 0x0, 66 }, - { 0x80c08002, 0x2036060, 0x0, 66 }, - { 0x80c08004, 0x406c0c0, 0x0, 66 }, - { 0x80c08008, 0x80cc0c0, 0x0, 66 }, - { 0x80c08010, 0x1018c0c0, 0x0, 66 }, - { 0x80c08020, 0x2030c0c0, 0x1000000, 66 }, - { 0x80c08040, 0x4060c0c0, 0x3000000, 66 }, - { 0x80c08080, 0x80c0c0c0, 0x7000000, 66 }, - { 0x80c08080, 0x80c0c0c0, 0xf000000, 66 }, - { 0x80c08080, 0x80c0c0c0, 0x1e000000, 66 }, - { 0x80c08181, 0x81c0c0c0, 0x3c000000, 66 }, - { 0x80c08283, 0x82c0c0c0, 0x78000000, 66 }, - { 0x80c08486, 0x84c0c0c0, 0xf0000000, 66 }, - { 0x80c0888c, 0x88c0c0c0, 0xf0010101, 66 }, - { 0x80c09098, 0x90c0c0c0, 0xf0030202, 66 }, - { 0x80c0a0b0, 0xa0c0c0c0, 0xf0060404, 66 }, - { 0x80c0c0e0, 0xc1c1c1c1, 0xf00c0808, 66 }, - { 0x80c0c0e0, 0xc2c2c2c2, 0xf0181010, 66 }, - { 0x81c0c0e0, 0xc4c4c4c4, 0xf0302020, 66 }, - { 0x83c1c0e0, 0xc8c8c8c8, 0xf0604040, 66 }, - { 0x86c3c0e0, 0xd0d0d0d0, 0xf0c08080, 66 }, - { 0x8cc6c0e0, 0xe0e0e0e0, 0xf0c08181, 66 }, - { 0x98ccc1e0, 0xe0e0e0e0, 0xf0c08382, 66 }, - { 0xb0d8c3e1, 0xe1e0e0e0, 0xf0c08784, 66 }, - { 0xe0f0c6e2, 0xe2e0e0e0, 0xf0c08e88, 66 }, - { 0xe1f0cce4, 0xe4e1e1e0, 0xf0c09c91, 66 }, - { 0xe3f1d9e8, 0xe9e3e2e0, 0xf0c0b8a3, 66 }, - { 0xe6f2f2f0, 0xf2e6e4e0, 0xf0c0f1c7, 66 }, - { 0xecf4f4f1, 0xf4ece8e1, 0xf0c1f2ce, 66 }, - { 0xf8f8f9f3, 0xf9f8f1e3, 0xf0c3f4dc, 66 }, - { 0xf8f8faf6, 0xfaf8f2e7, 0xf0c7f8f8, 66 }, - { 0xf9f9fcfc, 0xfcf8f4ee, 0xf0cff8f8, 66 }, - { 0xfbfbfcfc, 0xfcf9f9fc, 0xf0def8f8, 66 }, - { 0xfefefcfc, 0xfcfafbfd, 0xf0fcf9f9, 66 }, - { 0xfefefdfd, 0xfdfdfefe, 0xf1fcfbfb, 66 }, - { 0xfefefefe, 0xfefefefe, 0xf3fcfefe, 66 }, - { 0xffffffff, 0xfefefefe, 0xf7fdfefe, 66 }, - { 0xffffffff, 0xfffffffe, 0xfefefeff, 66 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, - { 0x7effffff, 0xffffffff, 0xffffffff, 66 }, - { 0x3c7effff, 0xffffffff, 0xffffff7e, 66 }, - { 0x183c7eff, 0xffffffff, 0xffff7e3c, 66 }, - { 0x183c7e, 0xffffffff, 0xff7e3c18, 66 }, - { 0x183c, 0x7efffeff, 0x7e3c1800, 66 }, - { 0x18, 0x3c7efc7e, 0x3c180000, 66 }, - { 0x0, 0x183c783c, 0x18000000, 66 }, - { 0x0, 0x18244824, 0x18000000, 600 }, - { 0xc, 0x12224422, 0x120c0000, 200 }, - { 0x0, 0x18244824, 0x18000000, 600 }, + { 0xe0000000, 0x0, 0x0, 66 }, + { 0x400e0000, 0x0, 0x0, 66 }, + { 0x400e0, 0x0, 0x0, 66 }, + { 0x40, 0xe000000, 0x0, 66 }, + { 0x3000000, 0x400e000, 0x0, 66 }, + { 0x3003000, 0x400e, 0x0, 66 }, + { 0x3003, 0x4, 0xe00000, 66 }, + { 0x3, 0x300000, 0x400e00, 66 }, + { 0x0, 0x300300, 0x400e00, 66 }, + { 0x1c000000, 0x300, 0x30400e00, 66 }, + { 0x401c000, 0x0, 0x30430e00, 66 }, + { 0x401c, 0x0, 0x430e30, 66 }, + { 0x4, 0x1c00000, 0x430e30, 66 }, + { 0x0, 0x401c00, 0x430e30, 66 }, + { 0x800000, 0x401, 0xc0430e30, 66 }, + { 0x800800, 0x0, 0x405f0e30, 66 }, + { 0x800800, 0x80000000, 0x470ff0, 66 }, + { 0x800800, 0x80080000, 0x470ff0, 66 }, + { 0x800, 0x80080080, 0x470ff0, 66 }, + { 0x38000000, 0x80080080, 0x8470ff0, 66 }, + { 0x10038000, 0x80080, 0x8478ff0, 66 }, + { 0x10038, 0x80, 0x8478ff8, 66 }, + { 0x700010, 0x3800080, 0x8478ff8, 66 }, + { 0x400700, 0x1003880, 0x8478ff8, 66 }, + { 0x400, 0x70001083, 0x88478ff8, 66 }, + { 0xf000000, 0x40070081, 0x87f8ff8, 66 }, + { 0xf000, 0x400f1, 0x87f8ff8, 66 }, + { 0x8000000f, 0xc1, 0xf7f8ff8, 66 }, + { 0xc0080000, 0xf00081, 0xc7ffff8, 66 }, + { 0x400c0080, 0xf81, 0x87fcfff, 66 }, + { 0x3400c0, 0x8000081, 0xf87fcfff, 66 }, + { 0x20200340, 0xc008081, 0xf87fcfff, 66 }, + { 0x38220200, 0x3400c089, 0xf87fcfff, 66 }, + { 0x38220, 0x2003408d, 0xf8ffcfff, 66 }, + { 0x86100038, 0x220240bd, 0xf8ffcfff, 66 }, + { 0xec186100, 0x38260ad, 0xfbffcfff, 66 }, + { 0x3ec186, 0x100078af, 0xfaffffff, 66 }, + { 0x114003ec, 0x186178af, 0xfaffffff, 66 }, + { 0x3b411400, 0x3ec1febf, 0xfaffffff, 66 }, + { 0x143b411, 0x4ec3febf, 0xfbffffff, 66 }, + { 0xc040143b, 0x4fd7febf, 0xfbffffff, 66 }, + { 0xc60c0439, 0x4ff7ffff, 0xfbffffff, 66 }, + { 0x33c60f9, 0x4ff7ffff, 0xffffffff, 66 }, + { 0x3cbc33ff, 0x4ff7ffff, 0xffffffff, 66 }, + { 0x8ffbff, 0x7ff7ffff, 0xffffffff, 66 }, + { 0xf0cffbff, 0xfff7ffff, 0xffffffff, 66 }, + { 0xfe1fffff, 0xffffffff, 0xffffffff, 66 }, + { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, + { 0x7fffffff, 0xffffffff, 0xfffff7ff, 66 }, + { 0x3fe7ffff, 0xffffffff, 0xff7ff3fe, 66 }, + { 0x1fc3fe7f, 0xfffffff7, 0xff3fe1fc, 66 }, + { 0xf81fc3f, 0xe7ff7ff3, 0xfe1fc0f8, 66 }, + { 0x500f81f, 0xc3fe3fe1, 0xfc0f8070, 66 }, + { 0x500f, 0x81fc1fc0, 0xf8070020, 66 }, + { 0x5, 0xf80f80, 0x70020000, 66 }, + { 0x5, 0xa80880, 0x50020000, 600 }, + { 0xd812, 0x41040880, 0x50020000, 200 }, + { 0x5, 0xa80880, 0x50020000, 600 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_ATMEGA[][4] = { - { 0x18181818, 0x18181818, 0x18181800, 66 }, - { 0x183c183c, 0x183c183c, 0x183c1800, 66 }, - { 0x5a3c187e, 0x187e187e, 0x183c5a00, 66 }, - { 0x5a3c997e, 0x18ff187e, 0x993c5a81, 66 }, - { 0x5a18995a, 0x18db185a, 0x99185a81, 66 }, - { 0x18189918, 0x18991818, 0x99181881, 66 }, - { 0x18181818, 0x18181818, 0x18181800, 66 }, + { 0x0, 0xffeffe0, 0x0, 66 }, + { 0x55, 0x4ffeffe5, 0x54000000, 66 }, + { 0x95255, 0x4ffeffe5, 0x54952000, 66 }, + { 0x24995255, 0x4ffeffe5, 0x54952249, 66 }, + { 0x24995200, 0xffeffe0, 0x952249, 66 }, + { 0x24900000, 0xffeffe0, 0x249, 66 }, + { 0x0, 0xffeffe0, 0x0, 66 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_LED_BLINK_HORIZONTAL[][4] = { - { 0x1c2232, 0x327f1414, 0x14100000, 1000 }, - { 0x1c3e2e, 0x2e7f1414, 0x14100000, 1000 }, - { 0x1c2232, 0x327f1414, 0x14100000, 1000 }, - { 0x1c3e2e, 0x2e7f1414, 0x14100000, 1000 }, + { 0x403c047, 0x84405fc3, 0xc0040000, 1000 }, + { 0x403c07f, 0x87c067c3, 0xc0040000, 1000 }, + { 0x403c047, 0x84405fc3, 0xc0040000, 1000 }, + { 0x403c07f, 0x87c067c3, 0xc0040000, 1000 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_LED_BLINK_VERTICAL[][4] = { - { 0x101efd, 0x11711e10, 0x0, 1000 }, - { 0x101ef3, 0x1f7f1e10, 0x0, 1000 }, - { 0x101efd, 0x11711e10, 0x0, 1000 }, - { 0x101ef3, 0x1f7f1e10, 0x0, 1000 }, + { 0x1c022032, 0x3207f01, 0x40140100, 1000 }, + { 0x1c03e02e, 0x2e07f01, 0x40140100, 1000 }, + { 0x1c022032, 0x3207f01, 0x40140100, 1000 }, + { 0x1c03e02e, 0x2e07f01, 0x40140100, 1000 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_ARROWS_COMPASS[][4] = { - { 0x8, 0x142a0808, 0x8000000, 500 }, - { 0xe, 0x20a1020, 0x0, 500 }, - { 0x8, 0x47a0408, 0x0, 500 }, - { 0x20, 0x100a020e, 0x0, 500 }, - { 0x808, 0x82a1408, 0x0, 500 }, - { 0x2, 0x4282038, 0x0, 500 }, - { 0x8, 0x102f1008, 0x0, 500 }, - { 0x38, 0x20280402, 0x0, 500 }, + { 0x4008, 0x1780800, 0x40000000, 500 }, + { 0x1c010, 0x1400200, 0x10000000, 500 }, + { 0x400a, 0x1500400, 0x40040000, 500 }, + { 0x7001, 0x500801, 0x0, 500 }, + { 0x4002, 0x3d00200, 0x40000000, 500 }, + { 0x10008, 0x500100, 0x70000000, 500 }, + { 0x4004004, 0x1500a00, 0x40000000, 500 }, + { 0x1002, 0x1401001, 0xc0000000, 500 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_AUDIO_WAVEFORM[][4] = { - { 0xfe00e000, 0x8000e000, 0xf800e000, 100 }, - { 0xf800e000, 0xc000f000, 0xfe00f000, 100 }, - { 0xf000e000, 0x8000c000, 0xfc00fc00, 100 }, - { 0xc000c000, 0x8000f000, 0xc000fe00, 100 }, - { 0xf0008000, 0xc000e000, 0xf000fc00, 100 }, - { 0xfc00e000, 0xc000f000, 0xfc00e000, 100 }, - { 0xfe00f000, 0xf800e000, 0xf000f800, 100 }, - { 0xff00e000, 0xc000e000, 0xfc00ff00, 100 }, - { 0xf800f000, 0xfe00c000, 0xf000fe00, 100 }, - { 0xfc00e000, 0xf000c000, 0xf000f800, 100 }, + { 0x80080, 0x808808a, 0x2aa2aaaa, 100 }, + { 0x800, 0x880882aa, 0x2aaaaaaa, 100 }, + { 0x0, 0xa00a80aa, 0xaa2aaaa, 100 }, + { 0x200, 0x20020220, 0x22a2aaaa, 100 }, + { 0x0, 0x200280a8, 0x2a8aaaaa, 100 }, + { 0x80, 0x8808828a, 0x2aaaaaaa, 100 }, + { 0x80080, 0x882a8aa, 0xaaaaaaaa, 100 }, + { 0x80280280, 0xa80a80aa, 0x2aaaaaaa, 100 }, + { 0x8208, 0x2882a8aa, 0x8aaaaaaa, 100 }, + { 0x80, 0x80288aa, 0x8aaaaaaa, 100 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_BATTERY[][4] = { - { 0x7f414141, 0x41414141, 0x4141771c, 500 }, - { 0x7f415d41, 0x41414141, 0x4141771c, 500 }, - { 0x7f415d41, 0x5d414141, 0x4141771c, 500 }, - { 0x7f415d41, 0x5d415d41, 0x4141771c, 500 }, - { 0x7f415d41, 0x5d415d41, 0x5d41771c, 500 }, + { 0xffe80280, 0x38018038, 0x2ffe000, 500 }, + { 0xffe802a0, 0x3a01a038, 0x2ffe000, 500 }, + { 0xffe802a8, 0x3a81a838, 0x2ffe000, 500 }, + { 0xffe802aa, 0x3aa1aa38, 0x2ffe000, 500 }, + { 0xffe802aa, 0xbaa9aab8, 0x2ffe000, 500 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_BOUNCING_BALL[][4] = { - { 0x0, 0x0, 0x182418, 100 }, - { 0x0, 0x182424, 0x18000000, 100 }, - { 0x18, 0x24241800, 0x0, 100 }, - { 0x1824, 0x24180000, 0x0, 200 }, - { 0x18, 0x24241800, 0x0, 100 }, - { 0x0, 0x182424, 0x18000000, 100 }, - { 0x0, 0x0, 0x182418, 100 }, - { 0x0, 0x182424, 0x18000000, 100 }, - { 0x18, 0x24241800, 0x0, 100 }, - { 0x1824, 0x24180000, 0x0, 200 }, - { 0x18, 0x24241800, 0x0, 100 }, - { 0x0, 0x182424, 0x18000000, 100 }, + { 0x0, 0x20050050, 0x2000000, 100 }, + { 0x3, 0x480480, 0x30000000, 100 }, + { 0xc, 0x1201200, 0xc0000000, 100 }, + { 0x18, 0x2402401, 0x80000000, 200 }, + { 0xc, 0x1201200, 0xc0000000, 100 }, + { 0x3, 0x480480, 0x30000000, 100 }, + { 0x0, 0x20050050, 0x2000000, 100 }, + { 0x3, 0x480480, 0x30000000, 100 }, + { 0xc, 0x1201200, 0xc0000000, 100 }, + { 0x18, 0x2402401, 0x80000000, 200 }, + { 0xc, 0x1201200, 0xc0000000, 100 }, + { 0x3, 0x480480, 0x30000000, 100 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_BUG[][4] = { - { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, - { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, - { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, - { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, - { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, - { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, - { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, - { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, + { 0x8037fc20, 0x8a0b60c2, 0xa8a0b7fc, 200 }, + { 0xc013fe10, 0x4d053061, 0x54d053fe, 200 }, + { 0x8037fc20, 0x8a0b60c2, 0xa8a0b7fc, 200 }, + { 0xc013fe10, 0x4d053061, 0x54d053fe, 200 }, + { 0x8037fc20, 0x8a0b60c2, 0xa8a0b7fc, 200 }, + { 0xc013fe10, 0x4d053061, 0x54d053fe, 200 }, + { 0x8037fc20, 0x8a0b60c2, 0xa8a0b7fc, 200 }, + { 0xc013fe10, 0x4d053061, 0x54d053fe, 200 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_CHECK[][4] = { - { 0x0, 0x0, 0x0, 100 }, - { 0x1000, 0x0, 0x0, 100 }, - { 0x1020, 0x0, 0x0, 100 }, - { 0x1020, 0x40000000, 0x0, 100 }, - { 0x1020, 0x40200000, 0x0, 100 }, - { 0x1020, 0x40201000, 0x0, 100 }, - { 0x1020, 0x40201008, 0x0, 100 }, - { 0x1020, 0x40201008, 0x4000000, 100 }, - { 0x1020, 0x40201008, 0x4020000, 100 }, + { 0x0, 0x0, 0x0, 100 }, + { 0x0, 0x2000, 0x0, 100 }, + { 0x0, 0x2001, 0x0, 100 }, + { 0x0, 0x2001, 0x80000, 100 }, + { 0x0, 0x2001, 0x40080000, 100 }, + { 0x0, 0x2201, 0x40080000, 100 }, + { 0x0, 0x102201, 0x40080000, 100 }, + { 0x0, 0x80102201, 0x40080000, 100 }, + { 0x400, 0x80102201, 0x40080000, 100 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_CLOUD[][4] = { - { 0x304c8281, 0x818a8482, 0x82844830, 600 }, - { 0x30488482, 0x81818a84, 0x82824c30, 600 }, + { 0x18025842, 0x44428018, 0x14023fc, 600 }, + { 0xc012c21, 0x24228018, 0x14023fc, 600 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_DOWNLOAD[][4] = { - { 0xe08088, 0x90af9088, 0x80e00000, 200 }, - { 0xe08090, 0xa0dea090, 0x80e00000, 200 }, + { 0x4004004, 0x1500a04, 0x444047fc, 200 }, + { 0x4004, 0x401504, 0xa44447fc, 200 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_DVD[][4] = { - { 0x8, 0x0, 0x0, 600 }, - { 0x0, 0x10000000, 0x0, 600 }, - { 0x0, 0x200000, 0x0, 600 }, - { 0x0, 0x4000, 0x0, 600 }, - { 0x0, 0x80, 0x0, 600 }, - { 0x0, 0x0, 0x40000000, 600 }, - { 0x0, 0x0, 0x200000, 600 }, - { 0x0, 0x0, 0x1000, 600 }, - { 0x0, 0x0, 0x8, 600 }, - { 0x0, 0x0, 0x400, 600 }, - { 0x0, 0x0, 0x20000, 600 }, - { 0x0, 0x0, 0x1000000, 600 }, - { 0x0, 0x2, 0x0, 600 }, - { 0x0, 0x400, 0x0, 600 }, - { 0x0, 0x80000, 0x0, 600 }, - { 0x0, 0x10000000, 0x0, 600 }, - { 0x20, 0x0, 0x0, 600 }, - { 0x4000, 0x0, 0x0, 600 }, - { 0x800000, 0x0, 0x0, 600 }, - { 0x40000000, 0x0, 0x0, 600 }, - { 0x200000, 0x0, 0x0, 600 }, - { 0x1000, 0x0, 0x0, 600 }, - { 0x8, 0x0, 0x0, 600 }, - { 0x0, 0x4000000, 0x0, 600 }, - { 0x0, 0x20000, 0x0, 600 }, - { 0x0, 0x100, 0x0, 600 }, - { 0x0, 0x2, 0x0, 600 }, - { 0x0, 0x0, 0x4000000, 600 }, - { 0x0, 0x0, 0x80000, 600 }, - { 0x0, 0x0, 0x1000, 600 }, - { 0x0, 0x0, 0x20, 600 }, - { 0x0, 0x0, 0x4000, 600 }, - { 0x0, 0x0, 0x800000, 600 }, - { 0x0, 0x0, 0x40000000, 600 }, - { 0x0, 0x20, 0x0, 600 }, - { 0x0, 0x1000, 0x0, 600 }, - { 0x0, 0x80000, 0x0, 600 }, - { 0x0, 0x4000000, 0x0, 600 }, - { 0x2, 0x0, 0x0, 600 }, - { 0x100, 0x0, 0x0, 600 }, - { 0x20000, 0x0, 0x0, 600 }, - { 0x4000000, 0x0, 0x0, 600 }, - { 0x80000, 0x0, 0x0, 600 }, - { 0x1000, 0x0, 0x0, 600 }, - { 0x20, 0x0, 0x0, 600 }, - { 0x0, 0x40000000, 0x0, 600 }, - { 0x0, 0x800000, 0x0, 600 }, - { 0x0, 0x4000, 0x0, 600 }, - { 0x0, 0x20, 0x0, 600 }, - { 0x0, 0x0, 0x10000000, 600 }, - { 0x0, 0x0, 0x80000, 600 }, - { 0x0, 0x0, 0x400, 600 }, - { 0x0, 0x0, 0x2, 600 }, - { 0x0, 0x0, 0x100, 600 }, - { 0x0, 0x0, 0x20000, 600 }, - { 0x0, 0x0, 0x4000000, 600 }, - { 0x0, 0x8, 0x0, 600 }, - { 0x0, 0x1000, 0x0, 600 }, - { 0x0, 0x200000, 0x0, 600 }, - { 0x0, 0x40000000, 0x0, 600 }, - { 0x80, 0x0, 0x0, 600 }, - { 0x4000, 0x0, 0x0, 600 }, - { 0x200000, 0x0, 0x0, 600 }, - { 0x10000000, 0x0, 0x0, 600 }, - { 0x80000, 0x0, 0x0, 600 }, - { 0x400, 0x0, 0x0, 600 }, - { 0x2, 0x0, 0x0, 600 }, - { 0x0, 0x1000000, 0x0, 600 }, - { 0x0, 0x20000, 0x0, 600 }, - { 0x0, 0x400, 0x0, 600 }, - { 0x0, 0x8, 0x0, 600 }, - { 0x0, 0x0, 0x10000000, 600 }, - { 0x0, 0x0, 0x200000, 600 }, - { 0x0, 0x0, 0x4000, 600 }, - { 0x0, 0x0, 0x80, 600 }, + { 0x0, 0x1000000, 0x0, 600 }, + { 0x0, 0x800, 0x0, 600 }, + { 0x0, 0x0, 0x40000000, 600 }, + { 0x0, 0x0, 0x20000, 600 }, + { 0x0, 0x0, 0x10, 600 }, + { 0x0, 0x0, 0x8000, 600 }, + { 0x0, 0x0, 0x4000000, 600 }, + { 0x0, 0x20, 0x0, 600 }, + { 0x0, 0x10000, 0x0, 600 }, + { 0x0, 0x20000000, 0x0, 600 }, + { 0x400, 0x0, 0x0, 600 }, + { 0x800000, 0x0, 0x0, 600 }, + { 0x1000, 0x0, 0x0, 600 }, + { 0x2, 0x0, 0x0, 600 }, + { 0x0, 0x400000, 0x0, 600 }, + { 0x0, 0x800, 0x0, 600 }, + { 0x0, 0x1, 0x0, 600 }, + { 0x0, 0x0, 0x200000, 600 }, + { 0x0, 0x0, 0x400, 600 }, + { 0x0, 0x0, 0x800000, 600 }, + { 0x0, 0x4, 0x0, 600 }, + { 0x0, 0x2000, 0x0, 600 }, + { 0x0, 0x1000000, 0x0, 600 }, + { 0x8, 0x0, 0x0, 600 }, + { 0x4000, 0x0, 0x0, 600 }, + { 0x2000000, 0x0, 0x0, 600 }, + { 0x1000, 0x0, 0x0, 600 }, + { 0x0, 0x80000000, 0x0, 600 }, + { 0x0, 0x40000, 0x0, 600 }, + { 0x0, 0x20, 0x0, 600 }, + { 0x0, 0x0, 0x1000000, 600 }, + { 0x0, 0x0, 0x2000, 600 }, + { 0x0, 0x0, 0x4, 600 }, + { 0x0, 0x0, 0x8000, 600 }, + { 0x0, 0x0, 0x10000000, 600 }, + { 0x0, 0x200, 0x0, 600 }, + { 0x0, 0x400000, 0x0, 600 }, + { 0x8, 0x0, 0x0, 600 }, + { 0x10000, 0x0, 0x0, 600 }, + { 0x20000000, 0x0, 0x0, 600 }, + { 0x40000, 0x0, 0x0, 600 }, + { 0x80, 0x0, 0x0, 600 }, + { 0x0, 0x4000000, 0x0, 600 }, + { 0x0, 0x2000, 0x0, 600 }, + { 0x0, 0x1, 0x0, 600 }, + { 0x0, 0x0, 0x80000, 600 }, + { 0x0, 0x0, 0x40, 600 }, + { 0x0, 0x0, 0x20000, 600 }, + { 0x0, 0x0, 0x10000000, 600 }, + { 0x0, 0x80, 0x0, 600 }, + { 0x0, 0x40000, 0x0, 600 }, + { 0x0, 0x20000000, 0x0, 600 }, + { 0x100, 0x0, 0x0, 600 }, + { 0x200000, 0x0, 0x0, 600 }, + { 0x400, 0x0, 0x0, 600 }, + { 0x0, 0x80000000, 0x0, 600 }, + { 0x0, 0x100000, 0x0, 600 }, + { 0x0, 0x200, 0x0, 600 }, + { 0x0, 0x0, 0x40000000, 600 }, + { 0x0, 0x0, 0x80000, 600 }, + { 0x0, 0x0, 0x100, 600 }, + { 0x0, 0x0, 0x200000, 600 }, + { 0x0, 0x4, 0x0, 600 }, + { 0x0, 0x8000, 0x0, 600 }, + { 0x0, 0x4000000, 0x0, 600 }, + { 0x20, 0x0, 0x0, 600 }, + { 0x10000, 0x0, 0x0, 600 }, + { 0x8000000, 0x0, 0x0, 600 }, + { 0x4000, 0x0, 0x0, 600 }, + { 0x2, 0x0, 0x0, 600 }, + { 0x0, 0x100000, 0x0, 600 }, + { 0x0, 0x80, 0x0, 600 }, + { 0x0, 0x0, 0x4000000, 600 }, + { 0x0, 0x0, 0x2000, 600 }, + { 0x0, 0x0, 0x1, 600 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_HEARTBEAT_LINE[][4] = { - { 0x10101000, 0x0, 0x0, 66 }, - { 0x101060, 0x80000000, 0x0, 66 }, - { 0x1060, 0x80601000, 0x0, 66 }, - { 0x60, 0x80601806, 0x0, 66 }, - { 0x40, 0x80601806, 0x1060000, 66 }, - { 0x0, 0x80601806, 0x10e1010, 66 }, - { 0x0, 0x601806, 0x10e1010, 66 }, - { 0x0, 0x201806, 0x10e1010, 66 }, - { 0x0, 0x1806, 0x10e1010, 66 }, - { 0x0, 0x806, 0x10e1010, 66 }, - { 0x0, 0x6, 0x10e1010, 66 }, - { 0x0, 0x2, 0x10e1010, 66 }, - { 0x0, 0x0, 0x10e1010, 66 }, - { 0x0, 0x0, 0xe1010, 66 }, - { 0x0, 0x0, 0xc1010, 66 }, - { 0x0, 0x0, 0x81010, 66 }, - { 0x0, 0x0, 0x1010, 66 }, - { 0x0, 0x0, 0x10, 66 }, - { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0xe000, 0x0, 66 }, + { 0x0, 0x6001, 0x100080, 66 }, + { 0x0, 0x2201, 0x40140080, 66 }, + { 0x1001, 0x200201, 0x40140080, 66 }, + { 0x801401, 0x40200200, 0x40140080, 66 }, + { 0x801401, 0x40240230, 0x40040080, 66 }, + { 0x801401, 0x40240230, 0x40040000, 66 }, + { 0x801401, 0x40240230, 0x40000000, 66 }, + { 0x801401, 0x40240230, 0x0, 66 }, + { 0x801401, 0x40240030, 0x0, 66 }, + { 0x801401, 0x40040030, 0x0, 66 }, + { 0x801400, 0x40040030, 0x0, 66 }, + { 0x800400, 0x40040030, 0x0, 66 }, + { 0x400, 0x40040030, 0x0, 66 }, + { 0x0, 0x40040030, 0x0, 66 }, + { 0x0, 0x40030, 0x0, 66 }, + { 0x0, 0x30, 0x0, 66 }, + { 0x0, 0x10, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_HEARTBEAT[][4] = { - { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, - { 0x7effffff, 0xffffffff, 0xffffffff, 66 }, - { 0x3c7effff, 0xffffffff, 0xffffff7e, 66 }, - { 0x183c7eff, 0xffffffff, 0xffff7e3c, 66 }, - { 0x183c7e, 0xffffffff, 0xff7e3c18, 66 }, - { 0x183c, 0x7efffeff, 0x7e3c1800, 66 }, - { 0x18, 0x3c7efc7e, 0x3c180000, 66 }, - { 0x0, 0x183c783c, 0x18000000, 66 }, - { 0x0, 0x18244824, 0x18000000, 600 }, - { 0xc, 0x12224422, 0x120c0000, 200 }, - { 0x0, 0x18244824, 0x18000000, 600 }, + { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, + { 0x7fffffff, 0xffffffff, 0xfffff7ff, 66 }, + { 0x3fe7ffff, 0xffffffff, 0xff7ff3fe, 66 }, + { 0x1fc3fe7f, 0xfffffff7, 0xff3fe1fc, 66 }, + { 0xf81fc3f, 0xe7ff7ff3, 0xfe1fc0f8, 66 }, + { 0x500f81f, 0xc3fe3fe1, 0xfc0f8070, 66 }, + { 0x500f, 0x81fc1fc0, 0xf8070020, 66 }, + { 0x5, 0xf80f80, 0x70020000, 66 }, + { 0x5, 0xa80880, 0x50020000, 600 }, + { 0xd812, 0x41040880, 0x50020000, 200 }, + { 0x5, 0xa80880, 0x50020000, 600 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_INFINITY_LOOP_LOADER[][4] = { - { 0x1c202020, 0x10080400, 0x0, 100 }, - { 0x1c222020, 0x10080000, 0x0, 100 }, - { 0x1c222220, 0x10000000, 0x0, 100 }, - { 0x1c222222, 0x0, 0x0, 100 }, - { 0x1c222202, 0x4000000, 0x0, 100 }, - { 0x1c220202, 0x4080000, 0x0, 100 }, - { 0x1c020202, 0x4081000, 0x0, 100 }, - { 0xc020202, 0x4081020, 0x0, 100 }, - { 0x4020202, 0x4081020, 0x20000000, 100 }, - { 0x20202, 0x4081020, 0x20200000, 100 }, - { 0x202, 0x4081020, 0x20201000, 100 }, - { 0x2, 0x4081020, 0x20201800, 100 }, - { 0x0, 0x4081020, 0x20201c00, 100 }, - { 0x0, 0x81020, 0x20221c00, 100 }, - { 0x0, 0x1020, 0x22221c00, 100 }, - { 0x0, 0x22, 0x22221c00, 100 }, - { 0x0, 0x402, 0x22221c00, 100 }, - { 0x0, 0x80402, 0x2221c00, 100 }, - { 0x0, 0x10080402, 0x2021c00, 100 }, - { 0x20, 0x10080402, 0x2020c00, 100 }, - { 0x2020, 0x10080402, 0x2020400, 100 }, - { 0x202020, 0x10080402, 0x2020000, 100 }, - { 0x10202020, 0x10080402, 0x2000000, 100 }, - { 0x18202020, 0x10080402, 0x0, 100 }, + { 0x82, 0x8408807, 0x0, 100 }, + { 0x40080, 0x8408807, 0x0, 100 }, + { 0x60080, 0x8008807, 0x0, 100 }, + { 0x70080, 0x8008007, 0x0, 100 }, + { 0x70088, 0x8008006, 0x0, 100 }, + { 0x70088, 0x8408004, 0x0, 100 }, + { 0x70088, 0x8408200, 0x0, 100 }, + { 0x70088, 0x8400200, 0x10000000, 100 }, + { 0x70088, 0x400200, 0x18000000, 100 }, + { 0x70008, 0x400200, 0x1c000000, 100 }, + { 0x30008, 0x400220, 0x1c000000, 100 }, + { 0x10008, 0x420220, 0x1c000000, 100 }, + { 0x8, 0x20420220, 0x1c000000, 100 }, + { 0x400, 0x20420220, 0x1c000000, 100 }, + { 0xc00, 0x20020220, 0x1c000000, 100 }, + { 0x1c00, 0x20020020, 0x1c000000, 100 }, + { 0x1c02, 0x20020020, 0xc000000, 100 }, + { 0x1c02, 0x20420020, 0x4000000, 100 }, + { 0x1c02, 0x20420820, 0x0, 100 }, + { 0x1c02, 0x20420801, 0x0, 100 }, + { 0x1c02, 0x20400803, 0x0, 100 }, + { 0x1c02, 0x400807, 0x0, 100 }, + { 0x1802, 0x408807, 0x0, 100 }, + { 0x1002, 0x8408807, 0x0, 100 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_LOAD_CLOCK[][4] = { - { 0x800, 0x4d0000, 0x8000000, 100 }, - { 0x800, 0x490400, 0x8000000, 100 }, - { 0x800, 0x490800, 0x8000000, 100 }, - { 0x800, 0x491000, 0x8000000, 100 }, - { 0x800, 0x590000, 0x8000000, 100 }, - { 0x800, 0x10490000, 0x8000000, 100 }, - { 0x800, 0x8490000, 0x8000000, 100 }, - { 0x800, 0x4490000, 0x8000000, 100 }, + { 0x4000004, 0x2480000, 0x40000, 100 }, + { 0x4000002, 0x2480000, 0x40000, 100 }, + { 0x4000000, 0x2680000, 0x40000, 100 }, + { 0x4000000, 0x2480200, 0x40000, 100 }, + { 0x4000000, 0x2480400, 0x40000, 100 }, + { 0x4000000, 0x2480800, 0x40000, 100 }, + { 0x4000000, 0x2c80000, 0x40000, 100 }, + { 0x4000008, 0x2480000, 0x40000, 100 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_LOAD[][4] = { - { 0x822, 0x410122, 0x8000000, 100 }, - { 0x822, 0x410022, 0xc000000, 200 }, - { 0x822, 0x410022, 0x18000000, 200 }, - { 0x822, 0x414022, 0x8000000, 200 }, - { 0x822, 0x40410022, 0x8000000, 200 }, - { 0x1822, 0x410022, 0x8000000, 200 }, - { 0xc22, 0x410022, 0x8000000, 200 }, - { 0x822, 0x1410022, 0x8000000, 200 }, + { 0x6011000, 0x2080001, 0x10040000, 100 }, + { 0x4011000, 0x82080001, 0x10040000, 200 }, + { 0x4011000, 0x2080081, 0x10040000, 200 }, + { 0x4011000, 0x2080001, 0x10060000, 200 }, + { 0x4011000, 0x2080001, 0x100c0000, 200 }, + { 0x4011000, 0x2082001, 0x10040000, 200 }, + { 0x4011020, 0x2080001, 0x10040000, 200 }, + { 0xc011000, 0x2080001, 0x10040000, 200 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_LOCK[][4] = { - { 0xf88e, 0x89898ef8, 0x0, 500 }, - { 0xf888, 0x88888ef9, 0x1060000, 500 }, + { 0xc012012, 0x3f02102, 0x102103f0, 500 }, + { 0x1802402, 0x43f02102, 0x102103f0, 500 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_NOTIFICATION[][4] = { - { 0x60504c, 0x42c3424c, 0x50600000, 500 }, - { 0x60504c, 0x42c3424c, 0x50620908, 500 }, - { 0x60504c, 0x42c3424c, 0x50600000, 500 }, - { 0x60504c, 0x42c3424c, 0x50620908, 500 }, + { 0x400e011, 0x1102084, 0x47fc040, 500 }, + { 0x420e411, 0x1132084, 0x47fc040, 500 }, + { 0x400e011, 0x1102084, 0x47fc040, 500 }, + { 0x420e411, 0x1132084, 0x47fc040, 500 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_OPENSOURCE[][4] = { - { 0x0, 0x0, 0x0, 66 }, - { 0x0, 0x0, 0x1c, 66 }, - { 0x0, 0x0, 0x1c22, 66 }, - { 0x0, 0x0, 0x1c2222, 66 }, - { 0x0, 0x0, 0x1c22221c, 66 }, - { 0x0, 0x1c, 0x22221c00, 66 }, - { 0x0, 0x1c22, 0x221c003e, 66 }, - { 0x0, 0x1c2222, 0x1c003e0a, 66 }, - { 0x0, 0x1c22221c, 0x3e0a0a, 66 }, - { 0x1c, 0x22221c00, 0x3e0a0a04, 66 }, - { 0x1c22, 0x221c003e, 0xa0a0400, 66 }, - { 0x1c2222, 0x1c003e0a, 0xa04003e, 66 }, - { 0x1c22221c, 0x3e0a0a, 0x4003e2a, 66 }, - { 0x22221c00, 0x3e0a0a04, 0x3e2a2a, 66 }, - { 0x221c003e, 0xa0a0400, 0x3e2a2a22, 66 }, - { 0x1c003e0a, 0xa04003e, 0x2a2a2200, 66 }, - { 0x3e0a0a, 0x4003e2a, 0x2a22003e, 66 }, - { 0x3e0a0a04, 0x3e2a2a, 0x22003e04, 66 }, - { 0xa0a0400, 0x3e2a2a22, 0x3e0408, 66 }, - { 0xa04003e, 0x2a2a2200, 0x3e04083e, 66 }, - { 0x4003e2a, 0x2a22003e, 0x4083e00, 66 }, - { 0x3e2a2a, 0x22003e04, 0x83e0000, 66 }, - { 0x3e2a2a22, 0x3e0408, 0x3e000000, 66 }, - { 0x2a2a2200, 0x3e04083e, 0x0, 66 }, - { 0x2a22003e, 0x4083e00, 0x0, 66 }, - { 0x22003e04, 0x83e0000, 0x24, 66 }, - { 0x3e0408, 0x3e000000, 0x242a, 66 }, - { 0x3e04083e, 0x0, 0x242a2a, 66 }, - { 0x4083e00, 0x0, 0x242a2a12, 66 }, - { 0x83e0000, 0x24, 0x2a2a1200, 66 }, - { 0x3e000000, 0x242a, 0x2a12001c, 66 }, - { 0x0, 0x242a2a, 0x12001c22, 66 }, - { 0x0, 0x242a2a12, 0x1c2222, 66 }, - { 0x24, 0x2a2a1200, 0x1c22221c, 66 }, - { 0x242a, 0x2a12001c, 0x22221c00, 66 }, - { 0x242a2a, 0x12001c22, 0x221c001e, 66 }, - { 0x242a2a12, 0x1c2222, 0x1c001e20, 66 }, - { 0x2a2a1200, 0x1c22221c, 0x1e2020, 66 }, - { 0x2a12001c, 0x22221c00, 0x1e20201e, 66 }, - { 0x12001c22, 0x221c001e, 0x20201e00, 66 }, - { 0x1c2222, 0x1c001e20, 0x201e003e, 66 }, - { 0x1c22221c, 0x1e2020, 0x1e003e0a, 66 }, - { 0x22221c00, 0x1e20201e, 0x3e0a0a, 66 }, - { 0x221c001e, 0x20201e00, 0x3e0a0a34, 66 }, - { 0x1c001e20, 0x201e003e, 0xa0a3400, 66 }, - { 0x1e2020, 0x1e003e0a, 0xa34001c, 66 }, - { 0x1e20201e, 0x3e0a0a, 0x34001c22, 66 }, - { 0x20201e00, 0x3e0a0a34, 0x1c2222, 66 }, - { 0x201e003e, 0xa0a3400, 0x1c222222, 66 }, - { 0x1e003e0a, 0xa34001c, 0x22222200, 66 }, - { 0x3e0a0a, 0x34001c22, 0x2222003e, 66 }, - { 0x3e0a0a34, 0x1c2222, 0x22003e2a, 66 }, - { 0xa0a3400, 0x1c222222, 0x3e2a2a, 66 }, - { 0xa34001c, 0x22222200, 0x3e2a2a22, 66 }, - { 0x34001c22, 0x2222003e, 0x2a2a2200, 66 }, - { 0x1c2222, 0x22003e2a, 0x2a220000, 66 }, - { 0x1c222222, 0x3e2a2a, 0x22000000, 66 }, - { 0x22222200, 0x3e2a2a22, 0x0, 66 }, - { 0x2222003e, 0x2a2a2200, 0x0, 66 }, - { 0x22003e2a, 0x2a220000, 0x0, 66 }, - { 0x3e2a2a, 0x22000000, 0x22, 66 }, - { 0x3e2a2a22, 0x0, 0x223e, 66 }, - { 0x2a2a2200, 0x0, 0x223e22, 66 }, - { 0x2a220000, 0x0, 0x223e2200, 66 }, - { 0x22000000, 0x22, 0x3e220024, 66 }, - { 0x0, 0x223e, 0x2200242a, 66 }, - { 0x0, 0x223e22, 0x242a2a, 66 }, - { 0x0, 0x223e2200, 0x242a2a12, 66 }, - { 0x22, 0x3e220024, 0x2a2a1200, 66 }, - { 0x223e, 0x2200242a, 0x2a120000, 66 }, - { 0x223e22, 0x242a2a, 0x12000000, 66 }, - { 0x223e2200, 0x242a2a12, 0x0, 66 }, - { 0x3e220024, 0x2a2a1200, 0x0, 66 }, - { 0x2200242a, 0x2a120000, 0x0, 66 }, - { 0x242a2a, 0x12000000, 0xc, 66 }, - { 0x242a2a12, 0x0, 0xc12, 66 }, - { 0x2a2a1200, 0x0, 0xc1224, 66 }, - { 0x2a120000, 0x0, 0xc122412, 66 }, - { 0x12000000, 0xc, 0x1224120c, 66 }, - { 0x0, 0xc12, 0x24120c00, 66 }, - { 0x0, 0xc1224, 0x120c0000, 66 }, - { 0x0, 0xc122412, 0xc000000, 66 }, - { 0xc, 0x1224120c, 0x0, 66 }, - { 0xc12, 0x24120c00, 0x0, 66 }, - { 0xc1224, 0x120c0000, 0x0, 66 }, - { 0xc122412, 0xc000000, 0x0, 66 }, - { 0x1224120c, 0x0, 0x0, 66 }, - { 0x24120c00, 0x0, 0x0, 66 }, - { 0x120c0000, 0x0, 0x0, 66 }, - { 0xc000000, 0x0, 0x0, 66 }, - { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0x10010010, 0x0, 66 }, + { 0x100, 0x20020020, 0x1000000, 66 }, + { 0x300, 0x40040040, 0x3000000, 66 }, + { 0x600, 0x90090090, 0x6000000, 66 }, + { 0xc01, 0x20120120, 0xc000000, 66 }, + { 0x1902, 0x50250250, 0x19000000, 66 }, + { 0x3304, 0xa04b04a0, 0x32000000, 66 }, + { 0x6709, 0x40970940, 0x64000000, 66 }, + { 0xce12, 0x912e1280, 0xc8000000, 66 }, + { 0x19c25, 0x225c2501, 0x90000000, 66 }, + { 0x3394a, 0x54b94a13, 0x21000000, 66 }, + { 0x67394, 0xa9739426, 0x43000000, 66 }, + { 0xce729, 0x42e7284c, 0x87000000, 66 }, + { 0x9cf52, 0x85ce5089, 0xf000000, 66 }, + { 0x39ea5, 0xb9ca102, 0x1e000000, 66 }, + { 0x73d4a, 0x17394214, 0x3d000000, 66 }, + { 0xe7a94, 0x3e728428, 0x7a000000, 66 }, + { 0xcf428, 0x6ce50840, 0xf4000000, 66 }, + { 0x9e950, 0xd9cb1091, 0xe9000000, 66 }, + { 0x3d2a1, 0xa3962123, 0xd2000000, 66 }, + { 0x7a443, 0x472c4247, 0xa4000000, 66 }, + { 0xf4886, 0x8e58848f, 0x48000000, 66 }, + { 0xe900d, 0xcb0090e, 0x90000000, 66 }, + { 0xd201a, 0x960120d, 0x20000000, 66 }, + { 0xa4034, 0x12c0240a, 0x41000000, 66 }, + { 0x48168, 0x25814804, 0x83000000, 66 }, + { 0x903d0, 0x4b039009, 0x7000000, 66 }, + { 0x207a0, 0x86062012, 0xe000000, 66 }, + { 0x40e41, 0xc0c4024, 0x1c000000, 66 }, + { 0x81c82, 0x18198058, 0x38000000, 66 }, + { 0x3904, 0x203200a0, 0x71000000, 66 }, + { 0x7308, 0x40640140, 0xe3000000, 66 }, + { 0xe610, 0x90c90291, 0xc6000000, 66 }, + { 0x1cc21, 0x21920523, 0x8c000000, 66 }, + { 0x39942, 0x53250a57, 0x18000000, 66 }, + { 0x73284, 0xa64a14ae, 0x31000000, 66 }, + { 0xe6409, 0x4c94294c, 0x63000000, 66 }, + { 0xcc912, 0x99295298, 0xc6000000, 66 }, + { 0x99225, 0x2252a521, 0x8c000000, 66 }, + { 0x3254a, 0x54a54a53, 0x19000000, 66 }, + { 0x64b94, 0xa94b94a6, 0x32000000, 66 }, + { 0xc9729, 0x4297294c, 0x64000000, 66 }, + { 0x92e52, 0x952e5298, 0xc9000000, 66 }, + { 0x25ca5, 0x2a5ca521, 0x92000000, 66 }, + { 0x4b84a, 0x54b94a53, 0x24000000, 66 }, + { 0x97194, 0xa97294a6, 0x49000000, 66 }, + { 0x2e329, 0x42e4294c, 0x93000000, 66 }, + { 0x5c752, 0x85c85289, 0x27000000, 66 }, + { 0xb8ea5, 0xb90a502, 0x4e000000, 66 }, + { 0x71d4a, 0x17214a14, 0x9d000000, 66 }, + { 0xe3b94, 0x2e439429, 0x3b000000, 66 }, + { 0xc7728, 0x4c872842, 0x77000000, 66 }, + { 0x8ef50, 0x890e5084, 0xef000000, 66 }, + { 0x1dea1, 0x21ca109, 0xde000000, 66 }, + { 0x3bc42, 0x4384203, 0xbc000000, 66 }, + { 0x77884, 0x8708407, 0x78000000, 66 }, + { 0xef008, 0xe0080e, 0xf0000000, 66 }, + { 0xde010, 0x1c0100d, 0xe0000000, 66 }, + { 0xbc020, 0x380200b, 0xc0000000, 66 }, + { 0x78140, 0x7004007, 0x81000000, 66 }, + { 0xf0380, 0x1e01801f, 0x3000000, 66 }, + { 0xe0700, 0x2c02002e, 0x7000000, 66 }, + { 0xc0e00, 0x4804004c, 0xe000000, 66 }, + { 0x81c00, 0x90080088, 0x1d000000, 66 }, + { 0x3901, 0x20110100, 0x3b000000, 66 }, + { 0x7302, 0x40230200, 0x77000000, 66 }, + { 0xe704, 0x80460410, 0xee000000, 66 }, + { 0x1ce09, 0x8c0821, 0xdc000000, 66 }, + { 0x39c12, 0x1181043, 0xb8000000, 66 }, + { 0x73824, 0x2302087, 0x70000000, 66 }, + { 0xe7048, 0x460410e, 0xe0000000, 66 }, + { 0xce090, 0x8c0820d, 0xc0000000, 66 }, + { 0x9c020, 0x180040b, 0x80000000, 66 }, + { 0x38040, 0x13010807, 0x0, 66 }, + { 0x70180, 0x2602101e, 0x0, 66 }, + { 0xe0200, 0x5c04202c, 0x1000000, 66 }, + { 0xc0500, 0xa8084058, 0x2000000, 66 }, + { 0x80a01, 0x501180a0, 0x4000000, 66 }, + { 0x1402, 0xa0220140, 0x8000000, 66 }, + { 0x2805, 0x40440280, 0x10000000, 66 }, + { 0x500a, 0x80880500, 0x20000000, 66 }, + { 0xa015, 0x1100a00, 0x40000000, 66 }, + { 0x1402a, 0x2201400, 0x80000000, 66 }, + { 0x28054, 0x4402801, 0x0, 66 }, + { 0x500a8, 0x8805002, 0x0, 66 }, + { 0xa0050, 0x100a004, 0x0, 66 }, + { 0x400a0, 0x2004008, 0x0, 66 }, + { 0x80040, 0x4008000, 0x0, 66 }, + { 0x80, 0x8000000, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_SPINNING_COIN[][4] = { - { 0x3844, 0x82828244, 0x38000000, 100 }, - { 0x38, 0xc682c638, 0x0, 100 }, - { 0x0, 0x38c63800, 0x0, 100 }, - { 0x0, 0xfe0000, 0x0, 100 }, - { 0x0, 0x38c63800, 0x0, 100 }, - { 0x38, 0xc682c638, 0x0, 100 }, - { 0x3844, 0x82828244, 0x38000000, 100 }, - { 0x38, 0xc682c638, 0x0, 100 }, - { 0x0, 0x38c63800, 0x0, 100 }, - { 0x0, 0xfe0000, 0x0, 100 }, - { 0x0, 0x38c63800, 0x0, 100 }, - { 0x38, 0xc682c638, 0x0, 100 }, + { 0xe011, 0x2082082, 0x81100e0, 100 }, + { 0xe00a, 0x1101101, 0x100a00e0, 100 }, + { 0x4004, 0xa00a00, 0xa0040040, 100 }, + { 0x4004, 0x400400, 0x40040040, 100 }, + { 0x4004, 0xa00a00, 0xa0040040, 100 }, + { 0xe00a, 0x1101101, 0x100a00e0, 100 }, + { 0xe011, 0x2082082, 0x81100e0, 100 }, + { 0xe00a, 0x1101101, 0x100a00e0, 100 }, + { 0x4004, 0xa00a00, 0xa0040040, 100 }, + { 0x4004, 0x400400, 0x40040040, 100 }, + { 0x4004, 0xa00a00, 0xa0040040, 100 }, + { 0xe00a, 0x1101101, 0x100a00e0, 100 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_TETRIS[][4] = { - { 0x1010100, 0x0, 0x0, 66 }, - { 0x2030200, 0x0, 0x0, 66 }, - { 0x4060400, 0x0, 0x0, 66 }, - { 0x80c0800, 0x0, 0x0, 66 }, - { 0x10181000, 0x101, 0x0, 66 }, - { 0x20302000, 0x303, 0x0, 66 }, - { 0x40604000, 0x606, 0x0, 66 }, - { 0x80c08000, 0xc0c, 0x0, 66 }, - { 0x80c08000, 0x1818, 0x0, 66 }, - { 0x80c08001, 0x1013030, 0x0, 66 }, - { 0x80c08002, 0x2036060, 0x0, 66 }, - { 0x80c08004, 0x406c0c0, 0x0, 66 }, - { 0x80c08008, 0x80cc0c0, 0x0, 66 }, - { 0x80c08010, 0x1018c0c0, 0x0, 66 }, - { 0x80c08020, 0x2030c0c0, 0x1000000, 66 }, - { 0x80c08040, 0x4060c0c0, 0x3000000, 66 }, - { 0x80c08080, 0x80c0c0c0, 0x7000000, 66 }, - { 0x80c08080, 0x80c0c0c0, 0xf000000, 66 }, - { 0x80c08080, 0x80c0c0c0, 0x1e000000, 66 }, - { 0x80c08181, 0x81c0c0c0, 0x3c000000, 66 }, - { 0x80c08283, 0x82c0c0c0, 0x78000000, 66 }, - { 0x80c08486, 0x84c0c0c0, 0xf0000000, 66 }, - { 0x80c0888c, 0x88c0c0c0, 0xf0010101, 66 }, - { 0x80c09098, 0x90c0c0c0, 0xf0030202, 66 }, - { 0x80c0a0b0, 0xa0c0c0c0, 0xf0060404, 66 }, - { 0x80c0c0e0, 0xc1c1c1c1, 0xf00c0808, 66 }, - { 0x80c0c0e0, 0xc2c2c2c2, 0xf0181010, 66 }, - { 0x81c0c0e0, 0xc4c4c4c4, 0xf0302020, 66 }, - { 0x83c1c0e0, 0xc8c8c8c8, 0xf0604040, 66 }, - { 0x86c3c0e0, 0xd0d0d0d0, 0xf0c08080, 66 }, - { 0x8cc6c0e0, 0xe0e0e0e0, 0xf0c08181, 66 }, - { 0x98ccc1e0, 0xe0e0e0e0, 0xf0c08382, 66 }, - { 0xb0d8c3e1, 0xe1e0e0e0, 0xf0c08784, 66 }, - { 0xe0f0c6e2, 0xe2e0e0e0, 0xf0c08e88, 66 }, - { 0xe1f0cce4, 0xe4e1e1e0, 0xf0c09c91, 66 }, - { 0xe3f1d9e8, 0xe9e3e2e0, 0xf0c0b8a3, 66 }, - { 0xe6f2f2f0, 0xf2e6e4e0, 0xf0c0f1c7, 66 }, - { 0xecf4f4f1, 0xf4ece8e1, 0xf0c1f2ce, 66 }, - { 0xf8f8f9f3, 0xf9f8f1e3, 0xf0c3f4dc, 66 }, - { 0xf8f8faf6, 0xfaf8f2e7, 0xf0c7f8f8, 66 }, - { 0xf9f9fcfc, 0xfcf8f4ee, 0xf0cff8f8, 66 }, - { 0xfbfbfcfc, 0xfcf9f9fc, 0xf0def8f8, 66 }, - { 0xfefefcfc, 0xfcfafbfd, 0xf0fcf9f9, 66 }, - { 0xfefefdfd, 0xfdfdfefe, 0xf1fcfbfb, 66 }, - { 0xfefefefe, 0xfefefefe, 0xf3fcfefe, 66 }, - { 0xffffffff, 0xfefefefe, 0xf7fdfefe, 66 }, - { 0xffffffff, 0xfffffffe, 0xfefefeff, 66 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, + { 0xe0000000, 0x0, 0x0, 66 }, + { 0x400e0000, 0x0, 0x0, 66 }, + { 0x400e0, 0x0, 0x0, 66 }, + { 0x40, 0xe000000, 0x0, 66 }, + { 0x3000000, 0x400e000, 0x0, 66 }, + { 0x3003000, 0x400e, 0x0, 66 }, + { 0x3003, 0x4, 0xe00000, 66 }, + { 0x3, 0x300000, 0x400e00, 66 }, + { 0x0, 0x300300, 0x400e00, 66 }, + { 0x1c000000, 0x300, 0x30400e00, 66 }, + { 0x401c000, 0x0, 0x30430e00, 66 }, + { 0x401c, 0x0, 0x430e30, 66 }, + { 0x4, 0x1c00000, 0x430e30, 66 }, + { 0x0, 0x401c00, 0x430e30, 66 }, + { 0x800000, 0x401, 0xc0430e30, 66 }, + { 0x800800, 0x0, 0x405f0e30, 66 }, + { 0x800800, 0x80000000, 0x470ff0, 66 }, + { 0x800800, 0x80080000, 0x470ff0, 66 }, + { 0x800, 0x80080080, 0x470ff0, 66 }, + { 0x38000000, 0x80080080, 0x8470ff0, 66 }, + { 0x10038000, 0x80080, 0x8478ff0, 66 }, + { 0x10038, 0x80, 0x8478ff8, 66 }, + { 0x700010, 0x3800080, 0x8478ff8, 66 }, + { 0x400700, 0x1003880, 0x8478ff8, 66 }, + { 0x400, 0x70001083, 0x88478ff8, 66 }, + { 0xf000000, 0x40070081, 0x87f8ff8, 66 }, + { 0xf000, 0x400f1, 0x87f8ff8, 66 }, + { 0x8000000f, 0xc1, 0xf7f8ff8, 66 }, + { 0xc0080000, 0xf00081, 0xc7ffff8, 66 }, + { 0x400c0080, 0xf81, 0x87fcfff, 66 }, + { 0x3400c0, 0x8000081, 0xf87fcfff, 66 }, + { 0x20200340, 0xc008081, 0xf87fcfff, 66 }, + { 0x38220200, 0x3400c089, 0xf87fcfff, 66 }, + { 0x38220, 0x2003408d, 0xf8ffcfff, 66 }, + { 0x86100038, 0x220240bd, 0xf8ffcfff, 66 }, + { 0xec186100, 0x38260ad, 0xfbffcfff, 66 }, + { 0x3ec186, 0x100078af, 0xfaffffff, 66 }, + { 0x114003ec, 0x186178af, 0xfaffffff, 66 }, + { 0x3b411400, 0x3ec1febf, 0xfaffffff, 66 }, + { 0x143b411, 0x4ec3febf, 0xfbffffff, 66 }, + { 0xc040143b, 0x4fd7febf, 0xfbffffff, 66 }, + { 0xc60c0439, 0x4ff7ffff, 0xfbffffff, 66 }, + { 0x33c60f9, 0x4ff7ffff, 0xffffffff, 66 }, + { 0x3cbc33ff, 0x4ff7ffff, 0xffffffff, 66 }, + { 0x8ffbff, 0x7ff7ffff, 0xffffffff, 66 }, + { 0xf0cffbff, 0xfff7ffff, 0xffffffff, 66 }, + { 0xfe1fffff, 0xffffffff, 0xffffffff, 66 }, + { 0xffffffff, 0xffffffff, 0xffffffff, 66 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_WIFI_SEARCH[][4] = { - { 0x0, 0x800000, 0x0, 600 }, - { 0x40, 0x20a02040, 0x0, 600 }, - { 0x201048, 0x28a82848, 0x10200000, 500 }, - { 0x824124a, 0x2aaa2a4a, 0x12240800, 500 }, + { 0x0, 0x0, 0x40, 600 }, + { 0x0, 0x0, 0xe0110040, 600 }, + { 0x0, 0x1f02084, 0xe4110040, 500 }, + { 0x3f840, 0x49f22084, 0xe4110040, 500 } }; - constexpr uint32_t LEDMATRIX_ANIMATION_HOURGLASS[][4] = { - { 0xffffff7e, 0x7e3c2442, 0x428181ff, 50 }, - { 0xffffff7e, 0x7e3c2c4a, 0x428181ff, 50 }, - { 0xffffff7e, 0x7e3c2c4a, 0x4a8981ff, 50 }, - { 0xffffff7e, 0x7e3c2c4a, 0x4a8989ff, 50 }, - { 0xffffff7e, 0x7e3c2c4a, 0x4a8999ff, 50 }, - { 0xfff7ff7e, 0x7e3c2c4a, 0x4a8999ff, 50 }, - { 0xffe7ff7e, 0x7e3c2c4a, 0x4a899dff, 50 }, - { 0xffc7ff7e, 0x7e3c2c4a, 0x4a899fff, 50 }, - { 0xffc7ff7e, 0x7e3c2c4a, 0x4a89bfff, 50 }, - { 0xffc3ff7e, 0x7e3c2c4a, 0x4a89ffff, 50 }, - { 0xffc1ff7e, 0x7e3c2c4a, 0x4a99ffff, 50 }, - { 0xff81ff7e, 0x7e3c2c4a, 0x4ab9ffff, 50 }, - { 0xff81f77e, 0x7e3c2c4a, 0x4ab9ffff, 50 }, - { 0xff81e77e, 0x7e3c2c4a, 0x4abdffff, 50 }, - { 0xff81c77e, 0x7e3c2c4a, 0x4afdffff, 50 }, - { 0xff81c37e, 0x7e3c2c4a, 0x4affffff, 50 }, - { 0xff81c376, 0x7e3c2c4a, 0x5affffff, 50 }, - { 0xff818166, 0x7e3c2c4a, 0x5effffff, 50 }, - { 0xff818142, 0x7e3c2c4a, 0x7effffff, 50 }, - { 0xff818142, 0x423c3c7e, 0x7effffff, 50 }, - { 0xff818142, 0x42243c7e, 0x7effffff, 300 }, + { 0xe07f99fe, 0x1fc1fc1f, 0xe1f99e07, 50 }, + { 0xe07f99fe, 0x1ff1fc1f, 0xe1f99e07, 50 }, + { 0xe07f99fe, 0x1ffdfc1f, 0xe1f99e07, 50 }, + { 0xe07f99fe, 0x1ffffc1f, 0xe1f99e07, 50 }, + { 0xe07f99fe, 0x1ffffc3f, 0xe1f99e07, 50 }, + { 0xe07f99fe, 0x1bfffc3f, 0xe1f99e07, 50 }, + { 0xe07f99fe, 0x3bffbc3f, 0xe1f99e07, 50 }, + { 0xe07f9bfe, 0x3bffbc3b, 0xe1f99e07, 50 }, + { 0xe07f9bfe, 0x3bffbc3b, 0xe3f99e07, 50 }, + { 0xe07f9bbe, 0x3bffbc3b, 0xe3f9be07, 50 }, + { 0xe07b9bbe, 0x3bffbc7b, 0xe3f9be07, 50 }, + { 0xe07b9bbe, 0x3bffbc7b, 0xe7b9be07, 50 }, + { 0xe07b9bbe, 0x39ffbc7b, 0xe7b9be07, 50 }, + { 0xe07b9bbe, 0x79ff9c7b, 0xe7b9be07, 50 }, + { 0xe07b9bbe, 0x79ff9c79, 0xe7b9fe07, 50 }, + { 0xe07b9f9e, 0x79ff9c79, 0xe7b9fe07, 50 }, + { 0xe07b9f9e, 0x78ff9cf9, 0xe7b9fe07, 50 }, + { 0xe0799f9e, 0xf8ff8cf9, 0xe799fe07, 50 }, + { 0xe0799f8e, 0xf8ff8cf8, 0xef99fe07, 50 }, + { 0xe0799f87, 0xf87f87f8, 0x7f99fe07, 50 }, + { 0xe0799f87, 0xf83f83f8, 0x7f99fe07, 300 } }; + +#endif // _LEDMATRIX_GALLERY_H_ \ No newline at end of file diff --git a/src/LEDMatrixGalleryVertical.h b/src/LEDMatrixGalleryVertical.h new file mode 100644 index 0000000..556fcd8 --- /dev/null +++ b/src/LEDMatrixGalleryVertical.h @@ -0,0 +1,635 @@ +#pragma once + +constexpr uint32_t LEDMATRIX_BLUETOOTH_VERTICAL[3] = { 0x00181492, 0x54381038, 0x54921418 }; + +constexpr uint32_t LEDMATRIX_BOOTLOADER_ON_VERTICAL[3] = { 0x00003844, 0x808e8044, 0x38000000 }; + +constexpr uint32_t LEDMATRIX_CHIP_VERTICAL[3] = { 0x000054fe, 0x44c644fe, 0x54000000 }; + +constexpr uint32_t LEDMATRIX_CLOUD_WIFI_VERTICAL[3] = { 0x304e4a91, 0x817a007c, 0x82394410 }; + +constexpr uint32_t LEDMATRIX_DANGER_VERTICAL[3] = { 0x00c0b08c, 0x82ad828c, 0xb0c00000 }; + +constexpr uint32_t LEDMATRIX_EMOJI_BASIC_VERTICAL[3] = { 0x00000026, 0x26202026, 0x26000000 }; + +constexpr uint32_t LEDMATRIX_EMOJI_HAPPY_VERTICAL[3] = { 0x00000066, 0x46404046, 0x66000000 }; + +constexpr uint32_t LEDMATRIX_EMOJI_SAD_VERTICAL[3] = { 0x00000066, 0x26202026, 0x66000000 }; + +constexpr uint32_t LEDMATRIX_HEART_BIG_VERTICAL[3] = { 0x000e1121, 0x42844221, 0x110e0000 }; + +constexpr uint32_t LEDMATRIX_HEART_SMALL_VERTICAL[3] = { 0x00000018, 0x24482418, 0x00000000 }; + +constexpr uint32_t LEDMATRIX_LIKE_VERTICAL[3] = { 0x0000f888, 0xf884828f, 0x88780000 }; + +constexpr uint32_t LEDMATRIX_MUSIC_NOTE_VERTICAL[3] = { 0x0000c0ff, 0x03030363, 0x7f000000 }; + +constexpr uint32_t LEDMATRIX_RESISTOR_VERTICAL[3] = { 0x081c141c, 0x141c1414, 0x14141c08 }; + +constexpr uint32_t LEDMATRIX_UNO_VERTICAL[3] = { 0x0cff8d81, 0xa1a1a1a1, 0x81877800 }; + +constexpr uint32_t LEDMATRIX_ANIMATION_STARTUP_VERTICAL[][4] = { + { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0x10000000, 0x0, 66 }, + { 0x20, 0x10000000, 0x0, 40 }, + { 0x2020, 0x10000000, 0x0, 40 }, + { 0x202020, 0x10000000, 0x0, 40 }, + { 0x10202020, 0x10000000, 0x0, 40 }, + { 0x18202020, 0x10000000, 0x0, 40 }, + { 0x1c202020, 0x10000000, 0x0, 40 }, + { 0x1c222020, 0x10000000, 0x0, 30 }, + { 0x1c222220, 0x10000000, 0x0, 30 }, + { 0x1c222222, 0x10000000, 0x0, 30 }, + { 0x1c222222, 0x14000000, 0x0, 30 }, + { 0x1c222222, 0x14080000, 0x0, 30 }, + { 0x1c222222, 0x14081000, 0x0, 30 }, + { 0x1c222222, 0x14081020, 0x0, 30 }, + { 0x1c222222, 0x14081020, 0x20000000, 30 }, + { 0x1c222222, 0x14081020, 0x20200000, 30 }, + { 0x1c222222, 0x14081020, 0x20201000, 40 }, + { 0x1c222222, 0x14081020, 0x20201800, 40 }, + { 0x1c222222, 0x14081020, 0x20201c00, 40 }, + { 0x1c222222, 0x14081020, 0x20221c00, 40 }, + { 0x1c222222, 0x14081020, 0x22221c00, 40 }, + { 0x1c222222, 0x14081022, 0x22221c00, 66 }, + { 0x1c222222, 0x14081422, 0x22221c00, 240 }, + { 0x1c223222, 0x14081422, 0x26221c02, 66 }, + { 0x1c222a22, 0x14081422, 0x2a221c01, 400 }, + { 0x222a2214, 0x814222a, 0x221c0100, 66 }, + { 0x2a221408, 0x14222a22, 0x1c01003c, 66 }, + { 0x22140814, 0x222a221c, 0x1003c0a, 66 }, + { 0x14081422, 0x2a221c01, 0x3c0a0a, 66 }, + { 0x814222a, 0x221c0100, 0x3c0a0a3c, 66 }, + { 0x14222a22, 0x1c01003c, 0xa0a3c00, 66 }, + { 0x222a221c, 0x1003c0a, 0xa3c003e, 66 }, + { 0x2a221c01, 0x3c0a0a, 0x3c003e0a, 66 }, + { 0x221c0100, 0x3c0a0a3c, 0x3e0a0a, 66 }, + { 0x1c01003c, 0xa0a3c00, 0x3e0a0a34, 66 }, + { 0x1003c0a, 0xa3c003e, 0xa0a3400, 66 }, + { 0x3c0a0a, 0x3c003e0a, 0xa34003e, 100 }, + { 0x3c0a0a3c, 0x3e0a0a, 0x34003e22, 66 }, + { 0xa0a3c00, 0x3e0a0a34, 0x3e2222, 66 }, + { 0xa3c003e, 0xa0a3400, 0x3e22221c, 66 }, + { 0x3c003e0a, 0xa34003e, 0x22221c00, 66 }, + { 0x3e0a0a, 0x34003e22, 0x221c001e, 66 }, + { 0x3e0a0a34, 0x3e2222, 0x1c001e20, 66 }, + { 0xa0a3400, 0x3e22221c, 0x1e2020, 66 }, + { 0xa34003e, 0x22221c00, 0x1e20201e, 66 }, + { 0x34003e22, 0x221c001e, 0x20201e00, 66 }, + { 0x3e2222, 0x1c001e20, 0x201e0022, 66 }, + { 0x3e22221c, 0x1e2020, 0x1e00223e, 66 }, + { 0x22221c00, 0x1e20201e, 0x223e22, 66 }, + { 0x221c001e, 0x20201e00, 0x223e2200, 66 }, + { 0x1c001e20, 0x201e0022, 0x3e22003e, 66 }, + { 0x1e2020, 0x1e00223e, 0x22003e04, 66 }, + { 0x1e20201e, 0x223e22, 0x3e0408, 66 }, + { 0x20201e00, 0x223e2200, 0x3e04083e, 66 }, + { 0x201e0022, 0x3e22003e, 0x4083e00, 66 }, + { 0x1e00223e, 0x22003e04, 0x83e001c, 66 }, + { 0x223e22, 0x3e0408, 0x3e001c22, 66 }, + { 0x223e2200, 0x3e04083e, 0x1c2222, 66 }, + { 0x3e22003e, 0x4083e00, 0x1c22221c, 66 }, + { 0x22003e04, 0x83e001c, 0x22221c00, 66 }, + { 0x3e0408, 0x3e001c22, 0x221c0000, 66 }, + { 0x3e04083e, 0x1c2222, 0x1c000000, 66 }, + { 0x4083e00, 0x1c22221c, 0x0, 66 }, + { 0x83e001c, 0x22221c00, 0x0, 66 }, + { 0x3e001c22, 0x221c0000, 0x0, 66 }, + { 0x1c2222, 0x1c000000, 0x0, 66 }, + { 0x1c22221c, 0x0, 0x0, 66 }, + { 0x22221c00, 0x0, 0x0, 66 }, + { 0x221c0000, 0x0, 0x0, 66 }, + { 0x1c000000, 0x0, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_TETRIS_INTRO_VERTICAL[][4] = { + { 0x1010100, 0x0, 0x0, 66 }, + { 0x2030200, 0x0, 0x0, 66 }, + { 0x4060400, 0x0, 0x0, 66 }, + { 0x80c0800, 0x0, 0x0, 66 }, + { 0x10181000, 0x101, 0x0, 66 }, + { 0x20302000, 0x303, 0x0, 66 }, + { 0x40604000, 0x606, 0x0, 66 }, + { 0x80c08000, 0xc0c, 0x0, 66 }, + { 0x80c08000, 0x1818, 0x0, 66 }, + { 0x80c08001, 0x1013030, 0x0, 66 }, + { 0x80c08002, 0x2036060, 0x0, 66 }, + { 0x80c08004, 0x406c0c0, 0x0, 66 }, + { 0x80c08008, 0x80cc0c0, 0x0, 66 }, + { 0x80c08010, 0x1018c0c0, 0x0, 66 }, + { 0x80c08020, 0x2030c0c0, 0x1000000, 66 }, + { 0x80c08040, 0x4060c0c0, 0x3000000, 66 }, + { 0x80c08080, 0x80c0c0c0, 0x7000000, 66 }, + { 0x80c08080, 0x80c0c0c0, 0xf000000, 66 }, + { 0x80c08080, 0x80c0c0c0, 0x1e000000, 66 }, + { 0x80c08181, 0x81c0c0c0, 0x3c000000, 66 }, + { 0x80c08283, 0x82c0c0c0, 0x78000000, 66 }, + { 0x80c08486, 0x84c0c0c0, 0xf0000000, 66 }, + { 0x80c0888c, 0x88c0c0c0, 0xf0010101, 66 }, + { 0x80c09098, 0x90c0c0c0, 0xf0030202, 66 }, + { 0x80c0a0b0, 0xa0c0c0c0, 0xf0060404, 66 }, + { 0x80c0c0e0, 0xc1c1c1c1, 0xf00c0808, 66 }, + { 0x80c0c0e0, 0xc2c2c2c2, 0xf0181010, 66 }, + { 0x81c0c0e0, 0xc4c4c4c4, 0xf0302020, 66 }, + { 0x83c1c0e0, 0xc8c8c8c8, 0xf0604040, 66 }, + { 0x86c3c0e0, 0xd0d0d0d0, 0xf0c08080, 66 }, + { 0x8cc6c0e0, 0xe0e0e0e0, 0xf0c08181, 66 }, + { 0x98ccc1e0, 0xe0e0e0e0, 0xf0c08382, 66 }, + { 0xb0d8c3e1, 0xe1e0e0e0, 0xf0c08784, 66 }, + { 0xe0f0c6e2, 0xe2e0e0e0, 0xf0c08e88, 66 }, + { 0xe1f0cce4, 0xe4e1e1e0, 0xf0c09c91, 66 }, + { 0xe3f1d9e8, 0xe9e3e2e0, 0xf0c0b8a3, 66 }, + { 0xe6f2f2f0, 0xf2e6e4e0, 0xf0c0f1c7, 66 }, + { 0xecf4f4f1, 0xf4ece8e1, 0xf0c1f2ce, 66 }, + { 0xf8f8f9f3, 0xf9f8f1e3, 0xf0c3f4dc, 66 }, + { 0xf8f8faf6, 0xfaf8f2e7, 0xf0c7f8f8, 66 }, + { 0xf9f9fcfc, 0xfcf8f4ee, 0xf0cff8f8, 66 }, + { 0xfbfbfcfc, 0xfcf9f9fc, 0xf0def8f8, 66 }, + { 0xfefefcfc, 0xfcfafbfd, 0xf0fcf9f9, 66 }, + { 0xfefefdfd, 0xfdfdfefe, 0xf1fcfbfb, 66 }, + { 0xfefefefe, 0xfefefefe, 0xf3fcfefe, 66 }, + { 0xffffffff, 0xfefefefe, 0xf7fdfefe, 66 }, + { 0xffffffff, 0xfffffffe, 0xfefefeff, 66 }, + { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, + { 0x7effffff, 0xffffffff, 0xffffffff, 66 }, + { 0x3c7effff, 0xffffffff, 0xffffff7e, 66 }, + { 0x183c7eff, 0xffffffff, 0xffff7e3c, 66 }, + { 0x183c7e, 0xffffffff, 0xff7e3c18, 66 }, + { 0x183c, 0x7efffeff, 0x7e3c1800, 66 }, + { 0x18, 0x3c7efc7e, 0x3c180000, 66 }, + { 0x0, 0x183c783c, 0x18000000, 66 }, + { 0x0, 0x18244824, 0x18000000, 600 }, + { 0xc, 0x12224422, 0x120c0000, 200 }, + { 0x0, 0x18244824, 0x18000000, 600 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_ATMEGA_VERTICAL[][4] = { + { 0x18181818, 0x18181818, 0x18181800, 66 }, + { 0x183c183c, 0x183c183c, 0x183c1800, 66 }, + { 0x5a3c187e, 0x187e187e, 0x183c5a00, 66 }, + { 0x5a3c997e, 0x18ff187e, 0x993c5a81, 66 }, + { 0x5a18995a, 0x18db185a, 0x99185a81, 66 }, + { 0x18189918, 0x18991818, 0x99181881, 66 }, + { 0x18181818, 0x18181818, 0x18181800, 66 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_LED_BLINK_HORIZONTAL_VERTICAL[][4] = { + { 0x1c2232, 0x327f1414, 0x14100000, 1000 }, + { 0x1c3e2e, 0x2e7f1414, 0x14100000, 1000 }, + { 0x1c2232, 0x327f1414, 0x14100000, 1000 }, + { 0x1c3e2e, 0x2e7f1414, 0x14100000, 1000 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_LED_BLINK_VERTICAL_VERTICAL[][4] = { + { 0x101efd, 0x11711e10, 0x0, 1000 }, + { 0x101ef3, 0x1f7f1e10, 0x0, 1000 }, + { 0x101efd, 0x11711e10, 0x0, 1000 }, + { 0x101ef3, 0x1f7f1e10, 0x0, 1000 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_ARROWS_COMPASS_VERTICAL[][4] = { + { 0x8, 0x142a0808, 0x8000000, 500 }, + { 0xe, 0x20a1020, 0x0, 500 }, + { 0x8, 0x47a0408, 0x0, 500 }, + { 0x20, 0x100a020e, 0x0, 500 }, + { 0x808, 0x82a1408, 0x0, 500 }, + { 0x2, 0x4282038, 0x0, 500 }, + { 0x8, 0x102f1008, 0x0, 500 }, + { 0x38, 0x20280402, 0x0, 500 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_AUDIO_WAVEFORM_VERTICAL[][4] = { + { 0xfe00e000, 0x8000e000, 0xf800e000, 100 }, + { 0xf800e000, 0xc000f000, 0xfe00f000, 100 }, + { 0xf000e000, 0x8000c000, 0xfc00fc00, 100 }, + { 0xc000c000, 0x8000f000, 0xc000fe00, 100 }, + { 0xf0008000, 0xc000e000, 0xf000fc00, 100 }, + { 0xfc00e000, 0xc000f000, 0xfc00e000, 100 }, + { 0xfe00f000, 0xf800e000, 0xf000f800, 100 }, + { 0xff00e000, 0xc000e000, 0xfc00ff00, 100 }, + { 0xf800f000, 0xfe00c000, 0xf000fe00, 100 }, + { 0xfc00e000, 0xf000c000, 0xf000f800, 100 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_BATTERY_VERTICAL[][4] = { + { 0x7f414141, 0x41414141, 0x4141771c, 500 }, + { 0x7f415d41, 0x41414141, 0x4141771c, 500 }, + { 0x7f415d41, 0x5d414141, 0x4141771c, 500 }, + { 0x7f415d41, 0x5d415d41, 0x4141771c, 500 }, + { 0x7f415d41, 0x5d415d41, 0x5d41771c, 500 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_BOUNCING_BALL_VERTICAL[][4] = { + { 0x0, 0x0, 0x182418, 100 }, + { 0x0, 0x182424, 0x18000000, 100 }, + { 0x18, 0x24241800, 0x0, 100 }, + { 0x1824, 0x24180000, 0x0, 200 }, + { 0x18, 0x24241800, 0x0, 100 }, + { 0x0, 0x182424, 0x18000000, 100 }, + { 0x0, 0x0, 0x182418, 100 }, + { 0x0, 0x182424, 0x18000000, 100 }, + { 0x18, 0x24241800, 0x0, 100 }, + { 0x1824, 0x24180000, 0x0, 200 }, + { 0x18, 0x24241800, 0x0, 100 }, + { 0x0, 0x182424, 0x18000000, 100 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_BUG_VERTICAL[][4] = { + { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, + { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, + { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, + { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, + { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, + { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, + { 0x4992fe82, 0xa282a282, 0xfe924949, 200 }, + { 0x494992fe, 0x82a282a2, 0x82fe9249, 200 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_CHECK_VERTICAL[][4] = { + { 0x0, 0x0, 0x0, 100 }, + { 0x1000, 0x0, 0x0, 100 }, + { 0x1020, 0x0, 0x0, 100 }, + { 0x1020, 0x40000000, 0x0, 100 }, + { 0x1020, 0x40200000, 0x0, 100 }, + { 0x1020, 0x40201000, 0x0, 100 }, + { 0x1020, 0x40201008, 0x0, 100 }, + { 0x1020, 0x40201008, 0x4000000, 100 }, + { 0x1020, 0x40201008, 0x4020000, 100 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_CLOUD_VERTICAL[][4] = { + { 0x304c8281, 0x818a8482, 0x82844830, 600 }, + { 0x30488482, 0x81818a84, 0x82824c30, 600 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_DOWNLOAD_VERTICAL[][4] = { + { 0xe08088, 0x90af9088, 0x80e00000, 200 }, + { 0xe08090, 0xa0dea090, 0x80e00000, 200 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_DVD_VERTICAL[][4] = { + { 0x8, 0x0, 0x0, 600 }, + { 0x0, 0x10000000, 0x0, 600 }, + { 0x0, 0x200000, 0x0, 600 }, + { 0x0, 0x4000, 0x0, 600 }, + { 0x0, 0x80, 0x0, 600 }, + { 0x0, 0x0, 0x40000000, 600 }, + { 0x0, 0x0, 0x200000, 600 }, + { 0x0, 0x0, 0x1000, 600 }, + { 0x0, 0x0, 0x8, 600 }, + { 0x0, 0x0, 0x400, 600 }, + { 0x0, 0x0, 0x20000, 600 }, + { 0x0, 0x0, 0x1000000, 600 }, + { 0x0, 0x2, 0x0, 600 }, + { 0x0, 0x400, 0x0, 600 }, + { 0x0, 0x80000, 0x0, 600 }, + { 0x0, 0x10000000, 0x0, 600 }, + { 0x20, 0x0, 0x0, 600 }, + { 0x4000, 0x0, 0x0, 600 }, + { 0x800000, 0x0, 0x0, 600 }, + { 0x40000000, 0x0, 0x0, 600 }, + { 0x200000, 0x0, 0x0, 600 }, + { 0x1000, 0x0, 0x0, 600 }, + { 0x8, 0x0, 0x0, 600 }, + { 0x0, 0x4000000, 0x0, 600 }, + { 0x0, 0x20000, 0x0, 600 }, + { 0x0, 0x100, 0x0, 600 }, + { 0x0, 0x2, 0x0, 600 }, + { 0x0, 0x0, 0x4000000, 600 }, + { 0x0, 0x0, 0x80000, 600 }, + { 0x0, 0x0, 0x1000, 600 }, + { 0x0, 0x0, 0x20, 600 }, + { 0x0, 0x0, 0x4000, 600 }, + { 0x0, 0x0, 0x800000, 600 }, + { 0x0, 0x0, 0x40000000, 600 }, + { 0x0, 0x20, 0x0, 600 }, + { 0x0, 0x1000, 0x0, 600 }, + { 0x0, 0x80000, 0x0, 600 }, + { 0x0, 0x4000000, 0x0, 600 }, + { 0x2, 0x0, 0x0, 600 }, + { 0x100, 0x0, 0x0, 600 }, + { 0x20000, 0x0, 0x0, 600 }, + { 0x4000000, 0x0, 0x0, 600 }, + { 0x80000, 0x0, 0x0, 600 }, + { 0x1000, 0x0, 0x0, 600 }, + { 0x20, 0x0, 0x0, 600 }, + { 0x0, 0x40000000, 0x0, 600 }, + { 0x0, 0x800000, 0x0, 600 }, + { 0x0, 0x4000, 0x0, 600 }, + { 0x0, 0x20, 0x0, 600 }, + { 0x0, 0x0, 0x10000000, 600 }, + { 0x0, 0x0, 0x80000, 600 }, + { 0x0, 0x0, 0x400, 600 }, + { 0x0, 0x0, 0x2, 600 }, + { 0x0, 0x0, 0x100, 600 }, + { 0x0, 0x0, 0x20000, 600 }, + { 0x0, 0x0, 0x4000000, 600 }, + { 0x0, 0x8, 0x0, 600 }, + { 0x0, 0x1000, 0x0, 600 }, + { 0x0, 0x200000, 0x0, 600 }, + { 0x0, 0x40000000, 0x0, 600 }, + { 0x80, 0x0, 0x0, 600 }, + { 0x4000, 0x0, 0x0, 600 }, + { 0x200000, 0x0, 0x0, 600 }, + { 0x10000000, 0x0, 0x0, 600 }, + { 0x80000, 0x0, 0x0, 600 }, + { 0x400, 0x0, 0x0, 600 }, + { 0x2, 0x0, 0x0, 600 }, + { 0x0, 0x1000000, 0x0, 600 }, + { 0x0, 0x20000, 0x0, 600 }, + { 0x0, 0x400, 0x0, 600 }, + { 0x0, 0x8, 0x0, 600 }, + { 0x0, 0x0, 0x10000000, 600 }, + { 0x0, 0x0, 0x200000, 600 }, + { 0x0, 0x0, 0x4000, 600 }, + { 0x0, 0x0, 0x80, 600 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_HEARTBEAT_LINE_VERTICAL[][4] = { + { 0x10101000, 0x0, 0x0, 66 }, + { 0x101060, 0x80000000, 0x0, 66 }, + { 0x1060, 0x80601000, 0x0, 66 }, + { 0x60, 0x80601806, 0x0, 66 }, + { 0x40, 0x80601806, 0x1060000, 66 }, + { 0x0, 0x80601806, 0x10e1010, 66 }, + { 0x0, 0x601806, 0x10e1010, 66 }, + { 0x0, 0x201806, 0x10e1010, 66 }, + { 0x0, 0x1806, 0x10e1010, 66 }, + { 0x0, 0x806, 0x10e1010, 66 }, + { 0x0, 0x6, 0x10e1010, 66 }, + { 0x0, 0x2, 0x10e1010, 66 }, + { 0x0, 0x0, 0x10e1010, 66 }, + { 0x0, 0x0, 0xe1010, 66 }, + { 0x0, 0x0, 0xc1010, 66 }, + { 0x0, 0x0, 0x81010, 66 }, + { 0x0, 0x0, 0x1010, 66 }, + { 0x0, 0x0, 0x10, 66 }, + { 0x0, 0x0, 0x0, 66 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_HEARTBEAT_VERTICAL[][4] = { + { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, + { 0x7effffff, 0xffffffff, 0xffffffff, 66 }, + { 0x3c7effff, 0xffffffff, 0xffffff7e, 66 }, + { 0x183c7eff, 0xffffffff, 0xffff7e3c, 66 }, + { 0x183c7e, 0xffffffff, 0xff7e3c18, 66 }, + { 0x183c, 0x7efffeff, 0x7e3c1800, 66 }, + { 0x18, 0x3c7efc7e, 0x3c180000, 66 }, + { 0x0, 0x183c783c, 0x18000000, 66 }, + { 0x0, 0x18244824, 0x18000000, 600 }, + { 0xc, 0x12224422, 0x120c0000, 200 }, + { 0x0, 0x18244824, 0x18000000, 600 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_INFINITY_LOOP_LOADER_VERTICAL[][4] = { + { 0x1c202020, 0x10080400, 0x0, 100 }, + { 0x1c222020, 0x10080000, 0x0, 100 }, + { 0x1c222220, 0x10000000, 0x0, 100 }, + { 0x1c222222, 0x0, 0x0, 100 }, + { 0x1c222202, 0x4000000, 0x0, 100 }, + { 0x1c220202, 0x4080000, 0x0, 100 }, + { 0x1c020202, 0x4081000, 0x0, 100 }, + { 0xc020202, 0x4081020, 0x0, 100 }, + { 0x4020202, 0x4081020, 0x20000000, 100 }, + { 0x20202, 0x4081020, 0x20200000, 100 }, + { 0x202, 0x4081020, 0x20201000, 100 }, + { 0x2, 0x4081020, 0x20201800, 100 }, + { 0x0, 0x4081020, 0x20201c00, 100 }, + { 0x0, 0x81020, 0x20221c00, 100 }, + { 0x0, 0x1020, 0x22221c00, 100 }, + { 0x0, 0x22, 0x22221c00, 100 }, + { 0x0, 0x402, 0x22221c00, 100 }, + { 0x0, 0x80402, 0x2221c00, 100 }, + { 0x0, 0x10080402, 0x2021c00, 100 }, + { 0x20, 0x10080402, 0x2020c00, 100 }, + { 0x2020, 0x10080402, 0x2020400, 100 }, + { 0x202020, 0x10080402, 0x2020000, 100 }, + { 0x10202020, 0x10080402, 0x2000000, 100 }, + { 0x18202020, 0x10080402, 0x0, 100 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_LOAD_CLOCK_VERTICAL[][4] = { + { 0x800, 0x4d0000, 0x8000000, 100 }, + { 0x800, 0x490400, 0x8000000, 100 }, + { 0x800, 0x490800, 0x8000000, 100 }, + { 0x800, 0x491000, 0x8000000, 100 }, + { 0x800, 0x590000, 0x8000000, 100 }, + { 0x800, 0x10490000, 0x8000000, 100 }, + { 0x800, 0x8490000, 0x8000000, 100 }, + { 0x800, 0x4490000, 0x8000000, 100 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_LOAD_VERTICAL[][4] = { + { 0x822, 0x410122, 0x8000000, 100 }, + { 0x822, 0x410022, 0xc000000, 200 }, + { 0x822, 0x410022, 0x18000000, 200 }, + { 0x822, 0x414022, 0x8000000, 200 }, + { 0x822, 0x40410022, 0x8000000, 200 }, + { 0x1822, 0x410022, 0x8000000, 200 }, + { 0xc22, 0x410022, 0x8000000, 200 }, + { 0x822, 0x1410022, 0x8000000, 200 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_LOCK_VERTICAL[][4] = { + { 0xf88e, 0x89898ef8, 0x0, 500 }, + { 0xf888, 0x88888ef9, 0x1060000, 500 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_NOTIFICATION_VERTICAL[][4] = { + { 0x60504c, 0x42c3424c, 0x50600000, 500 }, + { 0x60504c, 0x42c3424c, 0x50620908, 500 }, + { 0x60504c, 0x42c3424c, 0x50600000, 500 }, + { 0x60504c, 0x42c3424c, 0x50620908, 500 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_OPENSOURCE_VERTICAL[][4] = { + { 0x0, 0x0, 0x0, 66 }, + { 0x0, 0x0, 0x1c, 66 }, + { 0x0, 0x0, 0x1c22, 66 }, + { 0x0, 0x0, 0x1c2222, 66 }, + { 0x0, 0x0, 0x1c22221c, 66 }, + { 0x0, 0x1c, 0x22221c00, 66 }, + { 0x0, 0x1c22, 0x221c003e, 66 }, + { 0x0, 0x1c2222, 0x1c003e0a, 66 }, + { 0x0, 0x1c22221c, 0x3e0a0a, 66 }, + { 0x1c, 0x22221c00, 0x3e0a0a04, 66 }, + { 0x1c22, 0x221c003e, 0xa0a0400, 66 }, + { 0x1c2222, 0x1c003e0a, 0xa04003e, 66 }, + { 0x1c22221c, 0x3e0a0a, 0x4003e2a, 66 }, + { 0x22221c00, 0x3e0a0a04, 0x3e2a2a, 66 }, + { 0x221c003e, 0xa0a0400, 0x3e2a2a22, 66 }, + { 0x1c003e0a, 0xa04003e, 0x2a2a2200, 66 }, + { 0x3e0a0a, 0x4003e2a, 0x2a22003e, 66 }, + { 0x3e0a0a04, 0x3e2a2a, 0x22003e04, 66 }, + { 0xa0a0400, 0x3e2a2a22, 0x3e0408, 66 }, + { 0xa04003e, 0x2a2a2200, 0x3e04083e, 66 }, + { 0x4003e2a, 0x2a22003e, 0x4083e00, 66 }, + { 0x3e2a2a, 0x22003e04, 0x83e0000, 66 }, + { 0x3e2a2a22, 0x3e0408, 0x3e000000, 66 }, + { 0x2a2a2200, 0x3e04083e, 0x0, 66 }, + { 0x2a22003e, 0x4083e00, 0x0, 66 }, + { 0x22003e04, 0x83e0000, 0x24, 66 }, + { 0x3e0408, 0x3e000000, 0x242a, 66 }, + { 0x3e04083e, 0x0, 0x242a2a, 66 }, + { 0x4083e00, 0x0, 0x242a2a12, 66 }, + { 0x83e0000, 0x24, 0x2a2a1200, 66 }, + { 0x3e000000, 0x242a, 0x2a12001c, 66 }, + { 0x0, 0x242a2a, 0x12001c22, 66 }, + { 0x0, 0x242a2a12, 0x1c2222, 66 }, + { 0x24, 0x2a2a1200, 0x1c22221c, 66 }, + { 0x242a, 0x2a12001c, 0x22221c00, 66 }, + { 0x242a2a, 0x12001c22, 0x221c001e, 66 }, + { 0x242a2a12, 0x1c2222, 0x1c001e20, 66 }, + { 0x2a2a1200, 0x1c22221c, 0x1e2020, 66 }, + { 0x2a12001c, 0x22221c00, 0x1e20201e, 66 }, + { 0x12001c22, 0x221c001e, 0x20201e00, 66 }, + { 0x1c2222, 0x1c001e20, 0x201e003e, 66 }, + { 0x1c22221c, 0x1e2020, 0x1e003e0a, 66 }, + { 0x22221c00, 0x1e20201e, 0x3e0a0a, 66 }, + { 0x221c001e, 0x20201e00, 0x3e0a0a34, 66 }, + { 0x1c001e20, 0x201e003e, 0xa0a3400, 66 }, + { 0x1e2020, 0x1e003e0a, 0xa34001c, 66 }, + { 0x1e20201e, 0x3e0a0a, 0x34001c22, 66 }, + { 0x20201e00, 0x3e0a0a34, 0x1c2222, 66 }, + { 0x201e003e, 0xa0a3400, 0x1c222222, 66 }, + { 0x1e003e0a, 0xa34001c, 0x22222200, 66 }, + { 0x3e0a0a, 0x34001c22, 0x2222003e, 66 }, + { 0x3e0a0a34, 0x1c2222, 0x22003e2a, 66 }, + { 0xa0a3400, 0x1c222222, 0x3e2a2a, 66 }, + { 0xa34001c, 0x22222200, 0x3e2a2a22, 66 }, + { 0x34001c22, 0x2222003e, 0x2a2a2200, 66 }, + { 0x1c2222, 0x22003e2a, 0x2a220000, 66 }, + { 0x1c222222, 0x3e2a2a, 0x22000000, 66 }, + { 0x22222200, 0x3e2a2a22, 0x0, 66 }, + { 0x2222003e, 0x2a2a2200, 0x0, 66 }, + { 0x22003e2a, 0x2a220000, 0x0, 66 }, + { 0x3e2a2a, 0x22000000, 0x22, 66 }, + { 0x3e2a2a22, 0x0, 0x223e, 66 }, + { 0x2a2a2200, 0x0, 0x223e22, 66 }, + { 0x2a220000, 0x0, 0x223e2200, 66 }, + { 0x22000000, 0x22, 0x3e220024, 66 }, + { 0x0, 0x223e, 0x2200242a, 66 }, + { 0x0, 0x223e22, 0x242a2a, 66 }, + { 0x0, 0x223e2200, 0x242a2a12, 66 }, + { 0x22, 0x3e220024, 0x2a2a1200, 66 }, + { 0x223e, 0x2200242a, 0x2a120000, 66 }, + { 0x223e22, 0x242a2a, 0x12000000, 66 }, + { 0x223e2200, 0x242a2a12, 0x0, 66 }, + { 0x3e220024, 0x2a2a1200, 0x0, 66 }, + { 0x2200242a, 0x2a120000, 0x0, 66 }, + { 0x242a2a, 0x12000000, 0xc, 66 }, + { 0x242a2a12, 0x0, 0xc12, 66 }, + { 0x2a2a1200, 0x0, 0xc1224, 66 }, + { 0x2a120000, 0x0, 0xc122412, 66 }, + { 0x12000000, 0xc, 0x1224120c, 66 }, + { 0x0, 0xc12, 0x24120c00, 66 }, + { 0x0, 0xc1224, 0x120c0000, 66 }, + { 0x0, 0xc122412, 0xc000000, 66 }, + { 0xc, 0x1224120c, 0x0, 66 }, + { 0xc12, 0x24120c00, 0x0, 66 }, + { 0xc1224, 0x120c0000, 0x0, 66 }, + { 0xc122412, 0xc000000, 0x0, 66 }, + { 0x1224120c, 0x0, 0x0, 66 }, + { 0x24120c00, 0x0, 0x0, 66 }, + { 0x120c0000, 0x0, 0x0, 66 }, + { 0xc000000, 0x0, 0x0, 66 }, + { 0x0, 0x0, 0x0, 66 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_SPINNING_COIN_VERTICAL[][4] = { + { 0x3844, 0x82828244, 0x38000000, 100 }, + { 0x38, 0xc682c638, 0x0, 100 }, + { 0x0, 0x38c63800, 0x0, 100 }, + { 0x0, 0xfe0000, 0x0, 100 }, + { 0x0, 0x38c63800, 0x0, 100 }, + { 0x38, 0xc682c638, 0x0, 100 }, + { 0x3844, 0x82828244, 0x38000000, 100 }, + { 0x38, 0xc682c638, 0x0, 100 }, + { 0x0, 0x38c63800, 0x0, 100 }, + { 0x0, 0xfe0000, 0x0, 100 }, + { 0x0, 0x38c63800, 0x0, 100 }, + { 0x38, 0xc682c638, 0x0, 100 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_TETRIS_VERTICAL[][4] = { + { 0x1010100, 0x0, 0x0, 66 }, + { 0x2030200, 0x0, 0x0, 66 }, + { 0x4060400, 0x0, 0x0, 66 }, + { 0x80c0800, 0x0, 0x0, 66 }, + { 0x10181000, 0x101, 0x0, 66 }, + { 0x20302000, 0x303, 0x0, 66 }, + { 0x40604000, 0x606, 0x0, 66 }, + { 0x80c08000, 0xc0c, 0x0, 66 }, + { 0x80c08000, 0x1818, 0x0, 66 }, + { 0x80c08001, 0x1013030, 0x0, 66 }, + { 0x80c08002, 0x2036060, 0x0, 66 }, + { 0x80c08004, 0x406c0c0, 0x0, 66 }, + { 0x80c08008, 0x80cc0c0, 0x0, 66 }, + { 0x80c08010, 0x1018c0c0, 0x0, 66 }, + { 0x80c08020, 0x2030c0c0, 0x1000000, 66 }, + { 0x80c08040, 0x4060c0c0, 0x3000000, 66 }, + { 0x80c08080, 0x80c0c0c0, 0x7000000, 66 }, + { 0x80c08080, 0x80c0c0c0, 0xf000000, 66 }, + { 0x80c08080, 0x80c0c0c0, 0x1e000000, 66 }, + { 0x80c08181, 0x81c0c0c0, 0x3c000000, 66 }, + { 0x80c08283, 0x82c0c0c0, 0x78000000, 66 }, + { 0x80c08486, 0x84c0c0c0, 0xf0000000, 66 }, + { 0x80c0888c, 0x88c0c0c0, 0xf0010101, 66 }, + { 0x80c09098, 0x90c0c0c0, 0xf0030202, 66 }, + { 0x80c0a0b0, 0xa0c0c0c0, 0xf0060404, 66 }, + { 0x80c0c0e0, 0xc1c1c1c1, 0xf00c0808, 66 }, + { 0x80c0c0e0, 0xc2c2c2c2, 0xf0181010, 66 }, + { 0x81c0c0e0, 0xc4c4c4c4, 0xf0302020, 66 }, + { 0x83c1c0e0, 0xc8c8c8c8, 0xf0604040, 66 }, + { 0x86c3c0e0, 0xd0d0d0d0, 0xf0c08080, 66 }, + { 0x8cc6c0e0, 0xe0e0e0e0, 0xf0c08181, 66 }, + { 0x98ccc1e0, 0xe0e0e0e0, 0xf0c08382, 66 }, + { 0xb0d8c3e1, 0xe1e0e0e0, 0xf0c08784, 66 }, + { 0xe0f0c6e2, 0xe2e0e0e0, 0xf0c08e88, 66 }, + { 0xe1f0cce4, 0xe4e1e1e0, 0xf0c09c91, 66 }, + { 0xe3f1d9e8, 0xe9e3e2e0, 0xf0c0b8a3, 66 }, + { 0xe6f2f2f0, 0xf2e6e4e0, 0xf0c0f1c7, 66 }, + { 0xecf4f4f1, 0xf4ece8e1, 0xf0c1f2ce, 66 }, + { 0xf8f8f9f3, 0xf9f8f1e3, 0xf0c3f4dc, 66 }, + { 0xf8f8faf6, 0xfaf8f2e7, 0xf0c7f8f8, 66 }, + { 0xf9f9fcfc, 0xfcf8f4ee, 0xf0cff8f8, 66 }, + { 0xfbfbfcfc, 0xfcf9f9fc, 0xf0def8f8, 66 }, + { 0xfefefcfc, 0xfcfafbfd, 0xf0fcf9f9, 66 }, + { 0xfefefdfd, 0xfdfdfefe, 0xf1fcfbfb, 66 }, + { 0xfefefefe, 0xfefefefe, 0xf3fcfefe, 66 }, + { 0xffffffff, 0xfefefefe, 0xf7fdfefe, 66 }, + { 0xffffffff, 0xfffffffe, 0xfefefeff, 66 }, + { 0xffffffff, 0xffffffff, 0xffffffff, 66 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_WIFI_SEARCH_VERTICAL[][4] = { + { 0x0, 0x800000, 0x0, 600 }, + { 0x40, 0x20a02040, 0x0, 600 }, + { 0x201048, 0x28a82848, 0x10200000, 500 }, + { 0x824124a, 0x2aaa2a4a, 0x12240800, 500 }, +}; + +constexpr uint32_t LEDMATRIX_ANIMATION_HOURGLASS_VERTICAL[][4] = { + { 0xffffff7e, 0x7e3c2442, 0x428181ff, 50 }, + { 0xffffff7e, 0x7e3c2c4a, 0x428181ff, 50 }, + { 0xffffff7e, 0x7e3c2c4a, 0x4a8981ff, 50 }, + { 0xffffff7e, 0x7e3c2c4a, 0x4a8989ff, 50 }, + { 0xffffff7e, 0x7e3c2c4a, 0x4a8999ff, 50 }, + { 0xfff7ff7e, 0x7e3c2c4a, 0x4a8999ff, 50 }, + { 0xffe7ff7e, 0x7e3c2c4a, 0x4a899dff, 50 }, + { 0xffc7ff7e, 0x7e3c2c4a, 0x4a899fff, 50 }, + { 0xffc7ff7e, 0x7e3c2c4a, 0x4a89bfff, 50 }, + { 0xffc3ff7e, 0x7e3c2c4a, 0x4a89ffff, 50 }, + { 0xffc1ff7e, 0x7e3c2c4a, 0x4a99ffff, 50 }, + { 0xff81ff7e, 0x7e3c2c4a, 0x4ab9ffff, 50 }, + { 0xff81f77e, 0x7e3c2c4a, 0x4ab9ffff, 50 }, + { 0xff81e77e, 0x7e3c2c4a, 0x4abdffff, 50 }, + { 0xff81c77e, 0x7e3c2c4a, 0x4afdffff, 50 }, + { 0xff81c37e, 0x7e3c2c4a, 0x4affffff, 50 }, + { 0xff81c376, 0x7e3c2c4a, 0x5affffff, 50 }, + { 0xff818166, 0x7e3c2c4a, 0x5effffff, 50 }, + { 0xff818142, 0x7e3c2c4a, 0x7effffff, 50 }, + { 0xff818142, 0x423c3c7e, 0x7effffff, 50 }, + { 0xff818142, 0x42243c7e, 0x7effffff, 300 }, +}; diff --git a/src/Modulino.h b/src/Modulino.h index 9657e9f..95ea543 100644 --- a/src/Modulino.h +++ b/src/Modulino.h @@ -9,6 +9,7 @@ #error "Learn more at: https://support.arduino.cc/hc/en-us/articles/10483225565980-Select-pin-numbering-for-Nano-ESP32-in-Arduino-IDE" #endif +#include "Arduino.h" #include "Wire.h" #include // from stm32duino #include // from stm32duino @@ -16,8 +17,8 @@ #include #include #include "Arduino_LTR381RGB.h" -#include "Arduino.h" //#include // need to provide a way to change Wire object +#include "Modulino_LED_Matrix.h" #ifndef ARDUINO_API_VERSION #define PinStatus uint8_t diff --git a/src/Modulino_LED_Matrix.h b/src/Modulino_LED_Matrix.h index 82839d9..446b9fc 100644 --- a/src/Modulino_LED_Matrix.h +++ b/src/Modulino_LED_Matrix.h @@ -1,5 +1,14 @@ #pragma once +// Fix compiler errors when compiling this +// together with "Arduino_LED_Matrix.h" +// as that header uses precompiler macros that +// rewrite function names globally. +#undef loadSequence +#undef renderBitmap +#undef endTextAnimation +#undef loadTextAnimationSequence + #include "Arduino.h" #include "Wire.h" @@ -14,21 +23,11 @@ #define DEFAULT_WIRE Wire #endif -constexpr uint8_t NUM_LEDS = 96; -constexpr uint8_t DEFAULT_ADDRESS = 0x39; -constexpr uint8_t GRAYSCALE_FRAME_SIZE = 48; -constexpr uint8_t MONOCHROMATIC_FRAME_SIZE = 12; -constexpr size_t DURATION_SIZE = sizeof(uint32_t); -constexpr size_t MONOCHROMATIC_ANIMATION_FRAME_SIZE = MONOCHROMATIC_FRAME_SIZE + DURATION_SIZE; -constexpr char GRAYSCALE_IDENTIFIER[] = "GS4"; -constexpr char MONOCHROMATIC_IDENTIFIER[] = "MON"; -constexpr uint8_t MODE_IDENTIFIER_SIZE = 3; - enum class DisplayMode { MonochromaticVertical, MonochromaticHorizontal, Grayscale, - Default = MonochromaticVertical + Default = MonochromaticHorizontal }; class ModulinoLEDMatrix @@ -38,6 +37,15 @@ class ModulinoLEDMatrix { public: + static constexpr uint8_t DEFAULT_ADDRESS = 0x39; + static constexpr uint8_t GRAYSCALE_FRAME_SIZE = 48; + static constexpr uint8_t MONOCHROMATIC_FRAME_SIZE = 12; + static constexpr size_t DURATION_SIZE = sizeof(uint32_t); + static constexpr size_t MONOCHROMATIC_ANIMATION_FRAME_SIZE = MONOCHROMATIC_FRAME_SIZE + DURATION_SIZE; + static constexpr char GRAYSCALE_IDENTIFIER[] = "GS4"; + static constexpr char MONOCHROMATIC_IDENTIFIER[] = "MON"; + static constexpr uint8_t MODE_IDENTIFIER_SIZE = 3; + ModulinoLEDMatrix(uint8_t address = DEFAULT_ADDRESS, HardwareI2C& wire = DEFAULT_WIRE, DisplayMode mode = DisplayMode::Default) #ifdef MATRIX_WITH_ARDUINOGRAPHICS : ArduinoGraphics(canvasWidth, canvasHeight)