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 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) { void Adafruit_SSD1306::Updateframe(void) {
display(); display();
} }

View File

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

View File

@ -1,5 +1,7 @@
/*********************************************************************************************\ /*********************************************************************************************\
* 6.6.0.6 20190819 * 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 * 6.6.0.5 20190816
* Add command WebSensor<sensor number> 0/1 to control display of sensor data in web GUI (#6085) * 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/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#if defined(USE_I2C) || defined(USE_SPI) #if defined(USE_I2C) || defined(USE_SPI)
#ifdef USE_DISPLAY #ifdef USE_DISPLAY
@ -28,7 +27,7 @@
Renderer *renderer; Renderer *renderer;
enum ColorType { COLOR_BW,COLOR_COLOR}; enum ColorType { COLOR_BW, COLOR_COLOR };
#ifndef MAXBUTTONS #ifndef MAXBUTTONS
#define MAXBUTTONS 16 #define MAXBUTTONS 16
@ -45,7 +44,6 @@ uint16_t bg_color = 0;
uint8_t color_type = COLOR_BW; uint8_t color_type = COLOR_BW;
uint8_t auto_draw=1; 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_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_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 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, &CmndDisplayDimmer, &CmndDisplayColumns, &CmndDisplayRows, &CmndDisplaySize, &CmndDisplayFont,
&CmndDisplayRotate, &CmndDisplayText, &CmndDisplayAddress }; &CmndDisplayRotate, &CmndDisplayText, &CmndDisplayAddress };
char *dsp_str; char *dsp_str;
uint16_t dsp_x; uint16_t dsp_x;
@ -433,12 +430,18 @@ void DisplayText(void)
DisplayInit(DISPLAY_INIT_FULL); DisplayInit(DISPLAY_INIT_FULL);
break; break;
case 'o': case 'o':
if (!renderer) DisplayOnOff(0); if (!renderer) {
else renderer->DisplayOnff(0); DisplayOnOff(0);
} else {
renderer->DisplayOnff(0);
}
break; break;
case 'O': case 'O':
if (!renderer) DisplayOnOff(1); if (!renderer) {
else renderer->DisplayOnff(1); DisplayOnOff(1);
} else {
renderer->DisplayOnff(1);
}
break; break;
case 'x': case 'x':
// set disp_xpos // set disp_xpos
@ -1261,9 +1264,15 @@ void DisplayInitDriver(void)
void DisplaySetPower(void) void DisplaySetPower(void)
{ {
disp_power = bitRead(XdrvMailbox.index, disp_device -1); disp_power = bitRead(XdrvMailbox.index, disp_device -1);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DSP: Power %d"), disp_power);
if (Settings.display_model) { if (Settings.display_model) {
if (!renderer) XdspCall(FUNC_DISPLAY_POWER); if (!renderer) {
else renderer->DisplayOnff(disp_power); XdspCall(FUNC_DISPLAY_POWER);
} else {
renderer->DisplayOnff(disp_power);
}
} }
} }
@ -1466,12 +1475,10 @@ void CmndDisplayRows(void)
ResponseCmndNumber(Settings.display_rows); ResponseCmndNumber(Settings.display_rows);
} }
/*********************************************************************************************\ /*********************************************************************************************\
* optional drivers * optional drivers
\*********************************************************************************************/ \*********************************************************************************************/
#if defined(USE_SCRIPT_FATFS) && defined(USE_SCRIPT) #if defined(USE_SCRIPT_FATFS) && defined(USE_SCRIPT)
void Draw_RGB_Bitmap(char *file,uint16_t xp, uint16_t yp) { void Draw_RGB_Bitmap(char *file,uint16_t xp, uint16_t yp) {
if (!renderer) return; if (!renderer) return;
@ -1957,7 +1964,6 @@ bool Xdrv13(uint8_t function)
case FUNC_SET_POWER: case FUNC_SET_POWER:
DisplaySetPower(); DisplaySetPower();
break; break;
case FUNC_EVERY_SECOND: case FUNC_EVERY_SECOND:
#ifdef USE_GRAPH #ifdef USE_GRAPH
DisplayCheckGraph(); 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 Copyright (C) 2019 Theo Arends and Adafruit
@ -21,14 +21,12 @@
#ifdef USE_DISPLAY #ifdef USE_DISPLAY
#ifdef USE_DISPLAY_SSD1306 #ifdef USE_DISPLAY_SSD1306
#define XDSP_02 2
#define OLED_RESET 4 #define OLED_RESET 4
#define SPRINT(A) char str[32];sprintf(str,"val: %d ",A);Serial.println((char*)str); #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_ADDRESS1 0x3C // Oled 128x32 I2C address
#define OLED_ADDRESS2 0x3D // Oled 128x64 I2C address #define OLED_ADDRESS2 0x3D // Oled 128x64 I2C address
@ -44,8 +42,9 @@ extern uint8_t *buffer;
Adafruit_SSD1306 *oled1306; Adafruit_SSD1306 *oled1306;
/*********************************************************************************************/ extern uint8_t *buffer;
/*********************************************************************************************/
void SSD1306InitDriver() void SSD1306InitDriver()
{ {
@ -75,16 +74,16 @@ void SSD1306InitDriver()
} }
// allocate screen buffer // allocate screen buffer
if (buffer) free(buffer); if (buffer) { free(buffer); }
buffer=(unsigned char*)calloc((Settings.display_width * Settings.display_height) / 8,1); buffer = (unsigned char*)calloc((Settings.display_width * Settings.display_height) / 8,1);
if (!buffer) return; if (!buffer) { return; }
// init renderer // init renderer
//oled1306 = new Adafruit_SSD1306(SSD1306_LCDWIDTH,SSD1306_LCDHEIGHT); // oled1306 = new Adafruit_SSD1306(SSD1306_LCDWIDTH,SSD1306_LCDHEIGHT);
oled1306 = new Adafruit_SSD1306(Settings.display_width, Settings.display_height, &Wire, reset_pin); oled1306 = new Adafruit_SSD1306(Settings.display_width, Settings.display_height, &Wire, reset_pin);
oled1306->begin(SSD1306_SWITCHCAPVCC, Settings.display_address[0],0); oled1306->begin(SSD1306_SWITCHCAPVCC, Settings.display_address[0], 0);
renderer=oled1306; renderer = oled1306;
renderer->DisplayInit(DISPLAY_INIT_MODE,Settings.display_size,Settings.display_rotate,Settings.display_font); renderer->DisplayInit(DISPLAY_INIT_MODE, Settings.display_size, Settings.display_rotate, Settings.display_font);
renderer->setTextColor(1,0); renderer->setTextColor(1,0);
@ -100,7 +99,6 @@ void SSD1306InitDriver()
} }
} }
/*********************************************************************************************/ /*********************************************************************************************/
#ifdef USE_DISPLAY_MODES1TO5 #ifdef USE_DISPLAY_MODES1TO5