parfum
Mar 31 2010, 13:32
Раньше свои решения реализовывал на GR64, так как его сняли, начал смотреть Q64. Брал пример смотрел как работает и так далее. Что уже сделал:
Инициализирую симку при помощи adl_simSubscribe(<sim_handler>,<pin_code>),
дожидаюсь результата: ADL_SIM_EVENT_FULL_INIT;
далее проверяю наличие в сети значения: NETWORK_HOME_REG;
после начинаю с GPRS, определяю контекст:
// adl_gprsSetupParams_t gprs_setup;
// u8 ctx_id=1;
adl_gprsSetup (ctx_id,gprs_setup);
ожидаю результата: ADL_GPRS_EVENT_SETUP_OK;
следую дальше, аттачу GPRS и активиру контекст:
запускаю adl_gprsAct(ctx_id), ожидаю сзначений
ADL_GPRS_EVENT_ME_ATTACH...ADL_GPRS_EVENT_ACTIVATE_OK;
после приходится лезть в wip:
инициализирую wip_netInit(), получаю положительный результат: 0;
И вот что делать дальше не понимаю, в GR64 открывал сокет и коннектился, в примерах по WIP
все сетевые работы делаются при помощи WIP функций
wip_bearerOpen(...), wip_bearerStart(...), wip_bearerStart(...) которые поднимают GPRS и активируют контекст,
а далее работа с tcp/ip при помощи wip_TCPClientCreate(PEER_STRADDR,PEER_PORT....).
Так вот непойму, как подсунуть активированный при помощи adl функций GPRS для активации сокета
и tcp/ip коннекта, а не проделывать GPRS манипуляции с помощью wip_bearer* функций,
ну типа засунуть куда нибудь готовый CID, а далее wip_TCPClientCreate(...).
От Sierra Wireless ответа ждать долго придется, я так полагаю. Заранее спасибо.
а после активации GPRS сразу если попробовать wip_TCPClientCreate(...), все должно прокатить...
А почему не используешь wip_bearer?
Цитата(bolmoe @ Apr 1 2010, 12:20)

а после активации GPRS сразу если попробовать wip_TCPClientCreate(...), все должно прокатить...
А почему не используешь wip_bearer?
В том то и дело что-то не проходит, ошибка в handle вылетает, wip_bearer не использовал, потому что щас переписываю код с GR64 на Q64, и двигаюсь по аналогии, а adl_gprs как то понятней (адекватней), про поведение wip_bearer пока мне не понятно.
На GR-ке поднимал GPRS а далее сокет и tcp соединение, если адрес не доступен другой адрес и т.д., GPRS не трогаю. Вообще как то после GR-64 туговато идет, не нашел в Q64 кода события GRPS_DENIED, когда GPRS запрещен оператором, в Q-ке общая ошибка что ошибка в пароле, что запрет оператора - один код.
В wip_bearerOpen есть указатель на контекст - ему случаем нельзя подсунуть указатель на переменную с номером контескта из adp_gprs ?? или с помощью wip_setCtx чего поиграться?? Если не получиться в этом направлении то сделаю конечно через wip_bearer, но интересней прикрутить к готовому adl-кому GPRS, не пойму в чем проблема.
Если ты про ctxId, то это указатель на данные, которые ты можешь передать в обработчик bearer events handler, из которого можно запустить tcpCreate...
там у них в документации есть простенький пример через bearer...(у меня FASTRACK GO (Q2686)), а ты там при создании проекта прикрутил wip библиотеку(Пользуешься m2m studio?)?
Не знаю, пригодится или нет...., у меня несколько задач запускаются, так вот..., GPRS только в main task инициализируется, хоть в мурзилке и пишется что tcp можно в любой задаче запустить, у меня не прошло (может что и не так сделал), пришлось в основной задаче крутиться, это достаточно просто там делается через msg сервис, если задача одна, то все делается через bearer events handler
Хотя, честно говоря, не понимаю, почему tcpClientCreate не заработало, там же нет параметров входных от bearer, ctxId - можешь передавать, а можешь не передавать(NULL написать), через этот параметр в обработчик tcp можно передавть параметры, я к примеру передаю структуру, в которой хранятся параметры HTTP запроса на сервак (GET ...HTTP 1.1\r\n)
Цитата(bolmoe @ Apr 1 2010, 16:53)

(Пользуешься m2m studio?)?
Только для компиляции, нет времени свой make сделать, разберусь, откажусь от этого монстра.
Цитата(bolmoe @ Apr 1 2010, 16:53)

Хотя, честно говоря, не понимаю, почему tcpClientCreate не заработало, там же нет параметров входных от bearer,
Я то же не понимаю, щас выкину все из кода оставлю только ветку sim->gprs->ip и буду копать глубже. А bearer точно не устанавливает где-то внутрях у себя какие-нибуть указатели на установленный context gprs? В доках как-то все по скромному.
Если не добью до конца, выложу код, может мысли какие появятся.
Еще раз повторюсь, не забудь "прикрутить" wip библиотеку (это НЕ #include "wip.h")..., она включается на стадии создания проекта..., после этого она добавляется в твой код при компиляции
Цитата(bolmoe @ Apr 2 2010, 10:37)

Еще раз повторюсь, не забудь "прикрутить" wip библиотеку (это НЕ #include "wip.h")..., она включается на стадии создания проекта..., после этого она добавляется в твой код при компиляции
Это само-собой разумеется, иначе бы wip_bearerStart не отрабатывал бы, а вариант с bearer я попробывал и он работает, ну чтоб исключить проблемы сборки. Когда будет результат (любой), отпишусь.
Вообщем пришёл к выводу, что bearerStart предполагаю не только GPRS поднимает, если есть событие WIP_BEV_IP_CONNECTED. Если поднимаю GPRS через adl а потом wip_TCPClientCreate(PEER_STRADDR,PEER_PORT,my_handler,NULL) то в обработчике сразу появляется WIP_CEV_ERROR. Если делаю все через bearer, то в bearer обработчике появляется событие WIP_BEV_IP_CONNECTED далее wip_TCPClientCreate(PEER_STRADDR,PEER_PORT,my_handler,NULL) и в my_handler появляется событие WIP_CEV_WRITE. Но самое интересное перед этим не появляется событие WIP_CEV_OPEN, это как понимать??
WIP_CEV_OPEN у меня возникает,я там формирую строку запроса GET .....HTTP 1.1
Меня тут другое интересует, если соединение с сервером заканчивается, то через несколько секунд bearer закрывается, что естественно меня не устраивает, где это полечить пока не нашел, до этих сообщений от тебя тоже собирался на GPRS активацию без bearer, теперь вот не знаю что делать, "мурзилку" буду дальше читать...
Цитата(bolmoe @ Apr 3 2010, 13:44)

Меня тут другое интересует, если соединение с сервером заканчивается, то через несколько секунд bearer закрывается, что естественно меня не устраивает, где это полечить пока не нашел, до этих сообщений от тебя тоже собирался на GPRS активацию без bearer, теперь вот не знаю что делать, "мурзилку" буду дальше читать...
Так по этому я и пошёл по прокатанному варианту (отработано на GR64), Я вот думаю можеть информацию полученную с помощью adl_gprsGetCidInfomations куда-нибудь прикручивать. А каждый раз проходить цепочку GPRS -> IP в случае обрыва сокета, то же не охота, раньше заново переоткрывал сокет (если он был закрыт) и только ip connection, Буду дальше ковырять, от sierra wireless все равно ничего не добьешься. После исследований отпишусь.
Цитата(bolmoe @ Apr 3 2010, 13:44)

Меня тут другое интересует, если соединение с сервером заканчивается, то через несколько секунд bearer закрывается, что естественно меня не устраивает
А что значит bearer закрывается - какое событий, и в каком обработчике в bearerStart или TCPxxxCreate?
сначало, сокет заврывается (как только все данные получены) - WIP_CEV_PEER_CLOSE, буквально через нескольлко секунд - WIP CE PEER CLOSE. Меня это совсем не устаривает, если бы отконнекчивался хотя бы через минуту...
Цитата(bolmoe @ Apr 5 2010, 10:51)

сначало, сокет заврывается (как только все данные получены) - WIP_CEV_PEER_CLOSE, буквально через нескольлко секунд - WIP CE PEER CLOSE. Меня это совсем не устаривает, если бы отконнекчивался хотя бы через минуту...
Я себе делал так:
if (WIP_CEV_PEER_CLOSE==Event->kind){
wip_close(Event->channel);
adl_tmrSubscribe(FALSE, 1, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t) &connect);
}
static void connect(u8 Id) {
wip_TCPClientCreate(xxxx_ipaddress,xxxx_port, xxxx_handler,NULL);
}
А вот почему у тебя приходит дважды, один за одним WIP_CEV_PEER_CLOSE - не понял, у тебя случайно где-то не сделано wip_close(), или bearerClose(), т.е. закрытие идет по цепочке, откидывается GPRS например, и он ложит соединение, и в handler пробрасывается еще раз WIP_CEV_PEER_CLOSE?
))), это я по ошибке скопированное вставил дважды))), естественно в последнем случае WIP_BEV_IP_DISCONNECTED
мне так часто раз в 100мс не надо, мне раз в 20-30 сек....
Цитата(bolmoe @ Apr 5 2010, 17:55)

естественно в последнем случае WIP_BEV_IP_DISCONNECTED
Ну тогда как и писал выше, у тебя не ip сокет закрывается, а ложиться GPRS, он по цепочке закрывает сокет.
А почему GPRS у тебя ложеться, оператор ложит, или ты сам закрывешь? чего то я не понял.
Пример выше, на случай когда рубиться TCP/IP соединение, но GPRS при этом поднят, делаешь новый коннект, у меня на этот случай идет перебор резервных серверов, и будет тебе счастье.
Vlad1977
Dec 28 2011, 11:29
Люди подскажите плииз, был контроллер раньше, и по уарту управлял модемом wavecom FXT002, все работало замечательно. Но тут случиласт проблема нехватки озу на контроллере, вот решил использовать озу самого модема ну соответственно с помощью Open AT. Взял пример ихних что бы создать тсп_клиента, и начался какой то кошмар. Проходит ввод пин кода adl_simSubscribe( evh_sim, GPRS_PINCODE);, возвращается состояние ADL_SIM_EVENT_FULL_INIT:
Дальше делаю все как в примере после запроса
adl_atCmdCreate( "AT+CREG?", FALSE, poll_creg_callback, ADL_STR_CREG, NULL);
попадаю вот сюда
.....
if ( 1 == regStateInt || 5 ==regStateInt) {
TRACE (( 1, "(poll_creg_callback) Registered on GPRS network." ));
open_and_start_bearer();
}
.....
вызываю открыть беар. Но функция
.....
if ((r=wip_bearerOpen(&b,"GPRS", evh_bearer, NULL)) !=0)
{ TRACE (( 1, "wip_bearerOpen r = %d ",r ));
//return FALSE;
}
.....
мне постоянно возвращает значение r=-28, и соответственно дальше ничгео не работает. Может подскажите из за чего такое мождет происходить?
gosha14
Dec 28 2011, 13:36
А WIP стек перед этим инициализировали?
Vlad1977
Dec 28 2011, 15:02
Да инициализировал, там стоит вначале программы
r = wip_netInitOpts(
WIP_NET_OPT_DEBUG_PORT, WIP_NET_DEBUG_PORT_UART1, WIP_NET_OPT_END);
Это может быть как то связано с отладкой? Я запускаю программу в режиме RTE, модем подлючен по usb к компу,
вот сейчас допустим wip_bearerOpen вернул 0, а на след операторе:
r = wip_bearerSetOpts( b, WIP_BOPT_GPRS_APN, GPRS_APN,
WIP_BOPT_LOGIN, GPRS_USER,
WIP_BOPT_PASSWORD, GPRS_PASSWORD,
WIP_BOPT_END);
вылетает окно дизассемблера, и после этого, программа виснет, и дальше логику отследить невозможно в принипе

.
Vlad1977
Dec 28 2011, 16:23
Еще на счет отладки в m2m, у меня почему то получается запустить отладку только в RTE режиме. А вот тут вот запускают по дргуом, но почему то у меня так не получилось.
http://www.youtube.com/watch?v=q_NTeAN-p_0...player_embedded
Vlad1977
Dec 29 2011, 05:46
оказывается проблема вот в этих параметрах: GPRS_USER и GPRS_PASSWORD, если ставлю их в NULL, отладчик вылетает на wip_bearerSetOpts, ставлю их в gdata или в *, то он проходит установку те wip_bearerSetOpts, но вылетает на старте беар, с ошибкой -27, и пишет [WIP] No more ctx, call adl_gprsUnsubscribe().
Оператор мегафон, у него никогда не было ни логина ни пароля, что можно еще попробовать туда записать?
Может, не совсем в тему, но если уж совсем упретесь в глухую стену, то помните о возможности соединения "вручную". Можно отлогировать конект РС с подходящим драйвером модема. Причем нет необходимости в реализации полного ррр, достаточно отработать его по минимальному шаблону, т.к. в GSM сам алгоритм ррр зависит только от прошивки модуля, но не от оператора. Таким образом, после CGDCONT и ATD обычно достаточно двух обменов фиксированными пакетами для LCP, одного обмена для PAP и двух-трех - для IPCP. Из дополнительных функций понадобится 7D-преобразование и crc16. В итоге получаем как бы raw-сокет с полным доступом к IP-заголовкам. Если обмен будет только по UDP, то просто дописываем IP-UDP заголовок к датаграмме (с длиной данных, UDP CS можно 0 , считаем IP CS и crc16, выполняем 7D-преобразование и отправляем в порт). Для TCP-сокета гимора чуть побольше (необходимо "тройное рукопожатие" вначале, вести счетчики SEQ и ACK и таймауты повторных отсылок), но вполне реализуемо.
В итоге получаем абсолютно прозрачную и полностью управляемую вами реализацию обмена без глюков встроенного стека.
Vlad1977
Dec 29 2011, 07:29
Да хочется же разобраться с wip, сейчас вот где стопорится: начинается соеденение с жпрс, а потом модем почему то, судя по лампочке, сбрасывается, отладка опять же ничего не показывает.
GPRS]: GPRS CTX (cid=1) found
[GPRS]: GPRS EVENT SETUP OK (cid=1): GPRS activate
+WIND: 3
+WIND: 13
+WIND: 1
+WIND: 16
+WIND: 4
+WIND: 10,"SM",0,"FD",0,"ON",0,"SN",0,"EN",0
+WIND: 11,,,,"9D59FA612615B2190DCB1F8273AE906B","CDD9FB4785F604BADC77D4B146B6147
C",
+WIND: 7
[GPRS]: open: -> DISCONNECTED
[GPRS]: start: -> CONNECTING
[WIP] No more ctx, call adl_gprsUnsubscribe()
[GPRS]: close: -> CLOSED
gosha14
Dec 29 2011, 09:38
Цитата(Vlad1977 @ Dec 29 2011, 07:46)

оказывается проблема вот в этих параметрах: GPRS_USER и GPRS_PASSWORD, если ставлю их в NULL, отладчик вылетает на wip_bearerSetOpts, ставлю их в gdata или в *, то он проходит установку те wip_bearerSetOpts, но вылетает на старте беар, с ошибкой -27, и пишет [WIP] No more ctx, call adl_gprsUnsubscribe().
Оператор мегафон, у него никогда не было ни логина ни пароля, что можно еще попробовать туда записать?
Заменяете их просто пустыми кавычками #define GPRS_USER ""
Vlad1977
Dec 29 2011, 11:19
вот же фигня какая, оказалось все банально просто, открутилась антенна на модеме

, сеть он кое как видел, а вот жпрс не работал.
Vlad1977
Jan 13 2012, 09:17
А как правильно закрыть соединение c GPRS, что бы выключить модем, в опен ат? Я сейчас делаю так: вызываю wip_close(), потом попадаю на функцию finalizzer, она вызывается когда сокет закрыт. И в ней уже пытаюсь закрыть wip_bearerClose(), но в ответ приходит ошибка -24. Что это за ошибка понять не могу
bolmoe
Jan 18 2012, 08:57
Цитата(Vlad1977 @ Jan 13 2012, 12:17)

А как правильно закрыть соединение c GPRS, что бы выключить модем, в опен ат? Я сейчас делаю так: вызываю wip_close(), потом попадаю на функцию finalizzer, она вызывается когда сокет закрыт. И в ней уже пытаюсь закрыть wip_bearerClose(), но в ответ приходит ошибка -24. Что это за ошибка понять не могу

По поводу ошибки - WIP_BERR_BAD_HDL
При открытии есть параметр wip_bearer_t *br, его же надо и при закрытии использовать
//глобальная переменная
wip_bearer_t br;
wip_bearerOpen( &br, "GPRS", Handler обработчик сообщений, NULL)
wip_bearerStart ( br );
wip_bearerClose( br);
Vlad1977
Jan 18 2012, 12:19
Цитата(bolmoe @ Jan 18 2012, 12:57)

По поводу ошибки - WIP_BERR_BAD_HDL
При открытии есть параметр wip_bearer_t *br, его же надо и при закрытии использовать
//глобальная переменная
wip_bearer_t br;
wip_bearerOpen( &br, "GPRS", Handler обработчик сообщений, NULL)
wip_bearerStart ( br );
wip_bearerClose( br);
спасибо с этим уже разобрался.
Может вы сталкивались с повышенным потреблением? модем жрет собара порядка 30-40мА в sleep режиме w32k=1, уже и open at отключил вообще. А пишут что должен потьреблять порядка 3-4 мА.
bolmoe
Jan 19 2012, 06:23
Цитата(Vlad1977 @ Jan 18 2012, 15:19)

спасибо с этим уже разобрался.
Может вы сталкивались с повышенным потреблением? модем жрет собара порядка 30-40мА в sleep режиме w32k=1, уже и open at отключил вообще. А пишут что должен потьреблять порядка 3-4 мА.
Честно говоря не сталкивался, задача немного другая, используем FASTRACK GO( 2686) и GL6100(WMP 100). Питаются от сети 220В, постоянно в GPRS висит, получает от и отправляет данные на сервер(а)...

Энергию не бережем

кстати, а DTR сигнал учитываете, а то при AT+W32K=1 отруливание SLEEP режимом происходит сигналом DTR, может просто терминал не находится в sleep режиме?
Чтобы без DTR -> AT+W32K=1,0
Vlad1977
Jan 19 2012, 19:30
Цитата(bolmoe @ Jan 19 2012, 10:23)

Честно говоря не сталкивался, задача немного другая, используем FASTRACK GO( 2686) и GL6100(WMP 100). Питаются от сети 220В, постоянно в GPRS висит, получает от и отправляет данные на сервер(а)...

Энергию не бережем

кстати, а DTR сигнал учитываете, а то при AT+W32K=1 отруливание SLEEP режимом происходит сигналом DTR, может просто терминал не находится в sleep режиме?
Чтобы без DTR -> AT+W32K=1,0
Конечно dtr учитывается, в sleep mode он явно попадает, тк потребление после w32k снижается с 90ма до 30ma и сразу перестает реагировать на ат команды, через рс232. Как только dtr в 1цу загоняешь, модем просыпается. При том интересно, что если физически из модема выдернуть кабель рс232 в sleep mode, то потребление еще снижается и становится примерно 20-25ма, хотя это тоже много. И еще это потребление одинаково при рабочем gsm модуле и без него, одинаково высокое я бы сказал. Попробую завтра компорт командой отключить, хотя не уверен что это поможет. Еще можно попробовать все ноги на рс232 на землю опустить.... А больше идей никаких че то нету

, я уже даже светодиод на модема отключил, для чистоты эксперимента, что бы ничего ему не мешало.
Vlad1977
Jan 20 2012, 07:20
точно, погсле команды at+wasr=1, уарт отключается полностью и потребление становится как и заявлено 2-3мА.
Vlad1977
Jan 20 2012, 09:14
Как сдлеать прерывание от INT3? От gpio все понятно, adl_extintSubscribe(ножка, вектор,параметры). Ну еще же есть 4 входа INT0-4, а про них что то ни слова нигде нету, нашел только как приоритет у них менять.