Маюсь ерундой от нежелания работать :)

AndyBig
Идет загрузка
Загрузка
03.09.2019
2492
98
печатает на Anet A8
Личные дневники

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

13
Статья относится к принтерам:
Anycubic Photon S

Работать так не хочется, что начал искать себе какое-то пусть бесполезное, но интересное занятие :))

И решил написать программку для редактирования интерфейса принтера Photon S.

Пока в процессе написания, но извлекать изображения для редактирования в графических редакторах уже можно :)

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

13
Комментарии к статье

Комментарии

03.09.2019 в 16:30
0

Полезное начинание.

03.09.2019 в 16:34
2

Еще бы доковыряться до возможности русифицировать :) Кстати, русский шрифт в ресурсах присутствует. Но выбор языков в прошивке жестко ограничен двумя языками.

03.09.2019 в 16:43
1

жестко ограничен двумя языками.

второй предполагаю китайский. Так если вместо него подсунуть русский. Знаете-же так иногда на компьютерных прогах делают. Может и здесь выйдет.

03.09.2019 в 16:52
1

Ну да, один китайский и один английский. Вписать русские тексты вместо китайских - дело нехитрое, но есть нюансы :)

1. В какой кодировке? Оригинальные китайские тексты в какой-то двухбайтовой, но не Unicode.

2. Как заставить прошивку выбрать русский шрифт?

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


03.09.2019 в 17:05
0

1. В какой кодировке? Оригинальные китайские тексты в какой-то двухбайтовой, но не Unicode.

Это, скорее всего, Unicode. Формат UTF-8 или UTF-16.

03.09.2019 в 17:36
0

Не знаю, я не смог определить, вроде ни под что не подходит. Вот Вам для примера строка байт (в хексах) китайского текста из прошивки: b3 f5 ca bc bb af ca a7 b0 dc 2c c7 eb d6 d8 c6 f4 bb fa c6 f7 21

Попробуйте, может у Вас получится понять что это :) По идее, соответствующий ему английский текст такой: Init failed,please Restart!

03.09.2019 в 18:13
3

Попробуйте, может у Вас получится понять что это :)

Получилось.

Перевёл исходную фразу на китайский (традиционный и упрощённый). Google перевёл хорошо, а Яндекс перевёл не понятно что...

Вставил в текстовый редактор и выбрал кодировку UTF-8. Сохранил, посмотрел что сохранилось - не совпало...

Попробовал другие кодировки - UTF-16, Big5 (Китайский традиционный) и GB2312 (Китайский упрощённый).

Последний вариант совпал (это повезло, что знали фразу, которую перевели на китайский):

Это тестовый текст:

Это результат в hex:


Добавлю:

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


Ещё добавлю:

Забил в текст исходные цифры в hex:

b3 f5 ca bc bb af ca a7 b0 dc 2c c7 eb d6 d8 c6 f4 bb fa c6 f7 21


Загнал в переводчик и получил полный текст на английском:


т.е. английский перевод у них "упрощённый"...


03.09.2019 в 18:49
2

Йоптить, я даже не знал о такой кодировке :)))) Спасибо, теперь все выглядит немного проще, обязательно попробую :)

Да, в картинке шрифта криллица присутствует, так что шансы есть :)

03.09.2019 в 18:58
0

Только простой подменой текста не обойтись. Русские предложения будут содержать больше символов, чем в китайском варианте. Придётся строки переносить в свободное место в прошивке.

03.09.2019 в 23:54
1

Не думаю, что там будет встречаться достаточно свободного места. Но скорее всего можно просто добавить в конец файла лишний килобайт :) Хотя тоже не уверен до конца :)

04.09.2019 в 01:07
1

Не получилось в лоб. Написал в редакторе русское слово, сохранил в кодировке GB-2312, подставил полученные байты в прошивку... И получил все равно иероглифы, хотя и другие :)

04.09.2019 в 04:56
1

В общем, поковырял прошивку и увидел, что шрифты из файла ресурсов не используются. Используются шрифты, лежащие в самой прошивке микроконтроллера. Собственно, они и занимают больше половины прошивки - 270 КБ из 400 :)) И русских символов там нет. Так что только рисовать самому русский шрифт, заменять им те несколько тысяч иероглифов, которые есть в прошивке, и еще изменять процедуру нахождения изображений отдельных символов. Плюс разобраться с разными размерами шрифта. Короче, сделать можно, но не быстро :)

04.09.2019 в 08:07
0

Тогда проще английский текст заменить. Хотя всёравно разбираться с форматом шрифта. Можете ссылку на прошивку исходную дать. И диаппазон адресов со шрифтами? Будет время, могу посмотреть.

Добавлено - прошивку P_UI_2_6.bin нашёл.

04.09.2019 в 13:04
1

Тогда проще английский текст заменить.

Наверное да, хотя все равно придется изменять  код поиска символов шрифта :)

И диаппазон адресов со шрифтами?

Мелкая латинница идет с адреса 121454 (0x0001da6e) - 1 байт на строку, более крупная - с 122598 (0x0001dee6) - тоже 1 байт на строку, еще более крупная - с 124199 (0x0001e527) - 2 байта на строку, но с какой-то особенностью, иероглифы с 149502 (0x000247fe) - 2 байта на строку. Все в ч/б формате, т.е. 1 бит на пиксель :)

Но не смог понять один момент - считывание образов символов происходит не по тем адресам, по которым они расположены в памяти. Надо разбираться.

04.09.2019 в 14:49
0

В прошивке, которая P_V341, по адресу 0x000247FE - первый китайский символ с кодом 0xB0A1 - остальные не смотрел, но где-то должна быть таблица адресов или индексов для диапазона 0xA1 – 0xFE. Хотя, индекс картинки могут по коду символа вычислить.

04.09.2019 в 16:51
1

По коду и вычисляются адреса:

((uint)char_val[1] + ((uint)char_val[0] - 176) * 94 - 161) * 32 - это 16х16 пикс.

Ну, а для латинницы (точнее, по программе - для символов с кодом меньше 175) все проще:

(char_val - 32) * 16  - это 8х16 пикс.



Я пока не сильно ковырял прошивку. Определил и разобрал всего несколько функций:

???strlen

???TFT_SetCoord

???TFT_SetCoord2

???TouchGetPressedCoords

DrawBackImage

DrawBackImageSPI

DrawChar16x24

DrawChar6x12_WithBg

DrawChar8x12

DrawChar8x16

DrawChar8x16_WithBg

DrawCharMB12x12_SPI

DrawCharMB16x16

DrawCharMB16x16_WithBg

DrawFillRect

DrawFillScreen

DrawLine

DrawPixel

DrawPrintScreenPreviewImage

DrawRect

DrawRoundRect

DrawScreenMenuInfo

DrawScreenPausePrinting

DrawScreenPrintInfo

DrawStartEndExposure

DrawText

DrawText_Lat8x16_MB16_x16

ExtMemWrite_to_60000000

ExtMemWrite_to_60020000

GetCharImageBuff

GetCharImgOffsetMB

GetMBCharImage

MessageBox

MessageBoxOkCancel

MessageBoxOkCancel_

Num8ToStr

NumToStr

SPI2_ReadBuff

SPI2_ReadCharImage

SPI2_WriteRead

TFT_SetRegion

TFT_WritePixelColor

TouchPointIsInRegion

TouchPointIsInRegion2

TouchRunCallbackFunc

TouchScreenExposureTestSettings

TouchScreenMsgBoxStopPrinting

TouchScreenPrintingMain

TouchScreenSelectedFile

TouchScreenSystem

TouchSetTouchCallback

04.09.2019 в 18:25
0

По идее, уже достаточно, чтобы сообщения перевести на русский. Ещё найти где переключение языка делается - по этому признаку выбираются сообщения на нужном языке и потом уже отправляются на отрисовку.

Использовать китайский шрифт 16х16 для добавления русского шрифта не подойдёт, т.к. символы будут большими и китайский шрифт, в данном случае, моноширинный.

04.09.2019 в 18:48
1

Ещё найти где переключение языка делается - по этому признаку выбираются сообщения на нужном языке

Давно уже нашел :) И где само переключение и выбор сообщений в зависимости от выбранного языка :)

Вот переключение языка при нажатии на пункт меню на экране:

А вот так незамысловато сделан выбор текстов в зависимости от установленного языка :)


Использовать китайский шрифт 16х16 для добавления русского шрифта не подойдёт, т.к. символы будут большими и китайский шрифт, в данном случае, моноширинный.

Изменить отрисовку на нужную ширину символов - совершенно не проблема :) А шрифты тут все моноширинные, и латинница тоже. Если совсем заморочиться, то можно даже вписать свою процедуру отрисовки пропорционального шрифта, но это уже будет извращение :))

04.09.2019 в 19:14
0

Тогда ждём прошивку с русским языком :)

04.09.2019 в 19:39
1

Надо для начала нарисовать как минимум 2 шрифта - 8х12 и 8х16 :)

04.09.2019 в 21:02
1

Я когда-то делал программку для создания растровых шрифтов. Могу поделиться :)

Там можно из картинок создать, можно из шрифтов, которые в системе установлены. Сохраняет в двоичном виде с таблицей адресов (шрифт с переменной шириной символов), можно сохранить как моноширинный шрифт. Развёртка там делается по вертикали, т.е. не как в Photon S (у них по горизонтали).

04.09.2019 в 22:26
1

Я и сам делал подобную :) Тоже для пропорциональных шрифтов :)

Но тут нужно получить само изображение всех символов подряд. Да я уже по быстрому слабал в фотошопе русские символы 8х12 :) Заменил ими в прошивке латинский шрифт (прямо начиная с пробела, просто посмотреть что на экране появится), залил эту измененную прошивку... и принтер умер :)))

Потом я разобрался, что в процессе замены у меня получился вырезан из середины прошивки приличный кусок, вот все ссылки в программе и пошли насмарку :) Сейчас пытаюсь подключить его по JTAG чтобы залить прошивку через программатор :)

04.09.2019 в 23:09
0

Но тут нужно получить само изображение всех символов подряд

У меня все символы сразу вытаскиваются и потом можно выбрать, какие сохранить в растровый шрифт.

Сейчас пытаюсь подключить его по JTAG чтобы залить прошивку через программатор :)

Хорошо, главное, чтобы прошивка заработала. Попробуйте вернуть прошивку без изменений, а то вдруг, там она без ихнего загрузчика... По идее, там должен быть какой-то механизм защиты от сбоя во время обновления прошивки. Там может у них не всё прошивается программно, а только часть прошивки с какого-то адреса? Не смотрели, как они реализовали процесс обновления?

05.09.2019 в 00:09
1

Прошил, все нормально, заработал. Я боялся, что контроллер заперт от чтения/записи и я не смогу без полного стирания прошить его. А тогда потерялся бы загрузчик и пришел бы полный капец, только покупать новую плату :) Но нет, китайцы не лочат контроллер, так что все ок, прошил через SWD нормальную прошивку по ее адресу (0x08008000) и все заработало :) На всякий пожарный сохранил полный дамп, включая загрузчик.

У меня все символы сразу вытаскиваются и потом можно выбрать, какие сохранить в растровый шрифт.

Тогда давайте, раз можно вытащить все в растр :) Кстати, они должны идти вертикально и их нужно отразить по горизонтали :)

Попробуйте вернуть прошивку без изменений, а то вдруг, там она без ихнего загрузчика...

Да, обновление без загрузчика, загрузчик прошит в начальных адресах контроллера и при обновлении прошивки не затрагивается. Собственно, он и заливает считанную из флэшки прошивку в контроллер :)

По идее, там должен быть какой-то механизм защиты от сбоя во время обновления прошивки.

По-моему, ничего такого там нет. Если файл начинается с символов P_V или P_F, имеет расширение .bin и размер не больше определенного - значит это считается прошивкой. Сейчас взял первый попавшийся файл размером около 300 кб, переименовал его в P_V20x30.bin, подсунул в принтер - сожрал без вопросов :) Разумеется, заводиться после этого отказался.

Там может у них не всё прошивается программно, а только часть прошивки с какого-то адреса? Не смотрели, как они реализовали процесс обновления?

Насколько я понял это происходит так: основная программа читает файл обновления с флэшки куда-то внутрь - во внутреннюю EPROM или в оперативку, потом каким-то образом передает управление загрузчику и тот уже прошивает считанное обновление во флэш самого микроконтроллера. Потом просто перезагружается.

Прошивается с адреса 0x08008000, обновление для этого адреса и слинковано. Сам загрузчик сидит в стартовой области флэша, с адреса 0x08000000.

С шрифтами в принципе получилось, отображает их правильно (залил вместо латинницы просто посмотреть как оно будет рисоваться):


05.09.2019 в 11:23
1

Тогда давайте, раз можно вытащить все в растр :)

Написал в ЛС. Только там нет горизонтальной развертки, если нужно - можете дописать.

По идее, можно скомпилить свой код со своими шрифтами с адреса сразу после прошивки, а в функции вывода текста в самой прошивке, заменить командой перехода на новую функцию. Должно работать. И при выходе новых прошивок, находить функцию вывода текста и заменять там на переход.

Хотя сами тексты надо заменить... Можно упростить так, например, во всех текстах на английском (их проще найти) заменить первые два символа на цифры - это будет номер сообщения. В своей функции вывода текста читаем первые два символа и по коду выбираем свой новый текст. Так не нужно будет пытаться вписать русский текст в английский.

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

05.09.2019 в 12:10
1

По идее, можно скомпилить свой код со своими шрифтами с адреса сразу после прошивки, а в функции вывода текста в самой прошивке, заменить командой перехода на новую функцию. Должно работать. И при выходе новых прошивок, находить функцию вывода текста и заменять там на переход. 

Так просто не получится. Там же процедура вывода текста использует еще несколько других процедур (та же работа с дисплеем, например). Но в принципе такое возможно. С другой стороны, в прошивке 216 килобайт(!) занимают только ненужные иероглифы. На их место влезет еще одна целая рабочая прошивка принтера, не то что работа я языками и шрифтами :)

Хотя сами тексты надо заменить... Можно упростить так, например, во всех текстах на английском (их проще найти) заменить первые два символа на цифры - это будет номер сообщения. В своей функции вывода текста читаем первые два символа и по коду выбираем свой новый текст. Так не нужно будет пытаться вписать русский текст в английский.

Да, как вариант. Или просто сделать отдельные функции вывода текста для каждого случая, их там не так уж много. А уже в этих функциях будет и нужный текст, ничего не придется заменять :)

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

Да, и так тоже можно.

А еще хотелось бы объединить все проверки области нажатия тача в одну таблицу, чтобы можно было легко в одной кучке менять координаты кнопок на дисплее. Сейчас это если делать, то придется по всей прошивке прыгать, т.к. в каждой процедуре координаты прописаны константами в вызове функции проверки :)

Главное - я смог реализовать написание и компиляцию нужных процедур на Си в нормальной IDE, так что полученный оттуда код работает после вставки в бинарник прошивки :)

Вот, например, исходник, который я откомпилировал в IAR (среда программирования для микроконтроллеров) и потом вставил полученный бинарный код внутрь прошивки:

И вот что дизассемблер показывает в прошивке на этом вставленном куске:

То есть почти дословное совпадение :) И это работает, я уже проверил. Так что теперь можно писать свои функции на нормальном языке, только не забывать вставлять прототипы используемых из прошивки функций и переменных :)

05.09.2019 в 13:07
1

Супер! Осталось совсем чуть-чуть :)

Если знать, какой компилятор используют разработчики прошивки, и настройки оптимизации, то вообще совпадёт всё... Для STM32 есть теперь их "родная" среда разработки - ST купили Atollic и теперь есть TrueStudio без ограничений для STM32. Может они её используют...

А что за два последних параметра у MessageBox?

Там то "..., 0, 0xd6f8)", то наоборот "..., 0xd638, 0)"

05.09.2019 в 13:13
1

По идее, среда и компилятор не должны сильно отразиться на коде. Ну будут какие-то мелкие особенности, но соглашение о вызове функций - оно ведь одно для всех :) А дизассемблер (это, кстати, Ghidra, созданная в штатовском АНБ :))) вообще не привязан ни к кому. Хотя, может быть он и работает с учетом особенностей GCC.

Родную среду STM не хочу, я привык к IAR-у :)))

05.09.2019 в 13:19
0

Да, работать будет не зависимо от используемого компилятора. Тут мысль возникла - а не спросить ли разработчиков прошивки исходники или предложить им кусок кода со шрифтами и локализацией по наш язык? Да и там любой язык можно добавить.

05.09.2019 в 13:41
1

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

Исходники они вряд ли дадут. Насколько я слышал, читу (а это их плата в принтере) никому не дает исходники, они сами меняют по требованиям. Не бесплатно, конечно :)

Да и там любой язык можно добавить.

Ага, можно :) Вот, например, добавлен третий язык в переключение языков :))))


05.09.2019 в 14:01
0

Только картинка для русского варианта не переведена :)

05.09.2019 в 14:12
1

Ну, за картинки и шрифты я пока не брался, пока еще экспериментирую с возможностью изменения кода и логики работы прошивки :)

Вот с тремя языками есть одна засада - картинки фонов со всеми их надписями в ресурсах только по два экземпляра для двух языков. И даже не знаю можно ли даже в теории добавить еще один набор :) По идее, эти ресурсы из файла P_UI_2_6.bin при прошивке просто переписываются во внутреннюю флэшку, распаянную на плате. Но какая у нее емкость - не смотрел.

05.09.2019 в 14:37
0

переписываются во внутреннюю флэшку, распаянную на плате. Но какая у нее емкость - не смотрел

Похоже, их там две - одна для конфигурации FPGA на 16 Мбит, а вторая, у края платы - для ресурсов. На фото не видно какая, но не меньше 64 Мбит, т.к. файл чуть меньше 8 МБайт. Есть примерно 500 кБайт свободного места. Можно картинкам групповое кодирование добавить или как оно называется, точно не помню, и тогда много ещё можно туда положить.

Фото платы смотрел в вашей статье про разборку Photon S

03.09.2019 в 17:21
0

Если Вы картинку вставляете какая Вам разница какой язык.

Рисуйте хоть эльфийский.

03.09.2019 в 17:36
1

Картинки там идут только фоном, но еще довольно много надписей выводится текстом.

04.09.2019 в 11:36
1

В общем, придётся писать ещё проги для конвертации шрифтов и русификации? :)

04.09.2019 в 13:11
1

Судя по всему - да, для русификации нужно будет попотеть :)

03.09.2019 в 16:46
0

Вот бы подробней узнать.

Что за файл открываешь.

Так то тема интересная.

03.09.2019 в 16:54
1

Файл - P_UI_2_4.bin для старой версии прошивки или P_UI_2_6.bin для новой. По структуре они совершенно одинаковые :)

04.09.2019 в 12:01
1

По шрифтам. Нашёл кодировку с картинками для GB2312

Китайские символы кодируются двумя байтами в диапазоне 0xA1 – 0xFE.

Первый символ с кодом 0xB3 0xF5 вроде совпадает:

В тексте был такой:

В прошивке посмотрел - шрифты там видно. Есть крупный 32х24 точки - для латинских букв используется часть 16х24 пикселя. Например, по адресу 0x73F060 буква "Q" (в прошивке 2_6.bin)

Есть там ещё шрифты 8х16 точек и 8х12, но с таблицей перекодировки ещё не разбирался. Тут уже утилиту надо делать.

Зная, что китайский текст содержит коды в узком диапазоне по два байта, можно автоматически найти все места, подходящие под текст.

P.S. Почему-то не приходят уведомления об ответах в комментариях, очень не удобно...

04.09.2019 в 13:10
1

В прошивке посмотрел - шрифты там видно.

Файл P_UI_2_6.bin - это не прошивка, это файл ресурсов с изображениями, шрифтами и еще немного чего-то непонятного. Да, там есть таблица символов GB2312, насколько я успел просмотреть - полная. И латинница, и греческие, и кириллица и еще куча всего, в том числе и иероглифы :) Там есть и еще один огромный набор иероглифов. Но проблема в том, что программа считывает изображения не из этих ресурсов, а из прошивки самого контроллера - P_V341.bin :) Я в ответе выше давал Вам адреса внутри именно этого файла. Это исполняемая прошивка контроллера и в ней же сидят и шрифты - иероглифы одного размера и латинница трех размеров :)

04.09.2019 в 13:23
1

По уведомлениям - у меня так же было, оказалось, что в профиле отключена галочка уведомлений об ответах. Видимо, после обновления сайта :)

05.09.2019 в 14:30
1

Посмотрел флэшку на плате - W25Q64, 8-мегабайтная. Файл ресурсов весит почти 8 мегабайт, так что третий набор фоновых экранов не вставить никак. Но в принципе, если заморочиться как следует, то можно оставить только один набор фоновых экранов, но чистых, без надписей. А надписи (или кнопки с надписями) сделать отдельными картинками, которые потом выводить сверху фонового экрана в зависимости от выбранного языка. Тогда и десять языков влезут :)

05.09.2019 в 14:41
1

А я в верхнюю ветку написал. Упаковку картинок сделать типа RLE. Делается не сложно, а картинки с равномерными цветами (без градиентов) упаковываются хорошо.

05.09.2019 в 15:27
1

Похоже, их там две - одна для конфигурации FPGA на 16 Мбит, а вторая, у края платы - для ресурсов.

Да, скорее всего так и есть.

На фото не видно какая, но не меньше 64 Мбит

Да, такая и есть - W25Q64 на 8 мегабайт :)

Можно картинкам групповое кодирование добавить или как оно называется, точно не помню, и тогда много ещё можно туда положить.

Нет, этого я бы не хотел. Хочется, чтобы картинки имели ровно определенный размер, чтобы быть уверенным, что какую картинку ни нарисуешь - она влезет на свое место :) Сейчас там есть два набора фоновых картинок - для английского и для китайского. Выкидываем все, оставляя только 5 мегабайт. Во второй затираем все кнопки с надписями и рисуем их отдельными картинками для каждого языка. Примерно по 15 кб для каждой большой (около 10 штук) и по 5-6 кб для каждой маленькой (около 30 штук) кнопки/надписи. Хватит на 14 языков :)

05.09.2019 в 15:59
0

Сейчас там есть два набора фоновых картинок - для английского и для китайского. Выкидываем все, оставляя только 5 мегабайт. Во второй затираем все кнопки с надписями и рисуем их отдельными картинками для каждого языка

Для экономии места это хорошо. Как там сделана отрисовка на экран? Если есть буферизация, т.е. рисуем в буфере, а потом на экран отправляем или сразу рисуется в области памяти, которая на экран отображается. В последнем случае, может быть заметно мерцание - отрисовка фона, а потом дорисовываются кнопки... но это не так критично для пользователя.

05.09.2019 в 17:11
1

Как там сделана отрисовка на экран?

Считывается из флэшки и выводится на экран по целым строкам. Считали строку - отправили на экран :)

void DrawBackImageSPI(byte *address)

  uint height;

  uint width;

  ushort buffer [320];

  TFT_SetRegion(0,0,319,239);

  height = 0;

  while (height < 240) {

    SPI2_ReadBuff((byte *)buffer,(uint)(address + height * 0x280),640);

    width = 0;

    while (width < 320) {

      TFT_WritePixelColor((uint)buffer[width]);

      width = width + 1;

    }

    height = height + 1;

  }

  return;

}


Некоторое мерцание, скорее всего, будет, но не критичное.

05.09.2019 в 17:16
1

Я там написал :

Выкидываем все, оставляя только 5 мегабайт.

Это я хотел написать "Выкидываем один из двух комплектов, освобождается больше 2.5 мегабайт" :)

05.09.2019 в 18:22
0

Там можно картинки положить вместо китайских, и не только, шрифтов - они же не используются там (в ресурсах).

05.09.2019 в 20:16
1

Да, можно и их тоже забить картинками. Но их там не так много по объему сравнительно с фоновыми картинками :)

06.09.2019 в 01:18
1

Ну вот...


Это уже работают мои функции смены языка в настройках, вывод уведомления, обработка выводимого текста, отрисовка каждого символа из шрифта (кроме иероглифов, их пока рисует родная функция) - полностью мои функции, скомпилированные отдельно и вставленные в прошивку в область иероглифов :) То есть сейчас реально выбирается один из трех языков и для каждого - своя строка текста. Правда, я пока подготовил только самый мелкий шрифт 6х12, поэтому такое мелкое все, но главное, что самая сложная база уже заложена :) Хотя у меня появилась мысль как легко добавлять несколько языков и не путаться в строках.

06.09.2019 в 09:16
0

Здорово! Даже не знаю, что сказать...

А тексты уже перевели?

Ещё влпрос, если на флешку записать файл с русским названием, он будет правильно отображаться?

06.09.2019 в 10:39
1

Нет, русские названия не будут отображаться, там идет кодировка UTF16. Если прошивка и умеет раскодировать эту кодировку, то нужно рыть где именно она это делает :)

06.09.2019 в 11:06
0

то нужно рыть где именно она это делает :)

Так текст она через те же функции выводит. Вы пример показывали, когда заменили буквы в шрифте - там файл был какой-то .bin (этот комментарий)

Там и посмотреть, что приходит и откуда.

06.09.2019 в 12:00
1

Считал содержимое оперативки, посмотрел что лежит в области с именами файлов. Там совсем какая-то непонятная кодировка, уже не UTF16, а что-то другое. На латиннице корректно читает, а кириллицу преобразует во что-то непонятное:

Если что, то тут два файла: Prostotak1.pws и Простотак2.pws :)

06.09.2019 в 13:25
0

Думал тоже на UTF-16, но латиница идёт по одному байту на символ... Да и диапазон двухбайтных символов знаком уже - это GB2312.

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

06.09.2019 в 14:13
1

В UTF16 кодируются все длинные имена в самой таблице FAT. Короткие имена латинницей идут как есть, а кириллица как-то перекодируется (это в FAT).

Да, а принтер, получается, перекодирует в этот GB2312 при копировании имени файла из FAT :) Надо найти где он это делает.

Добавил еще шрифт 8х16, теперь надписи выглядят получше :)

(Увидел, что видео перевернуто только когда уже загрузил его :()


06.09.2019 в 14:34
0

а принтер, получается, перекодирует в этот GB2312 при копировании имени файла из FAT :) Надо найти где он это делает.

По идее, нет смысла искать, где он это делает. Просто добавить поддержку кириллицы в кодировке GB2312 и всё будет как надо.

06.09.2019 в 15:02
1

Да просто хотелось бы универсальный вариант - перекодировать в кириллицу только если имя файла действительно на кириллице, а не, например, на китайском :)

06.09.2019 в 15:28
1

Так тут также - если байт 0xA7 - то это кириллица и второй байт - код символа. Его и перевести в Win1251 и на стандартный вывод. А остальные символы (первый байт больше 0xA0 и не равен 0xA7) заменять квадратиками, типа не поддерживаются...

06.09.2019 в 16:54
1

Я сейчас перевожу все на UTF-8 и делаю табличный способ многоязычности - то есть таблица текстовок для каждого языка, а в функцию отрисовки текста передается идентификатор строки и идентификатор шрифта, которым ее рисовать :) Сначала разберусь с текстами, сделаю базу для перевода, а потом уже буду разбираться с файлами :)

Вообще я бы еще добавил поддержку пропорциональных шрифтов. И даже шрифтов с прозрачностью, для большей гладкости - они вообще отлично выглядят, у меня уже написана такая библиотека для другого проекта :)

06.09.2019 в 17:10
1

Ещё чуть-чуть и можно вообще всю прошивку переписать, точнее, написать. :)

Добавить чтение файла, управление мотором и готова новая альтернативная прошивка.

06.09.2019 в 17:31
1

Не поверите - я уже думал о том, чтобы из старой прошивки вытащить работу с файлами .photons и добавить ее в новую прошивку :))))

Пока воюю с линкером, чтобы он не менял сильно адреса функций после изменений. По абсолютным адресам отказывается линковать, сволочь :)

06.09.2019 в 17:55
0

Не поверите

Верю :)

Можно и другие форматы файлов поддержать.

07.09.2019 в 03:11
1

Подзастрял с выводом строк, пытаясь сохранить и возможность вывода китайской кодировки GP2312 :) Все у них там не как у людей с их иероглифами - и кодировка отдельная, и отрисовывается в обратную сторону, и возможное смешение в тексте иероглифов и обычных символов заставляет скакать от шрифта к шрифту... :)

Вот только этот момент порешать осталось :) А так я уже организовал все для перевода. Ну, кроме картинок :)

07.09.2019 в 14:47
0

Но это сделать только один раз... Потом уже проще будет. А там глядишь, и альтернативная прошивка появится...

07.09.2019 в 15:43
1

Ну да, это сделать нужно только единожды :)

Причем, по замыслу даже в прошивке не придется менять много. Только в нескольких местах сделать перенаправление на мои функции - в родных функциях MessageBox и DrawText (их там по 3-4 экземпляра каждой). А все десятки и сотни вызовов этих функций остаются родными, нетронутыми :)

Ну и начало всех строк заменить на числовые идентификаторы. А уже по этим идентификаторам мои функции будут выбирать соответствующие тексты для вывода, в зависимости от установленного языка.

Но вот для китайского языка, чувствую, придется делать все отдельно, не получается сделать универсальным. Слишком уж много разных нюансов в нем :)

07.09.2019 в 21:57
0

Китайский вроде как и не нужен. Новый код теперь вместо китайского шрифти или в конце прошивки его разместили?

07.09.2019 в 23:07
1

Новый код вместо китайских иероглифов, и это уже иногда видно - вместо какого-нибудь иероглифа рисуется мусор :) Я вот подумал - во флэшке ведь тоже лежат иероглифы, для китайского языка можно брать их оттуда. В прошивке даже есть функция для этого.

Ну и хорошая новость - я закончил все телодвижения с MessagrBox-ом, теперь все полностью переведено на мой код с поддержкой многих языков :) Сейчас сижу добавляю в таблицы тексты и нумерую их в прошивке :)


08.09.2019 в 00:51
0

Перевод "Press enter" - Там про клавишу "enter"? Если да, то названия клавиш лучше оставить как есть: "Нажмите <Enter>" или ещё видел где-то переводят как "Ввод".

Огромную работу Вы сделали!

08.09.2019 в 03:14
1

Не, Press enter - это не перевод реальной строчки, а просто тестовая фраза :) В принтере ее нет.

Помучился с окном подтверждения, но и его добил таки :)

Осталось несколько функций перекинуть на свои, сделав им аналоги, и все :) Ну и картинки...

Текстов пока мало перевел. Но сделал так, что непереведенные в прошивке тексты показываются как есть, то есть моя функция сама определяет - есть ли для этой строки перевод. Если есть - берет текст из переводов в соответствии с текущим языком, если нет, то выводит строку из оригинальной прошивки :)

Уже что-то вырисовывается :))

08.09.2019 в 10:05
0

Уже не что-то, а конкретная локализованная прошивка для Anycubic Photon S.

Вот к чему приводит нежелание работать - работать чуть ли не круглосуточно и без выходных :)

Надеюсь, владельцы ФотоновС оценят ваши труды...

08.09.2019 в 10:11
1

Может быть, я придираюсь, но на первом кадре, где файл удаляете, Надпись "Файл:" на один пиксель сдвинута вверх.

Шрифты одинакового размера? Если да, то, если это возможно, лучше выравнять буквы на одну линю в разных шрифтах.

08.09.2019 в 12:19
1

Да, действительно на пиксель ниже. Нужно просто добраться до функции, выводящей имя файла, и ее тоже перевести на свою, задействовав свой шрифт :)

Вот к чему приводит нежелание работать - работать чуть ли не круглосуточно и без выходных :)

Вот это уже точно, не высыпаюсь страшно в последние дни :)

09.09.2019 в 08:09
0

Как в выходные поработали? :)

09.09.2019 в 11:03
1

Пришлось отвлекаться на работу, так что почти не продвинулся с переводом :)

Только немного поизучал код начальной загрузки и инициализации микроконтроллера. И обнаружил забавную штуку - данные, которыми изначально инициализируется оперативка, хранятся в микроконтроллере в сжатом виде. Впервые с таким сталкиваюсь :) С другой стороны, это вполне логично, учитывая, что оперативки в нем 200 кб.

09.09.2019 в 09:39
-1

Автор не пробовал включить мозг и использовать программу для редактирования тех же Nextion?

09.09.2019 в 10:22
1

использовать программу для редактирования тех же Nextion?

Для редактирования чего?

09.09.2019 в 11:04
1

Скачал, установил, посмотрел. Не нашел как в ней можно редактировать что-то, кроме родных проектов для их модулей.

09.09.2019 в 11:38
0

Возможно, человек имел в виду "Font Generator" в меню Tools.

09.09.2019 в 11:23
1

Разве в Фотоне-S стоит Некситон? Мне казалось, что там экранчик попроще...

09.09.2019 в 11:41
0

В Photon S, вероятно, использовали библиотеку от ST, но могли и сами написать свою библиотеку.

09.09.2019 в 20:40
1

Возможно, человек имел в виду "Font Generator" в меню Tools.

Так там тоже какой-то свой формат, толку от него?... :)

Разве в Фотоне-S стоит Некситон?

Обычный дисплей на параллельной 16-битной шине. С каким контроллером - не в курсе, но можно выяснить, т.к. функция его инициализации со всеми командами у меня есть :)

В Photon S, вероятно, использовали библиотеку от ST,

Нет, тут что-то гораздо более простое :)

09.09.2019 в 21:09
1

Нет, тут что-то гораздо более простое :)

Это точно, т.к. посмотрел что там генерится на выходе - кодировка UTF16 и по умолчанию, шрифты генерятся не со всеми символами, а только те, которые используются. Но в настройках можно включить генерацию шрифтов для всех символов - можно указать диапазон.

09.09.2019 в 23:14
1

Да еще и в сжатом виде, как я понял.

А я тут разную отладочную информацию вывожу в разных экранах :)


10.09.2019 в 08:13
1

Интересно, а как теперь версию называть?

2.6ru?

10.09.2019 в 10:23
1

Как-нибудь связанно с мультиязычностью, наверное :)

10.09.2019 в 10:24
1

Я думаю, что проделанная работа достойна отдельной подробной статьи.

Уверен - этот опыт может пригодится многим.

10.09.2019 в 10:47
1

Я, конечно, напишу статью, но не знаю, насколько подробной ее нужно делать. Не думаю, что возня в дизассемблере будет тут многим интересна :)

10.09.2019 в 13:27
1

Можно предложить прошивку официальным представителям Anycubic в РФ, а то у них на сайте старая версия выложена (UI_2.4).

10.09.2019 в 16:06
1

Сначала ее нужно будет проверить как следует :)

10.09.2019 в 20:10
0

Тут народу будет достаточно для тестирования прошивки.

10.09.2019 в 22:59
1

Ну да, я тоже надеюсь на это :)

К версии решил добавлять "M_xx", где xx - версия изменений :)

10.09.2019 в 23:09
0

Когда релиз ожидать? :)

11.09.2019 в 07:26
1

Может быть уже на этой неделе :) Вчера перевел на русский все фоновые картинки и повозился с программой извлечения этих картинок из файла ресурсов. Доделал экспорт и импорт сразу всех картинок. Осталось сделать сохранение обратно в файл ресурсов и можно пробовать обновиться новыми фоновыми картинками :) Думаю, что сделаю это уже сегодня.

12.09.2019 в 03:52
1

Ну в принципе, это уже можно считать релизом :) Завтра или послезавтра оформлю отдельным постом в дневнике :)


12.09.2019 в 10:48
1

Поздравляю! Вы проделали огромную работу.

Пост можно и не в дневнике, а в разделе Техничка или аналогичном.

12.09.2019 в 14:21
1

Спасибо :) Да, можно и в техничку попробовать, думаю вполне подходит под этот раздел.

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Мажор ли Нормальный мужик? Интервью с владелецем IMPRINTA Артёмом Соломниковым

Урок Солидворкс для начинающих или как начать моделировать в SolidWorks

Печать пластины из ABS пластика

КОМПАС-3D v18 Home. Основы 3D-проектирования. Часть 16.2 Создание игрушечного паровоза. Отбойник паровоза

Не все китайцы одинаково китайцы

Обзор настольного 3D-принтера 3DGence Double P255