├── .gitignore ├── zephyr └── module.yml ├── assets ├── banner.png ├── battery.png ├── animation.gif ├── preview_2.png ├── preview_3.png ├── battery_charging.png ├── connectivity_usb.png ├── bluetooth_connected.png ├── bluetooth_searching.png ├── bluetooth_disconnected.png └── connectivity_bluetooth.png ├── boards └── shields │ └── nice_view_elemental │ ├── include │ ├── initialize_listeners.h │ ├── utils │ │ ├── rotate_connectivity_canvas.h │ │ ├── draw_background.h │ │ ├── draw_usb_logo.h │ │ ├── draw_bluetooth_logo.h │ │ ├── draw_bluetooth_searching.h │ │ ├── draw_bluetooth_logo_outlined.h │ │ └── draw_battery.h │ ├── images │ │ ├── usb_logo.h │ │ ├── background_0.h │ │ ├── background_1.h │ │ ├── background_2.h │ │ ├── background_3.h │ │ ├── background_4.h │ │ ├── background_5.h │ │ ├── background_6.h │ │ ├── bluetooth_logo.h │ │ ├── bluetooth_searching.h │ │ └── bluetooth_logo_outlined.h │ ├── fonts │ │ ├── custom_font_22.h │ │ ├── custom_font_44.h │ │ ├── custom_font_outline.h │ │ └── custom_font_shadow.h │ ├── central │ │ ├── render.h │ │ └── initialize_listeners.h │ ├── peripheral │ │ ├── render.h │ │ └── initialize_listeners.h │ ├── colors.h │ └── main.h │ ├── Kconfig.shield │ ├── nice_view_elemental.conf │ ├── nice_view_elemental.zmk.yml │ ├── nice_view_elemental.overlay │ ├── src │ ├── utils │ │ ├── draw_usb_logo.c │ │ ├── draw_bluetooth_logo.c │ │ ├── draw_bluetooth_searching.c │ │ ├── draw_bluetooth_logo_outlined.c │ │ ├── rotate_connectivity_canvas.c │ │ ├── draw_background.c │ │ └── draw_battery.c │ ├── images │ │ ├── usb_logo.c │ │ ├── bluetooth_logo.c │ │ ├── bluetooth_searching.c │ │ ├── bluetooth_logo_outlined.c │ │ ├── background_0.c │ │ ├── background_1.c │ │ ├── background_2.c │ │ ├── background_3.c │ │ ├── background_4.c │ │ ├── background_5.c │ │ └── background_6.c │ ├── peripheral │ │ ├── render.c │ │ └── initialize_listeners.c │ ├── main.c │ ├── central │ │ ├── render.c │ │ └── initialize_listeners.c │ └── fonts │ │ ├── custom_font_shadow.c │ │ ├── custom_font_22.c │ │ └── custom_font_outline.c │ ├── CMakeLists.txt │ └── Kconfig.defconfig ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | NOTES.md 2 | assets/originals/ 3 | -------------------------------------------------------------------------------- /zephyr/module.yml: -------------------------------------------------------------------------------- 1 | name: "nice!view Elemental" 2 | build: 3 | settings: 4 | board_root: . 5 | -------------------------------------------------------------------------------- /assets/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/banner.png -------------------------------------------------------------------------------- /assets/battery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/battery.png -------------------------------------------------------------------------------- /assets/animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/animation.gif -------------------------------------------------------------------------------- /assets/preview_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/preview_2.png -------------------------------------------------------------------------------- /assets/preview_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/preview_3.png -------------------------------------------------------------------------------- /assets/battery_charging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/battery_charging.png -------------------------------------------------------------------------------- /assets/connectivity_usb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/connectivity_usb.png -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/initialize_listeners.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void initialize_listeners(); 4 | -------------------------------------------------------------------------------- /assets/bluetooth_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/bluetooth_connected.png -------------------------------------------------------------------------------- /assets/bluetooth_searching.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/bluetooth_searching.png -------------------------------------------------------------------------------- /assets/bluetooth_disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/bluetooth_disconnected.png -------------------------------------------------------------------------------- /assets/connectivity_bluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevinpastor/nice-view-elemental/HEAD/assets/connectivity_bluetooth.png -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/rotate_connectivity_canvas.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void rotate_connectivity_canvas(); 4 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/Kconfig.shield: -------------------------------------------------------------------------------- 1 | config SHIELD_NICE_VIEW_ELEMENTAL 2 | def_bool $(shields_list_contains,nice_view_elemental) 3 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/usb_logo.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t usb_logo; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/fonts/custom_font_22.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_font_t custom_font_22; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/fonts/custom_font_44.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_font_t custom_font_44; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_0.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_0; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_1.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_1; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_2.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_2; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_3.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_3; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_4.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_4; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_5.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_5; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/background_6.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t background_6; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/bluetooth_logo.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t bluetooth_logo; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/central/render.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void render_battery(); 4 | void render_connectivity(); 5 | void render_main(); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/fonts/custom_font_outline.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_font_t custom_font_outline; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/fonts/custom_font_shadow.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_font_t custom_font_shadow; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/peripheral/render.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void render_battery(); 4 | void render_connectivity(); 5 | void render_main(); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/nice_view_elemental.conf: -------------------------------------------------------------------------------- 1 | # ZMK setting that enables the call to `lv_obj_t* zmk_display_status_screen()`. 2 | CONFIG_ZMK_DISPLAY=y 3 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/bluetooth_searching.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t bluetooth_searching; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/draw_background.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | void draw_background(lv_obj_t* canvas, unsigned index); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/images/bluetooth_logo_outlined.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | extern const lv_img_dsc_t bluetooth_logo_outlined; 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/draw_usb_logo.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | void draw_usb_logo(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/draw_bluetooth_logo.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | void draw_bluetooth_logo(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/draw_bluetooth_searching.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | void draw_bluetooth_searching(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/draw_bluetooth_logo_outlined.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | void draw_bluetooth_logo_outlined(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y); 6 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/colors.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | // For some reason, the colors seem to be inverted. 6 | #define FOREGROUND_COLOR lv_color_black() 7 | #define BACKGROUND_COLOR lv_color_white() 8 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/nice_view_elemental.zmk.yml: -------------------------------------------------------------------------------- 1 | file_format: "1" 2 | id: nice_view_elemental 3 | name: nice!view Elemental 4 | type: shield 5 | url: https://github.com/kevinpastor/nice-view-elemental 6 | requires: [nice_view_header] 7 | features: 8 | - display 9 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/utils/draw_battery.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | struct battery_state { 6 | uint8_t level; 7 | bool is_charging; 8 | }; 9 | 10 | void draw_battery(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y, struct battery_state state); 11 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/nice_view_elemental.overlay: -------------------------------------------------------------------------------- 1 | &nice_view_spi { 2 | status = "okay"; 3 | nice_view: ls0xx@0 { 4 | compatible = "sharp,ls0xx"; 5 | spi-max-frequency = <1000000>; 6 | reg = <0>; 7 | width = <160>; 8 | height = <68>; 9 | }; 10 | }; 11 | 12 | / { 13 | chosen { 14 | zephyr,display = &nice_view; 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/draw_usb_logo.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/draw_usb_logo.h" 2 | 3 | #include 4 | #include "../../include/images/usb_logo.h" 5 | 6 | void draw_usb_logo(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y) { 7 | lv_draw_img_dsc_t img_dsc; 8 | lv_draw_img_dsc_init(&img_dsc); 9 | 10 | lv_canvas_draw_img(canvas, x, y, &usb_logo, &img_dsc); 11 | } 12 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/draw_bluetooth_logo.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/draw_bluetooth_logo.h" 2 | 3 | #include 4 | #include "../../include/images/bluetooth_logo.h" 5 | 6 | void draw_bluetooth_logo(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y) { 7 | lv_draw_img_dsc_t img_dsc; 8 | lv_draw_img_dsc_init(&img_dsc); 9 | 10 | lv_canvas_draw_img(canvas, x, y, &bluetooth_logo, &img_dsc); 11 | } 12 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/draw_bluetooth_searching.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/draw_bluetooth_searching.h" 2 | 3 | #include 4 | #include "../../include/images/bluetooth_searching.h" 5 | 6 | void draw_bluetooth_searching(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y) { 7 | lv_draw_img_dsc_t img_dsc; 8 | lv_draw_img_dsc_init(&img_dsc); 9 | 10 | lv_canvas_draw_img(canvas, x, y, &bluetooth_searching, &img_dsc); 11 | } 12 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/draw_bluetooth_logo_outlined.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/draw_bluetooth_logo_outlined.h" 2 | 3 | #include 4 | #include "../../include/images/bluetooth_logo_outlined.h" 5 | 6 | void draw_bluetooth_logo_outlined(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y) { 7 | lv_draw_img_dsc_t img_dsc; 8 | lv_draw_img_dsc_init(&img_dsc); 9 | 10 | lv_canvas_draw_img(canvas, x, y, &bluetooth_logo_outlined, &img_dsc); 11 | } 12 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/peripheral/initialize_listeners.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../initialize_listeners.h" 4 | 5 | #include 6 | #include "../utils/draw_battery.h" 7 | 8 | struct connectivity_state { 9 | bool connected; 10 | }; 11 | 12 | struct states { 13 | unsigned background_index; 14 | struct battery_state battery; 15 | struct connectivity_state connectivity; 16 | }; 17 | 18 | extern struct states states; 19 | 20 | void initialize_listeners(); 21 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/central/initialize_listeners.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../initialize_listeners.h" 4 | 5 | #include 6 | #include 7 | #include 8 | #include "../utils/draw_battery.h" 9 | 10 | struct connectivity_state { 11 | struct zmk_endpoint_instance selected_endpoint; 12 | int active_profile_index; 13 | bool active_profile_connected; 14 | bool active_profile_bonded; 15 | }; 16 | 17 | struct layer_state { 18 | zmk_keymap_layer_index_t index; 19 | const char* name; 20 | }; 21 | 22 | struct states { 23 | unsigned background_index; 24 | struct battery_state battery; 25 | struct connectivity_state connectivity; 26 | struct layer_state layer; 27 | }; 28 | 29 | extern struct states states; 30 | 31 | void initialize_listeners(); 32 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/include/main.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | #define SCREEN_WIDTH 160 8 | #define SCREEN_HEIGHT 68 9 | 10 | #define TOP_WIDTH 25 11 | 12 | #define BATTERY_CANVAS_WIDTH (TOP_WIDTH) 13 | #define BATTERY_CANVAS_HEIGHT (SCREEN_HEIGHT / 2) 14 | 15 | #define CONNECTIVITY_CANVAS_WIDTH (SCREEN_HEIGHT / 2) 16 | #define CONNECTIVITY_CANVAS_HEIGHT (CONNECTIVITY_CANVAS_WIDTH) 17 | #define CONNECTIVITY_CANVAS_AVAILABLE_HEIGHT (TOP_WIDTH) 18 | 19 | #define MAIN_CANVAS_WIDTH (SCREEN_WIDTH - TOP_WIDTH) 20 | #define MAIN_CANVAS_HEIGHT (SCREEN_HEIGHT) 21 | 22 | extern lv_obj_t* battery_canvas; 23 | extern lv_color_t battery_canvas_buffer[]; 24 | 25 | extern lv_obj_t* connectivity_canvas; 26 | extern lv_color_t connectivity_canvas_buffer[]; 27 | 28 | extern lv_obj_t* main_canvas; 29 | extern lv_color_t main_canvas_buffer[]; 30 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/usb_logo.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/usb_logo.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_USB_LOGO 10 | #define LV_ATTRIBUTE_IMG_USB_LOGO 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_USB_LOGO uint8_t usb_logo_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x10, 0x00, 18 | 0x00, 0xf8, 0x00, 19 | 0x01, 0x10, 0x00, 20 | 0xe2, 0x00, 0x80, 21 | 0xff, 0xff, 0xc0, 22 | 0xe0, 0x80, 0x80, 23 | 0x00, 0x40, 0x00, 24 | 0x00, 0x3c, 0x00, 25 | 0x00, 0x0c, 0x00, 26 | }; 27 | 28 | const lv_img_dsc_t usb_logo = { 29 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 30 | .header.always_zero = 0, 31 | .header.reserved = 0, 32 | .header.w = 18, 33 | .header.h = 9, 34 | .data_size = 35, 35 | .data = usb_logo_map, 36 | }; 37 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/rotate_connectivity_canvas.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/rotate_connectivity_canvas.h" 2 | 3 | #include 4 | #include "../../include/main.h" 5 | #include "../../include/colors.h" 6 | 7 | void rotate_connectivity_canvas() { 8 | static lv_color_t cbuf_tmp[LV_CANVAS_BUF_SIZE_TRUE_COLOR(CONNECTIVITY_CANVAS_WIDTH, CONNECTIVITY_CANVAS_HEIGHT)]; 9 | memcpy(cbuf_tmp, connectivity_canvas_buffer, sizeof(cbuf_tmp)); 10 | 11 | lv_img_dsc_t img; 12 | img.data = (void*)cbuf_tmp; 13 | img.header.cf = LV_IMG_CF_TRUE_COLOR; 14 | img.header.w = CONNECTIVITY_CANVAS_WIDTH; 15 | img.header.h = CONNECTIVITY_CANVAS_HEIGHT; 16 | 17 | lv_canvas_fill_bg(connectivity_canvas, BACKGROUND_COLOR, LV_OPA_COVER); 18 | lv_canvas_transform( 19 | connectivity_canvas, 20 | &img, 21 | 900, LV_IMG_ZOOM_NONE, 22 | -1, 0, 23 | CONNECTIVITY_CANVAS_WIDTH / 2, CONNECTIVITY_CANVAS_HEIGHT / 2, 24 | false 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Kevin Pastor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/bluetooth_logo.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/bluetooth_logo.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_LOGO 10 | #define LV_ATTRIBUTE_IMG_BLUETOOTH_LOGO 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BLUETOOTH_LOGO uint8_t bluetooth_logo_map[] = { 14 | 0xfe, 0xfe, 0xfe, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x0f, 0x00, 18 | 0x3f, 0xc0, 19 | 0x7f, 0xe0, 20 | 0x7b, 0xe0, 21 | 0xf9, 0xf0, 22 | 0xfa, 0xf0, 23 | 0xeb, 0x70, 24 | 0xf2, 0xf0, 25 | 0xf9, 0xf0, 26 | 0xf2, 0xf0, 27 | 0xeb, 0x70, 28 | 0xfa, 0xf0, 29 | 0xf9, 0xf0, 30 | 0x7b, 0xe0, 31 | 0x7f, 0xe0, 32 | 0x3f, 0xc0, 33 | 0x0f, 0x00, 34 | }; 35 | 36 | const lv_img_dsc_t bluetooth_logo = { 37 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 38 | .header.always_zero = 0, 39 | .header.reserved = 0, 40 | .header.w = 12, 41 | .header.h = 17, 42 | .data_size = 42, 43 | .data = bluetooth_logo_map, 44 | }; 45 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/bluetooth_searching.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/bluetooth_searching.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_SEARCHING 10 | #define LV_ATTRIBUTE_IMG_BLUETOOTH_SEARCHING 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BLUETOOTH_SEARCHING uint8_t bluetooth_searching_map[] = { 14 | 0xfe, 0xfe, 0xfe, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x0f, 0x00, 18 | 0x30, 0xc0, 19 | 0x40, 0x20, 20 | 0x40, 0x20, 21 | 0x82, 0x10, 22 | 0x81, 0x10, 23 | 0x89, 0x10, 24 | 0x84, 0x90, 25 | 0x94, 0x90, 26 | 0x84, 0x90, 27 | 0x89, 0x10, 28 | 0x81, 0x10, 29 | 0x82, 0x10, 30 | 0x40, 0x20, 31 | 0x40, 0x20, 32 | 0x30, 0xc0, 33 | 0x0f, 0x00, 34 | }; 35 | 36 | const lv_img_dsc_t bluetooth_searching = { 37 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 38 | .header.always_zero = 0, 39 | .header.reserved = 0, 40 | .header.w = 12, 41 | .header.h = 17, 42 | .data_size = 42, 43 | .data = bluetooth_searching_map, 44 | }; 45 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/bluetooth_logo_outlined.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/bluetooth_logo_outlined.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BLUETOOTH_LOGO_OUTLINED 10 | #define LV_ATTRIBUTE_IMG_BLUETOOTH_LOGO_OUTLINED 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BLUETOOTH_LOGO_OUTLINED uint8_t bluetooth_logo_outlined_map[] = { 14 | 0xfe, 0xfe, 0xfe, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x0f, 0x00, 18 | 0x30, 0xc0, 19 | 0x40, 0x20, 20 | 0x44, 0x20, 21 | 0x86, 0x10, 22 | 0x85, 0x10, 23 | 0x94, 0x90, 24 | 0x8d, 0x10, 25 | 0x86, 0x10, 26 | 0x8d, 0x10, 27 | 0x94, 0x90, 28 | 0x85, 0x10, 29 | 0x86, 0x10, 30 | 0x44, 0x20, 31 | 0x40, 0x20, 32 | 0x30, 0xc0, 33 | 0x0f, 0x00, 34 | }; 35 | 36 | const lv_img_dsc_t bluetooth_logo_outlined = { 37 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 38 | .header.always_zero = 0, 39 | .header.reserved = 0, 40 | .header.w = 12, 41 | .header.h = 17, 42 | .data_size = 42, 43 | .data = bluetooth_logo_outlined_map, 44 | }; 45 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/peripheral/render.c: -------------------------------------------------------------------------------- 1 | #include "../../include/peripheral/render.h" 2 | 3 | #include 4 | #include 5 | #include "../../include/colors.h" 6 | #include "../../include/main.h" 7 | #include "../../include/peripheral/initialize_listeners.h" 8 | #include "../../include/utils/draw_battery.h" 9 | #include "../../include/utils/draw_background.h" 10 | #include "../../include/utils/draw_bluetooth_logo_outlined.h" 11 | #include "../../include/utils/draw_bluetooth_logo.h" 12 | #include "../../include/utils/rotate_connectivity_canvas.h" 13 | 14 | void render_battery() { 15 | lv_canvas_fill_bg(battery_canvas, BACKGROUND_COLOR, LV_OPA_COVER); 16 | 17 | draw_battery(battery_canvas, 7, 4, states.battery); 18 | } 19 | 20 | void render_connectivity() { 21 | lv_canvas_fill_bg(connectivity_canvas, BACKGROUND_COLOR, LV_OPA_COVER); 22 | 23 | if (states.connectivity.connected) { 24 | draw_bluetooth_logo(connectivity_canvas, 18, 4); 25 | } else { 26 | draw_bluetooth_logo_outlined(connectivity_canvas, 18, 4); 27 | } 28 | 29 | rotate_connectivity_canvas(); 30 | } 31 | 32 | void render_main() { 33 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_BACKGROUND) 34 | draw_background(main_canvas, states.background_index); 35 | #endif 36 | } 37 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(CONFIG_ZMK_DISPLAY AND CONFIG_NICE_VIEW_WIDGET_STATUS) 2 | zephyr_library_include_directories(${CMAKE_SOURCE_DIR}/include) 3 | 4 | zephyr_library_sources( 5 | ./src/main.c 6 | ./src/fonts/custom_font_22.c 7 | ./src/images/background_0.c 8 | ./src/images/background_1.c 9 | ./src/images/background_2.c 10 | ./src/images/background_3.c 11 | ./src/images/background_4.c 12 | ./src/images/background_5.c 13 | ./src/images/background_6.c 14 | ./src/images/bluetooth_logo_outlined.c 15 | ./src/images/bluetooth_logo.c 16 | ./src/images/bluetooth_searching.c 17 | ./src/images/usb_logo.c 18 | ./src/utils/draw_background.c 19 | ./src/utils/draw_battery.c 20 | ./src/utils/draw_bluetooth_logo_outlined.c 21 | ./src/utils/draw_bluetooth_logo.c 22 | ./src/utils/draw_bluetooth_searching.c 23 | ./src/utils/draw_usb_logo.c 24 | ./src/utils/rotate_connectivity_canvas.c 25 | ) 26 | 27 | if(NOT CONFIG_ZMK_SPLIT OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) 28 | zephyr_library_sources( 29 | ./src/central/initialize_listeners.c 30 | ./src/central/render.c 31 | # These are not included on the peripheral since they are only used for 32 | # displaying the layer name. 33 | ./src/fonts/custom_font_44.c 34 | ./src/fonts/custom_font_shadow.c 35 | ./src/fonts/custom_font_outline.c 36 | ) 37 | else() 38 | zephyr_library_sources( 39 | ./src/peripheral/initialize_listeners.c 40 | ./src/peripheral/render.c 41 | ) 42 | endif() 43 | endif() 44 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/draw_background.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/draw_background.h" 2 | 3 | #include 4 | #include "../../include/images/background_0.h" 5 | #include "../../include/images/background_1.h" 6 | #include "../../include/images/background_2.h" 7 | #include "../../include/images/background_3.h" 8 | #include "../../include/images/background_4.h" 9 | #include "../../include/images/background_5.h" 10 | #include "../../include/images/background_6.h" 11 | 12 | void draw_background(lv_obj_t* canvas, unsigned index) { 13 | lv_draw_img_dsc_t img_dsc; 14 | lv_draw_img_dsc_init(&img_dsc); 15 | 16 | switch (index % 7) { 17 | case 0: { 18 | lv_canvas_draw_img(canvas, 0, 0, &background_0, &img_dsc); 19 | break; 20 | } 21 | case 1: { 22 | lv_canvas_draw_img(canvas, 0, 0, &background_1, &img_dsc); 23 | break; 24 | } 25 | case 2: { 26 | lv_canvas_draw_img(canvas, 0, 0, &background_2, &img_dsc); 27 | break; 28 | } 29 | case 3: { 30 | lv_canvas_draw_img(canvas, 0, 0, &background_3, &img_dsc); 31 | break; 32 | } 33 | case 4: { 34 | lv_canvas_draw_img(canvas, 0, 0, &background_4, &img_dsc); 35 | break; 36 | } 37 | case 5: { 38 | lv_canvas_draw_img(canvas, 0, 0, &background_5, &img_dsc); 39 | break; 40 | } 41 | case 6: { 42 | lv_canvas_draw_img(canvas, 0, 0, &background_6, &img_dsc); 43 | break; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/Kconfig.defconfig: -------------------------------------------------------------------------------- 1 | if SHIELD_NICE_VIEW_ELEMENTAL 2 | config LV_Z_VDB_SIZE 3 | default 100 4 | 5 | config LV_DPI_DEF 6 | default 161 7 | 8 | config LV_Z_BITS_PER_PIXEL 9 | default 1 10 | 11 | choice LV_COLOR_DEPTH 12 | default LV_COLOR_DEPTH_1 13 | endchoice 14 | 15 | choice ZMK_DISPLAY_WORK_QUEUE 16 | default ZMK_DISPLAY_WORK_QUEUE_DEDICATED 17 | endchoice 18 | 19 | choice ZMK_DISPLAY_STATUS_SCREEN 20 | default ZMK_DISPLAY_STATUS_SCREEN_CUSTOM 21 | endchoice 22 | 23 | config LV_Z_MEM_POOL_SIZE 24 | default 4096 if ZMK_DISPLAY_STATUS_SCREEN_CUSTOM 25 | 26 | config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM 27 | imply NICE_VIEW_WIDGET_STATUS 28 | 29 | config NICE_VIEW_WIDGET_STATUS 30 | bool "Custom nice!view status widget" 31 | select LV_FONT_MONTSERRAT_16 32 | select LV_USE_IMG 33 | select LV_USE_CANVAS 34 | 35 | config NICE_VIEW_ELEMENTAL_ANIMATION 36 | bool "Enables the background animation." 37 | default y 38 | 39 | config NICE_VIEW_ELEMENTAL_ANIMATION_FRAME_MS 40 | int "Frame delay for the animation, in milliseconds." 41 | default 250 42 | 43 | config NICE_VIEW_ELEMENTAL_CAPITALIZATION 44 | bool "Enables full capitalization for the layer name." 45 | default y 46 | 47 | config NICE_VIEW_ELEMENTAL_BACKGROUND 48 | bool "Displays a background." 49 | default y 50 | 51 | config NICE_VIEW_ELEMENTAL_OUTLINE 52 | bool "Displays an outline around the shadow of the layer name." 53 | default y 54 | 55 | config NICE_VIEW_ELEMENTAL_SHADOW 56 | bool "Displays a shadow around the layer name." 57 | default y 58 | endif 59 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/main.c: -------------------------------------------------------------------------------- 1 | #include "../include/main.h" 2 | 3 | #include 4 | #include "../include/initialize_listeners.h" 5 | 6 | lv_obj_t* battery_canvas; 7 | lv_color_t battery_canvas_buffer[ 8 | LV_CANVAS_BUF_SIZE_TRUE_COLOR( 9 | BATTERY_CANVAS_WIDTH, 10 | BATTERY_CANVAS_HEIGHT 11 | ) 12 | ]; 13 | 14 | lv_obj_t* connectivity_canvas; 15 | lv_color_t connectivity_canvas_buffer[ 16 | LV_CANVAS_BUF_SIZE_TRUE_COLOR( 17 | CONNECTIVITY_CANVAS_WIDTH, 18 | CONNECTIVITY_CANVAS_HEIGHT 19 | ) 20 | ]; 21 | 22 | lv_obj_t* main_canvas; 23 | lv_color_t main_canvas_buffer[ 24 | LV_CANVAS_BUF_SIZE_TRUE_COLOR( 25 | MAIN_CANVAS_WIDTH, 26 | MAIN_CANVAS_HEIGHT 27 | ) 28 | ]; 29 | 30 | // ZMK calls this function directly in `app/src/display/main.c` of its source 31 | // code. 32 | lv_obj_t* zmk_display_status_screen() { 33 | // Setup the base screen. 34 | lv_obj_t* screen = lv_obj_create(NULL); 35 | lv_obj_set_size(screen, SCREEN_WIDTH, SCREEN_HEIGHT); 36 | 37 | // Create the battery canvas to be used in the `render_battery` function. 38 | battery_canvas = lv_canvas_create(screen); 39 | lv_obj_align(battery_canvas, LV_ALIGN_TOP_RIGHT, 0, 0); 40 | lv_canvas_set_buffer( 41 | battery_canvas, 42 | battery_canvas_buffer, 43 | BATTERY_CANVAS_WIDTH, 44 | BATTERY_CANVAS_HEIGHT, 45 | LV_IMG_CF_TRUE_COLOR 46 | ); 47 | 48 | // Create the info canvas to be used in the `render_connectivity` function. 49 | connectivity_canvas = lv_canvas_create(screen); 50 | lv_obj_align(connectivity_canvas, LV_ALIGN_BOTTOM_RIGHT, 0, 0); 51 | lv_canvas_set_buffer( 52 | connectivity_canvas, 53 | connectivity_canvas_buffer, 54 | CONNECTIVITY_CANVAS_WIDTH, 55 | CONNECTIVITY_CANVAS_HEIGHT, 56 | LV_IMG_CF_TRUE_COLOR 57 | ); 58 | 59 | // Create the main canvas to be used in the `render_main` function. 60 | main_canvas = lv_canvas_create(screen); 61 | lv_obj_align(main_canvas, LV_ALIGN_TOP_LEFT, 0, 0); 62 | lv_canvas_set_buffer( 63 | main_canvas, 64 | main_canvas_buffer, 65 | MAIN_CANVAS_WIDTH, 66 | MAIN_CANVAS_HEIGHT, 67 | LV_IMG_CF_TRUE_COLOR 68 | ); 69 | 70 | // Depending on which half the build is for, the implementation will differ. 71 | initialize_listeners(); 72 | 73 | return screen; 74 | } 75 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/utils/draw_battery.c: -------------------------------------------------------------------------------- 1 | #include "../../include/utils/draw_battery.h" 2 | 3 | #include 4 | #include "../../include/colors.h" 5 | 6 | static void draw_battery_outline(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y) { 7 | lv_draw_rect_dsc_t rect_dsc; 8 | lv_draw_rect_dsc_init(&rect_dsc); 9 | rect_dsc.bg_color = FOREGROUND_COLOR; 10 | 11 | lv_canvas_draw_rect(canvas, x + 10, y + 2, 1, 19, &rect_dsc); // Top 12 | lv_canvas_draw_rect(canvas, x + 2, y + 22, 7, 1, &rect_dsc); // Right 13 | lv_canvas_draw_rect(canvas, x, y + 2, 1, 19, &rect_dsc); // Bottom 14 | lv_canvas_draw_rect(canvas, x + 2, y, 7, 1, &rect_dsc); // Left 15 | 16 | lv_canvas_set_px_color(canvas, x + 9, y + 1, FOREGROUND_COLOR); // Top left 17 | lv_canvas_set_px_color(canvas, x + 9, y + 21, FOREGROUND_COLOR); // Top right 18 | lv_canvas_set_px_color(canvas, x + 1, y + 21, FOREGROUND_COLOR); // Bottom right 19 | lv_canvas_set_px_color(canvas, x + 1, y + 1, FOREGROUND_COLOR); // Bottom left 20 | 21 | lv_canvas_draw_rect(canvas, x + 4, y + 23, 3, 1, &rect_dsc); // Right-side terminal 22 | } 23 | 24 | // The lightning bolt is drawn line by line. 25 | static void draw_battery_lightning_bolt(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y) { 26 | lv_canvas_set_px_color(canvas, x + 8, y + 11, BACKGROUND_COLOR); 27 | lv_canvas_set_px_color(canvas, x + 8, y + 12, FOREGROUND_COLOR); 28 | lv_canvas_set_px_color(canvas, x + 8, y + 13, BACKGROUND_COLOR); 29 | 30 | lv_canvas_set_px_color(canvas, x + 7, y + 10, BACKGROUND_COLOR); 31 | lv_canvas_set_px_color(canvas, x + 7, y + 11, FOREGROUND_COLOR); 32 | lv_canvas_set_px_color(canvas, x + 7, y + 12, BACKGROUND_COLOR); 33 | 34 | lv_canvas_set_px_color(canvas, x + 6, y + 9, BACKGROUND_COLOR); 35 | lv_canvas_set_px_color(canvas, x + 6, y + 10, FOREGROUND_COLOR); 36 | lv_canvas_set_px_color(canvas, x + 6, y + 11, FOREGROUND_COLOR); 37 | lv_canvas_set_px_color(canvas, x + 6, y + 12, BACKGROUND_COLOR); 38 | 39 | lv_canvas_set_px_color(canvas, x + 5, y + 9, BACKGROUND_COLOR); 40 | lv_canvas_set_px_color(canvas, x + 5, y + 10, FOREGROUND_COLOR); 41 | lv_canvas_set_px_color(canvas, x + 5, y + 11, FOREGROUND_COLOR); 42 | lv_canvas_set_px_color(canvas, x + 5, y + 12, FOREGROUND_COLOR); 43 | lv_canvas_set_px_color(canvas, x + 5, y + 13, BACKGROUND_COLOR); 44 | 45 | lv_canvas_set_px_color(canvas, x + 4, y + 10, BACKGROUND_COLOR); 46 | lv_canvas_set_px_color(canvas, x + 4, y + 11, FOREGROUND_COLOR); 47 | lv_canvas_set_px_color(canvas, x + 4, y + 12, FOREGROUND_COLOR); 48 | lv_canvas_set_px_color(canvas, x + 4, y + 13, BACKGROUND_COLOR); 49 | 50 | lv_canvas_set_px_color(canvas, x + 3, y + 10, BACKGROUND_COLOR); 51 | lv_canvas_set_px_color(canvas, x + 3, y + 11, FOREGROUND_COLOR); 52 | lv_canvas_set_px_color(canvas, x + 3, y + 12, BACKGROUND_COLOR); 53 | 54 | lv_canvas_set_px_color(canvas, x + 2, y + 9, BACKGROUND_COLOR); 55 | lv_canvas_set_px_color(canvas, x + 2, y + 10, FOREGROUND_COLOR); 56 | lv_canvas_set_px_color(canvas, x + 2, y + 11, BACKGROUND_COLOR); 57 | } 58 | 59 | void draw_battery(lv_obj_t* canvas, lv_coord_t x, lv_coord_t y, struct battery_state state) { 60 | draw_battery_outline(canvas, x, y); 61 | 62 | // Draw the main part of the battery 63 | const int width = 19 * (state.level / 100.0); 64 | lv_draw_rect_dsc_t rect_dsc; 65 | lv_draw_rect_dsc_init(&rect_dsc); 66 | rect_dsc.bg_color = FOREGROUND_COLOR; 67 | lv_canvas_draw_rect(canvas, x + 2, y + 2, 7, width, &rect_dsc); 68 | 69 | // Round the corners 70 | lv_canvas_set_px_color(canvas, x + 8, y + 2, BACKGROUND_COLOR); // Top left 71 | lv_canvas_set_px_color(canvas, x + 8, y + 20, BACKGROUND_COLOR); // Top right 72 | lv_canvas_set_px_color(canvas, x + 2, y + 20, BACKGROUND_COLOR); // Bottom right 73 | lv_canvas_set_px_color(canvas, x + 2, y + 2, BACKGROUND_COLOR); // Bottom left 74 | 75 | if (state.is_charging) { 76 | draw_battery_lightning_bolt(canvas, x, y); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/peripheral/initialize_listeners.c: -------------------------------------------------------------------------------- 1 | #include "../../include/peripheral/initialize_listeners.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include "../../include/peripheral/render.h" 15 | 16 | struct states states; 17 | 18 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION) 19 | void background_update_timer(lv_timer_t* timer) 20 | { 21 | states.background_index = (states.background_index + 1) % UINT_MAX; 22 | 23 | render_main(); 24 | } 25 | 26 | lv_timer_t * timer; 27 | 28 | static void start_timer() { 29 | // Call the `background_update_timer` function every configured interval. 30 | timer = lv_timer_create(background_update_timer, CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION_FRAME_MS, NULL); 31 | } 32 | 33 | // We want to pause the animation when the keyboard is idling. 34 | int activity_update_callback(const zmk_event_t* eh) { 35 | struct zmk_activity_state_changed* ev = as_zmk_activity_state_changed(eh); 36 | if (ev == NULL) { 37 | return -ENOTSUP; 38 | } 39 | 40 | switch (ev->state) { 41 | case ZMK_ACTIVITY_ACTIVE: { 42 | lv_timer_resume(timer); 43 | break; 44 | } 45 | case ZMK_ACTIVITY_IDLE: 46 | case ZMK_ACTIVITY_SLEEP: { 47 | lv_timer_pause(timer); 48 | break; 49 | } 50 | default: { 51 | return -EINVAL; 52 | } 53 | } 54 | 55 | return 0; 56 | } 57 | 58 | // Create a listener named `activity_update`. This name is then used to create a 59 | // subscription. When subscribed, `activity_update_callback` will be called. 60 | ZMK_LISTENER( 61 | activity_update, 62 | activity_update_callback 63 | ); 64 | 65 | // Subscribe the `activity_update` listener to the `zmk_activity_state_changed` 66 | // event dispatched by ZMK. 67 | ZMK_SUBSCRIPTION( 68 | activity_update, 69 | zmk_activity_state_changed 70 | ); 71 | #endif 72 | 73 | static void battery_state_update_callback(struct battery_state state) { 74 | states.battery = state; 75 | 76 | render_battery(); 77 | } 78 | 79 | static struct battery_state get_battery_state(const zmk_event_t* event) { 80 | // `as_zmk_battery_state_changed(event)->state_of_charge` seems to be 81 | // usually used but the same value can be retrieved from the following. 82 | const uint8_t level = zmk_battery_state_of_charge(); 83 | const bool is_charging = zmk_usb_is_powered(); 84 | 85 | struct battery_state state = { 86 | .level = level, 87 | .is_charging = is_charging, 88 | }; 89 | 90 | return state; 91 | } 92 | 93 | // Create a listener named `widget_battery_state_update`. This name is then 94 | // used to create a subscription. 95 | ZMK_DISPLAY_WIDGET_LISTENER( 96 | widget_battery_state_update, 97 | struct battery_state, 98 | // Called after `get_battery_state` with the value it returned. 99 | battery_state_update_callback, 100 | get_battery_state 101 | ) 102 | 103 | // Subscribe the `widget_battery_state_update` listener to the 104 | // `zmk_battery_state_changed` event dispatched by ZMK. 105 | ZMK_SUBSCRIPTION( 106 | widget_battery_state_update, 107 | // Triggered when the computed battery percentage has changed. 108 | zmk_battery_state_changed 109 | ); 110 | 111 | // Subscribe the `widget_battery_state_update` listener to the 112 | // `zmk_usb_conn_state_changed` event dispatched by ZMK. 113 | ZMK_SUBSCRIPTION( 114 | widget_battery_state_update, 115 | // Triggered when connected or disconnected from USB. 116 | zmk_usb_conn_state_changed 117 | ); 118 | 119 | static void connectivity_state_update_callback(struct connectivity_state state) { 120 | states.connectivity = state; 121 | 122 | render_connectivity(); 123 | } 124 | 125 | static struct connectivity_state get_connectivity_state(const zmk_event_t* event) { 126 | const bool connected = zmk_split_bt_peripheral_is_connected(); 127 | 128 | struct connectivity_state state = { 129 | .connected = connected, 130 | }; 131 | 132 | return state; 133 | } 134 | 135 | // Create a listener named `widget_connectivity_state_update`. This 136 | // name is then used to create a subscription. 137 | ZMK_DISPLAY_WIDGET_LISTENER( 138 | widget_connectivity_state_update, 139 | struct connectivity_state, 140 | // Called after `get_connectivity_state` with the value it returned. 141 | connectivity_state_update_callback, 142 | get_connectivity_state 143 | ) 144 | 145 | // Subscribe the `widget_connectivity_state_update` listener to the 146 | // `zmk_split_peripheral_status_changed` event dispatched by ZMK. 147 | ZMK_SUBSCRIPTION( 148 | widget_connectivity_state_update, 149 | // Triggered when the peripheral was connected or disconnected from the 150 | // central. 151 | zmk_split_peripheral_status_changed 152 | ); 153 | 154 | void initialize_listeners() { 155 | widget_connectivity_state_update_init(); 156 | widget_battery_state_update_init(); 157 | 158 | // We are calling this one during the initialization since no state is bound 159 | // to it. 160 | render_main(); 161 | 162 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION) 163 | start_timer(); 164 | #endif 165 | } 166 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/central/render.c: -------------------------------------------------------------------------------- 1 | #include "../../include/central/render.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "../../include/colors.h" 9 | #include "../../include/central/initialize_listeners.h" 10 | #include "../../include/fonts/custom_font_22.h" 11 | #include "../../include/fonts/custom_font_44.h" 12 | #include "../../include/fonts/custom_font_shadow.h" 13 | #include "../../include/fonts/custom_font_outline.h" 14 | #include "../../include/main.h" 15 | #include "../../include/utils/draw_battery.h" 16 | #include "../../include/utils/draw_background.h" 17 | #include "../../include/utils/draw_bluetooth_searching.h" 18 | #include "../../include/utils/draw_bluetooth_logo_outlined.h" 19 | #include "../../include/utils/draw_bluetooth_logo.h" 20 | #include "../../include/utils/draw_usb_logo.h" 21 | #include "../../include/utils/rotate_connectivity_canvas.h" 22 | 23 | void render_battery() { 24 | lv_canvas_fill_bg(battery_canvas, BACKGROUND_COLOR, LV_OPA_COVER); 25 | 26 | draw_battery(battery_canvas, 7, 4, states.battery); 27 | } 28 | 29 | static void render_bluetooth_logo() { 30 | if (states.connectivity.active_profile_bonded) { 31 | if (states.connectivity.active_profile_connected) { 32 | draw_bluetooth_logo(connectivity_canvas, 18, 4); 33 | } else { 34 | draw_bluetooth_logo_outlined(connectivity_canvas, 18, 4); 35 | } 36 | } else { 37 | draw_bluetooth_searching(connectivity_canvas, 18, 4); 38 | } 39 | } 40 | 41 | static void render_bluetooth_profile_index() { 42 | lv_draw_label_dsc_t label_dsc; 43 | lv_draw_label_dsc_init(&label_dsc); 44 | label_dsc.color = FOREGROUND_COLOR; 45 | label_dsc.font = &custom_font_22; 46 | label_dsc.align = LV_TEXT_ALIGN_RIGHT; 47 | 48 | static const unsigned custom_font_22_height = 19; 49 | static const unsigned padding_y = (CONNECTIVITY_CANVAS_AVAILABLE_HEIGHT - custom_font_22_height) / 2; 50 | static const unsigned width = CONNECTIVITY_CANVAS_WIDTH - 18; 51 | static const char bluetooth_profile_label[5][2] = {"1", "2", "3", "4", "5"}; 52 | const char* label = bluetooth_profile_label[states.connectivity.active_profile_index]; 53 | 54 | lv_canvas_draw_text(connectivity_canvas, 0, padding_y, width, &label_dsc, label); 55 | } 56 | 57 | static void render_bluetooth_connectivity() { 58 | render_bluetooth_logo(); 59 | render_bluetooth_profile_index(); 60 | } 61 | 62 | static void render_usb_connectivity() { 63 | draw_usb_logo(connectivity_canvas, 11, 8); 64 | } 65 | 66 | void render_connectivity() { 67 | lv_canvas_fill_bg(connectivity_canvas, BACKGROUND_COLOR, LV_OPA_COVER); 68 | 69 | switch (states.connectivity.selected_endpoint.transport) { 70 | case ZMK_TRANSPORT_BLE: { 71 | render_bluetooth_connectivity(); 72 | break; 73 | } 74 | case ZMK_TRANSPORT_USB: { 75 | render_usb_connectivity(); 76 | break; 77 | } 78 | } 79 | 80 | rotate_connectivity_canvas(); 81 | } 82 | 83 | void render_main() { 84 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_BACKGROUND) 85 | // Unfortunately, text transparency does not seem to work in LVGL 8.3. This 86 | // forces us to redraw the background on every render instead of having it 87 | // on a layer underneath. 88 | draw_background(main_canvas, states.background_index); 89 | #endif 90 | 91 | // Capitalize the layer name if given or use the layer number otherwise. 92 | char* text = NULL; 93 | if (states.layer.name == NULL) { 94 | text = malloc(10 * sizeof(char)); 95 | sprintf(text, "LAYER %i", states.layer.index); 96 | } 97 | else { 98 | text = malloc((strlen(states.layer.name) + 1) * sizeof(char)); 99 | for (unsigned i = 0; states.layer.name[i] != '\0'; i++) { 100 | text[i] = toupper(states.layer.name[i]); 101 | } 102 | text[strlen(states.layer.name)] = '\0'; 103 | } 104 | 105 | // Magic number. The height of the font from the baseline to the ascender 106 | // height is 34px, but halving the space remaining of the full height gives 107 | // us another value ((68px - 34px) / 2 = 17px). 108 | static const unsigned text_y_offset = 15; 109 | 110 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_OUTLINE) 111 | lv_draw_label_dsc_t outline_dsc; 112 | lv_draw_label_dsc_init(&outline_dsc); 113 | outline_dsc.color = FOREGROUND_COLOR; 114 | outline_dsc.font = &custom_font_outline; 115 | outline_dsc.align = LV_TEXT_ALIGN_CENTER; 116 | 117 | lv_canvas_draw_text( 118 | main_canvas, 119 | 0, 120 | // Magic number offset. We would think that the fonts would line up 121 | // perfectly, because of how they were created, but no. 122 | text_y_offset - 1, 123 | MAIN_CANVAS_WIDTH, 124 | &outline_dsc, 125 | text 126 | ); 127 | #endif 128 | 129 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_SHADOW) 130 | lv_draw_label_dsc_t shadow_dsc; 131 | lv_draw_label_dsc_init(&shadow_dsc); 132 | shadow_dsc.color = BACKGROUND_COLOR; 133 | shadow_dsc.font = &custom_font_shadow; 134 | shadow_dsc.align = LV_TEXT_ALIGN_CENTER; 135 | 136 | lv_canvas_draw_text( 137 | main_canvas, 138 | 0, 139 | text_y_offset, 140 | MAIN_CANVAS_WIDTH, 141 | &shadow_dsc, 142 | text 143 | ); 144 | #endif 145 | 146 | lv_draw_label_dsc_t layer_name_dsc; 147 | lv_draw_label_dsc_init(&layer_name_dsc); 148 | layer_name_dsc.color = FOREGROUND_COLOR; 149 | layer_name_dsc.font = &custom_font_44; 150 | layer_name_dsc.align = LV_TEXT_ALIGN_CENTER; 151 | 152 | lv_canvas_draw_text( 153 | main_canvas, 154 | 0, 155 | text_y_offset, 156 | MAIN_CANVAS_WIDTH, 157 | &layer_name_dsc, 158 | text 159 | ); 160 | 161 | free(text); 162 | text = NULL; 163 | } 164 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/central/initialize_listeners.c: -------------------------------------------------------------------------------- 1 | #include "../../include/central/initialize_listeners.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include "../../include/central/render.h" 21 | 22 | struct states states; 23 | 24 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION) 25 | static void background_update_timer(lv_timer_t* timer) 26 | { 27 | states.background_index = (states.background_index + 1) % UINT_MAX; 28 | 29 | render_main(); 30 | } 31 | 32 | lv_timer_t * timer; 33 | 34 | static void start_timer() { 35 | // Call the `background_update_timer` function every configured interval. 36 | timer = lv_timer_create(background_update_timer, CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION_FRAME_MS, NULL); 37 | } 38 | 39 | // We want to pause the animation when the keyboard is idling. 40 | int activity_update_callback(const zmk_event_t* eh) { 41 | struct zmk_activity_state_changed* ev = as_zmk_activity_state_changed(eh); 42 | if (ev == NULL) { 43 | return -ENOTSUP; 44 | } 45 | 46 | switch (ev->state) { 47 | case ZMK_ACTIVITY_ACTIVE: { 48 | lv_timer_resume(timer); 49 | break; 50 | } 51 | case ZMK_ACTIVITY_IDLE: 52 | case ZMK_ACTIVITY_SLEEP: { 53 | lv_timer_pause(timer); 54 | break; 55 | } 56 | default: { 57 | return -EINVAL; 58 | } 59 | } 60 | 61 | return 0; 62 | } 63 | 64 | // Create a listener named `activity_update`. This name is then used to create a 65 | // subscription. When subscribed, `activity_update_callback` will be called. 66 | ZMK_LISTENER( 67 | activity_update, 68 | activity_update_callback 69 | ); 70 | 71 | // Subscribe the `activity_update` listener to the `zmk_activity_state_changed` 72 | // event dispatched by ZMK. 73 | ZMK_SUBSCRIPTION( 74 | activity_update, 75 | zmk_activity_state_changed 76 | ); 77 | #endif 78 | 79 | static void battery_state_update_callback(struct battery_state state) { 80 | states.battery = state; 81 | 82 | render_battery(); 83 | } 84 | 85 | static struct battery_state get_battery_state(const zmk_event_t* event) { 86 | // `as_zmk_battery_state_changed(event)->state_of_charge` seems to be 87 | // usually used but the same value can be retrieved from the following. 88 | const uint8_t level = zmk_battery_state_of_charge(); 89 | const bool is_charging = zmk_usb_is_powered(); 90 | 91 | struct battery_state state = { 92 | .level = level, 93 | .is_charging = is_charging, 94 | }; 95 | 96 | return state; 97 | } 98 | 99 | // Create a listener named `widget_battery_state_update`. This name is then 100 | // used to create a subscription. 101 | ZMK_DISPLAY_WIDGET_LISTENER( 102 | widget_battery_state_update, 103 | struct battery_state, 104 | // Called after `get_battery_state` with the value it returned. 105 | battery_state_update_callback, 106 | get_battery_state 107 | ) 108 | 109 | // Subscribe the `widget_battery_state_update` listener to the 110 | // `zmk_battery_state_changed` event dispatched by ZMK. 111 | ZMK_SUBSCRIPTION( 112 | widget_battery_state_update, 113 | // Triggered when the computed battery percentage has changed. 114 | zmk_battery_state_changed 115 | ); 116 | 117 | // Subscribe the `widget_battery_state_update` listener to the 118 | // `zmk_usb_conn_state_changed` event dispatched by ZMK. 119 | ZMK_SUBSCRIPTION( 120 | widget_battery_state_update, 121 | // Triggered when connected or disconnected from USB. 122 | zmk_usb_conn_state_changed 123 | ); 124 | 125 | static void connectivity_state_update_callback(struct connectivity_state state) { 126 | states.connectivity = state; 127 | 128 | render_connectivity(); 129 | } 130 | 131 | static struct connectivity_state get_connectivity_state(const zmk_event_t* event) { 132 | const struct zmk_endpoint_instance selected_endpoint = zmk_endpoints_selected(); 133 | const int active_profile_index = zmk_ble_active_profile_index(); 134 | const bool active_profile_connected = zmk_ble_active_profile_is_connected(); 135 | const bool active_profile_bonded = !zmk_ble_active_profile_is_open(); 136 | 137 | struct connectivity_state state = { 138 | .selected_endpoint = selected_endpoint, 139 | .active_profile_index = active_profile_index, 140 | .active_profile_connected = active_profile_connected, 141 | .active_profile_bonded = active_profile_bonded, 142 | }; 143 | 144 | return state; 145 | } 146 | 147 | // Create a listener named `widget_connectivity_state_update`. This 148 | // name is then used to create a subscription. 149 | ZMK_DISPLAY_WIDGET_LISTENER( 150 | widget_connectivity_state_update, 151 | struct connectivity_state, 152 | // Called after `get_connectivity_state` with the value it returned. 153 | connectivity_state_update_callback, 154 | get_connectivity_state 155 | ) 156 | 157 | // Subscribe the `widget_connectivity_state_update` listener to the 158 | // `zmk_endpoint_changed` event dispatched by ZMK. 159 | ZMK_SUBSCRIPTION( 160 | widget_connectivity_state_update, 161 | zmk_endpoint_changed 162 | ); 163 | 164 | // Subscribe the `widget_connectivity_state_update` listener to the 165 | // `zmk_usb_conn_state_changed` event dispatched by ZMK. 166 | ZMK_SUBSCRIPTION( 167 | widget_connectivity_state_update, 168 | // Triggered when connected or disconnected from USB. 169 | zmk_usb_conn_state_changed 170 | ); 171 | 172 | // Subscribe the `widget_connectivity_state_update` listener to the 173 | // `zmk_ble_active_profile_changed` event dispatched by ZMK. 174 | ZMK_SUBSCRIPTION( 175 | widget_connectivity_state_update, 176 | // Triggered when the selected profile has changed. 177 | zmk_ble_active_profile_changed 178 | ); 179 | 180 | static void layer_state_update_callback(struct layer_state state) { 181 | states.layer = state; 182 | 183 | render_main(); 184 | } 185 | 186 | // Retrieve the data we want from the event 187 | static struct layer_state get_layer_state(const zmk_event_t* event) { 188 | const zmk_keymap_layer_index_t index = zmk_keymap_highest_layer_active(); 189 | const char* name = zmk_keymap_layer_name(zmk_keymap_layer_index_to_id(index)); 190 | 191 | struct layer_state state = { 192 | .index = index, 193 | .name = name 194 | }; 195 | 196 | return state; 197 | } 198 | 199 | // Create a listener named `widget_layer_state_update`. This name is then used 200 | // to create a subscription. 201 | ZMK_DISPLAY_WIDGET_LISTENER( 202 | widget_layer_state_update, 203 | struct layer_state, 204 | // Called after `get_layer_state` with the value it returned. 205 | layer_state_update_callback, 206 | get_layer_state 207 | ) 208 | 209 | // Subscribe the `widget_layer_state_update` listener to the 210 | // `zmk_battery_state_changed` event dispatched by ZMK. 211 | ZMK_SUBSCRIPTION( 212 | widget_layer_state_update, 213 | // Triggered when the selected layer has changed. 214 | zmk_layer_state_changed 215 | ); 216 | 217 | void initialize_listeners() { 218 | widget_layer_state_update_init(); 219 | widget_connectivity_state_update_init(); 220 | widget_battery_state_update_init(); 221 | 222 | #if IS_ENABLED(CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION) 223 | start_timer(); 224 | #endif 225 | } 226 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_0.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_0.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_0 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_0 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_0 uint8_t background_0_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x20, 20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x12, 0x04, 0x00, 0x20, 0x00, 23 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x4c, 0x00, 0x00, 0x04, 0x02, 0x20, 0x10, 0x18, 0x10, 0x10, 24 | 0x00, 0x0c, 0x00, 0x08, 0x80, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25 | 0x00, 0x40, 0xc8, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x22, 0x00, 0x10, 0x00, 26 | 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x12, 0x00, 0x42, 0x40, 27 | 0x22, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x24, 0x43, 0x00, 0x80, 0x01, 0x00, 0x10, 0x06, 0x00, 0x80, 28 | 0x00, 0x61, 0x11, 0x41, 0x00, 0x80, 0x80, 0x00, 0x2c, 0x2c, 0x01, 0x02, 0x91, 0x16, 0x51, 0x04, 0x00, 29 | 0x01, 0x00, 0x00, 0x44, 0x01, 0x40, 0x12, 0x00, 0x00, 0x00, 0x21, 0x80, 0x40, 0x04, 0x32, 0x40, 0x00, 30 | 0x00, 0x03, 0x80, 0x40, 0x20, 0x0a, 0x20, 0x18, 0x2c, 0x08, 0x25, 0x8c, 0x44, 0x00, 0x4a, 0x01, 0x00, 31 | 0x00, 0x20, 0x02, 0x04, 0xc0, 0x18, 0x03, 0x38, 0x80, 0x80, 0x0c, 0x20, 0x82, 0x30, 0x60, 0x00, 0x00, 32 | 0x00, 0x40, 0x3a, 0x44, 0x00, 0x02, 0x20, 0x00, 0x8a, 0x90, 0x00, 0x04, 0x08, 0x01, 0x00, 0x40, 0x08, 33 | 0x00, 0x04, 0x20, 0x51, 0x08, 0x40, 0x12, 0x00, 0x01, 0x01, 0x00, 0x19, 0x01, 0x01, 0x40, 0x00, 0x00, 34 | 0x00, 0x20, 0x4c, 0x00, 0x80, 0x14, 0x04, 0x48, 0x10, 0x04, 0x02, 0xb4, 0x00, 0x06, 0x44, 0x00, 0x00, 35 | 0x00, 0x82, 0x00, 0x08, 0x04, 0x84, 0x10, 0x04, 0x22, 0x21, 0x80, 0x30, 0x00, 0x02, 0x18, 0xc0, 0x00, 36 | 0x00, 0x08, 0x02, 0x30, 0x20, 0x63, 0x05, 0x20, 0x20, 0x00, 0x00, 0x40, 0x00, 0x08, 0x28, 0x80, 0x00, 37 | 0x40, 0x00, 0x40, 0x00, 0x00, 0x80, 0xc4, 0x88, 0x00, 0x80, 0x04, 0x00, 0x10, 0x00, 0x21, 0x44, 0x08, 38 | 0x00, 0x10, 0x00, 0x28, 0x20, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x21, 0x42, 0x08, 0x06, 0x10, 0x00, 39 | 0x00, 0x41, 0x80, 0x08, 0xc4, 0x05, 0x00, 0x00, 0xc2, 0x30, 0x80, 0x88, 0xe0, 0xc0, 0x40, 0xc6, 0x00, 40 | 0x10, 0x0a, 0x01, 0x02, 0x20, 0x20, 0x40, 0xa0, 0x20, 0x8a, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x00, 41 | 0x00, 0x80, 0x54, 0x00, 0x00, 0x05, 0x18, 0x21, 0x00, 0x11, 0x01, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 42 | 0x00, 0x00, 0x42, 0x18, 0x83, 0x40, 0x02, 0xa3, 0x30, 0x11, 0x06, 0x80, 0xe1, 0x40, 0x62, 0x81, 0x00, 43 | 0x10, 0x18, 0x02, 0x00, 0x40, 0x00, 0x10, 0x04, 0x4c, 0x05, 0x00, 0x02, 0x20, 0x20, 0xc0, 0x80, 0x00, 44 | 0x22, 0x24, 0x08, 0x4a, 0xa0, 0x08, 0x44, 0x00, 0x2a, 0x41, 0x03, 0x00, 0x20, 0x11, 0x01, 0x02, 0x00, 45 | 0x00, 0x01, 0x00, 0x4e, 0x10, 0x28, 0xc8, 0x00, 0x41, 0x02, 0x08, 0x21, 0x00, 0x00, 0x02, 0x24, 0x80, 46 | 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x40, 0x28, 0x81, 0x00, 0x00, 0x40, 0x06, 0x14, 0x90, 0x00, 0x00, 47 | 0x00, 0x00, 0x00, 0x03, 0x20, 0x00, 0x40, 0x30, 0x08, 0x01, 0x00, 0x02, 0x00, 0xc1, 0x08, 0x20, 0x00, 48 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x89, 0x11, 0x08, 0x18, 0x07, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x00, 49 | 0x00, 0x00, 0x10, 0x02, 0xe0, 0x0c, 0x05, 0x80, 0x87, 0x30, 0x09, 0x24, 0x00, 0x04, 0x10, 0x44, 0x00, 50 | 0x00, 0x05, 0x20, 0x00, 0x81, 0x41, 0xc2, 0x55, 0xa0, 0x82, 0x88, 0x11, 0x40, 0x35, 0x22, 0x80, 0x10, 51 | 0x22, 0x00, 0x00, 0x10, 0x06, 0x20, 0x84, 0x00, 0x00, 0xca, 0x54, 0x21, 0x90, 0xc5, 0x00, 0x06, 0x08, 52 | 0x04, 0x00, 0xc1, 0xc0, 0x04, 0x08, 0x80, 0x00, 0x88, 0x01, 0x00, 0x09, 0x50, 0x01, 0x40, 0x00, 0x00, 53 | 0x00, 0x00, 0x00, 0x81, 0xc1, 0x01, 0x50, 0x00, 0x25, 0x24, 0x00, 0x15, 0x1c, 0x6a, 0x06, 0x88, 0x00, 54 | 0x04, 0x10, 0x10, 0xc9, 0x40, 0x20, 0x2d, 0x42, 0x01, 0x08, 0x08, 0x12, 0x00, 0x01, 0x41, 0x24, 0x00, 55 | 0x00, 0x81, 0x00, 0x00, 0x90, 0x00, 0x21, 0x0a, 0xa9, 0x02, 0x20, 0x04, 0x00, 0x00, 0x00, 0x20, 0x20, 56 | 0x00, 0x01, 0x81, 0xd1, 0x84, 0x10, 0x40, 0x02, 0xb4, 0x00, 0x03, 0x01, 0x00, 0x10, 0x04, 0x10, 0x00, 57 | 0x01, 0x11, 0x8c, 0x00, 0xa1, 0xa0, 0xa0, 0x00, 0x00, 0x04, 0x20, 0x85, 0x42, 0x89, 0x00, 0x80, 0x00, 58 | 0x00, 0x02, 0x02, 0x04, 0x80, 0x20, 0x19, 0x14, 0x40, 0x22, 0x12, 0x60, 0x11, 0x08, 0x02, 0x24, 0x00, 59 | 0x00, 0x00, 0x41, 0x1c, 0x04, 0x14, 0x00, 0x28, 0x20, 0x11, 0x12, 0x00, 0x02, 0x05, 0x60, 0x08, 0x00, 60 | 0x00, 0x44, 0x04, 0x0a, 0x00, 0x40, 0x12, 0x80, 0x20, 0x05, 0x80, 0x18, 0x0c, 0x38, 0x00, 0x00, 0x00, 61 | 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x80, 0x12, 0x00, 0x90, 0x08, 0x10, 0xc0, 0x09, 0x10, 0x04, 0x00, 62 | 0x01, 0x21, 0x08, 0x60, 0x21, 0x80, 0x44, 0xa0, 0x40, 0x00, 0x00, 0xa2, 0x00, 0x50, 0x00, 0x58, 0x00, 63 | 0x00, 0x01, 0x00, 0x60, 0x00, 0xa0, 0x10, 0x68, 0x0c, 0x00, 0x82, 0x26, 0x00, 0x80, 0x50, 0x00, 0x20, 64 | 0x00, 0x14, 0xb0, 0x00, 0x00, 0x10, 0x40, 0x0a, 0x80, 0x1d, 0x03, 0x01, 0x84, 0x00, 0x80, 0xb0, 0x00, 65 | 0x00, 0x8c, 0x0c, 0x00, 0x40, 0x00, 0x02, 0x10, 0x01, 0x22, 0x42, 0x00, 0xa0, 0x20, 0x38, 0x11, 0x00, 66 | 0x01, 0x10, 0x81, 0x08, 0x60, 0x40, 0x10, 0x02, 0x04, 0x64, 0x20, 0x81, 0x00, 0x62, 0x40, 0x00, 0x80, 67 | 0x00, 0x0f, 0xc0, 0x08, 0x80, 0x6c, 0x12, 0x30, 0x08, 0x10, 0x80, 0xc4, 0x00, 0x00, 0x4c, 0x40, 0x80, 68 | 0x28, 0x01, 0x92, 0xc0, 0x44, 0x84, 0x30, 0x00, 0x10, 0x81, 0x22, 0x01, 0x20, 0x08, 0x00, 0x80, 0x00, 69 | 0x00, 0x30, 0x82, 0x28, 0x00, 0x80, 0x22, 0x01, 0x4a, 0x40, 0xb9, 0x70, 0xb8, 0x0a, 0x16, 0x91, 0x20, 70 | 0x00, 0x34, 0x30, 0x60, 0x1d, 0x06, 0x01, 0x90, 0x02, 0x04, 0x14, 0x01, 0x0c, 0x9b, 0x10, 0x00, 0x00, 71 | 0x04, 0x10, 0x42, 0x02, 0x40, 0x30, 0x88, 0x49, 0x01, 0x00, 0xc4, 0x01, 0x83, 0x40, 0x06, 0x04, 0x00, 72 | 0x00, 0x0e, 0x45, 0x00, 0x48, 0x40, 0x00, 0x21, 0x02, 0x56, 0x68, 0x00, 0x18, 0x03, 0x00, 0x40, 0x00, 73 | 0x00, 0x04, 0x02, 0x11, 0x10, 0x80, 0x80, 0x04, 0x11, 0x04, 0x00, 0x20, 0x80, 0x02, 0x00, 0x80, 0x00, 74 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x88, 0x18, 0x11, 0x01, 0x00, 0x04, 0x28, 0x00, 0x21, 0x04, 0x00, 75 | 0x00, 0x02, 0x01, 0x00, 0x10, 0x01, 0x80, 0xa0, 0x05, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 76 | 0x00, 0x81, 0x00, 0x20, 0x08, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0xb4, 0x28, 0x00, 77 | 0x00, 0x02, 0x08, 0x00, 0x10, 0x0c, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x11, 0x00, 78 | 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x42, 0x00, 0x40, 0x00, 0x00, 79 | 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x20, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 80 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x90, 0x00, 0x00, 0x89, 0x00, 0x20, 0x00, 0x80, 0x01, 0x00, 81 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82 | 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_0 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_0_map, 95 | }; 96 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_1.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_1.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_1 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_1 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_1 uint8_t background_1_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 23 | 0x00, 0x10, 0x00, 0x01, 0x00, 0x40, 0x00, 0x0c, 0x00, 0x90, 0x00, 0x02, 0x08, 0x00, 0x00, 0x02, 0x00, 24 | 0x00, 0x08, 0x00, 0x80, 0x01, 0x00, 0x08, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 25 | 0x01, 0x01, 0x00, 0x00, 0x00, 0x80, 0x92, 0x01, 0x82, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x40, 26 | 0x00, 0x90, 0x00, 0x00, 0x22, 0x02, 0x00, 0x11, 0x00, 0x00, 0x41, 0x90, 0x00, 0x10, 0x01, 0x00, 0x20, 27 | 0x08, 0x00, 0x59, 0x08, 0x00, 0x04, 0x00, 0x05, 0x84, 0x66, 0x08, 0x80, 0x20, 0x00, 0x40, 0x28, 0x00, 28 | 0x00, 0x32, 0x82, 0x09, 0x12, 0x54, 0x10, 0x00, 0xd3, 0x36, 0x2a, 0x50, 0x85, 0x00, 0x03, 0x20, 0x10, 29 | 0x08, 0x00, 0x12, 0x04, 0x00, 0x11, 0x0c, 0x01, 0x24, 0x02, 0x41, 0x00, 0xac, 0x08, 0x04, 0x8c, 0x00, 30 | 0x00, 0xd0, 0x40, 0x00, 0x80, 0x0a, 0x09, 0x02, 0x00, 0x01, 0x01, 0x80, 0x05, 0x80, 0x40, 0x44, 0x00, 31 | 0x04, 0x08, 0x05, 0x0c, 0x00, 0x00, 0x24, 0x02, 0x07, 0x23, 0x10, 0xe0, 0x08, 0x90, 0x1a, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x41, 0x28, 0x40, 0x02, 0x40, 0x81, 0x34, 0x14, 0x08, 33 | 0x00, 0xa0, 0x30, 0x20, 0x02, 0x10, 0x60, 0x0c, 0x5e, 0x10, 0x90, 0x80, 0xc1, 0x44, 0x30, 0x00, 0x00, 34 | 0x00, 0x20, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x80, 0x00, 0x60, 0x0c, 0x00, 0x04, 0x20, 0x00, 0x80, 35 | 0x01, 0x06, 0x06, 0x00, 0x04, 0x10, 0x00, 0x81, 0x0e, 0x00, 0x40, 0x20, 0x24, 0x0a, 0x00, 0x00, 0x00, 36 | 0x00, 0x01, 0x01, 0x84, 0x20, 0x80, 0x80, 0x00, 0x03, 0x40, 0x09, 0x1e, 0x10, 0x88, 0x48, 0x00, 0x00, 37 | 0x00, 0x00, 0x0a, 0x02, 0x00, 0x04, 0x10, 0xd0, 0x09, 0x01, 0x54, 0x00, 0x00, 0x14, 0x18, 0x06, 0x00, 38 | 0x00, 0x21, 0x18, 0x08, 0x04, 0x04, 0x00, 0x00, 0xc0, 0x04, 0x62, 0x00, 0x19, 0x00, 0x04, 0x10, 0x80, 39 | 0x03, 0xa5, 0x20, 0x10, 0x12, 0x81, 0x08, 0x30, 0x00, 0x20, 0x0c, 0x09, 0x08, 0x00, 0x00, 0x00, 0x40, 40 | 0x00, 0x28, 0x01, 0x87, 0x84, 0x80, 0x00, 0x80, 0x81, 0x52, 0x00, 0x24, 0x21, 0x30, 0x40, 0x00, 0x80, 41 | 0x00, 0x30, 0x41, 0xdc, 0x02, 0x10, 0x08, 0x02, 0xc3, 0x00, 0x00, 0x51, 0x00, 0x04, 0x00, 0x40, 0x00, 42 | 0x00, 0x02, 0x04, 0x21, 0x00, 0x09, 0x10, 0x10, 0x02, 0x02, 0x40, 0x80, 0x00, 0x00, 0x28, 0x04, 0x00, 43 | 0x00, 0x09, 0x00, 0x0a, 0x00, 0x03, 0x00, 0x28, 0x91, 0x10, 0x09, 0x48, 0x00, 0x01, 0x40, 0x80, 0x00, 44 | 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x40, 0x03, 0x10, 0x82, 0xa2, 0x08, 0x11, 0x40, 0x92, 0x00, 45 | 0x00, 0x90, 0xc0, 0x00, 0x90, 0x20, 0x10, 0x42, 0x08, 0x02, 0x40, 0x08, 0x18, 0x40, 0xb0, 0x2c, 0x00, 46 | 0x04, 0x2d, 0x08, 0x81, 0x04, 0x00, 0x42, 0x21, 0x01, 0x60, 0x80, 0x0d, 0x04, 0x0a, 0x88, 0x81, 0x00, 47 | 0x00, 0x00, 0x40, 0x02, 0x40, 0x42, 0x2b, 0x40, 0x06, 0x10, 0x41, 0x8a, 0x11, 0x00, 0xd4, 0x40, 0x00, 48 | 0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x40, 0x00, 0x18, 0x08, 0x04, 0x00, 0x09, 0x20, 0x08, 0x00, 0x80, 49 | 0x00, 0x04, 0x0a, 0x60, 0x09, 0x60, 0x08, 0x00, 0x01, 0x43, 0x00, 0x80, 0x20, 0x24, 0x02, 0x00, 0x20, 50 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x82, 0x84, 0x20, 0x00, 0x45, 0x00, 0x00, 0x12, 0x20, 0x0c, 0x04, 0x00, 51 | 0x20, 0x00, 0x00, 0x90, 0x04, 0x30, 0xa0, 0x10, 0x40, 0x43, 0x42, 0xc0, 0x10, 0x40, 0x10, 0x09, 0x40, 52 | 0x28, 0x20, 0x02, 0x19, 0x20, 0x40, 0x29, 0x01, 0x48, 0x88, 0x40, 0x21, 0x01, 0x33, 0x08, 0x80, 0x00, 53 | 0x10, 0x00, 0x02, 0x21, 0x00, 0x06, 0x20, 0x00, 0x00, 0x82, 0x10, 0x4d, 0x90, 0x20, 0x02, 0x80, 0x40, 54 | 0x00, 0x40, 0x81, 0x00, 0x21, 0x11, 0x80, 0x08, 0x00, 0x50, 0x60, 0x00, 0x81, 0x50, 0x07, 0x0d, 0x00, 55 | 0x01, 0x09, 0x20, 0x10, 0x08, 0x04, 0x00, 0xb2, 0x40, 0x94, 0x18, 0x10, 0x08, 0xc6, 0x02, 0x00, 0x00, 56 | 0x05, 0x04, 0x10, 0x14, 0x26, 0x00, 0x01, 0x90, 0x00, 0x40, 0xc0, 0x24, 0x10, 0x00, 0x01, 0x00, 0x00, 57 | 0x00, 0x00, 0x20, 0x01, 0x16, 0x08, 0x00, 0x89, 0x00, 0x00, 0x00, 0x03, 0x0a, 0x42, 0x02, 0x28, 0x80, 58 | 0x00, 0x00, 0x00, 0x00, 0x49, 0x02, 0x0c, 0xc4, 0x48, 0x8b, 0x01, 0x50, 0x22, 0x91, 0x80, 0x10, 0x00, 59 | 0x00, 0x00, 0x04, 0x08, 0x82, 0x00, 0x81, 0x0c, 0x00, 0x01, 0x18, 0x90, 0x11, 0x60, 0x80, 0x0c, 0x10, 60 | 0x00, 0x00, 0x83, 0x80, 0x10, 0xe0, 0x02, 0x10, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x22, 0x02, 0x24, 0x00, 61 | 0x00, 0x04, 0x40, 0x00, 0x80, 0x80, 0x12, 0x10, 0x82, 0x01, 0x08, 0x08, 0x8c, 0x12, 0x84, 0x22, 0x00, 62 | 0x00, 0x2c, 0x02, 0x54, 0x21, 0x24, 0x08, 0x00, 0x84, 0x01, 0x02, 0xc4, 0x20, 0x01, 0x40, 0x80, 0x10, 63 | 0x00, 0x02, 0x20, 0x20, 0x28, 0x01, 0x01, 0x91, 0x00, 0x52, 0x40, 0x20, 0x84, 0x04, 0x00, 0x04, 0x20, 64 | 0x00, 0x03, 0x00, 0x44, 0xc0, 0x82, 0x18, 0x80, 0x20, 0x0a, 0xc2, 0x0d, 0x80, 0x80, 0x26, 0x08, 0x00, 65 | 0x08, 0x20, 0x20, 0x0c, 0x10, 0xa6, 0x04, 0x82, 0x00, 0x00, 0x41, 0x80, 0x80, 0x10, 0xa0, 0x04, 0x00, 66 | 0x01, 0x00, 0x28, 0x80, 0x00, 0x29, 0xb0, 0x50, 0xab, 0x24, 0x44, 0x01, 0x90, 0x02, 0x80, 0x00, 0x00, 67 | 0x00, 0x08, 0x12, 0x80, 0x80, 0x08, 0x00, 0x00, 0x08, 0xac, 0x80, 0x08, 0x88, 0x01, 0x20, 0x08, 0x00, 68 | 0x08, 0x04, 0x54, 0x00, 0x30, 0x20, 0x70, 0x28, 0x00, 0x84, 0x22, 0x80, 0x00, 0x42, 0x18, 0x46, 0x40, 69 | 0x00, 0x00, 0x21, 0x00, 0x82, 0x10, 0x30, 0x00, 0x02, 0x20, 0x12, 0x00, 0x41, 0x00, 0xbe, 0x0e, 0x00, 70 | 0x00, 0x06, 0x10, 0x40, 0x00, 0x55, 0x0c, 0x0b, 0x04, 0x01, 0x04, 0x02, 0x10, 0x02, 0x00, 0x00, 0x00, 71 | 0x00, 0x00, 0x00, 0x02, 0x40, 0x28, 0x08, 0x30, 0x49, 0x40, 0x07, 0x02, 0x20, 0x00, 0x00, 0x18, 0x00, 72 | 0x00, 0x0e, 0x00, 0x08, 0x0b, 0x01, 0x00, 0x00, 0x6c, 0x05, 0x11, 0x60, 0x40, 0xa1, 0x10, 0x10, 0x00, 73 | 0x00, 0x00, 0x09, 0x18, 0x40, 0x44, 0x00, 0xf0, 0x04, 0x00, 0x14, 0x00, 0x40, 0x00, 0x22, 0x03, 0x08, 74 | 0x00, 0xa2, 0x22, 0x02, 0x90, 0x40, 0x12, 0x84, 0x04, 0x00, 0x04, 0x00, 0x02, 0x08, 0x80, 0x00, 0x00, 75 | 0x00, 0x01, 0x01, 0x04, 0x60, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 76 | 0x00, 0x00, 0x01, 0x26, 0x08, 0x40, 0x02, 0x00, 0x10, 0x00, 0x41, 0x24, 0x02, 0x82, 0x14, 0x24, 0x00, 77 | 0x00, 0x02, 0x48, 0x00, 0x14, 0x02, 0x40, 0x00, 0x80, 0x90, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 78 | 0x00, 0x82, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x24, 0x98, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 79 | 0x00, 0x04, 0x00, 0x04, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 80 | 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 81 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 82 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_1 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_1_map, 95 | }; 96 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_2.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_2.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_2 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_2 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_2 uint8_t background_2_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 20 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x11, 0x00, 0x00, 0x04, 0x00, 0x00, 22 | 0x04, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 23 | 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 24 | 0x00, 0x00, 0x08, 0x80, 0xe0, 0x00, 0x88, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 25 | 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x06, 0x00, 0x00, 0x20, 0x01, 0x04, 0x10, 0x01, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x28, 0x11, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 27 | 0x04, 0x05, 0x01, 0x42, 0x30, 0x05, 0x00, 0x94, 0x08, 0x08, 0x80, 0x08, 0x22, 0x2c, 0x00, 0x00, 0x00, 28 | 0x02, 0x66, 0x00, 0x0a, 0x22, 0x19, 0x20, 0x20, 0x22, 0x00, 0xc0, 0x08, 0x00, 0x15, 0x00, 0x10, 0x80, 29 | 0x00, 0x20, 0x88, 0x00, 0x05, 0x00, 0x00, 0x40, 0x04, 0x01, 0xa8, 0xc0, 0x01, 0xa9, 0xdc, 0x28, 0x00, 30 | 0x04, 0x40, 0x20, 0x00, 0x00, 0x08, 0x10, 0x04, 0x02, 0x02, 0x05, 0x10, 0x00, 0x00, 0x81, 0x50, 0x00, 31 | 0x00, 0x12, 0x02, 0x80, 0x08, 0x12, 0x00, 0x20, 0x00, 0x08, 0x06, 0x10, 0x04, 0x05, 0x10, 0x0c, 0x00, 32 | 0x00, 0x00, 0xd0, 0x11, 0xa0, 0x10, 0x10, 0x02, 0x06, 0x00, 0x00, 0x44, 0x30, 0x10, 0x08, 0x00, 0x00, 33 | 0x00, 0x00, 0x01, 0x10, 0x09, 0x02, 0x01, 0x40, 0x10, 0x00, 0x00, 0x03, 0x10, 0x18, 0x10, 0x88, 0x00, 34 | 0x00, 0x00, 0x00, 0x64, 0x4c, 0x00, 0x84, 0x00, 0x02, 0x00, 0xc0, 0x05, 0x00, 0x01, 0x28, 0x80, 0x10, 35 | 0x00, 0x80, 0x01, 0x18, 0x44, 0x08, 0x81, 0x80, 0x80, 0x10, 0x00, 0x00, 0xd0, 0xa0, 0x40, 0x20, 0x00, 36 | 0x00, 0x08, 0x06, 0x03, 0x68, 0x49, 0x01, 0xa0, 0x02, 0x08, 0x00, 0x34, 0x86, 0x04, 0x10, 0x10, 0x00, 37 | 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x1a, 0x24, 0x60, 0x04, 0x08, 0x02, 0x40, 0x80, 0x19, 0x0a, 0x00, 38 | 0x02, 0x02, 0x02, 0x02, 0x4a, 0x80, 0x45, 0x00, 0x80, 0x20, 0x00, 0x18, 0x8a, 0x80, 0x08, 0x04, 0x00, 39 | 0x00, 0x08, 0x04, 0x20, 0x80, 0x00, 0x84, 0x10, 0x03, 0x90, 0x24, 0x80, 0x08, 0x00, 0x02, 0x00, 0x00, 40 | 0x00, 0x00, 0x10, 0x00, 0x40, 0x80, 0x0c, 0x02, 0x38, 0x20, 0x20, 0x81, 0x00, 0x84, 0x08, 0x11, 0x00, 41 | 0x00, 0x44, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0x05, 0x00, 0x01, 0xc0, 0x00, 0xc0, 0x00, 0x08, 0x00, 42 | 0x00, 0x14, 0x42, 0x08, 0x04, 0x03, 0x80, 0x40, 0x4c, 0x80, 0x00, 0x14, 0x42, 0x10, 0x00, 0x24, 0x00, 43 | 0x00, 0x42, 0x00, 0x00, 0x01, 0x01, 0x00, 0x08, 0x60, 0x00, 0xa8, 0x00, 0x28, 0x02, 0x04, 0x80, 0x00, 44 | 0x00, 0x00, 0x40, 0x48, 0x62, 0x20, 0x48, 0x42, 0x00, 0x90, 0x00, 0x20, 0x48, 0x10, 0x00, 0x30, 0x00, 45 | 0x00, 0x08, 0x01, 0x00, 0x0e, 0x02, 0x01, 0x02, 0x87, 0x00, 0x00, 0x10, 0x01, 0x40, 0x28, 0x18, 0x00, 46 | 0x00, 0x00, 0x12, 0x04, 0x10, 0x08, 0x00, 0x00, 0x01, 0x30, 0x15, 0x20, 0x0c, 0x00, 0x40, 0x61, 0x04, 47 | 0x00, 0x14, 0x80, 0x00, 0x40, 0xc9, 0xa0, 0x08, 0x06, 0x38, 0x00, 0x30, 0x00, 0x04, 0x51, 0x80, 0x00, 48 | 0x00, 0x12, 0x08, 0x08, 0x12, 0x60, 0x10, 0x4c, 0x20, 0x06, 0x8c, 0x44, 0x21, 0x00, 0x11, 0x80, 0x00, 49 | 0x00, 0x50, 0x02, 0x20, 0x04, 0x80, 0x26, 0x00, 0x1a, 0x00, 0x08, 0x02, 0x17, 0x00, 0x30, 0x04, 0x00, 50 | 0x00, 0x00, 0x0a, 0x01, 0x00, 0x10, 0x52, 0x26, 0x20, 0x10, 0x0a, 0x80, 0x14, 0x08, 0x01, 0x00, 0x00, 51 | 0x00, 0x08, 0xb1, 0x00, 0x40, 0x14, 0x04, 0x00, 0x64, 0x10, 0x28, 0x02, 0x13, 0xe0, 0x10, 0x12, 0x00, 52 | 0x28, 0x00, 0x10, 0x01, 0x08, 0x00, 0x10, 0x80, 0xe0, 0x10, 0x60, 0x00, 0x98, 0x41, 0x00, 0x40, 0x00, 53 | 0x10, 0x20, 0x80, 0x54, 0x00, 0x0d, 0x89, 0x80, 0x0c, 0x25, 0x0c, 0x42, 0x90, 0x05, 0x04, 0x22, 0x40, 54 | 0x01, 0x14, 0x09, 0x20, 0x61, 0x04, 0x80, 0x45, 0x00, 0x21, 0x08, 0x40, 0x00, 0x21, 0x00, 0x0a, 0x00, 55 | 0x00, 0x08, 0x40, 0x00, 0x32, 0x02, 0x42, 0xc0, 0x08, 0x30, 0x00, 0x01, 0x00, 0x01, 0x30, 0x00, 0x00, 56 | 0x00, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00, 0x01, 0x01, 0x70, 0x02, 0xc3, 0xc0, 0x06, 0x00, 0x00, 0x00, 57 | 0x00, 0x08, 0x4d, 0x02, 0xc8, 0x00, 0x0b, 0x10, 0x01, 0x00, 0x80, 0x08, 0x08, 0xb4, 0x04, 0x84, 0x00, 58 | 0x00, 0x19, 0x00, 0x04, 0x00, 0x10, 0x40, 0x84, 0x00, 0x24, 0x10, 0x01, 0x02, 0x40, 0x2a, 0x38, 0x00, 59 | 0x00, 0x06, 0x10, 0x10, 0xa0, 0x00, 0x49, 0x40, 0x40, 0x10, 0x02, 0x48, 0x10, 0xa4, 0x70, 0x20, 0x00, 60 | 0x00, 0x18, 0xc0, 0x00, 0x91, 0x06, 0x00, 0x00, 0x89, 0x81, 0x02, 0x00, 0x40, 0x28, 0x00, 0x38, 0x00, 61 | 0x00, 0x90, 0x30, 0xd4, 0x40, 0x00, 0x4a, 0x02, 0x04, 0x01, 0x01, 0x21, 0x01, 0x80, 0x02, 0xb0, 0x00, 62 | 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x20, 0x22, 0x09, 0x80, 0x08, 0x26, 0x00, 0x81, 0xa0, 0x00, 0x40, 63 | 0x00, 0x20, 0x03, 0x12, 0x00, 0x08, 0x00, 0x10, 0x80, 0x80, 0x80, 0x21, 0x00, 0x08, 0x0c, 0x24, 0x20, 64 | 0x01, 0x10, 0x42, 0x50, 0x02, 0x80, 0x86, 0x25, 0x00, 0x20, 0x01, 0x00, 0x00, 0x02, 0x00, 0x20, 0x20, 65 | 0x00, 0x0a, 0x02, 0x0c, 0x00, 0x10, 0x02, 0x10, 0x02, 0x09, 0x03, 0x01, 0x00, 0xc0, 0x41, 0x00, 0x00, 66 | 0x01, 0x02, 0x32, 0x01, 0x04, 0xa0, 0x02, 0x00, 0x8a, 0x00, 0x00, 0x11, 0x40, 0x80, 0x04, 0x00, 0x00, 67 | 0x00, 0x10, 0x01, 0x22, 0x00, 0x00, 0x00, 0x04, 0x20, 0x02, 0x00, 0x20, 0x02, 0x77, 0x49, 0x1a, 0x00, 68 | 0x00, 0x00, 0x82, 0x02, 0x8a, 0x42, 0x40, 0x01, 0x21, 0x80, 0x80, 0x04, 0x00, 0x91, 0x80, 0x14, 0x00, 69 | 0x00, 0x00, 0x30, 0x01, 0x08, 0x00, 0x0a, 0x40, 0x04, 0x02, 0x84, 0x20, 0x00, 0x09, 0x00, 0x04, 0x20, 70 | 0x00, 0x04, 0x0c, 0x02, 0x02, 0x00, 0x00, 0x08, 0x01, 0x01, 0x82, 0x80, 0x42, 0x60, 0x00, 0x0c, 0x00, 71 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x09, 0x40, 0x00, 0x00, 0x00, 0x29, 0x82, 0x40, 0x00, 0x00, 72 | 0x00, 0x00, 0xc1, 0x40, 0x0c, 0x54, 0x32, 0x00, 0x80, 0x02, 0x20, 0x41, 0x2c, 0x1c, 0x40, 0x24, 0x00, 73 | 0x00, 0x48, 0x00, 0x41, 0x08, 0x30, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x40, 0x04, 0x50, 0x00, 0x10, 74 | 0x00, 0x10, 0x08, 0x00, 0x80, 0x03, 0x05, 0x30, 0x04, 0x00, 0x08, 0x82, 0x9c, 0x00, 0x00, 0x88, 0x00, 75 | 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x40, 0x00, 0x05, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00, 76 | 0x02, 0x20, 0x00, 0x30, 0x00, 0x80, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x90, 0x00, 0x00, 77 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 78 | 0x08, 0x02, 0x01, 0x20, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 79 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x21, 0x00, 0x02, 0x80, 0x00, 80 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 81 | 0x00, 0x10, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 82 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_2 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_2_map, 95 | }; 96 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_3.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_3.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_3 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_3 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_3 uint8_t background_3_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 20 | 0x00, 0x20, 0x00, 0x10, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 22 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x04, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 23 | 0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 24 | 0x10, 0x08, 0x00, 0x01, 0x91, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x00, 0x00, 25 | 0x00, 0x24, 0x00, 0x04, 0x00, 0x80, 0x14, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x32, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x10, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x05, 0x00, 0x00, 27 | 0x02, 0x02, 0x54, 0x44, 0xa0, 0x10, 0x01, 0x80, 0x00, 0x00, 0x48, 0x81, 0x11, 0x21, 0x01, 0x80, 0x80, 28 | 0x00, 0x68, 0x08, 0x88, 0x40, 0x40, 0x02, 0x50, 0x40, 0x22, 0x00, 0x42, 0x90, 0x02, 0x07, 0x80, 0x10, 29 | 0x04, 0x00, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x00, 0x24, 0x04, 0x02, 0x01, 0x04, 0x44, 0xa0, 0x00, 0x00, 30 | 0x08, 0x10, 0x70, 0x80, 0x60, 0x51, 0x00, 0x0a, 0x90, 0x00, 0x42, 0x48, 0x2a, 0xe0, 0x40, 0xc0, 0x00, 31 | 0x00, 0x00, 0x60, 0x00, 0x08, 0x20, 0x43, 0x09, 0x8c, 0x03, 0x00, 0x20, 0x02, 0x88, 0x00, 0x74, 0x20, 32 | 0x00, 0x05, 0x20, 0x04, 0x61, 0x01, 0x60, 0x2c, 0x90, 0x2a, 0x04, 0x25, 0x92, 0x00, 0x00, 0x50, 0x08, 33 | 0x00, 0xa1, 0x00, 0x90, 0x50, 0x03, 0x00, 0x41, 0x98, 0x5a, 0x01, 0x04, 0x30, 0xa0, 0x8c, 0x20, 0x00, 34 | 0x00, 0x00, 0x22, 0x00, 0x01, 0x01, 0x00, 0x0e, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, 0x80, 0x80, 35 | 0x00, 0x04, 0x24, 0x8c, 0x10, 0x00, 0xa0, 0x12, 0x44, 0x00, 0x02, 0x21, 0x40, 0x04, 0x04, 0x04, 0x00, 36 | 0x00, 0x12, 0x10, 0x84, 0x15, 0x10, 0x21, 0x81, 0x81, 0x0a, 0x02, 0x25, 0x00, 0x00, 0x28, 0x00, 0x00, 37 | 0x00, 0x00, 0x00, 0x50, 0x84, 0x02, 0x89, 0x20, 0x01, 0x44, 0x02, 0x01, 0x00, 0x00, 0x05, 0x82, 0x00, 38 | 0x02, 0x21, 0x02, 0x27, 0x20, 0x0c, 0x02, 0x30, 0x00, 0x94, 0x00, 0x02, 0x08, 0x40, 0x01, 0x10, 0x00, 39 | 0x01, 0x12, 0x61, 0x00, 0x01, 0x09, 0x0d, 0x80, 0x82, 0x00, 0x00, 0x16, 0x14, 0x41, 0x04, 0x40, 0x00, 40 | 0x10, 0x00, 0x00, 0x02, 0x02, 0x0d, 0x61, 0x00, 0x60, 0x00, 0x86, 0x01, 0x24, 0x24, 0x36, 0x41, 0x00, 41 | 0x00, 0x20, 0x83, 0x6a, 0x00, 0x00, 0x80, 0x12, 0x81, 0x50, 0x09, 0x1c, 0x40, 0x01, 0x04, 0x00, 0x20, 42 | 0x00, 0x10, 0x88, 0x00, 0xb8, 0x04, 0xa4, 0x01, 0x76, 0x64, 0x00, 0x00, 0x80, 0x10, 0x01, 0x10, 0x00, 43 | 0x08, 0x08, 0x00, 0x24, 0x2c, 0x02, 0x00, 0x10, 0x80, 0x10, 0x30, 0x2e, 0x50, 0x00, 0x00, 0x08, 0x00, 44 | 0x00, 0x01, 0x00, 0x10, 0x00, 0x05, 0x04, 0x82, 0x02, 0x40, 0x09, 0x40, 0x81, 0x90, 0x10, 0x48, 0x00, 45 | 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x41, 0x00, 0x00, 0x30, 0x01, 0x80, 0x40, 0x00, 0x20, 0x00, 0x00, 46 | 0x06, 0x02, 0x01, 0x04, 0x00, 0xc0, 0x24, 0x59, 0x00, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x54, 0x04, 47 | 0x00, 0x00, 0x04, 0x00, 0x41, 0x88, 0x6b, 0x1a, 0x70, 0x89, 0x00, 0x4a, 0x20, 0xc0, 0xb0, 0x04, 0x00, 48 | 0x00, 0x0c, 0x22, 0x00, 0xc3, 0x00, 0x02, 0x80, 0x00, 0x66, 0x40, 0x20, 0x00, 0x00, 0x09, 0x14, 0x40, 49 | 0x00, 0x50, 0x80, 0x82, 0x00, 0x02, 0x80, 0x0c, 0x00, 0x20, 0x01, 0x00, 0x40, 0x83, 0x80, 0x40, 0x20, 50 | 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x22, 0x00, 0x50, 0x88, 0x00, 0x01, 0x80, 0x8a, 0x50, 0x28, 0x10, 51 | 0x20, 0x40, 0x41, 0x00, 0x04, 0x00, 0x00, 0x05, 0x01, 0x00, 0x11, 0x00, 0x02, 0x80, 0x21, 0x03, 0x00, 52 | 0x00, 0x01, 0x10, 0x82, 0x12, 0x80, 0x04, 0x00, 0x06, 0x1c, 0x04, 0x40, 0x10, 0x00, 0x00, 0x80, 0x00, 53 | 0x00, 0x21, 0x54, 0x30, 0xd0, 0x88, 0x08, 0x00, 0x50, 0x08, 0x03, 0xa4, 0x00, 0x06, 0xb8, 0x04, 0x00, 54 | 0x01, 0x0b, 0x80, 0x00, 0x32, 0x00, 0x08, 0x40, 0x48, 0x00, 0x04, 0x02, 0xa8, 0x19, 0x21, 0x60, 0x00, 55 | 0x00, 0x04, 0x00, 0x58, 0x20, 0x20, 0x40, 0x20, 0x86, 0x00, 0x00, 0x48, 0x03, 0xdc, 0x90, 0x80, 0x00, 56 | 0x00, 0x01, 0x40, 0x60, 0x03, 0x20, 0x00, 0x08, 0x11, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x40, 0x00, 57 | 0x00, 0x10, 0x52, 0xc0, 0x04, 0xa0, 0x82, 0x00, 0x00, 0x20, 0x60, 0x80, 0x42, 0x04, 0x00, 0x00, 0x00, 58 | 0x10, 0x00, 0x10, 0x28, 0x00, 0x02, 0x22, 0x0c, 0x08, 0x4d, 0x10, 0x00, 0xa0, 0x00, 0x09, 0x80, 0x00, 59 | 0x00, 0x30, 0xc0, 0x94, 0x00, 0x40, 0x01, 0x00, 0x1c, 0x00, 0x20, 0x00, 0x00, 0x08, 0x40, 0x01, 0x00, 60 | 0x00, 0x11, 0x01, 0x20, 0x44, 0x01, 0x10, 0x48, 0x48, 0x01, 0x00, 0x04, 0x00, 0x48, 0x33, 0x08, 0x00, 61 | 0x00, 0x21, 0x84, 0x02, 0x01, 0x84, 0x09, 0x05, 0x04, 0x48, 0x00, 0x04, 0xa0, 0x28, 0x04, 0x00, 0x00, 62 | 0x00, 0x04, 0x09, 0x40, 0x02, 0x24, 0x08, 0x42, 0x08, 0x02, 0x60, 0x00, 0x00, 0xc0, 0x22, 0x80, 0x10, 63 | 0x00, 0x04, 0x25, 0x00, 0x04, 0x22, 0x08, 0x21, 0x00, 0x08, 0x40, 0x1c, 0xa5, 0x00, 0x10, 0xd0, 0x00, 64 | 0x00, 0x00, 0x8a, 0x11, 0x04, 0x88, 0x08, 0x00, 0x64, 0x00, 0x00, 0x80, 0x06, 0x02, 0x50, 0x58, 0x00, 65 | 0x00, 0xc0, 0x10, 0xa8, 0x00, 0x2a, 0x40, 0x23, 0x91, 0x82, 0x28, 0x44, 0x11, 0x11, 0x12, 0x0d, 0x00, 66 | 0x03, 0x00, 0x08, 0x00, 0x00, 0x30, 0x00, 0x84, 0x00, 0x90, 0x46, 0x48, 0xa0, 0x08, 0x04, 0x04, 0x00, 67 | 0x00, 0x08, 0xa0, 0x00, 0x33, 0x80, 0x48, 0x2a, 0x20, 0x00, 0x0b, 0x82, 0x04, 0x00, 0x04, 0x02, 0x40, 68 | 0x08, 0x00, 0x29, 0x00, 0x84, 0x00, 0x00, 0x08, 0x04, 0x00, 0x90, 0x80, 0x00, 0x20, 0x21, 0x08, 0x00, 69 | 0x00, 0xa0, 0x80, 0x00, 0x02, 0x40, 0x00, 0x8a, 0x00, 0x00, 0x41, 0x10, 0x00, 0x01, 0x01, 0x50, 0x00, 70 | 0x00, 0x20, 0x04, 0x49, 0x60, 0x20, 0x14, 0x00, 0x00, 0x40, 0x80, 0x21, 0x00, 0xc0, 0x81, 0x80, 0x00, 71 | 0x01, 0x88, 0xa2, 0x50, 0x90, 0x82, 0xce, 0x40, 0x46, 0x80, 0x98, 0x10, 0x10, 0x04, 0x41, 0x00, 0x20, 72 | 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x67, 0x00, 0x00, 0x30, 0x90, 0xa1, 0x10, 0x08, 0x80, 0x98, 0x00, 73 | 0x02, 0x0a, 0x04, 0x30, 0x0c, 0x20, 0x00, 0x28, 0xce, 0x80, 0x00, 0x00, 0x20, 0x30, 0x40, 0x20, 0x08, 74 | 0x00, 0x00, 0x01, 0x00, 0x04, 0xc1, 0x04, 0x04, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x11, 0x04, 0x00, 75 | 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x10, 0x20, 0x80, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 76 | 0x00, 0x20, 0x2a, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x02, 0x24, 0x88, 0x00, 77 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 78 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 79 | 0x40, 0x00, 0x10, 0x10, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 80 | 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x90, 0x00, 81 | 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 82 | 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_3 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_3_map, 95 | }; 96 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_4.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_4.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_4 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_4 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_4 uint8_t background_4_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 22 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x80, 0x01, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 23 | 0x00, 0x80, 0x84, 0x01, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x82, 0x00, 0x00, 0x00, 24 | 0x00, 0x0c, 0x00, 0x81, 0x30, 0x00, 0x90, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 25 | 0x00, 0x00, 0x41, 0x02, 0x00, 0x81, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x01, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 27 | 0x00, 0x94, 0x07, 0x00, 0x10, 0x70, 0x01, 0x00, 0x80, 0x22, 0x01, 0x02, 0x4a, 0x02, 0xb2, 0x04, 0x00, 28 | 0x04, 0xe1, 0x00, 0x98, 0x82, 0x45, 0x03, 0x01, 0x40, 0x88, 0x85, 0x81, 0x10, 0x20, 0x00, 0x11, 0x00, 29 | 0x00, 0x00, 0x20, 0x44, 0x05, 0x20, 0x02, 0x28, 0x01, 0x20, 0x08, 0x20, 0x05, 0x40, 0x04, 0x30, 0x00, 30 | 0x00, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x40, 0x22, 0x50, 0x10, 0x05, 0x04, 0x48, 0x00, 31 | 0x00, 0x00, 0x10, 0x00, 0x09, 0x20, 0x00, 0x00, 0xc0, 0x10, 0x01, 0x52, 0x88, 0x00, 0x10, 0x08, 0x40, 32 | 0x00, 0x42, 0x00, 0x89, 0x08, 0x70, 0x82, 0x81, 0xe0, 0x08, 0x80, 0x02, 0xb1, 0x02, 0x10, 0xc8, 0x08, 33 | 0x00, 0x00, 0x40, 0x02, 0x08, 0x02, 0x00, 0x44, 0x84, 0x0c, 0x88, 0x08, 0x82, 0x81, 0x0a, 0x80, 0x00, 34 | 0x00, 0x00, 0x4d, 0x00, 0x00, 0x10, 0x07, 0x0a, 0x90, 0x82, 0x09, 0x82, 0x00, 0x20, 0x01, 0x00, 0x00, 35 | 0x00, 0x10, 0x4c, 0x08, 0x18, 0x08, 0x40, 0x62, 0x28, 0x01, 0x14, 0x40, 0x00, 0x32, 0x40, 0x08, 0x00, 36 | 0x00, 0x00, 0x61, 0x00, 0x41, 0x80, 0x00, 0x04, 0x00, 0x04, 0x82, 0x16, 0x46, 0x82, 0x48, 0x24, 0x20, 37 | 0x01, 0x00, 0x01, 0x93, 0x04, 0x06, 0xe0, 0x02, 0x10, 0x40, 0x14, 0x08, 0x80, 0x01, 0x08, 0x00, 0x00, 38 | 0x02, 0x24, 0x00, 0xa4, 0x00, 0x08, 0x05, 0x42, 0x09, 0x08, 0x40, 0x0c, 0x0c, 0x21, 0x42, 0x02, 0x00, 39 | 0x01, 0x80, 0x00, 0xa0, 0x20, 0x09, 0x04, 0x53, 0x00, 0x00, 0x82, 0x0e, 0x08, 0x01, 0x08, 0x00, 0x00, 40 | 0x10, 0x07, 0x0a, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x0a, 0x00, 0x40, 0x10, 0x00, 0x80, 0x00, 0x02, 41 | 0x00, 0x60, 0x01, 0x20, 0x02, 0x09, 0x00, 0x22, 0x10, 0x00, 0xa1, 0xa9, 0x31, 0x00, 0x21, 0x00, 0x00, 42 | 0x00, 0x20, 0x00, 0x10, 0x20, 0x04, 0x50, 0x01, 0x14, 0x44, 0x09, 0x0d, 0x00, 0x80, 0x88, 0x30, 0x00, 43 | 0x00, 0x00, 0x81, 0x02, 0x01, 0x00, 0x82, 0x08, 0x01, 0x00, 0x43, 0x08, 0x00, 0x81, 0x08, 0x18, 0x00, 44 | 0x01, 0x08, 0x50, 0x01, 0x21, 0xc0, 0x01, 0x52, 0x05, 0x18, 0x41, 0x00, 0x02, 0x28, 0x08, 0x00, 0x04, 45 | 0x00, 0x14, 0x10, 0x08, 0x80, 0x08, 0x20, 0x04, 0x10, 0x46, 0xa0, 0x08, 0x00, 0x62, 0x02, 0x08, 0x00, 46 | 0x00, 0x05, 0x0a, 0x20, 0x80, 0x3a, 0xc0, 0xa0, 0x04, 0x90, 0xc0, 0xc9, 0x06, 0x08, 0x00, 0x08, 0x04, 47 | 0x00, 0x00, 0x06, 0x40, 0xd8, 0x02, 0x22, 0x40, 0x80, 0xc0, 0x00, 0x28, 0x19, 0x02, 0x00, 0x00, 0x00, 48 | 0x00, 0x10, 0x00, 0x24, 0x00, 0x08, 0x88, 0x20, 0x50, 0x00, 0x62, 0x08, 0x08, 0x80, 0x80, 0x10, 0x40, 49 | 0x00, 0x00, 0x00, 0x05, 0x02, 0x60, 0x00, 0x90, 0x05, 0x8a, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x80, 50 | 0x00, 0x82, 0x00, 0x8c, 0x00, 0x00, 0x2a, 0x00, 0x08, 0x00, 0x40, 0x08, 0x84, 0x20, 0x01, 0x40, 0x20, 51 | 0x00, 0x04, 0x20, 0x00, 0x0e, 0x80, 0x00, 0x10, 0x80, 0xc0, 0xc0, 0x20, 0x02, 0x27, 0xa4, 0x31, 0x40, 52 | 0x08, 0x60, 0x40, 0x02, 0x00, 0x88, 0x18, 0x03, 0x82, 0x40, 0x08, 0x22, 0x64, 0x08, 0x44, 0x00, 0x00, 53 | 0x00, 0x08, 0x02, 0x00, 0x10, 0x49, 0x10, 0x18, 0x24, 0x42, 0x03, 0x00, 0x40, 0x11, 0x08, 0x40, 0x00, 54 | 0x00, 0x4c, 0x10, 0x8c, 0x41, 0x18, 0x80, 0x00, 0x81, 0x40, 0x80, 0x20, 0x80, 0x00, 0x40, 0x10, 0x00, 55 | 0x01, 0x00, 0xa0, 0x00, 0x44, 0x10, 0x50, 0x01, 0x08, 0x92, 0x00, 0x00, 0x20, 0x00, 0x2f, 0x00, 0x00, 56 | 0x00, 0x00, 0x08, 0x16, 0x06, 0x10, 0x00, 0x19, 0xc0, 0x40, 0x20, 0x20, 0x88, 0x30, 0x90, 0x01, 0x00, 57 | 0x00, 0x20, 0x00, 0x13, 0x00, 0x11, 0x20, 0x14, 0x00, 0x22, 0x30, 0x00, 0x00, 0x15, 0x41, 0x00, 0x00, 58 | 0x00, 0x00, 0x81, 0x20, 0x00, 0x00, 0x08, 0x11, 0x28, 0x20, 0x10, 0x11, 0x00, 0x00, 0x40, 0x00, 0x20, 59 | 0x00, 0x30, 0x0d, 0x04, 0x30, 0x00, 0x41, 0x10, 0x10, 0x88, 0x01, 0x10, 0x40, 0x1a, 0x02, 0x41, 0x00, 60 | 0x00, 0x40, 0x60, 0x62, 0x21, 0x80, 0x02, 0x20, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x24, 0x40, 0x02, 61 | 0x00, 0x01, 0x08, 0x14, 0x20, 0x02, 0x04, 0x14, 0x00, 0x02, 0x38, 0x42, 0x01, 0x80, 0x40, 0x90, 0x00, 62 | 0x01, 0x21, 0x28, 0x10, 0x4a, 0x40, 0x01, 0x04, 0x40, 0x12, 0x08, 0x40, 0x30, 0x00, 0x00, 0x00, 0x00, 63 | 0x00, 0x08, 0xa0, 0x10, 0x80, 0x04, 0x60, 0x40, 0x08, 0x88, 0x04, 0x08, 0x07, 0x4e, 0xa0, 0x20, 0x00, 64 | 0x00, 0x22, 0x04, 0x44, 0x08, 0x08, 0x4c, 0x10, 0x00, 0xdd, 0x01, 0xc4, 0x31, 0x08, 0x42, 0x00, 0x00, 65 | 0x04, 0x20, 0x22, 0x21, 0x00, 0x08, 0x04, 0xa0, 0x00, 0x00, 0x80, 0x00, 0x02, 0x02, 0x00, 0x86, 0x00, 66 | 0x00, 0x29, 0x50, 0x08, 0x84, 0x08, 0x29, 0x80, 0x40, 0x84, 0x00, 0x20, 0x40, 0x00, 0x00, 0x10, 0x00, 67 | 0x00, 0x08, 0x08, 0x22, 0x20, 0x40, 0x4a, 0x05, 0x40, 0x00, 0x03, 0x08, 0x00, 0xc4, 0x43, 0x10, 0x00, 68 | 0x20, 0x04, 0x83, 0x20, 0x82, 0x00, 0x01, 0x04, 0x10, 0x38, 0x04, 0x00, 0x00, 0x03, 0x80, 0x04, 0x00, 69 | 0x00, 0x09, 0x10, 0x90, 0x00, 0x40, 0x10, 0x08, 0x0c, 0xa0, 0x20, 0x00, 0x24, 0xa0, 0x48, 0x04, 0x00, 70 | 0x00, 0x11, 0x01, 0x92, 0xc0, 0x21, 0x10, 0x00, 0x2a, 0x20, 0x00, 0x88, 0x15, 0x12, 0x48, 0x30, 0x00, 71 | 0x05, 0x01, 0x20, 0x04, 0x02, 0x00, 0x22, 0x43, 0x90, 0x10, 0x08, 0x80, 0x10, 0x80, 0x02, 0x00, 0x00, 72 | 0x00, 0x00, 0x00, 0x20, 0x10, 0x22, 0x90, 0x20, 0x80, 0x85, 0x00, 0x10, 0x02, 0x18, 0x02, 0x60, 0x00, 73 | 0x00, 0x21, 0xc8, 0x04, 0x08, 0x42, 0x8c, 0x92, 0x54, 0x04, 0x02, 0x01, 0x00, 0x01, 0xc1, 0x00, 0x00, 74 | 0x00, 0x00, 0x04, 0x04, 0x00, 0x01, 0x80, 0x08, 0x04, 0x00, 0x32, 0x00, 0x05, 0x00, 0x04, 0x08, 0x00, 75 | 0x00, 0x00, 0x41, 0x00, 0x40, 0x00, 0x22, 0x08, 0x00, 0x04, 0x00, 0x10, 0x60, 0x10, 0x00, 0x08, 0x00, 76 | 0x02, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 77 | 0x04, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0xa0, 0x00, 78 | 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 79 | 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x10, 0x00, 0x00, 80 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 81 | 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 82 | 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_4 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_4_map, 95 | }; 96 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_5.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_5.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_5 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_5 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_5 uint8_t background_5_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x04, 0x00, 0x00, 0x50, 0x00, 0x04, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 23 | 0x00, 0x10, 0x00, 0x88, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x90, 0x00, 24 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 25 | 0x00, 0x20, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 26 | 0x00, 0x00, 0x80, 0x00, 0x02, 0x20, 0x02, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x28, 0x00, 27 | 0x02, 0xa8, 0x00, 0x30, 0x02, 0x40, 0xa0, 0x84, 0x04, 0x01, 0x00, 0x02, 0x01, 0x0c, 0x00, 0x24, 0x00, 28 | 0x00, 0x00, 0x38, 0x08, 0x02, 0x07, 0x41, 0xb0, 0x84, 0xa4, 0x0b, 0x00, 0x30, 0x14, 0x10, 0x02, 0x00, 29 | 0x00, 0x10, 0xb9, 0x80, 0x88, 0x0c, 0x08, 0x41, 0x28, 0x10, 0x81, 0x80, 0x6c, 0x01, 0x09, 0x00, 0x00, 30 | 0x04, 0x80, 0x08, 0x00, 0x08, 0x50, 0x60, 0x80, 0x84, 0x81, 0x44, 0x00, 0x18, 0x81, 0x00, 0x00, 0x10, 31 | 0x00, 0x00, 0x54, 0x81, 0x48, 0x59, 0x11, 0x40, 0x31, 0x04, 0x04, 0x73, 0x00, 0x04, 0x38, 0xa0, 0x00, 32 | 0x00, 0x05, 0x1e, 0x00, 0x20, 0x00, 0x10, 0x28, 0x08, 0x00, 0x27, 0x0c, 0xc0, 0x04, 0xa0, 0xa0, 0x00, 33 | 0x00, 0x81, 0xd4, 0x02, 0xc2, 0xa8, 0x25, 0x00, 0x00, 0x85, 0x38, 0x21, 0x28, 0x20, 0x80, 0x80, 0x00, 34 | 0x00, 0x12, 0x80, 0x00, 0x20, 0x40, 0x00, 0x01, 0x61, 0x02, 0x05, 0x41, 0x08, 0x00, 0x00, 0x10, 0x10, 35 | 0x00, 0x04, 0x4a, 0x09, 0x81, 0x09, 0x8a, 0x16, 0x08, 0x06, 0x04, 0x04, 0x00, 0x0a, 0x20, 0x00, 0x00, 36 | 0x00, 0x33, 0xc0, 0xc0, 0x01, 0x30, 0x00, 0x10, 0x02, 0x46, 0x00, 0x40, 0x10, 0x90, 0x08, 0x00, 0x00, 37 | 0x00, 0x28, 0xc2, 0x20, 0x40, 0x04, 0x48, 0x01, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x80, 0x20, 0x00, 38 | 0x00, 0x01, 0x00, 0x81, 0x12, 0x80, 0x18, 0x80, 0x08, 0x00, 0x02, 0x81, 0x03, 0xa0, 0x00, 0x88, 0x00, 39 | 0x01, 0xc1, 0x40, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x0a, 0x96, 0x00, 0x02, 0x38, 0x00, 40 | 0x00, 0x23, 0x00, 0x42, 0x10, 0x08, 0x28, 0x80, 0xa1, 0x00, 0x00, 0x51, 0x40, 0x00, 0x00, 0xc0, 0x80, 41 | 0x00, 0x00, 0x20, 0x00, 0x80, 0x10, 0x81, 0x10, 0x90, 0x02, 0x94, 0x08, 0x10, 0xf0, 0x32, 0x10, 0x00, 42 | 0x00, 0x28, 0x00, 0x10, 0x85, 0x00, 0x10, 0xc0, 0x04, 0x08, 0x00, 0x30, 0x00, 0x30, 0x04, 0xb0, 0x00, 43 | 0x10, 0x10, 0x02, 0x02, 0x00, 0x02, 0x00, 0x90, 0x04, 0x01, 0x83, 0x60, 0x02, 0x08, 0x21, 0xc8, 0x00, 44 | 0x00, 0x00, 0x00, 0x40, 0x31, 0x0c, 0x00, 0x0c, 0x00, 0x12, 0x41, 0x40, 0x2a, 0x84, 0x42, 0x20, 0x00, 45 | 0x00, 0x0a, 0x01, 0x65, 0x0c, 0x20, 0x00, 0x84, 0x80, 0x08, 0x10, 0xa0, 0x00, 0x10, 0x04, 0x0c, 0x00, 46 | 0x00, 0x04, 0x48, 0x11, 0x08, 0x00, 0x20, 0x22, 0x03, 0x00, 0x8c, 0x00, 0x20, 0x50, 0x04, 0x00, 0x00, 47 | 0x00, 0x00, 0x80, 0x84, 0x82, 0x08, 0x00, 0x48, 0x23, 0x82, 0x04, 0x52, 0x04, 0x82, 0x00, 0x04, 0x40, 48 | 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x01, 0x60, 0x30, 0xc0, 0x80, 0x0a, 0x00, 0x20, 0x14, 0x00, 0x00, 49 | 0x00, 0x44, 0x80, 0x12, 0x02, 0x41, 0xa4, 0x00, 0x23, 0x02, 0x20, 0x00, 0x50, 0x04, 0x18, 0x0c, 0x00, 50 | 0x00, 0x04, 0x06, 0x87, 0x03, 0x01, 0x00, 0x00, 0x82, 0x10, 0x01, 0x91, 0x6a, 0x04, 0x20, 0x00, 0x00, 51 | 0x00, 0x08, 0x00, 0x00, 0x05, 0x08, 0x00, 0x20, 0xc0, 0x00, 0x01, 0x41, 0x2a, 0x60, 0x20, 0x00, 0x00, 52 | 0x04, 0x1c, 0x00, 0x11, 0x00, 0x0a, 0x01, 0x02, 0x00, 0x1c, 0x28, 0x82, 0x80, 0x09, 0x08, 0x10, 0x00, 53 | 0x00, 0x09, 0xa2, 0x0a, 0x36, 0x00, 0x44, 0x40, 0x00, 0x80, 0x00, 0xe8, 0x20, 0x00, 0x00, 0x30, 0x00, 54 | 0x04, 0x50, 0x80, 0x50, 0x58, 0x80, 0xa0, 0x40, 0x18, 0x40, 0x04, 0x02, 0x00, 0x02, 0x0c, 0x11, 0x00, 55 | 0x00, 0x02, 0x00, 0x20, 0x02, 0x08, 0x08, 0x02, 0x00, 0x88, 0x10, 0x00, 0x21, 0x40, 0x20, 0x12, 0x00, 56 | 0x08, 0x00, 0x41, 0xc0, 0x00, 0x19, 0xa2, 0x01, 0x0a, 0x00, 0x01, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 57 | 0x00, 0x08, 0x20, 0x30, 0x01, 0x00, 0x00, 0x10, 0x10, 0x00, 0x50, 0x06, 0x10, 0x64, 0x40, 0xd0, 0x00, 58 | 0x00, 0x00, 0x01, 0x04, 0x48, 0x02, 0x80, 0x00, 0x04, 0x42, 0x10, 0x34, 0x20, 0x49, 0xa2, 0x0c, 0x00, 59 | 0x00, 0x08, 0x80, 0x80, 0x20, 0x08, 0x46, 0x24, 0x01, 0x80, 0x1e, 0xc8, 0x61, 0x00, 0x12, 0x20, 0x00, 60 | 0x00, 0x41, 0x82, 0x49, 0x00, 0x80, 0x04, 0x81, 0xa4, 0x00, 0x40, 0x80, 0x12, 0x20, 0x40, 0x26, 0x00, 61 | 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0d, 0xc0, 0x21, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 62 | 0x00, 0x0a, 0x00, 0x60, 0x14, 0x45, 0x48, 0x40, 0x88, 0x21, 0x00, 0x44, 0x00, 0x08, 0x80, 0x20, 0x00, 63 | 0x00, 0x00, 0x03, 0x40, 0x48, 0x10, 0xe0, 0x9c, 0x10, 0x00, 0xa0, 0x40, 0x01, 0x40, 0x80, 0x18, 0x00, 64 | 0x00, 0x08, 0x50, 0x02, 0x30, 0x01, 0x00, 0x20, 0x20, 0x24, 0x00, 0x80, 0x8c, 0x66, 0x04, 0x00, 0x00, 65 | 0x00, 0x00, 0x21, 0x00, 0x48, 0x00, 0x43, 0xa8, 0x3c, 0x00, 0x00, 0x08, 0x10, 0x00, 0x44, 0x14, 0x00, 66 | 0x01, 0x00, 0x02, 0x54, 0x40, 0x82, 0x30, 0x11, 0x00, 0x02, 0x04, 0x51, 0x00, 0x13, 0x1c, 0x00, 0x80, 67 | 0x00, 0x02, 0x20, 0x8a, 0xb1, 0xc1, 0x20, 0x24, 0x01, 0x00, 0x10, 0x00, 0x11, 0x0c, 0x2a, 0x5c, 0x00, 68 | 0x00, 0xa2, 0x1a, 0x26, 0xb8, 0x04, 0x00, 0x00, 0x62, 0x82, 0x00, 0x05, 0x00, 0x42, 0x02, 0x00, 0x00, 69 | 0x00, 0x00, 0x01, 0x20, 0x22, 0x03, 0x00, 0x01, 0x28, 0x40, 0x80, 0x60, 0x70, 0x0a, 0xc0, 0x02, 0x00, 70 | 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x09, 0x04, 0x10, 0x00, 0x04, 0x00, 0x00, 0x82, 0x02, 0x00, 71 | 0x04, 0x84, 0x44, 0x1b, 0xe0, 0x40, 0x02, 0x28, 0x00, 0x00, 0x21, 0x08, 0x0a, 0x07, 0x05, 0x30, 0x00, 72 | 0x00, 0x03, 0x20, 0x00, 0x04, 0x00, 0x18, 0x00, 0x01, 0x90, 0x10, 0x89, 0x03, 0x84, 0x40, 0x00, 0x00, 73 | 0x00, 0x00, 0x10, 0x30, 0x40, 0x81, 0x40, 0x40, 0xc0, 0x10, 0x00, 0x10, 0x09, 0x00, 0x41, 0x00, 0x00, 74 | 0x00, 0x18, 0x41, 0xe2, 0x15, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x53, 0x88, 0x08, 0x20, 0x84, 0x00, 75 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x0c, 0x00, 0x08, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 76 | 0x00, 0x81, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x08, 0x42, 0x0a, 0x04, 0x00, 0x00, 77 | 0x05, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x80, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 78 | 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x20, 0xa0, 0x10, 0x00, 0x02, 0x00, 0x60, 0x00, 0x00, 79 | 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 80 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 81 | 0x00, 0x00, 0x00, 0x02, 0x80, 0x04, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 82 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_5 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_5_map, 95 | }; 96 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/images/background_6.c: -------------------------------------------------------------------------------- 1 | #include "../../include/images/background_6.h" 2 | 3 | #include 4 | 5 | #ifndef LV_ATTRIBUTE_MEM_ALIGN 6 | #define LV_ATTRIBUTE_MEM_ALIGN 7 | #endif 8 | 9 | #ifndef LV_ATTRIBUTE_IMG_BACKGROUND_6 10 | #define LV_ATTRIBUTE_IMG_BACKGROUND_6 11 | #endif 12 | 13 | const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BACKGROUND_6 uint8_t background_6_map[] = { 14 | 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ 15 | 0x00, 0x00, 0x00, 0xff, /*Color of index 1*/ 16 | 17 | 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 20 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 22 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x20, 23 | 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 24 | 0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x12, 0x00, 0x04, 0x00, 0x00, 0x80, 0x22, 0x00, 0x80, 0x40, 0x00, 25 | 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x90, 0x10, 0x20, 0x00, 0x41, 0x00, 0x10, 0x08, 0x00, 0x02, 0x00, 26 | 0x00, 0x00, 0x88, 0x00, 0x00, 0x08, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x58, 0x20, 27 | 0x20, 0x20, 0x00, 0x80, 0x84, 0x00, 0x48, 0x00, 0x51, 0x42, 0x00, 0x40, 0x04, 0x8d, 0x90, 0x00, 0x00, 28 | 0x00, 0x48, 0x08, 0x80, 0x10, 0x06, 0x00, 0x80, 0x04, 0x06, 0x43, 0x50, 0xb0, 0x22, 0x00, 0x08, 0x00, 29 | 0x01, 0x30, 0x62, 0x00, 0x0d, 0x21, 0x10, 0x01, 0x08, 0x84, 0x00, 0x08, 0x42, 0x80, 0x00, 0x00, 0x00, 30 | 0x08, 0x00, 0x01, 0x00, 0x04, 0x01, 0x00, 0x80, 0x00, 0xa1, 0x08, 0x44, 0x00, 0x20, 0x12, 0x01, 0x00, 31 | 0x00, 0x04, 0x00, 0x28, 0x40, 0x00, 0x01, 0x50, 0x08, 0xd4, 0x40, 0x80, 0xb1, 0x08, 0x00, 0x00, 0x00, 32 | 0x00, 0x58, 0xc0, 0x80, 0x20, 0x04, 0x30, 0x10, 0x10, 0x40, 0x02, 0x00, 0x0d, 0x81, 0x40, 0x0c, 0x00, 33 | 0x00, 0x86, 0x80, 0x50, 0x20, 0x96, 0x04, 0x00, 0x02, 0x16, 0x08, 0x41, 0x0c, 0x42, 0x00, 0x25, 0x40, 34 | 0x00, 0x02, 0x00, 0x40, 0x00, 0x08, 0x80, 0x30, 0x01, 0x42, 0x08, 0x31, 0x00, 0x0c, 0x22, 0x84, 0x00, 35 | 0x00, 0x22, 0x82, 0x0e, 0x44, 0xc0, 0x05, 0x00, 0x0a, 0x22, 0x02, 0x00, 0x10, 0x11, 0x24, 0x10, 0x10, 36 | 0x00, 0x18, 0x54, 0x91, 0x81, 0x00, 0x11, 0x01, 0x60, 0x04, 0x00, 0x44, 0x40, 0x00, 0x80, 0x00, 0x00, 37 | 0x00, 0x00, 0x08, 0x00, 0x29, 0x0c, 0x46, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0xc1, 0x00, 0x30, 0x00, 38 | 0x00, 0x10, 0x20, 0x81, 0x00, 0x01, 0x40, 0x10, 0xa0, 0x10, 0x00, 0x20, 0xa0, 0x19, 0x10, 0xc4, 0x00, 39 | 0x00, 0x08, 0x80, 0x04, 0x40, 0x80, 0x04, 0x22, 0x80, 0x00, 0xa8, 0x31, 0x08, 0x00, 0x22, 0x22, 0x00, 40 | 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 41 | 0x00, 0x04, 0x20, 0x51, 0x00, 0xc0, 0x10, 0xc0, 0x01, 0x10, 0x00, 0x82, 0x20, 0x02, 0x8c, 0x02, 0x00, 42 | 0x00, 0x04, 0x00, 0x40, 0x40, 0x03, 0x10, 0x68, 0x88, 0x09, 0x08, 0x89, 0x5d, 0x12, 0x81, 0x04, 0x00, 43 | 0x08, 0x21, 0x04, 0x01, 0x20, 0x80, 0x04, 0x28, 0x01, 0x20, 0x04, 0x08, 0x20, 0x28, 0x04, 0x00, 0x00, 44 | 0x00, 0x00, 0x96, 0x80, 0x08, 0x09, 0x09, 0x00, 0x00, 0x00, 0xa4, 0x13, 0x00, 0x42, 0x00, 0x41, 0x00, 45 | 0x00, 0x01, 0x00, 0x80, 0x86, 0x08, 0x10, 0x00, 0xc0, 0x01, 0x21, 0x80, 0x11, 0x82, 0x04, 0x00, 0x80, 46 | 0x04, 0x08, 0x40, 0x00, 0x10, 0xa4, 0x01, 0x10, 0x01, 0x06, 0x02, 0x26, 0x5c, 0x00, 0x10, 0x31, 0x00, 47 | 0x00, 0x18, 0x90, 0x0e, 0x00, 0x00, 0x94, 0x00, 0x10, 0x50, 0x20, 0x80, 0x02, 0x00, 0x42, 0x28, 0x00, 48 | 0x00, 0x00, 0x0a, 0x40, 0x02, 0x60, 0x00, 0x2c, 0x80, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x40, 49 | 0x00, 0x00, 0x42, 0x05, 0x0a, 0x00, 0x80, 0x80, 0x51, 0x11, 0x01, 0x00, 0x02, 0x50, 0x9a, 0x04, 0x00, 50 | 0x00, 0x00, 0x08, 0x10, 0x40, 0xa8, 0x00, 0x00, 0x92, 0x60, 0x00, 0x00, 0x00, 0x20, 0x24, 0x00, 0x00, 51 | 0x00, 0x0c, 0x00, 0x00, 0x8a, 0x49, 0x80, 0x61, 0x00, 0x01, 0x88, 0x20, 0x80, 0x80, 0x04, 0x80, 0x00, 52 | 0x00, 0xfc, 0x40, 0x20, 0x81, 0x16, 0x00, 0x20, 0x11, 0x00, 0x02, 0x04, 0x00, 0xb8, 0x00, 0x00, 0x00, 53 | 0x00, 0x00, 0x20, 0xa0, 0x21, 0x00, 0x00, 0x80, 0x20, 0x00, 0x6d, 0x10, 0x22, 0x00, 0x20, 0x04, 0x00, 54 | 0x01, 0x50, 0x00, 0x40, 0x00, 0x01, 0x10, 0x00, 0xc8, 0x44, 0x20, 0x40, 0x04, 0x04, 0x01, 0x00, 0x40, 55 | 0x00, 0x20, 0x04, 0x42, 0x08, 0x02, 0x00, 0x0a, 0x01, 0x00, 0x10, 0x02, 0x00, 0xd0, 0x02, 0x00, 0x00, 56 | 0x08, 0x01, 0x0c, 0x20, 0x80, 0x01, 0x00, 0x01, 0x40, 0x00, 0x10, 0x01, 0x00, 0x00, 0x58, 0x10, 0x20, 57 | 0x00, 0x85, 0x00, 0x68, 0x00, 0x10, 0x50, 0x00, 0x30, 0x90, 0x00, 0x08, 0x10, 0x40, 0x00, 0x00, 0x80, 58 | 0x00, 0x00, 0x08, 0x10, 0x00, 0x22, 0x80, 0x20, 0x40, 0x85, 0x04, 0x01, 0x42, 0x44, 0x82, 0x80, 0x00, 59 | 0x00, 0x49, 0x0a, 0x00, 0x00, 0x00, 0x14, 0x15, 0x82, 0x10, 0x04, 0x0f, 0x40, 0x43, 0x00, 0x10, 0x00, 60 | 0x04, 0x00, 0x2a, 0x10, 0x20, 0x00, 0x00, 0x0d, 0x84, 0x80, 0x00, 0x82, 0x08, 0x09, 0x06, 0x0c, 0x00, 61 | 0x00, 0x42, 0x40, 0x10, 0xb1, 0x00, 0x00, 0x82, 0x00, 0x00, 0x20, 0x00, 0x00, 0x24, 0x00, 0x02, 0x00, 62 | 0x00, 0x00, 0x20, 0x60, 0x01, 0x60, 0x40, 0x00, 0x40, 0x81, 0x21, 0x80, 0x00, 0x61, 0x00, 0x00, 0x00, 63 | 0x00, 0x00, 0x01, 0x80, 0x4a, 0x2d, 0x30, 0x01, 0x01, 0x14, 0x00, 0x0e, 0x00, 0x04, 0x21, 0x08, 0x00, 64 | 0x01, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0xaa, 0x08, 0x00, 0x04, 0x00, 0x00, 65 | 0x00, 0x01, 0x0e, 0x10, 0x41, 0x04, 0x00, 0x00, 0x82, 0x01, 0x44, 0x00, 0x05, 0x21, 0x58, 0x05, 0x00, 66 | 0x00, 0x05, 0x40, 0x02, 0xa8, 0x85, 0x00, 0x80, 0x52, 0x20, 0x10, 0x01, 0x00, 0x0c, 0x00, 0x50, 0x00, 67 | 0x00, 0x00, 0x10, 0x8a, 0x02, 0x21, 0x38, 0x40, 0x82, 0x40, 0x00, 0x91, 0x80, 0x20, 0xa8, 0x4e, 0x00, 68 | 0x00, 0x02, 0x00, 0x00, 0x21, 0x02, 0x02, 0xc6, 0x08, 0x14, 0x00, 0x20, 0x00, 0x09, 0x80, 0xc4, 0x00, 69 | 0x00, 0x00, 0x00, 0x05, 0x0e, 0x10, 0x80, 0x02, 0x02, 0x06, 0x48, 0x40, 0x24, 0x10, 0x84, 0x0a, 0x20, 70 | 0x00, 0x10, 0x81, 0x00, 0x00, 0x01, 0x09, 0x40, 0x08, 0x10, 0x00, 0x04, 0xa5, 0xc0, 0x01, 0x58, 0x00, 71 | 0x00, 0x24, 0x00, 0x24, 0x08, 0x84, 0x40, 0x00, 0x02, 0x20, 0x10, 0x00, 0x4b, 0x40, 0x84, 0x40, 0x00, 72 | 0x00, 0x02, 0x00, 0x02, 0x84, 0x04, 0x22, 0x10, 0x1a, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xac, 0x00, 73 | 0x00, 0x00, 0x90, 0xb0, 0x02, 0xb0, 0x02, 0x19, 0x01, 0x01, 0x61, 0x08, 0x21, 0x00, 0x04, 0x11, 0x08, 74 | 0x00, 0x11, 0xe4, 0x40, 0x41, 0xc8, 0xa0, 0x38, 0x82, 0x21, 0x0a, 0x04, 0x28, 0x00, 0x00, 0x00, 0x00, 75 | 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x28, 0x08, 0x00, 0x80, 0x00, 0x00, 0x48, 0x00, 0x00, 0x04, 0x00, 76 | 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 77 | 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x24, 0x00, 78 | 0x08, 0x80, 0x08, 0x00, 0x00, 0x00, 0xa0, 0x18, 0x00, 0x00, 0x89, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 79 | 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 80 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 81 | 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 82 | 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 84 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 85 | }; 86 | 87 | const lv_img_dsc_t background_6 = { 88 | .header.cf = LV_IMG_CF_INDEXED_1BIT, 89 | .header.always_zero = 0, 90 | .header.reserved = 0, 91 | .header.w = 135, 92 | .header.h = 68, 93 | .data_size = 1164, 94 | .data = background_6_map, 95 | }; 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nice!view Elemental 2 | 3 | ![Banner](./assets/banner.png) 4 | 5 | The nice!view Elemental is a ZMK module that delivers a bold yet minimalistic interface for your keyboard's display. 6 | 7 | - Makes critical information **easy to read**; 8 | - Uses **custom fonts and icons**; 9 | - Provides a **subtle animation**; 10 | - **Optimized** to render as little as possible. 11 | 12 | ## Gallery 13 | 14 | ![Animation Preview](./assets/animation.gif) 15 | ![Preview #2](./assets/preview_2.png) 16 | ![Preview #3](./assets/preview_3.png) 17 | 18 | ## Installation 19 | 20 | Only small changes are needed to your keyboard configuration's build setup. Then, you'll need to rebuild and flash your keyboard firmware. 21 | 22 | 1. In the `config/west.yml` file, add a new remote and its related project. 23 | 24 | ```diff 25 | manifest: 26 | remotes: 27 | - name: zmkfirmware 28 | url-base: https://github.com/zmkfirmware 29 | + - name: kevinpastor 30 | + url-base: https://github.com/kevinpastor 31 | projects: 32 | - name: zmk 33 | remote: zmkfirmware 34 | revision: main 35 | import: app/west.yml 36 | + - name: nice-view-elemental 37 | + remote: kevinpastor 38 | + revision: main 39 | self: 40 | path: config 41 | ``` 42 | 43 | 2. In the `build.yaml` file, replace the `nice_view` shield with `nice_view_elemental`. 44 | 45 | ```diff 46 | --- 47 | include: 48 | - board: nice_nano_v2 49 | - shield: corne_left nice_view_adapter nice_view 50 | + shield: corne_left nice_view_adapter nice_view_elemental 51 | - board: nice_nano_v2 52 | - shield: corne_right nice_view_adapter nice_view 53 | + shield: corne_right nice_view_adapter nice_view_elemental 54 | ``` 55 | 56 | 3. Build the firmware, flash it to your keyboard, and enjoy! 57 | 58 | ## Features 59 | 60 | ### Layer Name 61 | 62 | Displays the current layer name in all caps. By default, a shadow (a 4px innermost black outline) and an outline (a 1px outermost white outline) are added for easy readability. 63 | 64 | ### Background 65 | 66 | Displays a noisy background animation that fades toward the screen edges. 67 | 68 | ### Battery 69 | 70 | Displays the battery remaining power and status. 71 | 72 | | Pictogram | Description | 73 | | ---------------------------------------------------- | --------------------------------------- | 74 | | ![Battery](./assets/battery.png) | Displayed on normal battery use. | 75 | | ![Battery - Charging](./assets/battery_charging.png) | Displayed when the battery is charging. | 76 | 77 | ### Connectivity 78 | 79 | Displays the connectivity status for both the central and peripheral halves. 80 | 81 | #### Output 82 | 83 | | Pictogram | Description | 84 | | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 85 | | ![Connectivity - Bluetooth](./assets/connectivity_bluetooth.png) | Displayed when the keyboard output is sent via Bluetooth (e.g., when unplugged from USB). On the central half, a number will be displayed representing the selected Bluetooth profile. | 86 | | ![Connectivity - USB](./assets/connectivity_usb.png) | Displayed when the keyboard output is sent to USB (e.g., when plugged via USB). Only displayed on the central half. | 87 | 88 | #### Bluetooth 89 | 90 | | Pictogram | Description | 91 | | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 92 | | ![Bluetooth - Connected](./assets/bluetooth_connected.png) | On the central half, displayed when the currently selected profile is connected to the host.
On the peripheral half, displayed when connected to the central half. | 93 | | ![Bluetooth - Disconnected](./assets/bluetooth_disconnected.png) | On the central half, displayed when the currently selected profile is disconnected from the host.
On the peripheral half, displayed when disconnected from the central half. | 94 | | ![Bluetooth - Searching](./assets/bluetooth_searching.png) | Displayed when the currently selected profile is not bound to any host (e.g., when `&bt BT_CLR` was just called). Only displayed on the central half. | 95 | 96 | ## Configuration 97 | 98 | | Config | Type | Description | Default | 99 | | ----------------------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------- | ------- | 100 | | `CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION` | bool | Enables the background animation. | y | 101 | | `CONFIG_NICE_VIEW_ELEMENTAL_ANIMATION_FRAME_MS` | int | Frame delay for the animation, in milliseconds. | 250 | 102 | | `CONFIG_NICE_VIEW_ELEMENTAL_BACKGROUND` | bool | Displays a background. | y | 103 | | `CONFIG_NICE_VIEW_ELEMENTAL_OUTLINE` | bool | Displays an outline around the shadow of the layer name. The outline is the 1px white line around the layer name. | y | 104 | | `CONFIG_NICE_VIEW_ELEMENTAL_SHADOW` | bool | Displays a shadow around the layer name. The shadow is the 4px black line around the layer name. | y | 105 | 108 | 109 | ## How It Works 110 | 111 | > This implementation began with the nice!view shield source as a base. However, after numerous refactors, it has evolved into what could be considered a complete rewrite. 112 | 113 | When the `CONFIG_ZMK_DISPLAY` setting is enabled, ZMK calls the `lv_obj_t* zmk_display_status_screen()` function. This function serves as the entry point for display customization, and the `nice_view` module has a definition for it. In the nice!view Elemental module, another definition of the function exists in `src/main.c`. 114 | 115 | Because the firmware can be built for both the central and peripheral halves of the keyboard (which have slightly different display outputs), this module differentiates between them via the `void initialize_listeners()` function. This function is defined in the `src/central/initialize_listeners.c` file for the central half and in the `src/peripheral/initialize_listeners.c` file for the peripheral half. The `CMakeList.txt` file manages the selection between these, determining which files to include in each build. 116 | 117 | This module relies on both ZMK and LVGL for implementation. ZMK retrieves the current keyboard state, while LVGL, a graphics library, handles rendering. 118 | 119 | > From this point forward, we'll use the central half as an example, but the same principles apply to the peripheral half. 120 | 121 | In the main function, various canvases are initialized to facilitate rendering. The `initialize_listeners` function is called here, where all the main setup occurs. 122 | 123 | As the name implies, the `initialize_listeners` function initializes all configured listeners. Each listener is set up to respond to one or multiple events dispatched by ZMK. For example, the `zmk_layer_state_changed` event is triggered whenever the active layer changes. When an event is dispatched, one function retrieves the state necessary to process it, followed by another function that processes the event based on that state. In listener setup, the state is stored in a global variable, and a rendering function is subsequently called. Multiple rendering functions are defined, each responsible for rendering a small display segment (e.g., the layer name). 124 | 125 | At this point, LVGL steps in to handle the actual rendering. Rendering is managed by using a canvas to draw elements on the display. Though the nice!view display is often used vertically, it is horizontally oriented with a resolution of 160x68 pixels. Because everything draws horizontally, the canvas must be rotated when needed to accommodate the vertical orientation. 126 | 127 | Although LVGL is a robust library, I ran into some issues with version 8.3, the version currently provided by ZMK, which is slightly outdated. Text should theoretically render transparently on a canvas, but I couldn't get this to work reliably. Transparent text rendering would have allowed the background and layer name to be layered separately, avoiding unnecessary re-renders. 128 | 129 | To add shadow and outline effects to the layer name, I initially considered using dilated convolution. However, due to the limitation mentioned above and due to the issue of the background somewhat corrupting the layer name canvas, I opted to manually create custom font variants. These variants were created with [PixelForge](https://sergilazaro.itch.io/pixelforge) and exported with [the Font Converter tool](https://lvgl.io/tools/fontconverter) provided by LVGL. In the end, the layer name is rendered in three steps: first with a 5px-dilated white font, then with a 4px-dilated black font, and finally with the standard custom font in white. This leaves only one pixel of white for the outline because of the overlap. 130 | 131 | Some images were drawn pixel by pixel out of simplicity while other were drawn on [Photopea](https://www.photopea.com/) (a free web-based Photoshop alternative) and exported with [the Image Converter tool](https://lvgl.io/tools/imageconverter) provided again by LVGL. 132 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/fonts/custom_font_shadow.c: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Size: 41 px 3 | * Bpp: 1 4 | * Opts: --bpp 1 --size 41 --no-compress --font Custom Font Shadow.ttf --range 32-127 --format lvgl -o custom_font_shadow.c 5 | ******************************************************************************/ 6 | 7 | // I'm not sure why I had to add 2 to the size I was using in Photopea, which was 39. 8 | 9 | #include "../../include/fonts/custom_font_shadow.h" 10 | 11 | #include 12 | 13 | #ifndef CUSTOM_FONT_SHADOW 14 | #define CUSTOM_FONT_SHADOW 1 15 | #endif 16 | 17 | #if CUSTOM_FONT_SHADOW 18 | 19 | /*----------------- 20 | * BITMAPS 21 | *----------------*/ 22 | 23 | /*Store the image of the glyphs*/ 24 | static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 25 | /* U+0020 " " */ 26 | 0x0, 27 | 28 | /* U+0041 "A" */ 29 | 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 30 | 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 31 | 0xff, 0xc0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 32 | 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 33 | 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 34 | 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 35 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 36 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 37 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 38 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 39 | 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 40 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 41 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 42 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 43 | 0xff, 0xff, 44 | 45 | /* U+0042 "B" */ 46 | 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 47 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 48 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 49 | 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 50 | 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 51 | 0xff, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 52 | 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x3f, 53 | 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 54 | 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 55 | 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 56 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 57 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 58 | 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xc3, 0xff, 0xff, 59 | 0x0, 60 | 61 | /* U+0043 "C" */ 62 | 0x3f, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 63 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 64 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 65 | 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 66 | 0xff, 0x3, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xfc, 67 | 0xf, 0xff, 0x3, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 68 | 0xfc, 0xf, 0xff, 0x3, 0xff, 0xc0, 0xff, 0xf0, 69 | 0x3f, 0xfc, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 70 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 71 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 72 | 0xff, 0x3f, 0xff, 0xf, 0xff, 0xc0, 73 | 74 | /* U+0044 "D" */ 75 | 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 76 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 77 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 78 | 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 79 | 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 80 | 0xff, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 81 | 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x3f, 82 | 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 83 | 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 84 | 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 85 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 86 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 87 | 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xc3, 0xff, 0xff, 88 | 0x0, 89 | 90 | /* U+0045 "E" */ 91 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 92 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 93 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 94 | 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x3f, 0xff, 95 | 0xc3, 0xff, 0xfc, 0x3f, 0xff, 0xc3, 0xff, 0xfc, 96 | 0x3f, 0xff, 0xc3, 0xff, 0xfc, 0x3f, 0xff, 0xc3, 97 | 0xff, 0xfc, 0x3f, 0xff, 0xc3, 0xff, 0xfc, 0x3f, 98 | 0xff, 0xc3, 0xff, 0xfc, 0x3f, 0xfc, 0x3, 0xff, 99 | 0xc0, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 100 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 101 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 102 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 103 | 104 | /* U+0046 "F" */ 105 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 106 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 107 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 108 | 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x3f, 0xff, 109 | 0xc3, 0xff, 0xfc, 0x3f, 0xff, 0xc3, 0xff, 0xfc, 110 | 0x3f, 0xff, 0xc3, 0xff, 0xfc, 0x3f, 0xff, 0xc3, 111 | 0xff, 0xfc, 0x3f, 0xff, 0xc3, 0xff, 0xfc, 0x3f, 112 | 0xff, 0xc3, 0xff, 0xfc, 0x3f, 0xfc, 0x3, 0xff, 113 | 0xc0, 0x3f, 0xfc, 0x3, 0xff, 0xc0, 0xff, 0xff, 114 | 0xf, 0xff, 0xf0, 0xff, 0xff, 0xf, 0xff, 0xf0, 115 | 0xff, 0xff, 0xf, 0xff, 0xf0, 0xff, 0xff, 0xf, 116 | 0xff, 0xf0, 0xff, 0xff, 0xf, 0xff, 0xf0, 117 | 118 | /* U+0047 "G" */ 119 | 0x3f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 120 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 121 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 122 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 123 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 124 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 125 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 126 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 127 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 128 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 129 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 130 | 0xff, 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 131 | 132 | /* U+0048 "H" */ 133 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 134 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 135 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 136 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 137 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 138 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 139 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 140 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 141 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 142 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 143 | 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 144 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 145 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 146 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 147 | 0xff, 0xff, 148 | 149 | /* U+0049 "I" */ 150 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 151 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 152 | 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0x3f, 0xfc, 153 | 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 154 | 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 155 | 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 156 | 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 157 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 158 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 159 | 0xff, 0xff, 0xff, 0xff, 160 | 161 | /* U+004A "J" */ 162 | 0x3f, 0xff, 0xcf, 0xff, 0xf3, 0xff, 0xfc, 0xff, 163 | 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, 0xff, 0xfc, 164 | 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf0, 0xff, 165 | 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0x3, 0xff, 0xc0, 166 | 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0x3, 0xff, 167 | 0xc0, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 0x3, 168 | 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xfc, 0xf, 0xff, 169 | 0x3, 0xff, 0xc0, 0xff, 0xf0, 0x3f, 0xfc, 0xff, 170 | 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, 0xff, 0xfc, 171 | 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, 0xff, 172 | 0xfc, 0xff, 0xfc, 0x3f, 0xff, 0x0, 173 | 174 | /* U+004B "K" */ 175 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 176 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 177 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 178 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 179 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 180 | 0xff, 0xfc, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 181 | 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 182 | 0xf0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3f, 183 | 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 184 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 185 | 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 186 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 187 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 188 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 189 | 0xff, 0xff, 190 | 191 | /* U+004C "L" */ 192 | 0xff, 0xff, 0xf, 0xff, 0xf0, 0xff, 0xff, 0xf, 193 | 0xff, 0xf0, 0xff, 0xff, 0xf, 0xff, 0xf0, 0xff, 194 | 0xff, 0xf, 0xff, 0xf0, 0xff, 0xff, 0xf, 0xff, 195 | 0xf0, 0x3f, 0xfc, 0x3, 0xff, 0xc0, 0x3f, 0xfc, 196 | 0x3, 0xff, 0xc0, 0x3f, 0xfc, 0x3, 0xff, 0xc0, 197 | 0x3f, 0xfc, 0x3, 0xff, 0xc0, 0x3f, 0xfc, 0x3, 198 | 0xff, 0xc0, 0x3f, 0xfc, 0x3, 0xff, 0xc0, 0x3f, 199 | 0xfc, 0x3, 0xff, 0xc0, 0x3f, 0xfc, 0x3, 0xff, 200 | 0xc0, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 201 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 202 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 203 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 204 | 205 | /* U+004D "M" */ 206 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 207 | 0xff, 0xcf, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 208 | 0xfc, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 209 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 210 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 211 | 0xff, 0xf, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 212 | 0xf0, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 213 | 0xf, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf0, 214 | 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xf, 215 | 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf0, 0xff, 216 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xf, 0xff, 217 | 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf0, 0xff, 0xff, 218 | 0xff, 0xc3, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 219 | 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 220 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 221 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 222 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 223 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 224 | 225 | /* U+004E "N" */ 226 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 227 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 228 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 229 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 230 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 231 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 232 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 233 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 234 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 235 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 236 | 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 237 | 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 238 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 239 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 240 | 0xff, 0xfc, 241 | 242 | /* U+004F "O" */ 243 | 0x3f, 0xff, 0xc3, 0xff, 0xfc, 0xff, 0xff, 0xff, 244 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 245 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 246 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 247 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 248 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 249 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 250 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 251 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 252 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 253 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 254 | 0xff, 0xff, 0x3f, 0xff, 0xc3, 0xff, 0xfc, 255 | 256 | /* U+0050 "P" */ 257 | 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 258 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 259 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 260 | 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 261 | 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 262 | 0xff, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 263 | 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x3f, 264 | 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf, 265 | 0xff, 0xfc, 0x3f, 0xff, 0xc0, 0xff, 0xff, 0x3, 266 | 0xff, 0xc0, 0xf, 0xff, 0x0, 0xff, 0xff, 0x3, 267 | 0xff, 0xfc, 0xf, 0xff, 0xf0, 0x3f, 0xff, 0xc0, 268 | 0xff, 0xff, 0x3, 0xff, 0xfc, 0xf, 0xff, 0xf0, 269 | 0x3f, 0xff, 0xc0, 0xff, 0xff, 0x3, 0xff, 0xfc, 270 | 0x0, 271 | 272 | /* U+0051 "Q" */ 273 | 0x3f, 0xff, 0xc0, 0xff, 0xff, 0xf, 0xff, 0xff, 274 | 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 0xff, 275 | 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 276 | 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x3f, 0xff, 277 | 0xfc, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 278 | 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 279 | 0xff, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 280 | 0xff, 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x3f, 281 | 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xcf, 282 | 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 283 | 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 284 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 285 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 286 | 0xf0, 0x1f, 0xff, 0xc0, 0x7f, 0xff, 287 | 288 | /* U+0052 "R" */ 289 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xf0, 0xff, 0xff, 290 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 291 | 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 292 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0x3f, 0xff, 293 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 294 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 295 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 296 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 297 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 298 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 299 | 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 300 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 301 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 302 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 303 | 0xff, 0xff, 304 | 305 | /* U+0053 "S" */ 306 | 0x3f, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 307 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 308 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 309 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xf, 310 | 0xff, 0xf3, 0xff, 0xfc, 0xff, 0xff, 0x3f, 0xff, 311 | 0xcf, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xcf, 312 | 0xff, 0xf3, 0xff, 0xfc, 0xff, 0xff, 0xf, 0xff, 313 | 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 314 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 315 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 316 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xc0, 317 | 318 | /* U+0054 "T" */ 319 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 320 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 321 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 322 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 323 | 0xff, 0xff, 0xff, 0xff, 0x3, 0xff, 0xc0, 0x3, 324 | 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 325 | 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 326 | 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 327 | 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 328 | 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 329 | 0xc0, 0x3, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0xf, 330 | 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 331 | 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 332 | 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 333 | 0xff, 0xf0, 334 | 335 | /* U+0055 "U" */ 336 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 337 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 338 | 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 339 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0x3f, 0xff, 340 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 341 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 342 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 343 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 344 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 345 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 346 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0x3f, 347 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 348 | 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 349 | 0xff, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xf, 350 | 0xff, 0xff, 351 | 352 | /* U+0056 "V" */ 353 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 354 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 355 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 356 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 357 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 358 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 359 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 360 | 0xfc, 0x3f, 0xff, 0xfc, 0xf, 0xff, 0xf0, 0xf, 361 | 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 362 | 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 363 | 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 364 | 0xff, 0xf0, 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 365 | 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 366 | 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 367 | 0xff, 0xc0, 368 | 369 | /* U+0057 "W" */ 370 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 371 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 372 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 373 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 374 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 375 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 376 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 377 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 378 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 379 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 380 | 0xf, 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xf0, 381 | 0xf, 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xf0, 382 | 0xf, 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xf0, 383 | 0xf, 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xf0, 384 | 0xf, 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xf0, 385 | 0x3, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xc0, 386 | 0x3, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xc0, 387 | 0x3, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xc0, 388 | 0x3, 0xff, 0xff, 0xc0, 0x3, 0xff, 0xff, 0xc0, 389 | 390 | /* U+0058 "X" */ 391 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 392 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 393 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 394 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 395 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 396 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 397 | 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 398 | 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 399 | 0xff, 0xf0, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 400 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 401 | 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 402 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 403 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 404 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 405 | 0xff, 0xff, 406 | 407 | /* U+0059 "Y" */ 408 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 409 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 410 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 411 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 412 | 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 413 | 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 414 | 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 415 | 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 416 | 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 417 | 0x3, 0xff, 0xc0, 0x3, 0xff, 0xc0, 0x3, 0xff, 418 | 0xc0, 0x3, 0xff, 0xc0, 0xf, 0xff, 0xf0, 0xf, 419 | 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 420 | 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 421 | 0xf0, 0xf, 0xff, 0xf0, 0xf, 0xff, 0xf0, 0xf, 422 | 0xff, 0xf0, 423 | 424 | /* U+005A "Z" */ 425 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 426 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 427 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 428 | 0xff, 0xff, 0xff, 0xf, 0xff, 0xc3, 0xff, 0xf3, 429 | 0xff, 0xfc, 0xff, 0xff, 0x3f, 0xff, 0xf, 0xff, 430 | 0xc3, 0xff, 0xf0, 0xff, 0xfc, 0xff, 0xff, 0x3f, 431 | 0xff, 0xcf, 0xff, 0xc3, 0xff, 0xf0, 0xff, 0xfc, 432 | 0x3f, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 433 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 434 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 435 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0 436 | }; 437 | 438 | 439 | /*--------------------- 440 | * GLYPH DESCRIPTION 441 | *--------------------*/ 442 | 443 | static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { 444 | {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, 445 | {.bitmap_index = 0, .adv_w = 32, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, 446 | {.bitmap_index = 1, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 447 | {.bitmap_index = 115, .adv_w = 288, .box_w = 22, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 448 | {.bitmap_index = 220, .adv_w = 224, .box_w = 18, .box_h = 38, .ofs_x = 0, .ofs_y = -4}, 449 | {.bitmap_index = 306, .adv_w = 288, .box_w = 22, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 450 | {.bitmap_index = 411, .adv_w = 208, .box_w = 20, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 451 | {.bitmap_index = 506, .adv_w = 224, .box_w = 20, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 452 | {.bitmap_index = 601, .adv_w = 288, .box_w = 20, .box_h = 38, .ofs_x = 0, .ofs_y = -4}, 453 | {.bitmap_index = 696, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 454 | {.bitmap_index = 810, .adv_w = 160, .box_w = 16, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 455 | {.bitmap_index = 886, .adv_w = 192, .box_w = 18, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 456 | {.bitmap_index = 972, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 457 | {.bitmap_index = 1086, .adv_w = 224, .box_w = 20, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 458 | {.bitmap_index = 1181, .adv_w = 384, .box_w = 30, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 459 | {.bitmap_index = 1324, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 460 | {.bitmap_index = 1438, .adv_w = 288, .box_w = 20, .box_h = 38, .ofs_x = 0, .ofs_y = -4}, 461 | {.bitmap_index = 1533, .adv_w = 256, .box_w = 22, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 462 | {.bitmap_index = 1638, .adv_w = 288, .box_w = 22, .box_h = 40, .ofs_x = 0, .ofs_y = -6}, 463 | {.bitmap_index = 1748, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 464 | {.bitmap_index = 1862, .adv_w = 192, .box_w = 18, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 465 | {.bitmap_index = 1948, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 466 | {.bitmap_index = 2062, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 467 | {.bitmap_index = 2176, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 468 | {.bitmap_index = 2290, .adv_w = 416, .box_w = 32, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 469 | {.bitmap_index = 2442, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 470 | {.bitmap_index = 2556, .adv_w = 288, .box_w = 24, .box_h = 38, .ofs_x = -2, .ofs_y = -4}, 471 | {.bitmap_index = 2670, .adv_w = 192, .box_w = 18, .box_h = 38, .ofs_x = -2, .ofs_y = -4} 472 | }; 473 | 474 | /*--------------------- 475 | * CHARACTER MAPPING 476 | *--------------------*/ 477 | 478 | 479 | 480 | /*Collect the unicode lists and glyph_id offsets*/ 481 | static const lv_font_fmt_txt_cmap_t cmaps[] = 482 | { 483 | { 484 | .range_start = 32, .range_length = 1, .glyph_id_start = 1, 485 | .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY 486 | }, 487 | { 488 | .range_start = 65, .range_length = 26, .glyph_id_start = 2, 489 | .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY 490 | } 491 | }; 492 | 493 | 494 | 495 | /*-------------------- 496 | * ALL CUSTOM DATA 497 | *--------------------*/ 498 | 499 | #if LVGL_VERSION_MAJOR == 8 500 | /*Store all the custom data of the font*/ 501 | static lv_font_fmt_txt_glyph_cache_t cache; 502 | #endif 503 | 504 | #if LVGL_VERSION_MAJOR >= 8 505 | static const lv_font_fmt_txt_dsc_t font_dsc = { 506 | #else 507 | static lv_font_fmt_txt_dsc_t font_dsc = { 508 | #endif 509 | .glyph_bitmap = glyph_bitmap, 510 | .glyph_dsc = glyph_dsc, 511 | .cmaps = cmaps, 512 | .kern_dsc = NULL, 513 | .kern_scale = 0, 514 | .cmap_num = 2, 515 | .bpp = 1, 516 | .kern_classes = 0, 517 | .bitmap_format = 0, 518 | #if LVGL_VERSION_MAJOR == 8 519 | .cache = &cache 520 | #endif 521 | }; 522 | 523 | 524 | 525 | /*----------------- 526 | * PUBLIC FONT 527 | *----------------*/ 528 | 529 | /*Initialize a public general font descriptor*/ 530 | #if LVGL_VERSION_MAJOR >= 8 531 | const lv_font_t custom_font_shadow = { 532 | #else 533 | lv_font_t custom_font_shadow = { 534 | #endif 535 | .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ 536 | .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ 537 | .line_height = 40, /*The maximum line height required by the font*/ 538 | .base_line = 6, /*Baseline measured from the bottom of the line*/ 539 | #if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) 540 | .subpx = LV_FONT_SUBPX_NONE, 541 | #endif 542 | #if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 543 | .underline_position = 0, 544 | .underline_thickness = 0, 545 | #endif 546 | .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ 547 | #if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 548 | .fallback = NULL, 549 | #endif 550 | .user_data = NULL, 551 | }; 552 | 553 | #endif /*#if CUSTOM_FONT_SHADOW*/ 554 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/fonts/custom_font_22.c: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Size: 22 px 3 | * Bpp: 1 4 | * Opts: --bpp 1 --size 22 --no-compress --font Custom Font.woff --range 32-127 --format lvgl -o custom_font_22.c 5 | ******************************************************************************/ 6 | 7 | #include "../../include/fonts/custom_font_22.h" 8 | 9 | #include 10 | 11 | #ifndef CUSTOM_FONT_22 12 | #define CUSTOM_FONT_22 1 13 | #endif 14 | 15 | #if CUSTOM_FONT_22 16 | 17 | /*----------------- 18 | * BITMAPS 19 | *----------------*/ 20 | 21 | /*Store the image of the glyphs*/ 22 | static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 23 | /* U+0020 " " */ 24 | 0x0, 25 | 26 | /* U+0021 "!" */ 27 | 0xff, 0xff, 0xff, 0x3c, 28 | 29 | /* U+0022 "\"" */ 30 | 0xb6, 0xd0, 31 | 32 | /* U+0023 "#" */ 33 | 0x52, 0xbe, 0xa5, 0x2b, 0xea, 0x50, 34 | 35 | /* U+0024 "$" */ 36 | 0x21, 0x8, 0x7, 0xe7, 0x1c, 0x71, 0xc6, 0x39, 37 | 0xf8, 0x4, 0x21, 0x0, 38 | 39 | /* U+0025 "%" */ 40 | 0x7f, 0x86, 0xc4, 0x36, 0x21, 0xb2, 0xd, 0x90, 41 | 0x6c, 0x81, 0xc8, 0x0, 0x40, 0x2, 0x70, 0x26, 42 | 0xc1, 0x36, 0x9, 0xb0, 0x8d, 0x84, 0x6c, 0x21, 43 | 0xc0, 44 | 45 | /* U+0026 "&" */ 46 | 0x7b, 0x2c, 0x30, 0xc3, 0x7, 0x30, 0xc3, 0x3c, 47 | 0xb2, 0xcb, 0x27, 0x40, 48 | 49 | /* U+0027 "'" */ 50 | 0xf0, 51 | 52 | /* U+0028 "(" */ 53 | 0x2b, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xc8, 0x80, 54 | 55 | /* U+0029 ")" */ 56 | 0x89, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6a, 0x0, 57 | 58 | /* U+002A "*" */ 59 | 0x25, 0x5d, 0x52, 0x0, 60 | 61 | /* U+002B "+" */ 62 | 0x21, 0x9, 0xf2, 0x10, 0x80, 63 | 64 | /* U+002C "," */ 65 | 0xf6, 66 | 67 | /* U+002D "-" */ 68 | 0xf0, 69 | 70 | /* U+002E "." */ 71 | 0xf0, 72 | 73 | /* U+002F "/" */ 74 | 0x8, 0x42, 0x21, 0x8, 0x84, 0x22, 0x10, 0x88, 75 | 0x42, 0x0, 76 | 77 | /* U+0030 "0" */ 78 | 0x7b, 0x3c, 0xf3, 0xcf, 0x3c, 0xf3, 0xcf, 0x3c, 79 | 0xf3, 0xcf, 0x37, 0x80, 80 | 81 | /* U+0031 "1" */ 82 | 0x6e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf0, 83 | 84 | /* U+0032 "2" */ 85 | 0xf4, 0xc6, 0x31, 0x8c, 0xc6, 0x63, 0x31, 0x8c, 86 | 0x67, 0xe0, 87 | 88 | /* U+0033 "3" */ 89 | 0xf4, 0xc6, 0x31, 0x8c, 0x6e, 0x18, 0xc6, 0x31, 90 | 0x8f, 0xc0, 91 | 92 | /* U+0034 "4" */ 93 | 0x18, 0x61, 0x86, 0x59, 0x65, 0xa6, 0x9a, 0x6f, 94 | 0xc6, 0x18, 0x61, 0x80, 95 | 96 | /* U+0035 "5" */ 97 | 0xfe, 0x71, 0x8c, 0x63, 0xc3, 0x18, 0xc6, 0x31, 98 | 0x8f, 0xc0, 99 | 100 | /* U+0036 "6" */ 101 | 0x18, 0xc6, 0x18, 0xc3, 0xf, 0xb3, 0xcf, 0x3c, 102 | 0xf3, 0xcf, 0x37, 0x80, 103 | 104 | /* U+0037 "7" */ 105 | 0xfe, 0x30, 0xc3, 0xc, 0x61, 0x8c, 0x31, 0x86, 106 | 0x18, 0x61, 0x86, 0x0, 107 | 108 | /* U+0038 "8" */ 109 | 0x7b, 0x3c, 0xf3, 0xcf, 0x37, 0xb3, 0xcf, 0x3c, 110 | 0xf3, 0xcf, 0x37, 0x80, 111 | 112 | /* U+0039 "9" */ 113 | 0x7b, 0x3c, 0xf3, 0xcf, 0x3c, 0xf3, 0x7c, 0x30, 114 | 0xc6, 0x18, 0xc6, 0x0, 115 | 116 | /* U+003A ":" */ 117 | 0xf0, 0xf, 118 | 119 | /* U+003B ";" */ 120 | 0xf0, 0xf, 0x60, 121 | 122 | /* U+003C "<" */ 123 | 0x11, 0x22, 0x44, 0x84, 0x42, 0x21, 0x10, 124 | 125 | /* U+003D "=" */ 126 | 0xf0, 0xf0, 127 | 128 | /* U+003E ">" */ 129 | 0x88, 0x44, 0x22, 0x12, 0x24, 0x48, 0x80, 130 | 131 | /* U+003F "?" */ 132 | 0xf4, 0xe6, 0x31, 0x8c, 0x66, 0x62, 0x10, 0x80, 133 | 0x31, 0x80, 134 | 135 | /* U+0040 "@" */ 136 | 0x3c, 0x86, 0x6d, 0x5a, 0xb5, 0x6a, 0xd5, 0x9c, 137 | 0x80, 0xf0, 138 | 139 | /* U+0041 "A" */ 140 | 0x18, 0x18, 0x18, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 141 | 0x46, 0x46, 0x7e, 0x46, 0x46, 0x46, 0xef, 142 | 143 | /* U+0042 "B" */ 144 | 0xfc, 0xcd, 0x9b, 0x36, 0x6c, 0x9f, 0x33, 0x66, 145 | 0xcd, 0x9b, 0x36, 0x6c, 0xbe, 0x0, 146 | 147 | /* U+0043 "C" */ 148 | 0x7e, 0x71, 0x8c, 0x63, 0x18, 0xc6, 0x31, 0x8c, 149 | 0x65, 0xc0, 150 | 151 | /* U+0044 "D" */ 152 | 0xfc, 0xcd, 0x9b, 0x36, 0x6c, 0xd9, 0xb3, 0x66, 153 | 0xcd, 0x9b, 0x36, 0x6c, 0xbe, 0x0, 154 | 155 | /* U+0045 "E" */ 156 | 0xfd, 0x96, 0x18, 0x61, 0xa7, 0x9a, 0x61, 0x86, 157 | 0x18, 0x61, 0x9f, 0xc0, 158 | 159 | /* U+0046 "F" */ 160 | 0xfd, 0x96, 0x18, 0x61, 0xa7, 0x9a, 0x61, 0x86, 161 | 0x18, 0x61, 0x8f, 0x0, 162 | 163 | /* U+0047 "G" */ 164 | 0x7f, 0x1c, 0x30, 0xc3, 0xd, 0xf3, 0xcf, 0x3c, 165 | 0xf3, 0xcf, 0x56, 0x40, 166 | 167 | /* U+0048 "H" */ 168 | 0xf7, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x66, 169 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf7, 170 | 171 | /* U+0049 "I" */ 172 | 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf0, 173 | 174 | /* U+004A "J" */ 175 | 0x79, 0x8c, 0x63, 0x18, 0xc6, 0x31, 0x8c, 0x63, 176 | 0x1b, 0x80, 177 | 178 | /* U+004B "K" */ 179 | 0xf7, 0x62, 0x62, 0x64, 0x64, 0x64, 0x78, 0x78, 180 | 0x78, 0x6c, 0x6c, 0x6c, 0x66, 0x66, 0xf7, 181 | 182 | /* U+004C "L" */ 183 | 0xf1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 184 | 0x18, 0x61, 0x9f, 0xc0, 185 | 186 | /* U+004D "M" */ 187 | 0xe0, 0xec, 0x19, 0x83, 0x38, 0xe7, 0x1c, 0xe3, 188 | 0x96, 0xb2, 0xd6, 0x5e, 0xc9, 0x99, 0x33, 0x26, 189 | 0x64, 0xc, 0x81, 0xb8, 0x78, 190 | 191 | /* U+004E "N" */ 192 | 0xe7, 0x62, 0x62, 0x72, 0x72, 0x72, 0x5a, 0x5a, 193 | 0x5a, 0x4e, 0x4e, 0x4e, 0x46, 0x46, 0xe6, 194 | 195 | /* U+004F "O" */ 196 | 0x7b, 0x3c, 0xf3, 0xcf, 0x3c, 0xf3, 0xcf, 0x3c, 197 | 0xf3, 0xcf, 0x37, 0x80, 198 | 199 | /* U+0050 "P" */ 200 | 0xfc, 0xcd, 0x9b, 0x36, 0x6c, 0xd9, 0xb2, 0x78, 201 | 0xc1, 0x83, 0x6, 0xc, 0x3c, 0x0, 202 | 203 | /* U+0051 "Q" */ 204 | 0x79, 0x9b, 0x36, 0x6c, 0xd9, 0xb3, 0x66, 0xcd, 205 | 0x9b, 0x36, 0x6c, 0xd9, 0x9e, 0x7, 206 | 207 | /* U+0052 "R" */ 208 | 0xfc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x64, 0x7c, 209 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf7, 210 | 211 | /* U+0053 "S" */ 212 | 0x7e, 0x71, 0x8c, 0x71, 0x8e, 0x31, 0xc6, 0x31, 213 | 0xcf, 0xc0, 214 | 215 | /* U+0054 "T" */ 216 | 0xff, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 217 | 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 218 | 219 | /* U+0055 "U" */ 220 | 0xee, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 221 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3b, 222 | 223 | /* U+0056 "V" */ 224 | 0xf7, 0x62, 0x62, 0x62, 0x62, 0x62, 0x34, 0x34, 225 | 0x34, 0x34, 0x34, 0x18, 0x18, 0x18, 0x18, 226 | 227 | /* U+0057 "W" */ 228 | 0xf7, 0x76, 0x62, 0x66, 0x26, 0x62, 0x66, 0x26, 229 | 0x62, 0x33, 0x43, 0x34, 0x33, 0x43, 0x34, 0x37, 230 | 0x41, 0x98, 0x19, 0x81, 0x98, 0x19, 0x80, 231 | 232 | /* U+0058 "X" */ 233 | 0xf7, 0x66, 0x66, 0x66, 0x34, 0x34, 0x34, 0x18, 234 | 0x2c, 0x2c, 0x2c, 0x66, 0x66, 0x66, 0xef, 235 | 236 | /* U+0059 "Y" */ 237 | 0xf7, 0x62, 0x62, 0x62, 0x34, 0x34, 0x34, 0x34, 238 | 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 239 | 240 | /* U+005A "Z" */ 241 | 0xfc, 0xc6, 0x33, 0x18, 0xcc, 0x63, 0x31, 0x8c, 242 | 0x67, 0xe0, 243 | 244 | /* U+005B "[" */ 245 | 0xfb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x80, 246 | 247 | /* U+005C "\\" */ 248 | 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 0x84, 0x20, 249 | 0x84, 0x20, 250 | 251 | /* U+005D "]" */ 252 | 0xed, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6f, 0x80, 253 | 254 | /* U+005E "^" */ 255 | 0x21, 0x14, 0xa8, 0xc4, 256 | 257 | /* U+005F "_" */ 258 | 0xf8, 259 | 260 | /* U+0060 "`" */ 261 | 0x90, 262 | 263 | /* U+0061 "a" */ 264 | 0x78, 0x98, 0x30, 0x61, 0xcd, 0xb3, 0x66, 0xcd, 265 | 0x99, 0xd8, 266 | 267 | /* U+0062 "b" */ 268 | 0xe0, 0xc1, 0x83, 0x7, 0xcc, 0xd9, 0xb3, 0x66, 269 | 0xcd, 0x9b, 0x36, 0x6c, 0x9e, 0x0, 270 | 271 | /* U+0063 "c" */ 272 | 0x7e, 0x71, 0x8c, 0x63, 0x18, 0xc6, 0x5c, 273 | 274 | /* U+0064 "d" */ 275 | 0x1c, 0x18, 0x30, 0x67, 0xd9, 0xb3, 0x66, 0xcd, 276 | 0x9b, 0x36, 0x6c, 0xd9, 0x9d, 0x80, 277 | 278 | /* U+0065 "e" */ 279 | 0x7b, 0x3c, 0xf3, 0xcf, 0x6e, 0x30, 0xc3, 0x17, 280 | 0x80, 281 | 282 | /* U+0066 "f" */ 283 | 0x3a, 0x58, 0xcf, 0xb1, 0x8c, 0x63, 0x18, 0xc6, 284 | 0x33, 0xc0, 285 | 286 | /* U+0067 "g" */ 287 | 0x7f, 0x93, 0x36, 0x6c, 0xd9, 0xb3, 0x66, 0xcd, 288 | 0x99, 0xf0, 0x60, 0xcf, 0x0, 289 | 290 | /* U+0068 "h" */ 291 | 0xe0, 0x60, 0x60, 0x60, 0x66, 0x6e, 0x76, 0x66, 292 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf7, 293 | 294 | /* U+0069 "i" */ 295 | 0x66, 0xe, 0x66, 0x66, 0x66, 0x66, 0x6f, 296 | 297 | /* U+006A "j" */ 298 | 0x33, 0x7, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 299 | 0xe0, 300 | 301 | /* U+006B "k" */ 302 | 0xe0, 0x60, 0x60, 0x60, 0x67, 0x62, 0x64, 0x64, 303 | 0x68, 0x78, 0x7c, 0x6c, 0x66, 0x66, 0xf7, 304 | 305 | /* U+006C "l" */ 306 | 0xe6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf0, 307 | 308 | /* U+006D "m" */ 309 | 0xe6, 0x66, 0xee, 0x77, 0x66, 0x66, 0x66, 0x66, 310 | 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf7, 311 | 0x70, 312 | 313 | /* U+006E "n" */ 314 | 0xe6, 0x6e, 0x76, 0x66, 0x66, 0x66, 0x66, 0x66, 315 | 0x66, 0x66, 0xf7, 316 | 317 | /* U+006F "o" */ 318 | 0x7b, 0x3c, 0xf3, 0xcf, 0x3c, 0xf3, 0xcf, 0x37, 319 | 0x80, 320 | 321 | /* U+0070 "p" */ 322 | 0xdc, 0xcd, 0x9b, 0x36, 0x6c, 0xd9, 0xb3, 0x66, 323 | 0xc9, 0xe3, 0x6, 0x1e, 0x0, 324 | 325 | /* U+0071 "q" */ 326 | 0x75, 0x9b, 0x36, 0x6c, 0xd9, 0xb3, 0x66, 0xcd, 327 | 0x99, 0xf0, 0x60, 0xc1, 0xc0, 328 | 329 | /* U+0072 "r" */ 330 | 0xdb, 0xd8, 0xc6, 0x31, 0x8c, 0x63, 0x3c, 331 | 332 | /* U+0073 "s" */ 333 | 0x7e, 0x71, 0x8e, 0x38, 0xe3, 0x1c, 0xfc, 334 | 335 | /* U+0074 "t" */ 336 | 0x26, 0xf2, 0x66, 0x66, 0x66, 0x66, 0x30, 337 | 338 | /* U+0075 "u" */ 339 | 0xee, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 340 | 0x66, 0x66, 0x3b, 341 | 342 | /* U+0076 "v" */ 343 | 0xf7, 0x62, 0x62, 0x62, 0x34, 0x34, 0x34, 0x34, 344 | 0x18, 0x18, 0x18, 345 | 346 | /* U+0077 "w" */ 347 | 0xf7, 0x76, 0x62, 0x66, 0x26, 0x62, 0x33, 0x43, 348 | 0x74, 0x37, 0x43, 0x74, 0x19, 0x81, 0x98, 0x19, 349 | 0x80, 350 | 351 | /* U+0078 "x" */ 352 | 0xf7, 0x62, 0x62, 0x34, 0x34, 0x18, 0x2c, 0x2c, 353 | 0x46, 0x46, 0xef, 354 | 355 | /* U+0079 "y" */ 356 | 0xf7, 0x62, 0x62, 0x62, 0x34, 0x34, 0x34, 0x34, 357 | 0x18, 0x18, 0x18, 0x8, 0x38, 0x30, 358 | 359 | /* U+007A "z" */ 360 | 0xfc, 0xc6, 0x63, 0x31, 0x98, 0xc6, 0x7e, 361 | 362 | /* U+007B "{" */ 363 | 0x36, 0x66, 0x66, 0x66, 0x6c, 0x66, 0x66, 0x66, 364 | 0x66, 0x30, 365 | 366 | /* U+007C "|" */ 367 | 0xff, 0xff, 0xf0, 368 | 369 | /* U+007D "}" */ 370 | 0xc6, 0x66, 0x66, 0x66, 0x63, 0x66, 0x66, 0x66, 371 | 0x66, 0xc0, 372 | 373 | /* U+007E "~" */ 374 | 0x4d, 0x64 375 | }; 376 | 377 | 378 | /*--------------------- 379 | * GLYPH DESCRIPTION 380 | *--------------------*/ 381 | 382 | static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { 383 | {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, 384 | {.bitmap_index = 0, .adv_w = 64, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, 385 | {.bitmap_index = 1, .adv_w = 64, .box_w = 2, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 386 | {.bitmap_index = 5, .adv_w = 80, .box_w = 3, .box_h = 4, .ofs_x = 1, .ofs_y = 11}, 387 | {.bitmap_index = 7, .adv_w = 112, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 6}, 388 | {.bitmap_index = 13, .adv_w = 112, .box_w = 5, .box_h = 18, .ofs_x = 1, .ofs_y = -1}, 389 | {.bitmap_index = 25, .adv_w = 208, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, 390 | {.bitmap_index = 50, .adv_w = 128, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 391 | {.bitmap_index = 62, .adv_w = 48, .box_w = 1, .box_h = 4, .ofs_x = 1, .ofs_y = 11}, 392 | {.bitmap_index = 63, .adv_w = 64, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, 393 | {.bitmap_index = 71, .adv_w = 64, .box_w = 3, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, 394 | {.bitmap_index = 79, .adv_w = 112, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 10}, 395 | {.bitmap_index = 83, .adv_w = 112, .box_w = 5, .box_h = 7, .ofs_x = 1, .ofs_y = 3}, 396 | {.bitmap_index = 88, .adv_w = 64, .box_w = 2, .box_h = 4, .ofs_x = 1, .ofs_y = -2}, 397 | {.bitmap_index = 89, .adv_w = 96, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 6}, 398 | {.bitmap_index = 90, .adv_w = 64, .box_w = 2, .box_h = 2, .ofs_x = 1, .ofs_y = 0}, 399 | {.bitmap_index = 91, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 400 | {.bitmap_index = 101, .adv_w = 128, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 401 | {.bitmap_index = 113, .adv_w = 96, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 402 | {.bitmap_index = 121, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 403 | {.bitmap_index = 131, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 404 | {.bitmap_index = 141, .adv_w = 128, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 405 | {.bitmap_index = 153, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 406 | {.bitmap_index = 163, .adv_w = 128, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 407 | {.bitmap_index = 175, .adv_w = 112, .box_w = 6, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, 408 | {.bitmap_index = 187, .adv_w = 128, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 409 | {.bitmap_index = 199, .adv_w = 128, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 410 | {.bitmap_index = 211, .adv_w = 64, .box_w = 2, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, 411 | {.bitmap_index = 213, .adv_w = 64, .box_w = 2, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, 412 | {.bitmap_index = 216, .adv_w = 96, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, 413 | {.bitmap_index = 223, .adv_w = 96, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 5}, 414 | {.bitmap_index = 225, .adv_w = 96, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, 415 | {.bitmap_index = 232, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 416 | {.bitmap_index = 242, .adv_w = 144, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 417 | {.bitmap_index = 252, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 418 | {.bitmap_index = 267, .adv_w = 144, .box_w = 7, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 419 | {.bitmap_index = 281, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, 420 | {.bitmap_index = 291, .adv_w = 144, .box_w = 7, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 421 | {.bitmap_index = 305, .adv_w = 112, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 422 | {.bitmap_index = 317, .adv_w = 112, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 423 | {.bitmap_index = 329, .adv_w = 144, .box_w = 6, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, 424 | {.bitmap_index = 341, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 425 | {.bitmap_index = 356, .adv_w = 80, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 426 | {.bitmap_index = 364, .adv_w = 96, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 427 | {.bitmap_index = 374, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 428 | {.bitmap_index = 389, .adv_w = 112, .box_w = 6, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 429 | {.bitmap_index = 401, .adv_w = 192, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 430 | {.bitmap_index = 422, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 431 | {.bitmap_index = 437, .adv_w = 144, .box_w = 6, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, 432 | {.bitmap_index = 449, .adv_w = 128, .box_w = 7, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 433 | {.bitmap_index = 463, .adv_w = 144, .box_w = 7, .box_h = 16, .ofs_x = 2, .ofs_y = -1}, 434 | {.bitmap_index = 477, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 435 | {.bitmap_index = 492, .adv_w = 96, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 436 | {.bitmap_index = 502, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 437 | {.bitmap_index = 517, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 438 | {.bitmap_index = 532, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 439 | {.bitmap_index = 547, .adv_w = 208, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 440 | {.bitmap_index = 570, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 441 | {.bitmap_index = 585, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 442 | {.bitmap_index = 600, .adv_w = 96, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 443 | {.bitmap_index = 610, .adv_w = 80, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, 444 | {.bitmap_index = 618, .adv_w = 112, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 445 | {.bitmap_index = 628, .adv_w = 80, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, 446 | {.bitmap_index = 636, .adv_w = 112, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 9}, 447 | {.bitmap_index = 640, .adv_w = 80, .box_w = 5, .box_h = 1, .ofs_x = 0, .ofs_y = -1}, 448 | {.bitmap_index = 641, .adv_w = 96, .box_w = 2, .box_h = 2, .ofs_x = 2, .ofs_y = 14}, 449 | {.bitmap_index = 642, .adv_w = 128, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 450 | {.bitmap_index = 652, .adv_w = 128, .box_w = 7, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, 451 | {.bitmap_index = 666, .adv_w = 96, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 452 | {.bitmap_index = 673, .adv_w = 128, .box_w = 7, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 453 | {.bitmap_index = 687, .adv_w = 128, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 454 | {.bitmap_index = 696, .adv_w = 96, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 455 | {.bitmap_index = 706, .adv_w = 128, .box_w = 7, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, 456 | {.bitmap_index = 719, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 457 | {.bitmap_index = 734, .adv_w = 80, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, 458 | {.bitmap_index = 741, .adv_w = 80, .box_w = 4, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, 459 | {.bitmap_index = 750, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 460 | {.bitmap_index = 765, .adv_w = 80, .box_w = 4, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, 461 | {.bitmap_index = 773, .adv_w = 208, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 462 | {.bitmap_index = 790, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 463 | {.bitmap_index = 801, .adv_w = 128, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 464 | {.bitmap_index = 810, .adv_w = 144, .box_w = 7, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, 465 | {.bitmap_index = 823, .adv_w = 128, .box_w = 7, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, 466 | {.bitmap_index = 836, .adv_w = 96, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 467 | {.bitmap_index = 843, .adv_w = 112, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 468 | {.bitmap_index = 850, .adv_w = 80, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, 469 | {.bitmap_index = 857, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 470 | {.bitmap_index = 868, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, 471 | {.bitmap_index = 879, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, 472 | {.bitmap_index = 896, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, 473 | {.bitmap_index = 907, .adv_w = 128, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = -3}, 474 | {.bitmap_index = 921, .adv_w = 112, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, 475 | {.bitmap_index = 928, .adv_w = 96, .box_w = 4, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, 476 | {.bitmap_index = 938, .adv_w = 48, .box_w = 1, .box_h = 20, .ofs_x = 1, .ofs_y = -4}, 477 | {.bitmap_index = 941, .adv_w = 96, .box_w = 4, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, 478 | {.bitmap_index = 951, .adv_w = 112, .box_w = 5, .box_h = 3, .ofs_x = 1, .ofs_y = 6} 479 | }; 480 | 481 | /*--------------------- 482 | * CHARACTER MAPPING 483 | *--------------------*/ 484 | 485 | 486 | 487 | /*Collect the unicode lists and glyph_id offsets*/ 488 | static const lv_font_fmt_txt_cmap_t cmaps[] = 489 | { 490 | { 491 | .range_start = 32, .range_length = 95, .glyph_id_start = 1, 492 | .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY 493 | } 494 | }; 495 | 496 | /*----------------- 497 | * KERNING 498 | *----------------*/ 499 | 500 | 501 | /*Pair left and right glyphs for kerning*/ 502 | static const uint8_t kern_pair_glyph_ids[] = 503 | { 504 | 3, 34, 505 | 3, 43, 506 | 8, 34, 507 | 8, 43, 508 | 13, 3, 509 | 13, 8, 510 | 15, 3, 511 | 15, 8, 512 | 34, 3, 513 | 34, 8, 514 | 34, 53, 515 | 34, 55, 516 | 34, 56, 517 | 34, 58, 518 | 35, 53, 519 | 35, 58, 520 | 37, 53, 521 | 37, 58, 522 | 39, 13, 523 | 39, 15, 524 | 39, 34, 525 | 39, 66, 526 | 40, 53, 527 | 40, 58, 528 | 45, 3, 529 | 45, 8, 530 | 45, 53, 531 | 45, 55, 532 | 45, 56, 533 | 45, 58, 534 | 48, 53, 535 | 48, 58, 536 | 49, 13, 537 | 49, 15, 538 | 50, 53, 539 | 50, 58, 540 | 51, 53, 541 | 51, 58, 542 | 52, 66, 543 | 52, 68, 544 | 52, 69, 545 | 52, 70, 546 | 52, 72, 547 | 52, 80, 548 | 52, 82, 549 | 52, 91, 550 | 53, 13, 551 | 53, 15, 552 | 53, 34, 553 | 53, 48, 554 | 53, 53, 555 | 53, 58, 556 | 53, 66, 557 | 53, 68, 558 | 53, 69, 559 | 53, 70, 560 | 53, 74, 561 | 53, 78, 562 | 53, 79, 563 | 53, 80, 564 | 53, 83, 565 | 53, 84, 566 | 53, 86, 567 | 53, 91, 568 | 54, 53, 569 | 54, 58, 570 | 55, 13, 571 | 55, 15, 572 | 55, 34, 573 | 55, 55, 574 | 55, 56, 575 | 55, 58, 576 | 56, 13, 577 | 56, 15, 578 | 56, 34, 579 | 56, 55, 580 | 56, 56, 581 | 56, 58, 582 | 58, 13, 583 | 58, 15, 584 | 58, 34, 585 | 58, 36, 586 | 58, 40, 587 | 58, 43, 588 | 58, 48, 589 | 58, 50, 590 | 58, 55, 591 | 58, 56, 592 | 58, 58, 593 | 58, 66, 594 | 67, 71, 595 | 67, 73, 596 | 67, 74, 597 | 67, 75, 598 | 67, 76, 599 | 67, 77, 600 | 67, 78, 601 | 67, 79, 602 | 67, 81, 603 | 67, 83, 604 | 67, 85, 605 | 67, 86, 606 | 70, 66, 607 | 70, 71, 608 | 70, 73, 609 | 70, 74, 610 | 70, 75, 611 | 70, 76, 612 | 70, 77, 613 | 70, 78, 614 | 70, 79, 615 | 70, 81, 616 | 70, 83, 617 | 70, 85, 618 | 70, 86, 619 | 71, 13, 620 | 71, 15, 621 | 71, 66, 622 | 71, 71, 623 | 71, 85, 624 | 71, 87, 625 | 71, 88, 626 | 76, 85, 627 | 80, 73, 628 | 80, 74, 629 | 80, 75, 630 | 80, 76, 631 | 80, 77, 632 | 80, 78, 633 | 80, 79, 634 | 80, 81, 635 | 80, 83, 636 | 80, 85, 637 | 80, 86, 638 | 81, 73, 639 | 81, 74, 640 | 81, 75, 641 | 81, 76, 642 | 81, 77, 643 | 81, 78, 644 | 81, 79, 645 | 81, 81, 646 | 81, 83, 647 | 81, 85, 648 | 81, 86, 649 | 84, 71, 650 | 84, 73, 651 | 84, 74, 652 | 84, 75, 653 | 84, 76, 654 | 84, 77, 655 | 84, 78, 656 | 84, 79, 657 | 84, 81, 658 | 84, 83, 659 | 84, 85, 660 | 84, 86, 661 | 85, 67, 662 | 85, 68, 663 | 85, 69, 664 | 85, 70, 665 | 85, 72, 666 | 85, 89, 667 | 87, 66, 668 | 87, 71, 669 | 87, 73, 670 | 87, 74, 671 | 87, 75, 672 | 87, 76, 673 | 87, 77, 674 | 87, 78, 675 | 87, 79, 676 | 87, 81, 677 | 87, 83, 678 | 87, 85, 679 | 87, 86, 680 | 88, 66, 681 | 88, 71, 682 | 88, 73, 683 | 88, 75, 684 | 88, 76, 685 | 88, 77, 686 | 88, 78, 687 | 88, 79, 688 | 88, 81, 689 | 88, 83, 690 | 88, 85, 691 | 88, 86, 692 | 89, 73, 693 | 89, 76, 694 | 89, 77, 695 | 89, 86, 696 | 90, 66, 697 | 90, 71, 698 | 90, 73, 699 | 90, 75, 700 | 90, 76, 701 | 90, 77, 702 | 90, 78, 703 | 90, 79, 704 | 90, 81, 705 | 90, 83, 706 | 90, 85, 707 | 90, 86, 708 | 91, 66, 709 | 91, 71, 710 | 91, 77, 711 | 91, 84, 712 | 91, 85 713 | }; 714 | 715 | /* Kerning between the respective left and right glyphs 716 | * 4.4 format which needs to scaled with `kern_scale`*/ 717 | static const int8_t kern_pair_values[] = 718 | { 719 | -32, -16, -32, -16, -16, -16, -16, -16, 720 | -16, -16, -16, -16, -16, -16, -16, -16, 721 | -16, -16, -16, -16, -16, -16, -16, -16, 722 | -16, -16, -16, -16, -16, -16, -16, -16, 723 | -32, -32, -16, -16, -16, -16, 16, 16, 724 | 16, 16, 16, 16, 16, 16, -16, -16, 725 | -16, -16, -32, -16, -16, -16, -16, -16, 726 | -16, -16, -16, -16, -16, -16, -16, -16, 727 | -16, -16, -16, -16, -16, -16, -16, -16, 728 | -16, -16, -16, -16, -16, -16, -16, -16, 729 | -16, -16, -16, -16, -16, -16, -16, -16, 730 | -16, -16, -16, -16, -16, -16, -16, -16, 731 | -16, -16, -16, -16, -16, -16, -16, -16, 732 | -16, -16, -16, -16, -16, -16, -16, -16, 733 | -16, -16, -16, -16, -16, -16, -16, -16, 734 | -16, -16, -16, -16, -16, -16, -16, -16, 735 | -16, -16, -16, -16, -16, -16, -16, -16, 736 | -16, -16, -16, -16, -16, -16, -16, -16, 737 | -16, -16, -16, -16, -16, -16, -16, -16, 738 | -16, -16, -16, -16, -16, 16, 16, 16, 739 | 16, 16, 16, -16, -16, -16, -16, -16, 740 | -16, -16, -16, -16, -16, -16, -16, -16, 741 | -16, -16, -16, -16, -16, -16, -16, -16, 742 | -16, -16, -16, -16, -16, -16, -16, -16, 743 | -16, -16, -16, -16, -16, -16, -16, -16, 744 | -16, -16, -16, -16, -16, -16, -16, -16, 745 | -16 746 | }; 747 | 748 | /*Collect the kern pair's data in one place*/ 749 | static const lv_font_fmt_txt_kern_pair_t kern_pairs = 750 | { 751 | .glyph_ids = kern_pair_glyph_ids, 752 | .values = kern_pair_values, 753 | .pair_cnt = 209, 754 | .glyph_ids_size = 0 755 | }; 756 | 757 | /*-------------------- 758 | * ALL CUSTOM DATA 759 | *--------------------*/ 760 | 761 | #if LVGL_VERSION_MAJOR == 8 762 | /*Store all the custom data of the font*/ 763 | static lv_font_fmt_txt_glyph_cache_t cache; 764 | #endif 765 | 766 | #if LVGL_VERSION_MAJOR >= 8 767 | static const lv_font_fmt_txt_dsc_t font_dsc = { 768 | #else 769 | static lv_font_fmt_txt_dsc_t font_dsc = { 770 | #endif 771 | .glyph_bitmap = glyph_bitmap, 772 | .glyph_dsc = glyph_dsc, 773 | .cmaps = cmaps, 774 | .kern_dsc = &kern_pairs, 775 | .kern_scale = 16, 776 | .cmap_num = 1, 777 | .bpp = 1, 778 | .kern_classes = 0, 779 | .bitmap_format = 0, 780 | #if LVGL_VERSION_MAJOR == 8 781 | .cache = &cache 782 | #endif 783 | }; 784 | 785 | 786 | 787 | /*----------------- 788 | * PUBLIC FONT 789 | *----------------*/ 790 | 791 | /*Initialize a public general font descriptor*/ 792 | #if LVGL_VERSION_MAJOR >= 8 793 | const lv_font_t custom_font_22 = { 794 | #else 795 | lv_font_t custom_font_22 = { 796 | #endif 797 | .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ 798 | .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ 799 | .line_height = 21, /*The maximum line height required by the font*/ 800 | .base_line = 4, /*Baseline measured from the bottom of the line*/ 801 | #if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) 802 | .subpx = LV_FONT_SUBPX_NONE, 803 | #endif 804 | #if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 805 | .underline_position = -3, 806 | .underline_thickness = 1, 807 | #endif 808 | .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ 809 | #if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 810 | .fallback = NULL, 811 | #endif 812 | .user_data = NULL, 813 | }; 814 | 815 | #endif /*#if CUSTOM_FONT_22*/ 816 | -------------------------------------------------------------------------------- /boards/shields/nice_view_elemental/src/fonts/custom_font_outline.c: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Size: 43 px 3 | * Bpp: 1 4 | * Opts: --bpp 1 --size 43 --no-compress --font Custom Font Outline.ttf --range 32-127 --format lvgl -o custom_font_outline.c 5 | ******************************************************************************/ 6 | 7 | // I'm not sure why I had to add 2 to the size I was using in Photopea, which was 41. 8 | 9 | #include "../../include/fonts/custom_font_outline.h" 10 | 11 | #include 12 | 13 | #ifndef CUSTOM_FONT_OUTLINE 14 | #define CUSTOM_FONT_OUTLINE 1 15 | #endif 16 | 17 | #if CUSTOM_FONT_OUTLINE 18 | 19 | /*----------------- 20 | * BITMAPS 21 | *----------------*/ 22 | 23 | /*Store the image of the glyphs*/ 24 | static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 25 | /* U+0020 " " */ 26 | 0x0, 27 | 28 | /* U+0041 "A" */ 29 | 0x3, 0xff, 0xf0, 0x0, 0xff, 0xfc, 0x0, 0x3f, 30 | 0xff, 0x0, 0xf, 0xff, 0xc0, 0x3, 0xff, 0xf0, 31 | 0x0, 0xff, 0xfc, 0x0, 0xff, 0xff, 0xc0, 0x3f, 32 | 0xff, 0xf0, 0xf, 0xff, 0xfc, 0x3, 0xff, 0xff, 33 | 0x0, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0xf, 34 | 0xff, 0xfc, 0x3, 0xff, 0xff, 0x0, 0xff, 0xff, 35 | 0xc0, 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xf, 36 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0xff, 0xff, 37 | 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 38 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 39 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 40 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 41 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 42 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 43 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 44 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 45 | 0xff, 0xff, 46 | 47 | /* U+0042 "B" */ 48 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 49 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 50 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 51 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 52 | 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 53 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 54 | 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 55 | 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 56 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 57 | 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 58 | 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 59 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 60 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 61 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 62 | 0xff, 0xfc, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xf0, 63 | 64 | /* U+0043 "C" */ 65 | 0x3f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 66 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 67 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 68 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 69 | 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf, 0xff, 0xc0, 70 | 0xff, 0xfc, 0xf, 0xff, 0xc0, 0xff, 0xfc, 0xf, 71 | 0xff, 0xc0, 0xff, 0xfc, 0xf, 0xff, 0xc0, 0xff, 72 | 0xfc, 0xf, 0xff, 0xc0, 0xff, 0xfc, 0xf, 0xff, 73 | 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 74 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 75 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 76 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 77 | 0xff, 0xc3, 0xff, 0xfc, 78 | 79 | /* U+0044 "D" */ 80 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 81 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 82 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 83 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 84 | 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 85 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 86 | 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 87 | 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 88 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 89 | 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 90 | 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 91 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 92 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 93 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 94 | 0xff, 0xfc, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xf0, 95 | 96 | /* U+0045 "E" */ 97 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 98 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 99 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 100 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 101 | 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 102 | 0xff, 0xf, 0xff, 0xfc, 0x3f, 0xff, 0xf0, 0xff, 103 | 0xff, 0xc3, 0xff, 0xff, 0xf, 0xff, 0xfc, 0x3f, 104 | 0xff, 0xf0, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf, 105 | 0xff, 0xfc, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xc3, 106 | 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 107 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 108 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 109 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 110 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 111 | 112 | /* U+0046 "F" */ 113 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 114 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 115 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 116 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 117 | 0xff, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf3, 0xff, 118 | 0xff, 0xf, 0xff, 0xfc, 0x3f, 0xff, 0xf0, 0xff, 119 | 0xff, 0xc3, 0xff, 0xff, 0xf, 0xff, 0xfc, 0x3f, 120 | 0xff, 0xf0, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf, 121 | 0xff, 0xfc, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xc3, 122 | 0xff, 0xf0, 0xf, 0xff, 0xc0, 0xff, 0xff, 0xc3, 123 | 0xff, 0xff, 0xf, 0xff, 0xfc, 0x3f, 0xff, 0xf0, 124 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf, 0xff, 0xfc, 125 | 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xc3, 0xff, 0xff, 126 | 0xf, 0xff, 0xfc, 0x3f, 0xff, 0xf0, 127 | 128 | /* U+0047 "G" */ 129 | 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 130 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 131 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 132 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 133 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 134 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 135 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 136 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 137 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 138 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 139 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 140 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 141 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 142 | 0xf3, 0xff, 0xff, 0xcf, 0xff, 0xff, 143 | 144 | /* U+0048 "H" */ 145 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 146 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 147 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 148 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 149 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 150 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 151 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 152 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0xff, 0xff, 153 | 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 154 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 155 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 156 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 157 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 158 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 159 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 160 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 161 | 0xff, 0xff, 162 | 163 | /* U+0049 "I" */ 164 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 165 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 166 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 167 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xf, 0xff, 0xc3, 168 | 0xff, 0xf0, 0xff, 0xfc, 0x3f, 0xff, 0xf, 0xff, 169 | 0xc3, 0xff, 0xf0, 0xff, 0xfc, 0x3f, 0xff, 0xf, 170 | 0xff, 0xc3, 0xff, 0xf0, 0xff, 0xfc, 0x3f, 0xff, 171 | 0xf, 0xff, 0xc3, 0xff, 0xf0, 0xff, 0xfc, 0xff, 172 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 173 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 174 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 175 | 0xff, 0xff, 176 | 177 | /* U+004A "J" */ 178 | 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x3f, 0xff, 0xf3, 179 | 0xff, 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x3f, 180 | 0xff, 0xf3, 0xff, 0xff, 0x3f, 0xff, 0xf3, 0xff, 181 | 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0xf, 0xff, 182 | 0xc0, 0xff, 0xfc, 0xf, 0xff, 0xc0, 0xff, 0xfc, 183 | 0xf, 0xff, 0xc0, 0xff, 0xfc, 0xf, 0xff, 0xc0, 184 | 0xff, 0xfc, 0xf, 0xff, 0xc0, 0xff, 0xfc, 0xf, 185 | 0xff, 0xc0, 0xff, 0xfc, 0xf, 0xff, 0xc0, 0xff, 186 | 0xfc, 0xf, 0xff, 0xc0, 0xff, 0xfc, 0xff, 0xff, 187 | 0xcf, 0xff, 0xfc, 0xff, 0xff, 0xcf, 0xff, 0xfc, 188 | 0xff, 0xff, 0xcf, 0xff, 0xfc, 0xff, 0xff, 0xcf, 189 | 0xff, 0xfc, 0xff, 0xff, 0xcf, 0xff, 0xfc, 0xff, 190 | 0xff, 0xf, 0xff, 0xf0, 191 | 192 | /* U+004B "K" */ 193 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 194 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 195 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 196 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 197 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 198 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 199 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0xf, 200 | 0xff, 0xff, 0x3, 0xff, 0xff, 0xc0, 0xff, 0xff, 201 | 0xf0, 0x3f, 0xff, 0xfc, 0xf, 0xff, 0xff, 0x3, 202 | 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf0, 0x3f, 0xff, 203 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 204 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 205 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 206 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 207 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 208 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 209 | 0xff, 0xff, 210 | 211 | /* U+004C "L" */ 212 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf, 0xff, 0xfc, 213 | 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xc3, 0xff, 0xff, 214 | 0xf, 0xff, 0xfc, 0x3f, 0xff, 0xf0, 0xff, 0xff, 215 | 0xc3, 0xff, 0xff, 0xf, 0xff, 0xfc, 0x3f, 0xff, 216 | 0xf0, 0x3f, 0xff, 0x0, 0xff, 0xfc, 0x3, 0xff, 217 | 0xf0, 0xf, 0xff, 0xc0, 0x3f, 0xff, 0x0, 0xff, 218 | 0xfc, 0x3, 0xff, 0xf0, 0xf, 0xff, 0xc0, 0x3f, 219 | 0xff, 0x0, 0xff, 0xfc, 0x3, 0xff, 0xf0, 0xf, 220 | 0xff, 0xc0, 0x3f, 0xff, 0x0, 0xff, 0xfc, 0x3, 221 | 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 222 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 223 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 224 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 225 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 226 | 227 | /* U+004D "M" */ 228 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 229 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 230 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 231 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 232 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 233 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 234 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 235 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 236 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 237 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 238 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 239 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 240 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 241 | 0x3f, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xfc, 242 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 243 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 244 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 245 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 246 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 247 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 248 | 249 | /* U+004E "N" */ 250 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 251 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 252 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 253 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 254 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 255 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 256 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 257 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0xff, 0xff, 258 | 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 259 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 260 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 261 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0xff, 262 | 0xff, 0xcf, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xfc, 263 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xcf, 0xff, 264 | 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 265 | 0x3f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xf3, 0xff, 266 | 0xff, 0xfc, 267 | 268 | /* U+004F "O" */ 269 | 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xcf, 0xff, 0xff, 270 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 271 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 272 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 273 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 274 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 275 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 276 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 277 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 278 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 279 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 280 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 281 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 282 | 0xf3, 0xff, 0xff, 0xf, 0xff, 0xfc, 283 | 284 | /* U+0050 "P" */ 285 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 286 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 287 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 288 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 289 | 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 290 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 291 | 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 292 | 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 293 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 294 | 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 295 | 0xf0, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0xff, 296 | 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 297 | 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 298 | 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 299 | 0xff, 0xc0, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 300 | 301 | /* U+0051 "Q" */ 302 | 0x3f, 0xff, 0xf0, 0x3f, 0xff, 0xf0, 0xff, 0xff, 303 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 304 | 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 305 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 306 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 307 | 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 308 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 309 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 310 | 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 311 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 312 | 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 313 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 314 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 315 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 316 | 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 317 | 0x1, 0xff, 0xff, 0x1, 0xff, 0xff, 318 | 319 | /* U+0052 "R" */ 320 | 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 321 | 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 322 | 0x3f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xf3, 0xff, 323 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 324 | 0xcf, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xfc, 0x3f, 325 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 326 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 327 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0xff, 0xff, 328 | 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 329 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 330 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 331 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 332 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 333 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 334 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 335 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 336 | 0xff, 0xff, 337 | 338 | /* U+0053 "S" */ 339 | 0x3f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 340 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 341 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 342 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 343 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfc, 344 | 0xff, 0xff, 0xcf, 0xff, 0xfc, 0xff, 0xff, 0xff, 345 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 346 | 0xff, 0xf3, 0xff, 0xff, 0x3f, 0xff, 0xf3, 0xff, 347 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 348 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 349 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 350 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 351 | 0xff, 0xcf, 0xff, 0xfc, 352 | 353 | /* U+0054 "T" */ 354 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 355 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 356 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 357 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 358 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 359 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 360 | 0x0, 0xf, 0xff, 0xc0, 0x3, 0xff, 0xf0, 0x0, 361 | 0xff, 0xfc, 0x0, 0x3f, 0xff, 0x0, 0xf, 0xff, 362 | 0xc0, 0x3, 0xff, 0xf0, 0x0, 0xff, 0xfc, 0x0, 363 | 0x3f, 0xff, 0x0, 0xf, 0xff, 0xc0, 0x3, 0xff, 364 | 0xf0, 0x0, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0x0, 365 | 0xf, 0xff, 0xc0, 0xf, 0xff, 0xfc, 0x3, 0xff, 366 | 0xff, 0x0, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 367 | 0xf, 0xff, 0xfc, 0x3, 0xff, 0xff, 0x0, 0xff, 368 | 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0xf, 0xff, 0xfc, 369 | 0x3, 0xff, 0xff, 0x0, 0xff, 0xff, 0xc0, 0x3f, 370 | 0xff, 0xf0, 371 | 372 | /* U+0055 "U" */ 373 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xcf, 0xff, 374 | 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 375 | 0x3f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xf3, 0xff, 376 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 377 | 0xcf, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xfc, 0x3f, 378 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 379 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 380 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0xff, 0xff, 381 | 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 382 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 383 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 384 | 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xcf, 0xff, 385 | 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 386 | 0x3f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xf3, 0xff, 387 | 0xff, 0xfc, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 388 | 0xcf, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 389 | 0xff, 0xff, 390 | 391 | /* U+0056 "V" */ 392 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 393 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 394 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 395 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 396 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 397 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 398 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 399 | 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 0xff, 0xff, 400 | 0xfc, 0x3f, 0xff, 0xff, 0xf, 0xff, 0xff, 0xc0, 401 | 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0xf, 0xff, 402 | 0xfc, 0x3, 0xff, 0xff, 0x0, 0xff, 0xff, 0xc0, 403 | 0x3f, 0xff, 0xf0, 0xf, 0xff, 0xfc, 0x3, 0xff, 404 | 0xff, 0x0, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 405 | 0x3, 0xff, 0xf0, 0x0, 0xff, 0xfc, 0x0, 0x3f, 406 | 0xff, 0x0, 0xf, 0xff, 0xc0, 0x3, 0xff, 0xf0, 407 | 0x0, 0xff, 0xfc, 0x0, 0x3f, 0xff, 0x0, 0xf, 408 | 0xff, 0xc0, 409 | 410 | /* U+0057 "W" */ 411 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 412 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 413 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 414 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 415 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 416 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 417 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xf, 418 | 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xf0, 419 | 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 420 | 0xf, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 421 | 0xf0, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 422 | 0xff, 0xf, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 423 | 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xf0, 0xf, 0xff, 424 | 0xff, 0xfc, 0x3, 0xff, 0xff, 0xff, 0x0, 0xff, 425 | 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xf0, 0xf, 426 | 0xff, 0xff, 0xfc, 0x3, 0xff, 0xff, 0xff, 0x0, 427 | 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xf0, 428 | 0x3, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xfc, 429 | 0x0, 0x3f, 0xff, 0xff, 0x0, 0xf, 0xff, 0xff, 430 | 0xc0, 0x3, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 431 | 0xfc, 0x0, 0x3f, 0xff, 0xff, 0x0, 0xf, 0xff, 432 | 0xff, 0xc0, 433 | 434 | /* U+0058 "X" */ 435 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 436 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 437 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 438 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 439 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 440 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 441 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 442 | 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0x3f, 0xff, 443 | 0xf0, 0xf, 0xff, 0xfc, 0x3, 0xff, 0xff, 0x3, 444 | 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 445 | 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xf0, 446 | 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 447 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 448 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 449 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 450 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 451 | 0xff, 0xff, 452 | 453 | /* U+0059 "Y" */ 454 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 455 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 456 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 457 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 458 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 459 | 0xff, 0xff, 0xf, 0xff, 0xff, 0xc3, 0xff, 0xff, 460 | 0xf0, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xf, 461 | 0xff, 0xff, 0xc0, 0xff, 0xff, 0xc0, 0x3f, 0xff, 462 | 0xf0, 0xf, 0xff, 0xfc, 0x3, 0xff, 0xff, 0x0, 463 | 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0xf, 0xff, 464 | 0xfc, 0x3, 0xff, 0xff, 0x0, 0x3f, 0xff, 0x0, 465 | 0xf, 0xff, 0xc0, 0xf, 0xff, 0xfc, 0x3, 0xff, 466 | 0xff, 0x0, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf0, 467 | 0xf, 0xff, 0xfc, 0x3, 0xff, 0xff, 0x0, 0xff, 468 | 0xff, 0xc0, 0x3f, 0xff, 0xf0, 0xf, 0xff, 0xfc, 469 | 0x3, 0xff, 0xff, 0x0, 0xff, 0xff, 0xc0, 0x3f, 470 | 0xff, 0xf0, 471 | 472 | /* U+005A "Z" */ 473 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 474 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 475 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 476 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 477 | 0xff, 0xff, 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 478 | 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x3f, 0xff, 0xc3, 479 | 0xff, 0xfc, 0xff, 0xff, 0xcf, 0xff, 0xfc, 0xff, 480 | 0xff, 0xcf, 0xff, 0xfc, 0xff, 0xff, 0xf, 0xff, 481 | 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 482 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 483 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 484 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 485 | 0xff, 0xff, 0xff, 0xff 486 | }; 487 | 488 | 489 | /*--------------------- 490 | * GLYPH DESCRIPTION 491 | *--------------------*/ 492 | 493 | static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { 494 | {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, 495 | {.bitmap_index = 0, .adv_w = 32, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, 496 | {.bitmap_index = 1, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 497 | {.bitmap_index = 131, .adv_w = 288, .box_w = 24, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 498 | {.bitmap_index = 251, .adv_w = 224, .box_w = 20, .box_h = 40, .ofs_x = -1, .ofs_y = -5}, 499 | {.bitmap_index = 351, .adv_w = 288, .box_w = 24, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 500 | {.bitmap_index = 471, .adv_w = 208, .box_w = 22, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 501 | {.bitmap_index = 581, .adv_w = 224, .box_w = 22, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 502 | {.bitmap_index = 691, .adv_w = 288, .box_w = 22, .box_h = 40, .ofs_x = -1, .ofs_y = -5}, 503 | {.bitmap_index = 801, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 504 | {.bitmap_index = 931, .adv_w = 160, .box_w = 18, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 505 | {.bitmap_index = 1021, .adv_w = 192, .box_w = 20, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 506 | {.bitmap_index = 1121, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 507 | {.bitmap_index = 1251, .adv_w = 224, .box_w = 22, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 508 | {.bitmap_index = 1361, .adv_w = 384, .box_w = 32, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 509 | {.bitmap_index = 1521, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 510 | {.bitmap_index = 1651, .adv_w = 288, .box_w = 22, .box_h = 40, .ofs_x = -1, .ofs_y = -5}, 511 | {.bitmap_index = 1761, .adv_w = 256, .box_w = 24, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 512 | {.bitmap_index = 1881, .adv_w = 288, .box_w = 24, .box_h = 42, .ofs_x = -1, .ofs_y = -7}, 513 | {.bitmap_index = 2007, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 514 | {.bitmap_index = 2137, .adv_w = 192, .box_w = 20, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 515 | {.bitmap_index = 2237, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 516 | {.bitmap_index = 2367, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 517 | {.bitmap_index = 2497, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 518 | {.bitmap_index = 2627, .adv_w = 416, .box_w = 34, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 519 | {.bitmap_index = 2797, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 520 | {.bitmap_index = 2927, .adv_w = 288, .box_w = 26, .box_h = 40, .ofs_x = -3, .ofs_y = -5}, 521 | {.bitmap_index = 3057, .adv_w = 192, .box_w = 20, .box_h = 40, .ofs_x = -3, .ofs_y = -5} 522 | }; 523 | 524 | /*--------------------- 525 | * CHARACTER MAPPING 526 | *--------------------*/ 527 | 528 | 529 | 530 | /*Collect the unicode lists and glyph_id offsets*/ 531 | static const lv_font_fmt_txt_cmap_t cmaps[] = 532 | { 533 | { 534 | .range_start = 32, .range_length = 1, .glyph_id_start = 1, 535 | .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY 536 | }, 537 | { 538 | .range_start = 65, .range_length = 26, .glyph_id_start = 2, 539 | .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY 540 | } 541 | }; 542 | 543 | 544 | 545 | /*-------------------- 546 | * ALL CUSTOM DATA 547 | *--------------------*/ 548 | 549 | #if LVGL_VERSION_MAJOR == 8 550 | /*Store all the custom data of the font*/ 551 | static lv_font_fmt_txt_glyph_cache_t cache; 552 | #endif 553 | 554 | #if LVGL_VERSION_MAJOR >= 8 555 | static const lv_font_fmt_txt_dsc_t font_dsc = { 556 | #else 557 | static lv_font_fmt_txt_dsc_t font_dsc = { 558 | #endif 559 | .glyph_bitmap = glyph_bitmap, 560 | .glyph_dsc = glyph_dsc, 561 | .cmaps = cmaps, 562 | .kern_dsc = NULL, 563 | .kern_scale = 0, 564 | .cmap_num = 2, 565 | .bpp = 1, 566 | .kern_classes = 0, 567 | .bitmap_format = 0, 568 | #if LVGL_VERSION_MAJOR == 8 569 | .cache = &cache 570 | #endif 571 | }; 572 | 573 | 574 | 575 | /*----------------- 576 | * PUBLIC FONT 577 | *----------------*/ 578 | 579 | /*Initialize a public general font descriptor*/ 580 | #if LVGL_VERSION_MAJOR >= 8 581 | const lv_font_t custom_font_outline = { 582 | #else 583 | lv_font_t custom_font_outline = { 584 | #endif 585 | .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ 586 | .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ 587 | .line_height = 42, /*The maximum line height required by the font*/ 588 | .base_line = 7, /*Baseline measured from the bottom of the line*/ 589 | #if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) 590 | .subpx = LV_FONT_SUBPX_NONE, 591 | #endif 592 | #if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 593 | .underline_position = 0, 594 | .underline_thickness = 0, 595 | #endif 596 | .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ 597 | #if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 598 | .fallback = NULL, 599 | #endif 600 | .user_data = NULL, 601 | }; 602 | 603 | #endif /*#if CUSTOM_FONT_OUTLINE*/ 604 | --------------------------------------------------------------------------------