Fix DisplayRotate

* Fix DisplayRotate
* Increase SSD1306 row count to 16
* Remove redundant Tasmota function from Adafruit ILI9341 library
This commit is contained in:
Theo Arends 2018-08-21 14:56:58 +02:00
parent b830e64d02
commit 8ac213e99d
5 changed files with 14 additions and 26 deletions

View File

@ -387,27 +387,15 @@ void Adafruit_ILI9341::begin(uint32_t freq)
/*********************************************************************************************/
void Adafruit_ILI9341::setScrollStart(uint16_t start)
{
startWrite();
writeCommand(0x37);
spiWrite(start>>8);
spiWrite(start);
endWrite();
}
void Adafruit_ILI9341::setScrollMargins(uint16_t top, uint16_t bottom)
{
uint16_t height = _height - (top + bottom);
startWrite();
writeCommand(0x33);
spiWrite(top>>8);
spiWrite(top);
spiWrite(height>>8);
spiWrite(height);
spiWrite(bottom>>8);
spiWrite(bottom);
SPI_WRITE16(top);
SPI_WRITE16(height);
SPI_WRITE16(bottom);
endWrite();
}

View File

@ -133,7 +133,6 @@ class Adafruit_ILI9341 : public Adafruit_GFX {
void begin(uint32_t freq = 0, SPIClass &spi=SPI);
#endif
void setScrollStart(uint16_t start);
void setScrollMargins(uint16_t top, uint16_t bottom);
void setRotation(uint8_t r);

View File

@ -21,11 +21,10 @@
#ifdef USE_DISPLAY
#define DISPLAY_MAX_DRIVERS 16 // Max number of display drivers/models supported by xdsp_interface.ino
#define DISPLAY_MAX_COLS 40 // Max number of columns to display
#define DISPLAY_MAX_ROWS 16 // Max number of lines to display for LCD and Oled using local screen buffer
#define DISPLAY_SCREEN_COLS 40 // Max number of columns to display
#define DISPLAY_SCREEN_ROWS 8 // Max number of lines to display for LCD and Oled using local screen buffer
#define DISPLAY_LOG_COLS DISPLAY_SCREEN_COLS +1 // Number of characters in display log buffer line +1
#define DISPLAY_LOG_COLS DISPLAY_MAX_COLS +1 // Number of characters in display log buffer line +1
#define DISPLAY_LOG_ROWS 32 // Number of lines in display log buffer
#define D_CMND_DISPLAY "Display"
@ -817,6 +816,7 @@ boolean DisplayCommand()
else if (CMND_DISP_ROTATE == command_code) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 4)) {
Settings.display_rotate = XdrvMailbox.payload;
DisplayInit(DISPLAY_INIT_MODE);
}
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_rotate);
}
@ -825,7 +825,6 @@ boolean DisplayCommand()
if (disp_device && XdrvMailbox.data_len > 0) {
#ifndef USE_DISPLAY_MODES1TO5
DisplayText();
#else
if (!Settings.display_mode) {
DisplayText();
@ -854,13 +853,13 @@ boolean DisplayCommand()
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_refresh);
}
else if ((CMND_DISP_COLS == command_code) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= 2)) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_SCREEN_COLS)) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_MAX_COLS)) {
Settings.display_cols[XdrvMailbox.index -1] = XdrvMailbox.payload;
}
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_DISPLAY_COMMAND_INDEX_NVALUE, command, XdrvMailbox.index, Settings.display_cols[XdrvMailbox.index -1]);
}
else if (CMND_DISP_ROWS == command_code) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_SCREEN_ROWS)) {
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= DISPLAY_MAX_ROWS)) {
Settings.display_rows = XdrvMailbox.payload;
}
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_DISPLAY_COMMAND_NVALUE, command, Settings.display_rows);

View File

@ -27,7 +27,7 @@
#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 8 // Max number of lines 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

View File

@ -133,7 +133,8 @@ void Ili9341PrintLogLine()
byte size = Settings.display_size;
tft->setTextSize(size);
uint16_t theight = size * TFT_FONT_HEIGTH;
tft->fillRect(0, tft_scroll, tft->width(), theight, ILI9341_BLACK);
tft->fillRect(0, tft_scroll, tft->width(), theight, ILI9341_BLACK); // Erase line
char *pch = strchr(disp_log_buffer[disp_log_buffer_ptr],'~'); // = 0x7E (~) Replace degrees character (276 octal)
if (pch != NULL) {
@ -148,7 +149,7 @@ void Ili9341PrintLogLine()
if (tft_scroll >= (tft->height() - TFT_BOTTOM)) {
tft_scroll = TFT_TOP;
}
tft->setScrollStart(tft_scroll);
tft->scrollTo(tft_scroll);
}
void Ili9341PrintLog()
@ -181,6 +182,7 @@ void Ili9341Refresh() // Every second
tft->print(tftdt);
switch (Settings.display_mode) {
case 1: // Text
case 2: // Local
case 3: // Local
case 4: // Mqtt