Внимание, пост будет довольно большим, с кучей картинок и текста!
Приветствую всех форумчан, как известно в ГУ RT6 есть поддержка т.н. точек POI, так же она присутствует и в SMEG системах, оборудованных навигационными блоками, на сайте citroen.navigation.com за относительно небольшие деньги , можно скачать эти самые POI, но там нет России, РБ, Украины. Однако сам факт того, что POI есть и могут работать и оповещать нас о камерах, опасных перекрёстках и т.п. уже довольно давно не даёт мне покоя, после RT6, очень уж не хватает данного функционала.
Теперь собственно я поделюсь теми мыслями и наработками, которые собирал на просторах сети, начиная с рунета и заканчивая бразильскими форумами.
Раздел 1: Структура каталогов и файлов с описанием
В данном разделе я опишу как устроено дерево файлов и папок для обновления, на примере кастомных точек POI от французских энтузиастов, ссылка на данное обновление будет чуть ниже, но от него толку нет, ибо там обновления только для европейских стран, куда не входит Россия, Беларусь и Украина.
Итак структура каталогов корень флешки
Если зайти в папку SMEG_IV2_UPG
Содержимое файла UpgPlugin.out.inf
- 02bb7b1c
VER:SMEG_IV2_6_1_C_R05_karly
TYPE:RELOCABLE
ID:0
COMPRESSED:NO
SIZE:150103
ENTRY:NO
SUBVER:ZAR_UMZ_6.1.2
UpgPlugin.out и самого файла UpgPlugin.out.inf
Тут хочу сделать важное отступление: практически во всех файлах *.inf в первой строчке идёт crc сумма основного файла и самого ini, высчитывается и заполняется данная сумма в 2 этапа, ниже я опишу процесс
Выходим из папки SMEG_IV2_UPG и переходим к самому интересному, папка DATA, внутри ещё 2 папки DATA1 и DATA2, в каждой лежат одинаковые именами файлы, и почему они раскиданы по папкам я ещё не узнал.
Хоть файл ZAR_POI.BIN и имеет расширение BIN, он прекрасно распаковывается архиваторами WinRar, 7zip и т.п.
Распаковываем и видим:
TMP_POI.TAR - это тоже архив, распаковываем его и тут самое интересное
Заходим в любую папку (содержание этих папок везде одинаковое, независимо от кода страны)
Вот и добрались до самого интересного
Файл POI_VER_RADAR.TXT
Разберём детально:
POI_PROVIDER:PSA - Имя изготовителя файла обновлений, можно написать любой текст
POI_MACRO_CAT:SAU - Регион для обновлений
POI_CAT:41 - Категория POI, 41 - радары, 42 - опасные объёкты
DATE:20181203 - Дата сборки обновления
DATA_POI:03/12/2018 - Дата актуальности объектов POI
NAME_ICON:BMP - Тип оповещения на экране (иконка BMP соответствующая категории 41)
NAME_SOUND:SOUND - Тип оповещения звуком (соответствующий категории 41)
DESCRIPTION:RADAR CONTROL - Текст в окне оповещения
PREFIX:RADAR
NAME_COUNTRY:ITALY -Страна для которой предназначены данные объекты
CID:001 - CID - это и есть код страны, он же название папки
NUMBER_POI:9423 -Количество точек POI находящихся в файле обновления RADAR.LZW
POI_SIZE_32:622592 - Размер занимаемый всеми файлами внутри папки на носителе с размером кластера 32Кб
POI_SIZE_16:557056 - Размер занимаемый всеми файлами внутри папки на носителе с размером кластера 16Кб
POI_SIZE_8:516096 - Размер занимаемый всеми файлами внутри папки на носителе с размером кластера 8Кб
POI_SIZE_4:499712 - Размер занимаемый всеми файлами внутри папки на носителе с размером кластера 4Кб
POI_SIZE:488208 - Размер занимаемый всеми файлами внутри папки (СМ. Следующее фото) имейте ввиду, все размеры в байтах!
Собственно теперь о самом файле обновления, он упакован в контейнер *.LZW, открыть его можно программой RadarViewer
Открыв файл, мы видим следующее
Тут я выделил квадратом кол-во объектов POI, к этому количеству добавляем +1, т.к. RadarViewer начинает отсчёт не с единицы, а с нуля, это значение отображено выше в файле POI_VER_RADAR.TXT в строке NUMBER_POI:9423
Теперь расскажу, о самой интересной и мучительной детали, а именно о размерах файлов для каждого кластера, а вторая часть о CRC контрольной сумме, которая указывается для файла обновления
Часть 1 Размеры файлов обновления на разных кластерах, промучавшись пару ночей с высчитыванием этих цифр, при помощи php скрипта
Код: Выделить всё
<?php
echo ceil(61596/32768);
?>
Запрос:
Цифра 61596 -размер файла делилась на 32768 - это 32КБ, потом округлялась до ближайшего целого числа вверх,вывод был как целое число в данном примере 2 - это значит что файл занимает 2 кластера при размере кластера 32Кб, после эти 2 кластера нужно было умножить на 32768, и тогда мы получим точное число байт, который займёт файл, но подсчёт 5 файлов в первый раз я потратил почти 5 часов, с учётом того, что я уже знал что означают данные цифры, но не знал, как их получить Вот скрин для примера, что бы понять одно Размер файла не всегда равно месту, которое он занимает.
Всё это хорошо, но как узнать, сколько этот же файл займёт места, при другом размере кластера? Вот тут и помог этот скрипт, после знака / вбиваем 4096 для 4Кб, 8192 для 8Кб, 16384 соответственно для 16Кб кластеров. Как видно, это муторная и долгая работа, ошибиться легко. Посему был сделан небольшой скрипт внутри excell файла, скачать его можно ТУТ
С ним всё просто, а именно находясь в папке с файлами которые нужно посчитать, на пустом месте, зажимаем SHIFT+ ПКМ (правая кнопка мыши) и выбираем как на картинке
далее в окне powershell, вводим команду dir, получаем результат аналогично тому, что на картинке
Те цифры, что нам нужны, я выделил зеленым цветом. вот теперь их и забиваем в левую часть Excel файла каждое число байт (размер файла) в отдельную строку, жмём кнопку "расчёт", поучаем результат в правой части таблицы, в строке "Итоговые значения в байтах" пример на картинке ниже
Данные из каждой колонки, в строке "итоговые значения" можно переносить в файл конфигурации.
Часть 2. сумма CRC.
Немного о то, что такое crc сумма
Итак если упаковать все файлы обратно по своим местам, есть ещё один механизм защиты от производителя, в конфигурационных файлах, первой строчкой идёт набор непонятных букв и цифр например 2a54baca
Это две контрольных суммы для файлов ZAR_POI.BIN и ZAR_POI.BIN.inf, остальные 2, как на скрине ниже, будут отсутствовать, т.к. это распакованный архив с данными. Итак как высчитать эти самые данные? Качаем RTXcrc,извлекаем и сохраняем его к примеру в корне диска E, далее будучи в папке с сохранённой программкой, так же зажав SHIFT+ПКМ выбираем "Открыть окно PowerShell здесь", далее вводим команду
Код: Выделить всё
.\RTXcrc.exe -v 'E:\SMEG\Janvier 2019\DATA\BASE1\ZAR_POI.BIN'
Где, после аргумента -v Указываем полный путь к тому файлу, который считаем
Как видим ответ baca, его вставляем в первую строчку файла ZAR_POI.BIN.inf, сохраняем изменения в файле!
Следующая команда в том же powershell аналогична, но уже указываем сам ZAR_POI.BIN.inf
Получаем ответ 2a54, вот эти символы дописываем в ZAR_POI.BIN.inf, но перед предыдущим результатом.
Важно!Все подсчёты с crc делать только в последнюю очередь, когда остальные данные в файле записаны и сохранены, любой изменение символа, даже просто пробел в файле, меняет его crc сумму!
В общем немного подытожу, точки POI абсолютно одинаковые как для RT6, так и для SMEG, способ установки отличается координально, французы усилили защиту, это факт.
На данный момент даже при правильной сборке всех файлов обновления POI, SMEG не хочет загружать их в себя, высвечивая ошибку "Невозможно скопировать файл обновления", остался один серый кардинал серди файлов для SMEG, а именно contract.dat, его значение неизвестно.
Возможно кто то задаст резонный вопрос, где взять POI для России? Отвечу, их делает замечательный человек Марк simple_mark, обновляет их раз в месяц, выкладывает ТУТ, увы но Марк делает обновления только для RT6, именно поэтому я и хотел бы развить данную тему.
Если кто-либо знает не описанные тут функции, возможности, информацию, прошу - включайтесь
Есть идея, засунуть базу POI России, в страну с кодом 001(Италия) и попробовать скормить SMEGy, карта Италии ессно установлена, думаю стоит попробовать и этот вариант. На днях займусь, само собой буду дописывать все свои изыскания в этой теме.
Т.К. Форумный движок пережимает картинки, то оригиналы можно скачать тут, вдруг кому пригодятся.
Источники информации: