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, "
", 842307168u, 0, 77, &be_const_str_bri); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_cosh); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_item); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_AXP192); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_internal_error); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_enabled); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_widget_cb); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_EVENT_DRAW_MAIN); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_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, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_str); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_gc); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_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, "
", 842307168u, 0, 77, &be_const_str_get_current_module_path); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_delay); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_CFG_X3A_X20could_X20not_X20run_X20_X25s_X20_X28_X25s_X20_X2D_X20_X25s_X29); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_CFG_X3A_X20multiple_X20autoconf_X20files_X20found_X2C_X20aborting_X20_X28_X27_X25s_X27_X20_X2B_X20_X27_X25s_X27_X29); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_write); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_None); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_classof); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_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, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, NULL); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_exec_tele); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "