diff --git a/radio/src/lcd_common.cpp b/radio/src/lcd_common.cpp index 139057305..2580759c6 100644 --- a/radio/src/lcd_common.cpp +++ b/radio/src/lcd_common.cpp @@ -51,7 +51,87 @@ uint8_t lcdLastPos; uint8_t lcdNextPos; #if defined(CPUARM) -void lcdPutPattern(xcoord_t x, uint8_t y, const uint8_t * pattern, uint8_t width, uint8_t height, LcdFlags flags); +void lcdPutPattern(xcoord_t x, uint8_t y, const uint8_t * pattern, uint8_t width, uint8_t height, LcdFlags flags) +{ + bool blink = false; + bool inv = false; + if (flags & BLINK) { + if (BLINK_ON_PHASE) { + if (flags & INVERS) + inv = true; + else { + blink = true; + } + } + } + else if (flags & INVERS) { + inv = true; + } + + uint8_t lines = (height+7)/8; + assert(lines <= 5); + + for (int8_t i=0; i= 12) continue; + if (j<0 && !inv) continue; + } + else { + uint8_t line = (j / 8); + uint8_t pixel = (j % 8); + plot = b[line] & (1 << pixel); + } + if (inv) plot = !plot; + if (!blink) { + lcd_plot(x, y+j, plot ? FORCE : ERASE); + } + } + } + + x++; + lcdNextPos++; + } +} + void lcd_putcAtt(xcoord_t x, uint8_t y, const unsigned char c, LcdFlags flags) { #if !defined(BOOT) @@ -94,7 +174,7 @@ void lcd_putcAtt(xcoord_t x, uint8_t y, const unsigned char c, LcdFlags flags) } else if (flags & MIDSIZE) { q = &font_8x10[((uint16_t)c-0x20)*16]; - lcdPutPattern(x, y, q, 8, 11, flags); + lcdPutPattern(x, y, q, 8, 12, flags); } else if (flags & SMLSIZE) { q = (c < 0xc0 ? &font_4x6[(c-0x20)*5] : &font_4x6_extra[(c-0xc0)*5]); diff --git a/radio/src/lcd_default.cpp b/radio/src/lcd_default.cpp index d15e16681..69a1c73c6 100755 --- a/radio/src/lcd_default.cpp +++ b/radio/src/lcd_default.cpp @@ -38,110 +38,7 @@ #define LCD_BYTE_FILTER(p, keep, add) *(p) = (*(p) & (keep)) | (add) -#if defined(CPUARM) -void lcdPutPattern(xcoord_t x, uint8_t y, const uint8_t * pattern, uint8_t width, uint8_t height, LcdFlags flags) -{ - uint8_t *p = &displayBuf[ y / 8 * LCD_W + x ]; - uint8_t *end = &displayBuf[ y / 8 * LCD_W + LCD_W ]; - - bool blink = false; - bool inv = false; - if (flags & BLINK) { - if (BLINK_ON_PHASE) { - if (flags & INVERS) - inv = true; - else { - blink = true; - } - } - } - else if (flags & INVERS) { - inv = true; - } - - uint8_t lines = (height+7)/8; - assert(lines <= 5); - - for (int8_t i=0; i0) { - b1 = b[j-1] >> (8-ym8); - } - else { - keep = ~(keepref << ym8); - } - if (j> (8-ym8)); - } - if (!blink) { - LCD_BYTE_FILTER(dest, keep, b1|b2); - } - dest += LCD_W; - } - } - - if (inv && height<8) { - if (ym8) { - lcd_mask(p, 0x01 << (ym8-1), FORCE); - } - else if (y) { - ASSERT_IN_DISPLAY(p - LCD_W); - lcd_mask(p - LCD_W, 0x80, FORCE); - } - } - } - - p++; - lcdNextPos++; - } -} -#else +#if !defined(CPUARM) void lcd_putcAtt(xcoord_t x, uint8_t y, const unsigned char c, LcdFlags flags) { uint8_t *p = &displayBuf[ y / 8 * LCD_W + x ]; diff --git a/radio/src/tests/dblsize_128x64.png b/radio/src/tests/dblsize_128x64.png new file mode 100755 index 000000000..b18c73888 Binary files /dev/null and b/radio/src/tests/dblsize_128x64.png differ diff --git a/radio/src/tests/dblsize_212x64.png b/radio/src/tests/dblsize_212x64.png new file mode 100644 index 000000000..81f2271ba Binary files /dev/null and b/radio/src/tests/dblsize_212x64.png differ diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 917b1cddd..723afd9ea 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -191,3 +191,36 @@ TEST(Lcd, vline) } EXPECT_TRUE(checkScreenshot("vline")); } + +TEST(Lcd, Stdsize) +{ + lcd_clear(); + lcd_putsAtt(0, 0, "TEST", 0); + lcd_putsAtt(10, 22, "TEST", INVERS); + lcd_filled_rect(8, 40, 100, 20); + lcd_putsAtt(10, 42, "TEST", 0); + EXPECT_TRUE(checkScreenshot("stdsize")); +} + +#if defined(CPUARM) +TEST(Lcd, Midsize) +{ + lcd_clear(); + lcd_putsAtt(0, 0, "TEST", MIDSIZE); + lcd_putsAtt(10, 22, "TEST", MIDSIZE|INVERS); + lcd_filled_rect(8, 40, 100, 20); + lcd_putsAtt(10, 42, "TEST", MIDSIZE); + EXPECT_TRUE(checkScreenshot("midsize")); +} + +TEST(Lcd, Dblsize) +{ + lcd_clear(); + lcd_putsAtt(2, 10, "TST", DBLSIZE); + lcd_putsAtt(42, 10, "TST", DBLSIZE|INVERS); + lcd_filled_rect(80, 8, 46, 24); + lcd_putsAtt(82, 10, "TST", DBLSIZE); + EXPECT_TRUE(checkScreenshot("dblsize")); +} + +#endif diff --git a/radio/src/tests/midsize_128x64.png b/radio/src/tests/midsize_128x64.png new file mode 100755 index 000000000..316f7c0f9 Binary files /dev/null and b/radio/src/tests/midsize_128x64.png differ diff --git a/radio/src/tests/midsize_212x64.png b/radio/src/tests/midsize_212x64.png new file mode 100644 index 000000000..e043e45ef Binary files /dev/null and b/radio/src/tests/midsize_212x64.png differ diff --git a/radio/src/tests/prec1_dblsize_invers_212x64.png b/radio/src/tests/prec1_dblsize_invers_212x64.png index ae5a69b31..7d5f0b2b6 100755 Binary files a/radio/src/tests/prec1_dblsize_invers_212x64.png and b/radio/src/tests/prec1_dblsize_invers_212x64.png differ diff --git a/radio/src/tests/stdsize_128x64.png b/radio/src/tests/stdsize_128x64.png new file mode 100644 index 000000000..f2ef3b6f3 Binary files /dev/null and b/radio/src/tests/stdsize_128x64.png differ diff --git a/radio/src/tests/stdsize_212x64.png b/radio/src/tests/stdsize_212x64.png new file mode 100644 index 000000000..9b5894739 Binary files /dev/null and b/radio/src/tests/stdsize_212x64.png differ