diff --git a/BUILDS.md b/BUILDS.md index ee82439ae..c127f4335 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -249,7 +249,6 @@ Note: the `minimal` variant is not listed as it shouldn't be used outside of the | USE_DISPLAY | - | - / - | - | - | - | x | | USE_DISPLAY_LCD | - | - / - | - | - | - | x | | USE_DISPLAY_MATRIX | - | - / - | - | - | - | x | -| USE_DISPLAY_SH1106 | - | - / - | - | - | - | x | | USE_DISPLAY_EPAPER_29 | - | - / - | - | - | - | x | | USE_DISPLAY_EPAPER_42 | - | - / - | - | - | - | x | | USE_DISPLAY_SSD1351 | - | - / - | - | - | - | x | @@ -278,6 +277,6 @@ Note: the `minimal` variant is not listed as it shouldn't be used outside of the | USE_DINGTIAN_RELAY | | / - | | | | | | USE_MATTER_DEVICE | | / x | | | | | See SetOption151 | -The following specific display drivers are replaced with uDisplay, see [uDisplay/uTouch documentation](https://tasmota.github.io/docs/Universal-Display-Driver/#migrating-to-udisplay): `USE_DISPLAY_ILI9341`, `USE_DISPLAY_SSD1306` +The following specific display drivers are replaced with uDisplay, see [uDisplay/uTouch documentation](https://tasmota.github.io/docs/Universal-Display-Driver/#migrating-to-udisplay): `USE_DISPLAY_ILI9341`, `USE_DISPLAY_SSD1306`, `USE_DISPLAY_SH1106` - USE_MQTT_TLS is enabled by default in every ESP32 variants diff --git a/CHANGELOG.md b/CHANGELOG.md index 2905affc4..49694ab62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,9 @@ All notable changes to this project will be documented in this file. ### Removed - Unused `#define MQTT_DATA_STRING` support - ILI9341 driver replaced with uDisplay (#21169) +- SSD1306 driver replaced with uDisplay (#21176) +- SSD1331 driver replaced with uDisplay (#21177) +- SSH1106 driver replaced with uDisplay ## [13.4.0.3] 20240402 ### Added diff --git a/I2CDEVICES.md b/I2CDEVICES.md index afd1d1f1a..de2bccf31 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -13,9 +13,9 @@ Index | Define | Driver | Device | Address(es) | Bus2 | Descrip 2 | USE_PCF8574 | xdrv_28 | PCF8574 | 0x20 - 0x26 | | 8-bit I/O expander (address range overridable) 2 | USE_PCF8574 | xdrv_28 | PCF8574A | 0x39 - 0x3F | | 8-bit I/O expander (address range overridable) 3 | USE_DISPLAY_LCD | xdsp_01 | | 0x27, 0x3F | | LCD display - 4 | - REMOVED | | | | | USE_DISPLAY_SSD1306 - REMOVED + 4 | REMOVED | | | | | USE_DISPLAY_SSD1306 - REMOVED 5 | USE_DISPLAY_MATRIX | xdsp_03 | HT16K33 | 0x70 - 0x77 | | 8x8 led matrix - 6 | USE_DISPLAY_SH1106 | xdsp_07 | SH1106 | 0x3C - 0x3D | | Oled display + 6 | REMOVED | | SH1106 | 0x3C - 0x3D | | USE_DISPLAY_SH1106 - REMOVED 7 | USE_ADE7953 | xnrg_07 | ADE7953 | 0x38 | | Energy monitor 8 | USE_SHT | xsns_07 | SHT1X | Any | | Temperature and Humidity sensor 9 | USE_HTU | xsns_08 | HTU21 | 0x40 | Yes | Temperature and Humidity sensor diff --git a/lib/lib_display/Adafruit_SH1106-gemu-1.0/Adafruit_SH1106.cpp b/lib/lib_display/Adafruit_SH1106-gemu-1.0/Adafruit_SH1106.cpp deleted file mode 100644 index ecf775c75..000000000 --- a/lib/lib_display/Adafruit_SH1106-gemu-1.0/Adafruit_SH1106.cpp +++ /dev/null @@ -1,303 +0,0 @@ -/********************************************************************* -This is a library for our Monochrome OLEDs based on SSD1306 drivers - - Pick one up today in the adafruit shop! - ------> http://www.adafruit.com/category/63_98 - -These displays use SPI to communicate, 4 or 5 pins are required to -interface - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, check license.txt for more information -All text above, and the splash screen below must be included in any redistribution -*********************************************************************/ - -/********************************************************************* -I change the adafruit SSD1306 to SH1106 - -SH1106 driver similar to SSD1306 so, just change the display() method. - -However, SH1106 driver don't provide several functions such as scroll commands. - - -*********************************************************************/ - -//#include -#ifndef __SAM3X8E__ -// #include -#endif -#include -#include -//#include <../../sonoff/settings.h> - -#include "Adafruit_SH1106.h" -#define DISPLAY_INIT_MODE 0 - -// the memory buffer for the LCD - -uint8_t *dbuff; - -Adafruit_SH1106::Adafruit_SH1106(int16_t width, int16_t height) : -Renderer(width,height) { -} - -void Adafruit_SH1106::DisplayOnff(int8_t on) { - if (on) { - SH1106_command(SH1106_DISPLAYON); - } else { - SH1106_command(SH1106_DISPLAYOFF); - } -} - -void Adafruit_SH1106::Updateframe() { - display(); -} - -void Adafruit_SH1106::DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font) { -// ignore update mode - //if (p==DISPLAY_INIT_MODE) { - // allocate screen buffer - setRotation(rot); - invertDisplay(false); - setTextWrap(false); // Allow text to run off edges - cp437(true); - setTextFont(font); - setTextSize(size); - setTextColor(WHITE, BLACK); - setCursor(0,0); - //fillScreen(BLACK); - fillScreen(BLACK); - Updateframe(); - - disp_bpp = -1; - //} -} - -void Adafruit_SH1106::Begin(int16_t p1,int16_t p2,int16_t p3) { - begin(p1,p2,p3); -} - - -boolean Adafruit_SH1106::begin(uint8_t vccstate, uint8_t i2caddr, bool reset) { - _vccstate = vccstate; - _i2caddr = i2caddr; - - framebuffer = (uint8_t *)malloc(WIDTH * ((HEIGHT + 7) / 8)); - if (!framebuffer) return false; - - // I2C Init - Wire.begin(); - - #if defined SH1106_128_32 - // Init sequence for 128x32 OLED module - SH1106_command(SH1106_DISPLAYOFF); // 0xAE - SH1106_command(SH1106_SETDISPLAYCLOCKDIV); // 0xD5 - SH1106_command(0x80); // the suggested ratio 0x80 - SH1106_command(SH1106_SETMULTIPLEX); // 0xA8 - SH1106_command(0x1F); - SH1106_command(SH1106_SETDISPLAYOFFSET); // 0xD3 - SH1106_command(0x0); // no offset - SH1106_command(SH1106_SETSTARTLINE | 0x0); // line #0 - SH1106_command(SH1106_CHARGEPUMP); // 0x8D - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x10); } - else - { SH1106_command(0x14); } - SH1106_command(SH1106_MEMORYMODE); // 0x20 - SH1106_command(0x00); // 0x0 act like ks0108 - SH1106_command(SH1106_SEGREMAP | 0x1); - SH1106_command(SH1106_COMSCANDEC); - SH1106_command(SH1106_SETCOMPINS); // 0xDA - SH1106_command(0x02); - SH1106_command(SH1106_SETCONTRAST); // 0x81 - SH1106_command(0x8F); - SH1106_command(SH1106_SETPRECHARGE); // 0xd9 - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x22); } - else - { SH1106_command(0xF1); } - SH1106_command(SH1106_SETVCOMDETECT); // 0xDB - SH1106_command(0x40); - SH1106_command(SH1106_DISPLAYALLON_RESUME); // 0xA4 - SH1106_command(SH1106_NORMALDISPLAY); // 0xA6 - #endif - - #if defined SH1106_128_64 - // Init sequence for 128x64 OLED module - SH1106_command(SH1106_DISPLAYOFF); // 0xAE - SH1106_command(SH1106_SETDISPLAYCLOCKDIV); // 0xD5 - SH1106_command(0x80); // the suggested ratio 0x80 - SH1106_command(SH1106_SETMULTIPLEX); // 0xA8 - SH1106_command(0x3F); - SH1106_command(SH1106_SETDISPLAYOFFSET); // 0xD3 - SH1106_command(0x00); // no offset - - SH1106_command(SH1106_SETSTARTLINE | 0x0); // line #0 0x40 - SH1106_command(SH1106_CHARGEPUMP); // 0x8D - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x10); } - else - { SH1106_command(0x14); } - SH1106_command(SH1106_MEMORYMODE); // 0x20 - SH1106_command(0x00); // 0x0 act like ks0108 - SH1106_command(SH1106_SEGREMAP | 0x1); - SH1106_command(SH1106_COMSCANDEC); - SH1106_command(SH1106_SETCOMPINS); // 0xDA - SH1106_command(0x12); - SH1106_command(SH1106_SETCONTRAST); // 0x81 - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x9F); } - else - { SH1106_command(0xCF); } - SH1106_command(SH1106_SETPRECHARGE); // 0xd9 - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x22); } - else - { SH1106_command(0xF1); } - SH1106_command(SH1106_SETVCOMDETECT); // 0xDB - SH1106_command(0x40); - SH1106_command(SH1106_DISPLAYALLON_RESUME); // 0xA4 - SH1106_command(SH1106_NORMALDISPLAY); // 0xA6 - #endif - - #if defined SH1106_96_16 - // Init sequence for 96x16 OLED module - SH1106_command(SH1106_DISPLAYOFF); // 0xAE - SH1106_command(SH1106_SETDISPLAYCLOCKDIV); // 0xD5 - SH1106_command(0x80); // the suggested ratio 0x80 - SH1106_command(SH1106_SETMULTIPLEX); // 0xA8 - SH1106_command(0x0F); - SH1106_command(SH1106_SETDISPLAYOFFSET); // 0xD3 - SH1106_command(0x00); // no offset - SH1106_command(SH1106_SETSTARTLINE | 0x0); // line #0 - SH1106_command(SH1106_CHARGEPUMP); // 0x8D - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x10); } - else - { SH1106_command(0x14); } - SH1106_command(SH1106_MEMORYMODE); // 0x20 - SH1106_command(0x00); // 0x0 act like ks0108 - SH1106_command(SH1106_SEGREMAP | 0x1); - SH1106_command(SH1106_COMSCANDEC); - SH1106_command(SH1106_SETCOMPINS); // 0xDA - SH1106_command(0x2); //ada x12 - SH1106_command(SH1106_SETCONTRAST); // 0x81 - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x10); } - else - { SH1106_command(0xAF); } - SH1106_command(SH1106_SETPRECHARGE); // 0xd9 - if (vccstate == SH1106_EXTERNALVCC) - { SH1106_command(0x22); } - else - { SH1106_command(0xF1); } - SH1106_command(SH1106_SETVCOMDETECT); // 0xDB - SH1106_command(0x40); - SH1106_command(SH1106_DISPLAYALLON_RESUME); // 0xA4 - SH1106_command(SH1106_NORMALDISPLAY); // 0xA6 - #endif - - SH1106_command(SH1106_DISPLAYON);//--turn on oled panel - - - return true; -} - - -void Adafruit_SH1106::invertDisplay(uint8_t i) { - if (i) { - SH1106_command(SH1106_INVERTDISPLAY); - } else { - SH1106_command(SH1106_NORMALDISPLAY); - } -} - -void Adafruit_SH1106::SH1106_command(uint8_t c) { - - // I2C - uint8_t control = 0x00; // Co = 0, D/C = 0 - Wire.beginTransmission(_i2caddr); - WIRE_WRITE(control); - WIRE_WRITE(c); - Wire.endTransmission(); - -} - -// Dim the display -// dim = true: display is dimmed -// dim = false: display is normal -void Adafruit_SH1106::dim(uint8_t dim) { - uint8_t contrast; - - if (dim) { - contrast = 0; // Dimmed display - } else { - if (_vccstate == SH1106_EXTERNALVCC) { - contrast = 0x9F; - } else { - contrast = 0xCF; - } - } - // the range of contrast to too small to be really useful - // it is useful to dim the display - SH1106_command(SH1106_SETCONTRAST); - SH1106_command(contrast); -} - -void Adafruit_SH1106::SH1106_data(uint8_t c) { - // I2C - uint8_t control = 0x40; // Co = 0, D/C = 1 - Wire.beginTransmission(_i2caddr); - WIRE_WRITE(control); - WIRE_WRITE(c); - Wire.endTransmission(); -} - -void Adafruit_SH1106::display(void) { - SH1106_command(SH1106_SETLOWCOLUMN | 0x0); // low col = 0 - SH1106_command(SH1106_SETHIGHCOLUMN | 0x0); // hi col = 0 - SH1106_command(SH1106_SETSTARTLINE | 0x0); // line #0 - // I2C - //height >>= 3; - //width >>= 3; - byte height=64; - byte width=132; - byte m_row = 0; - byte m_col = 2; - - - height >>= 3; - width >>= 3; - //Serial.println(width); - - int p = 0; - - byte i, j, k =0; - - for ( i = 0; i < height; i++) { - - // send a bunch of data in one xmission - SH1106_command(0xB0 + i + m_row);//set page address - SH1106_command(m_col & 0xf);//set lower column address - SH1106_command(0x10 | (m_col >> 4));//set higher column address - - for( j = 0; j < 8; j++){ - Wire.beginTransmission(_i2caddr); - Wire.write(0x40); - for ( k = 0; k < width; k++, p++) { - Wire.write(framebuffer[p]); - } - Wire.endTransmission(); - } - } - -} - -// clear everything -void Adafruit_SH1106::clearDisplay(void) { - memset(framebuffer, 0, (SH1106_LCDWIDTH*SH1106_LCDHEIGHT/8)); -} diff --git a/lib/lib_display/Adafruit_SH1106-gemu-1.0/Adafruit_SH1106.h b/lib/lib_display/Adafruit_SH1106-gemu-1.0/Adafruit_SH1106.h deleted file mode 100644 index 74196d1a3..000000000 --- a/lib/lib_display/Adafruit_SH1106-gemu-1.0/Adafruit_SH1106.h +++ /dev/null @@ -1,154 +0,0 @@ -/********************************************************************* -This is a library for our Monochrome OLEDs based on SSD1306 drivers - - Pick one up today in the adafruit shop! - ------> http://www.adafruit.com/category/63_98 - -These displays use SPI to communicate, 4 or 5 pins are required to -interface - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, check license.txt for more information -All text above, and the splash screen must be included in any redistribution -*********************************************************************/ - -/********************************************************************* -I change the adafruit SSD1306 to SH1106 - -SH1106 driver similar to SSD1306 so, just change the display() method. - -However, SH1106 driver don't provide several functions such as scroll commands. - - -*********************************************************************/ - -#if ARDUINO >= 100 - #include "Arduino.h" - #define WIRE_WRITE Wire.write -#else - #include "WProgram.h" - #define WIRE_WRITE Wire.send -#endif - -#include - -#define BLACK 0 -#define WHITE 1 -#define INVERSE 2 - -#define SH1106_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D -// Address for 128x32 is 0x3C -// Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded) - -/*========================================================================= - SH1106 Displays - ----------------------------------------------------------------------- - The driver is used in multiple displays (128x64, 128x32, etc.). - Select the appropriate display below to create an appropriately - sized framebuffer, etc. - - SH1106_128_64 128x64 pixel display - - SH1106_128_32 128x32 pixel display - - SH1106_96_16 - - -----------------------------------------------------------------------*/ - #define SH1106_128_64 -// #define SH1106_128_32 -// #define SH1106_96_16 -/*=========================================================================*/ - -#if defined SH1106_128_64 && defined SH1106_128_32 - #error "Only one SH1106 display can be specified at once in SH1106.h" -#endif -#if !defined SH1106_128_64 && !defined SH1106_128_32 && !defined SH1106_96_16 - #error "At least one SH1106 display must be specified in SH1106.h" -#endif - -#if defined SH1106_128_64 - #define SH1106_LCDWIDTH 128 - #define SH1106_LCDHEIGHT 64 -#endif -#if defined SH1106_128_32 - #define SH1106_LCDWIDTH 128 - #define SH1106_LCDHEIGHT 32 -#endif -#if defined SH1106_96_16 - #define SH1106_LCDWIDTH 96 - #define SH1106_LCDHEIGHT 16 -#endif - -#define SH1106_SETCONTRAST 0x81 -#define SH1106_DISPLAYALLON_RESUME 0xA4 -#define SH1106_DISPLAYALLON 0xA5 -#define SH1106_NORMALDISPLAY 0xA6 -#define SH1106_INVERTDISPLAY 0xA7 -#define SH1106_DISPLAYOFF 0xAE -#define SH1106_DISPLAYON 0xAF - -#define SH1106_SETDISPLAYOFFSET 0xD3 -#define SH1106_SETCOMPINS 0xDA - -#define SH1106_SETVCOMDETECT 0xDB - -#define SH1106_SETDISPLAYCLOCKDIV 0xD5 -#define SH1106_SETPRECHARGE 0xD9 - -#define SH1106_SETMULTIPLEX 0xA8 - -#define SH1106_SETLOWCOLUMN 0x00 -#define SH1106_SETHIGHCOLUMN 0x10 - -#define SH1106_SETSTARTLINE 0x40 - -#define SH1106_MEMORYMODE 0x20 -#define SH1106_COLUMNADDR 0x21 -#define SH1106_PAGEADDR 0x22 - -#define SH1106_COMSCANINC 0xC0 -#define SH1106_COMSCANDEC 0xC8 - -#define SH1106_SEGREMAP 0xA0 - -#define SH1106_CHARGEPUMP 0x8D - -#define SH1106_EXTERNALVCC 0x1 -#define SH1106_SWITCHCAPVCC 0x2 - -// Scrolling #defines -#define SH1106_ACTIVATE_SCROLL 0x2F -#define SH1106_DEACTIVATE_SCROLL 0x2E -#define SH1106_SET_VERTICAL_SCROLL_AREA 0xA3 -#define SH1106_RIGHT_HORIZONTAL_SCROLL 0x26 -#define SH1106_LEFT_HORIZONTAL_SCROLL 0x27 -#define SH1106_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 -#define SH1106_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A - -class Adafruit_SH1106 : public Renderer { - public: - Adafruit_SH1106(int16_t width, int16_t height); - - boolean begin(uint8_t switchvcc = SH1106_SWITCHCAPVCC, uint8_t i2caddr = SH1106_I2C_ADDRESS, bool reset=true); - void SH1106_command(uint8_t c); - void SH1106_data(uint8_t c); - - void clearDisplay(void); - void invertDisplay(uint8_t i); - void display(); - - - void DisplayOnff(int8_t on); - void DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font); - void Begin(int16_t p1,int16_t p2,int16_t p3); - void Updateframe(); - void dim(uint8_t contrast); - - private: - int8_t _i2caddr, _vccstate, rst; - -}; diff --git a/lib/lib_display/Adafruit_SH1106-gemu-1.0/LICENSE.txt b/lib/lib_display/Adafruit_SH1106-gemu-1.0/LICENSE.txt deleted file mode 100644 index f6a0f22b8..000000000 --- a/lib/lib_display/Adafruit_SH1106-gemu-1.0/LICENSE.txt +++ /dev/null @@ -1,26 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2012, Adafruit Industries -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holders nor the -names of its contributors may be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/lib_display/Adafruit_SH1106-gemu-1.0/README.md b/lib/lib_display/Adafruit_SH1106-gemu-1.0/README.md deleted file mode 100644 index c457a3cc8..000000000 --- a/lib/lib_display/Adafruit_SH1106-gemu-1.0/README.md +++ /dev/null @@ -1,16 +0,0 @@ -Adafruit_SH1106 -=============== - -Adafruit graphic library for SH1106 driver lcds. - -some small oled lcd use SH1106 driver. - -I change the adafruit SSD1306 to SH1106 - -SH1106 driver similar to SSD1306. thus, just change the display() method. - -However, SH1106 driver don't provide several functions such as scroll commands. - - - Adafruit-GFX-Library - https://github.com/adafruit/Adafruit-GFX-Library diff --git a/lib/lib_display/Adafruit_SH1106-gemu-1.0/examples/sh1106_128x64_i2c/sh1106_128x64_i2c.ino b/lib/lib_display/Adafruit_SH1106-gemu-1.0/examples/sh1106_128x64_i2c/sh1106_128x64_i2c.ino deleted file mode 100644 index 2b2c90368..000000000 --- a/lib/lib_display/Adafruit_SH1106-gemu-1.0/examples/sh1106_128x64_i2c/sh1106_128x64_i2c.ino +++ /dev/null @@ -1,363 +0,0 @@ -/********************************************************************* -This is an example for our Monochrome OLEDs based on SSD1306 drivers - - Pick one up today in the adafruit shop! - ------> http://www.adafruit.com/category/63_98 - -This example is for a 128x64 size display using I2C to communicate -3 pins are required to interface (2 I2C and one reset) - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, check license.txt for more information -All text above, and the splash screen must be included in any redistribution -*********************************************************************/ - -/********************************************************************* -I change the adafruit SSD1306 to SH1106 - -SH1106 driver don't provide several functions such as scroll commands. - -*********************************************************************/ - -#include -#include -#include -#include - -#define OLED_RESET 4 -Adafruit_SH1106 display(OLED_RESET); - -#define NUMFLAKES 10 -#define XPOS 0 -#define YPOS 1 -#define DELTAY 2 - - -#define LOGO16_GLCD_HEIGHT 16 -#define LOGO16_GLCD_WIDTH 16 -static const unsigned char PROGMEM logo16_glcd_bmp[] = -{ B00000000, B11000000, - B00000001, B11000000, - B00000001, B11000000, - B00000011, B11100000, - B11110011, B11100000, - B11111110, B11111000, - B01111110, B11111111, - B00110011, B10011111, - B00011111, B11111100, - B00001101, B01110000, - B00011011, B10100000, - B00111111, B11100000, - B00111111, B11110000, - B01111100, B11110000, - B01110000, B01110000, - B00000000, B00110000 }; - -#if (SH1106_LCDHEIGHT != 64) -#error("Height incorrect, please fix Adafruit_SH1106.h!"); -#endif - -void setup() { - Serial.begin(9600); - - // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) - display.begin(SH1106_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) - // init done - - // Show image buffer on the display hardware. - // Since the buffer is intialized with an Adafruit splashscreen - // internally, this will display the splashscreen. - display.display(); - delay(2000); - - // Clear the buffer. - display.clearDisplay(); - - // draw a single pixel - display.drawPixel(10, 10, WHITE); - // Show the display buffer on the hardware. - // NOTE: You _must_ call display after making any drawing commands - // to make them visible on the display hardware! - display.display(); - delay(2000); - display.clearDisplay(); - - // draw many lines - testdrawline(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw rectangles - testdrawrect(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw multiple rectangles - testfillrect(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw mulitple circles - testdrawcircle(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw a white circle, 10 pixel radius - display.fillCircle(display.width()/2, display.height()/2, 10, WHITE); - display.display(); - delay(2000); - display.clearDisplay(); - - testdrawroundrect(); - delay(2000); - display.clearDisplay(); - - testfillroundrect(); - delay(2000); - display.clearDisplay(); - - testdrawtriangle(); - delay(2000); - display.clearDisplay(); - - testfilltriangle(); - delay(2000); - display.clearDisplay(); - - // draw the first ~12 characters in the font - testdrawchar(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw scrolling text - /* testscrolltext(); - delay(2000); - display.clearDisplay();*/ - - // text display tests - display.setTextSize(1); - display.setTextColor(WHITE); - display.setCursor(0,0); - display.println("Hello, world!"); - display.setTextColor(BLACK, WHITE); // 'inverted' text - display.println(3.141592); - display.setTextSize(2); - display.setTextColor(WHITE); - display.print("0x"); display.println(0xDEADBEEF, HEX); - display.display(); - delay(2000); - - // miniature bitmap display - display.clearDisplay(); - display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); - display.display(); - - // invert the display - display.invertDisplay(true); - delay(1000); - display.invertDisplay(false); - delay(1000); - - // draw a bitmap icon and 'animate' movement - testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); -} - - -void loop() { - -} - - -void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { - uint8_t icons[NUMFLAKES][3]; - - // initialize - for (uint8_t f=0; f< NUMFLAKES; f++) { - icons[f][XPOS] = random(display.width()); - icons[f][YPOS] = 0; - icons[f][DELTAY] = random(5) + 1; - - Serial.print("x: "); - Serial.print(icons[f][XPOS], DEC); - Serial.print(" y: "); - Serial.print(icons[f][YPOS], DEC); - Serial.print(" dy: "); - Serial.println(icons[f][DELTAY], DEC); - } - - while (1) { - // draw each icon - for (uint8_t f=0; f< NUMFLAKES; f++) { - display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); - } - display.display(); - delay(200); - - // then erase it + move it - for (uint8_t f=0; f< NUMFLAKES; f++) { - display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); - // move it - icons[f][YPOS] += icons[f][DELTAY]; - // if its gone, reinit - if (icons[f][YPOS] > display.height()) { - icons[f][XPOS] = random(display.width()); - icons[f][YPOS] = 0; - icons[f][DELTAY] = random(5) + 1; - } - } - } -} - - -void testdrawchar(void) { - display.setTextSize(1); - display.setTextColor(WHITE); - display.setCursor(0,0); - - for (uint8_t i=0; i < 168; i++) { - if (i == '\n') continue; - display.write(i); - if ((i > 0) && (i % 21 == 0)) - display.println(); - } - display.display(); -} - -void testdrawcircle(void) { - for (int16_t i=0; i0; i-=5) { - display.fillTriangle(display.width()/2, display.height()/2-i, - display.width()/2-i, display.height()/2+i, - display.width()/2+i, display.height()/2+i, WHITE); - if (color == WHITE) color = BLACK; - else color = WHITE; - display.display(); - } -} - -void testdrawroundrect(void) { - for (int16_t i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); - display.display(); - } - delay(250); - - display.clearDisplay(); - for (int16_t i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); - display.display(); - } - for (int16_t i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); - display.display(); - } - delay(250); - - display.clearDisplay(); - for (int16_t i=0; i http://www.adafruit.com/category/63_98 - -This example is for a 128x64 size display using SPI to communicate -4 or 5 pins are required to interface - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, check license.txt for more information -All text above, and the splash screen must be included in any redistribution -*********************************************************************/ - -#include -#include -#include -#include - -// If using software SPI (the default case): -#define OLED_MOSI 9 -#define OLED_CLK 10 -#define OLED_DC 11 -#define OLED_CS 12 -#define OLED_RESET 13 -Adafruit_SH1106 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); - -/* Uncomment this block to use hardware SPI -#define OLED_DC 6 -#define OLED_CS 7 -#define OLED_RESET 8 -Adafruit_SH1106 display(OLED_DC, OLED_RESET, OLED_CS); -*/ - -#define NUMFLAKES 10 -#define XPOS 0 -#define YPOS 1 -#define DELTAY 2 - -#define LOGO16_GLCD_HEIGHT 16 -#define LOGO16_GLCD_WIDTH 16 -static const unsigned char PROGMEM logo16_glcd_bmp[] = -{ B00000000, B11000000, - B00000001, B11000000, - B00000001, B11000000, - B00000011, B11100000, - B11110011, B11100000, - B11111110, B11111000, - B01111110, B11111111, - B00110011, B10011111, - B00011111, B11111100, - B00001101, B01110000, - B00011011, B10100000, - B00111111, B11100000, - B00111111, B11110000, - B01111100, B11110000, - B01110000, B01110000, - B00000000, B00110000 }; - -#if (SH1106_LCDHEIGHT != 64) -#error("Height incorrect, please fix Adafruit_SH1106.h!"); -#endif - -void setup() { - Serial.begin(9600); - - // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) - display.begin(SH1106_SWITCHCAPVCC); - // init done - - // Show image buffer on the display hardware. - // Since the buffer is intialized with an Adafruit splashscreen - // internally, this will display the splashscreen. - display.display(); - delay(2000); - - // Clear the buffer. - display.clearDisplay(); - - // draw a single pixel - display.drawPixel(10, 10, WHITE); - // Show the display buffer on the hardware. - // NOTE: You _must_ call display after making any drawing commands - // to make them visible on the display hardware! - display.display(); - delay(2000); - display.clearDisplay(); - - // draw many lines - testdrawline(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw rectangles - testdrawrect(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw multiple rectangles - testfillrect(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw mulitple circles - testdrawcircle(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw a white circle, 10 pixel radius - display.fillCircle(display.width()/2, display.height()/2, 10, WHITE); - display.display(); - delay(2000); - display.clearDisplay(); - - testdrawroundrect(); - delay(2000); - display.clearDisplay(); - - testfillroundrect(); - delay(2000); - display.clearDisplay(); - - testdrawtriangle(); - delay(2000); - display.clearDisplay(); - - testfilltriangle(); - delay(2000); - display.clearDisplay(); - - // draw the first ~12 characters in the font - testdrawchar(); - display.display(); - delay(2000); - display.clearDisplay(); - - // draw scrolling text - /*testscrolltext(); - delay(2000); - display.clearDisplay();*/ - - // text display tests - display.setTextSize(1); - display.setTextColor(WHITE); - display.setCursor(0,0); - display.println("Hello, world!"); - display.setTextColor(BLACK, WHITE); // 'inverted' text - display.println(3.141592); - display.setTextSize(2); - display.setTextColor(WHITE); - display.print("0x"); display.println(0xDEADBEEF, HEX); - display.display(); - delay(2000); - - // miniature bitmap display - display.clearDisplay(); - display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); - display.display(); - - // invert the display - display.invertDisplay(true); - delay(1000); - display.invertDisplay(false); - delay(1000); - - // draw a bitmap icon and 'animate' movement - testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); -} - - -void loop() { - -} - - -void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { - uint8_t icons[NUMFLAKES][3]; - - // initialize - for (uint8_t f=0; f< NUMFLAKES; f++) { - icons[f][XPOS] = random(display.width()); - icons[f][YPOS] = 0; - icons[f][DELTAY] = random(5) + 1; - - Serial.print("x: "); - Serial.print(icons[f][XPOS], DEC); - Serial.print(" y: "); - Serial.print(icons[f][YPOS], DEC); - Serial.print(" dy: "); - Serial.println(icons[f][DELTAY], DEC); - } - - while (1) { - // draw each icon - for (uint8_t f=0; f< NUMFLAKES; f++) { - display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); - } - display.display(); - delay(200); - - // then erase it + move it - for (uint8_t f=0; f< NUMFLAKES; f++) { - display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); - // move it - icons[f][YPOS] += icons[f][DELTAY]; - // if its gone, reinit - if (icons[f][YPOS] > display.height()) { - icons[f][XPOS] = random(display.width()); - icons[f][YPOS] = 0; - icons[f][DELTAY] = random(5) + 1; - } - } - } -} - - -void testdrawchar(void) { - display.setTextSize(1); - display.setTextColor(WHITE); - display.setCursor(0,0); - - for (uint8_t i=0; i < 168; i++) { - if (i == '\n') continue; - display.write(i); - if ((i > 0) && (i % 21 == 0)) - display.println(); - } - display.display(); -} - -void testdrawcircle(void) { - for (int16_t i=0; i0; i-=5) { - display.fillTriangle(display.width()/2, display.height()/2-i, - display.width()/2-i, display.height()/2+i, - display.width()/2+i, display.height()/2+i, WHITE); - if (color == WHITE) color = BLACK; - else color = WHITE; - display.display(); - } -} - -void testdrawroundrect(void) { - for (int16_t i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); - display.display(); - } - delay(250); - - display.clearDisplay(); - for (int16_t i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); - display.display(); - } - for (int16_t i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); - display.display(); - } - delay(250); - - display.clearDisplay(); - for (int16_t i=0; i -sentence=SH1106 -paragraph=SH1106 -category=Display -url= -architectures=* diff --git a/tasmota/include/tasmota_configurations.h b/tasmota/include/tasmota_configurations.h index 8a024e60c..43ea60799 100644 --- a/tasmota/include/tasmota_configurations.h +++ b/tasmota/include/tasmota_configurations.h @@ -357,7 +357,7 @@ // REMOVED - #define USE_DISPLAY_SSD1306 // [DisplayModel 2] Enable SSD1306 Oled 128x64 display (I2C addresses 0x3C and 0x3D) (+16k code) #define USE_DISPLAY_MATRIX // [DisplayModel 3] Enable 8x8 Matrix display (I2C adresseses see below) (+11k code) #define USE_DISPLAY_SEVENSEG // [DisplayModel 11] [I2cDriver47] Enable sevenseg display (I2C addresses 0x70 - 0x77) (<+11k code) - #define USE_DISPLAY_SH1106 // [DisplayModel 7] Enable SH1106 Oled 128x64 display (I2C addresses 0x3C and 0x3D) + // REMOVED - #define USE_DISPLAY_SH1106 // [DisplayModel 7] Enable SH1106 Oled 128x64 display (I2C addresses 0x3C and 0x3D) // #define USE_DISPLAY_TM1650 // [DisplayModel 20] [I2cDriver74] Enable TM1650 display (I2C addresses 0x24 - 0x27 and 0x34 - 0x37) #define USE_SPI // Hardware SPI using GPIO12(MISO), GPIO13(MOSI) and GPIO14(CLK) in addition to two user selectable GPIOs(CS and DC) diff --git a/tasmota/tasmota_support/support_features.ino b/tasmota/tasmota_support/support_features.ino index 8f6d24b36..e4269c249 100644 --- a/tasmota/tasmota_support/support_features.ino +++ b/tasmota/tasmota_support/support_features.ino @@ -159,9 +159,10 @@ constexpr uint32_t feature[] = { #if defined(USE_SPI) && defined(USE_DISPLAY) && defined(USE_DISPLAY_EPAPER_29) 0x00000800 | // xdsp_05_epaper.ino #endif -#if defined(USE_I2C) && defined(USE_DISPLAY) && defined(USE_DISPLAY_SH1106) - 0x00001000 | // xdsp_07_sh1106.ino -#endif +// REMOVED +// #if defined(USE_I2C) && defined(USE_DISPLAY) && defined(USE_DISPLAY_SH1106) +// 0x00001000 | // xdsp_07_sh1106.ino +// #endif #ifdef USE_MP3_PLAYER 0x00002000 | // xdrv_14_mp3.ino #endif diff --git a/tasmota/tasmota_xdsp_display/xdsp_07_sh1106.ino b/tasmota/tasmota_xdsp_display/xdsp_07_sh1106.ino index 689e2273c..ecfcdf4b6 100644 --- a/tasmota/tasmota_xdsp_display/xdsp_07_sh1106.ino +++ b/tasmota/tasmota_xdsp_display/xdsp_07_sh1106.ino @@ -17,179 +17,182 @@ along with this program. If not, see . */ -#ifdef USE_I2C -#ifdef USE_DISPLAY -#ifdef USE_DISPLAY_SH1106 +// REMOVED +// DEPRECATED - USE UNIVERSAL DISPLAY INSTEAD, https://tasmota.github.io/docs/Universal-Display-Driver/#migrating-to-udisplay -#define OLED_RESET 4 +// #ifdef USE_I2C +// #ifdef USE_DISPLAY +// #ifdef USE_DISPLAY_SH1106 -#define SPRINT(A) char str[32];sprintf(str,"val: %d ",A);Serial.println((char*)str); +// #define OLED_RESET 4 + +// #define SPRINT(A) char str[32];sprintf(str,"val: %d ",A);Serial.println((char*)str); -#define XDSP_07 7 -#define XI2C_06 6 // See I2CDEVICES.md +// #define XDSP_07 7 +// #define XI2C_06 6 // See I2CDEVICES.md -#define OLED_ADDRESS1 0x3C // Oled 128x32 I2C address -#define OLED_ADDRESS2 0x3D // Oled 128x64 I2C address +// #define OLED_ADDRESS1 0x3C // Oled 128x32 I2C address +// #define OLED_ADDRESS2 0x3D // Oled 128x64 I2C address -#define OLED_BUFFER_COLS 40 // Max number of columns in display shadow buffer -#define OLED_BUFFER_ROWS 16 // Max number of lines in display shadow buffer +// #define OLED_BUFFER_COLS 40 // Max number of columns in display shadow buffer +// #define OLED_BUFFER_ROWS 16 // Max number of lines in display shadow buffer -#define OLED_FONT_WIDTH 6 -#define OLED_FONT_HEIGTH 8 +// #define OLED_FONT_WIDTH 6 +// #define OLED_FONT_HEIGTH 8 -#include -#include -#include +// #include +// #include +// #include -Adafruit_SH1106 *oled1106; +// Adafruit_SH1106 *oled1106; -/*********************************************************************************************/ +// /*********************************************************************************************/ -void SH1106InitDriver() { - if (!TasmotaGlobal.i2c_enabled) { return; } +// void SH1106InitDriver() { +// if (!TasmotaGlobal.i2c_enabled) { return; } - if (!Settings->display_model) { - if (I2cSetDevice(OLED_ADDRESS1)) { - Settings->display_address[0] = OLED_ADDRESS1; - Settings->display_model = XDSP_07; - } - else if (I2cSetDevice(OLED_ADDRESS2)) { - Settings->display_address[0] = OLED_ADDRESS2; - Settings->display_model = XDSP_07; - } - } +// if (!Settings->display_model) { +// if (I2cSetDevice(OLED_ADDRESS1)) { +// Settings->display_address[0] = OLED_ADDRESS1; +// Settings->display_model = XDSP_07; +// } +// else if (I2cSetDevice(OLED_ADDRESS2)) { +// Settings->display_address[0] = OLED_ADDRESS2; +// Settings->display_model = XDSP_07; +// } +// } - if (XDSP_07 == Settings->display_model) { - I2cSetActiveFound(Settings->display_address[0], "SH1106"); +// if (XDSP_07 == Settings->display_model) { +// I2cSetActiveFound(Settings->display_address[0], "SH1106"); - if (Settings->display_width != SH1106_LCDWIDTH) { - Settings->display_width = SH1106_LCDWIDTH; - } - if (Settings->display_height != SH1106_LCDHEIGHT) { - Settings->display_height = SH1106_LCDHEIGHT; - } - // init renderer - oled1106 = new Adafruit_SH1106(SH1106_LCDWIDTH,SH1106_LCDHEIGHT); - renderer = oled1106; - renderer->Begin(SH1106_SWITCHCAPVCC, Settings->display_address[0],0); - renderer->DisplayInit(DISPLAY_INIT_MODE,Settings->display_size,Settings->display_rotate,Settings->display_font); - renderer->setTextColor(1,0); +// if (Settings->display_width != SH1106_LCDWIDTH) { +// Settings->display_width = SH1106_LCDWIDTH; +// } +// if (Settings->display_height != SH1106_LCDHEIGHT) { +// Settings->display_height = SH1106_LCDHEIGHT; +// } +// // init renderer +// oled1106 = new Adafruit_SH1106(SH1106_LCDWIDTH,SH1106_LCDHEIGHT); +// renderer = oled1106; +// renderer->Begin(SH1106_SWITCHCAPVCC, Settings->display_address[0],0); +// renderer->DisplayInit(DISPLAY_INIT_MODE,Settings->display_size,Settings->display_rotate,Settings->display_font); +// renderer->setTextColor(1,0); -#ifdef SHOW_SPLASH - if (!Settings->flag5.display_no_splash) { - renderer->setTextFont(0); - renderer->setTextSize(2); - renderer->setCursor(20,20); - renderer->println(F("SH1106")); - renderer->Updateframe(); - renderer->DisplayOnff(1); - } -#endif +// #ifdef SHOW_SPLASH +// if (!Settings->flag5.display_no_splash) { +// renderer->setTextFont(0); +// renderer->setTextSize(2); +// renderer->setCursor(20,20); +// renderer->println(F("SH1106")); +// renderer->Updateframe(); +// renderer->DisplayOnff(1); +// } +// #endif - AddLog(LOG_LEVEL_INFO, PSTR("DSP: SH1106")); - } -} +// AddLog(LOG_LEVEL_INFO, PSTR("DSP: SH1106")); +// } +// } -/*********************************************************************************************/ -#ifdef USE_DISPLAY_MODES1TO5 +// /*********************************************************************************************/ +// #ifdef USE_DISPLAY_MODES1TO5 -void SH1106PrintLog(void) -{ - disp_refresh--; - if (!disp_refresh) { - disp_refresh = Settings->display_refresh; - if (!disp_screen_buffer_cols) { DisplayAllocScreenBuffer(); } +// void SH1106PrintLog(void) +// { +// disp_refresh--; +// if (!disp_refresh) { +// disp_refresh = Settings->display_refresh; +// if (!disp_screen_buffer_cols) { DisplayAllocScreenBuffer(); } - char* txt = DisplayLogBuffer('\370'); - if (txt != NULL) { - uint8_t last_row = Settings->display_rows -1; +// char* txt = DisplayLogBuffer('\370'); +// if (txt != NULL) { +// uint8_t last_row = Settings->display_rows -1; - renderer->clearDisplay(); - renderer->setTextSize(Settings->display_size); - renderer->setCursor(0,0); - for (byte i = 0; i < last_row; i++) { - strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols); - renderer->println(disp_screen_buffer[i]); - } - strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols); - DisplayFillScreen(last_row); +// renderer->clearDisplay(); +// renderer->setTextSize(Settings->display_size); +// renderer->setCursor(0,0); +// for (byte i = 0; i < last_row; i++) { +// strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols); +// renderer->println(disp_screen_buffer[i]); +// } +// strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols); +// DisplayFillScreen(last_row); - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]); +// AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]); - renderer->println(disp_screen_buffer[last_row]); - renderer->Updateframe(); - } - } -} +// renderer->println(disp_screen_buffer[last_row]); +// renderer->Updateframe(); +// } +// } +// } -void SH1106Time(void) -{ - char line[12]; +// void SH1106Time(void) +// { +// char line[12]; - renderer->clearDisplay(); - renderer->setTextSize(Settings->display_size); - renderer->setTextFont(Settings->display_font); - renderer->setCursor(0, 0); - snprintf_P(line, sizeof(line), PSTR(" %02d" D_HOUR_MINUTE_SEPARATOR "%02d" D_MINUTE_SECOND_SEPARATOR "%02d"), RtcTime.hour, RtcTime.minute, RtcTime.second); // [ 12:34:56 ] - renderer->println(line); - renderer->println(); - snprintf_P(line, sizeof(line), PSTR("%02d" D_MONTH_DAY_SEPARATOR "%02d" D_YEAR_MONTH_SEPARATOR "%04d"), RtcTime.day_of_month, RtcTime.month, RtcTime.year); // [01-02-2018] - renderer->println(line); - renderer->Updateframe(); -} +// renderer->clearDisplay(); +// renderer->setTextSize(Settings->display_size); +// renderer->setTextFont(Settings->display_font); +// renderer->setCursor(0, 0); +// snprintf_P(line, sizeof(line), PSTR(" %02d" D_HOUR_MINUTE_SEPARATOR "%02d" D_MINUTE_SECOND_SEPARATOR "%02d"), RtcTime.hour, RtcTime.minute, RtcTime.second); // [ 12:34:56 ] +// renderer->println(line); +// renderer->println(); +// snprintf_P(line, sizeof(line), PSTR("%02d" D_MONTH_DAY_SEPARATOR "%02d" D_YEAR_MONTH_SEPARATOR "%04d"), RtcTime.day_of_month, RtcTime.month, RtcTime.year); // [01-02-2018] +// renderer->println(line); +// renderer->Updateframe(); +// } -void SH1106Refresh(void) // Every second -{ - if (!renderer) return; - if (Settings->display_mode) { // Mode 0 is User text - switch (Settings->display_mode) { - case 1: // Time - SH1106Time(); - break; - case 2: // Local - case 3: // Local - case 4: // Mqtt - case 5: // Mqtt - SH1106PrintLog(); - break; - } - } -} +// void SH1106Refresh(void) // Every second +// { +// if (!renderer) return; +// if (Settings->display_mode) { // Mode 0 is User text +// switch (Settings->display_mode) { +// case 1: // Time +// SH1106Time(); +// break; +// case 2: // Local +// case 3: // Local +// case 4: // Mqtt +// case 5: // Mqtt +// SH1106PrintLog(); +// break; +// } +// } +// } -#endif // USE_DISPLAY_MODES1TO5 +// #endif // USE_DISPLAY_MODES1TO5 -/*********************************************************************************************\ - * Interface -\*********************************************************************************************/ +// /*********************************************************************************************\ +// * Interface +// \*********************************************************************************************/ -bool Xdsp07(uint32_t function) -{ - if (!I2cEnabled(XI2C_06)) { return false; } +// bool Xdsp07(uint32_t function) +// { +// if (!I2cEnabled(XI2C_06)) { return false; } - bool result = false; +// bool result = false; - if (FUNC_DISPLAY_INIT_DRIVER == function) { - SH1106InitDriver(); - } - else if (XDSP_07 == Settings->display_model) { +// if (FUNC_DISPLAY_INIT_DRIVER == function) { +// SH1106InitDriver(); +// } +// else if (XDSP_07 == Settings->display_model) { - switch (function) { - case FUNC_DISPLAY_MODEL: - result = true; - break; -#ifdef USE_DISPLAY_MODES1TO5 - case FUNC_DISPLAY_EVERY_SECOND: - SH1106Refresh(); - break; -#endif // USE_DISPLAY_MODES1TO5 - } - } - return result; -} +// switch (function) { +// case FUNC_DISPLAY_MODEL: +// result = true; +// break; +// #ifdef USE_DISPLAY_MODES1TO5 +// case FUNC_DISPLAY_EVERY_SECOND: +// SH1106Refresh(); +// break; +// #endif // USE_DISPLAY_MODES1TO5 +// } +// } +// return result; +// } -#endif // USE_DISPLAY_SH1106 -#endif // USE_DISPLAY -#endif // USE_I2C +// #endif // USE_DISPLAY_SH1106 +// #endif // USE_DISPLAY +// #endif // USE_I2C