diff --git a/legacy/firmware/layout2.c b/legacy/firmware/layout2.c index 904d50c19..07bc3f6f2 100644 --- a/legacy/firmware/layout2.c +++ b/legacy/firmware/layout2.c @@ -546,7 +546,9 @@ void layoutResetWord(const char *word, int pass, int word_pos, bool last) { FONT_STANDARD); oledDrawStringCenter(OLED_WIDTH / 2, 4 * 9 - 3, word, FONT_FIXED | FONT_DOUBLE); - oledSCA(4 * 9 - 3 - 2, 4 * 9 - 3 + 15 + 2, OLED_WIDTH / 2); + // 30 is the maximum pixels used for a pixel row in the BIP39 word "abstract" + oledSCA(4 * 9 - 3 - 2, 4 * 9 - 3 + 15 + 2, 30); + oledInvert(0, 4 * 9 - 3 - 2, OLED_WIDTH - 1, 4 * 9 - 3 + 15 + 2); layoutButtonYes(btnYes); oledRefresh(); } diff --git a/legacy/firmware/pinmatrix.c b/legacy/firmware/pinmatrix.c index 6ef240098..1d863c3ed 100644 --- a/legacy/firmware/pinmatrix.c +++ b/legacy/firmware/pinmatrix.c @@ -46,8 +46,8 @@ void pinmatrix_draw(const char *text) { } } for (int i = 0; i < 3; i++) { - oledSCA(12 + i * (h + pad), 12 + i * (h + pad) + h - 1, OLED_WIDTH / 2); - oledInvert(0, 12 + i * (h + pad), OLED_WIDTH - 1, 12 + i * (h + pad) + h - 1); + // 36 is the maximum pixels used for a pin matrix pixel row + oledSCA(12 + i * (h + pad), 12 + i * (h + pad) + h - 1, 36); } oledRefresh(); } diff --git a/legacy/gen/bitmaps.c b/legacy/gen/bitmaps.c index c47c1a0bd..7b40e628f 100644 --- a/legacy/gen/bitmaps.c +++ b/legacy/gen/bitmaps.c @@ -6,7 +6,7 @@ const uint8_t bmp_digit1_data[] = { 0xff, 0xff, 0xfc, 0x3f, 0xf8, 0x3f, 0xf0, 0x const uint8_t bmp_digit2_data[] = { 0xff, 0xff, 0xe0, 0x1f, 0xe0, 0x0f, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xf8, 0x0f, 0xf0, 0x1f, 0xe1, 0xff, 0xe1, 0xff, 0xe1, 0xff, 0xe1, 0xff, 0xe0, 0x07, 0xe0, 0x07, 0xff, 0xff, }; const uint8_t bmp_digit3_data[] = { 0xff, 0xff, 0xe0, 0x1f, 0xe0, 0x0f, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xf8, 0x0f, 0xf8, 0x0f, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xe0, 0x0f, 0xe0, 0x1f, 0xff, 0xff, }; const uint8_t bmp_digit4_data[] = { 0xff, 0xff, 0xff, 0x0f, 0xfe, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0xf1, 0x0f, 0xe3, 0x0f, 0xc7, 0x0f, 0xcf, 0x0f, 0xc0, 0x0f, 0xc0, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0xff, }; -const uint8_t bmp_digit5_data[] = { 0xff, 0xff, 0xe0, 0x1f, 0xe0, 0x1f, 0xe7, 0xff, 0xe7, 0xff, 0xe0, 0x1f, 0xe0, 0x0f, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xe0, 0x0f, 0xe0, 0x1f, 0xff, 0xff, }; +const uint8_t bmp_digit5_data[] = { 0xff, 0xff, 0xe0, 0x0f, 0xe0, 0x0f, 0xe1, 0xff, 0xe1, 0xff, 0xe0, 0x1f, 0xe0, 0x0f, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xff, 0x87, 0xe0, 0x0f, 0xe0, 0x1f, 0xff, 0xff, }; const uint8_t bmp_digit6_data[] = { 0xff, 0xff, 0xf8, 0x1f, 0xf0, 0x1f, 0xe1, 0xff, 0xe1, 0xff, 0xe0, 0x1f, 0xe0, 0x0f, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xf0, 0x0f, 0xf8, 0x1f, 0xff, 0xff, }; const uint8_t bmp_digit7_data[] = { 0xff, 0xff, 0xe0, 0x07, 0xe0, 0x07, 0xff, 0x87, 0xff, 0x87, 0xff, 0x0f, 0xfe, 0x1f, 0xfc, 0x1f, 0xfc, 0x3f, 0xf8, 0x7f, 0xf8, 0x7f, 0xf8, 0x7f, 0xf8, 0x7f, 0xf8, 0x7f, 0xf8, 0x7f, 0xff, 0xff, }; const uint8_t bmp_digit8_data[] = { 0xff, 0xff, 0xf8, 0x1f, 0xf0, 0x0f, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xf0, 0x0f, 0xf0, 0x0f, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xe1, 0x87, 0xf0, 0x0f, 0xf8, 0x1f, 0xff, 0xff, }; diff --git a/legacy/gen/bitmaps/digit5.png b/legacy/gen/bitmaps/digit5.png index aafcd3c54..59b778673 100644 Binary files a/legacy/gen/bitmaps/digit5.png and b/legacy/gen/bitmaps/digit5.png differ diff --git a/legacy/oled.c b/legacy/oled.c index f57b817ff..b6a29f4d0 100644 --- a/legacy/oled.c +++ b/legacy/oled.c @@ -422,7 +422,7 @@ void oledSwipeRight(void) { } /* - * Mitigate SCA on lines y1-y2 by setting exactly width pixels black + * Mitigate SCA on lines y1-y2 by setting at least width pixels white */ void oledSCA(int y1, int y2, int width) { y1 = MAX(y1, 0); @@ -432,9 +432,14 @@ void oledSCA(int y1, int y2, int width) { for (int x = 0; x < OLED_WIDTH; x++) { pix += oledGetPixel(x, y); } - pix = MAX(width - pix, 0); - for (int x = 0 + (pix / 2); x < OLED_WIDTH - ((pix + 1) / 2); x++) { - oledInvertPixel(x, y); + if (width > pix) { + pix = width - pix; + for (int x = 0; x < pix / 2; x++) { + oledDrawPixel(x, y); + } + for (int x = OLED_WIDTH - ((pix + 1) / 2); x < OLED_WIDTH; x++) { + oledDrawPixel(x, y); + } } } }