Добавить свои изменения в чужую библиотеку на Гитхабе?
- Войдите на сайт для отправки комментариев
Хочу поучаствовать в редактировании вот этой библиотеки :
https://github.com/mozok/DMDSTM
Это адаптация библиотеки DMD (для светодиодных матриц p10) под СТМ32Дуино. Автор начал работу и больше года как забросил на пол-дороги, в коде какие-то обрывки. Я ее немного почистил у меня все отлично заработало. Но библиотеку надо "причесать" - добавить нормальный выбор пинов, сделать выбор между SPI-1 и SPI-2, переписать примеры под СТМ
Опыта в совместной работе на Гитхабе - ноль. Как вообще это делается? Как законтачить с автором? принято ли предлагать свои правки - или авторы проектов этого не любят?
Ну и вообще - нужно ли это? Удивляет, что для матриц P10 нет официальных библиотек под СТМ32. Вроде там абсолютно ничего сложного. Может есть какая-то причина и для работы с DMD стм32 никто не использует?
Делаешь pull request с изменениями, и если автор одобрит - то он сольёт эти изменения со своим гитом. А так, если не париться - сделай форк его репозитория, и уже в него закоммить свои изменения.
Кстати - в репозитории видно, что автор принимал реквесты, так что всё должно быть норм: https://github.com/mozok/DMDSTM/pull/1
Кстати сказать - с удовольствием бы поюзал хорошую библиотеку для P10 под STM32, особенно - если там есть кириллица в UTF-8 из коробки. И если ты говоришь, что допилил до нормального состояния - выкладывай на гитхаб, давай ссылку - сделаю форк, и буду при случае юзать твою ;)
Кстати сказать - с удовольствием бы поюзал хорошую библиотеку для P10 под STM32, особенно - если там есть кириллица в UTF-8 из коробки. И если ты говоришь, что допилил до нормального состояния - выкладывай
не, пока я только убедился, что библиотека в принципе рабочая. Запустил один стандартный пример из библиотеки DMD на STM32F103. Там еще есть что поправить - Код там недоделанный, конструктор кривоватый, пины прямо в коде библиотеки устанавливаюся.. Но, принципе, "причесать" то что есть до рабочего состояния не так и трудно, пару дней посидеть... Получится - выложу.
UTF-8 "из коробки" в оригинальной DMD нет, соответвенно и тут тоже. Можно допилить, но это серьезная тема.
UTF-8 "из коробки" в оригинальной DMD нет, соответвенно и тут тоже. Можно допилить, но это серьезная тема.
Да ничо там серьезного нету, проблема только со шрифтами. Я делал проект под DMD и P10, надыбал только один русский шрифт, а ручками отрисовывать в GLCD Font creator - то ещё удовольствие. А проблема только в том, что автор шрифта раскидал символы по шрифту - как захотел. Написал я маппинг из UTF-8 в кодовую страницу этого шрифта, но - это совсем непереносимо.
Вот если бы запилить какой-нибудь стандарт кириллического шрифта под эту библу - я бы подкинул функции перекодировки, там ничего космического нету.
Скажем по-другому: для меня существует проблема с наличием отсутствия РАЗНЫХ кириллических шрифтов под DMD, с одинаковой внутренней кодировкой (чтобы один и тот же символ имел один и тот же код в таблице шрифта). А UTF-8 туда припилить - припилим ;)
Так что считай - я в деле, если что - обращайся без зазрения, можем гит вместе вести, там контрибуторы добавляются легко ;)
самое простое, наерна, сделать маппинг Utf8->CP866
Должен заметить, что utf-8 для Аrduino - тяжеловато. Даже в варианте stm32.
utf-8 - это весь японский, китайский, арабский и т.п. Не исключая также грузинского и греческого. Уместить все это в 64к нереально.
А если заявлять о поддержке utf-8, а на деле поддерживать одну кириллицу, 98% населения планеты этого не поймут. (или гитхаб стал на 100% русскоязычным?)
Да никто не говорит о полноценной поддержке UTF-8, ессно. Тем более, что специфика в разрезе данного проекта - тупо упирается в размер шрифта и кол-во символов в нём. Тут скорее - удобство пользования в виде некоторого "стандарта": сделать простейшую систему плагинов: для шрифта с набором символов - своя функция маппинга из UTF-8 в кодовую страницу шрифта. Надо мне шрифт на японском - взял шрифт, где помимо латиницы ещё японские алфавиты, в комплекте со шрифтом - функция маппинга, далее тупо беру и пишу в прошивке текст на японском, и всё - он отображается на матрице.
Библиотека DMD убога как раз отсутствием вот этих вот фич, пмсм. И описанное - уж точно востребовано, т.к. если почитать оф. форум - там и арабы задают вопросы, мол "хочу шрифт на арабском" и индусы, и т.д. и т.п. При том, что Arduino IDE хранит файлы в UTF-8 - сам бог велел чуть расширить функционал библиотеки. Тут главное - оставить кодовую страницу латиницы в шрифте нетронутой, и разработать соглашение о расширении шрифта. А сами шрифты - GLCD Font creator и ещё какая-то прога, помню, скачивал, правда, и то и то - долговато.
При таком подходе - и пользователи подтянутся. Да даже если и не подтянутся - тут что, кто-то ставит перед собой цель понравится всему гитхабу? Как-то наивно.
Кстати. в комплекте библиотеки уже лежит пара фонтов кириллицы c кодировкой UTF8
Можно выводить надписи прямо из скетча, без всяких перкодировок:
https://youtu.be/e9aPEgUchlY
Качество фонтов, правда, довольно средненькое
Кстати. в комплекте библиотеки уже лежит пара фонтов кириллицы c кодировкой UTF8
Можно выводить надписи прямо из скетча, без всяких перкодировок:
https://youtu.be/e9aPEgUchlY
Качество фонтов, правда, довольно средненькое
Автор библиотеки допилил, что ли? Если так - то отлично ;)
Правка: чот не вижу я там UTF-8, от слова "совсем". Хочешь сказать, что если я вызову drawString вот так:
то отрисуется русский текст? В коде библиотеки не вижу никакой работы с UTF-8.
Вот, кстати, как я юзаю UTF-8 для шрифта SystemFont5x7rus.h для библиотеки DMD.
Сам шрифт:
И перекодировка с UTF-8 в кодовую таблицу шрифта:
Как видно из шрифта - там "ё" и "Ё" - отдельно, между "п" и "р" - пробел, короче, дичь :) Делалось именно под эту дичь, но легко можно доработать под какой-нибудь стандартный подход к шрифту.
В шрифте библиотеки - тоже отсебятина, как бог на душу положит раскиданы символы. Нет в жизни счастья :)
Правка: чот не вижу я там UTF-8, от слова "совсем". Хочешь сказать, что если я вызову drawString вот так:
то отрисуется русский текст? В коде библиотеки не вижу никакой работы с UTF-8.
Ну, у меня - работает, видео выше выложил. Кусок кода, работа которого видна на видео - ниже. См строчку 5
Так, продолжил изыскания.
На всякий случай проверил, в какой кодировке у меня сохранен скетч - Notepad++ пишет UTF-8. Так что похоже, что эта библиотека как-то обрабатывает UTF8 прямо из скетча, хотя я тоже не вижу в ее коде никаких перекодировок.
Но обрати внимание, что они переставили символы в фонте SystemFont5x7rus.h так, что теперь коды кириллицы у них соответвуют младшему байту кода UTF8. То есть для вывода символа никакая сложная перекодировка не нужна - просто отбрасывай старший байт и все!
правда я все равно не вижу в коде библиотеки, где они этот байт отбрасывают.
правда я все равно не вижу в коде библиотеки, где они этот байт отбрасывают.
все, нашел, как они перекодируют кириллицу в UTF8 - все до безобразия просто :) Они Уникод-символы тупо пихают в обычный unsigned char - вот у них и остается от Уникода только младщий байт!
Заголовк функции вывода символа:
Короче, похоже сделать вывод UTF8 с этой библиотекой никакой проблемы не составит, главное фонты с нужной метрикой подложить.
Вопрос - где бы надыбать разнообразных фонтов в кириллице высотой 10-15 пикселей? - кодировка не важна, это я поменяю
Так ты посмотри, откуда вызывается drawChar - из drawString, где ПОБАЙТОВО проходят массив char. Что-то не срастается у меня, и твой пример с "Туалет не работает" это только подтверждает. Выведи результат strlen(MSG) в Serial - и увидишь, что байтовая длина там будет сильно больше, чем символьная, если строка реально в UTF-8. Далее, идём в drawString и видим, что там побайтово идёт анализ.
Дело там не в отбрасывании байт, а имхо в том, что просто неизвестный байт, не соответствующий символу - не рисуется. Как по мне - костыль костыльный.
Дело там не в отбрасывании байт, а имхо в том, что просто неизвестный байт, не соответствующий символу - не рисуется. Как по мне - костыль костыльный.
вполне возможно. Ок, проверю и подумаю, что тут можно поправить
Главное чтоб библиотека нормально заработала. У меня сейчас время появилось, попробую допилить код до приличного вида (пока без учета косяков с UTF8) и выложить, чтоб другие могли проверить
Сделал библиотеку, вычистил все косяки в коде, перевел все дефайны в переменные... все работает. Собрался выкладывать и столкнулся с совершенно дурацкой ситуацией. Код работает только если контакт nOE матрицы подсоединен к пину PA11 на плате СТМ. Ни на каком другом пине не работает.Ввсе прочие пины можно менять, (даже для SPI есть выбор между SPI1 и SPI2) - а этот должен быть только PA11...
Пока завис на этом.
подпишусь... как раз тут информер вояю...
УФФ, похоже победил!
Работает на произвольных пинах (хотя как выяснилось - далеко не на любых, есть куча исключений).
Запихал все переменные и методы библиотеки в класс DMD, выкинул все глобалы и дефайны. В итоге появилась возможность независимо вызывать несколько экземпляров класса. Поскольку у STM32F103 два канала SPI - можно запустить две независимые цепочки матриц, управляемые одной платой. Пример на видео:
https://youtu.be/OCpLTLpwgRI
Теперь можно выкладывать. Займусь освоением Гитхаба
Выложил код на Гитхаб https://github.com/board707/DMD_STM32
Открыл ветку в "Проектах" http://arduino.ru/forum/proekty/dmdstm32-versiya-biblioteki-dmd-dlya-stm32duino
предлагаю переместить обсуждение туда. Очень жду ваших замечаний.