diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile
index 909bcf681..29d75d19d 100644
--- a/.gitpod.Dockerfile
+++ b/.gitpod.Dockerfile
@@ -2,4 +2,4 @@ FROM gitpod/workspace-full
USER gitpod
-RUN pip3 install -U platformio && brew install uncrustify
+RUN pip3 install -U platformio
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e5d9a8633..6ca69c83c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -893,6 +893,7 @@ All notable changes to this project will be documented in this file.
### Changed
- Triple-mode TLS via configuration in a single firmware (TLS AWS IoT, Letsencrypt and No-TLS)
+- Berry C mapping moved to a separate ``berry_mapping`` library
### Fixed
- ESP32 PWM range
diff --git a/lib/lib_display/LedControl/src/LedControl.cpp b/lib/lib_display/LedControl/src/LedControl.cpp
index e43211fd8..e2230944c 100644
--- a/lib/lib_display/LedControl/src/LedControl.cpp
+++ b/lib/lib_display/LedControl/src/LedControl.cpp
@@ -208,4 +208,3 @@ void LedControl::spiTransfer(int addr, volatile byte opcode, volatile byte data)
digitalWrite(SPI_CS,HIGH);
}
-
diff --git a/lib/lib_display/LedControl/src/LedControl.h b/lib/lib_display/LedControl/src/LedControl.h
index f8180d07d..1cd3b13b4 100644
--- a/lib/lib_display/LedControl/src/LedControl.h
+++ b/lib/lib_display/LedControl/src/LedControl.h
@@ -187,4 +187,3 @@ class LedControl {
#endif //LedControl.h
-
diff --git a/lib/lib_display/LedControl/src/LedMatrix.cpp b/lib/lib_display/LedControl/src/LedMatrix.cpp
new file mode 100644
index 000000000..fb23fbc26
--- /dev/null
+++ b/lib/lib_display/LedControl/src/LedMatrix.cpp
@@ -0,0 +1,422 @@
+/*
+ * LedMatrix.h - Extends the Library LedControl for multiple 8x8 LED dot matrix maxDevices, based on MAX7219/MAX7221
+ * Copyright (c) 2021 Michael Beuss
+ *
+ * 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:
+ *
+ * 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 "LedMatrix.h"
+#include "font_6x8_base.h"
+//#include "font_6x8_UTF8_C2.h" // additional characters if needed
+//#include "font_6x8_UTF8_C3.h" // additional characters (latin1) if needed
+#include "../../../../tasmota/my_user_config.h" // to check compiler option USE_UTF8_LATIN1
+#ifdef USE_UTF8_LATIN1
+ #include "font_6x8_UTF8_C2.h" // 256 bytes
+ #include "font_6x8_UTF8_C3.h" // 512 bytes
+#endif
+
+
+//the opcodes for the MAX7221 and MAX7219
+#define OP_NOOP 0
+#define OP_DIGIT0 1
+#define OP_DIGIT1 2
+#define OP_DIGIT2 3
+#define OP_DIGIT3 4
+#define OP_DIGIT4 5
+#define OP_DIGIT5 6
+#define OP_DIGIT6 7
+#define OP_DIGIT7 8
+#define OP_DECODEMODE 9
+#define OP_INTENSITY 10
+#define OP_SCANLIMIT 11
+#define OP_SHUTDOWN 12
+#define OP_DISPLAYTEST 15
+
+LedMatrix::LedMatrix(int dataPin, int clkPin, int csPin, unsigned int colums, unsigned int rows)
+{
+ if (colums * rows > MAX72XX_MAX_DEVICES)
+ {
+ // dimension exeeds maximum buffer size
+ if (colums >= MAX72XX_MAX_DEVICES)
+ {
+ colums = MAX72XX_MAX_DEVICES;
+ rows = 1;
+ }
+ else
+ {
+ rows = MAX72XX_MAX_DEVICES / colums;
+ }
+ }
+
+ charWidth = font_char_width; // defined in header file of font
+ charHeight = font_char_height; // defined in header file of font
+ modulesPerRow = colums;
+ modulesPerCol = rows;
+ displayWidth = colums * 8;
+ displayHeight = rows * 8;
+ maxDevices = colums * rows;
+ moduleOrientation = ORIENTATION_UPSIDE_DOWN; // use setOrientation() to turn it
+ textBuf[0] = 0;
+ textWidth = 0;
+ textPosX = 0;
+ textPosY = 0;
+ appendTextBuf[0] = 0;
+ setScrollAppendText(" ");
+ powerIsOn = false;
+
+ // initialize all connected MAX7219/MAX7221 devices
+ SPI_MOSI = dataPin;
+ SPI_CLK = clkPin;
+ SPI_CS = csPin;
+ pinMode(SPI_MOSI, OUTPUT);
+ pinMode(SPI_CLK, OUTPUT);
+ pinMode(SPI_CS, OUTPUT);
+ SPI_MOSI = dataPin;
+
+ //spiTransfer_value(OP_DISPLAYTEST, 0); // display test
+ spiTransfer_value(OP_SCANLIMIT, 7); // scanlimit is set to max on startup
+ spiTransfer_value(OP_DECODEMODE, 0); // decode is done in source
+ clearDisplay();
+ //spiTransfer_value(OP_SHUTDOWN, 0); //we go into shutdown-mode (LEDs off) on startup
+ setIntensity(7); // initialize with the half of the maximum intensity [0..15]
+ power(true); // power on;
+}
+
+bool LedMatrix::drawText( const char *str, bool clearBefore)
+{
+ if(clearBefore) clearDisplay();
+ strncpy(textBuf, str, TEXT_BUFFER_SIZE -1);
+ textPosX = 0;
+ textPosY = 0;
+ textLen = countChars(str);
+ textWidth = textLen * charWidth;
+ if(textWidth <= displayWidth)
+ {
+ // text fits into the display, place it into the center
+ textPosX = (displayWidth - textWidth) / 2; // center
+ }
+ else
+ {
+ // The text ist longer than the display width. Scrolling is needed.
+ // Add a space in front of text to have a distance to the pervious scroll text.
+ addSpace();
+ }
+ drawTextAt(textBuf, textPosX, textPosY);
+ refresh(); // refresh display with the new drawed string content
+ return true;
+}
+
+bool LedMatrix::drawTextAt( const char *str, const int x, const int y )
+{
+ // draw character by character
+ int xPos = x;
+ const char* fontChar = nullptr;
+ for (unsigned int i = 0; (i= 0x20 && c < 0x80) // basic font
+ {
+ fontChar = font_20_7F[c-0x20];
+ }
+
+#ifdef font_6x8_UTF8_C2_h
+ else if(c == 0xC2) // UTF special characters
+ {
+ i++;
+ c= str[i];
+ if(c>= 0xA0 && c < 0xC0)
+ {
+ fontChar = font_UTF_C2_A0_BF[c - 0xA0];
+ }
+ }
+#endif // font_6x8_UTF8_C2_h
+
+#ifdef font_6x8_UTF8_C3_h
+ else if(c == 0xC3) // UTF latin1
+ {
+ i++;
+ c= str[i];
+ if(c>= 0x80 && c < 0xC0)
+ {
+ fontChar = font_UTF_C3_80_BF[c - 0x80];
+ }
+ }
+#endif // font_6x8_UTF8_C3_h
+
+ else if(c>= 0xC0 && c <= 0xDF)
+ {
+ i += 1; // 2 byte UTF sequence
+ }
+ else if(c>= 0xE0 && c <= 0xEF)
+ {
+ i += 2; // 3 byte UTF sequence
+ }
+ else if(c>= 0xF0 && c <= 0xF7)
+ {
+ i += 3; // 4 byte UTF sequence
+ }
+
+ drawCharAt(fontChar, xPos, y);
+ xPos += charWidth;
+ }
+ return true;
+}
+
+int LedMatrix::countChars( const char* utfText)
+{
+ int len = 0;
+ for( int i = 0; (i 15)
+ return false;
+
+ spiTransfer_value(OP_INTENSITY, intensity);
+ return true;
+}
+
+bool LedMatrix::setOrientation(LedMatrix::ModuleOrientation orientation)
+{
+ if(moduleOrientation != orientation)
+ {
+ moduleOrientation = orientation;
+ refresh();
+ }
+ return true;
+}
+
+bool LedMatrix::setScrollAppendText(const char* append )
+{
+ strncpy(appendTextBuf, append, TEXT_APPEND_BUFFER_SIZE -1);
+ return (strlen(append) < TEXT_APPEND_BUFFER_SIZE);
+}
+
+bool LedMatrix::setPixel(const int x, const int y, bool on)
+{
+ if (x >= displayWidth || y >= displayHeight)
+ return false;
+
+ int modul_col = x / 8; // x pos divided by 8 is the index of the modul to the right
+ int buffer_pos = modul_col + y * modulesPerRow;
+ byte buffer_byte = 0x80 >> (x % 8);
+ if (on)
+ {
+ buffer[buffer_pos] |= buffer_byte; // set bit
+ }
+ else
+ {
+ buffer[buffer_pos] &= ~buffer_byte; // reset bit
+ }
+ return true;
+}
+
+void LedMatrix::refresh()
+{
+ int col = 0;
+ int pixelRow = 0;
+ int bufPos = 0;
+ int deviceRow = 0;
+ for(int ledRow = 7; ledRow >= 0; ledRow--) // refresh from buttom to top
+ {
+ for( int addr = 0; addr < maxDevices; addr++)
+ {
+ if(moduleOrientation == ORIENTATION_NORMAL || moduleOrientation == ORIENTATION_UPSIDE_DOWN)
+ {
+ col = addr % modulesPerRow;
+ pixelRow = (addr / modulesPerRow) * 8 + ledRow;
+ bufPos = pixelRow * modulesPerRow + col;
+ if(moduleOrientation == ORIENTATION_NORMAL)
+ {
+ // ORIENTATION_NORMAL
+ deviceDataBuff[addr] = revereBitorder(buffer[bufPos]); // mirror
+ deviceRow = 7 - ledRow; // upside down
+ }
+ else
+ {
+ // ORIENTATION_UPSIDE_DOWN
+ deviceDataBuff[maxDevices -1 - addr] = buffer[bufPos];
+ deviceRow = ledRow;
+ }
+ }
+ else // ORIENTATION_TURN_RIGHT || ORIENTATION_TURN_LEFT
+ {
+ // not implemented yet
+ }
+ }
+ setRow_allDevices(deviceRow, deviceDataBuff);
+ }
+}
+
+// private functions
+/**
+ * @brief
+ *
+ * @param fontChar defines the pixelrows of a character. const char fontChar[charHeight]
+ * @param x
+ * @param y
+ */
+bool LedMatrix::drawCharAt( const char* fontChar, const int x, const int y)
+{
+ // ignore when the character position is not visible on the display
+ bool visible = (
+ x > 0 - (int)charWidth && x < (int)displayWidth &&
+ y > 0 - (int)charHeight && y < (int)displayHeight
+ );
+ if (!visible) return false;
+
+ // ignore the leading bits above charWidth of the font definition
+ static const byte charOffset = 8 - charWidth;
+
+ for (byte charY = 0; charY < charHeight; charY++)
+ {
+ char pixelRow = (fontChar[charY]) << charOffset; // skip the first bits when the character width is smaller than 8 pixel
+ for (byte charX = 0; charX < charWidth; charX++)
+ {
+ bool pixel = (pixelRow & 0x80); // pixel=true when upper bit is set
+ setPixel(x + charX, y + charY, pixel);
+ pixelRow = pixelRow << 1; // next pixel
+ }
+ }
+ return true;
+}
+
+byte LedMatrix::revereBitorder (byte b)
+{
+ static const byte lookup[16] = {
+ 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,
+ 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf
+ };
+ return (lookup[b & 0b1111] << 4) | lookup[b >> 4];
+}
+
+void LedMatrix::addSpace()
+{
+ strncat(textBuf, appendTextBuf, TEXT_BUFFER_SIZE -1);
+ textPosX = strlen(appendTextBuf) * charWidth; // start scrolling with space
+ textLen = countChars(textBuf);
+ textWidth = countChars(textBuf) * charWidth;
+}
+
+void LedMatrix::setRow_allDevices(int row, byte *data)
+{
+ if (row < 0 || row > 7)
+ return;
+ spiTransfer_array(row + 1, data);
+}
+
+void LedMatrix::spiTransfer_array(byte opcode, const byte* data) {
+ // create an array with the data to shift out
+ for (int addr = 0; addr < maxDevices; addr++)
+ {
+ spidata[addr * 2 + 1] = opcode;
+ spidata[addr * 2] = data[addr];
+ }
+ // enable the line
+ digitalWrite(SPI_CS, LOW);
+ // shift out the data
+ for (int i = maxDevices * 2 -1; i >= 0; i--)
+ {
+ shiftOut(SPI_MOSI, SPI_CLK, MSBFIRST, spidata[i]);
+ }
+ // latch the data onto the display
+ digitalWrite(SPI_CS, HIGH);
+}
+
+void LedMatrix::spiTransfer_value(byte opcode, byte value)
+{
+ memset(deviceDataBuff, (byte)value, maxDevices);
+ spiTransfer_array(opcode, deviceDataBuff);
+}
+
+
+
diff --git a/lib/lib_display/LedControl/src/LedMatrix.h b/lib/lib_display/LedControl/src/LedMatrix.h
new file mode 100644
index 000000000..b77038ecc
--- /dev/null
+++ b/lib/lib_display/LedControl/src/LedMatrix.h
@@ -0,0 +1,211 @@
+/*
+ * LedMatrix.h - Extends the Library LedControl for multiple 8x8 LED dot matrix devices, based on MAX7219/MAX7221
+ * Copyright (c) 2021 Michael Beuss
+ *
+ * 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:
+ *
+ * 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 LedMatrix_h
+#define LedMatrix_h
+
+#include
+
+#if (ARDUINO >= 100)
+#include
+#else
+#include
+#endif
+
+#ifndef MAX72XX_MAX_DEVICES
+#define MAX72XX_MAX_DEVICES 32 // maximum number of devices based on MXA7219/MAX7221
+#endif
+
+#define MATRIX_BUFFER_SIZE MAX72XX_MAX_DEVICES * 8 // 8 bytes per modul. One byte represents 8 LEDs.
+#define TEXT_BUFFER_SIZE 256 // maximum text length that can be scrolled
+#define TEXT_APPEND_BUFFER_SIZE 16 // used for characters that are appended to the scroll text, before it repeats
+#define SPI_BUFFER_SIZE MAX72XX_MAX_DEVICES * 2 // buffer size fort shifting commands to all devices (2 bytes each)
+
+
+/**
+ * @brief LedMatrix controls multiple 8x8 LED dot matrx devices.
+ * All devices in rows and clolums together build a common display pixel matrix.
+ *
+ */
+class LedMatrix
+{
+ public:
+ enum ModuleOrientation // orientation of 8x8 LED dot matrix mdules (first module starts at top left)
+ {
+ ORIENTATION_NORMAL, // first pixel is on top left, no turn is necessary
+ ORIENTATION_TURN_RIGHT, // first pixel is on bottom left, for correction it has to turn 90° right
+ ORIENTATION_UPSIDE_DOWN, // first pixel is on bottom right, fpr correction it has to turn 180°
+ ORIENTATION_TURN_LEFT, // first pixel is on top right, for correction is has to turn 90° left.
+ };
+
+ public:
+ /**
+ * @brief Construct a new LED Matrix object
+ *
+ * @param colums of 8x8 LED dot matrix devices
+ * @param rows of 8x8 LED dot matrix devices
+ */
+ LedMatrix(int dataPin, int clkPin, int csPin, unsigned int colums, unsigned int rows);
+
+ /**
+ * @brief Draws a string to the display.
+ * When the text fits into the display, it will be shown in the center.
+ * When the text is longer than than the display width, it can be scrolled per pixel with function scrollText().
+ *
+ * @param str string to display
+ * @param clearBefore true (default) clears old display content before, false: do not clear display before
+ */
+ bool drawText( const char *str, bool clearBefore = true );
+
+ /**
+ * @brief Dwaws a character string to a defined display position. The position (x,y) is used for the upper left pixel of the text.
+ * Existing content outside the drawing text area will not be cleared. But you can use clearDisplay() before.
+ * Use refresh() after all text parts are drawed.
+ *
+ * @param str string to display
+ * @param x horizantal pixel position to start with string (0 is most left)
+ * @param y vertical pixel position for the top position of the string (0 is top)
+ */
+ bool drawTextAt( const char *str, const int x, const int y );
+
+ /**
+ * @brief Scroll the current text one pixel to the left.
+ * Repeat with from start when end of text reached. This function can be called every 50 ms to get a propper scroll speed.
+ *
+ */
+ bool scrollText();
+
+ /**
+ * @brief switches the display on or off
+ *
+ * @param on true: on false: off
+ */
+
+ void power( bool on );
+
+ bool isPowerOn();
+
+ /**
+ * @brief cleares the display and text buffer
+ *
+ */
+ bool clearDisplay(void);
+
+ /**
+ * @brief Set the brightness of the display
+ *
+ * @param dim 0..15 (0: dark .. 15: light)
+ */
+ bool setIntensity(byte dim);
+
+ /**
+ * @brief Set the orientation of the 8x8 LED dot matrix module
+ *
+ * @param orientation
+ */
+ bool setOrientation(LedMatrix::ModuleOrientation orientation);
+
+ /**
+ * @brief Set ap pixel at a defined position.
+ * After all Pixels are set, call refresh() to send it to the display.
+ *
+ * @param x horizontal position from left
+ * @param y vertical position from top
+ * @param on true: on, false: off
+ */
+
+ /**
+ * @brief Adds a string before the scrolling text to set a distance. Usually some spaces are used.
+ *
+ * @param append text to append to the scrolling text before repeating.
+ */
+ bool setScrollAppendText(const char* append );
+
+ bool setPixel( const int x, const int y, bool on=true);
+ /**
+ * @brief sends the changed content of the buffer to the display
+ *
+ */
+ void refresh();
+
+ private:
+
+ bool drawCharAt( const char* fontChar, int x, int y ); // Draws a character to a defined position
+ int countChars( const char* utfText); // count the characters of an UTF8 string. To be uesd instead of strlen().
+ byte revereBitorder(byte b); // returnes the byte in the reverse bit order.
+ void addSpace(); // adds characters in front of the text to get a distance to the repeating scroll text
+
+ // device contrl MAX7219/MAX7221
+ /**
+ * @brief Set data for the same row of all devices
+ *
+ * @param row [0..8]
+ * @param value array of bytes, one for each device
+ */
+ void setRow_allDevices(int row, byte* value);
+
+ /* Send out a command with the same opcode to all devices */
+ /**
+ * @brief sends opcode with specific data values to each device
+ *
+ * @param opcode
+ * @param data array of byte values (data[0] is the value for the first device)
+ */
+ void spiTransfer_array(byte opcode, const byte* data);
+
+ /**
+ * @brief sends opcode with same value to all devices
+ */
+ void spiTransfer_value(byte opcode, byte value);
+
+
+ private:
+ int SPI_MOSI; // Data is shifted out of this pin
+ int SPI_CLK; // The clock is signaled on this pin
+ int SPI_CS; // This one is driven LOW for chip selectzion
+
+ unsigned int modulesPerRow;
+ unsigned int modulesPerCol;
+ unsigned int displayWidth; // matrix width [pixel]
+ unsigned int displayHeight; // matrix height [pixel]
+ int maxDevices; // number of used 8x8 devices
+ uint8_t moduleOrientation;
+ byte buffer[MATRIX_BUFFER_SIZE];
+ byte deviceDataBuff[MAX72XX_MAX_DEVICES];
+ int charWidth;
+ int charHeight;
+ char textBuf[TEXT_BUFFER_SIZE];
+ char appendTextBuf[TEXT_APPEND_BUFFER_SIZE];
+ int textLen; // number of UTF8 characters
+ int textWidth; // width of text [pixel]
+ int textPosX; // horizontal pixel position of scrolling text
+ int textPosY; // vertical pixelposition of scrolling text;
+ byte spidata[SPI_BUFFER_SIZE]; // The array for shifting the data to the devices
+ bool powerIsOn;
+
+};
+
+#endif //LedMatrix_h
\ No newline at end of file
diff --git a/lib/lib_display/LedControl/src/font_6x8_UTF8_C2.h b/lib/lib_display/LedControl/src/font_6x8_UTF8_C2.h
new file mode 100644
index 000000000..72854b4da
--- /dev/null
+++ b/lib/lib_display/LedControl/src/font_6x8_UTF8_C2.h
@@ -0,0 +1,340 @@
+// 6x8 ascii font
+#ifndef font_6x8_UTF8_C2_h
+#define font_6x8_UTF8_C2_h
+/**
+ * additional characters to font_6x8_base.h
+ * 256 bytes
+ *
+ */
+
+/*
+UTF8 after 0xC2
+ …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
+A… NBSP¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ SHY ® ¯
+B… ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
+*/
+const char font_UTF_C2_A0_BF[0xC0-0xA0][8] = {
+
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x80 NBSP
+ {
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00001110,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x81 ¡
+ {
+ 0b00000000,
+ 0b00000100,
+ 0b00001110,
+ 0b00010000,
+ 0b00010000,
+ 0b00001110,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x82 ¢
+ {
+ 0b00000110,
+ 0b00001001,
+ 0b00001000,
+ 0b00011110,
+ 0b00001000,
+ 0b00001001,
+ 0b00010111,
+ 0b00000000,
+ }, // 0x83 £
+ {
+ 0b00010001,
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x84 ¤
+ {
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00011111,
+ 0b00000100,
+ 0b00011111,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x85 ¥
+ {
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x86 ¦
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00001100,
+ 0b00001010,
+ 0b00000110,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x87 §
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001010,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x88 ¨
+ {
+ 0b00011110,
+ 0b00100001,
+ 0b00101101,
+ 0b00101001,
+ 0b00101101,
+ 0b00100001,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x89 ©
+ {
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ 0b00001111,
+ 0b00000000,
+ }, // 0x8A ª
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001001,
+ 0b00010010,
+ 0b00001001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x8B «
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00111111,
+ 0b00000001,
+ 0b00000001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x8C ¬
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000001,
+ 0b00000001,
+ 0b00000000,
+ 0b11111111,
+ 0b00000000,
+ }, // 0x8D SHY
+ {
+ 0b00011110,
+ 0b00100101,
+ 0b00101011,
+ 0b00101101,
+ 0b00101011,
+ 0b00100001,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x8E ®
+ {
+ 0b00000000,
+ 0b00001110,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x8F ¯
+ {
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x90 °
+ {
+ 0b00000000,
+ 0b00000100,
+ 0b00001110,
+ 0b00000100,
+ 0b00000000,
+ 0b00001110,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x91 ±
+ {
+ 0b00011000,
+ 0b00000100,
+ 0b00001000,
+ 0b00011100,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x92 ²
+ {
+ 0b00011100,
+ 0b00001000,
+ 0b00001100,
+ 0b00011000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x93 ³
+ {
+ 0b00001100,
+ 0b00001100,
+ 0b00001000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x94 ´
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00011100,
+ 0b00010000,
+ 0b00010000,
+ }, // 0x95 µ
+ {
+ 0b00001111,
+ 0b00010101,
+ 0b00010101,
+ 0b00001101,
+ 0b00000101,
+ 0b00000101,
+ 0b00000101,
+ 0b00000000,
+ }, // 0x96 ¶
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x97 ·
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001110,
+ 0b00000110,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x98 ¸
+ {
+ 0b00001000,
+ 0b00011000,
+ 0b00001000,
+ 0b00001000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x99 ¹
+ {
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x9A º
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010010,
+ 0b00001001,
+ 0b00010010,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x9B »
+ {
+ 0b00010000,
+ 0b00010010,
+ 0b00010100,
+ 0b00001011,
+ 0b00010101,
+ 0b00000111,
+ 0b00000001,
+ 0b00000000,
+ }, // 0x9C ¼
+ {
+ 0b00010000,
+ 0b00010010,
+ 0b00010100,
+ 0b00001110,
+ 0b00010001,
+ 0b00000010,
+ 0b00000111,
+ 0b00000000,
+ }, // 0x9D ½
+ {
+ 0b00110000,
+ 0b00011010,
+ 0b00110100,
+ 0b00001011,
+ 0b00010101,
+ 0b00000111,
+ 0b00000001,
+ 0b00000000,
+ }, // 0x9E ¾
+ {
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00001100,
+ 0b00010000,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x9F ¿
+};
+
+#endif // font_6x8_UTF8_C2_h
\ No newline at end of file
diff --git a/lib/lib_display/LedControl/src/font_6x8_UTF8_C3.h b/lib/lib_display/LedControl/src/font_6x8_UTF8_C3.h
new file mode 100644
index 000000000..aa32f434a
--- /dev/null
+++ b/lib/lib_display/LedControl/src/font_6x8_UTF8_C3.h
@@ -0,0 +1,678 @@
+// 6x8 ascii font
+#ifndef font_6x8_UTF8_C3_h
+#define font_6x8_UTF8_C3_h
+/**
+ * additional characters to font_6x8_base.h
+ * 512 bytes
+ *
+ */
+
+/*
+UTF8 after 0xC3
+ …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
+8… À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
+9… Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
+A… à á â ã ä å æ ç è é ê ë ì í î ï
+B… ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
+*/
+const char font_UTF_C3_80_BF[0xC0-0x80][8] = {
+
+ {
+ 0b00001100,
+ 0b00000000,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x80 À
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x81 Á
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x82 Â
+ {
+ 0b00000101,
+ 0b00001010,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x83 Ã
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x84 Ä
+ {
+ 0b00001110,
+ 0b00001010,
+ 0b00001110,
+ 0b00011011,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x85 Å
+ {
+ 0b00000111,
+ 0b00001100,
+ 0b00010100,
+ 0b00010111,
+ 0b00011100,
+ 0b00010100,
+ 0b00010111,
+ 0b00000000,
+ }, // 0x86 Æ
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010000,
+ 0b00010000,
+ 0b00010001,
+ 0b00001110,
+ 0b00000100,
+ 0b00001100,
+ }, // 0x87 Ç
+ {
+ 0b00001100,
+ 0b00000000,
+ 0b00011111,
+ 0b00010000,
+ 0b00011110,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x88 È
+
+ {
+ 0b00000011,
+ 0b00000000,
+ 0b00011111,
+ 0b00010000,
+ 0b00011110,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x89 É
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00011111,
+ 0b00010000,
+ 0b00011110,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x8A Ê
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00011111,
+ 0b00010000,
+ 0b00011110,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x8B Ë
+ {
+ 0b00001100,
+ 0b00000000,
+ 0b00001110,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x8C Ì
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00001110,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x8D Í
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00001110,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x8E Î
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00001110,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x8F Ï
+
+ {
+ 0b00001110,
+ 0b00001001,
+ 0b00001001,
+ 0b00011101,
+ 0b00001001,
+ 0b00001001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x90 Ð
+ {
+ 0b00001010,
+ 0b00010100,
+ 0b00000000,
+ 0b00010010,
+ 0b00011010,
+ 0b00010110,
+ 0b00010010,
+ 0b00000000,
+ }, // 0x91 Ñ
+ {
+ 0b00011000,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x92 Ò
+ {
+ 0b00000110,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x93 Ó
+ {
+ 0b00001110,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x94 Ô
+ {
+ 0b00001010,
+ 0b00010100,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x95 Õ
+ {
+ 0b00010010,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x96 Ö
+ {
+ 0b00000000,
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x97 ×
+ {
+ 0b00001111,
+ 0b00010011,
+ 0b00010101,
+ 0b00010101,
+ 0b00010101,
+ 0b00011001,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x98 Ø
+
+ {
+ 0b00011000,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x99 Ù
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x9A Ú
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x9B Û
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x9C Ü
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x9D Ý
+ {
+ 0b00011000,
+ 0b00010000,
+ 0b00011100,
+ 0b00010010,
+ 0b00010010,
+ 0b00011100,
+ 0b00010000,
+ 0b00011000,
+ }, // 0x9E Þ
+ {
+ 0b00000000,
+ 0b00011100,
+ 0b00010010,
+ 0b00011100,
+ 0b00010010,
+ 0b00010010,
+ 0b00011100,
+ 0b00010000,
+ }, // 0x9F ß
+
+ {
+ 0b00001100,
+ 0b00000000,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA0 à
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA1 á
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA2 â
+ {
+ 0b00000101,
+ 0b00001010,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA3 ã
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA4 ä
+ {
+ 0b00001110,
+ 0b00001010,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA5 å
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00011110,
+ 0b00000101,
+ 0b00011111,
+ 0b00010100,
+ 0b00001111,
+ 0b00000000,
+ }, // 0xA6 æ
+ {
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00010000,
+ 0b00010001,
+ 0b00001110,
+ 0b00000100,
+ 0b00001100,
+ }, // 0xA7 ç
+ {
+ 0b00001100,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0xA8 è
+ {
+ 0b00000011,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0xA9 é
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0xAA ê
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0xAB ë
+ {
+ 0b00001000,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000110,
+ 0b00000000,
+ }, // 0xAC ì
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000110,
+ 0b00000000,
+ }, // 0xAD í
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000110,
+ 0b00000000,
+ }, // 0xAE î
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000110,
+ 0b00000000,
+ }, // 0xAF ï
+
+ {
+ 0b00001100,
+ 0b00010000,
+ 0b00001000,
+ 0b00000100,
+ 0b00001110,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0xB0 ð
+ {
+ 0b00001010,
+ 0b00010100,
+ 0b00000000,
+ 0b00011100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00000000,
+ }, // 0xB1 ñ
+ {
+ 0b00011000,
+ 0b00000000,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0xB2 ò
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0xB3 ó
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0xB4 ô
+ {
+ 0b00001010,
+ 0b00010100,
+ 0b00000000,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0xB5 õ
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0xB6 ö
+ {
+ 0b00000000,
+ 0b00000100,
+ 0b00000000,
+ 0b00011111,
+ 0b00000000,
+ 0b00000100,
+ 0b00000000,
+ 0b00000000,
+ }, // 0xB7 ÷
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000001,
+ 0b00001110,
+ 0b00010110,
+ 0b00011010,
+ 0b00011100,
+ 0b00100000,
+ }, // 0xB8 ø
+ {
+ 0b00011000,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010110,
+ 0b00001010,
+ 0b00000000,
+ }, // 0xB9 ù
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010110,
+ 0b00001010,
+ 0b00000000,
+ }, // 0xBA ú
+ {
+ 0b00001110,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010110,
+ 0b00001010,
+ 0b00000000,
+ }, // 0xBB û
+ {
+ 0b00010010,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010110,
+ 0b00001010,
+ 0b00000000,
+ }, // 0xBC ü
+ {
+ 0b00000110,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001110,
+ 0b00000100,
+ 0b00011000,
+ }, // 0xBD ý
+ {
+ 0b00000000,
+ 0b00011000,
+ 0b00010000,
+ 0b00011100,
+ 0b00010010,
+ 0b00011100,
+ 0b00010000,
+ 0b00011000,
+ }, // 0xBE þ
+ {
+ 0b00001010,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001110,
+ 0b00000100,
+ 0b00011000,
+ }, // 0xBF ÿ
+};
+
+/*
+ISO/IEC 8859-1 (latin1)
+ …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
+A… NBSP ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ SHY ® ¯
+B… ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
+C… À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
+D… Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
+E… à á â ã ä å æ ç è é ê ë ì í î ï
+F… ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
+*/
+
+#endif // font_6x8_UTF8_C3_h
\ No newline at end of file
diff --git a/lib/lib_display/LedControl/src/font_6x8_base.h b/lib/lib_display/LedControl/src/font_6x8_base.h
new file mode 100644
index 000000000..084b28c00
--- /dev/null
+++ b/lib/lib_display/LedControl/src/font_6x8_base.h
@@ -0,0 +1,986 @@
+// 6x8 ascii font
+#ifndef font_6x8_base_h
+#define font_6x8_base_h
+/**
+ * Momory size of basic ascii font: 768 bytes
+ *
+ */
+
+/*
+ …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F
+2… SP ! " # $ % & ' ( ) * + , - . /
+3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+4… @ A B C D E F G H I J K L M N O
+5… P Q R S T U V W X Y Z [ \ ] ^ _
+6… ` a b c d e f g h i j k l m n o
+7… p q r s t u v w x y z { | } ~
+*/
+
+const unsigned int font_char_width = 6;
+const unsigned int font_char_height = 8;
+
+const char font_20_7F[0x80-0x20][8] = {
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x20
+ {
+ 0b00000100,
+ 0b00001110,
+ 0b00001110,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x21 !
+ {
+ 0b00011011,
+ 0b00011011,
+ 0b00010010,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x22 "
+ {
+ 0b00000000,
+ 0b00001010,
+ 0b00011111,
+ 0b00001010,
+ 0b00001010,
+ 0b00011111,
+ 0b00001010,
+ 0b00000000,
+ }, // 0x23 #
+ {
+ 0b00001000,
+ 0b00001110,
+ 0b00010000,
+ 0b00001100,
+ 0b00000010,
+ 0b00011100,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x24 $
+ {
+ 0b00011001,
+ 0b00011001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010011,
+ 0b00010011,
+ 0b00000000,
+ }, // 0x25 %
+ {
+ 0b00001000,
+ 0b00010100,
+ 0b00010100,
+ 0b00001000,
+ 0b00010101,
+ 0b00010010,
+ 0b00001101,
+ 0b00000000,
+ }, // 0x26 &
+ {
+ 0b00001100,
+ 0b00001100,
+ 0b00001000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x27 '
+ {
+ 0b00000100,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x28 (
+ {
+ 0b00001000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001000,
+ 0b00000000,
+ }, // 0x29 )
+ {
+ 0b00000000,
+ 0b00001010,
+ 0b00001110,
+ 0b00011111,
+ 0b00001110,
+ 0b00001010,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x2A *
+ {
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00011111,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x2B +
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001100,
+ 0b00001100,
+ 0b00001000,
+ }, // 0x2C ,
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00011111,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x2D -
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001100,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x2E .
+ {
+ 0b00000000,
+ 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x2F /
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010011,
+ 0b00010101,
+ 0b00011001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x30 0
+ {
+ 0b00000100,
+ 0b00001100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x31 1
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00000001,
+ 0b00000110,
+ 0b00001000,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x32 2
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00000001,
+ 0b00001110,
+ 0b00000001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x33 3
+ {
+ 0b00000010,
+ 0b00000110,
+ 0b00001010,
+ 0b00010010,
+ 0b00011111,
+ 0b00000010,
+ 0b00000010,
+ 0b00000000,
+ }, // 0x34 4
+ {
+ 0b00011111,
+ 0b00010000,
+ 0b00010000,
+ 0b00011110,
+ 0b00000001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x35 5
+ {
+ 0b00000110,
+ 0b00001000,
+ 0b00010000,
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x36 6
+ {
+ 0b00011111,
+ 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00000000,
+ }, // 0x37 7
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x38 8
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00001111,
+ 0b00000001,
+ 0b00000010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x39 9
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001100,
+ 0b00001100,
+ 0b00000000,
+ 0b00001100,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x3A :
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001100,
+ 0b00001100,
+ 0b00000000,
+ 0b00001100,
+ 0b00001100,
+ 0b00001000,
+ }, // 0x3B ;
+ {
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00001000,
+ 0b00000100,
+ 0b00000010,
+ 0b00000000,
+ }, // 0x3C <
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00011111,
+ 0b00000000,
+ 0b00000000,
+ 0b00011111,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x3D =
+ {
+ 0b00001000,
+ 0b00000100,
+ 0b00000010,
+ 0b00000001,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00000000,
+ }, // 0x3E >
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00000001,
+ 0b00000110,
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x3F ?
+
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010111,
+ 0b00010101,
+ 0b00010111,
+ 0b00010000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x40 @
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x41 A
+ {
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x42 B
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x43 C
+ {
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x44 D
+ {
+ 0b00011111,
+ 0b00010000,
+ 0b00010000,
+ 0b00011110,
+ 0b00010000,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x45 E
+ {
+ 0b00011111,
+ 0b00010000,
+ 0b00010000,
+ 0b00011110,
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00000000,
+ }, // 0x46 F
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010000,
+ 0b00010111,
+ 0b00010001,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0x47 G
+ {
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00011111,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x48 H
+ {
+ 0b00001110,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x49 I
+ {
+ 0b00000001,
+ 0b00000001,
+ 0b00000001,
+ 0b00000001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x4A J
+ {
+ 0b00010001,
+ 0b00010010,
+ 0b00010100,
+ 0b00011000,
+ 0b00010100,
+ 0b00010010,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x4B K
+ {
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00011111,
+ 0b00000000,
+ }, // 0x4C L
+ {
+ 0b00010001,
+ 0b00011011,
+ 0b00010101,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x4D M
+ {
+ 0b00010001,
+ 0b00011001,
+ 0b00010101,
+ 0b00010011,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x4E N
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x4F O
+ {
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ 0b00010000,
+ 0b00010000,
+ 0b00000000,
+ }, // 0x50 P
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010101,
+ 0b00010010,
+ 0b00001101,
+ 0b00000000,
+ }, // 0x51 Q
+ {
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00010010,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x52 R
+ {
+ 0b00001110,
+ 0b00010001,
+ 0b00010000,
+ 0b00001110,
+ 0b00000001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x53 S
+ {
+ 0b00011111,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x54 T
+ {
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x55 U
+ {
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x56 V
+ {
+ 0b00010001,
+ 0b00010001,
+ 0b00010101,
+ 0b00010101,
+ 0b00010101,
+ 0b00010101,
+ 0b00001010,
+ 0b00000000,
+ }, // 0x57 W
+ {
+ 0b00010001,
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x58 X
+ {
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x59 Y
+ {
+ 0b00011110,
+ 0b00000010,
+ 0b00000100,
+ 0b00001000,
+ 0b00010000,
+ 0b00010000,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x5A Z
+ {
+ 0b00001110,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x5B [
+ {
+ 0b00000000,
+ 0b00010000,
+ 0b00001000,
+ 0b00000100,
+ 0b00000010,
+ 0b00000001,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x5C backslash
+ {
+ 0b00001110,
+ 0b00000010,
+ 0b00000010,
+ 0b00000010,
+ 0b00000010,
+ 0b00000010,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x5D ]
+ {
+ 0b00000100,
+ 0b00001010,
+ 0b00010001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x5E ^
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00111111,
+ }, // 0x5F _
+ {
+ 0b00001100,
+ 0b00001100,
+ 0b00000100,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x60 `
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001110,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0x61 a
+ {
+ 0b00010000,
+ 0b00010000,
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x62 b
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00010000,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x63 c
+ {
+ 0b00000001,
+ 0b00000001,
+ 0b00001111,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001111,
+ 0b00000000,
+ }, // 0x64 d
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x65 e
+ {
+ 0b00000110,
+ 0b00001000,
+ 0b00001000,
+ 0b00011110,
+ 0b00001000,
+ 0b00001000,
+ 0b00001000,
+ 0b00000000,
+ }, // 0x66 f
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001111,
+ 0b00010001,
+ 0b00010001,
+ 0b00001111,
+ 0b00000001,
+ 0b00001110,
+ }, // 0x67 g
+ {
+ 0b00010000,
+ 0b00010000,
+ 0b00011100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00000000,
+ }, // 0x68 h
+ {
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000110,
+ 0b00000000,
+ }, // 0x69 i
+ {
+ 0b00000010,
+ 0b00000000,
+ 0b00000110,
+ 0b00000010,
+ 0b00000010,
+ 0b00000010,
+ 0b00010010,
+ 0b00001100,
+ }, // 0x6A j
+ {
+ 0b00010000,
+ 0b00010000,
+ 0b00010010,
+ 0b00010100,
+ 0b00011000,
+ 0b00010100,
+ 0b00010010,
+ 0b00000000,
+ }, // 0x6B k
+ {
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000110,
+ 0b00000000,
+ }, // 0x6C l
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00011010,
+ 0b00010101,
+ 0b00010101,
+ 0b00010001,
+ 0b00010001,
+ 0b00000000,
+ }, // 0x6D m
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00011100,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00000000,
+ }, // 0x6E n
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x6F o
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00011110,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00011110,
+ 0b00010000,
+ }, // 0x70 p
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001111,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001111,
+ 0b00000001,
+ }, // 0x71 q
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010110,
+ 0b00001001,
+ 0b00001000,
+ 0b00001000,
+ 0b00011100,
+ 0b00000000,
+ }, // 0x72 r
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00001110,
+ 0b00010000,
+ 0b00001110,
+ 0b00000001,
+ 0b00001110,
+ 0b00000000,
+ }, // 0x73 s
+ {
+ 0b00000000,
+ 0b00001000,
+ 0b00011110,
+ 0b00001000,
+ 0b00001000,
+ 0b00001010,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x74 t
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00010110,
+ 0b00001010,
+ 0b00000000,
+ }, // 0x75 u
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010001,
+ 0b00010001,
+ 0b00010001,
+ 0b00001010,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x76 v
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010001,
+ 0b00010001,
+ 0b00010101,
+ 0b00011111,
+ 0b00001010,
+ 0b00000000,
+ }, // 0x77 w
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00001100,
+ 0b00010010,
+ 0b00010010,
+ 0b00000000,
+ }, // 0x78 x
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00010010,
+ 0b00010010,
+ 0b00010010,
+ 0b00001110,
+ 0b00000100,
+ 0b00011000,
+ }, // 0x79 y
+ {
+ 0b00000000,
+ 0b00000000,
+ 0b00011110,
+ 0b00000010,
+ 0b00001100,
+ 0b00010000,
+ 0b00011110,
+ 0b00000000,
+ }, // 0x7A z
+ {
+ 0b00000110,
+ 0b00001000,
+ 0b00001000,
+ 0b00011000,
+ 0b00001000,
+ 0b00001000,
+ 0b00000110,
+ 0b00000000,
+ }, // 0x7B {
+ {
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ 0b00000100,
+ 0b00000100,
+ 0b00000100,
+ 0b00000000,
+ }, // 0x7C |
+ {
+ 0b00001100,
+ 0b00000010,
+ 0b00000010,
+ 0b00000011,
+ 0b00000010,
+ 0b00000010,
+ 0b00001100,
+ 0b00000000,
+ }, // 0x7D }
+ {
+ 0b00001010,
+ 0b00010100,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x7E ~
+ {
+ 0b00000100,
+ 0b00001110,
+ 0b00011011,
+ 0b00010001,
+ 0b00010001,
+ 0b00011111,
+ 0b00000000,
+ 0b00000000,
+ }, // 0x7F ␡
+};
+
+#endif // font_6x8_base_h
\ No newline at end of file
diff --git a/lib/libesp32/Berry-HttpClientLight/library.json b/lib/libesp32/Berry-HttpClientLight/library.json
index 1e1479bbb..c9e5208f9 100644
--- a/lib/libesp32/Berry-HttpClientLight/library.json
+++ b/lib/libesp32/Berry-HttpClientLight/library.json
@@ -4,8 +4,8 @@
"description": "Forked version of Arduino HttpClient to support BearSSL instead of mbedTLS",
"license": "MIT",
"homepage": "https://github.com/arendst/Tasmota",
- "frameworks": "*",
- "platforms": "*",
+ "frameworks": "arduino",
+ "platforms": "espressif32",
"authors":
{
"name": "Stephan Hadinger",
diff --git a/lib/libesp32/Zip-readonly-FS/library.json b/lib/libesp32/Zip-readonly-FS/library.json
index a8c83f81b..e57844d30 100644
--- a/lib/libesp32/Zip-readonly-FS/library.json
+++ b/lib/libesp32/Zip-readonly-FS/library.json
@@ -4,8 +4,8 @@
"description": "Simple filesystem to open an uncompressed ZIP file and read-only",
"license": "MIT",
"homepage": "https://github.com/arendst/Tasmota",
- "frameworks": "*",
- "platforms": "*",
+ "frameworks": "arduino",
+ "platforms": "espressif32",
"authors":
{
"name": "Stephan Hadinger",
diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c
index 934400bbb..02b25a747 100644
--- a/lib/libesp32/berry/default/be_modtab.c
+++ b/lib/libesp32/berry/default/be_modtab.c
@@ -157,9 +157,7 @@ extern void be_load_driver_audio_lib(bvm *vm);
#endif
#ifdef USE_LVGL
-extern void be_load_lv_color_class(bvm *vm);
-extern void be_load_lv_font_class(bvm *vm);
-extern void be_load_LVGL_glob_class(bvm *vm);
+#include "lv_berry.h"
// custom widgets
extern void be_load_lv_signal_bars_class(bvm *vm);
extern void be_load_lv_wifi_bars_class(bvm *vm);
@@ -213,10 +211,7 @@ BERRY_API void be_load_custom_libs(bvm *vm)
#endif
#ifdef USE_LVGL
// LVGL
- be_load_lv_color_class(vm);
- be_load_lv_font_class(vm);
-
- be_load_LVGL_glob_class(vm);
+ be_load_lvgl_classes(vm);
// custom widgets
be_load_lv_signal_bars_class(vm);
be_load_lv_wifi_bars_class(vm);
diff --git a/lib/libesp32/berry/gen.sh b/lib/libesp32/berry/gen.sh
index 303a62c95..0dc462474 100755
--- a/lib/libesp32/berry/gen.sh
+++ b/lib/libesp32/berry/gen.sh
@@ -1,2 +1,2 @@
#!/bin/bash
-python3 tools/pycoc/main.py -o generate src default ../berry_mapping/src -c default/berry_conf.h
+python3 tools/pycoc/main.py -o generate src default ../berry_mapping/src ../../libesp32_lvgl/lv_berry/src -c default/berry_conf.h
diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h
index cdf680ea3..430c08944 100644
--- a/lib/libesp32/berry/generate/be_const_strtab.h
+++ b/lib/libesp32/berry/generate/be_const_strtab.h
@@ -206,6 +206,7 @@ extern const bcstring be_const_str_add;
extern const bcstring be_const_str_add_anim;
extern const bcstring be_const_str_add_cmd;
extern const bcstring be_const_str_add_driver;
+extern const bcstring be_const_str_add_handler;
extern const bcstring be_const_str_add_header;
extern const bcstring be_const_str_add_rule;
extern const bcstring be_const_str_addr;
@@ -464,6 +465,7 @@ extern const bcstring be_const_str_length_X20in_X20bits_X20must_X20be_X20between
extern const bcstring be_const_str_light;
extern const bcstring be_const_str_line_dsc;
extern const bcstring be_const_str_list;
+extern const bcstring be_const_str_list_handlers;
extern const bcstring be_const_str_listdir;
extern const bcstring be_const_str_load;
extern const bcstring be_const_str_load_templates;
@@ -473,11 +475,13 @@ extern const bcstring be_const_str_log10;
extern const bcstring be_const_str_loop;
extern const bcstring be_const_str_lower;
extern const bcstring be_const_str_lv;
+extern const bcstring be_const_str_lv_;
extern const bcstring be_const_str_lv_event;
extern const bcstring be_const_str_lv_event_cb;
extern const bcstring be_const_str_lv_obj;
extern const bcstring be_const_str_lv_obj_class;
extern const bcstring be_const_str_lvgl_event_dispatch;
+extern const bcstring be_const_str_make_cb;
extern const bcstring be_const_str_map;
extern const bcstring be_const_str_math;
extern const bcstring be_const_str_matrix;
diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h
index cd2198905..822b96cde 100644
--- a/lib/libesp32/berry/generate/be_const_strtab_def.h
+++ b/lib/libesp32/berry/generate/be_const_strtab_def.h
@@ -1,716 +1,720 @@
-be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_AudioFileSourceFS);
-be_define_const_str(_X0A, "\n", 252472541u, 0, 1, &be_const_str_file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20or_X20_X27_X2Ebec_X27);
-be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_gen_cb);
-be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, &be_const_str__X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E);
-be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_refr_size);
-be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, &be_const_str_get_option);
-be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_every_second);
-be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str__X3Cp_X3E_X3Csmall_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E);
-be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_real);
-be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_publish_result);
-be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str_last_modified);
-be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str__write);
-be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_format);
-be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str___upper__);
-be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_SERIAL_7E2);
-be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_get_alternate);
-be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_area);
-be_define_const_str(_X2C, ",", 688690635u, 0, 1, NULL);
-be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str__X2F_X2Eautoconf);
-be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str__ccmd);
-be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, NULL);
-be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, NULL);
-be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_digital_read);
-be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_CFG_X3A_X20loading_X20);
-be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_SERIAL_6N2);
-be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str_arg_name);
-be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_battery_present);
-be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_b);
-be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_CFG_X3A_X20loaded_X20_X27_X25s_X27);
-be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, &be_const_str_Parameter_X20error);
-be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str_running);
-be_define_const_str(_X2F, "/", 705468254u, 0, 1, &be_const_str__class);
-be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_connect);
-be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_content_stop);
-be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_ins_ramp);
-be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_get_string);
-be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_set_bri);
-be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "
", 3546571739u, 0, 11, &be_const_str_remove);
-be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, NULL);
-be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_remove_rule);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str___lower__);
-be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_content_send_style);
-be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 2052843416u, 0, 25, &be_const_str_allocated);
-be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3E_X26_X23129668_X3B_X20Auto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 452285201u, 0, 120, &be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s);
-be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "", 3546571739u, 0, 11, &be_const_str_LVG_X3A_X20call_X20to_X20unsupported_X20callback);
+be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "", 1863865923u, 0, 16, &be_const_str_rule);
+be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_set_chg_current);
+be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_find_op);
+be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, NULL);
+be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "", 2052843416u, 0, 25, &be_const_str_button_pressed);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3E_X26_X23129668_X3B_X20Auto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "", 452285201u, 0, 120, NULL);
+be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "