SearchMaps
Секция SearchMaps
предназначена для определения критериев поиска различных карт в прошивке ECU.
Она состоит из двух основных частей: ObdMap
и MapByMap
.
"SearchMaps": {
"ObdMap": {
"StartSearch": {
"Masks": [
"32 05 08 D0 3A 10 17 D0 17 D0 2C D0",
"32 05 08 D0 3B 10 17 D0 17 D0 2C D1"
],
"AllMasksOffset": 0,
"$SearchType": "MasksAndSingleOffset"
},
"EndSearch": {
"Masks": [
"64 00 00 00 00 00 49",
"64 00 00 00 00 00 32"
],
"AllMasksOffset": 0,
"$SearchType": "MasksAndSingleOffset"
},
"LengthMustBeLessThan": 4000,
"ValuePresentation": {
"BytesOrder": "Hi_Lo"
}
},
"MapByMap": [
{
"MapType": "Switch",
"StartSearch": {
"Masks": [
"00 00 00 00 00 00 00 00 00 0B 01 01",
"00 00 00 00 00 00 00 00 00 0B 0B 01"
],
"AllMasksOffset": 10,
"$SearchType": "MasksAndSingleOffset"
},
"ItemSize": 1
},
{
"MapType": "Fault",
"StartSearch": {
"Masks": [
"01 01 01 01 01 01 01 00 FF FF FF FF",
"01 01 01 01 01 01 01 00 80 00 80 00"
],
"AllMasksOffset": 10,
"$SearchType": "MasksAndSingleOffset"
},
"ItemSize": 2
}
]
}
ObdMap
Секция ObdMap
определяет правила поиска начала и конца карты в прошивке посредством заданных шаблонов (масок) и смещений, а также устанавливает формат представления данных для последующей обработки.
Obd-карта является основной для определения размерности других карт, в которых находятся флаги удаления ошибки (такие как Alarm, Switch, Fault).
"ObdMap": {
"StartSearch": {
"Masks": [
"32 05 08 D0 3A 10 17 D0 17 D0 2C D0",
"32 05 08 D0 3B 10 17 D0 17 D0 2C D1"
],
"AllMasksOffset": 0,
"$SearchType": "MasksAndSingleOffset"
},
"EndSearch": {
"Masks": [
"00 64 00 00 00 00 00 49",
"01 64 00 00 00 00 00 32"
],
"AllMasksOffset": 1,
"$SearchType": "MasksAndSingleOffset"
},
"LengthMustBeLessThan": 4000,
"ValuePresentation": {
"BytesOrder": "Hi_Lo"
}
}
StartSearch
Masks
: Массив строк, каждая из которых представляет последовательность байт для поиска начала карты.
Добавление новой строки строго через запятую (,
).
В данном примере предусмотрены два варианта:
"32 05 08 D0 3A 10 17 D0 17 D0 2C D0",
"32 05 08 D0 3B 10 17 D0 17 D0 2C D1"
AllMasksOffset
: Смещение (offset), указывающее, с какого байта начинается карта относительно начала маски.
Нумерация начинается с 0.
В данном примере значение равно 0
, т.е. построение карты начнется с байта со значением 32
.
$SearchType
: Тип поиска. Используется MasksAndSingleOffset
, что означает применение поиск по нескольким маскам с одинаквым смещением.
EndSearch
Masks
: Массив строк, каждая из которых представляет последовательность байт для поиска конца карты.
Добавление новой строки строго через запятую (,
).
В данном примере предусмотрены два варианта:
"00 64 00 00 00 00 00 49",
"01 64 00 00 00 00 00 32"
AllMasksOffset
: Смещение (offset), указывающее, с какого байта заканчивается карта относительно начала маски.
Нумерация начинается с 0.
В данном примере значение равно 1
, т.е. построение карты закончится не включая байт со значением 64
.
$SearchType
: Тип поиска. Используется MasksAndSingleOffset
, что означает поиск по нескольким маскам с одинаквым смещением.
LengthMustBeLessThan
Ограничение максимальной длины карты, установленное в 4000
байт.
ValuePresentation
BytesOrder
: Значение Hi_Lo
указывает, что порядок байт определяется от старшего к младшему (big-endian).
MapByMap
В данной секции указывается массив правил для поиска карт типов Switch, Fault, Alarm для отключения ошибок.
Количество карт любого типа может быть произвольным. В приведенном примере ищется по одной карте типа Switch
и Fault
.
Поиск осуществляется по поисковым строкам (маскам). Мы ищем только начало каждой карты, поскольку количество флагов для отключения ошибок рассчитывается на основе количества элементов, найденных в Obd-карте.
"MapByMap": [
{
"MapType": "Switch",
"StartSearch": {
"Masks": [
"00 00 00 00 00 00 00 00 00 0B 01 01",
"00 00 00 00 00 00 00 00 00 0B 0B 01"
],
"AllMasksOffset": 10,
"$SearchType": "MasksAndSingleOffset"
},
"ItemSize": 1
},
{
"MapType": "Fault",
"StartSearch": {
"Masks": [
"01 01 01 01 01 01 01 00 FF FF FF FF",
"01 01 01 01 01 01 01 00 80 00 80 00"
],
"AllMasksOffset": 10,
"$SearchType": "MasksAndSingleOffset"
},
"ItemSize": 2
}
]
MapType
: Тип карты для поиска. Может иметь значения Switch
, Fault
, Alarm
. В данном примере указана карта Switch
.
StartSearch
: правило поиска начала карты. Включает в себя следующие параметры:
Masks
: Массив строк, каждая из которых представляет последовательность байт для поиска начала карты.
Добавление новой строки строго через запятую (,
).
В данном примере предусмотрены два варианта:
"00 00 00 00 00 00 00 00 00 0B 01 01",
"00 00 00 00 00 00 00 00 00 0B 01 0B"
AllMasksOffset
: Смещение (offset), указывающее, с какого байта начинается карта относительно начала маски.
Нумерация начинается с 0.
В данном примере значение равно 10
, т.е. построение карты начнется с 10-го байта со значением 01
.
$SearchType
: Тип поиска. Используется MasksAndSingleOffset
, что означает поиск по нескольким маскам с одинаквым смещением.
ItemSize
: Размер одного элемента карты, т.е. сколько байт перезаписываем при сбросе ошибки. В данном примере 1
байт.
MapType
: Тип карты для поиска. Может иметь значения Switch
, Fault
, Alarm
. В данном примере указана карта Fault
.
StartSearch
: правило поиска начала карты. Включает в себя следующие параметры:
Masks
: Массив строк, каждая из которых представляет последовательность байт для поиска начала карты.
Добавление новой строки строго через запятую (,
).
В данном примере предусмотрены два варианта:
"01 01 01 01 01 01 01 00 FF FF FF FF",
"01 01 01 01 01 01 01 00 80 00 FF FF"
AllMasksOffset
: Смещение (offset), указывающее, с какого байта начинается карта относительно начала маски.
Нумерация начинается с 0.
В данном примере значение равно 10
, т.е. построение карты начнется с 10-го байта со значением FF
.
$SearchType
: Тип поиска. Используется MasksAndSingleOffset
, что означает поиск по нескольким маскам с одинаквым смещением.
ItemSize
: Размер одного элемента карты, т.е. сколько байт перезаписываем при сбросе ошибки. В данном примере 2
байта.