Программная реализация C-GPS Open AT-приложения
В предыдущей статье были рассмотрены некоторые аппаратные аспекты интеграции C-GPS-плагина компании Wavecom в бортовое навигационное оборудование систем слежения за подвижными объектами. Теперь мы поговорим о программных средствах.
Как уже говорилось, компания Wavecom предоставляет отладочные комплекты для реализации C-GPS. Они состоят из дочерней платы C-GPS и набора разработчика для беспроводных процессоров Q2686/87 или WMP50/100/150.
Помимо аппаратных средств, для начала разработки приложения разработчику потребуется программный комплекс Open AT нужной версии, который бесплатно предоставляется компанией Wavecom. Его можно скачать с FTP-сайта компании КОМПЭЛ. Чтобы получить логин и пароль для скачивания, достаточно прислать запрос. Каждой версии внутренней операционной системы беспроводного процессора соответствует своя версия Open AT, но поддерживается и обратная совместимость со старыми версиями. Другими словами, приложения, скомпилированные в ранних версиях, будут прекрасно работать на новых операционных системах беспроводных процессоров, работающих с новыми Open AT. Приложения в Open AT пишутся на языке С. В состав Open AT входят: GCC-компилятор, среда разработки Eclipse, Java-машина для работы с Eclipse; набор Development Toolkit, в состав которого входят программы Terminal Emulator, Serial Link Manager и Target Monitoring Tool; документация; бинарные файлы с операционной системой, соответствующей этой Open AT; примеры программ, библиотеки с плагинами.
Во время установки Open AT необходимо убедиться, что выставлены галочки, соответствующие нужным плагинам (в нашем случае C-GPS).
После установки Open AT можно запустить программу Project Wizard, которая формирует проект: новый или на базе имеющихся примеров. Для загрузки примера C-GPS надо в правом окне подключить библиотеку C-GPS, а в левом - сам пример (рис. 1).
Рис. 1. Программа Project Wizard
Через некоторое время после того, как вы выберете в поле Associated IDE Eclipse и нажмете ОК, загрузится среда Eclipse с вашим проектом (рис. 2), после чего с ним можно начинать работать.
Рис. 2. Среда разработки Eclipse
Компания Wavecom предоставляет четыре приложения для работы c C-GPS: QueryApplication, IntervalUpdate, TCPInternetConnection и RTCTimeAiding.
Приложение QueryApplication использует дочернюю плату C-GPS и принимает GPS-данные от нее. Пользователь может послать конфигурационное SMS-сообщение на беспроводной процессор. Приложение определит координаты, время и скорость и вышлет эти данные пользователю через SMS-канал. У пользователя есть возможность установить пароль для получения этих данных. Также можно задать номер телефона для их отсылки. Приложение может выдавать координаты в формате протокола NMEA на порт UART.
Приложение TCPInternetConnection также использует дочернюю плату C-GPS и принимает GPS-данные от нее. Пользователь может послать конфигурационное SMS-сообщение на беспроводной процессор. Приложение может быть сконфигурировано таким образом, что начнет периодически отсылать координаты через установленный промежуток времени, используя TCP IP-сокет. Как и в предыдущем случае, есть возможность задать пароль. Приложение может выдавать координаты в формате протокола NMEA на порт UART.
Функции приложения IntervalUpdate те же, что и у приложений QueryApplication и TCPInternetConnection, но передавать координаты оно может двумя способами: или через SMS-канал, или через TCP IP-сокет. Координаты также выдаются в виде NMEA-сообщения на UART.
Приложение RTCTimeAiding похоже на QueryApplication, но оно способно получать данные с часов реального времени, которые есть в беспроводном процессоре, и передавать их дочерней плате C-GPS. Это сокращает время TTFF (Time To First Fix) с 40 секунд до 5...10 секунд при использовании внешней выносной GPS-антенны. Необходимым условием работы этого приложения является наличие источника питания для часов реального времени.
Приложение Open AT может быть скомпилировано в двух режимах: в режиме Target и в режиме RTE.
Режим Target - это режим построения конечного бинарного файла. При этом генерируется файл с расширением .dwl, который с помощью стандартной программы Hyperterminal можно «залить» в беспроводной процессор, используя протокол X-Modem. Процедура следующая: если в результате проверки, не запущено ли в данный момент Open AT-приложение командой AT+WOPEN, получен ответ 1, то приложение запущено и его надо остановить командой AT+WOPEN=0, если ответ 0, то приложение не запущено. Команда AT+WDWL начинает процесс «заливки» приложения: беспроводной процессор выдает значки §§§§§§, говорящие о том, что он готов к приему файла; после этого надо выбрать файл и отправить его в процессор, используя протокол X-modem. По окончании загрузки необходимо осуществить сброс командой AT+CFUN=1, а затем запустить приложение AT+WOPEN=1. С этого момента оно будет работать даже после перезапуска питания.
В режиме RTE приложение генерирует исполняемую программу, которая может быть запущена на компьютере. Эта программа эмулирует работу ядра беспроводного процессора, управляя процессором с помощью собственного протокола через последовательный порт (рис. 3).
Рис. 3. Режим работы RTE
В окне этой программы можно установить ряд параметров запуска, а также выставить галочки уровней трасс. С помощью этих уровней можно отладить программу, вставив в нужные места кода определенный макрос, например, вида TRACE (( 1, "Embedded: Hello World" ));. Сообщения этих макросов будут видны в окне специальной программы Target Monitoring Tool (TMT), которая идет в комплекте с Open AT. Например, приведенный макрос выводит в окне TMT сообщение "Embedded: Hello World" на первом уровне трасс. Чтобы настроить TMT, необходимо выставить нужные уровни трасс, нажать кнопку Auto Detect, чтобы TMT увидел беспроводной процессор, и инициализировать этот процессор, нажав Commands, Init Target. Вид окна TMT при этом показан на рисунке 4.
Рис. 4. Вид окна программы TMT
Уровни трасс можно увидеть и при работе в режиме Target. В этом режиме беспроводной процессор выдает трассы на последовательный порт, и они могут быть просмотрены программой TMT. В этом случае процессор также надо инициализировать, нажав Commands, Init Target.
Некоторые замечания по работе с приложением C-GPS в режиме RTE:
- режим RTE доступен с некоторыми ограничениями,
- скорость соединения с компьютером должна быть 460800,
- в файл проекта gpioconfig.h нужно добавить код. Если используется процессор Q2686, код будет следующий:
#if defined (_REMOTETASKS_)
/*Define the product type only for RTE mode*/
/*ADL_IO_PRODUCT_TYPE_Q2686 or ADL_IO_PRODUCT_TYPE_Q2687*/
#define RTE_PRODUCT_TYPE ADL_IO_PRODUCT_TYPE_Q2686
#endif
Если используется процессор Q2687, то код:
#if defined (_REMOTETASKS_)
/* Define the product type only for RTE mode */
/* ADL_IO_PRODUCT_TYPE_Q2686 or ADL_IO_PRODUCT_TYPE_Q2687*/
#define RTE_PRODUCT_TYPE ADL_IO_PRODUCT_TYPE_Q2687
#endif
Есть еще одна программа, которую следует рассмотреть - Terminal Emulator (TE). С помощью этой терминальной программы можно во время отладки подавать АТ-команды, а также просматривать получаемые и передаваемые данные. Во время запуска программ TMT или TE, автоматически запускается еще одна полезная программа, Serial Link Manager (Selima), которая распределяет поток данных с процессора: трэйсы передаются в TMT, а AT-команды и данные - в TE.
Рассмотрим основные моменты программной реализации C-GPS. Структурная схема программной платформы C-GPS-решения представлена на рисунке 5.
Рис. 5. Структурная схема программной платформы C-GPS
Данные GPS в программной платформе C-GPS передаются в виде структур. Все эти структуры описаны в документации:
- erCallbackStruct - обратные аппаратные вызовы, которые приложение передает ядру GPS-библиотеки.
- erNvDataStruct - RAM-копия навигационных данных. Приложение выделяет под них память.
- erTcoConstantsStruct, erTcoTableStruct - используется для передачи GPS-ядру информации о термокомпенсированном генераторе.
- erTimeInputStruct - показание часов реального времени, которое передается GPS-ядру.
Информационные GPS структуры:
- erPvtStruct - главная структура с навигационными данными.
- erSvStatusStruct - содержит информацию о спутниках: отношение сигнал/шум, азимут, возвышение.
- erFixSetStruct - спутники, используемые для текущего определения навигационных данных.
- erTimeStruct - время, полученное от спутников.
- erUtcStruct - спутниковые константы UTC.
- erGpsMeasStruct - служебная информация, используемая в тестах при производстве.
В программной платформе C-GPS используются API-функции четырех основных типов:
- Функции управления GPS-ядром, используемые для запуска, работы и останова ядра;
- Функции обратных вызовов, используемые для регистрации аппаратных средств на ядре;
- Функции инициализации GPS-ядра, используемые для конфигурации его работы;
- Функции получения навигационных данных, статусов.
Ядро должно запускаться и выполняться из пользовательского приложения.
Функции управления ядром:
- void erGpsStart(void) - запускается после окончания инициализации. Инициализирует ядро.
- void erGpsStop(void) - используется для останова ядра и перевода C-GPS-чипсета в состояние OFF.
- void erGpsStandby(void) - используется для останова ядра и перевода C-GPS-чипсета в состояние STANDBY.
- int erGetGpsState(void) - возвращает GPS-ядро в текущее состояние. Возможны три состояния: ER_GPS_STATE_OFF, ER_GPS_STATE_ON и ER_GPS_STATE_STANDBY.
Главная функция управления ядром
Главной функцией управления ядром является int erGpsCoreTask(unsigned char *buf, unsigned short length) - она передает данные с последовательного порта GPS в буфер.
Значения, возвращаемые этой функции, представлены в таблице 1.
Таблица 1. Значения, возвращаемые функцией erGpsCoreTask
Тип | Возвращаемое значение | Функция | Скорость, Гц |
---|---|---|---|
ER_PVT_AVAIL | erPvtStruct | erGetPvt | 1 |
ER_TIME_AVAIL | erTimeStruct | erGetTime | 1 |
ER_SVSTAT_AVAIL | erSvStatusStruct | erGetSvStatus | 1 |
ER_FIXSET_AVAIL | erFixSetStruct | erGetFixSet | 1 |
ER_TCO_AVAIL | unsigned int int | erGetTcoFrequency erGetTemperature | 1 |
ER_LCTIME_AVAIL | erTimeStruct | erGetTime | 1 |
ER_NVDATA_AVAIL | erNvDataStruct | App-specific | |
ER_TESTDATA_AVAIL | erGpsMeasStruct | erGetTestData | 1 |
Функции обратных вызовов
Функции обратных вызовов обеспечивают интерфейс между «железом» и ядром. Не все из этих функций востребованы. Они должны вызываться перед erGpsStart.
Функция void erRegisterCallbacks(erCallbackStruct *cb) регистрирует функции обратных вызовов, необходимые приложению.
Функции инициализации ядра
Эти функции конфигурируют работу GPS-ядра и вызываются перед erGpsStart:
- void erSetNvData(erNvDataStruct *nvdata) - запись и сохранение данных в энергонезависимой памяти;
- void erSetMxMode(int mode) - разрешение режима отладки;
- void erSetTcoData (erTcoConstantsStruct *tc, erTcoTableStruct *tt) - отправка GPS-ядру информации о термокомпенсированном генераторе;
- void erGpsSetTime(erTimeInputStruct *time) - получение информации о системном времени;
- void erGpsSetChipsetMode(int mode) - обеспечение совместимости с предыдущими дизайнами;
- erEnablePositionOutageProgatation(int sec) - установление максимального количество секунд, в течении которых происходит передача навигационныx данныx после потери сигнала от спутников;
- erEnableLatencyPositionPropagation(int msecs) - установление системной задержки.
Функции получения навигационных данных и статусов
Эти функции базируются на возвращаемых параметрах функции erGpsCoreTask (кроме функций const char *erGetVersion(void) - получение версии GPS-ядра и erUtcStruct *erGetUtc(void) - получение спутниковых UTC-параметров).
Рис. 6. Структурная схема управления GPS-ядром
Параметр ER_PVT_AVAIL:
- erPvtStruct *erGetPvt(void) - главный интерфейс GPS-ядра, возвращает указатель на структуру, содержащую навигационную информацию: местоположение, скорость, PDOP;
- int erPvtIsFix(erPvtStruct *pvt) - использует структуру PvtStruct для индикации надежности последней полученной навигационной информации;
- int erPvtIsFixPropagated(erPvtStruct *pvt) - использует структуру PvtStruct для индикации ненадежности последней полученной навигационной информации.
Параметр ER_TIME_AVAIL:
- erTimeStruct *erGetTime(void) - возвращает указатель на структуру, содержащую текущее GPS- и UTC-время;
Параметр ER_SVSTAT_AVAIL:
- erSvStatusStruct *erGetSvStatus(void) - возвращает указатель на структуру, содержащую статус найденных спутников, отношение сигнал/шум, возвышение и азимут;
Параметр ER_FIXSET_AVAIL:
- erFixSetStruct *erGetFixSet(void) - возвращает указатель на структуру, содержащую список спутников, участвующих в текущем решении;
Параметр ER_TCO_AVAIL:
- int erGetTemperature(void) - возвращает текущую температуру в градусах Цельсия;
- unsigned long erGetTcoFrequency(void) - возвращает частоту термокомпенсированного генератора в Гц;
Параметр ER_NVDATA_AVAIL:
- Флаг указывает, что данные были изменены ядром;
Параметр ER_TESTDATA_AVAIL:
- erGpsMeasStruct *erGetTestData(void) - используется для производственных тестов.
Минимально необходимый набор функций для работы с C-GPS:
- Запуск GPS ядра
Необходимо несколько раз вызвать функцию erGpsCoreTask для обработки входящих данных. Получение навигационных данных производится через функцию erGetPvt. Опционально можно сохранять данные в энергонезависимой памяти.
- Останов системы
erGpsOff, erGpsStandby.
Рассмотренные библиотеки функций eRide в полном объеме позволят добавить GPS-функциональность беспроводному процессору на базе Q2686/87, WMP50/100/150.
Ответственный за направление в КОМПЭЛе - Олег Пушкарев
Получение технической информации, заказ образцов, поставка -
e-mail: wireless.vesti@compel.ru
Ваш комментарий к статье | ||||