LINUX.ORG.RU

История изменений

Исправление 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

Там всё таже хрень, так что всё ещё требуется наверное. Вот тебе и сишка и эмбедед и алгоритмы и конкретная прикладная задача и байтодрочерство =)