Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

*.LPD - работа с файлами языковых ресурсов


Рекомендуемые сообщения

В Swift дешёвой E-серии (E1200, E1202, E1080, и т.п.) языковые ресурсы лежат в памяти сразу в готовом виде. Примерно как было у старых в CLA, и тоже два блока - text и sofk. Но тут их зачем-то вынесли в отдельный файл с расширением LPD (LPC - это MD5 к нему, при редактировании LPD - надо пересчитать MD5). Так же в LPD файлах лежат ресурсы T9, которые в более продвинутых прошивках лежат в отдельных файлах LDB

Итак, благодаря подсказкам vvyura файлы были изучены...

 

Первые 8 байт в мобилу не прошиваются, их значение такое:

 +0 - адрес куда он грузится в памяти (флешер это показывает как start addr);

 +4 - размер всех данных (которые лежат с +8 ) после этого числа. Т.е. физический размер файла на 8 байт больше чем указанное тут значение;

В отличии от QTC - тут никакой компрессии нет, LPD-файлы это фактически дампы которые прошиваются в NOR (и в частности можно затереть ненужные языки и прямо на них размещать патчи).

 

Теперь отбросив первые 8 байт, уже данные которые прошиваются. Далее все адреса - оффсеты относительно этого +0x00.

  +0x00 - тут лежит текстовая строка с именем прошивки/локализации. Например E1202OXELI5 или E1200MOXELC8;

  +0x20 - по всех прошивках что я видел тут лежит абсолютно тоже самое что и в +0x00;

  +0x40 - оффсет указывающий на таблицу языков ввода (в ней лежит кол-во языков ввода, и потом перечислены коды языков);

  +0x44 - количество языков интерфейса;

  +0x48 - таблица языков интерфейса, блоки по 0x14 байт:

     +0x00 - код языка;

     +0x04 - оффсет индекса text

     +0x08 - оффсет массива text

     +0x0C - оффсет индекса sofk

     +0x10 - оффсет массива sofk

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

Сначала все индексы и тексты для text и soft, потом таблица языков ввода (оффсет на неё был в +0x40).

Потом сразу тела уже давно знакомых LDB-файлов (базы T9). Вот только не понятно как их адреса находить (но это пока и не нужно) - каких-либо оффсетов я не нашёл, разве что они последовательно вычисляются по каким-то своим внутренним размерам или их размеры и адреса вшиты в прошивку (причём замечу что LDB-файлы из других прошивок с TFS побайтно совпадают с теми что интегрированы в LPD - их как в 2007 скомпилировали так и не меняют до сих пор).

 

Кстати размер индексных блоков (кол-во элементов текста) не указан в LPD (он жёстко вшит в CLA - непосредственно в функциях lk_get_text/lk_get_sofk), поэтому тут приходится его вычислять по расстоянию до блока текста, в официальных LPD эта идея работает, но вот в самодельных LPD может и не работать т.к. ничто не мешает компилировать LPD без чередования блоков (а например сразу все индексы и потом все тексты).

 

Теперь о кодах языков. Коды кстати разные для интерфейса и для ввода.

Для ввода - это видимо составные коды и в основном совпадающие с виндовыми LANG (Primary language IDs).

Однако есть некоторые исключения. Вот коды у мобилы:

0x0101 ARABIC

0x0109 ENGLISH

0x0107 GERMAN

0x010C FRENCH

0x0119 RUSSIAN

0x0120 URDU

0x0122 UKRAINIAN

0x0129 FARSI

0x014B BENGALI

0x0161 KAZAK

0x0163 KANNADA

 

А вот коды у винды:

LANG_ARABIC 0x01

LANG_ENGLISH 0x09

LANG_GERMAN 0x07

LANG_FRENCH 0x0C

LANG_RUSSIAN 0x19

LANG_URDU 0x20

LANG_UKRAINIAN 0x22

LANG_FARSI 0x29

LANG_KAZAK 0x3F

LANG_BENGALI 0x45

LANG_KANNADA 0x4B

LANG_NEPALI 0x61

LANG_PASHTO 0x63

 

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

 

А с кодами языков интерфейса всё ещё сложнее. Они совсем не стандартизированы, и заложены в CLA. И например у одного и того же E1202 код например 6 - для XX прошивок шведский, а для JP прошивок персидский. Поэтому, для выяснения какой код какому языку соответствует надо подгружать CLA файл (соответствующий по дистрибутиву LPD), находить в нём ga_Lkres_LangTbl и смотреть имена там (коды соответствуют строкам таблицы ga_Lkres_LangTbl).

 

Для удобного чтения MCC (точнее поиска ID в командах типа MCC_REPORT) написал вот программу для наглядного просмотра LPD-файлов:

LPD_Util.png

LPD_Util_v20130316.rar

Напомню про некоторые особенности ListView - он не выводит перевод строк, так что тексты которые многострочные тут в одну строку. И в длину обрезаются на 260 букв. Так что для полноценного анализа - есть кнопка Export TXT. Ещё надо учитывать что местами одинаковые русские буквы заменены на английские (таких мест мало, но встречаются)… LPD_Util может быть назначена в винде как средство открытия файлов *.lpd. Drag'n'drop тоже реализован, .CLA можно перетаскивать в окно (это позволит показать имена языков, без CLA будут показаны только внутренние коды языков).

  • Like 8

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

  • 7 месяцев спустя...

Возник вопрос ! При замене или редактировании языка не удаётся подменить его код. Как заменить ID чтобы в меню отображалось нужное название языка ?

Ссылка на комментарий
Поделиться на другие сайты

Значит надо просто посмотреть как строится меню выбора языка, откуда оно читает тексты для lk_AddMenu

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

Значит надо просто посмотреть как строится меню выбора языка, откуда оно читает тексты для lk_AddMenu

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


×
×
  • Создать...