Update libraries and fix SSD1306 power control

Update libraries and fix SSD1306 power control
This commit is contained in:
Theo Arends 2019-08-19 18:17:44 +02:00
parent 42c8ac61e8
commit 5f6a87c7c0
93 changed files with 44 additions and 27 deletions

View File

@ -1108,6 +1108,16 @@ void Adafruit_SSD1306::dim(boolean dim) {
TRANSACTION_END
}
void Adafruit_SSD1306::DisplayOnff(int8_t on) {
TRANSACTION_START
if(on) {
ssd1306_command1(SSD1306_DISPLAYON);
} else {
ssd1306_command1(SSD1306_DISPLAYOFF);
}
TRANSACTION_END
}
void Adafruit_SSD1306::Updateframe(void) {
display();
}

View File

@ -140,6 +140,7 @@ public:
void display(void);
void invertDisplay(boolean i);
void dim(boolean dim);
void DisplayOnff(int8_t on);
#if 0
void clearDisplay(void);

View File

@ -1,5 +1,7 @@
/*********************************************************************************************\
* 6.6.0.6 20190819
* Add I2C display driver for SH1106 oled by Gerhard Mutz
* Add SPI display drivers for epaper 4.2 inch, ILI9488 TFT, SSD1351 Color oled and RA8876 TFT by Gerhard Mutz
*
* 6.6.0.5 20190816
* Add command WebSensor<sensor number> 0/1 to control display of sensor data in web GUI (#6085)

View File

@ -17,7 +17,6 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if defined(USE_I2C) || defined(USE_SPI)
#ifdef USE_DISPLAY
@ -45,7 +44,6 @@ uint16_t bg_color = 0;
uint8_t color_type = COLOR_BW;
uint8_t auto_draw=1;
const uint8_t DISPLAY_MAX_DRIVERS = 16; // Max number of display drivers/models supported by xdsp_interface.ino
const uint8_t DISPLAY_MAX_COLS = 44; // Max number of columns allowed with command DisplayCols
const uint8_t DISPLAY_MAX_ROWS = 32; // Max number of lines allowed with command DisplayRows
@ -87,7 +85,6 @@ void (* const DisplayCommand[])(void) PROGMEM = {
&CmndDisplayDimmer, &CmndDisplayColumns, &CmndDisplayRows, &CmndDisplaySize, &CmndDisplayFont,
&CmndDisplayRotate, &CmndDisplayText, &CmndDisplayAddress };
char *dsp_str;
uint16_t dsp_x;
@ -433,12 +430,18 @@ void DisplayText(void)
DisplayInit(DISPLAY_INIT_FULL);
break;
case 'o':
if (!renderer) DisplayOnOff(0);
else renderer->DisplayOnff(0);
if (!renderer) {
DisplayOnOff(0);
} else {
renderer->DisplayOnff(0);
}
break;
case 'O':
if (!renderer) DisplayOnOff(1);
else renderer->DisplayOnff(1);
if (!renderer) {
DisplayOnOff(1);
} else {
renderer->DisplayOnff(1);
}
break;
case 'x':
// set disp_xpos
@ -1261,9 +1264,15 @@ void DisplayInitDriver(void)
void DisplaySetPower(void)
{
disp_power = bitRead(XdrvMailbox.index, disp_device -1);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DSP: Power %d"), disp_power);
if (Settings.display_model) {
if (!renderer) XdspCall(FUNC_DISPLAY_POWER);
else renderer->DisplayOnff(disp_power);
if (!renderer) {
XdspCall(FUNC_DISPLAY_POWER);
} else {
renderer->DisplayOnff(disp_power);
}
}
}
@ -1466,12 +1475,10 @@ void CmndDisplayRows(void)
ResponseCmndNumber(Settings.display_rows);
}
/*********************************************************************************************\
* optional drivers
\*********************************************************************************************/
#if defined(USE_SCRIPT_FATFS) && defined(USE_SCRIPT)
void Draw_RGB_Bitmap(char *file,uint16_t xp, uint16_t yp) {
if (!renderer) return;
@ -1957,7 +1964,6 @@ bool Xdrv13(uint8_t function)
case FUNC_SET_POWER:
DisplaySetPower();
break;
case FUNC_EVERY_SECOND:
#ifdef USE_GRAPH
DisplayCheckGraph();

View File

@ -1,5 +1,5 @@
/*
xdsp_02_SSD1306.ino - Display Oled SSD1306 support for Sonoff-Tasmota
xdsp_02_ssd1306.ino - Display Oled SSD1306 support for Sonoff-Tasmota
Copyright (C) 2019 Theo Arends and Adafruit
@ -21,14 +21,12 @@
#ifdef USE_DISPLAY
#ifdef USE_DISPLAY_SSD1306
#define XDSP_02 2
#define OLED_RESET 4
#define SPRINT(A) char str[32];sprintf(str,"val: %d ",A);Serial.println((char*)str);
extern uint8_t *buffer;
#define XDSP_02 2
#define OLED_ADDRESS1 0x3C // Oled 128x32 I2C address
#define OLED_ADDRESS2 0x3D // Oled 128x64 I2C address
@ -44,8 +42,9 @@ extern uint8_t *buffer;
Adafruit_SSD1306 *oled1306;
/*********************************************************************************************/
extern uint8_t *buffer;
/*********************************************************************************************/
void SSD1306InitDriver()
{
@ -75,9 +74,9 @@ void SSD1306InitDriver()
}
// allocate screen buffer
if (buffer) free(buffer);
if (buffer) { free(buffer); }
buffer = (unsigned char*)calloc((Settings.display_width * Settings.display_height) / 8,1);
if (!buffer) return;
if (!buffer) { return; }
// init renderer
// oled1306 = new Adafruit_SSD1306(SSD1306_LCDWIDTH,SSD1306_LCDHEIGHT);
@ -100,7 +99,6 @@ void SSD1306InitDriver()
}
}
/*********************************************************************************************/
#ifdef USE_DISPLAY_MODES1TO5