💡 README_zh_CN for camera_terminal

pull/190/head
Ye Hang Yang 2021-07-16 16:21:44 +08:00
parent fdd940ffb9
commit 35ef71e585
7 changed files with 405 additions and 288 deletions

@ -1 +1 @@
Subproject commit 420fc7e219ba98e40a5493b9d4be270db2f2d724 Subproject commit 11b38828ea2b46b4ca0a30ec6711900ab9604cd1

View File

@ -1,250 +1,250 @@
const uint8_t FreeMonoBold12pt7bBitmaps[] = { const uint8_t FreeMonoBold12pt7bBitmaps[] = {
0xFF, 0xFF, 0xFF, 0xF6, 0x66, 0x60, 0x6F, 0x60, 0xE7, 0xE7, 0x62, 0x42, 0xFF, 0xFF, 0xFF, 0xF6, 0x66, 0x60, 0x6F, 0x60, 0xE7, 0xE7, 0x62, 0x42,
0x42, 0x42, 0x42, 0x11, 0x87, 0x30, 0xC6, 0x18, 0xC3, 0x31, 0xFF, 0xFF, 0x42, 0x42, 0x42, 0x11, 0x87, 0x30, 0xC6, 0x18, 0xC3, 0x31, 0xFF, 0xFF,
0xF9, 0x98, 0x33, 0x06, 0x60, 0xCC, 0x7F, 0xEF, 0xFC, 0x66, 0x0C, 0xC3, 0xF9, 0x98, 0x33, 0x06, 0x60, 0xCC, 0x7F, 0xEF, 0xFC, 0x66, 0x0C, 0xC3,
0x98, 0x63, 0x04, 0x40, 0x0C, 0x03, 0x00, 0xC0, 0xFE, 0x7F, 0x9C, 0x66, 0x98, 0x63, 0x04, 0x40, 0x0C, 0x03, 0x00, 0xC0, 0xFE, 0x7F, 0x9C, 0x66,
0x09, 0x80, 0x78, 0x0F, 0xE0, 0x7F, 0x03, 0xE0, 0xF8, 0x7F, 0xFB, 0xFC, 0x09, 0x80, 0x78, 0x0F, 0xE0, 0x7F, 0x03, 0xE0, 0xF8, 0x7F, 0xFB, 0xFC,
0x0C, 0x03, 0x00, 0xC0, 0x30, 0x38, 0x1F, 0x0C, 0x42, 0x10, 0xC4, 0x1F, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x38, 0x1F, 0x0C, 0x42, 0x10, 0xC4, 0x1F,
0x03, 0x9C, 0x3C, 0x7F, 0x33, 0xE0, 0x8C, 0x21, 0x08, 0xC3, 0xE0, 0x70, 0x03, 0x9C, 0x3C, 0x7F, 0x33, 0xE0, 0x8C, 0x21, 0x08, 0xC3, 0xE0, 0x70,
0x3E, 0x1F, 0xC6, 0x61, 0x80, 0x70, 0x0C, 0x07, 0x83, 0xEE, 0xDF, 0xB3, 0x3E, 0x1F, 0xC6, 0x61, 0x80, 0x70, 0x0C, 0x07, 0x83, 0xEE, 0xDF, 0xB3,
0xCC, 0x73, 0xFE, 0x7F, 0x80, 0xFD, 0x24, 0x90, 0x39, 0xDC, 0xE6, 0x73, 0xCC, 0x73, 0xFE, 0x7F, 0x80, 0xFD, 0x24, 0x90, 0x39, 0xDC, 0xE6, 0x73,
0x18, 0xC6, 0x31, 0x8C, 0x31, 0x8E, 0x31, 0xC4, 0xE7, 0x1C, 0xE3, 0x1C, 0x18, 0xC6, 0x31, 0x8C, 0x31, 0x8E, 0x31, 0xC4, 0xE7, 0x1C, 0xE3, 0x1C,
0x63, 0x18, 0xC6, 0x31, 0x98, 0xCE, 0x67, 0x10, 0x0C, 0x03, 0x00, 0xC3, 0x63, 0x18, 0xC6, 0x31, 0x98, 0xCE, 0x67, 0x10, 0x0C, 0x03, 0x00, 0xC3,
0xB7, 0xFF, 0xDF, 0xE1, 0xE0, 0xFC, 0x33, 0x0C, 0xC0, 0x06, 0x00, 0x60, 0xB7, 0xFF, 0xDF, 0xE1, 0xE0, 0xFC, 0x33, 0x0C, 0xC0, 0x06, 0x00, 0x60,
0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60,
0x06, 0x00, 0x60, 0x06, 0x00, 0x3B, 0x9C, 0xCE, 0x62, 0x00, 0xFF, 0xFF, 0x06, 0x00, 0x60, 0x06, 0x00, 0x3B, 0x9C, 0xCE, 0x62, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0x80, 0x00, 0x40, 0x30, 0x1C, 0x07, 0x03, 0x80, 0xE0, 0x30, 0xFF, 0xFF, 0x80, 0x00, 0x40, 0x30, 0x1C, 0x07, 0x03, 0x80, 0xE0, 0x30,
0x1C, 0x06, 0x03, 0x80, 0xC0, 0x70, 0x18, 0x0E, 0x03, 0x01, 0xC0, 0x60, 0x1C, 0x06, 0x03, 0x80, 0xC0, 0x70, 0x18, 0x0E, 0x03, 0x01, 0xC0, 0x60,
0x38, 0x0E, 0x01, 0x00, 0x1E, 0x0F, 0xC6, 0x1B, 0x87, 0xC0, 0xF0, 0x3C, 0x38, 0x0E, 0x01, 0x00, 0x1E, 0x0F, 0xC6, 0x1B, 0x87, 0xC0, 0xF0, 0x3C,
0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x87, 0x61, 0x8F, 0xC1, 0xE0, 0x1C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x87, 0x61, 0x8F, 0xC1, 0xE0, 0x1C,
0x0F, 0x0F, 0xC3, 0xB0, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0x0F, 0x0F, 0xC3, 0xB0, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
0xC0, 0x30, 0x0C, 0x3F, 0xFF, 0xFC, 0x1F, 0x1F, 0xEE, 0x1F, 0x83, 0xC0, 0xC0, 0x30, 0x0C, 0x3F, 0xFF, 0xFC, 0x1F, 0x1F, 0xEE, 0x1F, 0x83, 0xC0,
0xC0, 0x70, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE3, 0xF0, 0xFF, 0xFF, 0xC0, 0x70, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE3, 0xF0, 0xFF, 0xFF,
0xFC, 0x3F, 0x0F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x83, 0xE0, 0x7C, 0xFC, 0x3F, 0x0F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x83, 0xE0, 0x7C,
0x01, 0xC0, 0x0C, 0x01, 0x80, 0x3C, 0x0F, 0xFF, 0x9F, 0xC0, 0x07, 0x07, 0x01, 0xC0, 0x0C, 0x01, 0x80, 0x3C, 0x0F, 0xFF, 0x9F, 0xC0, 0x07, 0x07,
0x83, 0xC3, 0xE1, 0xB1, 0xD8, 0xCC, 0xC6, 0xE3, 0x7F, 0xFF, 0xE0, 0x61, 0x83, 0xC3, 0xE1, 0xB1, 0xD8, 0xCC, 0xC6, 0xE3, 0x7F, 0xFF, 0xE0, 0x61,
0xF8, 0xFC, 0x7F, 0x9F, 0xE6, 0x01, 0x80, 0x60, 0x1F, 0x87, 0xF9, 0x86, 0xF8, 0xFC, 0x7F, 0x9F, 0xE6, 0x01, 0x80, 0x60, 0x1F, 0x87, 0xF9, 0x86,
0x00, 0xC0, 0x30, 0x0C, 0x03, 0xC1, 0xBF, 0xE7, 0xE0, 0x07, 0xC7, 0xF3, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xC1, 0xBF, 0xE7, 0xE0, 0x07, 0xC7, 0xF3,
0xC1, 0xC0, 0x60, 0x38, 0x0E, 0xF3, 0xFE, 0xF1, 0xF8, 0x3E, 0x0F, 0x83, 0xC1, 0xC0, 0x60, 0x38, 0x0E, 0xF3, 0xFE, 0xF1, 0xF8, 0x3E, 0x0F, 0x83,
0x71, 0xCF, 0xE1, 0xF0, 0xFF, 0xFF, 0xFC, 0x1F, 0x07, 0x01, 0x80, 0x60, 0x71, 0xCF, 0xE1, 0xF0, 0xFF, 0xFF, 0xFC, 0x1F, 0x07, 0x01, 0x80, 0x60,
0x38, 0x0C, 0x03, 0x01, 0xC0, 0x60, 0x18, 0x0E, 0x03, 0x00, 0xC0, 0x1E, 0x38, 0x0C, 0x03, 0x01, 0xC0, 0x60, 0x18, 0x0E, 0x03, 0x00, 0xC0, 0x1E,
0x1F, 0xEE, 0x1F, 0x03, 0xC0, 0xF0, 0x36, 0x19, 0xFE, 0x7F, 0xB8, 0x7C, 0x1F, 0xEE, 0x1F, 0x03, 0xC0, 0xF0, 0x36, 0x19, 0xFE, 0x7F, 0xB8, 0x7C,
0x0F, 0x03, 0xE1, 0xDF, 0xE3, 0xF0, 0x3E, 0x1F, 0xCE, 0x3B, 0x07, 0xC1, 0x0F, 0x03, 0xE1, 0xDF, 0xE3, 0xF0, 0x3E, 0x1F, 0xCE, 0x3B, 0x07, 0xC1,
0xF0, 0x7E, 0x3D, 0xFF, 0x3D, 0xC0, 0x70, 0x18, 0x0E, 0x0F, 0x3F, 0x8F, 0xF0, 0x7E, 0x3D, 0xFF, 0x3D, 0xC0, 0x70, 0x18, 0x0E, 0x0F, 0x3F, 0x8F,
0x80, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x77, 0x70, 0x00, 0x00, 0x76, 0x6C, 0x80, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x77, 0x70, 0x00, 0x00, 0x76, 0x6C,
0xC8, 0x80, 0x00, 0x30, 0x0F, 0x03, 0xE0, 0xF8, 0x3E, 0x0F, 0x80, 0x3E, 0xC8, 0x80, 0x00, 0x30, 0x0F, 0x03, 0xE0, 0xF8, 0x3E, 0x0F, 0x80, 0x3E,
0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x0F, 0x80, 0x3E, 0x00, 0xF8,
0x03, 0xE0, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x0F, 0x00, 0x40, 0x00, 0x7C, 0x03, 0xE0, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x0F, 0x00, 0x40, 0x00, 0x7C,
0x7F, 0xB0, 0xF8, 0x30, 0x18, 0x1C, 0x3C, 0x3C, 0x18, 0x08, 0x00, 0x07, 0x7F, 0xB0, 0xF8, 0x30, 0x18, 0x1C, 0x3C, 0x3C, 0x18, 0x08, 0x00, 0x07,
0x03, 0x81, 0xC0, 0x1E, 0x07, 0xF1, 0xC7, 0x30, 0x6C, 0x0D, 0x87, 0xB3, 0x03, 0x81, 0xC0, 0x1E, 0x07, 0xF1, 0xC7, 0x30, 0x6C, 0x0D, 0x87, 0xB3,
0xF6, 0xE6, 0xD8, 0xDB, 0x1B, 0x73, 0x67, 0xFC, 0x7F, 0x80, 0x30, 0x03, 0xF6, 0xE6, 0xD8, 0xDB, 0x1B, 0x73, 0x67, 0xFC, 0x7F, 0x80, 0x30, 0x03,
0x00, 0x71, 0xC7, 0xF8, 0x7C, 0x00, 0x3F, 0x80, 0x7F, 0x80, 0x1F, 0x00, 0x00, 0x71, 0xC7, 0xF8, 0x7C, 0x00, 0x3F, 0x80, 0x7F, 0x80, 0x1F, 0x00,
0x76, 0x00, 0xEE, 0x01, 0x8C, 0x07, 0x18, 0x0E, 0x38, 0x1F, 0xF0, 0x7F, 0x76, 0x00, 0xEE, 0x01, 0x8C, 0x07, 0x18, 0x0E, 0x38, 0x1F, 0xF0, 0x7F,
0xF0, 0xC0, 0x61, 0x80, 0xCF, 0xC7, 0xFF, 0x8F, 0xC0, 0xFF, 0xC7, 0xFF, 0xF0, 0xC0, 0x61, 0x80, 0xCF, 0xC7, 0xFF, 0x8F, 0xC0, 0xFF, 0xC7, 0xFF,
0x0C, 0x1C, 0x60, 0x63, 0x03, 0x18, 0x38, 0xFF, 0x87, 0xFE, 0x30, 0x39, 0x0C, 0x1C, 0x60, 0x63, 0x03, 0x18, 0x38, 0xFF, 0x87, 0xFE, 0x30, 0x39,
0x80, 0xCC, 0x06, 0x60, 0x7F, 0xFF, 0x7F, 0xF0, 0x0F, 0xF3, 0xFF, 0x70, 0x80, 0xCC, 0x06, 0x60, 0x7F, 0xFF, 0x7F, 0xF0, 0x0F, 0xF3, 0xFF, 0x70,
0x76, 0x03, 0xC0, 0x3C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60, 0x76, 0x03, 0xC0, 0x3C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x60,
0x37, 0x07, 0x3F, 0xF0, 0xFC, 0xFF, 0x0F, 0xFC, 0x60, 0xE6, 0x06, 0x60, 0x37, 0x07, 0x3F, 0xF0, 0xFC, 0xFF, 0x0F, 0xFC, 0x60, 0xE6, 0x06, 0x60,
0x36, 0x03, 0x60, 0x36, 0x03, 0x60, 0x36, 0x03, 0x60, 0x76, 0x0E, 0xFF, 0x36, 0x03, 0x60, 0x36, 0x03, 0x60, 0x36, 0x03, 0x60, 0x76, 0x0E, 0xFF,
0xCF, 0xF8, 0xFF, 0xF7, 0xFF, 0x8C, 0x0C, 0x60, 0x63, 0x1B, 0x18, 0xC0, 0xCF, 0xF8, 0xFF, 0xF7, 0xFF, 0x8C, 0x0C, 0x60, 0x63, 0x1B, 0x18, 0xC0,
0xFE, 0x07, 0xF0, 0x31, 0x81, 0x8C, 0xCC, 0x06, 0x60, 0x3F, 0xFF, 0xFF, 0xFE, 0x07, 0xF0, 0x31, 0x81, 0x8C, 0xCC, 0x06, 0x60, 0x3F, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xCC, 0x06, 0x60, 0x33, 0x19, 0x98, 0xC0, 0xFE, 0xFC, 0xFF, 0xFF, 0xFF, 0xCC, 0x06, 0x60, 0x33, 0x19, 0x98, 0xC0, 0xFE,
0x07, 0xF0, 0x31, 0x81, 0x8C, 0x0C, 0x00, 0x60, 0x0F, 0xF0, 0x7F, 0x80, 0x07, 0xF0, 0x31, 0x81, 0x8C, 0x0C, 0x00, 0x60, 0x0F, 0xF0, 0x7F, 0x80,
0x0F, 0xF1, 0xFF, 0x9C, 0x1C, 0xC0, 0x6C, 0x03, 0x60, 0x03, 0x00, 0x18, 0x0F, 0xF1, 0xFF, 0x9C, 0x1C, 0xC0, 0x6C, 0x03, 0x60, 0x03, 0x00, 0x18,
0x7F, 0xC3, 0xFE, 0x01, 0xB8, 0x0C, 0xE0, 0xE3, 0xFF, 0x07, 0xE0, 0x7C, 0x7F, 0xC3, 0xFE, 0x01, 0xB8, 0x0C, 0xE0, 0xE3, 0xFF, 0x07, 0xE0, 0x7C,
0xF9, 0xF3, 0xE3, 0x03, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0xFF, 0x0F, 0xF9, 0xF3, 0xE3, 0x03, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0xFF, 0x0F,
0xFC, 0x30, 0x30, 0xC0, 0xC3, 0x03, 0x0C, 0x0C, 0xFC, 0xFF, 0xF3, 0xF0, 0xFC, 0x30, 0x30, 0xC0, 0xC3, 0x03, 0x0C, 0x0C, 0xFC, 0xFF, 0xF3, 0xF0,
0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03,
0x00, 0xC0, 0x30, 0xFF, 0xFF, 0xF0, 0x0F, 0xF8, 0x7F, 0xC0, 0x30, 0x01, 0x00, 0xC0, 0x30, 0xFF, 0xFF, 0xF0, 0x0F, 0xF8, 0x7F, 0xC0, 0x30, 0x01,
0x80, 0x0C, 0x00, 0x60, 0x03, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, 0x31, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, 0x31,
0xC3, 0x0F, 0xF8, 0x1F, 0x00, 0xFC, 0xFB, 0xF3, 0xE3, 0x0E, 0x0C, 0x70, 0xC3, 0x0F, 0xF8, 0x1F, 0x00, 0xFC, 0xFB, 0xF3, 0xE3, 0x0E, 0x0C, 0x70,
0x33, 0x80, 0xFC, 0x03, 0xF0, 0x0F, 0xE0, 0x39, 0xC0, 0xC3, 0x03, 0x0E, 0x33, 0x80, 0xFC, 0x03, 0xF0, 0x0F, 0xE0, 0x39, 0xC0, 0xC3, 0x03, 0x0E,
0x0C, 0x18, 0xFC, 0x7F, 0xF0, 0xF0, 0xFF, 0x0F, 0xF0, 0x18, 0x01, 0x80, 0x0C, 0x18, 0xFC, 0x7F, 0xF0, 0xF0, 0xFF, 0x0F, 0xF0, 0x18, 0x01, 0x80,
0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x31, 0x83, 0x18, 0x31, 0x83, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x31, 0x83, 0x18, 0x31, 0x83,
0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xC0, 0xF7, 0x87, 0x9E, 0x1E, 0x7C, 0xF9, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xC0, 0xF7, 0x87, 0x9E, 0x1E, 0x7C, 0xF9,
0xB3, 0xE6, 0xFD, 0x99, 0xF6, 0x67, 0x99, 0x8E, 0x66, 0x31, 0x98, 0x06, 0xB3, 0xE6, 0xFD, 0x99, 0xF6, 0x67, 0x99, 0x8E, 0x66, 0x31, 0x98, 0x06,
0xFC, 0xFF, 0xF3, 0xF0, 0xF1, 0xFF, 0xCF, 0xCF, 0x0C, 0x78, 0x63, 0xE3, 0xFC, 0xFF, 0xF3, 0xF0, 0xF1, 0xFF, 0xCF, 0xCF, 0x0C, 0x78, 0x63, 0xE3,
0x1B, 0x18, 0xDC, 0xC6, 0x76, 0x31, 0xB1, 0x8F, 0x8C, 0x3C, 0x61, 0xE7, 0x1B, 0x18, 0xDC, 0xC6, 0x76, 0x31, 0xB1, 0x8F, 0x8C, 0x3C, 0x61, 0xE7,
0xE7, 0x3F, 0x18, 0x0F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xE0, 0x7C, 0x03, 0xE7, 0x3F, 0x18, 0x0F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xE0, 0x7C, 0x03,
0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, 0x60, 0x67, 0x0E, 0x3F, 0xC0, 0xF0, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, 0x60, 0x67, 0x0E, 0x3F, 0xC0, 0xF0,
0xFF, 0x8F, 0xFE, 0x30, 0x73, 0x03, 0x30, 0x33, 0x03, 0x30, 0x73, 0xFE, 0xFF, 0x8F, 0xFE, 0x30, 0x73, 0x03, 0x30, 0x33, 0x03, 0x30, 0x73, 0xFE,
0x3F, 0x83, 0x00, 0x30, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0x03, 0xFC, 0x3F, 0x83, 0x00, 0x30, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0x0F, 0x03, 0xFC,
0x70, 0xE6, 0x06, 0xE0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, 0x70, 0xE6, 0x06, 0xE0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07,
0x60, 0x67, 0x0E, 0x3F, 0xC1, 0xF0, 0x18, 0x33, 0xFF, 0x3F, 0xE0, 0xFF, 0x60, 0x67, 0x0E, 0x3F, 0xC1, 0xF0, 0x18, 0x33, 0xFF, 0x3F, 0xE0, 0xFF,
0x83, 0xFF, 0x83, 0x07, 0x0C, 0x0C, 0x30, 0x30, 0xC1, 0xC3, 0xFE, 0x0F, 0x83, 0xFF, 0x83, 0x07, 0x0C, 0x0C, 0x30, 0x30, 0xC1, 0xC3, 0xFE, 0x0F,
0xF0, 0x31, 0xE0, 0xC3, 0x83, 0x07, 0x0C, 0x0C, 0xFE, 0x3F, 0xF8, 0x70, 0xF0, 0x31, 0xE0, 0xC3, 0x83, 0x07, 0x0C, 0x0C, 0xFE, 0x3F, 0xF8, 0x70,
0x3F, 0xDF, 0xFE, 0x1F, 0x03, 0xC0, 0xF8, 0x07, 0xE0, 0x7E, 0x01, 0xF0, 0x3F, 0xDF, 0xFE, 0x1F, 0x03, 0xC0, 0xF8, 0x07, 0xE0, 0x7E, 0x01, 0xF0,
0x3C, 0x0F, 0x87, 0xFF, 0xBF, 0xC0, 0xFF, 0xFF, 0xFF, 0xC6, 0x3C, 0x63, 0x3C, 0x0F, 0x87, 0xFF, 0xBF, 0xC0, 0xFF, 0xFF, 0xFF, 0xC6, 0x3C, 0x63,
0xC6, 0x3C, 0x63, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0xC6, 0x3C, 0x63, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
0x3F, 0xC3, 0xFC, 0xFF, 0xFF, 0xFF, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x3F, 0xC3, 0xFC, 0xFF, 0xFF, 0xFF, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06,
0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x63, 0x9C, 0x1F, 0xC0, 0xF0, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x63, 0x9C, 0x1F, 0xC0, 0xF0,
0xFC, 0x3F, 0xFC, 0x3F, 0x30, 0x0C, 0x38, 0x1C, 0x18, 0x18, 0x1C, 0x38, 0xFC, 0x3F, 0xFC, 0x3F, 0x30, 0x0C, 0x38, 0x1C, 0x18, 0x18, 0x1C, 0x38,
0x1C, 0x38, 0x0E, 0x70, 0x0E, 0x70, 0x0F, 0x60, 0x07, 0xE0, 0x07, 0xE0, 0x1C, 0x38, 0x0E, 0x70, 0x0E, 0x70, 0x0F, 0x60, 0x07, 0xE0, 0x07, 0xE0,
0x03, 0xC0, 0x03, 0xC0, 0xFC, 0xFF, 0xF3, 0xF6, 0x01, 0xDC, 0xC6, 0x77, 0x03, 0xC0, 0x03, 0xC0, 0xFC, 0xFF, 0xF3, 0xF6, 0x01, 0xDC, 0xC6, 0x77,
0x99, 0xDE, 0x67, 0x79, 0x8D, 0xFE, 0x3F, 0xF8, 0xF3, 0xE3, 0xCF, 0x8F, 0x99, 0xDE, 0x67, 0x79, 0x8D, 0xFE, 0x3F, 0xF8, 0xF3, 0xE3, 0xCF, 0x8F,
0x3C, 0x38, 0x70, 0xE1, 0xC0, 0xF8, 0xFB, 0xE3, 0xE3, 0x86, 0x0F, 0x38, 0x3C, 0x38, 0x70, 0xE1, 0xC0, 0xF8, 0xFB, 0xE3, 0xE3, 0x86, 0x0F, 0x38,
0x1F, 0xC0, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x0F, 0x80, 0x77, 0x03, 0x8E, 0x1F, 0xC0, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x0F, 0x80, 0x77, 0x03, 0x8E,
0x1E, 0x1C, 0xFC, 0xFF, 0xF3, 0xF0, 0xF9, 0xFF, 0x9F, 0x30, 0xC3, 0x9C, 0x1E, 0x1C, 0xFC, 0xFF, 0xF3, 0xF0, 0xF9, 0xFF, 0x9F, 0x30, 0xC3, 0x9C,
0x19, 0x81, 0xF8, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x19, 0x81, 0xF8, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
0x3F, 0xC3, 0xFC, 0xFF, 0xBF, 0xEC, 0x3B, 0x0C, 0xC6, 0x33, 0x80, 0xC0, 0x3F, 0xC3, 0xFC, 0xFF, 0xBF, 0xEC, 0x3B, 0x0C, 0xC6, 0x33, 0x80, 0xC0,
0x60, 0x38, 0xCC, 0x36, 0x0F, 0x03, 0xFF, 0xFF, 0xF0, 0xFF, 0xF1, 0x8C, 0x60, 0x38, 0xCC, 0x36, 0x0F, 0x03, 0xFF, 0xFF, 0xF0, 0xFF, 0xF1, 0x8C,
0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC7, 0xFE, 0x40, 0x30, 0x0E, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC7, 0xFE, 0x40, 0x30, 0x0E,
0x01, 0x80, 0x70, 0x0C, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x18, 0x01, 0x80, 0x70, 0x0C, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x18,
0x07, 0x00, 0xC0, 0x38, 0x0E, 0x01, 0xC0, 0x70, 0x0C, 0x01, 0xFF, 0xC6, 0x07, 0x00, 0xC0, 0x38, 0x0E, 0x01, 0xC0, 0x70, 0x0C, 0x01, 0xFF, 0xC6,
0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1F, 0xFE, 0x04, 0x03, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1F, 0xFE, 0x04, 0x03,
0x01, 0xE0, 0xFC, 0x7B, 0x9C, 0x7E, 0x1F, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0xFC, 0x7B, 0x9C, 0x7E, 0x1F, 0x03, 0xFF, 0xFF, 0xFF, 0xF0,
0xCE, 0x73, 0x3F, 0x07, 0xF8, 0x00, 0xC0, 0x0C, 0x1F, 0xC7, 0xFC, 0x60, 0xCE, 0x73, 0x3F, 0x07, 0xF8, 0x00, 0xC0, 0x0C, 0x1F, 0xC7, 0xFC, 0x60,
0xCC, 0x0C, 0xC1, 0xCF, 0xFF, 0x3F, 0xF0, 0xF0, 0x07, 0x80, 0x0C, 0x00, 0xCC, 0x0C, 0xC1, 0xCF, 0xFF, 0x3F, 0xF0, 0xF0, 0x07, 0x80, 0x0C, 0x00,
0x60, 0x03, 0x7C, 0x1F, 0xF8, 0xF1, 0xC7, 0x07, 0x30, 0x19, 0x80, 0xCC, 0x60, 0x03, 0x7C, 0x1F, 0xF8, 0xF1, 0xC7, 0x07, 0x30, 0x19, 0x80, 0xCC,
0x06, 0x60, 0x73, 0xC7, 0x7F, 0xFB, 0xDF, 0x00, 0x1F, 0xB3, 0xFF, 0x70, 0x06, 0x60, 0x73, 0xC7, 0x7F, 0xFB, 0xDF, 0x00, 0x1F, 0xB3, 0xFF, 0x70,
0xFE, 0x07, 0xC0, 0x3C, 0x00, 0xC0, 0x0C, 0x00, 0x70, 0x77, 0xFF, 0x1F, 0xFE, 0x07, 0xC0, 0x3C, 0x00, 0xC0, 0x0C, 0x00, 0x70, 0x77, 0xFF, 0x1F,
0xC0, 0x01, 0xE0, 0x0F, 0x00, 0x18, 0x00, 0xC1, 0xF6, 0x3F, 0xF1, 0xC7, 0xC0, 0x01, 0xE0, 0x0F, 0x00, 0x18, 0x00, 0xC1, 0xF6, 0x3F, 0xF1, 0xC7,
0x9C, 0x1C, 0xC0, 0x66, 0x03, 0x30, 0x19, 0x81, 0xC7, 0x1E, 0x3F, 0xFC, 0x9C, 0x1C, 0xC0, 0x66, 0x03, 0x30, 0x19, 0x81, 0xC7, 0x1E, 0x3F, 0xFC,
0x7D, 0xE0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0x7D, 0xE0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x07, 0xFF, 0xFF, 0xFF, 0xE0,
0x0E, 0x00, 0x70, 0x73, 0xFF, 0x1F, 0xC0, 0x07, 0xC3, 0xFC, 0x60, 0x0C, 0x0E, 0x00, 0x70, 0x73, 0xFF, 0x1F, 0xC0, 0x07, 0xC3, 0xFC, 0x60, 0x0C,
0x0F, 0xFD, 0xFF, 0x86, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x0F, 0xFD, 0xFF, 0x86, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01,
0x81, 0xFF, 0xBF, 0xF0, 0x1F, 0x79, 0xFF, 0xDC, 0x79, 0x81, 0xCC, 0x06, 0x81, 0xFF, 0xBF, 0xF0, 0x1F, 0x79, 0xFF, 0xDC, 0x79, 0x81, 0xCC, 0x06,
0x60, 0x33, 0x01, 0x9C, 0x1C, 0x71, 0xE1, 0xFF, 0x07, 0xD8, 0x00, 0xC0, 0x60, 0x33, 0x01, 0x9C, 0x1C, 0x71, 0xE1, 0xFF, 0x07, 0xD8, 0x00, 0xC0,
0x06, 0x00, 0x70, 0x7F, 0x03, 0xF0, 0xF0, 0x03, 0xC0, 0x03, 0x00, 0x0C, 0x06, 0x00, 0x70, 0x7F, 0x03, 0xF0, 0xF0, 0x03, 0xC0, 0x03, 0x00, 0x0C,
0x00, 0x37, 0xC0, 0xFF, 0x83, 0xC7, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0x00, 0x37, 0xC0, 0xFF, 0x83, 0xC7, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3,
0x03, 0x0C, 0x0C, 0x30, 0x33, 0xF3, 0xFF, 0xCF, 0xC0, 0x06, 0x00, 0xC0, 0x03, 0x0C, 0x0C, 0x30, 0x33, 0xF3, 0xFF, 0xCF, 0xC0, 0x06, 0x00, 0xC0,
0x00, 0x3F, 0x07, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x00, 0x3F, 0x07, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18,
0x03, 0x0F, 0xFF, 0xFF, 0xC0, 0x06, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x0F, 0xFF, 0xFF, 0xC0, 0x06, 0x06, 0x00, 0xFF, 0xFF, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xFC,
0xF0, 0x07, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x3F, 0x19, 0xF8, 0xDE, 0x07, 0xF0, 0x07, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x3F, 0x19, 0xF8, 0xDE, 0x07,
0xE0, 0x3E, 0x01, 0xF0, 0x0F, 0xC0, 0x6F, 0x03, 0x1C, 0x78, 0xFF, 0xC7, 0xE0, 0x3E, 0x01, 0xF0, 0x0F, 0xC0, 0x6F, 0x03, 0x1C, 0x78, 0xFF, 0xC7,
0xE0, 0x7E, 0x0F, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0xE0, 0x7E, 0x0F, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30,
0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x61, 0xFF, 0xFF, 0xF8, 0xFE, 0xF1, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x61, 0xFF, 0xFF, 0xF8, 0xFE, 0xF1,
0xFF, 0xF1, 0xCE, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0xFF, 0xF1, 0xCE, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31,
0x8C, 0x63, 0x19, 0xF7, 0xBF, 0xEF, 0x78, 0x77, 0xC1, 0xFF, 0x83, 0xC7, 0x8C, 0x63, 0x19, 0xF7, 0xBF, 0xEF, 0x78, 0x77, 0xC1, 0xFF, 0x83, 0xC7,
0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0x03, 0x0C, 0x0C, 0x30, 0x33, 0xF1, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC3, 0x03, 0x0C, 0x0C, 0x30, 0x33, 0xF1,
0xFF, 0xC7, 0xC0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x07, 0xC0, 0x3C, 0x03, 0xFF, 0xC7, 0xC0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x07, 0xC0, 0x3C, 0x03,
0xC0, 0x3E, 0x07, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0xF7, 0xE3, 0xFF, 0xC3, 0xC0, 0x3E, 0x07, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0xF7, 0xE3, 0xFF, 0xC3,
0xC3, 0x8E, 0x07, 0x30, 0x0C, 0xC0, 0x33, 0x00, 0xCE, 0x07, 0x3C, 0x38, 0xC3, 0x8E, 0x07, 0x30, 0x0C, 0xC0, 0x33, 0x00, 0xCE, 0x07, 0x3C, 0x38,
0xFF, 0xC3, 0x7E, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0xFF, 0xC3, 0x7E, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x0F, 0xE0, 0x3F, 0x80,
0x1F, 0xBC, 0xFF, 0xF7, 0x0F, 0x38, 0x1C, 0xC0, 0x33, 0x00, 0xCC, 0x03, 0x1F, 0xBC, 0xFF, 0xF7, 0x0F, 0x38, 0x1C, 0xC0, 0x33, 0x00, 0xCC, 0x03,
0x38, 0x1C, 0x70, 0xF0, 0xFF, 0xC1, 0xFB, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x38, 0x1C, 0x70, 0xF0, 0xFF, 0xC1, 0xFB, 0x00, 0x0C, 0x00, 0x30, 0x00,
0xC0, 0x1F, 0xC0, 0x7F, 0x79, 0xE7, 0xFF, 0x1F, 0x31, 0xC0, 0x18, 0x01, 0xC0, 0x1F, 0xC0, 0x7F, 0x79, 0xE7, 0xFF, 0x1F, 0x31, 0xC0, 0x18, 0x01,
0x80, 0x18, 0x01, 0x80, 0x18, 0x0F, 0xFC, 0xFF, 0xC0, 0x3F, 0x9F, 0xFE, 0x80, 0x18, 0x01, 0x80, 0x18, 0x0F, 0xFC, 0xFF, 0xC0, 0x3F, 0x9F, 0xFE,
0x1F, 0x82, 0xFE, 0x1F, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xF0, 0x30, 0x1F, 0x82, 0xFE, 0x1F, 0xE0, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xF0, 0x30,
0x06, 0x00, 0xC0, 0x7F, 0xEF, 0xFC, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x06, 0x00, 0xC0, 0x7F, 0xEF, 0xFC, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06,
0x00, 0xC0, 0x18, 0x71, 0xFE, 0x1F, 0x00, 0xF1, 0xF7, 0x8F, 0x8C, 0x0C, 0x00, 0xC0, 0x18, 0x71, 0xFE, 0x1F, 0x00, 0xF1, 0xF7, 0x8F, 0x8C, 0x0C,
0x60, 0x63, 0x03, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x38, 0xF0, 0xFF, 0xC3, 0x60, 0x63, 0x03, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x38, 0xF0, 0xFF, 0xC3,
0xEE, 0xFC, 0xFF, 0xF3, 0xF3, 0x87, 0x0E, 0x1C, 0x1C, 0x60, 0x73, 0x80, 0xEE, 0xFC, 0xFF, 0xF3, 0xF3, 0x87, 0x0E, 0x1C, 0x1C, 0x60, 0x73, 0x80,
0xEC, 0x03, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xF8, 0x7F, 0xE1, 0xEC, 0x03, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xF8, 0x7F, 0xE1,
0xF7, 0x39, 0x8C, 0xE6, 0x37, 0xB0, 0xFF, 0xC3, 0xFF, 0x07, 0xBC, 0x1C, 0xF7, 0x39, 0x8C, 0xE6, 0x37, 0xB0, 0xFF, 0xC3, 0xFF, 0x07, 0xBC, 0x1C,
0xF0, 0x73, 0x81, 0x86, 0x00, 0x7C, 0xF9, 0xF3, 0xE3, 0xCF, 0x07, 0xF8, 0xF0, 0x73, 0x81, 0x86, 0x00, 0x7C, 0xF9, 0xF3, 0xE3, 0xCF, 0x07, 0xF8,
0x0F, 0xC0, 0x1E, 0x00, 0xFC, 0x07, 0x38, 0x38, 0x73, 0xF3, 0xFF, 0xCF, 0x0F, 0xC0, 0x1E, 0x00, 0xFC, 0x07, 0x38, 0x38, 0x73, 0xF3, 0xFF, 0xCF,
0xC0, 0xF9, 0xFF, 0x9F, 0x70, 0xE3, 0x0C, 0x39, 0xC1, 0x98, 0x19, 0x81, 0xC0, 0xF9, 0xFF, 0x9F, 0x70, 0xE3, 0x0C, 0x39, 0xC1, 0x98, 0x19, 0x81,
0xF8, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0xFF, 0x0F, 0xF8, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0xFF, 0x0F,
0xF0, 0x7F, 0xCF, 0xF9, 0x8E, 0x33, 0x80, 0x70, 0x1C, 0x07, 0x01, 0xC6, 0xF0, 0x7F, 0xCF, 0xF9, 0x8E, 0x33, 0x80, 0x70, 0x1C, 0x07, 0x01, 0xC6,
0x70, 0xFF, 0xFF, 0xFF, 0x80, 0x0E, 0x3C, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x70, 0xFF, 0xFF, 0xFF, 0x80, 0x0E, 0x3C, 0x60, 0xC1, 0x83, 0x06, 0x0C,
0x39, 0xE3, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x3C, 0x38, 0xFF, 0xFF, 0x39, 0xE3, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x3C, 0x38, 0xFF, 0xFF,
0xFF, 0xFF, 0xF0, 0xE1, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x3C, 0xFF, 0xFF, 0xF0, 0xE1, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x3C,
0x79, 0x83, 0x06, 0x0C, 0x18, 0x31, 0xE3, 0x80, 0x3C, 0x37, 0xE7, 0x67, 0x79, 0x83, 0x06, 0x0C, 0x18, 0x31, 0xE3, 0x80, 0x3C, 0x37, 0xE7, 0x67,
0xE6, 0x1C }; 0xE6, 0x1C};
const GFXglyph FreeMonoBold12pt7bGlyphs[] = { const GFXglyph FreeMonoBold12pt7bGlyphs[] = {
{ 0, 0, 0, 14, 0, 1 }, // 0x20 ' ' {0, 0, 0, 14, 0, 1}, // 0x20 ' '
{ 0, 4, 15, 14, 5, -14 }, // 0x21 '!' {0, 4, 15, 14, 5, -14}, // 0x21 '!'
{ 8, 8, 7, 14, 3, -13 }, // 0x22 '"' {8, 8, 7, 14, 3, -13}, // 0x22 '"'
{ 15, 11, 18, 14, 2, -15 }, // 0x23 '#' {15, 11, 18, 14, 2, -15}, // 0x23 '#'
{ 40, 10, 20, 14, 2, -16 }, // 0x24 '$' {40, 10, 20, 14, 2, -16}, // 0x24 '$'
{ 65, 10, 15, 14, 2, -14 }, // 0x25 '%' {65, 10, 15, 14, 2, -14}, // 0x25 '%'
{ 84, 10, 13, 14, 2, -12 }, // 0x26 '&' {84, 10, 13, 14, 2, -12}, // 0x26 '&'
{ 101, 3, 7, 14, 5, -13 }, // 0x27 ''' {101, 3, 7, 14, 5, -13}, // 0x27 '''
{ 104, 5, 19, 14, 6, -14 }, // 0x28 '(' {104, 5, 19, 14, 6, -14}, // 0x28 '('
{ 116, 5, 19, 14, 3, -14 }, // 0x29 ')' {116, 5, 19, 14, 3, -14}, // 0x29 ')'
{ 128, 10, 10, 14, 2, -14 }, // 0x2A '*' {128, 10, 10, 14, 2, -14}, // 0x2A '*'
{ 141, 12, 13, 14, 1, -12 }, // 0x2B '+' {141, 12, 13, 14, 1, -12}, // 0x2B '+'
{ 161, 5, 7, 14, 4, -2 }, // 0x2C ',' {161, 5, 7, 14, 4, -2}, // 0x2C ','
{ 166, 12, 2, 14, 1, -7 }, // 0x2D '-' {166, 12, 2, 14, 1, -7}, // 0x2D '-'
{ 169, 3, 3, 14, 5, -2 }, // 0x2E '.' {169, 3, 3, 14, 5, -2}, // 0x2E '.'
{ 171, 10, 20, 14, 2, -16 }, // 0x2F '/' {171, 10, 20, 14, 2, -16}, // 0x2F '/'
{ 196, 10, 15, 14, 2, -14 }, // 0x30 '0' {196, 10, 15, 14, 2, -14}, // 0x30 '0'
{ 215, 10, 15, 14, 2, -14 }, // 0x31 '1' {215, 10, 15, 14, 2, -14}, // 0x31 '1'
{ 234, 10, 15, 14, 2, -14 }, // 0x32 '2' {234, 10, 15, 14, 2, -14}, // 0x32 '2'
{ 253, 11, 15, 14, 1, -14 }, // 0x33 '3' {253, 11, 15, 14, 1, -14}, // 0x33 '3'
{ 274, 9, 14, 14, 2, -13 }, // 0x34 '4' {274, 9, 14, 14, 2, -13}, // 0x34 '4'
{ 290, 10, 15, 14, 2, -14 }, // 0x35 '5' {290, 10, 15, 14, 2, -14}, // 0x35 '5'
{ 309, 10, 15, 14, 2, -14 }, // 0x36 '6' {309, 10, 15, 14, 2, -14}, // 0x36 '6'
{ 328, 10, 15, 14, 2, -14 }, // 0x37 '7' {328, 10, 15, 14, 2, -14}, // 0x37 '7'
{ 347, 10, 15, 14, 2, -14 }, // 0x38 '8' {347, 10, 15, 14, 2, -14}, // 0x38 '8'
{ 366, 10, 15, 14, 3, -14 }, // 0x39 '9' {366, 10, 15, 14, 3, -14}, // 0x39 '9'
{ 385, 3, 11, 14, 5, -10 }, // 0x3A ':' {385, 3, 11, 14, 5, -10}, // 0x3A ':'
{ 390, 4, 15, 14, 4, -10 }, // 0x3B ';' {390, 4, 15, 14, 4, -10}, // 0x3B ';'
{ 398, 12, 11, 14, 1, -11 }, // 0x3C '<' {398, 12, 11, 14, 1, -11}, // 0x3C '<'
{ 415, 12, 7, 14, 1, -9 }, // 0x3D '=' {415, 12, 7, 14, 1, -9}, // 0x3D '='
{ 426, 12, 11, 14, 1, -11 }, // 0x3E '>' {426, 12, 11, 14, 1, -11}, // 0x3E '>'
{ 443, 9, 14, 14, 3, -13 }, // 0x3F '?' {443, 9, 14, 14, 3, -13}, // 0x3F '?'
{ 459, 11, 19, 14, 2, -14 }, // 0x40 '@' {459, 11, 19, 14, 2, -14}, // 0x40 '@'
{ 486, 15, 14, 14, -1, -13 }, // 0x41 'A' {486, 15, 14, 14, -1, -13}, // 0x41 'A'
{ 513, 13, 14, 14, 0, -13 }, // 0x42 'B' {513, 13, 14, 14, 0, -13}, // 0x42 'B'
{ 536, 12, 14, 14, 1, -13 }, // 0x43 'C' {536, 12, 14, 14, 1, -13}, // 0x43 'C'
{ 557, 12, 14, 14, 1, -13 }, // 0x44 'D' {557, 12, 14, 14, 1, -13}, // 0x44 'D'
{ 578, 13, 14, 14, 0, -13 }, // 0x45 'E' {578, 13, 14, 14, 0, -13}, // 0x45 'E'
{ 601, 13, 14, 14, 0, -13 }, // 0x46 'F' {601, 13, 14, 14, 0, -13}, // 0x46 'F'
{ 624, 13, 14, 14, 1, -13 }, // 0x47 'G' {624, 13, 14, 14, 1, -13}, // 0x47 'G'
{ 647, 14, 14, 14, 0, -13 }, // 0x48 'H' {647, 14, 14, 14, 0, -13}, // 0x48 'H'
{ 672, 10, 14, 14, 2, -13 }, // 0x49 'I' {672, 10, 14, 14, 2, -13}, // 0x49 'I'
{ 690, 13, 14, 14, 1, -13 }, // 0x4A 'J' {690, 13, 14, 14, 1, -13}, // 0x4A 'J'
{ 713, 14, 14, 14, 0, -13 }, // 0x4B 'K' {713, 14, 14, 14, 0, -13}, // 0x4B 'K'
{ 738, 12, 14, 14, 1, -13 }, // 0x4C 'L' {738, 12, 14, 14, 1, -13}, // 0x4C 'L'
{ 759, 14, 14, 14, 0, -13 }, // 0x4D 'M' {759, 14, 14, 14, 0, -13}, // 0x4D 'M'
{ 784, 13, 14, 14, 0, -13 }, // 0x4E 'N' {784, 13, 14, 14, 0, -13}, // 0x4E 'N'
{ 807, 12, 14, 14, 1, -13 }, // 0x4F 'O' {807, 12, 14, 14, 1, -13}, // 0x4F 'O'
{ 828, 12, 14, 14, 0, -13 }, // 0x50 'P' {828, 12, 14, 14, 0, -13}, // 0x50 'P'
{ 849, 12, 17, 14, 1, -13 }, // 0x51 'Q' {849, 12, 17, 14, 1, -13}, // 0x51 'Q'
{ 875, 14, 14, 14, 0, -13 }, // 0x52 'R' {875, 14, 14, 14, 0, -13}, // 0x52 'R'
{ 900, 10, 14, 14, 2, -13 }, // 0x53 'S' {900, 10, 14, 14, 2, -13}, // 0x53 'S'
{ 918, 12, 14, 14, 1, -13 }, // 0x54 'T' {918, 12, 14, 14, 1, -13}, // 0x54 'T'
{ 939, 12, 14, 14, 1, -13 }, // 0x55 'U' {939, 12, 14, 14, 1, -13}, // 0x55 'U'
{ 960, 16, 14, 14, -1, -13 }, // 0x56 'V' {960, 16, 14, 14, -1, -13}, // 0x56 'V'
{ 988, 14, 14, 14, 0, -13 }, // 0x57 'W' {988, 14, 14, 14, 0, -13}, // 0x57 'W'
{ 1013, 14, 14, 14, 0, -13 }, // 0x58 'X' {1013, 14, 14, 14, 0, -13}, // 0x58 'X'
{ 1038, 12, 14, 14, 1, -13 }, // 0x59 'Y' {1038, 12, 14, 14, 1, -13}, // 0x59 'Y'
{ 1059, 10, 14, 14, 2, -13 }, // 0x5A 'Z' {1059, 10, 14, 14, 2, -13}, // 0x5A 'Z'
{ 1077, 5, 19, 14, 6, -14 }, // 0x5B '[' {1077, 5, 19, 14, 6, -14}, // 0x5B '['
{ 1089, 10, 20, 14, 2, -16 }, // 0x5C '\' {1089, 10, 20, 14, 2, -16}, // 0x5C '\'
{ 1114, 5, 19, 14, 3, -14 }, // 0x5D ']' {1114, 5, 19, 14, 3, -14}, // 0x5D ']'
{ 1126, 10, 8, 14, 2, -15 }, // 0x5E '^' {1126, 10, 8, 14, 2, -15}, // 0x5E '^'
{ 1136, 14, 2, 14, 0, 4 }, // 0x5F '_' {1136, 14, 2, 14, 0, 4}, // 0x5F '_'
{ 1140, 4, 4, 14, 4, -15 }, // 0x60 '`' {1140, 4, 4, 14, 4, -15}, // 0x60 '`'
{ 1142, 12, 11, 14, 1, -10 }, // 0x61 'a' {1142, 12, 11, 14, 1, -10}, // 0x61 'a'
{ 1159, 13, 15, 14, 0, -14 }, // 0x62 'b' {1159, 13, 15, 14, 0, -14}, // 0x62 'b'
{ 1184, 12, 11, 14, 1, -10 }, // 0x63 'c' {1184, 12, 11, 14, 1, -10}, // 0x63 'c'
{ 1201, 13, 15, 14, 1, -14 }, // 0x64 'd' {1201, 13, 15, 14, 1, -14}, // 0x64 'd'
{ 1226, 12, 11, 14, 1, -10 }, // 0x65 'e' {1226, 12, 11, 14, 1, -10}, // 0x65 'e'
{ 1243, 11, 15, 14, 2, -14 }, // 0x66 'f' {1243, 11, 15, 14, 2, -14}, // 0x66 'f'
{ 1264, 13, 16, 14, 1, -10 }, // 0x67 'g' {1264, 13, 16, 14, 1, -10}, // 0x67 'g'
{ 1290, 14, 15, 14, 0, -14 }, // 0x68 'h' {1290, 14, 15, 14, 0, -14}, // 0x68 'h'
{ 1317, 11, 14, 14, 1, -13 }, // 0x69 'i' {1317, 11, 14, 14, 1, -13}, // 0x69 'i'
{ 1337, 8, 19, 15, 3, -13 }, // 0x6A 'j' {1337, 8, 19, 15, 3, -13}, // 0x6A 'j'
{ 1356, 13, 15, 14, 1, -14 }, // 0x6B 'k' {1356, 13, 15, 14, 1, -14}, // 0x6B 'k'
{ 1381, 11, 15, 14, 1, -14 }, // 0x6C 'l' {1381, 11, 15, 14, 1, -14}, // 0x6C 'l'
{ 1402, 15, 11, 14, 0, -10 }, // 0x6D 'm' {1402, 15, 11, 14, 0, -10}, // 0x6D 'm'
{ 1423, 14, 11, 14, 0, -10 }, // 0x6E 'n' {1423, 14, 11, 14, 0, -10}, // 0x6E 'n'
{ 1443, 12, 11, 14, 1, -10 }, // 0x6F 'o' {1443, 12, 11, 14, 1, -10}, // 0x6F 'o'
{ 1460, 14, 16, 14, 0, -10 }, // 0x70 'p' {1460, 14, 16, 14, 0, -10}, // 0x70 'p'
{ 1488, 14, 16, 14, 0, -10 }, // 0x71 'q' {1488, 14, 16, 14, 0, -10}, // 0x71 'q'
{ 1516, 12, 11, 14, 1, -10 }, // 0x72 'r' {1516, 12, 11, 14, 1, -10}, // 0x72 'r'
{ 1533, 10, 11, 14, 2, -10 }, // 0x73 's' {1533, 10, 11, 14, 2, -10}, // 0x73 's'
{ 1547, 11, 14, 14, 1, -13 }, // 0x74 't' {1547, 11, 14, 14, 1, -13}, // 0x74 't'
{ 1567, 13, 11, 14, 0, -10 }, // 0x75 'u' {1567, 13, 11, 14, 0, -10}, // 0x75 'u'
{ 1585, 14, 11, 14, 0, -10 }, // 0x76 'v' {1585, 14, 11, 14, 0, -10}, // 0x76 'v'
{ 1605, 14, 11, 14, 0, -10 }, // 0x77 'w' {1605, 14, 11, 14, 0, -10}, // 0x77 'w'
{ 1625, 14, 11, 14, 0, -10 }, // 0x78 'x' {1625, 14, 11, 14, 0, -10}, // 0x78 'x'
{ 1645, 12, 16, 14, 1, -10 }, // 0x79 'y' {1645, 12, 16, 14, 1, -10}, // 0x79 'y'
{ 1669, 11, 11, 14, 1, -10 }, // 0x7A 'z' {1669, 11, 11, 14, 1, -10}, // 0x7A 'z'
{ 1685, 7, 19, 14, 3, -14 }, // 0x7B '{' {1685, 7, 19, 14, 3, -14}, // 0x7B '{'
{ 1702, 2, 19, 14, 6, -14 }, // 0x7C '|' {1702, 2, 19, 14, 6, -14}, // 0x7C '|'
{ 1707, 7, 19, 14, 4, -14 }, // 0x7D '}' {1707, 7, 19, 14, 4, -14}, // 0x7D '}'
{ 1724, 12, 4, 14, 1, -7 } }; // 0x7E '~' {1724, 12, 4, 14, 1, -7}}; // 0x7E '~'
const GFXfont FreeMonoBold12pt7b = { const GFXfont FreeMonoBold12pt7b = {
(uint8_t *)FreeMonoBold12pt7bBitmaps, (uint8_t *)FreeMonoBold12pt7bBitmaps,
(GFXglyph *)FreeMonoBold12pt7bGlyphs, (GFXglyph *)FreeMonoBold12pt7bGlyphs,
0x20, 0x7E, 24, 17 }; 0x20, 0x7E, 24, 17};
// Approx. 2402 bytes // Approx. 2402 bytes

View File

@ -18,23 +18,25 @@
#include "stdlib.h" #include "stdlib.h"
#include "fb_gfx.h" #include "fb_gfx.h"
typedef struct { // Data stored PER GLYPH typedef struct
uint16_t bitmapOffset; // Pointer into GFXfont->bitmap { // Data stored PER GLYPH
uint8_t width, height; // Bitmap dimensions in pixels uint16_t bitmapOffset; // Pointer into GFXfont->bitmap
uint8_t xAdvance; // Distance to advance cursor (x axis) uint8_t width, height; // Bitmap dimensions in pixels
int8_t xOffset, yOffset; // Dist from cursor pos to UL corner uint8_t xAdvance; // Distance to advance cursor (x axis)
int8_t xOffset, yOffset; // Dist from cursor pos to UL corner
} GFXglyph; } GFXglyph;
typedef struct { // Data stored for FONT AS A WHOLE: typedef struct
uint8_t *bitmap; // Glyph bitmaps, concatenated { // Data stored for FONT AS A WHOLE:
GFXglyph *glyph; // Glyph array uint8_t *bitmap; // Glyph bitmaps, concatenated
uint8_t first, last; // ASCII extents GFXglyph *glyph; // Glyph array
uint8_t yAdvance; // Newline distance (y axis) uint8_t first, last; // ASCII extents
uint8_t yOffset; // Y offset of the font zero line (y axis) uint8_t yAdvance; // Newline distance (y axis)
uint8_t yOffset; // Y offset of the font zero line (y axis)
} GFXfont; } GFXfont;
#include "FreeMonoBold12pt7b.h"//14x24 #include "FreeMonoBold12pt7b.h" //14x24
#define gfxFont ((GFXfont*)(&FreeMonoBold12pt7b)) #define gfxFont ((GFXfont *)(&FreeMonoBold12pt7b))
void fb_gfx_fillRect(fb_data_t *fb, int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) void fb_gfx_fillRect(fb_data_t *fb, int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)
{ {
@ -43,12 +45,14 @@ void fb_gfx_fillRect(fb_data_t *fb, int32_t x, int32_t y, int32_t w, int32_t h,
uint8_t c0 = color >> 16; uint8_t c0 = color >> 16;
uint8_t c1 = color >> 8; uint8_t c1 = color >> 8;
uint8_t c2 = color; uint8_t c2 = color;
for (int i=0; i<h; i++){ for (int i = 0; i < h; i++)
for (int j=0; j<w; j++){ {
for (int j = 0; j < w; j++)
{
data[0] = c0; data[0] = c0;
data[1] = c1; data[1] = c1;
data[2] = c2; data[2] = c2;
data+=3; data += 3;
} }
data += line_step; data += line_step;
} }
@ -67,17 +71,18 @@ void fb_gfx_drawFastVLine(fb_data_t *fb, int32_t x, int32_t y, int32_t h, uint32
uint8_t fb_gfx_putc(fb_data_t *fb, int32_t x, int32_t y, uint32_t color, unsigned char c) uint8_t fb_gfx_putc(fb_data_t *fb, int32_t x, int32_t y, uint32_t color, unsigned char c)
{ {
uint16_t line_width; uint16_t line_width;
uint8_t xa = 0, bit = 0, bits = 0, xx, yy; uint8_t xa = 0, bit = 0, bits = 0, xx, yy;
uint8_t *bitmap; uint8_t *bitmap;
GFXglyph *glyph; GFXglyph *glyph;
if ((c < 32) || (c < gfxFont->first) || (c > gfxFont->last)) { if ((c < 32) || (c < gfxFont->first) || (c > gfxFont->last))
{
return xa; return xa;
} }
c -= gfxFont->first; c -= gfxFont->first;
glyph = &(gfxFont->glyph[c]); glyph = &(gfxFont->glyph[c]);
bitmap = gfxFont->bitmap + glyph->bitmapOffset; bitmap = gfxFont->bitmap + glyph->bitmapOffset;
xa = glyph->xAdvance; xa = glyph->xAdvance;
@ -86,41 +91,54 @@ uint8_t fb_gfx_putc(fb_data_t *fb, int32_t x, int32_t y, uint32_t color, unsigne
y += gfxFont->yOffset; y += gfxFont->yOffset;
line_width = 0; line_width = 0;
for(yy=0; yy<glyph->height; yy++) { for (yy = 0; yy < glyph->height; yy++)
for(xx=0; xx<glyph->width; xx++) { {
if(bit == 0) { for (xx = 0; xx < glyph->width; xx++)
{
if (bit == 0)
{
bits = *bitmap++; bits = *bitmap++;
bit = 0x80; bit = 0x80;
} }
if(bits & bit) { if (bits & bit)
{
line_width++; line_width++;
} else if (line_width) { }
fb_gfx_drawFastHLine(fb, x+xx-line_width, y+yy, line_width, color); else if (line_width)
line_width=0; {
fb_gfx_drawFastHLine(fb, x + xx - line_width, y + yy, line_width, color);
line_width = 0;
} }
bit >>= 1; bit >>= 1;
} }
if (line_width) { if (line_width)
fb_gfx_drawFastHLine(fb, x+xx-line_width, y+yy, line_width, color); {
line_width=0; fb_gfx_drawFastHLine(fb, x + xx - line_width, y + yy, line_width, color);
line_width = 0;
} }
} }
return xa; return xa;
} }
uint32_t fb_gfx_print(fb_data_t *fb, int x, int y, uint32_t color, const char * str) uint32_t fb_gfx_print(fb_data_t *fb, int x, int y, uint32_t color, const char *str)
{ {
uint32_t l = 0; uint32_t l = 0;
int xc = x, yc = y, lc = fb->width - gfxFont->glyph[0].xAdvance; int xc = x, yc = y, lc = fb->width - gfxFont->glyph[0].xAdvance;
uint8_t fh = gfxFont->yAdvance; uint8_t fh = gfxFont->yAdvance;
char c = *str++; char c = *str++;
while(c){ while (c)
if(c != '\r'){ {
if(c == '\n'){ if (c != '\r')
{
if (c == '\n')
{
yc += fh; yc += fh;
xc = x; xc = x;
} else { }
if(xc > lc){ else
{
if (xc > lc)
{
yc += fh; yc += fh;
xc = x; xc = x;
} }
@ -136,7 +154,7 @@ uint32_t fb_gfx_print(fb_data_t *fb, int x, int y, uint32_t color, const char *
uint32_t fb_gfx_printf(fb_data_t *fb, int32_t x, int32_t y, uint32_t color, const char *format, ...) uint32_t fb_gfx_printf(fb_data_t *fb, int32_t x, int32_t y, uint32_t color, const char *format, ...)
{ {
char loc_buf[64]; char loc_buf[64];
char * temp = loc_buf; char *temp = loc_buf;
int len; int len;
va_list arg; va_list arg;
va_list copy; va_list copy;
@ -144,16 +162,19 @@ uint32_t fb_gfx_printf(fb_data_t *fb, int32_t x, int32_t y, uint32_t color, cons
va_copy(copy, arg); va_copy(copy, arg);
len = vsnprintf(loc_buf, sizeof(loc_buf), format, arg); len = vsnprintf(loc_buf, sizeof(loc_buf), format, arg);
va_end(copy); va_end(copy);
if(len >= sizeof(loc_buf)){ if (len >= sizeof(loc_buf))
temp = (char*)malloc(len+1); {
if(temp == NULL) { temp = (char *)malloc(len + 1);
if (temp == NULL)
{
return 0; return 0;
} }
} }
vsnprintf(temp, len+1, format, arg); vsnprintf(temp, len + 1, format, arg);
va_end(arg); va_end(arg);
fb_gfx_print(fb, x, y, color, temp); fb_gfx_print(fb, x, y, color, temp);
if(len > 64){ if (len > 64)
{
free(temp); free(temp);
} }
return len; return len;

View File

@ -0,0 +1,96 @@
# Camera Terminal[[English](./README.md)]
该示例的输入图片来自摄像头,输出结果打印在终端。该示例演示了以下模型接口在实际项目中的使用情况。
- [HumanFaceDetectMSR01](https://github.com/espressif/esp-dl/blob/master/include/model_zoo/human_face_detect_msr01.hpp)
- [HumanFaceDetectMNP01](https://github.com/espressif/esp-dl/blob/master/include/model_zoo/human_face_detect_mnp01.hpp)
- [CatFaceDetectMN03](https://github.com/espressif/esp-dl/blob/master/include/model_zoo/cat_face_detect_mn03.hpp)
## 硬件要求:
芯片: ESP32ESP32-S2ESP32-S3
摄像头: OV2640OV3660
对于新手,我们为您推荐开发套件:[ESP-EYE](https://www.espressif.com/zh-hans/products/devkits/esp-eye/overview)ESP-S3-EYE[ESP32-WROVER-KIT](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-wrover-kit-v3.html)
## 示例演示:
如果您完成了硬件准备并已正确安装好摄像头,那我们可以开始软件演示了。
1. 打开终端,并进入当前示例所在目录路经:
```shell
cd ~/esp-who/examples/camera_terminal
```
2. 设定目标芯片:
```shell
idf.py set-target [SoC]
```
将 [SoC] 替换为您的目标芯片,如 esp32、 esp32s2、esp32s3。
3. 打开 menuconfig设置参数
```shell
idf.py menuconfig
```
1. 选用自定义分区:
![](../../img/menuconfig_custom_partition_table.png)
2. 选择正确的摄像头管脚配置,下图以 ESP-EYE 为例:
![](../../img/menuconfig_select_camera_pinout.png)
如果您使用的是非官方支持的开发组件,请在 Custom Camera Pinout 中配置正确管脚信息。
3. 选择您想要运行的模型接口:
![](./img/menuconfig_dl_config.png)
4. 打开外部 RAM
![](../../img/menuconfig_support_external_ram.png)
注意:
- 每次设定芯片之后,都需要重新设定以上参数。
- 除了以上参数,用户也可以根据应用场景配置 CPU、Flash等的其他参数。
4. 烧录程序,运行 IDF 监视器获取实时结果:
```shell
idf.py flash monitor
```
以步骤 3 中的模型选择为例,打印结果如下所示:
![](./img/result_on_terminal.png)
打印结果中包括时间消耗和检测结果。

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB