Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TCP/IP стек wIP в модулях Wavecom
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Eddy_Og
В новых модулях Wavecom, Q24PL, Q2686, используется TCP/IP стек wIP (а не eDLib, как в старых модулях Q2406B). При работе с этим новым стеком, с сокетами в режиме клиента, при возникновени ошибок можно получить тип ошибки. По описанию это делается функцией
wip_getOpts(socket,WIP_COPT_ERROR, err1,WIP_COPT_END);
Но при попытке ей воспользоваться в любом случае возвращается ошибка WIP_CERR_NOT_SUPPORTED, т.е. якобы WIP_COPT_ERROR - недопустимая опция. При том, что компиляция выполняется и эта опция в заголовочных файлах присутствует. Эта же функция, но возвращающая другие параметры, например, размер буфера записи
wip_getOpts(socket,WIP_COPT_SND_BUFSIZE,allbuf,WIP_COPT_NWRITE, freebuf,WIP_COPT_END);
успешно выполняется. В чем может быть дело? Код ошибки нужен, так как в зависимости от него будет приниматься решение, то-ли надо сразу переоткрывать сокет, то-ли сделать паузу, то-ли вообще все отвалилось и надо заново открывать GPRS-сессию.
Yuriy_Rus
Здравствуйте...
К сожалению не могу помочь вам в решении вашей проблемы... 05.gif
Дело в том, что я тоже работаю с модемами Wavecom с TCP/IP стеком, только они давольно старые (1206В). Не подскажите ли вы как при установленном сокет соединении между 2 модемами его закрыть через комндный режим...
То есть я установил соединение, получил Ok_Info_WaitingForData, далле ввожу +++
То еть выхожу в командный режим...
А как теперь в командном режиме разорвать сокет-соединение или закрыть свой сокет (может есть какая-то команда)?
AT#LTCPSTOP - не помогает... help.gif
Eddy_Og
Цитата
А как теперь в командном режиме разорвать сокет-соединение или закрыть свой сокет (может есть какая-то команда)?
AT#LTCPSTOP - не помогает... help.gif


Я использую внутренний софт, там есть команды закрытия сокета. В старом стеке (eDLib) для открытия используется команда ed_SocketTCPStart, для останова ed_SocketTCPStop. В новом (wIP) открытие выполняется функцией wip_TCPClientCreate, для закрытия есть две функции, wip_close и wip_shutdown. Значит, команда для закрытие сокета внешним приложением тоже должна быть.
Проблема может быть вызвана еще тем, что переход из режима передачи данных в командный выполняется не сразу, а то и вообще по каким-то причинам не выполняется. Во всяком случае при обычной модемной связи там точно есть какая-то пауза.
У меня сделано так. Вся реализация обмена по TCP делается внутренним софтом, зашиваемым в модуль, а внешний микроконтроллер только принимает и передает данные с помощью созданных для этой цели AT-команд.
Yuriy_Rus
Цитата(Eddy_Og @ Sep 14 2007, 15:20) *
Значит, команда для закрытие сокета внешним приложением тоже должна быть.

Вот очень хотелось бы узнать какая АТ-команда выполняет данную операцию... wassat.gif
Вы, случайно, не знаете?

Цитата(Eddy_Og @ Sep 14 2007, 15:20) *
Проблема может быть вызвана еще тем, что переход из режима передачи данных в командный выполняется не сразу, а то и вообще по каким-то причинам не выполняется. Во всяком случае при обычной модемной связи там точно есть какая-то пауза.

Нет с этим проблем точно нет, после +++ ОК приходит где-то через 1-4 секунды (в чём причина такого разброса времени я пока не знаю, но точно могу скзать, что это как-то связано с объёмом переданной информации за сеанс)... sad.gif
Eddy_Og
Цитата
Вот очень хотелось бы узнать какая АТ-команда выполняет данную операцию... wassat.gif
Вы, случайно, не знаете?


Нет, за ненадобностью управлением внешними командами не интересовался. В фирменном PDF нету?

Цитата
Нет с этим проблем точно нет, после +++ ОК приходит где-то через 1-4 секунды (в чём причина такого разброса времени я пока не знаю, но точно могу скзать, что это как-то связано с объёмом переданной информации за сеанс)... sad.gif


С обычной модемной связью то же самое, переход в командный режим из режима данных занимает несколько секунд. Поэтому когда потребовалось быстро обрывать модемное соединение, мы решили эту проблему иначе - аппаратно дергаем линии управления модемом.
Yuriy_Rus
Цитата(Eddy_Og @ Sep 17 2007, 13:47) *
В фирменном PDF нету?

Я изучил очень много документации по AT комндам и АТ командам только для Wavecom и его стека, но именно такой команды, к сожалению, не нашёл...

Я, честно говря слабо себе представляю как вы работаете с модемами без интерфейса АТ команд, неужели ПО под данынй модем позволяет обойти все эти сложности??
Если вам не трудно, то расскажите, плс, более подробно как вы работаете с модемом через упомянутые вами функции?
alexQ
такое ощущение что вы работаете с очень древним стэком от eDsoft.
стэк на данный момент используется WIP. разработка самого вейвкома. там хоть через АТ команды, хоть через OpenAT приложение ...

через АТ команды можно сказать AT+WIPCLOSE=тип протокола, идентификатор сокета
Yuriy_Rus
Цитата(alexQ @ Sep 18 2007, 12:41) *
такое ощущение что вы работаете с очень древним стэком от eDsoft.
стэк на данный момент используется WIP. разработка самого вейвкома. там хоть через АТ команды, хоть через OpenAT приложение ...

через АТ команды можно сказать AT+WIPCLOSE=тип протокола, идентификатор сокета


Честно говоря, в душе не знаю какой-тип стека в моём Wavecom 1206B. Знаю, что это очень старый модем, кот. если не ошибаюсь, снят с производства и заменён на 1306B. На самом модеме написано FASTRACK (подозреваю, что это вид модема). Также приклеена наклеечка Wismo within.
Подозреваю, что Wismo - это и есть тип стека, но я совсем не уверен... Поправте меня, пожалуйста, если я ошибаюсь... wacko.gif

Вот в этом документе, если хотите, то можете посмотреть список TCP-команд, кот. я использую для установки сокет-соединения...
Нажмите для просмотра прикрепленного файла
Eddy_Og
to Yuriy_Rus

Цитата
Если вам не трудно, то расскажите, плс, более подробно как вы работаете с модемом через упомянутые вами функции?


Надо поставить на комп MS Visual Studio (у меня используется старая версия, 6.0, но можно и .NET). Затем поставить OpenAT, это свободно распространяемый компилятор, заточенный под модули Wavecom. Необходимая версия определяется TCP/IP стеком и прошивкой модуля. Так, для Q2406B 6.55 с eDLib подходит OpenAT 3.10. Для Q24PL 6.57 и wIP надо OpenAT 3.13 или 3.14. Мы добываем OpenAT через техподдержку фирмы Компэл ( www.compel.ru ), где берем модули. Можно скачать через инет (объем большой!), можно договориться о пересылке на CD. Правда, штука эта несколько глючная в установке, может с первого раза не поставится.
Документация и примеры там есть. Пишется программа, которая с помощью стандартного виндовского гипертерминала записывается в модуль. Программирование событийное, очень похоже на MS Visual C++ или C++ Builder.
У меня сделано так. Все коммуникативные функции через TCP/IP возложены на программу модуля (внутреннее приложение). Внешнее приложение только пересылает данные и, при необходимости, IP-адрес и номер порта с помощью специально введенных для этой цели AT-команд, которые в модуле обрабатываются внутренним приложением.
В принципе, если задача не сложная и не требует больших аппаратных затрат, можно обойтись без внешнего микроконтроллера вообще, одним внутренним приложением.



to alexQ

По ошибке с wip_getOpts(socket,WIP_COPT_ERROR, err1,WIP_COPT_END) можете чего-нибудь подсказать? Техподдержку Компэла интенсивно дергал, они сказали что сами с этим не работали и переадресуют вопрос разработчикам модулей, т.е. во Францию. И вот уже почти 3 недели тянется эта волынка.
Yuriy_Rus
Цитата(Eddy_Og @ Sep 18 2007, 14:11) *
to Yuriy_Rus
Пишется программа, которая с помощью стандартного виндовского гипертерминала записывается в модуль. Программирование событийное, очень похоже на MS Visual C++ или C++ Builder.
У меня сделано так. Все коммуникативные функции через TCP/IP возложены на программу модуля (внутреннее приложение). Внешнее приложение только пересылает данные и, при необходимости, IP-адрес и номер порта с помощью специально введенных для этой цели AT-команд, которые в модуле обрабатываются внутренним приложением.

ТО есть, насколько я понимаю, модуль посредством вызыва соответствующих функций выполняет определённое действие (установка настроек, выход в GPRS и т. д.). Т. е. на самом деле когда мы отправляем в порт АТ-команду, она дёргает функцию встроенного ПО этого модема и затем только идёт аппаратное выполнение операции. Получается, что можно не через АТ-команды, а через данные функции посредством собственного ПО напрямую работать с модулем...
Я всё правильно понял?

Не могли бы вы, выложить хотя бы часть документации по работе с модемом через данные функции...
Eddy_Og
Цитата
ТО есть, насколько я понимаю, модуль посредством вызыва соответствующих функций выполняет определённое действие (установка настроек, выход в GPRS и т. д.). Т. е. на самом деле когда мы отправляем в порт АТ-команду, она дёргает функцию встроенного ПО этого модема и затем только идёт аппаратное выполнение операции. Получается, что можно не через АТ-команды, а через данные функции посредством собственного ПО напрямую работать с модулем...
Я всё правильно понял?


Да, так и есть.

Цитата
Не могли бы вы, выложить хотя бы часть документации по работе с модемом через данные функции...


Вот закинул несколько файлов. Это из довольно старой версии OpenAT (3.02), еще со стеком eDLib. Первый файл - описание библиотеки ADL, это основные функции работы с модемом (сим-карта, телефонная книжка, таймеры и многое другое). ADL не менялась (или почти не менялась), она такая же и в новых версиях.
Второй файл - описание работы со стеком TCP/IP, еще старым, eDLib. Сейчас модули с этим стеком то-ли сняты с производства, то-ли вот-вот будут сняты.
Третий файл - примеры из OpenAT 3.02

http://woodtools.narod.ru/temp/wavecom/AUG...T_3-02_-_v6.pdf (1.3 Мб)
http://woodtools.narod.ru/temp/wavecom/P_O...ctivity-004.pdf (1.2 Мб)
http://woodtools.narod.ru/temp/wavecom/Samples.rar (4.3 Мб)

И пара файлов из OpenAT 3.14, это уже с новым стеком wIP.
Первый файл - описание работы со стеком. Я сейчас с ним разбираюсь, он проще и логичнее старого, но с отдельными моментами пока побороться не получилось (собственно, откуда и вопрос в начале темы).
Второй файл - примеры работы с TCP/IP. Примеры, надо сказать, достаточно бестолково написаны.

http://woodtools.narod.ru/temp/wavecom/WIP...Guide_V2_00.pdf (2.8 Мб)
http://woodtools.narod.ru/temp/wavecom/samples_wip.rar (2.3 Мб)
alexQ
2Eddy_Og

>По ошибке с wip_getOpts(socket,WIP_COPT_ERROR, err1,WIP_COPT_END) можете чего-нибудь >подсказать? Техподдержку Компэла интенсивно дергал, они сказали что сами с этим не работали и >переадресуют вопрос разработчикам модулей, т.е. во Францию. И вот уже почти 3 недели тянется эта >волынка.

если ошибка с плюсом, то что-то не так с SMTP, если минусовая то относится к библиотеке сокетов,
соответственно и смотреть нужно нужные коды в этих разделах.
расписанов документации WIP_Open_AT_IP_Connectivity_Development_Guide_V3_00.pdf
этот файл лежит в каталоге C:\OpenAT\Plug-ins\WIP\3.00.06\doc\
Eddy_Og
Цитата
если ошибка с плюсом, то что-то не так с SMTP, если минусовая то относится к библиотеке сокетов,
соответственно и смотреть нужно нужные коды в этих разделах.
расписанов документации WIP_Open_AT_IP_Connectivity_Development_Guide_V3_00.pdf
этот файл лежит в каталоге C:\OpenAT\Plug-ins\WIP\3.00.06\doc\


Ситуация такая. Используется не SMTP, а только уровень сокетов. С помощью wip_TCPClientCreate модуль коннектится к серверу и начинает время от времени гнать туда данные. Если возникает какая-то ошибка, приходит событие WIP_CEV_ERROR. Теперь задача понять, по какой причине ошибка. В документации по стеку написано, что это делается вызовом функции wip_getOpts с опцией WIP_COPT_ERROR: wip_getOpts(socket,WIP_COPT_ERROR,&err1,WIP_COPT_END) . При этом сама функция возвращает ошибку или успешность ее вызова, а код ошибки оказывается в переменной err1 (тип s32). Проблема в том, что функция завершается с ошибкой WIP_CERR_NOT_SUPPORTED, т.е. что опция якобы неправильная. Функция же сама по себе живая, с другими опциями она работает и успешно возвращает запрошенные данные, например wip_getOpts(socket,WIP_COPT_SND_BUFSIZE,&allbuf,WIP_COPT_NWRITE,&freebuf,WIP_COPT_END).

Еще покопался в примерах, выход из положения вроде нашелся, в callback-функции evh(wip_event_t *ev, void *ctx) код ошибки можно получить как ev->content.error.errnum . Но в документации об этом упомянтуто только в одном месте и мельком, я нашел только целенаправленным поиском.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.