├── .astylerc ├── .gitignore ├── README.md ├── WifiConfiguration.h ├── battery_icon.cpp ├── block_16x_18._cpp ├── block_8x9.cpp ├── docs └── pictures │ ├── boards-manager-m5stack.png │ ├── boards-menu.png │ ├── library-manager-coreink.png │ ├── library-manager-m5stack.png │ ├── m5-bitclock.png │ ├── port-menu.png │ ├── preferences-m5-arduino.png │ ├── sketch-upload.png │ └── upload-button.png ├── fontExtension.h ├── hooks └── pre-commit ├── icon.cpp ├── icon.h ├── m5-bitclock.ino ├── preferences.c ├── preferences.h ├── resources ├── fonts │ ├── block_7x8 │ │ ├── block_7x8.bmp │ │ ├── block_7x8_0.bmp │ │ ├── block_7x8_1.bmp │ │ ├── block_7x8_2.bmp │ │ ├── block_7x8_3.bmp │ │ ├── block_7x8_4.bmp │ │ ├── block_7x8_5.bmp │ │ ├── block_7x8_6.bmp │ │ ├── block_7x8_7.bmp │ │ ├── block_7x8_8.bmp │ │ ├── block_7x8_9.bmp │ │ ├── block_7x8_A.bmp │ │ ├── block_7x8_B.bmp │ │ ├── block_7x8_C.bmp │ │ ├── block_7x8_D.bmp │ │ ├── block_7x8_E.bmp │ │ ├── block_7x8_F.bmp │ │ ├── block_7x8_G.bmp │ │ ├── block_7x8_H.bmp │ │ ├── block_7x8_I.bmp │ │ ├── block_7x8_J.bmp │ │ ├── block_7x8_K.bmp │ │ ├── block_7x8_L.bmp │ │ ├── block_7x8_M.bmp │ │ ├── block_7x8_N.bmp │ │ ├── block_7x8_O.bmp │ │ ├── block_7x8_P.bmp │ │ ├── block_7x8_Q.bmp │ │ ├── block_7x8_R.bmp │ │ ├── block_7x8_S.bmp │ │ ├── block_7x8_T.bmp │ │ ├── block_7x8_U.bmp │ │ ├── block_7x8_V.bmp │ │ ├── block_7x8_W.bmp │ │ ├── block_7x8_X.bmp │ │ ├── block_7x8_Y.bmp │ │ ├── block_7x8_Z.bmp │ │ ├── block_7x8__ampersand.bmp │ │ ├── block_7x8__at.bmp │ │ ├── block_7x8__bracketleft.bmp │ │ ├── block_7x8__bracketright.bmp │ │ ├── block_7x8__bslash.bmp │ │ ├── block_7x8__colon.bmp │ │ ├── block_7x8__dash.bmp │ │ ├── block_7x8__dollar.bmp │ │ ├── block_7x8__doublequoteclose.bmp │ │ ├── block_7x8__doublequoteopen.bmp │ │ ├── block_7x8__equals.bmp │ │ ├── block_7x8__euro.bmp │ │ ├── block_7x8__exclamation.bmp │ │ ├── block_7x8__fslash.bmp │ │ ├── block_7x8__octothorpe.bmp │ │ ├── block_7x8__parensleft.bmp │ │ ├── block_7x8__parensright.bmp │ │ ├── block_7x8__period.bmp │ │ ├── block_7x8__plus.bmp │ │ ├── block_7x8__pound.bmp │ │ ├── block_7x8__question.bmp │ │ ├── block_7x8__singlequoteclose.bmp │ │ ├── block_7x8__singlequoteopen.bmp │ │ ├── block_7x8__yen.bmp │ │ ├── blocky_7x8_A.bmp │ │ └── blocky_alpha_map.xcf │ ├── seven_segment_20x32 │ │ ├── seven_segment_20x32_0.bmp │ │ ├── seven_segment_20x32_1.bmp │ │ ├── seven_segment_20x32_2.bmp │ │ ├── seven_segment_20x32_3.bmp │ │ ├── seven_segment_20x32_4.bmp │ │ ├── seven_segment_20x32_5.bmp │ │ ├── seven_segment_20x32_6.bmp │ │ ├── seven_segment_20x32_7.bmp │ │ ├── seven_segment_20x32_8.bmp │ │ ├── seven_segment_20x32_9.bmp │ │ └── seven_segment_20x32_period.bmp │ └── seven_segment_26x42 │ │ ├── seven_segment_26x42_0.bmp │ │ ├── seven_segment_26x42_1.bmp │ │ ├── seven_segment_26x42_2.bmp │ │ ├── seven_segment_26x42_3.bmp │ │ ├── seven_segment_26x42_4.bmp │ │ ├── seven_segment_26x42_5.bmp │ │ ├── seven_segment_26x42_6.bmp │ │ ├── seven_segment_26x42_7.bmp │ │ ├── seven_segment_26x42_8.bmp │ │ └── seven_segment_26x42_9.bmp └── icons │ ├── battery_small_0.bmp │ ├── battery_small_100.bmp │ ├── battery_small_25.bmp │ ├── battery_small_50.bmp │ ├── battery_small_75.bmp │ ├── chaintip_icon.bmp │ ├── dollar_sign.bmp │ ├── megabytes.bmp │ ├── megabytes.png │ ├── sats.bmp │ └── sats.png ├── seven_segment_20x32.cpp └── seven_segment_26x42.cpp /.astylerc: -------------------------------------------------------------------------------- 1 | # This configuration file contains a selection of the available options provided by the formatting tool "Artistic Style" 2 | # http://astyle.sourceforge.net/astyle.html 3 | # 4 | # If you wish to change them, don't edit this file. 5 | # Instead, copy it in the same folder of file "preferences.txt" and modify the copy. This way, you won't lose your custom formatter settings when upgrading the IDE 6 | # If you don't know where file preferences.txt is stored, open the IDE, File -> Preferences and you'll find a link 7 | 8 | mode=c 9 | 10 | # 2 spaces indentation 11 | indent=spaces=2 12 | 13 | # also indent macros 14 | indent-preprocessor 15 | 16 | # indent classes, switches (and cases), comments starting at column 1 17 | indent-classes 18 | indent-switches 19 | indent-cases 20 | indent-col1-comments 21 | 22 | # put a space around operators 23 | pad-oper 24 | 25 | # put a space after if/for/while 26 | pad-header 27 | 28 | # if you like one-liners, keep them 29 | keep-one-line-statements 30 | 31 | remove-comment-prefix 32 | 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/* 2 | .clang-format 3 | **/*.orig 4 | create-release.sh 5 | m5-bitclock.tar.gz 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # M5-bitclock 2 | 3 | A tiny **wireless bitcoin metrics ticker** that will last for days on battery 4 | 5 | ![m5-bitclock](docs/pictures/m5-bitclock.png) 6 | 7 | ## Feature Overview 8 | 9 | * **Metrics** - block height, price, mempool size, next-block fee) 10 | * **Power efficient** - epaper display (EPD) allows efficient use of the battery; unit lasts for days on a single charge! 11 | 12 | ## Hardware Requirements 13 | * **[M5 Stack CoreInk Development Kit (~$35 USD)](https://shop.m5stack.com/products/m5stack-esp32-core-ink-development-kit1-54-elnk-display)** - CoreInk is an IoT prototyping device with WiFi, Bluetooth, a real-time clock, and a 1.5" electronic paper display 14 | 15 | ## Software Requirements 16 | To flash the software to the CoreInk, you will need: 17 | 18 | * **[Arduino IDE](https://www.arduino.cc/en/Main/Software)** 19 | 20 | ## Installation Instructions (estimated time ~30 minutes) 21 | 22 | (Navigate [to the M5 CoreInk Arduino Quick Start Guide](https://docs.m5stack.com/en/quick_start/coreink/arduino) for detailed environment setup instructions) 23 | 24 | 1. Install Arduino IDE (see software requirements) 25 | 26 | 2. Open Arduino IDE, and configure the boards manager: 27 | 28 | * In the Arduino IDE, navigate to **File Menu** -> **Preferences** 29 | 30 | * Locate the **Additional Boards Manager** setting and add the following URL to it: `https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json` 31 | * ![additional-boards](docs/pictures/preferences-m5-arduino.png) 32 | 33 | * Navigate to **Tools Menu** -> **Board: (XXX)** -> **Boards Manager** 34 | * Search for "**`M5Stack`**" (by **M5Stack official**) and install the board configuration 35 | * ![boards-manager](docs/pictures/boards-manager-m5stack.png) 36 | * Set the board configuration: **Tools Menu** -> **Board: (XXX)** -> **M5Stack Arduino** -> **M5Stack-CoreInk** 37 | * ![boards-menu](docs/pictures/boards-menu.png) 38 | 39 | 3. Install the **M5-CoreInk** Libraries: 40 | * **Sketch Menu** -> **Include Library** -> **Manage Libraries** 41 | * Search for "**`CoreInk`**" and install the **M5-CoreInk** library (by Hades) 42 | * ![libraries-coreink](docs/pictures/library-manager-coreink.png) 43 | * Search for "**`M5 Stack`**" and install the **M5Stack** library (by M5) 44 | * ![libraries-m5stack](docs/pictures/library-manager-m5stack.png) 45 | 46 | 4. Download and extract the latest release of this source from [here](https://github.com/smolting/m5-bitclock/releases) 47 | 48 | 49 | 5. In Arduino IDE, open m5-bitclock.ino sketch in the directory you extracted from the release archive (**File** -> **Open**) 50 | 51 | 6. The Arduino IDE will display a tab for every source file. Locate the tab for `preferences.c`, and in it, change the SSID and password values to reflect the WiFi network you would like the m5-bitclock to connect to: 52 | ``` 53 | const WifiConfiguration WIFI_CONFIGURATION = { "MyHomeWifiRouter", "p@55w0rd" }; 54 | ``` 55 | 56 | 7. Connect the M5 CoreInk to a USB port, and configure the correct USB port: 57 | * **Tools Menu** -> **Port: (XXX)** -> **dev/ttyUSB0** -> **M5Stack-CoreInk** 58 | * ![ports-menu](docs/pictures/port-menu.png) 59 | 60 | 8. Upload the software: 61 | * Using the menu item: **Sketch Menu** -> **Upload** 62 | * ![menu-upload](docs/pictures/sketch-upload.png) 63 | * or with the **Upload** button: 64 | * ![upload-button](docs/pictures/upload-button.png) 65 | 66 | ## Contributing 67 | 68 | See **Installation Instructions** for development environment setup 69 | 70 | -------------------------------------------------------------------------------- /WifiConfiguration.h: -------------------------------------------------------------------------------- 1 | typedef struct { 2 | char ssid[33]; 3 | char password[64]; 4 | } WifiConfiguration; 5 | -------------------------------------------------------------------------------- /battery_icon.cpp: -------------------------------------------------------------------------------- 1 | 2 | // 'battery_small_0', 32x16px 3 | unsigned char battery_0[64] = { 4 | 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe7, 5 | 0xff, 0xff, 0xcf, 0xe7, 0xff, 0xff, 0xcf, 0xe7, 0xff, 0xff, 0xc7, 0xe7, 0xff, 6 | 0xff, 0xe7, 0xe7, 0xff, 0xff, 0xe7, 0xe7, 0xff, 0xff, 0xe7, 0xe7, 0xff, 0xff, 7 | 0xe7, 0xe7, 0xff, 0xff, 0xc7, 0xe7, 0xff, 0xff, 0xcf, 0xe7, 0xff, 0xff, 0xcf, 8 | 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff 9 | }; 10 | // 'battery_25', 32x16px 11 | unsigned char battery_25[64] = { 12 | 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe7, 13 | 0xff, 0xff, 0xcf, 0xe4, 0x3f, 0xff, 0xcf, 0xe4, 0x3f, 0xff, 0xc7, 0xe4, 0x3f, 14 | 0xff, 0xe7, 0xe4, 0x3f, 0xff, 0xe7, 0xe4, 0x3f, 0xff, 0xe7, 0xe4, 0x3f, 0xff, 15 | 0xe7, 0xe4, 0x3f, 0xff, 0xc7, 0xe4, 0x3f, 0xff, 0xcf, 0xe7, 0xff, 0xff, 0xcf, 16 | 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff 17 | }; 18 | // 'battery_50', 32x16px 19 | unsigned char battery_50[64] = { 20 | 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe7, 21 | 0xff, 0xff, 0xcf, 0xe4, 0x21, 0xff, 0xcf, 0xe4, 0x21, 0xff, 0xc7, 0xe4, 0x21, 22 | 0xff, 0xe7, 0xe4, 0x21, 0xff, 0xe7, 0xe4, 0x21, 0xff, 0xe7, 0xe4, 0x21, 0xff, 23 | 0xe7, 0xe4, 0x21, 0xff, 0xc7, 0xe4, 0x21, 0xff, 0xcf, 0xe7, 0xff, 0xff, 0xcf, 24 | 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff 25 | }; 26 | // 'battery_75', 32x16px 27 | unsigned char battery_75[64] = { 28 | 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe7, 29 | 0xff, 0xff, 0xcf, 0xe4, 0x21, 0x0f, 0xcf, 0xe4, 0x21, 0x0f, 0xc7, 0xe4, 0x21, 30 | 0x0f, 0xe7, 0xe4, 0x21, 0x0f, 0xe7, 0xe4, 0x21, 0x0f, 0xe7, 0xe4, 0x21, 0x0f, 31 | 0xe7, 0xe4, 0x21, 0x0f, 0xc7, 0xe4, 0x21, 0x0f, 0xcf, 0xe7, 0xff, 0xff, 0xcf, 32 | 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff 33 | }; 34 | // 'battery_100', 26x14px 35 | unsigned char battery_100[64] = { 36 | 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe7, 37 | 0xff, 0xff, 0xcf, 0xe4, 0x21, 0x08, 0x4f, 0xe4, 0x21, 0x08, 0x47, 0xe4, 0x21, 38 | 0x08, 0x67, 0xe4, 0x21, 0x08, 0x67, 0xe4, 0x21, 0x08, 0x67, 0xe4, 0x21, 0x08, 39 | 0x67, 0xe4, 0x21, 0x08, 0x47, 0xe4, 0x21, 0x08, 0x4f, 0xe7, 0xff, 0xff, 0xcf, 40 | 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff 41 | }; 42 | -------------------------------------------------------------------------------- /block_16x_18._cpp: -------------------------------------------------------------------------------- 1 | #include "fontResource.h" 2 | 3 | const unsigned char Block16x18[] = { 4 | 5 | /* 0x00 [ ] [ 0 ] */ 6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x00, 0x00, 0x00, 0x00, 9 | 10 | /* 0x01 [ ! ] [ 1 ] */ 11 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 12 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 13 | 0xff, 0xff, 0xff, 0xff, 14 | 15 | /* 0x02 [ " ] [ 2 ] */ 16 | 0xf0, 0xf0, 0xf0, 0xf0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 17 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 18 | 0xff, 0xff, 0xff, 0xff, 19 | 20 | /* 0x03 [ # ] [ 3 ] */ 21 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc3, 0xf0, 0xc3, 0xf0, 0xc3, 0xf0, 0xc3, 0xc0, 0x00, 0xc0, 0x00, 22 | 0xf0, 0xc3, 0xf0, 0xc3, 0xc0, 0x00, 0xc0, 0x00, 0xf0, 0xc3, 0xf0, 0xc3, 0xf0, 0xc3, 0xf0, 0xc3, 23 | 0xff, 0xff, 0xff, 0xff, 24 | 25 | /* 0x04 [ $ ] [ 4 ] */ 26 | 0xff, 0x3f, 0xff, 0x3f, 0xf0, 0x03, 0xf0, 0x03, 0xc3, 0x30, 0xc3, 0x30, 0xc3, 0x3f, 0xc3, 0x3f, 27 | 0xf0, 0x03, 0xf0, 0x03, 0xff, 0x30, 0xff, 0x30, 0xc3, 0x30, 0xc3, 0x30, 0xf0, 0x03, 0xf0, 0x03, 28 | 0xff, 0x3f, 0xff, 0x3f, 29 | 30 | /* 0x05 [ % ] [ 5 ] */ 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, 0x00, 0x00, 34 | 35 | /* 0x06 [ & ] [ 6 ] */ 36 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xf0, 0x3f, 0xc3, 0x0f, 0xc3, 0x0f, 0xc3, 0x0f, 0xc3, 0x0f, 37 | 0xf0, 0x3c, 0xf0, 0x3c, 0xc3, 0x0c, 0xc3, 0x0c, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0c, 0xf0, 0x0c, 38 | 0xff, 0xff, 0xff, 0xff, 39 | 40 | /* 0x07 [ ' ] [ 7 ] */ 41 | 0xff, 0x0f, 0xff, 0x0f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 42 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 43 | 0xff, 0xff, 0xff, 0xff, 44 | 45 | /* 0x08 [ ( ] [ 8 ] */ 46 | 0xff, 0x0f, 0xff, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xf0, 0x3f, 0xf0, 0x3f, 0xf0, 0xff, 0xf0, 0xff, 47 | 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0x3f, 0xf0, 0x3f, 0xfc, 0x0f, 0xfc, 0x0f, 48 | 0xff, 0x0f, 0xff, 0x0f, 49 | 50 | /* 0x09 [ ) ] [ 9 ] */ 51 | 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0x3f, 0xf0, 0x3f, 0xfc, 0x0f, 0xfc, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 52 | 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xf0, 0x3f, 0xf0, 0x3f, 53 | 0xf0, 0xff, 0xf0, 0xff, 54 | 55 | /* 0x0A [ * ] [ 10 ] */ 56 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 57 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 58 | 0x00, 0x00, 0x00, 0x00, 59 | 60 | /* 0x0B [ + ] [ 11 ] */ 61 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 62 | 0xc0, 0x03, 0xc0, 0x03, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 63 | 0xff, 0xff, 0xff, 0xff, 64 | 65 | /* 0x0C [ , ] [ 12 ] */ 66 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 67 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 68 | 0x00, 0x00, 0x00, 0x00, 69 | 70 | /* 0x0D [ - ] [ 13 ] */ 71 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 72 | 0xc0, 0x03, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 73 | 0xff, 0xff, 0xff, 0xff, 74 | 75 | /* 0x0E [ . ] [ 14 ] */ 76 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 77 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 78 | 0xff, 0xff, 0xff, 0xff, 79 | 80 | /* 0x0F [ / ] [ 15 ] */ 81 | 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xfc, 0x3f, 0xfc, 0x3f, 82 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 83 | 0xf0, 0xff, 0xf0, 0xff, 84 | 85 | /* 0x10 [ 0 ] [ 16 ] */ 86 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x03, 0xc3, 0x03, 87 | 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0xc3, 0xc0, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 88 | 0xff, 0xff, 0xff, 0xff, 89 | 90 | /* 0x11 [ 1 ] [ 17 ] */ 91 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xf0, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 92 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xf0, 0x0f, 0xf0, 0x0f, 93 | 0xff, 0xff, 0xff, 0xff, 94 | 95 | /* 0x12 [ 2 ] [ 18 ] */ 96 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 97 | 0xfc, 0x0f, 0xfc, 0x0f, 0xf0, 0xff, 0xf0, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc0, 0x03, 0xc0, 0x03, 98 | 0xff, 0xff, 0xff, 0xff, 99 | 100 | /* 0x13 [ 3 ] [ 19 ] */ 101 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 102 | 0xf0, 0x0f, 0xf0, 0x0f, 0xff, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 103 | 0xff, 0xff, 0xff, 0xff, 104 | 105 | /* 0x14 [ 4 ] [ 20 ] */ 106 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 107 | 0xc0, 0x03, 0xc0, 0x03, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 108 | 0xff, 0xff, 0xff, 0xff, 109 | 110 | /* 0x15 [ 5 ] [ 21 ] */ 111 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 112 | 0xc0, 0x0f, 0xc0, 0x0f, 0xff, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 113 | 0xff, 0xff, 0xff, 0xff, 114 | 115 | /* 0x16 [ 6 ] [ 22 ] */ 116 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xfc, 0x0f, 0xf0, 0xff, 0xf0, 0xff, 0xc3, 0xff, 0xc3, 0xff, 117 | 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 118 | 0xff, 0xff, 0xff, 0xff, 119 | 120 | /* 0x17 [ 7 ] [ 23 ] */ 121 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0x0f, 0xff, 0x0f, 122 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 123 | 0xff, 0xff, 0xff, 0xff, 124 | 125 | /* 0x18 [ 8 ] [ 24 ] */ 126 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 127 | 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 128 | 0xff, 0xff, 0xff, 0xff, 129 | 130 | /* 0x19 [ 9 ] [ 25 ] */ 131 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 132 | 0xf0, 0x03, 0xf0, 0x03, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 133 | 0xff, 0xff, 0xff, 0xff, 134 | 135 | /* 0x1A [ : ] [ 26 ] */ 136 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 137 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 138 | 0xff, 0xff, 0xff, 0xff, 139 | 140 | /* 0x1B [ ; ] [ 27 ] */ 141 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 142 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143 | 0x00, 0x00, 0x00, 0x00, 144 | 145 | /* 0x1C [ < ] [ 28 ] */ 146 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 147 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 148 | 0x00, 0x00, 0x00, 0x00, 149 | 150 | /* 0x1D [ = ] [ 29 ] */ 151 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 152 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 153 | 0xff, 0xff, 0xff, 0xff, 154 | 155 | /* 0x1E [ > ] [ 30 ] */ 156 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 157 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 158 | 0x00, 0x00, 0x00, 0x00, 159 | 160 | /* 0x1F [ ? ] [ 31 ] */ 161 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 162 | 0xff, 0x0f, 0xff, 0x0f, 0xfc, 0x3f, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 163 | 0xff, 0xff, 0xff, 0xff, 164 | 165 | /* 0x20 [ @ ] [ 32 ] */ 166 | 0xf0, 0x03, 0xf0, 0x03, 0xcf, 0xfc, 0xcf, 0xfc, 0x3c, 0x0c, 0x3c, 0x0c, 0x33, 0xcc, 0x33, 0xcc, 167 | 0x33, 0xcc, 0x33, 0xcc, 0x3c, 0x00, 0x3c, 0x00, 0xcf, 0xff, 0xcf, 0xff, 0xf0, 0x00, 0xf0, 0x00, 168 | 0xff, 0xff, 0xff, 0xff, 169 | 170 | /* 0x21 [ A ] [ 33 ] */ 171 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf3, 0xcf, 0xf3, 0xcf, 172 | 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0x03, 0xc0, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 173 | 0xff, 0xff, 0xff, 0xff, 174 | 175 | /* 0x22 [ B ] [ 34 ] */ 176 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 177 | 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0x0f, 0xc0, 0x0f, 178 | 0xff, 0xff, 0xff, 0xff, 179 | 180 | /* 0x23 [ C ] [ 35 ] */ 181 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xff, 182 | 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 183 | 0xff, 0xff, 0xff, 0xff, 184 | 185 | /* 0x24 [ D ] [ 36 ] */ 186 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 187 | 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc0, 0x0f, 0xc0, 0x0f, 188 | 0xff, 0xff, 0xff, 0xff, 189 | 190 | /* 0x25 [ E ] [ 37 ] */ 191 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 192 | 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc0, 0x03, 0xc0, 0x03, 193 | 0xff, 0xff, 0xff, 0xff, 194 | 195 | /* 0x26 [ F ] [ 38 ] */ 196 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 197 | 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 198 | 0xff, 0xff, 0xff, 0xff, 199 | 200 | /* 0x27 [ G ] [ 39 ] */ 201 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xff, 202 | 0xc3, 0x03, 0xc3, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 203 | 0xff, 0xff, 0xff, 0xff, 204 | 205 | /* 0x28 [ H ] [ 40 ] */ 206 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 207 | 0xc0, 0x03, 0xc0, 0x03, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 208 | 0xff, 0xff, 0xff, 0xff, 209 | 210 | /* 0x29 [ I ] [ 41 ] */ 211 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 212 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xc0, 0x03, 0xc0, 0x03, 213 | 0xff, 0xff, 0xff, 0xff, 214 | 215 | /* 0x2A [ J ] [ 42 ] */ 216 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xfc, 0x03, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 217 | 0xff, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 218 | 0xff, 0xff, 0xff, 0xff, 219 | 220 | /* 0x2B [ K ] [ 43 ] */ 221 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x0f, 0xc3, 0x0f, 222 | 0xc0, 0x3f, 0xc0, 0x3f, 0xc3, 0x0f, 0xc3, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 223 | 0xff, 0xff, 0xff, 0xff, 224 | 225 | /* 0x2C [ L ] [ 44 ] */ 226 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 227 | 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc0, 0x03, 0xc0, 0x03, 228 | 0xff, 0xff, 0xff, 0xff, 229 | 230 | /* 0x2D [ M ] [ 45 ] */ 231 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xf3, 0xc3, 0xf3, 0xc0, 0xc3, 0xc0, 0xc3, 0xc0, 0x03, 0xc0, 0x03, 232 | 0xc3, 0x33, 0xc3, 0x33, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 233 | 0xff, 0xff, 0xff, 0xff, 234 | 235 | /* 0x2E [ N ] [ 46 ] */ 236 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xf3, 0xc3, 0xf3, 0xc0, 0xc3, 0xc0, 0xc3, 0xc0, 0x03, 0xc0, 0x03, 237 | 0xc3, 0x33, 0xc3, 0x33, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 238 | 0xff, 0xff, 0xff, 0xff, 239 | 240 | /* 0x2F [ O ] [ 47 ] */ 241 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 242 | 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 243 | 0xff, 0xff, 0xff, 0xff, 244 | 245 | /* 0x30 [ P ] [ 48 ] */ 246 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 247 | 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xff, 248 | 0xff, 0xff, 0xff, 0xff, 249 | 250 | /* 0x31 [ Q ] [ 49 ] */ 251 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 252 | 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 253 | 0xff, 0xc0, 0xff, 0xc0, 254 | 255 | /* 0x32 [ R ] [ 50 ] */ 256 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 257 | 0xc0, 0x0f, 0xc0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 258 | 0xff, 0xff, 0xff, 0xff, 259 | 260 | /* 0x33 [ S ] [ 51 ] */ 261 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xff, 262 | 0xf0, 0x0f, 0xf0, 0x0f, 0xff, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 263 | 0xff, 0xff, 0xff, 0xff, 264 | 265 | /* 0x34 [ T ] [ 52 ] */ 266 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 267 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 268 | 0xff, 0xff, 0xff, 0xff, 269 | 270 | /* 0x35 [ U ] [ 53 ] */ 271 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 272 | 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 273 | 0xff, 0xff, 0xff, 0xff, 274 | 275 | /* 0x36 [ V ] [ 54 ] */ 276 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 277 | 0xf3, 0xcf, 0xf3, 0xcf, 0xf0, 0x0f, 0xf0, 0x0f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 278 | 0xff, 0xff, 0xff, 0xff, 279 | 280 | /* 0x37 [ W ] [ 55 ] */ 281 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 0xc3, 0xf3, 282 | 0xc3, 0x33, 0xc3, 0x33, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0xc3, 0xc0, 0xc3, 0xc3, 0xf3, 0xc3, 0xf3, 283 | 0xff, 0xff, 0xff, 0xff, 284 | 285 | /* 0x38 [ X ] [ 56 ] */ 286 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xf0, 0x0f, 0xf0, 0x0f, 287 | 0xfc, 0x3f, 0xfc, 0x3f, 0xf0, 0x0f, 0xf0, 0x0f, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 288 | 0xff, 0xff, 0xff, 0xff, 289 | 290 | /* 0x39 [ Y ] [ 57 ] */ 291 | 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 292 | 0xf0, 0x0f, 0xf0, 0x0f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 293 | 0xff, 0xff, 0xff, 0xff, 294 | 295 | /* 0x3A [ Z ] [ 58 ] */ 296 | 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0x0f, 0xff, 0x0f, 297 | 0xfc, 0x3f, 0xfc, 0x3f, 0xf0, 0xff, 0xf0, 0xff, 0xc3, 0xff, 0xc3, 0xff, 0xc0, 0x03, 0xc0, 0x03, 298 | 0xff, 0xff, 0xff, 0xff, 299 | 300 | /* 0x3B [ [ ] [ 59 ] */ 301 | 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 302 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 303 | 0xfc, 0x0f, 0xfc, 0x0f, 304 | 305 | /* 0x3C [ \ ] [ 60 ] */ 306 | 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xfc, 0x3f, 0xfc, 0x3f, 307 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 308 | 0xff, 0x0f, 0xff, 0x0f, 309 | 310 | /* 0x3D [ ] ] [ 61 ] */ 311 | 0xf0, 0x3f, 0xf0, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 312 | 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 313 | 0xf0, 0x3f, 0xf0, 0x3f, 314 | 315 | /* 0x3E [ ^ ] [ 62 ] */ 316 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 317 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 318 | 0x00, 0x00, 0x00, 0x00, 319 | 320 | /* 0x3F [ _ ] [ 63 ] */ 321 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 322 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 323 | 0x00, 0x00, 0x00, 0x00, 324 | 325 | /* 0x40 [ ` ] [ 64 ] */ 326 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 327 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 328 | 0x00, 0x00, 0x00, 0x00, 329 | 330 | /* 0x41 [ a ] [ 65 ] */ 331 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 332 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 333 | 0x00, 0x00, 0x00, 0x00, 334 | 335 | /* 0x42 [ b ] [ 66 ] */ 336 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 337 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 338 | 0x00, 0x00, 0x00, 0x00, 339 | 340 | /* 0x43 [ c ] [ 67 ] */ 341 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 342 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 343 | 0x00, 0x00, 0x00, 0x00, 344 | 345 | /* 0x44 [ d ] [ 68 ] */ 346 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 347 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 348 | 0x00, 0x00, 0x00, 0x00, 349 | 350 | /* 0x45 [ e ] [ 69 ] */ 351 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 352 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 353 | 0x00, 0x00, 0x00, 0x00, 354 | 355 | /* 0x46 [ f ] [ 70 ] */ 356 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 357 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 358 | 0x00, 0x00, 0x00, 0x00, 359 | 360 | /* 0x47 [ g ] [ 71 ] */ 361 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 362 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 363 | 0x00, 0x00, 0x00, 0x00, 364 | 365 | /* 0x48 [ h ] [ 72 ] */ 366 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 367 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 368 | 0x00, 0x00, 0x00, 0x00, 369 | 370 | /* 0x49 [ i ] [ 73 ] */ 371 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 372 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 373 | 0x00, 0x00, 0x00, 0x00, 374 | 375 | /* 0x4A [ j ] [ 74 ] */ 376 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 377 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 378 | 0x00, 0x00, 0x00, 0x00, 379 | 380 | /* 0x4B [ k ] [ 75 ] */ 381 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 382 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 383 | 0x00, 0x00, 0x00, 0x00, 384 | 385 | /* 0x4C [ l ] [ 76 ] */ 386 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 387 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 388 | 0x00, 0x00, 0x00, 0x00, 389 | 390 | /* 0x4D [ m ] [ 77 ] */ 391 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 392 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 393 | 0x00, 0x00, 0x00, 0x00, 394 | 395 | /* 0x4E [ n ] [ 78 ] */ 396 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 397 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 398 | 0x00, 0x00, 0x00, 0x00, 399 | 400 | /* 0x4F [ o ] [ 79 ] */ 401 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 402 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 403 | 0x00, 0x00, 0x00, 0x00, 404 | 405 | /* 0x50 [ p ] [ 80 ] */ 406 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 407 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 408 | 0x00, 0x00, 0x00, 0x00, 409 | 410 | /* 0x51 [ q ] [ 81 ] */ 411 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 412 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 413 | 0x00, 0x00, 0x00, 0x00, 414 | 415 | /* 0x52 [ r ] [ 82 ] */ 416 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 417 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 418 | 0x00, 0x00, 0x00, 0x00, 419 | 420 | /* 0x53 [ s ] [ 83 ] */ 421 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 422 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 423 | 0x00, 0x00, 0x00, 0x00, 424 | 425 | /* 0x54 [ t ] [ 84 ] */ 426 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 427 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 428 | 0x00, 0x00, 0x00, 0x00, 429 | 430 | /* 0x55 [ u ] [ 85 ] */ 431 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 432 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 433 | 0x00, 0x00, 0x00, 0x00, 434 | 435 | /* 0x56 [ v ] [ 86 ] */ 436 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 437 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 438 | 0x00, 0x00, 0x00, 0x00, 439 | 440 | /* 0x57 [ w ] [ 87 ] */ 441 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 442 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 443 | 0x00, 0x00, 0x00, 0x00, 444 | 445 | /* 0x58 [ x ] [ 88 ] */ 446 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 447 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 448 | 0x00, 0x00, 0x00, 0x00, 449 | 450 | /* 0x59 [ y ] [ 89 ] */ 451 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 452 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 453 | 0x00, 0x00, 0x00, 0x00, 454 | 455 | /* 0x5A [ z ] [ 90 ] */ 456 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 457 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 458 | 0x00, 0x00, 0x00, 0x00, 459 | 460 | /* 0x5B [ { ] [ 91 ] */ 461 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 462 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 463 | 0x00, 0x00, 0x00, 0x00, 464 | 465 | /* 0x5C [ | ] [ 92 ] */ 466 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 467 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 468 | 0x00, 0x00, 0x00, 0x00, 469 | 470 | /* 0x5D [ } ] [ 93 ] */ 471 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 472 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 473 | 0x00, 0x00, 0x00, 0x00, 474 | 475 | /* 0x5E [ ~ ] [ 94 ] */ 476 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 477 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 478 | 0x00, 0x00, 0x00, 0x00 479 | 480 | }; 481 | 482 | Ink_eSPI_font_t AsciiFont16x18(16,18,Block16x18); 483 | -------------------------------------------------------------------------------- /block_8x9.cpp: -------------------------------------------------------------------------------- 1 | // 'block_8x9_0', 8x9px 2 | unsigned char block_8x9_0[9] = {0xff, 0xc3, 0x99, 0x91, 0x81, 3 | 0x89, 0x99, 0xc3, 0xff 4 | }; 5 | // 'block_8x9_1', 8x9px 6 | unsigned char block_8x9_1[9] = {0xff, 0xc7, 0xe7, 0xe7, 0xe7, 7 | 0xe7, 0xe7, 0xc3, 0xff 8 | }; 9 | // 'block_8x9_2', 8x9px 10 | unsigned char block_8x9_2[9] = {0xff, 0xc3, 0x99, 0xf9, 0xe3, 11 | 0xcf, 0x9f, 0x81, 0xff 12 | }; 13 | // 'block_8x9_3', 8x9px 14 | unsigned char block_8x9_3[9] = {0xff, 0xc3, 0x99, 0xf9, 0xc3, 15 | 0xf9, 0x99, 0xc3, 0xff 16 | }; 17 | // 'block_8x9_4', 8x9px 18 | unsigned char block_8x9_4[9] = {0xff, 0x99, 0x99, 0x99, 0x81, 19 | 0xf9, 0xf9, 0xf9, 0xff 20 | }; 21 | // 'block_8x9_5', 8x9px 22 | unsigned char block_8x9_5[9] = {0xff, 0x81, 0x9f, 0x9f, 0x83, 23 | 0xf9, 0x99, 0xc3, 0xff 24 | }; 25 | // 'block_8x9_6', 8x9px 26 | unsigned char block_8x9_6[9] = {0xff, 0xe3, 0xcf, 0x9f, 0x83, 27 | 0x99, 0x99, 0xc3, 0xff 28 | }; 29 | // 'block_8x9_7', 8x9px 30 | unsigned char block_8x9_7[9] = {0xff, 0x81, 0xf9, 0xf3, 0xe7, 31 | 0xe7, 0xcf, 0xcf, 0xff 32 | }; 33 | // 'block_8x9_8', 8x9px 34 | unsigned char block_8x9_8[9] = {0xff, 0xc3, 0x99, 0x99, 0xc3, 35 | 0x99, 0x99, 0xc3, 0xff 36 | }; 37 | // 'block_8x9_9', 8x9px 38 | unsigned char block_8x9_9[9] = {0xff, 0xc3, 0x99, 0x99, 0xc1, 39 | 0xf9, 0xf9, 0xc3, 0xff 40 | }; 41 | // 'block_8x9_A', 8x9px 42 | unsigned char block_8x9_A[9] = {0xff, 0xe7, 0xc3, 0xdb, 0x99, 43 | 0x81, 0x99, 0x99, 0xff 44 | }; 45 | // 'block_8x9_B', 8x9px 46 | unsigned char block_8x9_B[9] = {0xff, 0x83, 0x99, 0x99, 0x83, 47 | 0x99, 0x99, 0x83, 0xff 48 | }; 49 | // 'block_8x9_C', 8x9px 50 | unsigned char block_8x9_C[9] = {0xff, 0xc3, 0x99, 0x9f, 0x9f, 51 | 0x9f, 0x99, 0xc3, 0xff 52 | }; 53 | // 'block_8x9_D', 8x9px 54 | unsigned char block_8x9_D[9] = {0xff, 0x83, 0x99, 0x99, 0x99, 55 | 0x99, 0x99, 0x83, 0xff 56 | }; 57 | // 'block_8x9_E', 8x9px 58 | unsigned char block_8x9_E[9] = {0xff, 0x81, 0x9f, 0x9f, 0x83, 59 | 0x9f, 0x9f, 0x81, 0xff 60 | }; 61 | // 'block_8x9_F', 8x9px 62 | unsigned char block_8x9_F[9] = {0xff, 0x81, 0x9f, 0x9f, 0x83, 63 | 0x9f, 0x9f, 0x9f, 0xff 64 | }; 65 | // 'block_8x9_G', 8x9px 66 | unsigned char block_8x9_G[9] = {0xff, 0xc3, 0x99, 0x9f, 0x91, 67 | 0x99, 0x99, 0xc3, 0xff 68 | }; 69 | // 'block_8x9_H', 8x9px 70 | unsigned char block_8x9_H[9] = {0xff, 0x99, 0x99, 0x99, 0x81, 71 | 0x99, 0x99, 0x99, 0xff 72 | }; 73 | // 'block_8x9_I', 8x9px 74 | unsigned char block_8x9_I[9] = {0xff, 0x81, 0xe7, 0xe7, 0xe7, 75 | 0xe7, 0xe7, 0x81, 0xff 76 | }; 77 | // 'block_8x9_J', 8x9px 78 | unsigned char block_8x9_J[9] = {0xff, 0xe1, 0xf9, 0xf9, 0xf9, 79 | 0x99, 0x99, 0xc3, 0xff 80 | }; 81 | // 'block_8x9_K', 8x9px 82 | unsigned char block_8x9_K[9] = {0xff, 0x99, 0x99, 0x93, 0x87, 83 | 0x93, 0x99, 0x99, 0xff 84 | }; 85 | // 'block_8x9_L', 8x9px 86 | unsigned char block_8x9_L[9] = {0xff, 0x9f, 0x9f, 0x9f, 0x9f, 87 | 0x9f, 0x9f, 0x81, 0xff 88 | }; 89 | // 'block_8x9_M', 8x9px 90 | unsigned char block_8x9_M[9] = {0xff, 0x9d, 0x89, 0x81, 0x95, 91 | 0x9d, 0x9d, 0x9d, 0xff 92 | }; 93 | // 'block_8x9_N', 8x9px 94 | unsigned char block_8x9_N[9] = {0xff, 0x99, 0x99, 0x89, 0x81, 95 | 0x91, 0x99, 0x99, 0xff 96 | }; 97 | // 'block_8x9_O', 8x9px 98 | unsigned char block_8x9_O[9] = {0xff, 0xc3, 0x99, 0x99, 0x99, 99 | 0x99, 0x99, 0xc3, 0xff 100 | }; 101 | // 'block_8x9_P', 8x9px 102 | unsigned char block_8x9_P[9] = {0xff, 0x83, 0x99, 0x99, 0x83, 103 | 0x9f, 0x9f, 0x9f, 0xff 104 | }; 105 | // 'block_8x9_Q', 8x9px 106 | unsigned char block_8x9_Q[9] = {0xff, 0xc3, 0x99, 0x99, 0x99, 107 | 0x99, 0x99, 0xc3, 0xf8 108 | }; 109 | // 'block_8x9_R', 8x9px 110 | unsigned char block_8x9_R[9] = {0xff, 0x83, 0x99, 0x99, 0x83, 111 | 0x99, 0x99, 0x99, 0xff 112 | }; 113 | // 'block_8x9_S', 8x9px 114 | unsigned char block_8x9_S[9] = {0xff, 0xc3, 0x99, 0x9f, 0xc3, 115 | 0xf9, 0x99, 0xc3, 0xff 116 | }; 117 | // 'block_8x9_T', 8x9px 118 | unsigned char block_8x9_T[9] = {0xff, 0x81, 0xe7, 0xe7, 0xe7, 119 | 0xe7, 0xe7, 0xe7, 0xff 120 | }; 121 | // 'block_8x9_U', 8x9px 122 | unsigned char block_8x9_U[9] = {0xff, 0x99, 0x99, 0x99, 0x99, 123 | 0x99, 0x99, 0xc3, 0xff 124 | }; 125 | // 'block_8x9_V', 8x9px 126 | unsigned char block_8x9_V[9] = {0xff, 0x99, 0x99, 0x99, 0xdb, 127 | 0xc3, 0xe7, 0xe7, 0xff 128 | }; 129 | // 'block_8x9_W', 8x9px 130 | unsigned char block_8x9_W[9] = {0xff, 0x9d, 0x9d, 0x9d, 0x95, 131 | 0x81, 0x89, 0x9d, 0xff 132 | }; 133 | // 'block_8x9_X', 8x9px 134 | unsigned char block_8x9_X[9] = {0xff, 0x99, 0x99, 0xc3, 0xe7, 135 | 0xc3, 0x99, 0x99, 0xff 136 | }; 137 | // 'block_8x9_Y', 8x9px 138 | unsigned char block_8x9_Y[9] = {0xff, 0x99, 0x99, 0x99, 0xc3, 139 | 0xe7, 0xe7, 0xe7, 0xff 140 | }; 141 | // 'block_8x9_Z', 8x9px 142 | unsigned char block_8x9_Z[9] = {0xff, 0x81, 0xf9, 0xf3, 0xe7, 143 | 0xcf, 0x9f, 0x81, 0xff 144 | }; 145 | // 'block_8x9__ampersand', 8x9px 146 | unsigned char block_8x9__ampersand[9] = {0xff, 0xc7, 0x93, 0x93, 0xc6, 147 | 0x92, 0x99, 0xc2, 0xff 148 | }; 149 | // 'block_8x9__at', 8x9px 150 | unsigned char block_8x9__at[9] = {0xc1, 0xbe, 0x62, 0x5a, 0x5a, 151 | 0x60, 0xbf, 0xc0, 0xff 152 | }; 153 | // 'block_8x9__bracketleft', 8x9px 154 | unsigned char block_8x9__bracketleft[9] = {0xe3, 0xe7, 0xe7, 0xe7, 0xe7, 155 | 0xe7, 0xe7, 0xe7, 0xe3 156 | }; 157 | // 'block_8x9__bracketright', 8x9px 158 | unsigned char block_8x9__bracketright[9] = {0xc7, 0xe7, 0xe7, 0xe7, 0xe7, 159 | 0xe7, 0xe7, 0xe7, 0xc7 160 | }; 161 | // 'block_8x9__bslash', 8x9px 162 | unsigned char block_8x9__bslash[9] = {0xcf, 0xcf, 0xcf, 0xe7, 0xe7, 163 | 0xe7, 0xf3, 0xf3, 0xf3 164 | }; 165 | // 'block_8x9__colon', 8x9px 166 | unsigned char block_8x9__colon[9] = {0xff, 0xff, 0xe7, 0xe7, 0xff, 167 | 0xe7, 0xe7, 0xff, 0xff 168 | }; 169 | // 'block_8x9__dash', 8x9px 170 | unsigned char block_8x9__dash[9] = {0xff, 0xff, 0xff, 0xff, 0x81, 171 | 0xff, 0xff, 0xff, 0xff 172 | }; 173 | // 'block_8x9__dollar', 8x9px 174 | unsigned char block_8x9__dollar[9] = {0xf7, 0xc1, 0x94, 0x97, 0xc1, 175 | 0xf4, 0x94, 0xc1, 0xf7 176 | }; 177 | // 'block_8x9__doublequoteclose', 8x9px 178 | unsigned char block_8x9__doublequoteclose[9] = {0x88, 0x88, 0xcc, 0x99, 0xff, 179 | 0xff, 0xff, 0xff, 0xff 180 | }; 181 | // 'block_8x9__doublequoteopen', 8x9px 182 | unsigned char block_8x9__doublequoteopen[9] = {0xcc, 0x99, 0x88, 0x88, 0xff, 183 | 0xff, 0xff, 0xff, 0xff 184 | }; 185 | // 'block_8x9__equals', 8x9px 186 | unsigned char block_8x9__equals[9] = {0xff, 0xff, 0xff, 0x81, 0xff, 187 | 0x81, 0xff, 0xff, 0xff 188 | }; 189 | // 'block_8x9__euro', 8x9px 190 | unsigned char block_8x9__euro[9] = {0xff, 0xe1, 0xcc, 0x87, 0xcf, 191 | 0x87, 0xcc, 0xe1, 0xff 192 | }; 193 | // 'block_8x9__exclamation', 8x9px 194 | unsigned char block_8x9__exclamation[9] = {0xff, 0xe7, 0xe7, 0xe7, 0xe7, 195 | 0xe7, 0xff, 0xe7, 0xff 196 | }; 197 | // 'block_8x9__fslash', 8x9px 198 | unsigned char block_8x9__fslash[9] = {0xf3, 0xf3, 0xf3, 0xe7, 0xe7, 199 | 0xe7, 0xcf, 0xcf, 0xcf 200 | }; 201 | // 'block_8x9__octothorpe', 8x9px 202 | unsigned char block_8x9__octothorpe[9] = {0xff, 0xc9, 0xc9, 0x80, 0xc9, 203 | 0x80, 0xc9, 0xc9, 0xff 204 | }; 205 | // 'block_8x9__parensleft', 8x9px 206 | unsigned char block_8x9__parensleft[9] = {0xf3, 0xe3, 0xc7, 0xcf, 0xcf, 207 | 0xcf, 0xc7, 0xe3, 0xf3 208 | }; 209 | // 'block_8x9__parensright', 8x9px 210 | unsigned char block_8x9__parensright[9] = {0xcf, 0xc7, 0xe3, 0xf3, 0xf3, 211 | 0xf3, 0xe3, 0xc7, 0xcf 212 | }; 213 | // 'block_8x9__period', 8x9px 214 | unsigned char block_8x9__period[9] = {0xff, 0xff, 0xff, 0xff, 0xff, 215 | 0xff, 0x9f, 0x9f, 0xff 216 | }; 217 | // 'block_8x9__plus', 8x9px 218 | unsigned char block_8x9__plus[9] = {0xff, 0xff, 0xe7, 0xe7, 0x81, 219 | 0xe7, 0xe7, 0xff, 0xff 220 | }; 221 | // 'block_8x9__pound', 8x9px 222 | unsigned char block_8x9__pound[9] = {0xff, 0xe1, 0xcc, 0xcf, 0x83, 223 | 0xcf, 0xc4, 0x89, 0xff 224 | }; 225 | // 'block_8x9__question', 8x9px 226 | unsigned char block_8x9__question[9] = {0xff, 0xc3, 0x99, 0xf9, 0xf3, 227 | 0xe7, 0xff, 0xe7, 0xff 228 | }; 229 | // 'block_8x9__singlequoteclose', 8x9px 230 | unsigned char block_8x9__singlequoteclose[9] = {0xc7, 0xc7, 0xe7, 0xcf, 0xff, 231 | 0xff, 0xff, 0xff, 0xff 232 | }; 233 | // 'block_8x9__singlequoteopen', 8x9px 234 | unsigned char block_8x9__singlequoteopen[9] = {0xf3, 0xe7, 0xe3, 0xe3, 0xff, 235 | 0xff, 0xff, 0xff, 0xff 236 | }; 237 | // 'block_8x9__yen', 8x9px 238 | unsigned char block_8x9__yen[9] = {0xff, 0x99, 0x99, 0xdb, 0x81, 239 | 0xe7, 0x81, 0xe7, 0xff 240 | }; 241 | -------------------------------------------------------------------------------- /docs/pictures/boards-manager-m5stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/boards-manager-m5stack.png -------------------------------------------------------------------------------- /docs/pictures/boards-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/boards-menu.png -------------------------------------------------------------------------------- /docs/pictures/library-manager-coreink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/library-manager-coreink.png -------------------------------------------------------------------------------- /docs/pictures/library-manager-m5stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/library-manager-m5stack.png -------------------------------------------------------------------------------- /docs/pictures/m5-bitclock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/m5-bitclock.png -------------------------------------------------------------------------------- /docs/pictures/port-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/port-menu.png -------------------------------------------------------------------------------- /docs/pictures/preferences-m5-arduino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/preferences-m5-arduino.png -------------------------------------------------------------------------------- /docs/pictures/sketch-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/sketch-upload.png -------------------------------------------------------------------------------- /docs/pictures/upload-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/docs/pictures/upload-button.png -------------------------------------------------------------------------------- /fontExtension.h: -------------------------------------------------------------------------------- 1 | #include "M5CoreInk.h" 2 | #include 3 | 4 | extern const unsigned char Block16x18[]; 5 | 6 | extern Ink_eSPI_font_t AsciiFont16x18; 7 | -------------------------------------------------------------------------------- /hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | lineNumbers=() 4 | lines=() 5 | while read -r line ; do 6 | lineNumber=$(cut -d ":" -f1 <<< $line) 7 | line=$(cut -d ":" -f2 <<< $line) 8 | lineNumbers+=($lineNumber) 9 | lines+=("$line") 10 | echo "PRE-COMMIT: $line" 11 | sed -i "$lineNumber s/\(const WifiConfiguration .\+ =\) \(.*\)/\1 { \"SSID_HERE\", \"PASSWORD_HERE\" };/" preferences.c 12 | done < <(grep -Eon "\s*const WifiConfiguration (.+)" preferences.c) 13 | 14 | git add preferences.c 15 | 16 | for i in "${!lines[@]}"; do 17 | sed -i "${lineNumbers[$i]} s/.*/${lines[$i]}/" preferences.c 18 | done 19 | 20 | astyle --suffix=none --project=./.astylerc --recursive ./*.c,*.cpp,*.ino,*.h,*.hpp 21 | -------------------------------------------------------------------------------- /icon.cpp: -------------------------------------------------------------------------------- 1 | #include "icon.h" 2 | 3 | image_t seven_segment_26x42[10] = { 4 | {32, 48, 1, seven_segment_26x42_0, 0, 1}, 5 | {32, 48, 1, seven_segment_26x42_1, 0, 1}, 6 | {32, 48, 1, seven_segment_26x42_2, 0, 1}, 7 | {32, 48, 1, seven_segment_26x42_3, 0, 1}, 8 | {32, 48, 1, seven_segment_26x42_4, 0, 1}, 9 | {32, 48, 1, seven_segment_26x42_5, 0, 1}, 10 | {32, 48, 1, seven_segment_26x42_6, 0, 1}, 11 | {32, 48, 1, seven_segment_26x42_7, 0, 1}, 12 | {32, 48, 1, seven_segment_26x42_8, 0, 1}, 13 | {32, 48, 1, seven_segment_26x42_9, 0, 1}, 14 | }; 15 | 16 | image_t seven_segment_20x32[10] = {{24, 36, 1, seven_segment_20x32_0, 1, 1}, 17 | {24, 36, 1, seven_segment_20x32_1, 1, 1}, 18 | {24, 36, 1, seven_segment_20x32_2, 1, 1}, 19 | {24, 36, 1, seven_segment_20x32_3, 1, 1}, 20 | {24, 36, 1, seven_segment_20x32_4, 1, 1}, 21 | {24, 36, 1, seven_segment_20x32_5, 1, 1}, 22 | {24, 36, 1, seven_segment_20x32_6, 1, 1}, 23 | {24, 36, 1, seven_segment_20x32_7, 1, 1}, 24 | {24, 36, 1, seven_segment_20x32_8, 1, 1}, 25 | {24, 36, 1, seven_segment_20x32_9, 1, 1} 26 | }; 27 | 28 | image_t battery[5] = { 29 | {32, 16, 1, battery_0, 0, 0}, {32, 16, 1, battery_25, 0, 0}, 30 | {32, 16, 1, battery_50, 0, 0}, {32, 16, 1, battery_75, 0, 0}, 31 | {32, 16, 1, battery_100, 0, 0}, 32 | }; 33 | 34 | // 'chaintip_icon', 8x22px 35 | unsigned char chaintip[22] = {0xc3, 0x81, 0x3c, 0x3c, 0x3c, 0x24, 0x24, 0x24, 36 | 0x24, 0x24, 0x81, 0x81, 0x24, 0x24, 0x24, 0x24, 37 | 0x24, 0x3c, 0x3c, 0x3c, 0x81, 0xc3 38 | }; 39 | 40 | // 'dollar_sign', 8x26px 41 | unsigned char dollar_sign[26] = { 42 | 0xe7, 0xe7, 0xc3, 0x81, 0x24, 0x24, 0x24, 0x27, 0x27, 0x27, 0x27, 0x27, 0x81, 43 | 0x81, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0x24, 0x24, 0x24, 0x81, 0xc3, 0xe7, 0xe7 44 | }; 45 | // 'seven_segment_20x32_period', 8x36px 46 | unsigned char period[36] = { 47 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 48 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 49 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xff 50 | }; 51 | 52 | // 'megabytes', 16x32px 53 | unsigned char megabytes[64] = { 54 | 0x3c, 0xff, 0x3c, 0xff, 0x18, 0xff, 0x18, 0xff, 0x00, 0xff, 0x24, 0xff, 0x24, 55 | 0xff, 0x3c, 0xff, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x18, 0xff, 56 | 0x1c, 0xff, 0x18, 0xff, 0x01, 0xff, 0x18, 0xff, 0x1c, 0xff, 0x18, 0xff, 0x01, 57 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 58 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 59 | }; 60 | 61 | // 'sats', 16x32px 62 | unsigned char sats[64] = { 63 | 0xf3, 0xff, 0xf3, 0xff, 0xf3, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 64 | 0x3f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, 0x00, 0x3f, 0xff, 0xff, 65 | 0xff, 0xff, 0x00, 0x3f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xf3, 66 | 0xff, 0xf3, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 67 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 68 | }; 69 | 70 | image_t chaintip_icon = {8, 22, 1, chaintip, 0, 0}; 71 | image_t dollar_sign_icon = {8, 26, 1, dollar_sign, 0, 0}; 72 | image_t period_icon{8, 36, 1, period, -1, -1}; 73 | image_t sats_icon = {16, 32, 1, sats, 0, 0}; 74 | image_t megabytes_icon = {16, 32, 1, megabytes, 0, 0}; 75 | -------------------------------------------------------------------------------- /icon.h: -------------------------------------------------------------------------------- 1 | #include "utility/Ink_Sprite.h" 2 | typedef struct { 3 | int width; 4 | int height; 5 | int bitCount; 6 | unsigned char *ptr; 7 | int leftPadding; 8 | int rightPadding; 9 | } image_t; 10 | 11 | extern unsigned char seven_segment_26x42_0[192]; //"0" 12 | extern unsigned char seven_segment_26x42_1[192]; //"1" 13 | extern unsigned char seven_segment_26x42_2[192]; //"2" 14 | extern unsigned char seven_segment_26x42_3[192]; //"3" 15 | extern unsigned char seven_segment_26x42_4[192]; //"4" 16 | extern unsigned char seven_segment_26x42_5[192]; //"5" 17 | extern unsigned char seven_segment_26x42_6[192]; //"6" 18 | extern unsigned char seven_segment_26x42_7[192]; //"7" 19 | extern unsigned char seven_segment_26x42_8[192]; //"8" 20 | extern unsigned char seven_segment_26x42_9[192]; //"9" 21 | 22 | extern unsigned char seven_segment_20x32_0[108]; //"0" 23 | extern unsigned char seven_segment_20x32_1[108]; //"1" 24 | extern unsigned char seven_segment_20x32_2[108]; //"2" 25 | extern unsigned char seven_segment_20x32_3[108]; //"3" 26 | extern unsigned char seven_segment_20x32_4[108]; //"4" 27 | extern unsigned char seven_segment_20x32_5[108]; //"5" 28 | extern unsigned char seven_segment_20x32_6[108]; //"6" 29 | extern unsigned char seven_segment_20x32_7[108]; //"7" 30 | extern unsigned char seven_segment_20x32_8[108]; //"8" 31 | extern unsigned char seven_segment_20x32_9[108]; //"9" 32 | 33 | extern image_t seven_segment_26x42[10]; 34 | extern image_t seven_segment_20x32[10]; 35 | 36 | extern unsigned char battery_0[56]; //"0" 37 | extern unsigned char battery_25[56]; //"25" 38 | extern unsigned char battery_50[56]; //"50" 39 | extern unsigned char battery_75[56]; //"75" 40 | extern unsigned char battery_100[56]; //"100" 41 | 42 | extern image_t battery[5]; 43 | 44 | // extern image_t battery_small_100_icon; 45 | extern image_t chaintip_icon; 46 | extern image_t dollar_sign_icon; 47 | extern image_t period_icon; 48 | extern image_t megabytes_icon; 49 | extern image_t sats_icon; 50 | -------------------------------------------------------------------------------- /m5-bitclock.ino: -------------------------------------------------------------------------------- 1 | #include "M5CoreInk.h" 2 | #include "esp_adc_cal.h" 3 | #include "fontExtension.h" 4 | #include "icon.h" 5 | #include "preferences.h" 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | enum AppStateSource { NEW_STATE, PREFERENCES }; 14 | 15 | struct AppStateStruct { 16 | AppStateSource source; 17 | char price[11]; 18 | char chainTip[8]; 19 | char mempoolSize[5]; 20 | char nextBlockFee[5]; 21 | 22 | char date[10]; 23 | char time[10]; 24 | 25 | uint batteryIndex; 26 | 27 | int64_t lastNTPUpdate; 28 | int64_t lastMetricsUpdate; 29 | int64_t lastTimeUpdate; 30 | } DefaultAppState = {NEW_STATE, "", "", "", "", "", "", 0, 0, 0, 0}; 31 | 32 | typedef struct AppStateStruct AppState; 33 | 34 | Ink_Sprite InkPageSprite(&M5.M5Ink); 35 | Preferences preferences; 36 | 37 | void convertRTCToCTm(RTC rtc, struct tm *ctime) { 38 | 39 | RTC_DateTypeDef rtcDate; 40 | RTC_TimeTypeDef rtcTime; 41 | 42 | rtc.GetDate(&rtcDate); 43 | rtc.GetTime(&rtcTime); 44 | 45 | delay(500); 46 | 47 | ctime->tm_year = rtcDate.Year - 1900; 48 | ctime->tm_mon = rtcDate.Month - 1; 49 | ctime->tm_mday = rtcDate.Date; 50 | ctime->tm_sec = rtcTime.Seconds; 51 | ctime->tm_min = rtcTime.Minutes; 52 | ctime->tm_hour = rtcTime.Hours; 53 | } 54 | 55 | void setRTCTime(tm *timeinfo) { 56 | RTC_TimeTypeDef RTCtime; 57 | RTC_DateTypeDef RTCDate; 58 | RTCtime.Minutes = timeinfo->tm_min; 59 | RTCtime.Seconds = timeinfo->tm_sec; 60 | RTCtime.Hours = timeinfo->tm_hour; 61 | RTCDate.Year = timeinfo->tm_year + 1900; 62 | RTCDate.Month = timeinfo->tm_mon + 1; 63 | RTCDate.Date = timeinfo->tm_mday; 64 | RTCDate.WeekDay = timeinfo->tm_wday; 65 | 66 | M5.rtc.SetTime(&RTCtime); 67 | M5.rtc.SetDate(&RTCDate); 68 | } 69 | 70 | void formatRTC(RTC rtc, const char *dateFormatString, const char *timeFormatString, char *dateBuffer, char *timeBuffer, int dateBufferSize, int timeBufferSize) { 71 | struct tm ctime; 72 | convertRTCToCTm(rtc, &ctime); 73 | strftime(dateBuffer, dateBufferSize, dateFormatString, &ctime); 74 | strftime(timeBuffer, timeBufferSize, timeFormatString, &ctime); 75 | } 76 | 77 | float getBatteryVoltage() { 78 | analogSetPinAttenuation(35, ADC_11db); 79 | esp_adc_cal_characteristics_t *adc_chars = 80 | (esp_adc_cal_characteristics_t *)calloc( 81 | 1, sizeof(esp_adc_cal_characteristics_t)); 82 | esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 3600, 83 | adc_chars); 84 | uint16_t adcValue = analogRead(35); 85 | 86 | return float(esp_adc_cal_raw_to_voltage(adcValue, adc_chars)) * 25.1 / 5.1 / 87 | 1000; 88 | } 89 | 90 | bool initialize() { 91 | 92 | Wire1.begin(21, 22); 93 | uint8_t rtcData = M5.rtc.ReadReg(0x01); 94 | 95 | M5.begin(); 96 | preferences.begin("bcmicro", false); 97 | digitalWrite(LED_EXT_PIN, LOW); 98 | 99 | if (!M5.M5Ink.isInit()) { 100 | Serial.printf("Ink Init failed"); 101 | while (1) 102 | delay(100); 103 | } 104 | 105 | delay(1000); 106 | if (InkPageSprite.creatSprite(0, 0, 200, 200, true) != 0) { 107 | Serial.printf("Ink Sprite create failed"); 108 | } 109 | return ((rtcData & 0b00000100) == 0b00000100); 110 | } 111 | 112 | void getPreferenceString(const char *key, char *buf, char *defaultValue, uint8_t len, bool *exists) { 113 | if (preferences.isKey(key)) { 114 | preferences.getString(key, defaultValue).toCharArray(buf, len); 115 | *exists = true; 116 | } 117 | } 118 | 119 | void getPreferenceLong64(const char *key, int64_t *value, int defaultValue, bool *exists) { 120 | if (preferences.isKey(key)) { 121 | *value = preferences.getLong64(key, defaultValue); 122 | *exists = true; 123 | } 124 | } 125 | 126 | void getPreferenceUInt(const char *key, uint *value, int defaultValue, bool *exists) { 127 | if (preferences.isKey(key)) { 128 | *value = preferences.getUInt(key, defaultValue); 129 | *exists = true; 130 | } 131 | } 132 | 133 | AppState get_saved_app_state(Ink_Sprite *sprite) { 134 | AppState state = DefaultAppState; 135 | 136 | bool preferences_exist = false; 137 | bool *preferences_exist_ptr = &preferences_exist; 138 | 139 | getPreferenceString("price", state.price, "", 8, preferences_exist_ptr); 140 | getPreferenceString("chainTip", state.chainTip, "", 10, preferences_exist_ptr); 141 | getPreferenceString("mempoolSize", state.mempoolSize, "", 5, preferences_exist_ptr); 142 | getPreferenceString("nextBlockFee", state.nextBlockFee, "", 5, preferences_exist_ptr); 143 | getPreferenceString("date", state.date, "", 10, preferences_exist_ptr); 144 | getPreferenceString("time", state.time, "", 10, preferences_exist_ptr); 145 | getPreferenceUInt("battery", &state.batteryIndex, 0, preferences_exist_ptr); 146 | getPreferenceLong64("ntpMRU", &state.lastNTPUpdate, 0, preferences_exist_ptr); 147 | getPreferenceLong64("timeMRU", &state.lastTimeUpdate, 0, preferences_exist_ptr); 148 | getPreferenceLong64("metricsMRU", &state.lastMetricsUpdate, 0, preferences_exist_ptr); 149 | 150 | if (preferences_exist) 151 | state.source = PREFERENCES; 152 | 153 | return state; 154 | } 155 | 156 | void drawImageToSprite(int posX, int posY, image_t *imagePtr, 157 | Ink_Sprite *sprite) { 158 | sprite->drawBuff(posX, posY, imagePtr->width, imagePtr->height, 159 | imagePtr->ptr); 160 | } 161 | 162 | void drawNumeric(const char price[], int posX, int posY, image_t *font, 163 | Ink_Sprite *sprite, int decimalPlaces) { 164 | int pos = posX, rpad = 0, digits = 0, charIndex = 0; 165 | 166 | while (price[charIndex] != '\0' && digits < decimalPlaces) { 167 | int priceCharIndex = (price[charIndex] - '0'); 168 | image_t *fontCharacter; 169 | bool isPeriod = false; 170 | 171 | if (priceCharIndex >= 0 && priceCharIndex <= 9) { 172 | fontCharacter = &(font[priceCharIndex]); 173 | digits = digits + 1; 174 | } else { 175 | fontCharacter = &period_icon; 176 | isPeriod = true; 177 | } 178 | 179 | pos = rpad + pos + fontCharacter->leftPadding; 180 | drawImageToSprite(pos, isPeriod ? posY - 1 : posY, fontCharacter, sprite); 181 | pos = pos + fontCharacter->width; 182 | rpad = fontCharacter->rightPadding; 183 | charIndex = charIndex + 1; 184 | } 185 | } 186 | 187 | void drawPrice(char* price) { 188 | drawNumeric(price, 32, 87, seven_segment_26x42, &InkPageSprite, 6); 189 | } 190 | 191 | void drawBlockHeight(char* blockHeight) { 192 | drawNumeric(blockHeight, 40, 33, seven_segment_20x32, &InkPageSprite, 7); 193 | } 194 | 195 | void drawMempoolSize(char* mempoolSize) { 196 | drawNumeric(mempoolSize, 3, 154, seven_segment_20x32, &InkPageSprite, 3); 197 | } 198 | 199 | void drawNextBlockFee(char* nextBlockFee) { 200 | drawNumeric(nextBlockFee, 105, 154, seven_segment_20x32, &InkPageSprite, 3); 201 | } 202 | 203 | void drawTime(char *displayTime) { 204 | InkPageSprite.drawString(80, 5, displayTime); 205 | } 206 | 207 | void drawDate(char *displayDate) { 208 | InkPageSprite.drawString(5, 5, displayDate); 209 | } 210 | 211 | void drawBattery(uint batteryPercentage, Ink_Sprite *sprite) { 212 | uint batteryIconIndex = 213 | batteryPercentage >= 71 ? (uint)4 : 214 | batteryPercentage >= 51 ? (uint)3 : 215 | batteryPercentage >= 31 ? (uint)2 : 216 | batteryPercentage >= 11 ? (uint)1 : (uint)0; 217 | 218 | drawImageToSprite(165, 4, &battery[batteryIconIndex], sprite); 219 | // char bpBuff[4]; 220 | // snprintf(bpBuff, 4, "%d", batteryPercentage); 221 | // InkPageSprite.drawString(145, 5, bpBuff); 222 | } 223 | 224 | void draw_static_images() { 225 | drawImageToSprite(7, 35, &chaintip_icon, &InkPageSprite); 226 | drawImageToSprite(7, 89, &dollar_sign_icon, &InkPageSprite); 227 | drawImageToSprite(88, 156, &megabytes_icon, &InkPageSprite); 228 | drawImageToSprite(184, 156, &sats_icon, &InkPageSprite); 229 | 230 | InkPageSprite.FillRect(6, 24, 188, 1, 0); 231 | InkPageSprite.FillRect(6, 77, 188, 1, 0); 232 | InkPageSprite.FillRect(6, 143, 188, 1, 0); 233 | InkPageSprite.FillRect(101, 151, 1, 38, 0); 234 | } 235 | 236 | void draw_app_state(AppState *previousAppState, AppState *appState) { 237 | 238 | if ( !previousAppState || strncmp(previousAppState->price, appState->price, 11) != 0) { 239 | drawPrice(appState->price); 240 | } 241 | if (!previousAppState || strncmp (previousAppState->chainTip, appState->chainTip, 8 ) != 0) { 242 | drawBlockHeight(appState->chainTip); 243 | } 244 | if (!previousAppState || strncmp(previousAppState->mempoolSize, appState->mempoolSize, 5) != 0 ) { 245 | drawMempoolSize(appState->mempoolSize); 246 | } 247 | if (!previousAppState || strncmp(previousAppState->nextBlockFee, appState->nextBlockFee, 5) != 0 ) { 248 | drawNextBlockFee(appState->nextBlockFee); 249 | } 250 | if (!previousAppState || strncmp(previousAppState->date, appState->date, 10) != 0) { 251 | drawDate(appState->date); 252 | } 253 | drawTime(appState->time); 254 | drawBattery(appState->batteryIndex, &InkPageSprite); 255 | InkPageSprite.pushSprite(); 256 | } 257 | 258 | void retrievePrice(HTTPClient *http, char *priceBuf) { 259 | http->begin("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd&include_last_updated_at=true"); 260 | int httpCode = http->GET(); 261 | if (httpCode > 0) { // httpCode will be negative on error. 262 | if (httpCode == HTTP_CODE_OK) { // file found at server. 263 | String response = http->getString(); //.toCharArray(Buf, 256); 264 | int usd_index = response.lastIndexOf("usd") + 5; 265 | int usd_index_end = response.indexOf(",", usd_index); 266 | String parsedString = response.substring(usd_index, usd_index_end); 267 | parsedString.toCharArray(priceBuf, 256); 268 | } 269 | else { 270 | Serial.println("Price retrieval failed. HTTP Status not OK"); 271 | } 272 | } 273 | else { 274 | Serial.println("Price retrieval failed. HTTP Status is < 0"); 275 | } 276 | http->end(); 277 | } 278 | 279 | void retrieveBlockHeight(HTTPClient *http, char *chainTipBuf) { 280 | http->begin("https://mempool.space/api/blocks/tip/height"); 281 | int httpCode = http->GET(); 282 | if (httpCode > 0) { 283 | if (httpCode == HTTP_CODE_OK) { 284 | http->getString().toCharArray(chainTipBuf, 8); 285 | } 286 | else { 287 | Serial.println("Block height retrieval failed. HTTP Status not OK"); 288 | } 289 | } 290 | http->end(); 291 | } 292 | 293 | void retrieveMempoolSize(HTTPClient *http, char *mempoolSize) { 294 | http->begin("https://mempool.space/api/v1/fees/mempool-blocks"); 295 | int httpCode = http->GET(); 296 | if (httpCode > 0) { 297 | if (httpCode == HTTP_CODE_OK) { 298 | DynamicJsonDocument doc(2048); 299 | deserializeJson(doc, http->getStream()); 300 | JsonArray arr = doc.as(); 301 | int mempoolTotal = 0; 302 | for (JsonObject mempoolBlock : arr) { 303 | int mempoolBlockSize = mempoolBlock["blockSize"]; 304 | mempoolTotal = mempoolTotal + mempoolBlockSize; 305 | } 306 | sprintf(mempoolSize, "%.2f", (float)mempoolTotal / (float)1000000); 307 | } 308 | } 309 | http->end(); 310 | } 311 | 312 | void retrieveNextBlockFee(HTTPClient *http, char *nextBlockFee) { 313 | http->begin("https://mempool.space/api/v1/fees/recommended"); 314 | int httpCode = http->GET(); 315 | if (httpCode > 0) { 316 | if (httpCode == HTTP_CODE_OK) { 317 | DynamicJsonDocument doc(128); 318 | deserializeJson(doc, http->getStream()); 319 | int fastestFee = doc["fastestFee"]; 320 | sprintf(nextBlockFee, "%03d", fastestFee); 321 | } 322 | } 323 | http->end(); 324 | } 325 | 326 | void retrieveNTPTime() { 327 | configTime(3600 * UTC_OFFSET, 3600, "us.pool.ntp.org"); 328 | struct tm timeinfo; 329 | if (!getLocalTime(&timeinfo)) { 330 | return; 331 | } 332 | setRTCTime(&timeinfo); 333 | } 334 | 335 | void retrieveRTCTime(RTC rtc, char* date, int dateBufferSize, char* time, int timeBufferSize) { 336 | formatRTC(M5.rtc, DATE_FORMAT, TIME_FORMAT, date, time, dateBufferSize, timeBufferSize); 337 | } 338 | 339 | void retrieveBattery(uint *batteryPercentage) { 340 | float batteryVoltage1 = getBatteryVoltage(); 341 | char voltageDiagnostic[32]; 342 | uint bp = (batteryVoltage1 < 3.2) ? 0 : (batteryVoltage1 - 3.2) * 100; 343 | sprintf(voltageDiagnostic, "%.5g: %i", batteryVoltage1, bp); 344 | *batteryPercentage = bp; 345 | } 346 | 347 | AppState retrieveMetrics(AppState previousAppState, int64_t currentTime) { 348 | 349 | AppState retrievedAppState; 350 | HTTPClient http; 351 | time_t currentTimeTm = (time_t)currentTime; 352 | tm *localTime = localtime(¤tTimeTm); 353 | 354 | bool shouldRetrieveMetrics = previousAppState.lastMetricsUpdate == 0 || (localTime->tm_min % 10) == 0, 355 | shouldRetrieveNTPTime = previousAppState.lastNTPUpdate == 0 || (localTime->tm_min % 60) == 0, 356 | requiresWifi = shouldRetrieveMetrics || shouldRetrieveNTPTime; 357 | 358 | if (requiresWifi) { 359 | uint32_t connect_timeout = millis() + 10000; 360 | WiFi.begin(WIFI_CONFIGURATION.ssid, WIFI_CONFIGURATION.password); 361 | while ((WiFi.status() != WL_CONNECTED) && (millis() < connect_timeout)) { 362 | delay(500); 363 | } 364 | 365 | if (WiFi.status() == WL_CONNECTED) { 366 | 367 | if (shouldRetrieveMetrics) { 368 | http.setReuse(true); 369 | retrievePrice(&http, retrievedAppState.price); 370 | preferences.putString("price", String(retrievedAppState.price)); 371 | delay(200); 372 | 373 | retrieveBlockHeight(&http, retrievedAppState.chainTip); 374 | preferences.putString("chainTip", String(retrievedAppState.chainTip)); 375 | delay(200); 376 | 377 | retrieveMempoolSize(&http, retrievedAppState.mempoolSize); 378 | preferences.putString("mempoolSize", String(retrievedAppState.mempoolSize)); 379 | delay(200); 380 | 381 | retrieveNextBlockFee(&http, retrievedAppState.nextBlockFee); 382 | preferences.putString("nextBlockFee", String(retrievedAppState.nextBlockFee)); 383 | 384 | http.end(); 385 | retrievedAppState.lastMetricsUpdate = currentTime; 386 | preferences.putLong64("metricsMRU", currentTime); 387 | } 388 | 389 | if (shouldRetrieveNTPTime) { 390 | retrieveNTPTime(); 391 | retrievedAppState.lastNTPUpdate = currentTime; 392 | preferences.putLong64("ntpMRU", currentTime); 393 | } 394 | } 395 | else { 396 | Serial.println("Wifi Connection failure!"); 397 | } 398 | WiFi.disconnect(true); 399 | WiFi.mode(WIFI_OFF); 400 | } 401 | retrieveRTCTime(M5.rtc, retrievedAppState.date, 10, retrievedAppState.time, 10); 402 | retrievedAppState.lastTimeUpdate = currentTime; 403 | preferences.putString("time", retrievedAppState.time); 404 | preferences.putString("date", retrievedAppState.date); 405 | preferences.putLong64("timeMRU", currentTime); 406 | retrieveBattery(&retrievedAppState.batteryIndex); 407 | preferences.putUInt("battery", retrievedAppState.batteryIndex); 408 | return retrievedAppState; 409 | } 410 | 411 | void setup() { 412 | bool fromSleep = initialize(); // Powered on from RTC timer (as opposed to power button) 413 | AppState previousAppState = { .source = NEW_STATE }; 414 | 415 | struct tm ctimeStruct; 416 | convertRTCToCTm(M5.rtc, &ctimeStruct); 417 | int64_t epoch = (int64_t)mktime(&ctimeStruct); 418 | 419 | if (!fromSleep || ctimeStruct.tm_min % 10 == 0) { 420 | if (fromSleep) { 421 | previousAppState = get_saved_app_state(&InkPageSprite); 422 | draw_app_state(NULL, &previousAppState); 423 | } 424 | else { 425 | preferences.clear(); 426 | M5.M5Ink.clear(); 427 | delay(1000); 428 | draw_static_images(); 429 | } 430 | AppState retrievedAppState = retrieveMetrics(previousAppState, epoch); 431 | draw_app_state(&previousAppState, &retrievedAppState); 432 | } 433 | else { 434 | char timeBuffer[6]; 435 | tm lastMinuteTime = ctimeStruct; 436 | lastMinuteTime.tm_min = ctimeStruct.tm_min - 1; 437 | strftime(timeBuffer, 6, TIME_FORMAT, &lastMinuteTime); 438 | drawTime(timeBuffer); 439 | InkPageSprite.pushSprite(); 440 | delay(500); 441 | strftime(timeBuffer, 6, TIME_FORMAT, &ctimeStruct); 442 | drawTime(timeBuffer); 443 | InkPageSprite.pushSprite(); 444 | } 445 | RTC_TimeTypeDef currentTime; 446 | M5.rtc.GetTime(¤tTime); 447 | M5.shutdown(currentTime.Seconds < 30 ? 60 - currentTime.Seconds : 120 - currentTime.Seconds); 448 | } 449 | 450 | void loop() { 451 | } 452 | -------------------------------------------------------------------------------- /preferences.c: -------------------------------------------------------------------------------- 1 | #include "preferences.h" 2 | 3 | const WifiConfiguration WIFI_CONFIGURATION = { "SSID_HERE", "PASSWORD_HERE" }; 4 | 5 | // +10 -> Sydney, Melbourne, Yakutsk, Port Moresby 6 | // +9 -> Seoul, Tokyo 7 | // +8 -> Perth, Beijing, Manila, Singapore, Kuala Lumpur 8 | // +7 -> Jakarta, Bangkok, Phnom Pehn, Hanoi 9 | // +6 -> Astana, Almaty, Bishkek, Dhaka 10 | // +5 -> Karachi, Lahore, Faisalabad, Tashkent 11 | // +4 -> Baku, Tbilisi, Yerevan, Dubai, Moscow 12 | // +3 -> Nairobi, Baghdad, Khartoum, Mogadishu, Riyadh 13 | // +2 -> Athens, Sofia, Cairo, Riga, Istanbul, Helsinki, Jerusalem 14 | // +1 -> Amsterdam, Belgrade, Berlin, Budapest, Vienna, Prague, Brussels 15 | // +0 -> London, Dublin, Abidjan, Casablanca, Accra, Lisbon 16 | // -4 -> Santiago de Chile, La Paz, San Juan de Puerto Rico 17 | // -5 -> ET, New York, Washington D.C., Atlanta, Miami, Qeubec, Toronto 18 | // -6 -> CT, Belize City, Chicago, Dallas, Guadalajara, Guatemala City 19 | // -7 -> MT, Denver, Phoenix, Salt Lake City, Calgary 20 | // -8 -> PT, Seattle, Portland, San Francisco, Los Angeles, Vancouver 21 | // -9 -> Anchorage, Juneau, Mangareva 22 | // -10 -> Papeete, Honolulu 23 | 24 | const int UTC_OFFSET = -7; 25 | 26 | // Refer to https://en.cppreference.com/w/c/chrono/strftime for c date string formats 27 | // Some popular formats: 28 | // October 09, 2012 -> "%B %d, %Y" 29 | // 09 Oct 2012 -> "%d %b, %Y" 30 | // 10/09/2012 -> "%D" or "%m/%d/%Y" 31 | // 09/10/12 -> "%d/%m/%y" 32 | 33 | const char DATE_FORMAT[] = "%d %b"; 34 | const char TIME_FORMAT[] = "%H:%M"; -------------------------------------------------------------------------------- /preferences.h: -------------------------------------------------------------------------------- 1 | #include "WifiConfiguration.h" 2 | extern const WifiConfiguration WIFI_CONFIGURATION; 3 | extern const int UTC_OFFSET; 4 | extern const char DATE_FORMAT[]; 5 | extern const char TIME_FORMAT[]; -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_0.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_1.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_2.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_3.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_4.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_5.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_6.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_7.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_8.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_9.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_A.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_A.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_B.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_B.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_C.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_C.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_D.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_D.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_E.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_E.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_F.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_F.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_G.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_G.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_H.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_H.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_I.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_I.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_J.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_J.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_K.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_K.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_L.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_L.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_M.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_M.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_N.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_N.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_O.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_O.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_P.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_P.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_Q.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_Q.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_R.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_R.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_S.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_S.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_T.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_T.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_U.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_U.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_V.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_V.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_W.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_W.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_X.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_X.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_Y.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_Y.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8_Z.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8_Z.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__ampersand.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__ampersand.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__at.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__at.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__bracketleft.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__bracketleft.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__bracketright.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__bracketright.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__bslash.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__bslash.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__colon.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__colon.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__dash.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__dash.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__dollar.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__dollar.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__doublequoteclose.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__doublequoteclose.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__doublequoteopen.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__doublequoteopen.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__equals.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__equals.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__euro.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__euro.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__exclamation.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__exclamation.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__fslash.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__fslash.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__octothorpe.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__octothorpe.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__parensleft.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__parensleft.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__parensright.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__parensright.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__period.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__period.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__plus.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__plus.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__pound.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__pound.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__question.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__question.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__singlequoteclose.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__singlequoteclose.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__singlequoteopen.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__singlequoteopen.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/block_7x8__yen.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/block_7x8__yen.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/blocky_7x8_A.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/blocky_7x8_A.bmp -------------------------------------------------------------------------------- /resources/fonts/block_7x8/blocky_alpha_map.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/block_7x8/blocky_alpha_map.xcf -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_0.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_1.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_2.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_3.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_4.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_5.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_6.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_7.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_8.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_9.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_20x32/seven_segment_20x32_period.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_20x32/seven_segment_20x32_period.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_0.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_1.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_2.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_3.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_4.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_5.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_6.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_7.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_8.bmp -------------------------------------------------------------------------------- /resources/fonts/seven_segment_26x42/seven_segment_26x42_9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/fonts/seven_segment_26x42/seven_segment_26x42_9.bmp -------------------------------------------------------------------------------- /resources/icons/battery_small_0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/battery_small_0.bmp -------------------------------------------------------------------------------- /resources/icons/battery_small_100.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/battery_small_100.bmp -------------------------------------------------------------------------------- /resources/icons/battery_small_25.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/battery_small_25.bmp -------------------------------------------------------------------------------- /resources/icons/battery_small_50.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/battery_small_50.bmp -------------------------------------------------------------------------------- /resources/icons/battery_small_75.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/battery_small_75.bmp -------------------------------------------------------------------------------- /resources/icons/chaintip_icon.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/chaintip_icon.bmp -------------------------------------------------------------------------------- /resources/icons/dollar_sign.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/dollar_sign.bmp -------------------------------------------------------------------------------- /resources/icons/megabytes.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/megabytes.bmp -------------------------------------------------------------------------------- /resources/icons/megabytes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/megabytes.png -------------------------------------------------------------------------------- /resources/icons/sats.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/sats.bmp -------------------------------------------------------------------------------- /resources/icons/sats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smolting/m5-bitclock/daa481d826bbe767c106e1fe698451b91634a60e/resources/icons/sats.png -------------------------------------------------------------------------------- /seven_segment_20x32.cpp: -------------------------------------------------------------------------------- 1 | // 'seven_segment_20x32_0', 24x36px 2 | unsigned char seven_segment_20x32_0[108] = { 3 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 4 | 0xe8, 0x00, 0x13, 0xc4, 0x00, 0x23, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 5 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 6 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 7 | 0xc7, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xe3, 8 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 9 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 10 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc4, 0x00, 0x23, 0xe8, 0x00, 0x13, 11 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 12 | }; 13 | // 'seven_segment_20x32_1', 24x36px 14 | unsigned char seven_segment_20x32_1[108] = { 15 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 16 | 0xff, 0xff, 0xf3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 17 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 18 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 19 | 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 20 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 21 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 22 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xf3, 23 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 24 | }; 25 | // 'seven_segment_20x32_2', 24x36px 26 | unsigned char seven_segment_20x32_2[108] = { 27 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 28 | 0xf8, 0x00, 0x13, 0xfc, 0x00, 0x23, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 29 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 30 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 31 | 0xfc, 0x00, 0x23, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xc4, 0x00, 0x3f, 32 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 33 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 34 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc4, 0x00, 0x3f, 0xe8, 0x00, 0x1f, 35 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 36 | }; 37 | // 'seven_segment_20x32_3', 24x36px 38 | unsigned char seven_segment_20x32_3[108] = { 39 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 40 | 0xf8, 0x00, 0x13, 0xfc, 0x00, 0x23, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 41 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 42 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 43 | 0xfc, 0x00, 0x23, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xfc, 0x00, 0x23, 44 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 45 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 46 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xfc, 0x00, 0x23, 0xf8, 0x00, 0x13, 47 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 48 | }; 49 | // 'seven_segment_20x32_4', 24x36px 50 | unsigned char seven_segment_20x32_4[108] = { 51 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 52 | 0xef, 0xff, 0xf3, 0xc7, 0xff, 0xe3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 53 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 54 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 55 | 0xc4, 0x00, 0x23, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xfc, 0x00, 0x23, 56 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 57 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 58 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xf3, 59 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 60 | }; 61 | // 'seven_segment_20x32_5', 24x36px 62 | unsigned char seven_segment_20x32_5[108] = { 63 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 64 | 0xe8, 0x00, 0x1f, 0xc4, 0x00, 0x3f, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 65 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 66 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 67 | 0xc4, 0x00, 0x3f, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xfc, 0x00, 0x23, 68 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 69 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 70 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xfc, 0x00, 0x23, 0xf8, 0x00, 0x13, 71 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 72 | }; 73 | // 'seven_segment_20x32_6', 24x36px 74 | unsigned char seven_segment_20x32_6[108] = { 75 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 76 | 0xe8, 0x00, 0x1f, 0xc4, 0x00, 0x3f, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 77 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 78 | 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 79 | 0xc4, 0x00, 0x3f, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xc4, 0x00, 0x23, 80 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 81 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 82 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc4, 0x00, 0x23, 0xe8, 0x00, 0x13, 83 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 84 | }; 85 | // 'seven_segment_20x32_7', 24x36px 86 | unsigned char seven_segment_20x32_7[108] = { 87 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 88 | 0xe8, 0x00, 0x13, 0xc4, 0x00, 0x23, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 89 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 90 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 91 | 0xc7, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 92 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 93 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 94 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xf3, 95 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 96 | }; 97 | // 'seven_segment_20x32_8', 24x36px 98 | unsigned char seven_segment_20x32_8[108] = { 99 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 100 | 0xe8, 0x00, 0x13, 0xc4, 0x00, 0x23, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 101 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 102 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 103 | 0xc4, 0x00, 0x23, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xc4, 0x00, 0x23, 104 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 105 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 106 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc4, 0x00, 0x23, 0xe8, 0x00, 0x13, 107 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 108 | }; 109 | // 'seven_segment_20x32_9', 24x36px 110 | unsigned char seven_segment_20x32_9[108] = { 111 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 112 | 0xe8, 0x00, 0x13, 0xc4, 0x00, 0x23, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 113 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 114 | 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xff, 0xc3, 115 | 0xc4, 0x00, 0x23, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x1f, 0xfc, 0x00, 0x23, 116 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 117 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 118 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xfc, 0x00, 0x23, 0xf8, 0x00, 0x13, 119 | 0xf0, 0x00, 0x0f, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 120 | }; 121 | -------------------------------------------------------------------------------- /seven_segment_26x42.cpp: -------------------------------------------------------------------------------- 1 | // 'seven_segment_26x42_0', 32x48px 2 | unsigned char seven_segment_26x42_0[192] = { 3 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 4 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x67, 0xe3, 0x00, 5 | 0x00, 0xc7, 0xe1, 0x80, 0x01, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 6 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 7 | 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 8 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 9 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe1, 0xff, 0xff, 0x87, 0xe3, 0xff, 0xff, 10 | 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc7, 11 | 0xe1, 0xff, 0xff, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 12 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 13 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 14 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 15 | 0xe0, 0xff, 0xff, 0x07, 0xe1, 0x80, 0x01, 0x87, 0xe3, 0x00, 0x00, 0xc7, 0xe6, 16 | 0x00, 0x00, 0x67, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 17 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 18 | }; 19 | // 'seven_segment_26x42_1', 32x48px 20 | unsigned char seven_segment_26x42_1[192] = { 21 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 22 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 23 | 0xff, 0xc7, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 24 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 25 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 26 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 27 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 28 | 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 29 | 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 30 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 31 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 32 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 33 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xc7, 0xff, 34 | 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 35 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 36 | }; 37 | // 'seven_segment_26x42_2', 32x48px 38 | unsigned char seven_segment_26x42_2[192] = { 39 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 40 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x67, 0xff, 0x00, 41 | 0x00, 0xc7, 0xff, 0x80, 0x01, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 42 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 43 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 44 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 45 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0x00, 0x00, 46 | 0xc7, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xe3, 0x00, 0x00, 0xff, 47 | 0xe1, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 48 | 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 49 | 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 50 | 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 51 | 0xe0, 0xff, 0xff, 0xff, 0xe1, 0x80, 0x01, 0xff, 0xe3, 0x00, 0x00, 0xff, 0xe6, 52 | 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 53 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 54 | }; 55 | // 'seven_segment_26x42_3', 32x48px 56 | unsigned char seven_segment_26x42_3[192] = { 57 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 58 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x67, 0xff, 0x00, 59 | 0x00, 0xc7, 0xff, 0x80, 0x01, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 60 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 61 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 62 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 63 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0x00, 0x00, 64 | 0xc7, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0xc7, 65 | 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 66 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 67 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 68 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 69 | 0xff, 0xff, 0xff, 0x07, 0xff, 0x80, 0x01, 0x87, 0xff, 0x00, 0x00, 0xc7, 0xfe, 70 | 0x00, 0x00, 0x67, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 71 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 72 | }; 73 | // 'seven_segment_26x42_4', 32x48px 74 | unsigned char seven_segment_26x42_4[192] = { 75 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 76 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xe3, 0xff, 77 | 0xff, 0xc7, 0xe1, 0xff, 0xff, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 78 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 79 | 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 80 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 81 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe1, 0xff, 0xff, 0x87, 0xe3, 0x00, 0x00, 82 | 0xc7, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0xc7, 83 | 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 84 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 85 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 86 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 87 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xc7, 0xff, 88 | 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 89 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 90 | }; 91 | // 'seven_segment_26x42_5', 32x48px 92 | unsigned char seven_segment_26x42_5[192] = { 93 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 94 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x7f, 0xe3, 0x00, 95 | 0x00, 0xff, 0xe1, 0x80, 0x01, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 96 | 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 97 | 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 98 | 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 99 | 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x00, 100 | 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0xc7, 101 | 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 102 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 103 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 104 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 105 | 0xff, 0xff, 0xff, 0x07, 0xff, 0x80, 0x01, 0x87, 0xff, 0x00, 0x00, 0xc7, 0xfe, 106 | 0x00, 0x00, 0x67, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 107 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 108 | }; 109 | // 'seven_segment_26x42_6', 32x48px 110 | unsigned char seven_segment_26x42_6[192] = { 111 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 112 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x7f, 0xe3, 0x00, 113 | 0x00, 0xff, 0xe1, 0x80, 0x01, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 114 | 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 115 | 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 116 | 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 117 | 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x00, 118 | 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xe3, 0x00, 0x00, 0xc7, 119 | 0xe1, 0xff, 0xff, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 120 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 121 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 122 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 123 | 0xe0, 0xff, 0xff, 0x07, 0xe1, 0x80, 0x01, 0x87, 0xe3, 0x00, 0x00, 0xc7, 0xe6, 124 | 0x00, 0x00, 0x67, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 125 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 126 | }; 127 | // 'seven_segment_26x42_7', 32x48px 128 | unsigned char seven_segment_26x42_7[192] = { 129 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 130 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x67, 0xff, 0x00, 131 | 0x00, 0xc7, 0xff, 0x80, 0x01, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 132 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 133 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 134 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 135 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 136 | 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 137 | 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 138 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 139 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 140 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 141 | 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xc7, 0xff, 142 | 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 143 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 144 | }; 145 | // 'seven_segment_26x42_8', 32x48px 146 | unsigned char seven_segment_26x42_8[192] = { 147 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 148 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x67, 0xe3, 0x00, 149 | 0x00, 0xc7, 0xe1, 0x80, 0x01, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 150 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 151 | 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 152 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 153 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe1, 0xff, 0xff, 0x87, 0xe3, 0x00, 0x00, 154 | 0xc7, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xe3, 0x00, 0x00, 0xc7, 155 | 0xe1, 0xff, 0xff, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 156 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 157 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 158 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 159 | 0xe0, 0xff, 0xff, 0x07, 0xe1, 0x80, 0x01, 0x87, 0xe3, 0x00, 0x00, 0xc7, 0xe6, 160 | 0x00, 0x00, 0x67, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 161 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 162 | }; 163 | // 'seven_segment_26x42_9', 32x48px 164 | unsigned char seven_segment_26x42_9[192] = { 165 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 166 | 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xe6, 0x00, 0x00, 0x67, 0xe3, 0x00, 167 | 0x00, 0xc7, 0xe1, 0x80, 0x01, 0x87, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 168 | 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 169 | 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 170 | 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe0, 0xff, 171 | 0xff, 0x07, 0xe0, 0xff, 0xff, 0x07, 0xe1, 0xff, 0xff, 0x87, 0xe3, 0x00, 0x00, 172 | 0xc7, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0xc7, 173 | 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 174 | 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 175 | 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 176 | 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 177 | 0xff, 0xff, 0xff, 0x07, 0xff, 0x80, 0x01, 0x87, 0xff, 0x00, 0x00, 0xc7, 0xfe, 178 | 0x00, 0x00, 0x67, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 179 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 180 | }; 181 | --------------------------------------------------------------------------------