Added fixed-width font and multi-font support

This commit is contained in:
Jochen Hoenicke 2018-02-06 22:29:33 +01:00 committed by Pavol Rusnak
parent fc7189f801
commit 83a69a0334
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D
15 changed files with 355 additions and 339 deletions

View File

@ -105,18 +105,18 @@ void bootloader_loop(void)
oledClear();
oledDrawBitmap(0, 0, &bmp_logo64);
if (firmware_present()) {
oledDrawString(52, 0, "TREZOR");
oledDrawString(52, 0, "TREZOR", FONT_STANDARD);
static char serial[25];
fill_serialno_fixed(serial);
oledDrawString(52, 20, "Serial No.");
oledDrawString(52, 40, serial + 12); // second part of serial
oledDrawString(52, 20, "Serial No.", FONT_STANDARD);
oledDrawString(52, 40, serial + 12, FONT_STANDARD); // second part of serial
serial[12] = 0;
oledDrawString(52, 30, serial); // first part of serial
oledDrawStringRight(OLED_WIDTH - 1, OLED_HEIGHT - 8, "Loader " VERSTR(VERSION_MAJOR) "." VERSTR(VERSION_MINOR) "." VERSTR(VERSION_PATCH));
oledDrawString(52, 30, serial, FONT_STANDARD); // first part of serial
oledDrawStringRight(OLED_WIDTH - 1, OLED_HEIGHT - 8, "Loader " VERSTR(VERSION_MAJOR) "." VERSTR(VERSION_MINOR) "." VERSTR(VERSION_PATCH), FONT_STANDARD);
} else {
oledDrawString(52, 10, "Welcome!");
oledDrawString(52, 30, "Please visit");
oledDrawString(52, 50, "trezor.io/start");
oledDrawString(52, 10, "Welcome!", FONT_STANDARD);
oledDrawString(52, 30, "Please visit", FONT_STANDARD);
oledDrawString(52, 50, "trezor.io/start", FONT_STANDARD);
}
oledRefresh();

View File

@ -35,8 +35,8 @@ void oledDebug(const char *line)
oledClear();
for (int i = 0; i < 8; i++) {
if (lines[i]) {
oledDrawChar(0, i * 8, '0' + (id + i) % 10, 1);
oledDrawString(8, i * 8, lines[i]);
oledDrawChar(0, i * 8, '0' + (id + i) % 10, FONT_STANDARD);
oledDrawString(8, i * 8, lines[i], FONT_STANDARD);
}
}
oledRefresh();

View File

@ -109,14 +109,14 @@ void layoutHome(void)
} else {
if (label && strlen(label) > 0) {
oledDrawBitmap(44, 4, &bmp_logo48);
oledDrawStringCenter(OLED_HEIGHT - 8, label);
oledDrawStringCenter(OLED_HEIGHT - 8, label, FONT_STANDARD);
} else {
oledDrawBitmap(40, 0, &bmp_logo64);
}
}
if (storage_needsBackup()) {
oledBox(0, 0, 127, 8, false);
oledDrawStringCenter(0, "NEEDS BACKUP!");
oledDrawStringCenter(0, "NEEDS BACKUP!", FONT_STANDARD);
}
oledRefresh();
@ -316,13 +316,13 @@ void layoutResetWord(const char *word, int pass, int word_pos, bool last)
oledDrawBitmap(0, 0, &bmp_icon_info);
left = bmp_icon_info.width + 4;
oledDrawString(left, 0 * 9, action);
oledDrawString(left, 2 * 9, word_pos < 10 ? index_str + 1 : index_str);
oledDrawStringDouble(left, 3 * 9, word);
oledDrawString(left, 0 * 9, action, FONT_STANDARD);
oledDrawString(left, 2 * 9, word_pos < 10 ? index_str + 1 : index_str, FONT_STANDARD);
oledDrawString(left, 3 * 9, word, FONT_STANDARD | FONT_DOUBLE);
oledHLine(OLED_HEIGHT - 13);
oledDrawString(OLED_WIDTH - fontCharWidth('\x06') - 1, OLED_HEIGHT - 8, "\x06");
oledDrawString(OLED_WIDTH - oledStringWidth(btnYes) - fontCharWidth('\x06') - 3, OLED_HEIGHT - 8, btnYes);
oledInvert(OLED_WIDTH - oledStringWidth(btnYes) - fontCharWidth('\x06') - 4, OLED_HEIGHT - 9, OLED_WIDTH - 1, OLED_HEIGHT - 1);
oledDrawString(OLED_WIDTH - fontCharWidth(FONT_STANDARD, '\x06') - 1, OLED_HEIGHT - 8, "\x06", FONT_STANDARD);
oledDrawStringRight(OLED_WIDTH - fontCharWidth(FONT_STANDARD, '\x06') - 3, OLED_HEIGHT - 8, btnYes, FONT_STANDARD);
oledInvert(OLED_WIDTH - oledStringWidth(btnYes, FONT_STANDARD) - fontCharWidth(FONT_STANDARD, '\x06') - 4, OLED_HEIGHT - 9, OLED_WIDTH - 1, OLED_HEIGHT - 1);
oledRefresh();
}
@ -491,24 +491,24 @@ void layoutAddress(const char *address, const char *desc, bool qrcode, bool igno
uint32_t rowlen = (addrlen - 1) / (addrlen <= 40 ? 2 : addrlen <= 60 ? 3 : 4) + 1;
const char **str = split_message((const uint8_t *)address, addrlen, rowlen);
if (desc) {
oledDrawString(0, 0 * 9, desc);
oledDrawString(0, 0 * 9, desc, FONT_STANDARD);
}
for (int i = 0; i < 4; i++) {
oledDrawString(0, (i + 1) * 9 + 4, str[i]);
oledDrawString(0, (i + 1) * 9 + 4, str[i], FONT_FIXED);
}
oledDrawString(0, 42, address_n_str(address_n, address_n_count));
oledDrawString(0, 42, address_n_str(address_n, address_n_count), FONT_STANDARD);
}
if (!qrcode) {
static const char *btnNo = _("QR Code");
oledDrawString(2, OLED_HEIGHT - 8, btnNo);
oledInvert(0, OLED_HEIGHT - 9, oledStringWidth(btnNo) + 3, OLED_HEIGHT - 1);
oledDrawString(2, OLED_HEIGHT - 8, btnNo, FONT_STANDARD);
oledInvert(0, OLED_HEIGHT - 9, oledStringWidth(btnNo, FONT_STANDARD) + 3, OLED_HEIGHT - 1);
}
static const char *btnYes = _("Continue");
oledDrawString(OLED_WIDTH - fontCharWidth('\x06') - 1, OLED_HEIGHT - 8, "\x06");
oledDrawString(OLED_WIDTH - oledStringWidth(btnYes) - fontCharWidth('\x06') - 3, OLED_HEIGHT - 8, btnYes);
oledInvert(OLED_WIDTH - oledStringWidth(btnYes) - fontCharWidth('\x06') - 4, OLED_HEIGHT - 9, OLED_WIDTH - 1, OLED_HEIGHT - 1);
oledDrawString(OLED_WIDTH - fontCharWidth(FONT_STANDARD, '\x06') - 1, OLED_HEIGHT - 8, "\x06", FONT_STANDARD);
oledDrawStringRight(OLED_WIDTH - fontCharWidth(FONT_STANDARD, '\x06') - 3, OLED_HEIGHT - 8, btnYes, FONT_STANDARD);
oledInvert(OLED_WIDTH - oledStringWidth(btnYes, FONT_STANDARD) - fontCharWidth(FONT_STANDARD, '\x06') - 4, OLED_HEIGHT - 9, OLED_WIDTH - 1, OLED_HEIGHT - 1);
oledRefresh();
}

View File

@ -39,7 +39,7 @@ void pinmatrix_draw(const char *text)
// use (2 - j) instead of j to achieve 789456123 layout
int k = pinmatrix_perm[i + (2 - j) * 3] - '0';
if (text) {
oledDrawStringCenter(0, text);
oledDrawStringCenter(0, text, FONT_STANDARD);
}
oledDrawBitmap((OLED_WIDTH - 3 * w - 2 * pad) / 2 + i * (w + pad), OLED_HEIGHT - 3 * h - 2 * pad + j * (h + pad), bmp_digits[k]);
}

View File

@ -260,7 +260,7 @@ static void display_choices(bool twoColumn, char choices[9][12], int num)
int x = twoColumn ? 64 * col + 32 : 42 * col + 22;
int choice = word_matrix[nColumns*row + col];
const char *text = choice < num ? choices[choice] : "-";
oledDrawString(x - oledStringWidth(text)/2, y, text);
oledDrawString(x - oledStringWidth(text, FONT_STANDARD)/2, y, text, FONT_STANDARD);
if (twoColumn) {
oledInvert(x - 32 + 1, y - 1, x - 32 + 63 - 1, y + 8);
} else {

128
gen/font.inc Normal file
View File

@ -0,0 +1,128 @@
/* 0x00 _ */ (uint8_t *)"\x01\x00",
/* 0x01 _ */ (uint8_t *)"\x01\x00",
/* 0x02 _ */ (uint8_t *)"\x01\x00",
/* 0x03 _ */ (uint8_t *)"\x01\x00",
/* 0x04 _ */ (uint8_t *)"\x01\x00",
/* 0x05 _ */ (uint8_t *)"\x01\x00",
/* 0x06 _ */ (uint8_t *)"\x07\x18\x1c\x0e\x18\x30\x40\x80",
/* 0x07 _ */ (uint8_t *)"\x01\x00",
/* 0x08 _ */ (uint8_t *)"\x01\x00",
/* 0x09 _ */ (uint8_t *)"\x01\x00",
/* 0x0a _ */ (uint8_t *)"\x01\x00",
/* 0x0b _ */ (uint8_t *)"\x01\x00",
/* 0x0c _ */ (uint8_t *)"\x01\x00",
/* 0x0d _ */ (uint8_t *)"\x01\x00",
/* 0x0e _ */ (uint8_t *)"\x01\x00",
/* 0x0f _ */ (uint8_t *)"\x01\x00",
/* 0x10 _ */ (uint8_t *)"\x01\x00",
/* 0x11 _ */ (uint8_t *)"\x01\x00",
/* 0x12 _ */ (uint8_t *)"\x01\x00",
/* 0x13 _ */ (uint8_t *)"\x01\x00",
/* 0x14 _ */ (uint8_t *)"\x01\x00",
/* 0x15 _ */ (uint8_t *)"\x07\x44\xee\x7c\x38\x7c\xee\x44",
/* 0x16 _ */ (uint8_t *)"\x01\x00",
/* 0x17 _ */ (uint8_t *)"\x01\x00",
/* 0x18 _ */ (uint8_t *)"\x01\x00",
/* 0x19 _ */ (uint8_t *)"\x01\x00",
/* 0x1a _ */ (uint8_t *)"\x01\x00",
/* 0x1b _ */ (uint8_t *)"\x01\x00",
/* 0x1c _ */ (uint8_t *)"\x01\x00",
/* 0x1d _ */ (uint8_t *)"\x01\x00",
/* 0x1e _ */ (uint8_t *)"\x01\x00",
/* 0x1f _ */ (uint8_t *)"\x01\x00",
/* 0x20 */ (uint8_t *)"\x01\x00",
/* 0x21 ! */ (uint8_t *)"\x02\xfa\xfa",
/* 0x22 " */ (uint8_t *)"\x03\xc0\x00\xc0",
/* 0x23 # */ (uint8_t *)"\x05\x6c\xfe\x6c\xfe\x6c",
/* 0x24 $ */ (uint8_t *)"\x05\x32\xff\x5a\xff\x4c",
/* 0x25 % */ (uint8_t *)"\x06\xc0\xc6\x1c\x70\xc6\x06",
/* 0x26 & */ (uint8_t *)"\x06\x5c\xfe\xb2\xfe\x4c\x1e",
/* 0x27 ' */ (uint8_t *)"\x01\xc0",
/* 0x28 ( */ (uint8_t *)"\x03\x38\x7c\x82",
/* 0x29 ) */ (uint8_t *)"\x03\x82\x7c\x38",
/* 0x2a * */ (uint8_t *)"\x05\x6c\x38\xfe\x38\x6c",
/* 0x2b + */ (uint8_t *)"\x05\x10\x10\x7c\x10\x10",
/* 0x2c , */ (uint8_t *)"\x02\x03\x06",
/* 0x2d - */ (uint8_t *)"\x04\x10\x10\x10\x10",
/* 0x2e . */ (uint8_t *)"\x02\x06\x06",
/* 0x2f / */ (uint8_t *)"\x03\x0e\x38\xe0",
/* 0x30 0 */ (uint8_t *)"\x05\x7c\xfe\x82\xfe\x7c",
/* 0x31 1 */ (uint8_t *)"\x03\x40\xfe\xfe",
/* 0x32 2 */ (uint8_t *)"\x05\x8e\x9e\x92\xf2\x62",
/* 0x33 3 */ (uint8_t *)"\x05\x82\x92\x92\xfe\x6c",
/* 0x34 4 */ (uint8_t *)"\x05\x18\x28\x48\xfe\xfe",
/* 0x35 5 */ (uint8_t *)"\x05\xe2\xa2\xa2\xbe\x1c",
/* 0x36 6 */ (uint8_t *)"\x05\x7c\xfe\xa2\xbe\x1c",
/* 0x37 7 */ (uint8_t *)"\x05\x80\x8e\xbe\xf0\xc0",
/* 0x38 8 */ (uint8_t *)"\x05\x6c\xfe\x92\xfe\x6c",
/* 0x39 9 */ (uint8_t *)"\x05\x70\xfa\x8a\xfe\x7c",
/* 0x3a : */ (uint8_t *)"\x02\x36\x36",
/* 0x3b ; */ (uint8_t *)"\x02\x33\x36",
/* 0x3c < */ (uint8_t *)"\x04\x10\x38\x6c\xc6",
/* 0x3d = */ (uint8_t *)"\x04\x28\x28\x28\x28",
/* 0x3e > */ (uint8_t *)"\x04\xc6\x6c\x38\x10",
/* 0x3f ? */ (uint8_t *)"\x05\x80\x9a\xba\xe0\x40",
/* 0x40 @ */ (uint8_t *)"\x06\x7c\xfe\xaa\xba\xfa\x78",
/* 0x41 A */ (uint8_t *)"\x05\x7e\xfe\x88\xfe\x7e",
/* 0x42 B */ (uint8_t *)"\x05\xfe\xfe\xa2\xfe\x5c",
/* 0x43 C */ (uint8_t *)"\x05\x7c\xfe\x82\x82\x82",
/* 0x44 D */ (uint8_t *)"\x05\xfe\xfe\x82\xfe\x7c",
/* 0x45 E */ (uint8_t *)"\x05\xfe\xfe\xa2\xa2\x82",
/* 0x46 F */ (uint8_t *)"\x05\xfe\xfe\xa0\xa0\x80",
/* 0x47 G */ (uint8_t *)"\x05\x7c\xfe\x82\x9e\x1e",
/* 0x48 H */ (uint8_t *)"\x05\xfe\xfe\x20\xfe\xfe",
/* 0x49 I */ (uint8_t *)"\x02\xfe\xfe",
/* 0x4a J */ (uint8_t *)"\x04\x02\x02\xfe\xfc",
/* 0x4b K */ (uint8_t *)"\x06\xfe\xfe\x38\x6c\xc6\x82",
/* 0x4c L */ (uint8_t *)"\x04\xfe\xfe\x02\x02",
/* 0x4d M */ (uint8_t *)"\x07\xfe\x7e\x30\x18\x30\x7e\xfe",
/* 0x4e N */ (uint8_t *)"\x06\xfe\x7e\x30\x18\xfc\xfe",
/* 0x4f O */ (uint8_t *)"\x06\x7c\xfe\x82\x82\xfe\x7c",
/* 0x50 P */ (uint8_t *)"\x05\xfe\xfe\x88\xf8\x70",
/* 0x51 Q */ (uint8_t *)"\x06\x7c\xfe\x82\x86\xff\x7d",
/* 0x52 R */ (uint8_t *)"\x05\xfe\xfe\x88\xfe\x72",
/* 0x53 S */ (uint8_t *)"\x04\x62\xf2\x9e\x8c",
/* 0x54 T */ (uint8_t *)"\x06\x80\x80\xfe\xfe\x80\x80",
/* 0x55 U */ (uint8_t *)"\x05\xfc\xfe\x02\xfe\xfc",
/* 0x56 V */ (uint8_t *)"\x06\xe0\xf8\x1e\x1e\xf8\xe0",
/* 0x57 W */ (uint8_t *)"\x07\xf0\xfe\x1e\x3c\x1e\xfe\xf0",
/* 0x58 X */ (uint8_t *)"\x06\xc6\xee\x38\x38\xee\xc6",
/* 0x59 Y */ (uint8_t *)"\x06\xc0\xe0\x3e\x3e\xe0\xc0",
/* 0x5a Z */ (uint8_t *)"\x05\x8e\x9e\xba\xf2\xe2",
/* 0x5b [ */ (uint8_t *)"\x03\xfe\xfe\x82",
/* 0x5c \ */ (uint8_t *)"\x03\xe0\x38\x0e",
/* 0x5d ] */ (uint8_t *)"\x03\x82\xfe\xfe",
/* 0x5e ^ */ (uint8_t *)"\x03\x60\xc0\x60",
/* 0x5f _ */ (uint8_t *)"\x06\x02\x02\x02\x02\x02\x02",
/* 0x60 ` */ (uint8_t *)"\x02\x80\x40",
/* 0x61 a */ (uint8_t *)"\x05\x04\x2e\x2a\x3e\x1e",
/* 0x62 b */ (uint8_t *)"\x05\xfe\xfe\x22\x3e\x1c",
/* 0x63 c */ (uint8_t *)"\x05\x1c\x3e\x22\x36\x14",
/* 0x64 d */ (uint8_t *)"\x05\x1c\x3e\x22\xfe\xfe",
/* 0x65 e */ (uint8_t *)"\x05\x1c\x3e\x2a\x3a\x1a",
/* 0x66 f */ (uint8_t *)"\x03\x7e\xfe\xa0",
/* 0x67 g */ (uint8_t *)"\x05\x18\x3d\x25\x3f\x3e",
/* 0x68 h */ (uint8_t *)"\x05\xfe\xfe\x20\x3e\x1e",
/* 0x69 i */ (uint8_t *)"\x02\xbe\xbe",
/* 0x6a j */ (uint8_t *)"\x03\x01\xbf\xbe",
/* 0x6b k */ (uint8_t *)"\x05\xfe\xfe\x1c\x36\x22",
/* 0x6c l */ (uint8_t *)"\x02\xfe\xfe",
/* 0x6d m */ (uint8_t *)"\x08\x3e\x3e\x20\x3e\x3e\x20\x3e\x1e",
/* 0x6e n */ (uint8_t *)"\x05\x3e\x3e\x20\x3e\x1e",
/* 0x6f o */ (uint8_t *)"\x05\x1c\x3e\x22\x3e\x1c",
/* 0x70 p */ (uint8_t *)"\x05\x3f\x3f\x24\x3c\x18",
/* 0x71 q */ (uint8_t *)"\x05\x18\x3c\x24\x3f\x3f",
/* 0x72 r */ (uint8_t *)"\x04\x3e\x3e\x10\x30",
/* 0x73 s */ (uint8_t *)"\x04\x1a\x3a\x2e\x2c",
/* 0x74 t */ (uint8_t *)"\x03\xfc\xfe\x22",
/* 0x75 u */ (uint8_t *)"\x05\x3c\x3e\x02\x3e\x3e",
/* 0x76 v */ (uint8_t *)"\x05\x30\x3c\x0e\x3c\x30",
/* 0x77 w */ (uint8_t *)"\x07\x38\x3e\x06\x1c\x06\x3e\x38",
/* 0x78 x */ (uint8_t *)"\x05\x36\x3e\x08\x3e\x36",
/* 0x79 y */ (uint8_t *)"\x05\x38\x3d\x05\x3f\x3e",
/* 0x7a z */ (uint8_t *)"\x05\x26\x2e\x3a\x32\x22",
/* 0x7b { */ (uint8_t *)"\x04\x10\x7c\xee\x82",
/* 0x7c | */ (uint8_t *)"\x02\xff\xff",
/* 0x7d } */ (uint8_t *)"\x04\x82\xee\x7c\x10",
/* 0x7e ~ */ (uint8_t *)"\x04\x08\x10\x08\x10",
/* 0x7f _ */ (uint8_t *)"\x01\x00",

128
gen/fontfixed.inc Normal file
View File

@ -0,0 +1,128 @@
/* 0x00 _ */ (uint8_t *)"\x01\x00",
/* 0x01 _ */ (uint8_t *)"\x01\x00",
/* 0x02 _ */ (uint8_t *)"\x01\x00",
/* 0x03 _ */ (uint8_t *)"\x01\x00",
/* 0x04 _ */ (uint8_t *)"\x01\x00",
/* 0x05 _ */ (uint8_t *)"\x01\x00",
/* 0x06 _ */ (uint8_t *)"\x07\x18\x1c\x0e\x18\x30\x40\x80",
/* 0x07 _ */ (uint8_t *)"\x01\x00",
/* 0x08 _ */ (uint8_t *)"\x01\x00",
/* 0x09 _ */ (uint8_t *)"\x01\x00",
/* 0x0a _ */ (uint8_t *)"\x01\x00",
/* 0x0b _ */ (uint8_t *)"\x01\x00",
/* 0x0c _ */ (uint8_t *)"\x01\x00",
/* 0x0d _ */ (uint8_t *)"\x01\x00",
/* 0x0e _ */ (uint8_t *)"\x01\x00",
/* 0x0f _ */ (uint8_t *)"\x01\x00",
/* 0x10 _ */ (uint8_t *)"\x01\x00",
/* 0x11 _ */ (uint8_t *)"\x01\x00",
/* 0x12 _ */ (uint8_t *)"\x01\x00",
/* 0x13 _ */ (uint8_t *)"\x01\x00",
/* 0x14 _ */ (uint8_t *)"\x01\x00",
/* 0x15 _ */ (uint8_t *)"\x07\x44\xee\x7c\x38\x7c\xee\x44",
/* 0x16 _ */ (uint8_t *)"\x01\x00",
/* 0x17 _ */ (uint8_t *)"\x01\x00",
/* 0x18 _ */ (uint8_t *)"\x01\x00",
/* 0x19 _ */ (uint8_t *)"\x01\x00",
/* 0x1a _ */ (uint8_t *)"\x01\x00",
/* 0x1b _ */ (uint8_t *)"\x01\x00",
/* 0x1c _ */ (uint8_t *)"\x01\x00",
/* 0x1d _ */ (uint8_t *)"\x01\x00",
/* 0x1e _ */ (uint8_t *)"\x01\x00",
/* 0x1f _ */ (uint8_t *)"\x01\x00",
/* 0x20 */ (uint8_t *)"\x01\x00",
/* 0x21 ! */ (uint8_t *)"\x03\x60\xfa\x60",
/* 0x22 " */ (uint8_t *)"\x05\x00\xe0\x00\xe0\x00",
/* 0x23 # */ (uint8_t *)"\x05\x6c\xfe\x6c\xfe\x6c",
/* 0x24 $ */ (uint8_t *)"\x05\x32\xff\x5a\xff\x4c",
/* 0x25 % */ (uint8_t *)"\x05\xc2\xcc\x10\x66\x86",
/* 0x26 & */ (uint8_t *)"\x05\x5c\xa2\xb2\x4c\x1a",
/* 0x27 ' */ (uint8_t *)"\x05\x00\x00\xe0\x00\x00",
/* 0x28 ( */ (uint8_t *)"\x03\x38\x44\x82",
/* 0x29 ) */ (uint8_t *)"\x03\x82\x44\x38",
/* 0x2a * */ (uint8_t *)"\x05\x44\x28\xfe\x28\x44",
/* 0x2b + */ (uint8_t *)"\x05\x10\x10\x7c\x10\x10",
/* 0x2c , */ (uint8_t *)"\x03\x01\x06\x00",
/* 0x2d - */ (uint8_t *)"\x04\x10\x10\x10\x10",
/* 0x2e . */ (uint8_t *)"\x03\x00\x02\x00",
/* 0x2f / */ (uint8_t *)"\x03\x06\x38\xc0",
/* 0x30 0 */ (uint8_t *)"\x05\x7c\x82\x92\x82\x7c",
/* 0x31 1 */ (uint8_t *)"\x05\x00\x42\xfe\x02\x00",
/* 0x32 2 */ (uint8_t *)"\x05\x42\x86\x8a\x92\x62",
/* 0x33 3 */ (uint8_t *)"\x05\x44\x82\x92\x92\x6c",
/* 0x34 4 */ (uint8_t *)"\x05\x18\x28\x48\x88\xfe",
/* 0x35 5 */ (uint8_t *)"\x05\xf4\x92\x92\x92\x8c",
/* 0x36 6 */ (uint8_t *)"\x05\x7c\x92\x92\x92\x4c",
/* 0x37 7 */ (uint8_t *)"\x05\x80\x80\x8e\xb0\xc0",
/* 0x38 8 */ (uint8_t *)"\x05\x6c\x92\x92\x92\x6c",
/* 0x39 9 */ (uint8_t *)"\x05\x64\x92\x92\x92\x7c",
/* 0x3a : */ (uint8_t *)"\x03\x00\x24\x00",
/* 0x3b ; */ (uint8_t *)"\x03\x01\x26\x00",
/* 0x3c < */ (uint8_t *)"\x04\x10\x28\x44\x82",
/* 0x3d = */ (uint8_t *)"\x04\x28\x28\x28\x28",
/* 0x3e > */ (uint8_t *)"\x04\x82\x44\x28\x10",
/* 0x3f ? */ (uint8_t *)"\x05\x40\x80\x9a\xa0\x40",
/* 0x40 @ */ (uint8_t *)"\x05\x7c\x82\x9a\xaa\x72",
/* 0x41 A */ (uint8_t *)"\x05\x7e\x90\x90\x90\x7e",
/* 0x42 B */ (uint8_t *)"\x05\xfe\x92\x92\x92\x6c",
/* 0x43 C */ (uint8_t *)"\x05\x7c\x82\x82\x82\x44",
/* 0x44 D */ (uint8_t *)"\x05\xfe\x82\x82\x82\x7c",
/* 0x45 E */ (uint8_t *)"\x05\xfe\x92\x92\x92\x82",
/* 0x46 F */ (uint8_t *)"\x05\xfe\x90\x90\x90\x80",
/* 0x47 G */ (uint8_t *)"\x05\x7c\x82\x82\x92\x5c",
/* 0x48 H */ (uint8_t *)"\x05\xfe\x10\x10\x10\xfe",
/* 0x49 I */ (uint8_t *)"\x03\x82\xfe\x82",
/* 0x4a J */ (uint8_t *)"\x05\x04\x02\x02\x82\xfc",
/* 0x4b K */ (uint8_t *)"\x05\xfe\x10\x28\x44\x82",
/* 0x4c L */ (uint8_t *)"\x05\xfe\x02\x02\x02\x02",
/* 0x4d M */ (uint8_t *)"\x05\xfe\x40\x30\x40\xfe",
/* 0x4e N */ (uint8_t *)"\x05\xfe\x40\x38\x04\xfe",
/* 0x4f O */ (uint8_t *)"\x05\x7c\x82\x82\x82\x7c",
/* 0x50 P */ (uint8_t *)"\x05\xfe\x90\x90\x90\x60",
/* 0x51 Q */ (uint8_t *)"\x05\x7c\x82\x8a\x84\x7a",
/* 0x52 R */ (uint8_t *)"\x05\xfe\x90\x98\x94\x62",
/* 0x53 S */ (uint8_t *)"\x05\x64\x92\x92\x92\x4c",
/* 0x54 T */ (uint8_t *)"\x05\x80\x80\xfe\x80\x80",
/* 0x55 U */ (uint8_t *)"\x05\xfc\x02\x02\x02\xfc",
/* 0x56 V */ (uint8_t *)"\x05\xe0\x18\x06\x18\xe0",
/* 0x57 W */ (uint8_t *)"\x05\xfc\x02\x1c\x02\xfc",
/* 0x58 X */ (uint8_t *)"\x05\xc6\x28\x10\x28\xc6",
/* 0x59 Y */ (uint8_t *)"\x05\xc0\x20\x1e\x20\xc0",
/* 0x5a Z */ (uint8_t *)"\x05\x86\x8a\x92\xa2\xc2",
/* 0x5b [ */ (uint8_t *)"\x03\xfe\x82\x82",
/* 0x5c \ */ (uint8_t *)"\x03\xe0\x38\x0e",
/* 0x5d ] */ (uint8_t *)"\x03\x82\x82\xfe",
/* 0x5e ^ */ (uint8_t *)"\x03\x60\xc0\x60",
/* 0x5f _ */ (uint8_t *)"\x05\x02\x02\x02\x02\x02",
/* 0x60 ` */ (uint8_t *)"\x05\x00\x80\x40\x20\x00",
/* 0x61 a */ (uint8_t *)"\x05\x04\x2a\x2a\x2a\x1e",
/* 0x62 b */ (uint8_t *)"\x05\xfe\x22\x22\x22\x1c",
/* 0x63 c */ (uint8_t *)"\x05\x1c\x22\x22\x22\x14",
/* 0x64 d */ (uint8_t *)"\x05\x1c\x22\x22\x22\xfe",
/* 0x65 e */ (uint8_t *)"\x05\x1c\x2a\x2a\x2a\x1a",
/* 0x66 f */ (uint8_t *)"\x05\x00\x10\x7e\x90\x40",
/* 0x67 g */ (uint8_t *)"\x05\x18\x25\x25\x25\x3e",
/* 0x68 h */ (uint8_t *)"\x05\xfe\x20\x20\x20\x1e",
/* 0x69 i */ (uint8_t *)"\x05\x00\x22\xbe\x02\x00",
/* 0x6a j */ (uint8_t *)"\x05\x02\x21\xbe\x00\x00",
/* 0x6b k */ (uint8_t *)"\x05\xfe\x08\x14\x22\x00",
/* 0x6c l */ (uint8_t *)"\x05\x00\x82\xfe\x02\x00",
/* 0x6d m */ (uint8_t *)"\x05\x3e\x20\x1e\x20\x1e",
/* 0x6e n */ (uint8_t *)"\x05\x3e\x20\x20\x20\x1e",
/* 0x6f o */ (uint8_t *)"\x05\x1c\x22\x22\x22\x1c",
/* 0x70 p */ (uint8_t *)"\x05\x3f\x24\x24\x24\x18",
/* 0x71 q */ (uint8_t *)"\x05\x18\x24\x24\x24\x3f",
/* 0x72 r */ (uint8_t *)"\x05\x3e\x10\x20\x20\x10",
/* 0x73 s */ (uint8_t *)"\x05\x12\x2a\x2a\x2a\x24",
/* 0x74 t */ (uint8_t *)"\x05\x00\x20\xfc\x22\x02",
/* 0x75 u */ (uint8_t *)"\x05\x3c\x02\x02\x02\x3e",
/* 0x76 v */ (uint8_t *)"\x05\x30\x0c\x02\x0c\x30",
/* 0x77 w */ (uint8_t *)"\x05\x3c\x02\x0c\x02\x3c",
/* 0x78 x */ (uint8_t *)"\x05\x22\x36\x08\x36\x22",
/* 0x79 y */ (uint8_t *)"\x05\x38\x05\x05\x05\x3e",
/* 0x7a z */ (uint8_t *)"\x05\x22\x26\x2a\x32\x22",
/* 0x7b { */ (uint8_t *)"\x04\x10\x7c\xee\x82",
/* 0x7c | */ (uint8_t *)"\x03\x00\xfe\x00",
/* 0x7d } */ (uint8_t *)"\x04\x82\xee\x7c\x10",
/* 0x7e ~ */ (uint8_t *)"\x05\x18\x20\x10\x08\x30",
/* 0x7f _ */ (uint8_t *)"\x01\x00",

View File

@ -1,268 +1,18 @@
#include "fonts.h"
const uint8_t * const font_data[256] = {
/* 0x00 _ */ (uint8_t *)"\x01\x00",
/* 0x01 _ */ (uint8_t *)"\x01\x00",
/* 0x02 _ */ (uint8_t *)"\x01\x00",
/* 0x03 _ */ (uint8_t *)"\x01\x00",
/* 0x04 _ */ (uint8_t *)"\x01\x00",
/* 0x05 _ */ (uint8_t *)"\x01\x00",
/* 0x06 _ */ (uint8_t *)"\x07\x18\x1c\x0e\x18\x30\x40\x80",
/* 0x07 _ */ (uint8_t *)"\x01\x00",
/* 0x08 _ */ (uint8_t *)"\x01\x00",
/* 0x09 _ */ (uint8_t *)"\x01\x00",
/* 0x0a _ */ (uint8_t *)"\x01\x00",
/* 0x0b _ */ (uint8_t *)"\x01\x00",
/* 0x0c _ */ (uint8_t *)"\x01\x00",
/* 0x0d _ */ (uint8_t *)"\x01\x00",
/* 0x0e _ */ (uint8_t *)"\x01\x00",
/* 0x0f _ */ (uint8_t *)"\x01\x00",
/* 0x10 _ */ (uint8_t *)"\x01\x00",
/* 0x11 _ */ (uint8_t *)"\x01\x00",
/* 0x12 _ */ (uint8_t *)"\x01\x00",
/* 0x13 _ */ (uint8_t *)"\x01\x00",
/* 0x14 _ */ (uint8_t *)"\x01\x00",
/* 0x15 _ */ (uint8_t *)"\x07\x44\xee\x7c\x38\x7c\xee\x44",
/* 0x16 _ */ (uint8_t *)"\x01\x00",
/* 0x17 _ */ (uint8_t *)"\x01\x00",
/* 0x18 _ */ (uint8_t *)"\x01\x00",
/* 0x19 _ */ (uint8_t *)"\x01\x00",
/* 0x1a _ */ (uint8_t *)"\x01\x00",
/* 0x1b _ */ (uint8_t *)"\x01\x00",
/* 0x1c _ */ (uint8_t *)"\x01\x00",
/* 0x1d _ */ (uint8_t *)"\x01\x00",
/* 0x1e _ */ (uint8_t *)"\x01\x00",
/* 0x1f _ */ (uint8_t *)"\x01\x00",
/* 0x20 */ (uint8_t *)"\x01\x00",
/* 0x21 ! */ (uint8_t *)"\x02\xfa\xfa",
/* 0x22 " */ (uint8_t *)"\x03\xc0\x00\xc0",
/* 0x23 # */ (uint8_t *)"\x05\x6c\xfe\x6c\xfe\x6c",
/* 0x24 $ */ (uint8_t *)"\x05\x32\xff\x5a\xff\x4c",
/* 0x25 % */ (uint8_t *)"\x06\xc0\xc6\x1c\x70\xc6\x06",
/* 0x26 & */ (uint8_t *)"\x06\x5c\xfe\xb2\xfe\x4c\x1e",
/* 0x27 ' */ (uint8_t *)"\x01\xc0",
/* 0x28 ( */ (uint8_t *)"\x03\x38\x7c\x82",
/* 0x29 ) */ (uint8_t *)"\x03\x82\x7c\x38",
/* 0x2a * */ (uint8_t *)"\x05\x6c\x38\xfe\x38\x6c",
/* 0x2b + */ (uint8_t *)"\x05\x10\x10\x7c\x10\x10",
/* 0x2c , */ (uint8_t *)"\x02\x03\x06",
/* 0x2d - */ (uint8_t *)"\x04\x10\x10\x10\x10",
/* 0x2e . */ (uint8_t *)"\x02\x06\x06",
/* 0x2f / */ (uint8_t *)"\x03\x0e\x38\xe0",
/* 0x30 0 */ (uint8_t *)"\x05\x7c\xfe\x82\xfe\x7c",
/* 0x31 1 */ (uint8_t *)"\x03\x40\xfe\xfe",
/* 0x32 2 */ (uint8_t *)"\x05\x8e\x9e\x92\xf2\x62",
/* 0x33 3 */ (uint8_t *)"\x05\x82\x92\x92\xfe\x6c",
/* 0x34 4 */ (uint8_t *)"\x05\x18\x28\x48\xfe\xfe",
/* 0x35 5 */ (uint8_t *)"\x05\xe2\xa2\xa2\xbe\x1c",
/* 0x36 6 */ (uint8_t *)"\x05\x7c\xfe\xa2\xbe\x1c",
/* 0x37 7 */ (uint8_t *)"\x05\x80\x8e\xbe\xf0\xc0",
/* 0x38 8 */ (uint8_t *)"\x05\x6c\xfe\x92\xfe\x6c",
/* 0x39 9 */ (uint8_t *)"\x05\x70\xfa\x8a\xfe\x7c",
/* 0x3a : */ (uint8_t *)"\x02\x36\x36",
/* 0x3b ; */ (uint8_t *)"\x02\x33\x36",
/* 0x3c < */ (uint8_t *)"\x04\x10\x38\x6c\xc6",
/* 0x3d = */ (uint8_t *)"\x04\x28\x28\x28\x28",
/* 0x3e > */ (uint8_t *)"\x04\xc6\x6c\x38\x10",
/* 0x3f ? */ (uint8_t *)"\x05\x80\x9a\xba\xe0\x40",
/* 0x40 @ */ (uint8_t *)"\x06\x7c\xfe\xaa\xba\xfa\x78",
/* 0x41 A */ (uint8_t *)"\x05\x7e\xfe\x88\xfe\x7e",
/* 0x42 B */ (uint8_t *)"\x05\xfe\xfe\xa2\xfe\x5c",
/* 0x43 C */ (uint8_t *)"\x05\x7c\xfe\x82\x82\x82",
/* 0x44 D */ (uint8_t *)"\x05\xfe\xfe\x82\xfe\x7c",
/* 0x45 E */ (uint8_t *)"\x05\xfe\xfe\xa2\xa2\x82",
/* 0x46 F */ (uint8_t *)"\x05\xfe\xfe\xa0\xa0\x80",
/* 0x47 G */ (uint8_t *)"\x05\x7c\xfe\x82\x9e\x1e",
/* 0x48 H */ (uint8_t *)"\x05\xfe\xfe\x20\xfe\xfe",
/* 0x49 I */ (uint8_t *)"\x02\xfe\xfe",
/* 0x4a J */ (uint8_t *)"\x04\x02\x02\xfe\xfc",
/* 0x4b K */ (uint8_t *)"\x06\xfe\xfe\x38\x6c\xc6\x82",
/* 0x4c L */ (uint8_t *)"\x04\xfe\xfe\x02\x02",
/* 0x4d M */ (uint8_t *)"\x07\xfe\x7e\x30\x18\x30\x7e\xfe",
/* 0x4e N */ (uint8_t *)"\x06\xfe\x7e\x30\x18\xfc\xfe",
/* 0x4f O */ (uint8_t *)"\x06\x7c\xfe\x82\x82\xfe\x7c",
/* 0x50 P */ (uint8_t *)"\x05\xfe\xfe\x88\xf8\x70",
/* 0x51 Q */ (uint8_t *)"\x06\x7c\xfe\x82\x86\xff\x7d",
/* 0x52 R */ (uint8_t *)"\x05\xfe\xfe\x88\xfe\x72",
/* 0x53 S */ (uint8_t *)"\x04\x62\xf2\x9e\x8c",
/* 0x54 T */ (uint8_t *)"\x06\x80\x80\xfe\xfe\x80\x80",
/* 0x55 U */ (uint8_t *)"\x05\xfc\xfe\x02\xfe\xfc",
/* 0x56 V */ (uint8_t *)"\x06\xe0\xf8\x1e\x1e\xf8\xe0",
/* 0x57 W */ (uint8_t *)"\x07\xf0\xfe\x1e\x3c\x1e\xfe\xf0",
/* 0x58 X */ (uint8_t *)"\x06\xc6\xee\x38\x38\xee\xc6",
/* 0x59 Y */ (uint8_t *)"\x06\xc0\xe0\x3e\x3e\xe0\xc0",
/* 0x5a Z */ (uint8_t *)"\x05\x8e\x9e\xba\xf2\xe2",
/* 0x5b [ */ (uint8_t *)"\x03\xfe\xfe\x82",
/* 0x5c \ */ (uint8_t *)"\x03\xe0\x38\x0e",
/* 0x5d ] */ (uint8_t *)"\x03\x82\xfe\xfe",
/* 0x5e ^ */ (uint8_t *)"\x03\x60\xc0\x60",
/* 0x5f _ */ (uint8_t *)"\x06\x02\x02\x02\x02\x02\x02",
/* 0x60 ` */ (uint8_t *)"\x02\x80\x40",
/* 0x61 a */ (uint8_t *)"\x05\x04\x2e\x2a\x3e\x1e",
/* 0x62 b */ (uint8_t *)"\x05\xfe\xfe\x22\x3e\x1c",
/* 0x63 c */ (uint8_t *)"\x05\x1c\x3e\x22\x36\x14",
/* 0x64 d */ (uint8_t *)"\x05\x1c\x3e\x22\xfe\xfe",
/* 0x65 e */ (uint8_t *)"\x05\x1c\x3e\x2a\x3a\x1a",
/* 0x66 f */ (uint8_t *)"\x03\x7e\xfe\xa0",
/* 0x67 g */ (uint8_t *)"\x05\x18\x3d\x25\x3f\x3e",
/* 0x68 h */ (uint8_t *)"\x05\xfe\xfe\x20\x3e\x1e",
/* 0x69 i */ (uint8_t *)"\x02\xbe\xbe",
/* 0x6a j */ (uint8_t *)"\x03\x01\xbf\xbe",
/* 0x6b k */ (uint8_t *)"\x05\xfe\xfe\x1c\x36\x22",
/* 0x6c l */ (uint8_t *)"\x02\xfe\xfe",
/* 0x6d m */ (uint8_t *)"\x08\x3e\x3e\x20\x3e\x3e\x20\x3e\x1e",
/* 0x6e n */ (uint8_t *)"\x05\x3e\x3e\x20\x3e\x1e",
/* 0x6f o */ (uint8_t *)"\x05\x1c\x3e\x22\x3e\x1c",
/* 0x70 p */ (uint8_t *)"\x05\x3f\x3f\x24\x3c\x18",
/* 0x71 q */ (uint8_t *)"\x05\x18\x3c\x24\x3f\x3f",
/* 0x72 r */ (uint8_t *)"\x04\x3e\x3e\x10\x30",
/* 0x73 s */ (uint8_t *)"\x04\x1a\x3a\x2e\x2c",
/* 0x74 t */ (uint8_t *)"\x03\xfc\xfe\x22",
/* 0x75 u */ (uint8_t *)"\x05\x3c\x3e\x02\x3e\x3e",
/* 0x76 v */ (uint8_t *)"\x05\x30\x3c\x0e\x3c\x30",
/* 0x77 w */ (uint8_t *)"\x07\x38\x3e\x06\x1c\x06\x3e\x38",
/* 0x78 x */ (uint8_t *)"\x05\x36\x3e\x08\x3e\x36",
/* 0x79 y */ (uint8_t *)"\x05\x38\x3d\x05\x3f\x3e",
/* 0x7a z */ (uint8_t *)"\x05\x26\x2e\x3a\x32\x22",
/* 0x7b { */ (uint8_t *)"\x04\x10\x7c\xee\x82",
/* 0x7c | */ (uint8_t *)"\x02\xff\xff",
/* 0x7d } */ (uint8_t *)"\x04\x82\xee\x7c\x10",
/* 0x7e ~ */ (uint8_t *)"\x04\x08\x10\x08\x10",
/* 0x7f _ */ (uint8_t *)"\x01\x00",
/* 0x80 _ */ (uint8_t *)"\x01\x00",
/* 0x81 _ */ (uint8_t *)"\x01\x00",
/* 0x82 _ */ (uint8_t *)"\x01\x00",
/* 0x83 _ */ (uint8_t *)"\x01\x00",
/* 0x84 _ */ (uint8_t *)"\x01\x00",
/* 0x85 _ */ (uint8_t *)"\x01\x00",
/* 0x86 _ */ (uint8_t *)"\x01\x00",
/* 0x87 _ */ (uint8_t *)"\x01\x00",
/* 0x88 _ */ (uint8_t *)"\x01\x00",
/* 0x89 _ */ (uint8_t *)"\x01\x00",
/* 0x8a _ */ (uint8_t *)"\x01\x00",
/* 0x8b _ */ (uint8_t *)"\x01\x00",
/* 0x8c _ */ (uint8_t *)"\x01\x00",
/* 0x8d _ */ (uint8_t *)"\x01\x00",
/* 0x8e _ */ (uint8_t *)"\x01\x00",
/* 0x8f _ */ (uint8_t *)"\x01\x00",
/* 0x90 _ */ (uint8_t *)"\x01\x00",
/* 0x91 _ */ (uint8_t *)"\x01\x00",
/* 0x92 _ */ (uint8_t *)"\x01\x00",
/* 0x93 _ */ (uint8_t *)"\x01\x00",
/* 0x94 _ */ (uint8_t *)"\x01\x00",
/* 0x95 _ */ (uint8_t *)"\x01\x00",
/* 0x96 _ */ (uint8_t *)"\x01\x00",
/* 0x97 _ */ (uint8_t *)"\x01\x00",
/* 0x98 _ */ (uint8_t *)"\x01\x00",
/* 0x99 _ */ (uint8_t *)"\x01\x00",
/* 0x9a _ */ (uint8_t *)"\x01\x00",
/* 0x9b _ */ (uint8_t *)"\x01\x00",
/* 0x9c _ */ (uint8_t *)"\x01\x00",
/* 0x9d _ */ (uint8_t *)"\x01\x00",
/* 0x9e _ */ (uint8_t *)"\x01\x00",
/* 0x9f _ */ (uint8_t *)"\x01\x00",
/* 0xa0 _ */ (uint8_t *)"\x01\x00",
/* 0xa1 _ */ (uint8_t *)"\x01\x00",
/* 0xa2 _ */ (uint8_t *)"\x01\x00",
/* 0xa3 _ */ (uint8_t *)"\x01\x00",
/* 0xa4 _ */ (uint8_t *)"\x01\x00",
/* 0xa5 _ */ (uint8_t *)"\x01\x00",
/* 0xa6 _ */ (uint8_t *)"\x01\x00",
/* 0xa7 _ */ (uint8_t *)"\x01\x00",
/* 0xa8 _ */ (uint8_t *)"\x01\x00",
/* 0xa9 _ */ (uint8_t *)"\x01\x00",
/* 0xaa _ */ (uint8_t *)"\x01\x00",
/* 0xab _ */ (uint8_t *)"\x01\x00",
/* 0xac _ */ (uint8_t *)"\x01\x00",
/* 0xad _ */ (uint8_t *)"\x01\x00",
/* 0xae _ */ (uint8_t *)"\x01\x00",
/* 0xaf _ */ (uint8_t *)"\x01\x00",
/* 0xb0 _ */ (uint8_t *)"\x01\x00",
/* 0xb1 _ */ (uint8_t *)"\x01\x00",
/* 0xb2 _ */ (uint8_t *)"\x01\x00",
/* 0xb3 _ */ (uint8_t *)"\x01\x00",
/* 0xb4 _ */ (uint8_t *)"\x01\x00",
/* 0xb5 _ */ (uint8_t *)"\x01\x00",
/* 0xb6 _ */ (uint8_t *)"\x01\x00",
/* 0xb7 _ */ (uint8_t *)"\x01\x00",
/* 0xb8 _ */ (uint8_t *)"\x01\x00",
/* 0xb9 _ */ (uint8_t *)"\x01\x00",
/* 0xba _ */ (uint8_t *)"\x01\x00",
/* 0xbb _ */ (uint8_t *)"\x01\x00",
/* 0xbc _ */ (uint8_t *)"\x01\x00",
/* 0xbd _ */ (uint8_t *)"\x01\x00",
/* 0xbe _ */ (uint8_t *)"\x01\x00",
/* 0xbf _ */ (uint8_t *)"\x01\x00",
/* 0xc0 _ */ (uint8_t *)"\x01\x00",
/* 0xc1 _ */ (uint8_t *)"\x01\x00",
/* 0xc2 _ */ (uint8_t *)"\x01\x00",
/* 0xc3 _ */ (uint8_t *)"\x01\x00",
/* 0xc4 _ */ (uint8_t *)"\x01\x00",
/* 0xc5 _ */ (uint8_t *)"\x01\x00",
/* 0xc6 _ */ (uint8_t *)"\x01\x00",
/* 0xc7 _ */ (uint8_t *)"\x01\x00",
/* 0xc8 _ */ (uint8_t *)"\x01\x00",
/* 0xc9 _ */ (uint8_t *)"\x01\x00",
/* 0xca _ */ (uint8_t *)"\x01\x00",
/* 0xcb _ */ (uint8_t *)"\x01\x00",
/* 0xcc _ */ (uint8_t *)"\x01\x00",
/* 0xcd _ */ (uint8_t *)"\x01\x00",
/* 0xce _ */ (uint8_t *)"\x01\x00",
/* 0xcf _ */ (uint8_t *)"\x01\x00",
/* 0xd0 _ */ (uint8_t *)"\x01\x00",
/* 0xd1 _ */ (uint8_t *)"\x01\x00",
/* 0xd2 _ */ (uint8_t *)"\x01\x00",
/* 0xd3 _ */ (uint8_t *)"\x01\x00",
/* 0xd4 _ */ (uint8_t *)"\x01\x00",
/* 0xd5 _ */ (uint8_t *)"\x01\x00",
/* 0xd6 _ */ (uint8_t *)"\x01\x00",
/* 0xd7 _ */ (uint8_t *)"\x01\x00",
/* 0xd8 _ */ (uint8_t *)"\x01\x00",
/* 0xd9 _ */ (uint8_t *)"\x01\x00",
/* 0xda _ */ (uint8_t *)"\x01\x00",
/* 0xdb _ */ (uint8_t *)"\x01\x00",
/* 0xdc _ */ (uint8_t *)"\x01\x00",
/* 0xdd _ */ (uint8_t *)"\x01\x00",
/* 0xde _ */ (uint8_t *)"\x01\x00",
/* 0xdf _ */ (uint8_t *)"\x01\x00",
/* 0xe0 _ */ (uint8_t *)"\x01\x00",
/* 0xe1 _ */ (uint8_t *)"\x01\x00",
/* 0xe2 _ */ (uint8_t *)"\x01\x00",
/* 0xe3 _ */ (uint8_t *)"\x01\x00",
/* 0xe4 _ */ (uint8_t *)"\x01\x00",
/* 0xe5 _ */ (uint8_t *)"\x01\x00",
/* 0xe6 _ */ (uint8_t *)"\x01\x00",
/* 0xe7 _ */ (uint8_t *)"\x01\x00",
/* 0xe8 _ */ (uint8_t *)"\x01\x00",
/* 0xe9 _ */ (uint8_t *)"\x01\x00",
/* 0xea _ */ (uint8_t *)"\x01\x00",
/* 0xeb _ */ (uint8_t *)"\x01\x00",
/* 0xec _ */ (uint8_t *)"\x01\x00",
/* 0xed _ */ (uint8_t *)"\x01\x00",
/* 0xee _ */ (uint8_t *)"\x01\x00",
/* 0xef _ */ (uint8_t *)"\x01\x00",
/* 0xf0 _ */ (uint8_t *)"\x01\x00",
/* 0xf1 _ */ (uint8_t *)"\x01\x00",
/* 0xf2 _ */ (uint8_t *)"\x01\x00",
/* 0xf3 _ */ (uint8_t *)"\x01\x00",
/* 0xf4 _ */ (uint8_t *)"\x01\x00",
/* 0xf5 _ */ (uint8_t *)"\x01\x00",
/* 0xf6 _ */ (uint8_t *)"\x01\x00",
/* 0xf7 _ */ (uint8_t *)"\x01\x00",
/* 0xf8 _ */ (uint8_t *)"\x01\x00",
/* 0xf9 _ */ (uint8_t *)"\x01\x00",
/* 0xfa _ */ (uint8_t *)"\x01\x00",
/* 0xfb _ */ (uint8_t *)"\x01\x00",
/* 0xfc _ */ (uint8_t *)"\x01\x00",
/* 0xfd _ */ (uint8_t *)"\x01\x00",
/* 0xfe _ */ (uint8_t *)"\x01\x00",
/* 0xff _ */ (uint8_t *)"\x01\x00",
const uint8_t * const font_data[2][128] = {
{
#include"font.inc"
},
{
#include"fontfixed.inc"
},
};
int fontCharWidth(char c) {
return font_data[(int)(c)][0];
int fontCharWidth(int font, char c) {
return font_data[font][c & 0x7f][0];
}
const uint8_t *fontCharData(char c) {
return font_data[(int)(c)] + 1;
const uint8_t *fontCharData(int font, char c) {
return font_data[font][c & 0x7f] + 1;
}

View File

@ -4,10 +4,13 @@
#include <stdint.h>
#define FONT_HEIGHT 8
#define FONT_STANDARD 0
#define FONT_FIXED 1
#define FONT_DOUBLE 0x80
extern const uint8_t * const font_data[256];
extern const uint8_t * const font_data[2][128];
int fontCharWidth(char c);
const uint8_t *fontCharData(char c);
int fontCharWidth(int font, char c);
const uint8_t *fontCharData(int font, char c);
#endif

BIN
gen/fonts/fontfixed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -19,17 +19,22 @@ class Img(object):
return None
raise Exception('Unknown color', p)
img = Img('font.png')
cur = ''
for i in range(256):
x = (i % 16) * 10
y = (i // 16) * 10
def convert(imgfile, outfile):
img = Img(imgfile)
cur = ''
while img.pixel(x, y) != None:
val = ''.join(img.pixel(x, y + j) for j in range(8))
x += 1
cur += '\\x%02x' % int(val, 2)
cur = '\\x%02x' % (len(cur) // 4) + cur
ch = chr(i) if i >= 32 and i <= 126 else '_'
print('\t/* 0x%02x %c */ (uint8_t *)"%s",' % (i, ch , cur))
with open(outfile, 'w') as f:
for i in range(128):
x = (i % 16) * 10
y = (i // 16) * 10
cur = ''
while img.pixel(x, y) != None:
val = ''.join(img.pixel(x, y + j) for j in range(8))
x += 1
cur += '\\x%02x' % int(val, 2)
cur = '\\x%02x' % (len(cur) // 4) + cur
ch = chr(i) if i >= 32 and i <= 126 else '_'
f.write('\t/* 0x%02x %c */ (uint8_t *)"%s",\n' % (i, ch , cur))
convert('fonts/fontfixed.png', 'fontfixed.inc')
convert('fonts/font.png', 'font.inc')

View File

@ -17,6 +17,7 @@ static inline char convert(char c) {
int main(int argc, char **argv) {
char *line;
int font = FONT_STANDARD;
while ((line = readline(NULL)) != NULL) {
size_t length = strlen(line);
if (length) {
@ -25,7 +26,7 @@ int main(int argc, char **argv) {
size_t width = 0;
for (size_t i = 0; i < length; i++) {
width += fontCharWidth(convert(line[i])) + 1;
width += fontCharWidth(font, convert(line[i])) + 1;
}
printf("%zu\n", width);

View File

@ -30,31 +30,31 @@ void layoutDialog(const BITMAP *icon, const char *btnNo, const char *btnYes, con
oledDrawBitmap(0, 0, icon);
left = icon->width + 4;
}
if (line1) oledDrawString(left, 0 * 9, line1);
if (line2) oledDrawString(left, 1 * 9, line2);
if (line3) oledDrawString(left, 2 * 9, line3);
if (line4) oledDrawString(left, 3 * 9, line4);
if (line1) oledDrawString(left, 0 * 9, line1, FONT_STANDARD);
if (line2) oledDrawString(left, 1 * 9, line2, FONT_STANDARD);
if (line3) oledDrawString(left, 2 * 9, line3, FONT_STANDARD);
if (line4) oledDrawString(left, 3 * 9, line4, FONT_STANDARD);
if (desc) {
oledDrawStringCenter(OLED_HEIGHT - 2 * 9 - 1, desc);
oledDrawStringCenter(OLED_HEIGHT - 2 * 9 - 1, desc, FONT_STANDARD);
if (btnYes || btnNo) {
oledHLine(OLED_HEIGHT - 21);
}
} else {
if (line5) oledDrawString(left, 4 * 9, line5);
if (line6) oledDrawString(left, 5 * 9, line6);
if (line5) oledDrawString(left, 4 * 9, line5, FONT_STANDARD);
if (line6) oledDrawString(left, 5 * 9, line6, FONT_STANDARD);
if (btnYes || btnNo) {
oledHLine(OLED_HEIGHT - 13);
}
}
if (btnNo) {
oledDrawString(1, OLED_HEIGHT - 8, "\x15");
oledDrawString(fontCharWidth('\x15') + 3, OLED_HEIGHT - 8, btnNo);
oledInvert(0, OLED_HEIGHT - 9, fontCharWidth('\x15') + oledStringWidth(btnNo) + 2, OLED_HEIGHT - 1);
oledDrawString(1, OLED_HEIGHT - 8, "\x15", FONT_STANDARD);
oledDrawString(fontCharWidth(FONT_STANDARD, '\x15') + 3, OLED_HEIGHT - 8, btnNo, FONT_STANDARD);
oledInvert(0, OLED_HEIGHT - 9, fontCharWidth(FONT_STANDARD, '\x15') + oledStringWidth(btnNo, FONT_STANDARD) + 2, OLED_HEIGHT - 1);
}
if (btnYes) {
oledDrawString(OLED_WIDTH - fontCharWidth('\x06') - 1, OLED_HEIGHT - 8, "\x06");
oledDrawString(OLED_WIDTH - oledStringWidth(btnYes) - fontCharWidth('\x06') - 3, OLED_HEIGHT - 8, btnYes);
oledInvert(OLED_WIDTH - oledStringWidth(btnYes) - fontCharWidth('\x06') - 4, OLED_HEIGHT - 9, OLED_WIDTH - 1, OLED_HEIGHT - 1);
oledDrawString(OLED_WIDTH - fontCharWidth(FONT_STANDARD, '\x06') - 1, OLED_HEIGHT - 8, "\x06", FONT_STANDARD);
oledDrawStringRight(OLED_WIDTH - fontCharWidth(FONT_STANDARD, '\x06') - 3, OLED_HEIGHT - 8, btnYes, FONT_STANDARD);
oledInvert(OLED_WIDTH - oledStringWidth(btnYes, FONT_STANDARD) - fontCharWidth(FONT_STANDARD, '\x06') - 4, OLED_HEIGHT - 9, OLED_WIDTH - 1, OLED_HEIGHT - 1);
}
oledRefresh();
}
@ -100,7 +100,7 @@ void layoutProgress(const char *desc, int permil)
// text
oledBox(0, OLED_HEIGHT - 16, OLED_WIDTH - 1, OLED_HEIGHT - 16 + 7, 0);
if (desc) {
oledDrawStringCenter(OLED_HEIGHT - 16, desc);
oledDrawStringCenter(OLED_HEIGHT - 16, desc, FONT_STANDARD);
}
oledRefresh();
}

31
oled.c
View File

@ -236,14 +236,15 @@ void oledSetBuffer(uint8_t *buf)
memcpy(_oledbuffer, buf, sizeof(_oledbuffer));
}
void oledDrawChar(int x, int y, char c, int zoom)
void oledDrawChar(int x, int y, char c, int font)
{
if (x >= OLED_WIDTH || y >= OLED_HEIGHT || y <= -FONT_HEIGHT) {
return;
}
int char_width = fontCharWidth(c);
const uint8_t *char_data = fontCharData(c);
int zoom = (font & FONT_DOUBLE ? 2 : 1);
int char_width = fontCharWidth(font & 0x7f, c);
const uint8_t *char_data = fontCharData(font & 0x7f, c);
if (x <= -char_width * zoom) {
return;
@ -272,41 +273,43 @@ char oledConvertChar(const char c) {
return 0;
}
int oledStringWidth(const char *text) {
int oledStringWidth(const char *text, int font) {
if (!text) return 0;
int size = (font & FONT_DOUBLE ? 2 : 1);
int l = 0;
for (; *text; text++) {
char c = oledConvertChar(*text);
if (c) {
l += fontCharWidth(c) + 1;
l += size * (fontCharWidth(font & 0x7f, c) + 1);
}
}
return l;
}
void oledDrawStringSize(int x, int y, const char* text, int size)
void oledDrawString(int x, int y, const char* text, int font)
{
if (!text) return;
int l = 0;
int size = (font & FONT_DOUBLE ? 2 : 1);
for (; *text; text++) {
char c = oledConvertChar(*text);
if (c) {
oledDrawChar(x + l, y, c, size);
l += size * (fontCharWidth(c) + 1);
oledDrawChar(x + l, y, c, font);
l += size * (fontCharWidth(font & 0x7f, c) + 1);
}
}
}
void oledDrawStringCenter(int y, const char* text)
void oledDrawStringCenter(int y, const char* text, int font)
{
int x = ( OLED_WIDTH - oledStringWidth(text) ) / 2;
oledDrawString(x, y, text);
int x = ( OLED_WIDTH - oledStringWidth(text, font) ) / 2;
oledDrawString(x, y, text, font);
}
void oledDrawStringRight(int x, int y, const char* text)
void oledDrawStringRight(int x, int y, const char* text, int font)
{
x -= oledStringWidth(text);
oledDrawString(x, y, text);
x -= oledStringWidth(text, font);
oledDrawString(x, y, text, font);
}
void oledDrawBitmap(int x, int y, const BITMAP *bmp)

10
oled.h
View File

@ -43,13 +43,11 @@ void oledDrawPixel(int x, int y);
void oledClearPixel(int x, int y);
void oledInvertPixel(int x, int y);
void oledDrawChar(int x, int y, char c, int zoom);
int oledStringWidth(const char *text);
int oledStringWidth(const char *text, int font);
#define oledDrawString(x, y, text) oledDrawStringSize((x), (y), (text), 1)
#define oledDrawStringDouble(x, y, text) oledDrawStringSize((x), (y), (text), 2)
void oledDrawStringSize(int x, int y, const char* text, int size);
void oledDrawStringCenter(int y, const char* text);
void oledDrawStringRight(int x, int y, const char* text);
void oledDrawString(int x, int y, const char* text, int font);
void oledDrawStringCenter(int y, const char* text, int font);
void oledDrawStringRight(int x, int y, const char* text, int font);
void oledDrawBitmap(int x, int y, const BITMAP *bmp);
void oledInvert(int x1, int y1, int x2, int y2);
void oledBox(int x1, int y1, int x2, int y2, bool set);