diff --git a/lib/lib_display/BinFonts/FreeSans12pt7b.fnt b/lib/lib_display/BinFonts/FreeSans12pt7b.fnt new file mode 100644 index 000000000..a29f041b6 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSans12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSans18pt7b.fnt b/lib/lib_display/BinFonts/FreeSans18pt7b.fnt new file mode 100644 index 000000000..9f9aa62d8 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSans18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSans24pt7b.fnt b/lib/lib_display/BinFonts/FreeSans24pt7b.fnt new file mode 100644 index 000000000..9fbc19c39 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSans24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSans9pt7b.fnt b/lib/lib_display/BinFonts/FreeSans9pt7b.fnt new file mode 100644 index 000000000..9097954c2 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSans9pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBold12pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBold12pt7b.fnt new file mode 100644 index 000000000..89311e360 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBold12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBold18pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBold18pt7b.fnt new file mode 100644 index 000000000..9f3c8ca9a Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBold18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBold24pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBold24pt7b.fnt new file mode 100644 index 000000000..bfddbaf62 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBold24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBoldOblique12pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBoldOblique12pt7b.fnt new file mode 100644 index 000000000..b8c838749 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBoldOblique12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBoldOblique18pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBoldOblique18pt7b.fnt new file mode 100644 index 000000000..68c988efb Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBoldOblique18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBoldOblique24pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBoldOblique24pt7b.fnt new file mode 100644 index 000000000..b9dc0bc4f Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBoldOblique24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansBoldOblique9pt7b.fnt b/lib/lib_display/BinFonts/FreeSansBoldOblique9pt7b.fnt new file mode 100644 index 000000000..198b0db64 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansBoldOblique9pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansOblique12pt7b.fnt b/lib/lib_display/BinFonts/FreeSansOblique12pt7b.fnt new file mode 100644 index 000000000..d22df1cf1 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansOblique12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansOblique18pt7b.fnt b/lib/lib_display/BinFonts/FreeSansOblique18pt7b.fnt new file mode 100644 index 000000000..6ffdc27de Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansOblique18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansOblique24pt7b.fnt b/lib/lib_display/BinFonts/FreeSansOblique24pt7b.fnt new file mode 100644 index 000000000..a83b2debe Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansOblique24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSansOblique9pt7b.fnt b/lib/lib_display/BinFonts/FreeSansOblique9pt7b.fnt new file mode 100644 index 000000000..4176413ef Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSansOblique9pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerif12pt7b.fnt b/lib/lib_display/BinFonts/FreeSerif12pt7b.fnt new file mode 100644 index 000000000..fa1f9c3ea Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerif12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerif18pt7b.fnt b/lib/lib_display/BinFonts/FreeSerif18pt7b.fnt new file mode 100644 index 000000000..5f829d5bf Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerif18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerif24pt7b.fnt b/lib/lib_display/BinFonts/FreeSerif24pt7b.fnt new file mode 100644 index 000000000..a32516951 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerif24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerif9pt7b.fnt b/lib/lib_display/BinFonts/FreeSerif9pt7b.fnt new file mode 100644 index 000000000..ab1a9e898 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerif9pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBold12pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBold12pt7b.fnt new file mode 100644 index 000000000..194a79ecb Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBold12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBold18pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBold18pt7b.fnt new file mode 100644 index 000000000..b7e5db74f Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBold18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBold24pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBold24pt7b.fnt new file mode 100644 index 000000000..7b7c17b0b Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBold24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBold9pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBold9pt7b.fnt new file mode 100644 index 000000000..b6efa5ccf Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBold9pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBoldItalic12pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBoldItalic12pt7b.fnt new file mode 100644 index 000000000..91ce39a02 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBoldItalic12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBoldItalic18pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBoldItalic18pt7b.fnt new file mode 100644 index 000000000..8b380d5b7 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBoldItalic18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBoldItalic24pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBoldItalic24pt7b.fnt new file mode 100644 index 000000000..95397c7d7 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBoldItalic24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifBoldItalic9pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifBoldItalic9pt7b.fnt new file mode 100644 index 000000000..0873ff0b0 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifBoldItalic9pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifItalic12pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifItalic12pt7b.fnt new file mode 100644 index 000000000..9ae523b3f Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifItalic12pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifItalic18pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifItalic18pt7b.fnt new file mode 100644 index 000000000..aa14cec15 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifItalic18pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifItalic24pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifItalic24pt7b.fnt new file mode 100644 index 000000000..fbb09e8b4 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifItalic24pt7b.fnt differ diff --git a/lib/lib_display/BinFonts/FreeSerifItalic9pt7b.fnt b/lib/lib_display/BinFonts/FreeSerifItalic9pt7b.fnt new file mode 100644 index 000000000..ced727aa5 Binary files /dev/null and b/lib/lib_display/BinFonts/FreeSerifItalic9pt7b.fnt differ diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp index e63f3d673..9feb22ec5 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp @@ -149,7 +149,7 @@ void Renderer::DrawStringAt(int16_t x, int16_t y, const char* text, uint16_t col #endif #ifndef USE_GFX_FONTS - if (!font) { + if (!font || font == 5) { #endif if (flag) { x=(x-1)*OLED_FONT_WIDTH*textsize_x; @@ -200,8 +200,13 @@ sFONT RAFont = { 12, /* Height */ }; +extern uint8_t *loaded_font; + void Renderer::setTextFont(uint8_t f) { - font=f; + + font = f; + + setFont(0); #ifdef USE_GFX_FONTS switch (f) { @@ -269,6 +274,10 @@ void Renderer::setTextFont(uint8_t f) { selected_font = &Font24_7seg; break; #endif + case 5: + setFont(ramfont); + break; + default: selected_font = &Font12; break; @@ -278,6 +287,17 @@ void Renderer::setTextFont(uint8_t f) { } +void Renderer::SetRamfont(uint8_t *font) { + ramfont = (GFXfont*)font; + uint32_t bitmap_offset = (uint32_t)ramfont->bitmap; + uint32_t glyph_offset = (uint32_t)ramfont->glyph; + + ramfont->bitmap = (uint8_t*)((uint32_t)font + bitmap_offset); + ramfont->glyph = (GFXglyph*)((uint32_t)font + glyph_offset); + + setFont(ramfont); +} + void Renderer::clearDisplay(void) { fillScreen(BLACK); } diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h index 86aa98025..91f33f880 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h @@ -29,7 +29,7 @@ public: virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); virtual void drawPixel(int16_t x, int16_t y, uint16_t color); virtual uint16_t GetColorFromIndex(uint8_t index); - + void SetRamfont(uint8_t *font); virtual void DisplayOnff(int8_t on); virtual void DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font); virtual void Begin(int16_t p1,int16_t p2,int16_t p3); @@ -52,6 +52,7 @@ private: sFONT *selected_font; uint8_t font; uint8_t tsize = 1; + GFXfont *ramfont = 0; }; typedef union { diff --git a/lib/lib_display/UDisplay/uDisplay.cpp b/lib/lib_display/UDisplay/uDisplay.cpp index 0694a0d3c..fe34e9d40 100644 --- a/lib/lib_display/UDisplay/uDisplay.cpp +++ b/lib/lib_display/UDisplay/uDisplay.cpp @@ -20,7 +20,7 @@ #include #include "uDisplay.h" -#define UDSP_DEBUG +//#define UDSP_DEBUG const uint16_t udisp_colors[]={UDISP_BLACK,UDISP_WHITE,UDISP_RED,UDISP_GREEN,UDISP_BLUE,UDISP_CYAN,UDISP_MAGENTA,\ UDISP_YELLOW,UDISP_NAVY,UDISP_DARKGREEN,UDISP_DARKCYAN,UDISP_MAROON,UDISP_PURPLE,UDISP_OLIVE,\ @@ -48,6 +48,7 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) { lutftime = 350; lut3time = 10; ep_mode = 0; + allcmd_mode = 0; startline = 0xA1; uint8_t section = 0; dsp_ncmds = 0; @@ -70,6 +71,12 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) { // id line lp1++; section = *lp1++; + if (section == 'I') { + if (*lp1 == 'C') { + allcmd_mode = 1; + lp1++; + } + } if (*lp1 == ',') lp1++; } if (*lp1 != ':' && *lp1 != '\n') { @@ -413,7 +420,11 @@ Renderer *uDisplay::Init(void) { #ifdef UDSP_DEBUG Serial.printf("%02x ", iob ); #endif - spi_data8(iob); + if (!allcmd_mode) { + spi_data8(iob); + } else { + spi_command(iob); + } } SPI_CS_HIGH #ifdef UDSP_DEBUG @@ -864,11 +875,21 @@ void uDisplay::setAddrWindow_int(uint16_t x, uint16_t y, uint16_t w, uint16_t h) udisp_swap(x2,y2); } spi_command(saw_1); - spi_data8(x); - spi_data8(x2); + if (allcmd_mode) { + spi_data8(x); + spi_data8(x2); + } else { + spi_command(x); + spi_command(x2); + } spi_command(saw_2); - spi_data8(y); - spi_data8(y2); + if (allcmd_mode) { + spi_data8(y); + spi_data8(y2); + } else { + spi_command(y); + spi_command(y2); + } if (saw_3 != 0xff) { spi_command(saw_3); // write to RAM } @@ -953,8 +974,14 @@ void uDisplay::setRotation(uint8_t rotation) { SPI_BEGIN_TRANSACTION SPI_CS_LOW spi_command(madctrl); - spi_data8(rot[cur_rot]); - if (sa_mode == 8) { + + if (!allcmd_mode) { + spi_data8(rot[cur_rot]); + } else { + spi_command(rot[cur_rot]); + } + + if ((sa_mode == 8) && !allcmd_mode) { spi_command(startline); spi_data8((cur_rot < 2) ? height() : 0); } diff --git a/lib/lib_display/UDisplay/uDisplay.h b/lib/lib_display/UDisplay/uDisplay.h index 793b1cc8f..006f093a8 100644 --- a/lib/lib_display/UDisplay/uDisplay.h +++ b/lib/lib_display/UDisplay/uDisplay.h @@ -135,6 +135,7 @@ class uDisplay : public Renderer { uint8_t dsp_ncmds; uint8_t dsp_on; uint8_t dsp_off; + uint8_t allcmd_mode; uint16_t splash_font; uint16_t splash_size; uint16_t splash_xp; diff --git a/tasmota/displaydesc/SSD1331_desc.txt b/tasmota/displaydesc/SSD1331_desc.txt new file mode 100644 index 000000000..8c1b3a816 --- /dev/null +++ b/tasmota/displaydesc/SSD1331_desc.txt @@ -0,0 +1,33 @@ +:H,SSD1331,96,64,16,SPI,1,*,*,*,*,*,*,*,10 +:S,1,1,1,0,40,10 +:IC +AE,0 +A0,1,72 +A1,1,00 +A2,1,00 +A4,0 +A8,1,3F +AD,1,8E +B0,1,0B +B1,1,31 +B3,1,F0 +8A,1,64 +8B,1,78 +8C,1,64 +BB,1,3A +BE,1,3E +87,1,06 +81,1,91 +82,1,50 +83,1,7D +AF,0 +:o,AE +:O,AF +:A,15,75,FF,8 +:R,A0,A1 +:0,72,00,00,00 +:1,71,00,00,01 +:2,30,00,00,02 +:3,33,00,00,03 +:i,A6,A7 +# diff --git a/tasmota/displaydesc/SSD1351_desc.txt b/tasmota/displaydesc/SSD1351_desc.txt index 806c8c7a8..9fc7c43f5 100644 --- a/tasmota/displaydesc/SSD1351_desc.txt +++ b/tasmota/displaydesc/SSD1351_desc.txt @@ -24,10 +24,10 @@ AF,80 :O,AF :A,15,75,5C,8 :R,A0,A1 -:0,74,00,00,01 -:1,77,00,00,00 -:2,76,00,00,03 -:3,75,00,00,02 +:0,74,00,00,00 +:1,77,00,00,01 +:2,76,00,00,02 +:3,75,00,00,03 :i,A6,A7 :D,C7 # diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index 1b8a19df9..1d2335901 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -729,6 +729,34 @@ void DisplayText(void) cp += 1; } break; +#ifdef USE_UFILESYS +#ifdef USE_RAMFONT +extern FS *ffsp; + case 'F': + { char *ep = strchr(cp,':'); + if (ep) { + static uint8_t *ram_font; + *ep = 0; + ep++; + if (ffsp) { + File fp; + fp = ffsp->open(cp, "r"); + if (fp > 0) { + uint32_t size = fp.size(); + if (ram_font) free (ram_font); + ram_font = (uint8_t*)special_malloc(size+4); + fp.read((uint8_t*)ram_font, size); + fp.close(); + if (renderer) renderer->SetRamfont(ram_font); + Serial.printf("Font loaded: %s\n",cp ); + } + } + cp = ep; + } + } + break; +#endif // USE_RAMFONT +#endif // USE_UFILESYS case 'a': // rotation angle if (renderer) renderer->setRotation(*cp&3);