|
Q64 организация TCP/IP с помощью OpenAt, Использование adl_grps в WIP плагине |
|
|
|
Mar 31 2010, 13:32
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Раньше свои решения реализовывал на 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 ответа ждать долго придется, я так полагаю. Заранее спасибо.
|
|
|
|
|
Apr 1 2010, 10:47
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Цитата(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, не пойму в чем проблема.
|
|
|
|
|
Apr 1 2010, 12:53
|

Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 5-04-06
Из: Рязань
Пользователь №: 15 830

|
Если ты про 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)
|
|
|
|
|
Apr 2 2010, 05:59
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Цитата(bolmoe @ Apr 1 2010, 16:53)  (Пользуешься m2m studio?)? Только для компиляции, нет времени свой make сделать, разберусь, откажусь от этого монстра. Цитата(bolmoe @ Apr 1 2010, 16:53)  Хотя, честно говоря, не понимаю, почему tcpClientCreate не заработало, там же нет параметров входных от bearer, Я то же не понимаю, щас выкину все из кода оставлю только ветку sim->gprs->ip и буду копать глубже. А bearer точно не устанавливает где-то внутрях у себя какие-нибуть указатели на установленный context gprs? В доках как-то все по скромному. Если не добью до конца, выложу код, может мысли какие появятся.
|
|
|
|
|
Apr 2 2010, 08:07
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Цитата(bolmoe @ Apr 2 2010, 10:37)  Еще раз повторюсь, не забудь "прикрутить" wip библиотеку (это НЕ #include "wip.h")..., она включается на стадии создания проекта..., после этого она добавляется в твой код при компиляции Это само-собой разумеется, иначе бы wip_bearerStart не отрабатывал бы, а вариант с bearer я попробывал и он работает, ну чтоб исключить проблемы сборки. Когда будет результат (любой), отпишусь.
|
|
|
|
|
Apr 2 2010, 15:59
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Вообщем пришёл к выводу, что 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, это как понимать??
Сообщение отредактировал parfum - Apr 2 2010, 16:00
|
|
|
|
|
Apr 4 2010, 05:37
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

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

|
Цитата(bolmoe @ Apr 3 2010, 13:44)  Меня тут другое интересует, если соединение с сервером заканчивается, то через несколько секунд bearer закрывается, что естественно меня не устраивает А что значит bearer закрывается - какое событий, и в каком обработчике в bearerStart или TCPxxxCreate?
|
|
|
|
|
Apr 5 2010, 08:58
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Цитата(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?
|
|
|
|
|
Apr 6 2010, 04:12
|
Группа: Участник
Сообщений: 11
Регистрация: 31-12-08
Пользователь №: 42 862

|
Цитата(bolmoe @ Apr 5 2010, 17:55)  естественно в последнем случае WIP_BEV_IP_DISCONNECTED Ну тогда как и писал выше, у тебя не ip сокет закрывается, а ложиться GPRS, он по цепочке закрывает сокет. А почему GPRS у тебя ложеться, оператор ложит, или ты сам закрывешь? чего то я не понял. Пример выше, на случай когда рубиться TCP/IP соединение, но GPRS при этом поднят, делаешь новый коннект, у меня на этот случай идет перебор резервных серверов, и будет тебе счастье.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|