Протокол обмена MEGA-GPS v3.60

поддерживается трекерами с прошивкой версии 3.60 и выше

Пример программы-сервера на языке Си для ОС Linux

Скачать архив здесь: mega360.tar.gz . Состав архива:
mega_gps.hописание структур данных и объявления переменных
gg300.cсобственно программа
gg300.confфайл конфигурации сервера
makeскрипт для компиляции
make_mysqlскрипт для компиляции с поддержкой mysql
softпапка с обновлениями прошивки распространенных версий трекеров
Программа представляет собой простой сервер сбора данных с GPS трекеров MEGA-GPS.
Включена поддержка трекеров с устаревшими прошивками (от 3.01 и выше), возможность обновления прошивки до последней версии.
Архив треков сохраняется в виде суточных бинарных файлов для каждого трекера (32 байта на точку трека)
При запуске на сервере с CPU Intel Atom 1.6GHz при приеме данных от 1000 трекеров сердняя загрузка CPU не превышает 4%.

1. Принцип обмена данными

1.1. Обмен даннымим между GPS трекером и сервером происходит через Интернет UDP пакетами
1.2. Для идентификации на сервере трекер передает свой IMEI либо в каждом пакете данных (а), либо только в пакете авторизации для установления сессии (б)
1.2.а. Передача IMEI в каждом пакете упрощает процесс идентификации, но увеличивает объем передаваемых трекером данных и ослабляет безопасность протокола передачи данных. Опция отключена по умолчанию и может быть включена в ответе на пакет авторизации (см. ниже)
1.2.б. НЕ РЕКОМЕНДУЕТСЯ. В случае однократной передачи IMEI при авторизации трекера серверное программное обеспечение должно сохранить IP:PORT трекера в массиве или в базе данных для дальнейшей идентификации принимаемых UDP пакетов с данными по IP:PORT отправителя. В этом случае IP:PORT будет являться параметром сессии
1.2.в. РЕКОМЕНДУЕТСЯ. Для упрощения идентификации принимаемых UDP пакетов серверное ПО при авторизации может передать трекеру параметр сессии (например, его индекс в массиве или базе данных). После этого трекер будет включать этот индекс в каждый последующий отправляемый пакет.
1.3. Соединение трекера с сервером рекомендуется считать разорванным, если с момента получения последнего пакета от трекера прошло более 90 сек
1.4. На каждый отправленный UDP пакет трекер ждет UDP пакет от сервера, если ответ не пришел в течение 8 секунд, трекер повторяет передачу.
1.5. Трекер анализирует принятые пакеты только с IP:PORT сервера
1.6. Данные различных типов упаковываются в UDP пакет в виде бинарных тэгов, один UDP пакет может содержать 1 и более тэгов
1.7. Независимо от количества тэгов в запросе трекера, UDP ответ сервера может содержать 1 и более тэгов
1.8. Трекер одинаково анализирует принятые от сервера UDP пакеты-подтверждения передачи и внеочередные пакеты, таким образом, в любой момент после установления сессии можно выполнить USSD запрос или изменить состояние выходов трекера.
1.9. В случае отсутствия связи с сервером трекер сохраняет данные трека в архиве в энергонезависимой памяти. После восстановления связи данные трека передаются в хронологическом порядке. Во время передачи архива трекер может присылать внеочередные данные (текущие координаты и т.п.). Однако эти данные помечаются особым образом (см. ниже).

2. Формат тэга

Длина поля, байтыНазначение
1Тип тэга
1Длина данных тэга
0..255Данные тэга

3. Используемые типы тэгов

ТипДлинаДанные
Трекер, запрос Init
0x022Sequence Number - порядковый номер пакета
0x304Random - случайное число
Сервер, ответ на Init
0x032Sequence Number, присланный трекером
0x434Unix timestamp
0x414Random - случайное число
Трекер, авторизация (запрос сессии)
0x022Sequence Number - порядковый номер пакета
0x3115IMEI
0x324Версия ПО
0x334подпись - анализировать не нужно
0x340..32Собственный номер из SIM
0x3919SIM ICCID (серийный номер, начинается на 89)
0x354Версия оборудования
0x3816Структура BOOTINFO (необязательно)
Сервер, ответ в случае ошибки авторизации или устарения сессии,
После этого Трекер должен запросить новую сессию
0xFF0-
Сервер, ответ при успешной авторизации
0x032Sequence Number, присланный трекером
необязательные тэги
0x451IMEI flag, 0x01 - трекер будет присылать IMEI в каждом пакете данных, 0x00 - отключить опцию
0x044ID трекера на сервере, если указать - трекер тогда будет присылать такой же тэг в каждом пакете данных
0x441Состояние выходов маячка
Трекер, передача пакета с точками трека
0x022Sequence Number - порядковый номер пакета
0x3115IMEI, по умолчанию не включается в пакет (см. выше)
0x044ID трекера на сервере, по умолчанию не включается в пакет (см. выше)
0x3D30структура данных MEGA_GPS_355, текущие данные при пустом архиве трекера или
данные из архива трекера в хронологическом порядке, запись в архив на серевере разрешена
в одном UDP пакете может быть до от 1 до 16 таких пакетов
0x3C30структура данных MEGA_GPS_355 текущие (внеочередные) данные при непустом архиве трекера,
запись в архив на сервере запрещена, иначе будет нарушена хронология в архиве
в UDP пакете может быть только один такой пакет
Сервер, ответ-подтверждение приема пакета
0x032Sequence Number, присланный трекером
Трекер, передача ответа на USSD (после запроса сервера или USSD по умолчанию)
0x022Sequence Number - порядковый номер пакета
0x3115IMEI, по умолчанию не включается в пакет (см. выше)
0x044ID трекера на сервере, по умолчанию не включается в пакет (см. выше)
0x361..32текст запроса USSD
0x371..255текст ответа USSD
Сервер, ответ-подтверждение приема пакета
0x032Sequence Number, присланный трекером
Сервер, запрос USSD
0x461..32текст запроса USSD
Трекер, запрос SOFTWARE UPDATE
0x022Sequence Number - порядковый номер пакета
0x3115IMEI, по умолчанию не включается в пакет (см. выше)
0x044ID трекера на сервере, по умолчанию не включается в пакет (см. выше)
0x3A16структура MEGA_GPS_UPDATE_HEADER
Сервер, ответ SOFTWARE UPDATE
0x032Sequence Number, присланный трекером
0x4A16структура MEGA_GPS_UPDATE_HEADER, отказать в обновлении 16 байтов 0x00