Подробности работы
Этот раздел сейчас дорабатывается. Приносим извинения за неудобства. Если вам нужна срочная помощь, обратитесь в службу поддержки Tibbo.
Библиотека GPRS работает настойчиво: после запуска вызовом gprs_start() она будет "упорно" поддерживать PPP-соединение. Сколько бы раз соединение ни рвалось, библиотека продолжает попытки. Если успешно установленное PPP-соединение обрывается, библиотека пытается установить его заново. Остановить это можно только вызовом gprs_stop().
Библиотека GPRS требовательна к буферам. Даже при GPRS_PAYLOAD_SIZE равном 1 для работы библиотеки GPRS нужно 10 страниц буфера. При размере полезной нагрузки по умолчанию, равном 4, это число растёт до 25 страниц буфера. GPRS_PAYLOAD_SIZE задаёт максимальный размер TCP- и UDP-пакетов, которые сможет обрабатывать интерфейс PPP. Если вам специально не нужно отправлять большие UDP-пакеты, размер полезной нагрузки вполне можно задать минимальным - GPRS-каналы медленные, и из-за ограничения размера пакетов вы не заметите снижения производительности.
Место в буфере выделяется при вызове gprs_start(). Библиотека проверяет, хватает ли места в буфере, и при нехватке вызывает callback_ppp_pre_buffrq(). Страницы буфера, выделенные PPP-библиотеке, освобождаются только при вызове gprs_stop().
Успешное установление PPP-соединения проходит в несколько этапов: настройка канала по протоколу LCP, затем вход и настройка IP-адреса устройства. Чтобы наблюдать за процессом, добавьте #define GPRS_DEBUG_PRINT 1 в раздел определений файла global.tbh вашего проекта (и не забудьте убрать это позже).
Когда PPP-соединение успешно установлено, библиотека задаёт ppp.ip и вызывает callback_gprs_ok(). Затем библиотека начинает следить за "состоянием" PPP-соединения: периодически отправляет эхо-запросы и ожидает эхо-ответы с другой стороны. Если ответ не приходит вовремя, библиотека считает, что PPP-соединение оборвалось, вызывает gprs_failure() и пытается установить соединение заново.
Если ваше приложение вызывает pppoe_stop(), библиотека выполнит аппаратный сброс GPRS-модуля (при условии, что GPRS_MODULE_EXTERNAL равно 0), освободит все буферы и перейдёт в состояние простоя до нового вызова gprs_start().