E-ink дисплей и киррилица

Dronab
Offline
Зарегистрирован: 16.09.2018

Есть процедура которая формирует рисование буквы на экране: 

/**
 *  @brief: this draws a charactor on the frame buffer but not refresh
 */
void Paint::DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored) {
    int i, j;
    unsigned int char_offset = (ascii_char - ' ') * font->Height * (font->Width / 8 + (font->Width % 8 ? 1 : 0));
    const unsigned char* ptr = &font->table[char_offset];
    //16 Height, 11 Width
    for (j = 0; j < font->Height; j++) {
        for (i = 0; i < font->Width; i++) {
            if (pgm_read_byte(ptr) & (0x80 >> (i % 8))) {
                DrawPixel(x + i, y + j, colored);
            }
            if (i % 8 == 7) {
                ptr++;
            }
        }
        if (font->Width % 8 != 0) {
            ptr++;
        }
    }
}


/**
*  @brief: this displays a string on the frame buffer but not refresh
*/
void Paint::DrawStringAt(int x, int y, const char* text, sFONT* font, int colored) {
    const char* p_text = text;
    unsigned int counter = 0;
    int refcolumn = x;
    
    /* Send the string character by character on EPD */
    while (*p_text != 0) {
        /* Display one character on EPD */
        DrawCharAt(refcolumn, y, *p_text, font, colored);
        /* Decrement the column position by 16 */
        refcolumn += font->Width;
        /* Point on the next character */
        p_text++;
        counter++;
    }
}

Данная процедура обращается к таблице массиву шрифта где буква представляет собой цепочку 0x42, 0x00, 0x42, 0x00, и т.д. и т.п.

Если добавить в конец массива цепочки своих букв - при попытке написать русскими буквами на экране увы выводится все что угодно, только не буквы. Помогите добавить русский шрифт. Если не в шрифт с английским языком, пусть хотябы отдельно.

sadman41
Offline
Зарегистрирован: 19.10.2016

А ежели вместо английских букв свои нарисовать, то все ОК - так?  Если не хотите всю библиотеку перепахивать, то создайте свой

sFONT Font8Rus = {
  Font8Rus_Table,
  5, /* Width */
  8, /* Height */
};

И передавайте указатель на него в библиотечные функции.

Dronab
Offline
Зарегистрирован: 16.09.2018

Да это все не проблема, могу переписать или создать свою, речь о том что если передать вместо латиницы строку в которой написать русскими буквами - то не работает. Т.е.: 

paint.DrawStringAt(30, 4, "Привет", &Font16, COLORED);

Не работает, а если писать английскими работает. Просто хочу писать по-русски вместо Ghbdtn (Привет). 

sadman41
Offline
Зарегистрирован: 19.10.2016

...вопрос-то в чем? Не понимаете, почему UTF-8 не хочет впихиваться в char?

Dronab
Offline
Зарегистрирован: 16.09.2018

sadman41 пишет:

...вопрос-то в чем? Не понимаете, почему UTF-8 не хочет впихиваться в char?

Да, как сконвертировать и скормить аналогичный английскому русский шрифт?

sadman41
Offline
Зарегистрирован: 19.10.2016

Поверьте - проще писать транслитом, чем страдать с преобразованиями кодировок на мелком МК.

Dronab
Offline
Зарегистрирован: 16.09.2018

sadman41 пишет:

Поверьте - проще писать транслитом, чем страдать с преобразованиями кодировок на мелком МК.

Да это все понятно, речь лишь об удобстве.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, если все понятно, то ничем более помочь не могу. Arduino IDE вкрячивает UTF-8 вместо русских букв, если я не ошибаюсь. Сделайте какой-нить функцию-маппер UTF-8 -> Russian Font , в скетче прогоняйте через нее свою строку с приветом и передавайте результат на отрисовку.

Dronab
Offline
Зарегистрирован: 16.09.2018

sadman41 пишет:

Ну, если все понятно, то ничем более помочь не могу. Arduino IDE вкрячивает UTF-8 вместо русских букв, если я не ошибаюсь. Сделайте какой-нить функцию-маппер UTF-8 -> Russian Font , в скетче прогоняйте через нее свою строку с приветом и передавайте результат на отрисовку.

Ну если бы я мог самостоятельно такое написать я бы не стал просить помощи на форуме.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Dronab пишет:
Ну если бы я мог самостоятельно такое написать я бы не стал просить помощи на форуме
  Так в чем проблема. На форуме есть раздел http://arduino.ru/forumy/ishchu-ispolnitelya

arduinec
Offline
Зарегистрирован: 01.09.2015

Преобразование UTF-8 в Win-1251 описано здесь:
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...