Структура базы T9 в мобильных телефонах Siemens 55-й серии

Посмотрим на A55T9Lg01 - он более полный, т.к. в A55 есть все 22 языка,а в остальных мобилах - лишь обрезок базы от A55. Также, для примера, я выложил заголовки от S55T9Lg01 и S55T9Lg11
Заголовок базы T9 состоит из 12 байт.
Посмотрим на заголовок в A55
54 39 00 00 | 60 41 18 00 | 01 02 53 39 |
Из этих 12-ти информацию несут - 5

Вторая четверка байтов - точный размер базы T9, но все байты задом наперед, т.е. у нас 60 41 18 00, значит размер базы - 0x00184160 = 1589600 байт! Вот так! У А55 размер базы ~1.5 Мб, в то время как у всех остальных - 256 Кб. Причем у "всех" выделяется ровно 4 блока по 64 Кб. У А55 веделяется нецелое число блоков! (Smelter при определении округляет до целого числа блоков). Кстати, если указать неверный точный размер T9, то это ни на что не влияет, по крайней мере, я не этого влияния не заметил.

9-й байт показывает версию - T9Lg.

Я никак не могу понять, что значит 10-й байт. Там во всех имеющихся у меня базах T9 - стоит 02. Я пробовал менять на 00 и 01 - все языки из T9 пропадают.

Далее идет таблица описания языков. Для каждого языка выделяется 8 байт. Итак, смотрим.
01 01 00 00 | BC 00 00 00
Первый байт - 01 - Идентификатор языка. Далее идут одинаковые для всех языков следующие три байта - 01 00 00. Что они значат, я не знаю, менять 01 пробовал, только не помню на что - язык пропадает из меню выбора.

Вторая четверка - адрес языка в базе T9. Байты, опять же, идут задом наперед, т.е. мы получаем смещение 0x000000BC от начала базы T9. Далее, подобным образом, идет описание всех 22-х языков. Для языков, отсутствующих в базе T9, ставится нулевое смещение. Зачем это надо - я не понял, наверное программистам из Siemens было лень создавать каждый раз новую таблицу языков и поэтому они включали полную, зануляя лишь смещение отсутствующих языков. Если смещение указано неверно, то язык все равно будет отображаться в телефоне при выборе языка T9 и даже будет значок T9, но, понятное дело, воспользоваться этим T9 не получится. В своей программе T9BaseCreator я оставляю в таблице лишь описание тех языков, которые физически есть в базе T9. На S55 прокатывает без вопросов, других Siemens'ов для проверки у меня дома пока нет. Я это сделал для того, чтобы в будующем можно было добавлять еще языки, если они появятся (неужели для мобильников Siemens нет T9 с Украинским/Беларусским или еще каким-нибудь языком? Ведь номера в таблице идут не подряд! Там нет языков 2,3,4, а сразу за 1-м идет 5-й)

Ниже приведены идентификаторы языков (цифры десятичные)
1=01 - Иероглифы
5=Cestina
6=Dansk
7=Deutsch
8=08 - Греческий?
9=English
10=Espanol
11=Suomi
12=Francais
13=13 - Иероглифы
14=Hungarian
16=Italiano
19=Nederlands
20=Norsk
21=Polski
22=Portugues
25=Русский
27=Slovencina
29=Svenska
30=30 - Иероглифы
31=Turkce
42=Vietnamese

Таблица описания языков идет до начала первого в базе T9-языка. T9-языки идут один за одним без спец. разделителей. Любой T9-язык начинается с "Copyright © 2002 AOL Mobile." В фулфлешах, которые у меня есть во всех таблицах описано изначально 22 языка, т.е. смещение 1-го языка 0x000000BC. Но, по-моему, правильнее искать окончание таблицы не по 0x000000BC, а там где начинается строка "Copyright © 2002 AOL Mobile." Искать надо минимум по 3-м символам, т.к. "Co" может встретиться раньше окончания таблицы.

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

Если я что-то пропустил - пишите, дополню.

Взять T9BaseCreator и отделенные друг от друга T9-языки можно на http://fuh.front.ru или http://fuh.narod.ru

Copyright © F.U.H., fuh@front.ru, ICQ 327666023

Hosted by uCoz