From 2ed5abb354896cc58bd6c654039a9268aff46233 Mon Sep 17 00:00:00 2001 From: olikraus Date: Sun, 15 Jan 2017 10:46:52 +0100 Subject: [PATCH] 2.12.6 --- examples/page_buffer/FPS/FPS.ino | 6 +- .../page_buffer/GraphicsTest/GraphicsTest.ino | 2 +- examples/page_buffer/U8g2Logo/U8g2Logo.ino | 2 +- extras/ChangeLog | 6 +- library.properties | 2 +- src/clib/u8g2.h | 2 +- src/clib/u8g2_ll_hvline.c | 55 +++++++++++-------- 7 files changed, 43 insertions(+), 32 deletions(-) diff --git a/examples/page_buffer/FPS/FPS.ino b/examples/page_buffer/FPS/FPS.ino index 68ea1f0f..f60fc0c9 100644 --- a/examples/page_buffer/FPS/FPS.ino +++ b/examples/page_buffer/FPS/FPS.ino @@ -187,8 +187,8 @@ U8G2_LC7981_160X80_1_6800 Uno Clip=3.3 Box=3.0 @=1.5 Pix=2.1 14 Jan 2017 - U8G2_ST7920_128X64_1_HW_SPI Uno Clip=15.6 Box=11.9 @=4.0 Pix=6.8 - U8G2_ST7920_128X64_1_SW_SPI Uno Clip=15.3 Box=11.3 @=3.9 Pix=6.5 issue 87 + U8G2_ST7920_128X64_1_HW_SPI Uno Clip=16.3 Box=20.2 @=4.1 Pix=7.2 + U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI Uno Clip=31.7 Box=77.2 @=4.7 Pix=8.9 */ @@ -246,7 +246,7 @@ //U8G2_ST7920_192X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); //U8G2_ST7920_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */); // Remember to set R/W to 0 //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); -U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8); +//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8); //U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8); //U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); diff --git a/examples/page_buffer/GraphicsTest/GraphicsTest.ino b/examples/page_buffer/GraphicsTest/GraphicsTest.ino index 29518468..669da717 100644 --- a/examples/page_buffer/GraphicsTest/GraphicsTest.ino +++ b/examples/page_buffer/GraphicsTest/GraphicsTest.ino @@ -97,7 +97,7 @@ //U8G2_ST7920_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */); // Remember to set R/W to 0 //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8); -U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8); +//U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8); //U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); // DOGM132 Shield diff --git a/examples/page_buffer/U8g2Logo/U8g2Logo.ino b/examples/page_buffer/U8g2Logo/U8g2Logo.ino index f53159c1..13e2a089 100644 --- a/examples/page_buffer/U8g2Logo/U8g2Logo.ino +++ b/examples/page_buffer/U8g2Logo/U8g2Logo.ino @@ -79,7 +79,7 @@ //U8G2_SSD1327_SEEED_96X96_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96 //U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); -U8G2_SSD1309_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); +//U8G2_SSD1309_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_SSD1309_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); //U8G2_LD7032_60X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8); // SW SPI Nano Board //U8G2_LD7032_60X32_1_4W_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE); // NOT TESTED! diff --git a/extras/ChangeLog b/extras/ChangeLog index d5ab8898..c5e6a6b9 100644 --- a/extras/ChangeLog +++ b/extras/ChangeLog @@ -90,6 +90,8 @@ https://github.com/olikraus/u8g2 ChangeLog * Fixed a bug in the draw pixel procedure which appears in full buffer mode, if the display width is not a multiple of 8 (issue 148) * Added XOR mode (setDrawColor 2, issue 56) -2017-01-xx v2.12.x olikraus@gmail.com +2017-01-15 v2.12.x olikraus@gmail.com * Support for SSD1309 (issue 113) - + * Enabled U8G2_HVLINE_SPEED_OPTIMIZATION (not sure why this was disabled) + * Improved speed for ST7920 (up to 40%, issue 151) + * Support for IST3020 (issue 153) diff --git a/library.properties b/library.properties index 94f38fdc..25d7bcbd 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=U8g2 -version=2.12.5 +version=2.12.6 author=oliver maintainer=oliver sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1322, SSD1325, SSD1327, SSD1606, SH1106, T6963, RA8835, LC7981, PCD8544, PCF8812, UC1604, UC1608, UC1610, UC1611, UC1701, ST7565, ST7567, NT7534, IST3020, ST7920, LD7032, KS0108. Interfaces: I2C, SPI, Parallel. diff --git a/src/clib/u8g2.h b/src/clib/u8g2.h index 4c51ab99..c1bbe066 100644 --- a/src/clib/u8g2.h +++ b/src/clib/u8g2.h @@ -86,7 +86,7 @@ It will consume about 40 bytes more in flash memory of the AVR. HVLine procedures are also used by the text drawing functions. */ -//#define U8G2_HVLINE_SPEED_OPTIMIZATION +#define U8G2_HVLINE_SPEED_OPTIMIZATION /* The following macro enables all four drawing directions for glyphs and strings. diff --git a/src/clib/u8g2_ll_hvline.c b/src/clib/u8g2_ll_hvline.c index 1e288ba9..bed0af82 100644 --- a/src/clib/u8g2_ll_hvline.c +++ b/src/clib/u8g2_ll_hvline.c @@ -279,7 +279,16 @@ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, ST7920 */ +#ifdef U8G2_HVLINE_SPEED_OPTIMIZATION +/* + x,y Upper left position of the line within the local buffer (not the display!) + len length of the line in pixel, len must not be 0 + dir 0: horizontal line (left to right) + 1: vertical line (top to bottom) + asumption: + all clipping done +*/ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { @@ -288,44 +297,42 @@ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_ uint8_t bit_pos; uint8_t mask; uint8_t tile_width = u8g2_GetU8x8(u8g2)->display_info->tile_width; + + bit_pos = x; /* overflow truncate is ok here... */ + bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ + mask = 128; + mask >>= bit_pos; + + offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ + offset *= tile_width; + offset += x>>3; + ptr = u8g2->tile_buf_ptr; + ptr += offset; if ( dir == 0 ) { + do { - bit_pos = x; /* overflow truncate is ok here... */ - bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ - mask = 128; - mask >>= bit_pos; - - offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ - offset *= tile_width; - offset += x>>3; - ptr = u8g2->tile_buf_ptr; - ptr += offset; - if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; - x++; + mask >>= 1; + if ( mask == 0 ) + { + mask = 128; + ptr++; + } + + //x++; len--; } while( len != 0 ); } else { - bit_pos = x; /* overflow truncate is ok here... */ - bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ - mask = 128; - mask >>= bit_pos; - - offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ - offset *= tile_width; - offset += x>>3; - ptr = u8g2->tile_buf_ptr; - ptr += offset; do { if ( u8g2->draw_color <= 1 ) @@ -340,6 +347,7 @@ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_ } } +#else /* U8G2_HVLINE_SPEED_OPTIMIZATION */ /* @@ -385,7 +393,7 @@ static void u8g2_draw_pixel_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8 asumption: all clipping done */ -void x_u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) +void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { if ( dir == 0 ) { @@ -407,3 +415,4 @@ void x_u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uin } } +#endif /* U8G2_HVLINE_SPEED_OPTIMIZATION */