first draft

This commit is contained in:
Alexander Popov 2023-05-03 00:05:40 +03:00
parent a16f7a6481
commit 71f1e96e01
Signed by: iiiypuk
GPG Key ID: E47FE0AB36CD5ED6
10 changed files with 423 additions and 4 deletions

View File

@ -1,3 +1,7 @@
## Example
![example](example.png)
## 🧰 Build
1. Clone Flipper Zero firmware.
@ -13,8 +17,16 @@ cd /path/to/flipperzero-firmware
ln -s /path/to/cyr_fap .
```
3. Build application
3. Copy `u8g2` library in to code directory
```sh
cd cyr_fap
ln -s /path/to/flipperzero-firmware/lib/u8g2 .
```
4. Build application
```sh
cd /path/to/flipperzero-firmware
./fbt fap_cyr_example
```

2
cyr_fap/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
u8g2/
u8g2

10
cyr_fap/application.fam Normal file
View File

@ -0,0 +1,10 @@
App(
appid="cyr_example",
name="Cyrillic Font",
apptype=FlipperAppType.EXTERNAL,
entry_point="cyr_example",
requires=["gui"],
stack_size=1 * 1024,
fap_icon="emoji_smile.png",
fap_category="Misc",
)

View File

@ -0,0 +1,12 @@
#include <furi.h>
#include <u8g2.h>
#include "../applications/services/gui/canvas_i.h"
void canvas_draw_utf8_str(Canvas* canvas, uint8_t x, uint8_t y, const char* str) {
furi_assert(canvas);
if(!str) return;
x += canvas->offset_x;
y += canvas->offset_y;
u8g2_DrawUTF8(&canvas->fb, x, y, str); //u8g2_DrawUTF8 u8g2_DrawStr
}

View File

@ -0,0 +1 @@
void canvas_draw_utf8_str(Canvas* canvas, uint8_t x, uint8_t y, const char* str);

81
cyr_fap/cyr_example.c Normal file
View File

@ -0,0 +1,81 @@
#include <furi.h>
#include <furi_hal.h>
#include <furi_hal_version.h>
#include <gui/gui.h>
#include <input/input.h>
#include <u8g2.h>
// see. ./u8g2/u8g2_fonts.c for more fonts
#include "u8g2_cyrillic_fonts.h"
#include "canvas_draw_utf8_str.h"
static void app_draw_callback(Canvas* canvas, void* ctx) {
UNUSED(ctx);
canvas_clear(canvas);
/** Available fonts:
* - cyrillic_4x6
* - cyrillic_5x7
* - cyrillic_6x12
*/
const char* flipper_name = furi_hal_version_get_name_ptr();
canvas_set_custom_u8g2_font(canvas, cyrillic_6x12);
canvas_draw_utf8_str(canvas, 0, 10, "Привет, я ");
canvas_draw_utf8_str(canvas, 62, 10, flipper_name);
canvas_set_custom_u8g2_font(canvas, cyrillic_5x7);
canvas_draw_utf8_str(canvas, 0, 20, "Это текст в FlipperZero");
}
static void app_input_callback(InputEvent* input_event, void* ctx) {
furi_assert(ctx);
FuriMessageQueue* event_queue = ctx;
furi_message_queue_put(event_queue, input_event, FuriWaitForever);
}
int32_t cyr_example(void* p) {
UNUSED(p);
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));
// Configure view port
ViewPort* view_port = view_port_alloc();
view_port_draw_callback_set(view_port, app_draw_callback, view_port);
view_port_input_callback_set(view_port, app_input_callback, event_queue);
// Register view port in GUI
Gui* gui = furi_record_open(RECORD_GUI);
gui_add_view_port(gui, view_port, GuiLayerFullscreen);
InputEvent event;
bool running = true;
while(running) {
if(furi_message_queue_get(event_queue, &event, 100) == FuriStatusOk) {
if((event.type == InputTypePress) || (event.type == InputTypeRepeat)) {
switch(event.key) {
case InputKeyBack:
running = false;
break;
default:
break;
}
}
}
}
view_port_enabled_set(view_port, false);
gui_remove_view_port(gui, view_port);
view_port_free(view_port);
furi_message_queue_free(event_queue);
furi_record_close(RECORD_GUI);
return 0;
}

BIN
cyr_fap/emoji_smile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 973 B

View File

@ -0,0 +1,295 @@
/**
* See. ./u8g2/u8g2_fonts.c for more fonts
*
* Available fonts:
* - cyrillic_4x6
* - cyrillic_5x7
* - cyrillic_6x12
*/
/*
Fontname: -Misc-Fixed-Medium-R-Normal--6-60-75-75-C-40-ISO10646-1
Copyright: Public domain font. Share and enjoy.
Glyphs: 191/919
BBX Build Mode: 0
*/
const uint8_t cyrillic_4x6[1579] =
"\277\0\2\2\3\3\2\4\4\4\6\0\377\5\377\5\377\0\356\1\334\2\301 \5\200\315\0!\6\351\310"
"\254\0\42\6\223\313$\25#\12\254\310\244\64T\32*\1$\11\263\307\245\241\301H\11%\10\253\310d"
"\324F\1&\11\254\310\305\24\253\230\2'\5\321\313\10(\7\362\307\251f\0)\10\262\307\304T)\0"
"*\7\253\310\244j\65+\10\253\310\305\264b\2,\6\222\307)\0-\5\213\312\14.\5\311\310\4/"
"\7\253\310Ve\4\60\10\253\310UCU\0\61\7\253\310%Y\15\62\7\253\310\65S\32\63\10\253\310"
"\314\224\301\2\64\10\253\310$\65b\1\65\10\253\310\214\250\301\2\66\7\253\310M\325\2\67\10\253\310\314"
"TF\0\70\7\253\310\255\326\2\71\7\253\310\265\344\2:\6\341\310\304\0;\7\252\307e\250\0<\10"
"\253\310\246\32d\20=\6\233\311l\60>\11\253\310d\220A*\1\77\11\253\310h\220\62L\0@\7"
"\253\310-\33\10A\10\253\310UC\251\0B\10\253\310\250\264\322\2C\10\253\310U\62U\0D\10\253"
"\310\250d-\0E\10\253\310\214\250\342\0F\10\253\310\214\250b\4G\10\253\310\315\244\222\0H\10\253"
"\310$\65\224\12I\7\253\310\254X\15J\7\253\310\226\252\2K\10\253\310$\265\222\12L\7\253\310\304"
"\346\0M\10\253\310\244\61\224\12N\10\253\310\252\241$\0O\7\253\310UV\5P\10\253\310\250\264b"
"\4Q\10\263\307UV\15\2R\10\253\310\250\264\222\12S\10\253\310m\220\301\2T\7\253\310\254\330\2"
"U\7\253\310$\327\10V\10\253\310$k\244\4W\10\253\310$\65\206\12X\10\253\310$\325R\1Y"
"\10\253\310$UV\0Z\7\253\310\314T\16[\6\352\310\254J\134\11\253\310\304\14\62\210\1]\6\252"
"\310\250j^\5\223\313\65_\5\213\307\14`\6\322\313\304\0a\7\243\310-\225\4b\10\253\310D\225"
"\324\2c\7\243\310\315\14\4d\10\253\310\246\245\222\0e\6\243\310USf\10\253\310\246\264b\2g"
"\10\253\307\255$\27\0h\10\253\310D\225\254\0i\10\253\310e$\323\0j\10\263\307fX.\0k"
"\10\253\310\304\264\222\12l\7\253\310\310\326\0m\10\243\310\244\241T\0n\7\243\310\250d\5o\7\243"
"\310U\252\2p\10\253\307\250\264b\4q\10\253\307-\225d\0r\10\243\310\244\25#\0s\10\243\310"
"\215\14\26\0t\10\253\310\245\25\63\10u\7\243\310$+\11v\7\243\310$\253\2w\10\243\310$\65"
"T\0x\7\243\310\244\62\25y\10\253\307$\225\344\2z\7\243\310\314\224\6{\10\263\307\246$k\20"
"|\6\351\310\14\1}\11\263\307d\20UL\21~\7\224\313%\225\0\0\0\0\4\377\377\4\1\11\253"
"\310\244\261\342\0\4\2\11\253\310\214\250\222\12\4\3\10\253\310\16Y\2\4\4\11\253\310M\225\201\0\4"
"\5\11\253\310m\220\301\2\4\6\10\253\310\254X\15\4\7\11\253\310\244\221b\32\4\10\10\253\310\226\252"
"\2\4\11\11\254\310L\325Z\2\4\12\11\254\310\244\326JK\4\13\11\253\310\250\250\222\12\4\14\10\253"
"\310\312\264\12\4\16\11\263\307\244\32u\2\4\17\11\263\307$\327H\11\4\20\11\253\310UC\251\0\4"
"\21\11\253\310\214\250\322\2\4\22\11\253\310\250\264\322\2\4\23\10\253\310\214\330\4\4\24\11\263\307\254\245"
"\206\12\4\25\11\253\310\214\250\342\0\4\26\12\253\310\244\221\322H\1\4\27\12\253\310h\220\62X\0\4"
"\30\11\253\310\304\64T\14\4\31\11\263\307\315\64T\14\4\32\11\253\310$\265\222\12\4\33\10\253\310-"
"W\0\4\34\11\253\310\244\241\254\0\4\35\11\253\310$\65\224\12\4\36\10\253\310UV\5\4\37\10\253"
"\310\214\344\12\4 \11\253\310\250\264b\4\4!\11\253\310U\62U\0\4\42\10\253\310\254\330\2\4#"
"\11\263\307$\253L\21\4$\12\253\310\245\221FJ\0\4%\11\253\310$\325R\1\4&\10\253\310$"
"\327\10\4'\11\253\310$\225d\1\4(\11\253\310$\65\216\0\4)\12\264\307\244\326#\203\0\4*"
"\13\254\310h\220\201LI\1\4+\12\254\310D\271\324H\1\4,\11\253\310\304\250\322\2\4-\11\253"
"\310h\220\344\2\4.\12\254\310\244\244.\225\0\4/\11\253\310\255\264T\0\4\60\10\243\310-\225\4"
"\4\61\11\253\310\315\221*\0\4\62\11\243\310\14\225\26\0\4\63\10\243\310\214X\2\4\64\11\253\307-"
"\65T\0\4\65\7\243\310US\4\66\11\244\310$S%\1\4\67\11\243\310\254\14\26\0\4\70\11\243"
"\310\244\61T\0\4\71\11\253\310\244\326P\1\4:\10\243\310$\265\12\4;\7\243\310-+\4<\11"
"\243\310\244\241T\0\4=\11\243\310\244\241T\0\4>\10\243\310U\252\2\4\77\10\243\310\214d\5\4"
"@\11\253\307\250\264b\4\4A\10\243\310\315\14\4\4B\10\243\310\254X\1\4C\11\253\307$\225\344"
"\2\4D\12\263\307\305\224T\231\0\4E\10\243\310\244\62\25\4F\11\253\307$k\304\0\4G\11\243"
"\310$\225d\0\4H\10\243\310\244q\4\4I\11\254\307\244\364\310 \4J\12\244\310h SR\0"
"\4K\11\244\310\304\245F\12\4L\11\243\310D\225\26\0\4M\10\243\310H\271\0\4N\12\244\310\244"
"\244\226J\0\4O\10\243\310\255\264\2\4Q\10\253\310\244\326\24\4R\11\263\307D\25U\31\4S\11"
"\253\310\246\64b\4\4T\11\243\310\215\224\201\0\4U\11\243\310\215\14\26\0\4V\11\253\310e$\323"
"\0\4W\11\253\310\244\14d\32\4X\11\263\307fX.\0\4Y\10\244\310\251\326\22\4Z\11\244\310"
"\244\264\322\22\4[\11\253\310D\25U\1\4\134\10\253\310\312\264\12\4^\11\263\307\244\32u\2\4_"
"\11\253\307$k\244\4\4\220\10\253\310\16Y\2\4\221\10\243\310\16\31\1\4\222\11\253\310\251\264b\2"
"\4\223\11\243\310\251\264\22\0\0";
/*
Fontname: -Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1
Copyright: Public domain font. Share and enjoy.
Glyphs: 211/1848
BBX Build Mode: 0
*/
const uint8_t cyrillic_5x7[2021] =
"\323\0\2\2\3\3\3\4\4\5\7\0\377\6\377\6\0\1\22\2/\3, \5\0\275\1!\6\261\261"
"\31)\42\7[\267IV\0#\12-\261\253\206\252\206\252\0$\12-\261[\65\330 \245\5%\11\64"
"\261\311 \366\6\1&\11,\261\213)V\61\5'\5\231\267\31(\7r\261S\315\0)\10r\261\211"
"\251R\0*\7k\261I\325j+\12-\261\315(\16\231Q\4,\7[\257S%\0-\6\14\265\31"
"\1.\6R\261\31\1/\7$\263\7\261\15\60\10s\261\253\134\25\0\61\7s\261K\262\65\62\12\64"
"\261S\61\203X\216\0\63\13\64\261\31\31$\215dR\0\64\12\64\261\215\252\32\61\203\4\65\12\64\261"
"\31\32l$\223\2\66\12\64\261S\31\254(\223\2\67\13\64\261\31\31\304\14b\6\21\70\12\64\261S"
"\61\251(\223\2\71\12\64\261SQ\246\15\222\2:\7j\261\31q\4;\10\63\257\263\221*\1<\10"
"k\261M\65\310 =\10\34\263\31\31\215\0>\11k\261\311 \203T\2\77\11s\261k\246\14\23\0"
"@\11\64\261SQ\335H\1A\11\64\261SQ\216)\3B\12\64\261Yq\244(G\2C\13\64\261"
"SQ\203\14bR\0D\11\64\261Y\321\71\22\0E\13\64\261\31\32\254\14\62\30\1F\13\64\261\31"
"\32\254\14\62\310\0G\12\64\261SQ\203\64\323\0H\10\64\261\211rL\63I\7s\261Y\261\65J"
"\13\64\261\7\31d\220\201L\12K\12\64\261\211*I\231\312\0L\14\64\261\311 \203\14\62\310`\4"
"M\11\64\261\211\343\210f\0N\10\64\261\211k\251\63O\11\64\261S\321\231\24\0P\12\64\261YQ"
"\216\224A\6Q\12<\257S\321\134I\243\0R\11\64\261YQ\216\324\14S\12\64\261S\61eT&"
"\5T\7s\261Y\261\13U\10\64\261\211\236I\1V\11\64\261\211\316$\25\0W\11\64\261\211\346\70"
"b\0X\12\64\261\211\62I\25e\0Y\10s\261IVY\1Z\12\64\261\31\31\304\66\30\1[\7"
"s\261\31\261\71\134\11$\263\311(\243\214\2]\7s\261\231\315\21^\5S\271k_\6\14\261\31\1"
"`\6R\271\211\1a\10$\261\33Q\251\2b\13\64\261\311 \203\25\345H\0c\7#\261\233\31\10"
"d\12\64\261\7\31\244\21e\32e\11$\261Sid\240\0f\11\64\261\255\312\231A\4g\11,\257"
"\33\61\251\214\6h\12\64\261\311 \203\25\315\0i\10s\261\313HV\3j\11{\257\315\260T\25\0"
"k\13\64\261\311 \203\224d*\3l\7s\261\221]\3m\10$\261IiH\31n\7$\261Y\321"
"\14o\10$\261SQ&\5p\11,\257YQ\216\224\1q\11,\257\33Q\246\15\2r\10$\261Y"
"Q\203\14s\10$\261\33\32\15\5t\12\64\261\313 \316\14\62\22u\7$\261\211f\32v\7c\261"
"IV\5w\7$\261\211r\34x\10$\261\211I\252\30y\11,\257\211\62\225%\0z\10$\261\31"
"\261\34\1{\10s\261MI\326 |\5\261\261\71}\12s\261\311 \252\230\42\0~\7\24\271K*"
"\1\0\0\0\4\377\377\4\1\14\64\261\31\32\254\14\62\30\1\4\2\14<\257\231\31\310\324\6\61\1\4"
"\3\14\64\261\31\32d\220A\6\31\4\4\13\64\261Sqf\20\223\2\4\5\13\64\261S\61eT&"
"\5\4\6\10s\261Y\261\65\4\7\10s\261Y\261\65\4\10\14\64\261\7\31d\220\201L\12\4\11\14"
"\65\261\223)&U\251d\1\4\12\15\65\261I\61\305\221*\225,\0\4\13\12\64\261\231\31\310\324\3"
"\4\14\13\64\261\211*I\231\312\0\4\16\12s\261IV\231\42\0\4\17\12{\257I^#%\0\4"
"\20\12\64\261SQ\216)\3\4\21\13\64\261Y\31\254(G\2\4\22\13\64\261Yq\244(G\2\4"
"\23\14\64\261\31\32d\220A\6\31\4\24\11<\257U\375\32\63\4\25\14\64\261\31\32\254\14\62\30\1"
"\4\26\14\65\261IIUsU\252\0\4\27\13\64\261\331(i$\223\2\4\30\12\64\261\211\352HK"
"\6\4\31\12\64\261Q\352HK\6\4\32\13\64\261\211*I\231\312\0\4\33\11\64\261U\375\222\1\4"
"\34\12\64\261\211\343\210f\0\4\35\11\64\261\211rL\63\4\36\12\64\261S\321\231\24\0\4\37\10\64"
"\261\31\322\63\4 \13\64\261YQ\216\224A\6\4!\14\64\261SQ\203\14bR\0\4\42\10s\261"
"Y\261\13\4#\12s\261IV\231\42\0\4$\13s\261K#\251\221\22\0\4%\13\64\261\211\62I"
"\25e\0\4&\12<\257\211\236C\203\0\4'\13\64\261\211f\332 \203\0\4(\15\65\261II%"
"\225TRi\14\4)\16=\257II%\225TRil\24\4*\13\64\261\321 \3\231Z\12\4+"
"\12\64\261\211r\251#\5\4,\14\64\261\311 \203\25\345H\0\4-\13\64\261S\61j \223\2\4"
".\12\64\261II\275T\2\4/\13\64\261\33Q\246\225d\0\4\60\11$\261\33Q\251\2\4\61\13"
",\261S\31\254\230\24\0\4\62\11$\261Y+\216\4\4\63\12$\261\31\32d\220\1\4\64\11,\257"
"U\255\61\3\4\65\12$\261Sid\240\0\4\66\11%\261I\325\134\15\4\67\10#\261Yr\1\4"
"\70\11$\261\211j$\31\4\71\13\64\261\211IE\65\222\14\4:\11$\261\211#\65\3\4;\10$"
"\261U-\31\4<\12%\261\311`\255\244\12\4=\11$\261\211c\312\0\4>\11$\261SQ&\5"
"\4\77\10$\261\31\322\14\4@\12,\257YQ\216\224\1\4A\10#\261\233\31\10\4B\10#\261Y"
"\261\2\4C\12,\257\211\62\225%\0\4D\13{\257\221\325H#%\0\4E\11$\261\211I\252\30"
"\4F\11,\257\211\346\320 \4G\11$\261\211\62m\20\4H\13%\261II%\225\306\0\4I\14"
"-\257II%\225\306F\1\4J\12$\261\321@\246\244\0\4K\11$\261\211K\215\24\4L\12$"
"\261\311`\305\221\0\4M\10c\261\221r\1\4N\12$\261II-\225\0\4O\10#\261[i\5"
"\4Q\14\64\261I\231Pid\240\0\4R\14<\257\213\63\3\231\62\210\11\4S\13\64\261-\207\6"
"\31d\0\4T\11c\261\33)\3\1\4U\11$\261\33\32\15\5\4V\11s\261\313HV\3\4W"
"\11s\261I\31\310j\4X\12{\257\315\260T\25\0\4Y\12%\261\223i\244d\1\4Z\12%\261"
"Iq\244\312\2\4[\14\65\261\313`\203\214f\25\3\4\134\11\64\261m\216\324\14\4^\13<\257\211"
"I\303\252,\1\4_\11k\257I\326H\11\4\220\13\64\261\7\67\310 \203\14\4\221\12,\261\7\67"
"\310 \3\4\222\12,\261[qf\20\1\4\223\11$\261[qF\0\4\226\15=\257IIUsU"
"\252F\1\4\227\12-\257I\325\134m\24\4\232\15=\257\211\251\324@\203\24k\30\4\233\13-\257\211"
"i\246X\303\0\4\256\11s\261IVY\1\4\257\11k\257I\252\254\0\4\260\12s\261I\252Z\61"
"\1\4\261\11k\257I\325\212\11\4\262\15=\257\211)F\15d\25\63\14\4\263\13-\257\211Q\3Y"
"\303\0\4\272\13\64\261\311 \203\25\315\0\4\273\11s\261\211Q%+\4\330\13\64\261S\61\203\63)"
"\0\4\331\12$\261\323`\244\244\0\4\342\10s\261Y\261\65\4\343\11s\261\331@V\3\4\350\13\64"
"\261SqL\231\24\0\4\351\11$\261SC&\5\4\356\11\64\261\211\236I\1\4\357\12\64\261\31\31"
"E\63\15\0";
/*
Fontname: -Misc-Fixed-Medium-R-SemiCondensed--12-110-75-75-C-60-ISO10646-1
Copyright: Public domain terminal emulator font. Share and enjoy.
Glyphs: 387/4531
BBX Build Mode: 0
*/
const uint8_t cyrillic_6x12[4739] =
"\203\0\3\2\3\4\3\5\4\6\14\0\376\7\376\10\377\1B\2\206\3\256 \5\0j\7!\7\71C"
"\307\240\4\42\7\233VGb\11#\15\65BOePJI\62(\25\0$\16M>W\266T\224l"
"K\224\312\26\1%\12=B\207\64e\235&\1&\15=BO\226DIVI\244H\11'\6\31W"
"\307\0(\13\313>W\22%Q-\312\2)\14\313>G\26eQ%J\42\0*\13=BW\245\262"
"eKS\4+\12-FW\30\15R\30\1,\10\33>\217\62$\0-\6\15N\307 .\6\222B"
"\307\20/\12=Bg\26f\305,\4\60\12\274B\217\22yJ\24\0\61\10\273BO\42u\31\62\12"
"=B\317\222\205Y\333 \63\14=B\307 f\231\252%\13\0\64\14=B_&%\245d\320\302\4"
"\65\13=B\307qHC-Y\0\66\14=B\227\224\205C\222i\311\2\67\13=B\307 fa\26"
"\226\0\70\14=B\317\222i\311\222i\311\2\71\14=B\317\222i\311\20f\221\4:\10\252B\307\20"
"\15\1;\11\63>\217Q\31\22\0<\7\253FWR+=\10\35J\307\240\16\2>\10\253FGV"
")\1\77\12=B\317\222\65\346P\4@\15=B\317\222)C\222(C\272\0A\13=B\317\222i"
"\303\220\331\2B\15=B\307\20U\242d\252D\203\2C\12=B\317\222\211m\311\2D\17=B\307"
"\20U\242$J\242$\32\24\0E\13=B\307\61\34\222\60\34\4F\12=B\307\61\34\222\260\10G"
"\13=B\317\222\211\245-Y\0H\12=BGf\33\206\314\26I\10\273B\307\22u\31J\12=B"
"\327\26\266D\221\4K\15=BG&%%-\211*Y\0L\10=BG\330\343 M\12=BG"
"\266,\211\346\26N\14=BG\246MJ\42mZ\0O\12=B\317\222yK\26\0P\14=B\307"
"\220d\332\240\204E\0Q\13=B\317\222\271$R\244\4R\15=B\307\220d\332\240\224*Y\0S"
"\13=B\317\222\251\253\226,\0T\11=B\307 \205=\1U\11=BG\346[\262\0V\13=B"
"G\346\226\224\222,\2W\12=BG\346%Q\272\0X\13=BG\246%\265JM\13Y\12=B"
"G\246%\265\260\11Z\12=B\307 f\35\7\1[\10\313>\307\20\365i\134\11=BG\32\246\305"
"\64]\10\313>\307\324\247!^\10\35VW\226\324\2_\6\15:\307 `\6\233VGVa\12-"
"B\317\232\14Z\62\4b\14=BG\30\16If\33\24\0c\12-B\317\222\211Y\262\0d\12="
"Bge\320l\311\20e\12-B\317\222\15J\272\0f\12=B\227T\311\266\260\6g\14=:\317"
"\222\331\222!L\26\0h\12=BG\30\16I\346\26i\10\273BO(\265\14j\12\314:_\254\265"
"I\211\2k\13=BGX\223\222\251\222\5l\10\273B\207\324\313\0m\13-B\207\322\242$J\242"
"\24n\11-BGb\322l\1o\11-B\317\222\331\222\5p\14=:\307\220d\266A\11C\0q"
"\12=:\317\240\331\222!,r\11-BGb\22\213\0s\11-B\317\240\36\24\0t\12=BW"
"\30\15RX\25u\11-BG\346\244(\1v\12-BGfKj\21\0w\12-BGfI\224"
".\0x\12-BG\226\324*\265\0y\12=:GfKj\215\0z\11-B\307\240\265\15\2{"
"\12\313>W\22U\262\250\26|\6I\77\307\3}\13\313>G\26\325\222\250\22\1~\11\35JO\244"
"$R\2\0\0\0\10\4d\4\332\377\377\4\0\16UBO\232\3\307pH\302p\20\4\1\15MB"
"Oy\30\303!\11\303A\4\2\17M:\307\26\206S%J\242\60R\0\4\3\12UB_\35\70\366"
"\10\4\4\15=B\317\222\211C\22f\311\2\4\5\14=B\317\222\251\253\226,\0\4\6\11\273B\307"
"\22u\31\4\7\13\313BG\222-Q\227\1\4\10\13=B\327\26\266D\221\4\4\11\17=B\217\224"
"DI\224(\25%\261\0\4\12\20=BG\22%Q\22\15IEI,\0\4\13\15=B\307\26\206"
"S%J\242\0\4\14\17UB_\35\310\244\244\244%Q%\13\4\15\16UBO\232\3\231iI&"
"M\13\4\16\16UBG\226\314\231[\62\204\311\2\4\17\14M:G\346\333\60\205\21\0\4\20\14="
"B\317\222i\303\220\331\2\4\21\16=B\307\220\204\341\220d\332\240\0\4\22\16=B\307\220d\332\240"
"d\332\240\0\4\23\11=B\307\261G\0\4\24\20E>\227\224DI\224DI\224$\303\26\4\25\14"
"=B\307\61\34\222\60\34\4\4\26\16=BG\222(\225-[*J\1\4\27\15=B\317\222\205\311"
"\252%\13\0\4\30\14=BGfZ\222I\323\2\4\31\16UBG\226\314\231iI&M\13\4\32"
"\16=BG&%%-\211*Y\0\4\33\17=B\327\22%Q\22%Q\22i\1\4\34\13=B"
"G\266,\211\346\26\4\35\13=BGf\33\206\314\26\4\36\13=B\317\222yK\26\0\4\37\11="
"B\307\315\267\0\4 \15=B\307\220d\332\240\204E\0\4!\13=B\317\222\211m\311\2\4\42\12"
"=B\307 \205=\1\4#\14=BG\346\226\14a\262\0\4$\16=BW\266T\224D\251l\21"
"\0\4%\14=BG\246%\265JM\13\4&\21M:G\224DI\224DI\224D\311 \26\4'"
"\13=BGfK\206\260\1\4(\20=BG\222(\211\222(\211\222(\311\60\4)\21M:G\222"
"(\211\222(\211\222(\311\60\26\4*\14=B\207X\234*Q\262\0\4+\15=BGf\233\224D"
"I\246\0\4,\14\274BGV[\42iH\0\4-\15=B\317\222\205\311\20j\311\2\4.\20="
"BG\224T\224dH\224DI\244\4\4/\15=B\317\240i\311\20%%-\4\60\13-B\317\232"
"\14Z\62\4\4\61\15=B\317\22\16IfK\26\0\4\62\15-B\307\220d\203\222\15\12\0\4\63"
"\10-B\307\261\21\4\64\15\65>\227\224DI\224$\303\26\4\65\13-B\317\222\15J\272\0\4\66"
"\13-BGR\331\262\245\1\4\67\14-B\317\222EJ\226,\0\4\70\13-BG&-\311\244\5"
"\4\71\15EBG\226\314\231\264$\223\26\4:\13\254BG\244$RR\12\4;\14-B\327\22%"
"Q\22i\1\4<\13-BG\266,\211\246\5\4=\13-BG\246\15C\246\5\4>\12-B\317"
"\222\331\222\5\4\77\10-B\307\315-\4@\15=:\307\220d\266A\11C\0\4A\13-B\317\222"
"\211Y\262\0\4B\12-B\307 \205M\0\4C\14=:G\346\226\14a\262\0\4D\17M:W"
"\230-\25%Q*[\30\1\4E\13-BG\226\324*\265\0\4F\16=:G\224DI\224D\311"
" \26\4G\12-BG\246%CX\4H\15-BG\222(\211\222(\311\60\4I\16=:G\222"
"(\211\222(\311\60\26\4J\12-B\207\30N\225\5\4K\13-BG\246MJ\62\5\4L\13\254"
"BG\226-\321\220\0\4M\12\254B\307\230lC\2\4N\15-BG\224T\206DI\244\4\4O"
"\13\254B\317\20%K\42\5\4P\15EBO\232#K\66(\351\2\4Q\15=BO\35X\262A"
"I\27\0\4R\17M:O\266\205S%J\242\60K\0\4S\12EB_\35\70\66\2\4T\12\254"
"B\317\220-\341\0\4U\12-B\317\240\36\24\0\4V\11\263BO(U\6\4W\12\263BG\222"
"I\225\1\4X\13\304:_\254\325\244D\1\4Y\14-B\217\224D\211R\261\0\4Z\15-BG"
"\22%\321\220T,\0\4[\15=BO\266\205S%J\242\0\4\134\14\304BW\71R\22))\5"
"\4]\15EBO\232\3\231\264$\223\26\4^\16U:G\226\314\231[\62\204\311\2\4_\13=:"
"G\346\66La\4\4`\15=BO\233%Q\22\245\13\0\4a\13-BO\233\222(]\0\4b"
"\15=BO\66D\341T\211\222\5\4c\15=BO\230\15Q\70U\26\0\4d\17=BG\264D"
"I\64,Q\22E\2\4e\14-BG\264D\303\22E\2\4f\16=BW\226DIm\30\222D"
")\4g\15\65BW\226DIm\30\222\2\4h\17=BG\224DI\62\134\206dH\6\4i\15"
"-BG\224D\311\260\14\311\0\4j\17EB\307-)%\321RQ\22\245\0\4k\14\65B\307-"
")-\25\245\0\4l\20FB\307AS\232\242AI\226di\1\4m\16\66B\307!i\212\6%"
"YZ\0\4n\20e:O-G\226,\214\324\60Y\322\5\4o\17U:O-G\226,R\223%"
"]\0\4p\16=BG\222(\211R\331\302\22\0\4q\14-BG\222(\225-\214\0\4r\15="
"B\317\222i\303\220i\311\2\4s\14-B\317\222\15C\226,\0\4t\17=BG&%Q%J"
"\242$\213\0\4u\14-BG&U\242$\213\0\4v\21UBG\324\232IIT\211\222(\311\42"
"\0\4w\16EBG\324\232I\225(\311\42\0\4x\22M:O\226DI\224\14\311\220,\211\230%"
"\0\4y\16=:OrH\206dI\304,\1\4z\15U>W\266T\64/\225-\2\4{\15E"
">W\266T\64Ke\213\0\4|\14MB\317\216\204Q\346\322\5\4}\15=B\317\216DI\242)"
"]\0\4~\17UB\307\245\234\324,\211\222(]\0\4\177\15EB\307\245\234\324\224D\351\2\4\200"
"\14U:\317\222\31[\307\12\0\4\201\13=>\317\222\211\351X\1\4\202\15\65FW\222%\211T\311"
"\222\10\4\203\11\36^\357\60\250\0\4\204\10\26b\317\224\11\4\205\10\25b\317\42\5\4\206\10\25b"
"\317\22\11\4\207\10\26b\217\26\15\4\210\21f:O\230\344@\230\344\214\225\34\10\223\0\4\211\16f"
":O\30N\251\316X\234R\1\4\212\20e:G\226\314\231tI\246I+&\0\4\213\17]:G"
"\226\314\231iI&\255\230\0\4\214\15EBO\230m\341T\211\222\5\4\215\15=BO\266\205S%"
"J\26\0\4\216\16EB\307\220d\226dP\62\61\4\4\217\16E:\307\220d\226dP\62\61\4\4"
"\220\13MBg\70\14a\217\0\4\221\13=Bg\70\14a#\0\4\222\15=B\317\220\204\331\20\205"
"\65\0\4\223\14-B\317\220dC\24f\0\4\224\14M>\307\61\34\222\314\255\2\4\225\13=>\307"
"qH\62[\5\4\226\15N:G\322\237\246\244_\324\2\4\227\15>:GR\32\303)I\324\2\4"
"\230\16U:\317\222\205Y\32j\311V\3\4\231\14E:\317\222U\265d\253\1\4\232\20N:G\226"
"D\225LL\262\250\26\247\1\4\233\15=:G\224\224\264$\252\206\1\4\234\16=BG\222XJZ"
"\22%J\3\4\235\13-BG\222X\246Di\4\236\16=BO\64$MZ\22U\242\0\4\237\16"
"EBO\230mQR\322\222\250\0\4\240\17EB\207\224DII\323\222\250\22\5\4\241\13-B\207"
"\224\224\264$*\4\242\23U:G\224DI\224\14I\224DI\224Db\1\4\243\16=:G\224D"
"\311\220DI$\26\4\244\22EBG\62$Q\22MI\224DI\224D\0\4\245\15-BG\62$"
"\321\224DI\4\4\246\23U:\307\224DI\224(\25%Q\22\245\230%\0\4\247\16=:\307\224D"
"\211RQ\212Y\2\4\250\17M>\317 FIEI\224\312\226\12\4\251\14=>\317\22FI\313\226"
"\12\4\252\15U:\317\222\211\335\222-M\0\4\253\15=:\317\222\211Y\262\245\11\0\4\254\14U:"
"\307 \205=\212\25\0\4\255\13=:\307\245\24\206b\5\4\256\13=BG\246%\265\260\11\4\257\13"
"=:G\246%\265\260\11\4\260\15=BG\246%\225A\12K\0\4\261\15=:G\246%\225A\12"
"K\0\4\262\20N:G\226dQ\22V\242,\311\342\64\4\263\15>:G\26%a%\312\342\64\4"
"\264\22U:\307RJ\242$J\242$J\242d\10\13\4\265\17E:\307RJ\242$J\242d\10\13"
"\4\266\20U:G\224DI\224DI\24\215\241X\4\267\15E:G\224DI\24\215\241X\4\270\17"
"EBGfI\224\312\20%Q\22\6\4\271\14\65BGf\251\14Q\22\6\4\272\13=BG\30\16"
"I\346\26\4\273\13\274BGV[\42S\0\4\274\17EB\227T\211\222hX\302(R\0\4\275\15"
"\65B\227\24\15K\30E\12\0\4\276\20U:\227T\211\222hX\302(\322\322\4\4\277\16E:\227"
"\24\15K\30EZ\232\0\4\300\11\303B\307\22\365\62\4\301\21UBG\226\314I\242$Je\251("
"\211R\4\302\15EBG\226\314Ie\313\226\6\4\303\20M:G&%%-\211*Y\30)\0\4"
"\304\15<:G\244$RR\312\22\5\4\305\21U:\327\22%Q\22%Q\22iZ\61\1\4\306\15"
"=:\327\22%Q\22i\305\4\4\307\16U:Gf\33\206\314-\214\24\0\4\310\15=:G\246\15"
"C\246\205\221\2\4\311\15U:Gf\33\206\314\255\230\0\4\312\15=:G\246\15C\246\25\23\0\4"
"\313\16U:G\346-\31\302L\13\23\0\4\314\15E:GfK\206\60\323\302\4\4\315\20U:G"
"\266\14\311\222(\211f+&\0\4\316\15=:G\266,\211\246\25\23\0\4\317\7\301B\307A\4\320"
"\17MBG\226\354\300\222i\303\220i\1\4\321\16EBG\226\354\300\232\14Z\62\4\4\322\16MB"
"O\35X\62m\30\62[\0\4\323\15=BO\35X\223AK\206\0\4\324\17=B\317\240DI\64"
"$\245$J\6\4\325\13-B\317\226$K\313\2\4\326\16MBG\226\314\303\70$a\70\10\4\327"
"\16EBG\226\354\300\222\15J\272\0\4\330\15=B\317\222\205\303\220i\311\2\4\331\13-B\317:"
"\14Y\262\0\4\332\17MBO\35X\262p\30\62-Y\0\4\333\15=BO\35X\207!K\26\0"
"\4\334\20MBO\71I\224D\251,\25%Q\12\4\335\14=BO\71\251l\331\322\0\4\336\16M"
"BO\35X\262\60R\265d\1\4\337\15=BO\35X\262H\311\222\5\4\340\14=B\307\240\325V"
"-Y\0\4\341\14=:\307\240\325V-Y\0\4\342\15MB\307\240f\246%\231\64-\4\343\15="
"B\307\240f\322\222LZ\0\4\344\15MBO\71\63-\311\244i\1\4\345\14=BO\71\223\226d"
"\322\2\4\346\14MBO\35X\62o\311\2\4\347\14=BO\35X\62[\262\0\4\350\15=B\317"
"\222i\303\220i\311\2\4\351\14-B\317\222\15C\226,\0\4\352\17MBO\35X\62m\30\62-"
"Y\0\4\353\15=BO\35X\262a\310\222\5\4\354\15MBOy\255\14a\226L\0\4\355\14\274"
"BG\222\216\311\66$\0\4\356\16MB\307\240f&E\11\265d\1\4\357\16M:\307\240f\266d"
"\10\265d\1\4\360\16MBO\71\63)J\250%\13\0\4\361\16M:O\71\263%C\250%\13\0"
"\4\362\17UBO$\305\231IQB-Y\0\4\363\17U:O$\305\231-\31B-Y\0\4\364"
"\14MBO\71\263%C\330\0\4\365\13=BO\71\323\222!,\4\366\12E>\307\261\243\230\1\4"
"\367\12\264>\307\240\325\264\10\4\370\16MBO\71\263MJ\242$S\0\4\371\14=BO\71\323&"
"%\231\2\4\372\16M:\317\220\204\331\26\206b\226\1\4\373\15=:\317\220d[(f\31\0\4\374"
"\16M:G\246%\265JM\13\263\4\4\375\15=:G\226\324*\265\60K\0\4\376\15=BG\246"
"%\225Ai\323\2\4\377\13-BG\226T\6\245-\5\0\13=Bge\320l\311\20\5\1\13\274"
"B_e\210L\311\0\5\2\16=BW\230II\242$Je\1\5\3\15=BWX\223\222D\251"
",\0\5\4\15=B\207\32Fj\22%Y\2\5\5\14\65B\207\32fQ%K\0\5\6\14L:"
"\207\230%b\226i\5\5\7\13D:\207\230Ea\246\25\5\10\20=B\307%J\242$Q\22%\221"
"\22\0\5\11\15-B\307%J\242$\221\22\0\5\12\20=BG\22%Q\22-J\242$R\2\5"
"\13\15-BG\22%\321\242$R\2\5\14\15=B\317\222\211\321\246%\13\0\5\15\13-B\317 "
"F[\262\0\5\16\16=B\307 \205\225(\211\222,\1\5\17\13-B\307 \205\225,\1\5\20\15"
"=B\317\240\251R\230%\13\0\5\21\14-B\317\240%R\226,\0\5\22\13>B\307%\352\227\306"
"\10\5\23\14\66>\307%\352%\13#\0\5\24\15>B\207\322\77U\272HI\0\5\25\14.B\207"
"\322\247J\42%\1\5\26\14=B\207\244$.\65[\0\5\27\14\65>\207\244(%\245&\2\5\30"
"\16=B\317\240DI\266\224\222(\31\5\31\13-B\317\322\262\224\42\1\5\32\14=B\317\222\271$"
"R\244\4\5\33\13=:\317\240\331\222!,\5\34\13=BG\346%Q\272\0\5\35\13-BGf"
"I\224.\0\5\36\16=BG\222HIeK\242J\26\5\37\15-BG\222H\311\42%Y\0\5"
" \22N:\207\222%Y\222%R\322EJ\322\60\1\5!\17\66>\207\222%Y\42%\211\224\244\1"
"\5\42\22M:G\22%Q\22\15IEI\224b\226\0\5#\17=:G\22%\321\220T\224b\226"
"\0\0";

BIN
example.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,8 +1,10 @@
## 🔤 Build font
# ⛔ У меня не получилось собрать шрифт bdfconv, который бы работал на Flipper
# 🔤 Build font
⚠️ This guide aclualy for Linux.
## 1.
## 1. Generate BDF
1. Open \*.ttf in FontForge.
2. With **Shift** select needed glyps.
3. Select **Bitmap Scrike Available** in **Element** menu.
@ -21,5 +23,9 @@ make
## 3. Generate `u8g2` font
```sh
./bdfconv -f 1 -n u8g2_cyr_font -o cyr_font.c ../monogramextended-*.bdf
./bdfconv -f 1 -m '32-255' -n u8g2_cyr_font -o cyr_font.c ../monogramextended-*.bdf
```
# Learn
https://github.com/olikraus/u8g2/blob/master/doc/faq.txt