История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
Просто иногда застряешь в порочном круге «да ну ж, это тривиально»
Вово, я как раз в этом порочном круге. Сейчас через силу исправляюсь. Делится это хорошо, свои наколенные поделки я в могилу не унесу, денег они мне не принесут и несмотря на NIH синдром я образно чисто теоретически понимаю что есть люди которые им не страдают и может быть выложенная мною фигулька будет кому то полезна. Да, хорошо. Нет ну и ладно.
Мне хорошо в том что во внешнем поощрении не нуждаюсь и я рад за тех кто может чем то заниматься без внешней конфетки от социума, но это играет злую шутку ибо ты становишься сферическим конём в вакууме с космосом в голове и кучей всякого нерабочего в реальности, ведь зачем делать сразу готовое я ещё 100 раз всё улучшу и продумаю до положения молекул. Бесконечное улучшение несуществующих вещей получается :D
Вот и получается что делится мыслями/делами по сути своей эксперимент тоже и тоже можно отнести как к форме некого увлечения, не полноценного, но хорошо дополняющего другие.
Всё это не мешает главное самому важному всё же иногда опять зарываться во что-то без связи с внешним миром и лишь когда так сказать отпустит в качестве переключения задачи можно всё это дело оформить, выложить в том или ином виде в те или иные места, а потом нырнуть в другое оставив позади не каталог на диске или коробочку на полке, а готовую фигульку пусть порою скромную так не алё ни туды ни сюды порою, но всё же.
Мля хотел кратко написать, а опять вода :D Нутыпонял хехе.
Нейросетки и графика сразу отпадают, мой новый ноутбук еще слабее прежнего
Ну нейросетки могут быть и маленькими до сотки нейронов могут выполнять 99% всех задачек для нейронок, вытянет любой калькулятор. Играться хватит, да и играться с конфигурациями сетей, а не количеством. Ну дело барское.
Я не знаю актуально ли, но вот например Embedded шрифт 6x7 на полуглифах (комментарий) и ниже по сообщениям, кратко там у них дебильная реализация RLE декодера чел заморочился с байтодрочерством от которого должен быть профит, но болт забил на остальное. Много данных туда сюда гоняется. Суть в том что-бы получить блок данных RLE не по байтику, а куском в 32 бита, декодировать RLE выплюнуть и так по кругу.
Я было начал, но забросил упёрся в баг LVGL самого он вместе с сжатыми глифами RLE мусор в конце давал. А потом времени не стало
Выкину сюда это
all:
echo " 1) 'make depends' for get,configure/reconfigure and build/rebuild depends"
echo " 2) 'make decomp' for rebuild changes lvgl and decompressor"
echo " 3) 'make go' run application"
depends:
-git clone https://github.com/lvgl/lvgl # main project
-git clone https://github.com/lvgl/lv_fs_if.git # PC filesystem support
cp ./lvconf/lv_conf.h ./lvgl/src/ && cd ./lvgl/ && cmake . && make; # build main project
decomp:
cd lvgl && make #rebuild main project before build decompress
-rm ./decompress
$(CC) -I ./lvgl/src/ -I ./lv_fs_if/ -DLV_LVGL_H_INCLUDE_SIMPLE=1 main.c ./lv_fs_if/lv_fs_posix.c ./lv_fs_if/lv_fs_if.c -llvgl -L ./lvgl/lib/ -o decompress
clean:
-rm ./decompress
clear:
-rm -rfd ./lvgl/
-rm -rfd ./lv_fs_if/
-rm ./decompress
go:
./decompress
.SILENT: clean all go
#include <stdio.h>
#include <stdlib.h>
#include "lvgl/src/lvgl.h"
#include "lv_fs_if/lv_fs_if.h"
#include "fonts/code.font"
void info(const char *);
//const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t unicode_letter);
static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter);
int main(int argc, char *argv[])
{
/*просто отладка, видеть глазами явно что я подсунул, а то мало ли =)*/
info("./fonts/bin.font");
lv_init();
lv_fs_if_init();/*драйвер файловой системы*/
lv_font_t * lf = NULL;
lf = lv_font_load("S:./fonts/bin.font");
/* Заметка:
*
* Если скормить пробел lv_font_get_bitmap_fmt_txt(lf,' ');
* то возвращается NULL ибо dsc->box_w и gdsc->box_h равны нулю
*
* Шрифт собирался вот так.
* env DEBUG=* lv_font_conv --font Roboto-Regular.ttf -r 0x20-0x7F --size 16 --format bin --bpp 3 -o output.font
*
* если собрать с параметром --format lvgl то внутри видно что
*
* static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} // id = 0 reserved ,
*{.bitmap_index = 0, .adv_w = 63, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
* и тут
* static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
* U+0020 " "
* пусто
* Это баг или нет пока непонятно.
* */
int x = 0;
int s = '#';
//for (; x < 10; x++)
{
const uint8_t * buff = lv_font_get_glyph_bitmap(lf,s+x);
printf("[OUT][%c] -> ",s+x);
//GSIZE : 120 boxw 10 boxh 12 boxw*boxh 120
for (int i = 0; i < 120; ++i)
{
printf("%#0x, ",buff[i]);
}
printf("\n\n");
}
/* Текущая реализация выдаёт разные данные в конце
* баг или фича? Или особенность сборки под 64 бит?
*
* */
return 0;
}
/*---------------Чисто для себя------------------*/
void info(const char * font)
{
FILE * file = fopen(font,"rb");
/*узнаём его размер*/
fseek(file,0,SEEK_END);
long len = ftell(file);
fseek(file,0,SEEK_SET);
printf("font file size: %li bytes\n",len);
/*выделяем под размер память и отпускаем файл*/
char * bitmap_file = malloc(len);
fread(bitmap_file,1,len,file);
fclose(file);
/*читаем нужное и пропускаем заголовок*/
uint32_t head_len = *(uint32_t*)bitmap_file;
printf("font head size: %u bytes\n",head_len);
uint16_t font_size = *((uint16_t*)(bitmap_file+14));
printf("font symb size: %u px\n",font_size);
uint8_t bpp = *((int8_t*)(bitmap_file+37));
printf("font bpp size: %u bit/pixel\n",bpp);
uint16_t compress_alg = *((int8_t*)(bitmap_file+41));
switch(compress_alg)
{
case 0: printf("font compress algoritm: raw \n"); break;
case 1: printf("font compress algoritm: RLE + XOR \n"); break;
case 2: printf("font compress algoritm: RLE only \n"); break;
default: printf("WTF! - font compress broken!\n"); exit(1);
}
free(bitmap_file);
/*пока чистим, может потом чего надо будет*/
//char * bitmap_data = bitmap_file + head_len;
}
Декодер находится в lv_font_fmt_txt.c его то и нужно переписать. Проект популярный, заинтересован в этом Vit. Суть в получении профита по скорости от RLE.
Если будет интересно поймёшь зачем я всё это сбросил тут. Глянул https://github.com/lvgl/lvgl/blob/master/src/font/lv_font_fmt_txt.c#L357
Там всё таже хрень, так что всё ещё требуется наверное. Вот тебе и сишка и эмбедед и алгоритмы и конкретная прикладная задача и байтодрочерство =)
Мне бы научится ещё кратко излагать мысли ёпрст…
Исходная версия LINUX-ORG-RU, :
Просто иногда застряешь в порочном круге «да ну ж, это тривиально»
Вово, я как раз в этом порочном круге. Сейчас через силу исправляюсь. Делится это хорошо, свои наколенные поделки я в могилу не унесу, денег они мне не принесут и несмотря на NIH синдром я образно чисто теоретически понимаю что есть люди которые им не страдают и может быть выложенная мною фигулька будет кому то полезна. Да, хорошо. Нет ну и ладно.
Мне хорошо в том что во внешнем поощрении не нуждаюсь и я рад за тех кто может чем то заниматься без внешней конфетки от социума, но это играет злую шутку ибо ты становишься сферическим конём в вакууме с космосом в голове и кучей всякого нерабочего в реальности, ведь зачем делать сразу готовое я ещё 100 раз всё улучшу и продумаю до положения молекул. Бесконечное улучшение несуществующих вещей получается :D
Вот и получается что делится мыслями/делами по сути своей эксперимент тоже и тоже можно отнести как к форме некого увлечения, не полноценного, но хорошо дополняющего другие.
Всё это не мешает главное самому важному всё же иногда опять зарываться во что-то без связи с внешним миром и лишь когда так сказать отпустит в качестве переключения задачи можно всё это дело оформить, выложить в том или ином виде в те или иные места, а потом нырнуть в другое оставив позади не каталог на диске или коробочку на полке, а готовую фигульку пусть порою скромную так не алё ни туды ни сюды порою, но всё же.
Мля хотел кратко написать, а опять вода :D Нутыпонял хехе.
Нейросетки и графика сразу отпадают, мой новый ноутбук еще слабее прежнего
Ну нейросетки могут быть и маленькими до сотки нейронов могут выполнять 99% всех задачек для нейронок, вытянет любой калькулятор. Играться хватит, да и играться с конфигурациями сетей, а не количеством. Ну дело барское.
Я не знаю актуально ли, но вот например Embedded шрифт 6x7 на полуглифах (комментарий) и ниже по сообщениям, кратко там у них дебильная реализация RLE декодера чел заморочился с байтодрочерством от которого должен быть профит, но болт забил на остальное. Много данных туда сюда гоняется. Суть в том что-бы получить блок данных RLE не по байтику, а куском в 32 бита, декодировать RLE выплюнуть и так по кругу.
Я было начал, но забросил упёрся в баг LVGL самого он вместе с сжатыми глифами RLE мусор в конце давал. А потом времени не стало
Выкину сюда это
all:
echo " 1) 'make depends' for get,configure/reconfigure and build/rebuild depends"
echo " 2) 'make decomp' for rebuild changes lvgl and decompressor"
echo " 3) 'make go' run application"
depends:
-git clone https://github.com/lvgl/lvgl # main project
-git clone https://github.com/lvgl/lv_fs_if.git # PC filesystem support
cp ./lvconf/lv_conf.h ./lvgl/src/ && cd ./lvgl/ && cmake . && make; # build main project
decomp:
cd lvgl && make #rebuild main project before build decompress
-rm ./decompress
$(CC) -I ./lvgl/src/ -I ./lv_fs_if/ -DLV_LVGL_H_INCLUDE_SIMPLE=1 main.c ./lv_fs_if/lv_fs_posix.c ./lv_fs_if/lv_fs_if.c -llvgl -L ./lvgl/lib/ -o decompress
clean:
-rm ./decompress
clear:
-rm -rfd ./lvgl/
-rm -rfd ./lv_fs_if/
-rm ./decompress
go:
./decompress
.SILENT: clean all go
#include <stdio.h>
#include <stdlib.h>
#include "lvgl/src/lvgl.h"
#include "lv_fs_if/lv_fs_if.h"
#include "fonts/code.font"
void info(const char *);
//const uint8_t * lv_font_get_bitmap_fmt_txt(const lv_font_t * font, uint32_t unicode_letter);
static uint32_t get_glyph_dsc_id(const lv_font_t * font, uint32_t letter);
int main(int argc, char *argv[])
{
/*просто отладка, видеть глазами явно что я подсунул, а то мало ли =)*/
info("./fonts/bin.font");
lv_init();
lv_fs_if_init();/*драйвер файловой системы*/
lv_font_t * lf = NULL;
lf = lv_font_load("S:./fonts/bin.font");
/* Заметка:
*
* Если скормить пробел lv_font_get_bitmap_fmt_txt(lf,' ');
* то возвращается NULL ибо dsc->box_w и gdsc->box_h равны нулю
*
* Шрифт собирался вот так.
* env DEBUG=* lv_font_conv --font Roboto-Regular.ttf -r 0x20-0x7F --size 16 --format bin --bpp 3 -o output.font
*
* если собрать с параметром --format lvgl то внутри видно что
*
* static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
*{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} // id = 0 reserved ,
*{.bitmap_index = 0, .adv_w = 63, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
* и тут
* static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
* U+0020 " "
* пусто
* Это баг или нет пока непонятно.
* */
int x = 0;
int s = '#';
//for (; x < 10; x++)
{
const uint8_t * buff = lv_font_get_glyph_bitmap(lf,s+x);
printf("[OUT][%c] -> ",s+x);
//GSIZE : 120 boxw 10 boxh 12 boxw*boxh 120
for (int i = 0; i < 120; ++i)
{
printf("%#0x, ",buff[i]);
}
printf("\n\n");
}
/* Текущая реализация выдаёт разные данные в конце
* баг или фича? Или особенность сборки под 64 бит?
*
* */
return 0;
}
/*---------------Чисто для себя------------------*/
void info(const char * font)
{
FILE * file = fopen(font,"rb");
/*узнаём его размер*/
fseek(file,0,SEEK_END);
long len = ftell(file);
fseek(file,0,SEEK_SET);
printf("font file size: %li bytes\n",len);
/*выделяем под размер память и отпускаем файл*/
char * bitmap_file = malloc(len);
fread(bitmap_file,1,len,file);
fclose(file);
/*читаем нужное и пропускаем заголовок*/
uint32_t head_len = *(uint32_t*)bitmap_file;
printf("font head size: %u bytes\n",head_len);
uint16_t font_size = *((uint16_t*)(bitmap_file+14));
printf("font symb size: %u px\n",font_size);
uint8_t bpp = *((int8_t*)(bitmap_file+37));
printf("font bpp size: %u bit/pixel\n",bpp);
uint16_t compress_alg = *((int8_t*)(bitmap_file+41));
switch(compress_alg)
{
case 0: printf("font compress algoritm: raw \n"); break;
case 1: printf("font compress algoritm: RLE + XOR \n"); break;
case 2: printf("font compress algoritm: RLE only \n"); break;
default: printf("WTF! - font compress broken!\n"); exit(1);
}
free(bitmap_file);
/*пока чистим, может потом чего надо будет*/
//char * bitmap_data = bitmap_file + head_len;
}
Декодер находится в lv_font_fmt_txt.c его то и нужно переписать. Проект популярный, заинтересован в этом Vit. Суть в получении профита по скорости от RLE.
Если будет интересно поймёшь зачем я всё это сбросил тут. Глянул https://github.com/lvgl/lvgl/blob/master/src/font/lv_font_fmt_txt.c#L357
Там всё таже хрень, так что всё ещё требуется наверное. Вот тебе и сишка и эмбедед и алгоритмы и конкретная прикладная задача и байтодрочерство =)