Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Sagem HiLo
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Battle-Piggy
Доброго времени суток.
Имеется GSM модуль Sagem HiLo, использующийся для отправки данных посредством gprs. Для отправки используется АТ-команда AT+KTCPSND, которая должна завершаться отправкой --EOF--Pattern-- , который переведет модуль обратно в командный режим.
Собственно проблема - после отправки данных я отправляю модулю --EOF--Pattern-- , который распознается успешно, но при этом также отправляется на серверную сторону, прилепленный к данным.
Есть какие-нибудь предложения, как избежать отправки --EOF--Pattern-- на серверную сторону?
ssokol
Цитата(Battle-Piggy @ Oct 23 2013, 11:42) *
Доброго времени суток.
Имеется GSM модуль Sagem HiLo, использующийся для отправки данных посредством gprs. Для отправки используется АТ-команда AT+KTCPSND, которая должна завершаться отправкой --EOF--Pattern-- , который переведет модуль обратно в командный режим.
Собственно проблема - после отправки данных я отправляю модулю --EOF--Pattern-- , который распознается успешно, но при этом также отправляется на серверную сторону, прилепленный к данным.
Есть какие-нибудь предложения, как избежать отправки --EOF--Pattern-- на серверную сторону?

аналогичная проблема была на визнетах, программисты "забивали костыли", но затем , втихоря, визнетовцы это пофиксили, так , что либо костыли , либо пинать разработчиков.
Battle-Piggy
Цитата(ssokol @ Oct 23 2013, 21:38) *
программисты "забивали костыли"


Даже не представляю, какой "костыль" можно забить в данном случае. Ребята, которые пишут серверную сторону, конечно, отсекают --EOF--Pattern-- после каждого пакета, но сие чересчур уж топорно, на мой взгляд
ssokol
Цитата(Battle-Piggy @ Oct 24 2013, 10:31) *
Даже не представляю, какой "костыль" можно забить в данном случае. Ребята, которые пишут серверную сторону, конечно, отсекают --EOF--Pattern-- после каждого пакета, но сие чересчур уж топорно, на мой взгляд

Ну, вот , костыль уже и забили, теперь попытайтесь пнуть производителя, тем более если и далее планируете пользоваться этими же модулями.
ilya_nn
Цитата(Battle-Piggy @ Oct 23 2013, 11:42) *
Доброго времени суток.
Имеется GSM модуль Sagem HiLo, использующийся для отправки данных посредством gprs. Для отправки используется АТ-команда AT+KTCPSND, которая должна завершаться отправкой --EOF--Pattern-- , который переведет модуль обратно в командный режим.
Собственно проблема - после отправки данных я отправляю модулю --EOF--Pattern-- , который распознается успешно, но при этом также отправляется на серверную сторону, прилепленный к данным.
Есть какие-нибудь предложения, как избежать отправки --EOF--Pattern-- на серверную сторону?


Попробуйте увеличить таймаут между окончанием данных и выдачей маркера окончания посылки.

Кстати, жить модулю Sagem HiLo осталось не больше года, если есть возможность лучше найти альтернативу.
=F8=
Уражите в команде кол-во байт которое хотите отправить - второй параметр. И если можете отказаться от этого "чуда" - откажитесь. Его встроенный стек столь чудесен, что пришлось прикручивать внешний.
PS Чтоб не создавать новую тему. Модуль работает в режиме мультиплексирования. Пытаюсь отправить смс с подтверждением о доставке. Вместо подтверждения, примерно в то время когда должно прийти подверждение получаю CME ERROR 24.
Battle-Piggy
Цитата(ilya_nn @ Oct 25 2013, 12:34) *
Попробуйте увеличить таймаут между окончанием данных и выдачей маркера окончания посылки.

Даже двухсекундный таймаут не дал эффекта.

Цитата(=F8= @ Oct 25 2013, 18:52) *
Уражите в команде кол-во байт которое хотите отправить - второй параметр.

Указываю согласно даташиту:
Код
AT+KTCPSND=1,18
где 1 - номер открытой сессии, 18 - количество байт для отправки ( без учета --EOF--Pattern-- )
Затем получаю от модуля:
Код
CONNECT
Отправляю 18 байт, затем отсылаю:
Код
--EOF--Pattern--
Получаю в ответ:
Код
OK
+KTCP_DATA: 1,1380

Итого на серверную сторону уходит 18 байт полезной нагрузки плюс --EOF--Pattern--


Цитата(=F8= @ Oct 25 2013, 18:52) *
Чтоб не создавать новую тему. Модуль работает в режиме мультиплексирования. Пытаюсь отправить смс с подтверждением о доставке. Вместо подтверждения, примерно в то время когда должно прийти подверждение получаю CME ERROR 24.


Согласно www.macrogroup.ru/content/data/store/images/f_931_4978_1.pdf :

Цитата
CME ERROR code 24 - Text string too long


Возможно, стоит использовать предварительно AT+CMGF=0
ilya-m
А Вы "--EOF--Pattern--", случайно, не в виде текстовой строки передаете?
Battle-Piggy
Цитата(ilya-m @ Oct 28 2013, 13:57) *
А Вы "--EOF--Pattern--", случайно, не в виде текстовой строки передаете?


Вы имеете ввиду, не передаю ли я после 16-ти байт "--EOF--Pattern--" еще и байт 0х00 ?
нет не передаю. При попытке прилепить после "--EOF--Pattern--" что-нибудь еще, типа '\0' или '\r' модуль просто не переходит в командный режим
ilya-m
"--EOF--Pattern--" - это не должно быть 16 Байт (16 ASCII символов).
"--EOF--Pattern--" - EOF (аббревиатура англ. end of file — конец файла) в компьютерной терминологии является индикатором что достигнут конец файла (для модема это индикатор конца блока данных и команда, что передачу данных следует завершить и перейти в командный режим).
EOF - это макрос, который определён в stdio.h. Для передачи EOF в терминальных программах используется команда Ctrl+Z.
Battle-Piggy
Цитата(ilya-m @ Oct 28 2013, 14:42) *
"--EOF--Pattern--" - это не должно быть 16 Байт (16 ASCII символов).
"--EOF--Pattern--" - EOF (аббревиатура англ. end of file — конец файла) в компьютерной терминологии является индикатором что достигнут конец файла (для модема это индикатор конца блока данных и команда, что передачу данных следует завершить и перейти в командный режим).
EOF - это макрос, который определён в stdio.h. Для передачи EOF в терминальных программах используется команда Ctrl+Z.


EOF - это именно текстовая строка. CTRL+Z не имеет к нему никакого отношения

Нажмите для просмотра прикрепленного файла
kabanchik
Цитата(ilya-m @ Oct 28 2013, 14:42) *
"--EOF--Pattern--" - это не должно быть 16 Байт (16 ASCII символов).
"--EOF--Pattern--" - EOF (аббревиатура англ. end of file — конец файла) в компьютерной терминологии является индикатором что достигнут конец файла (для модема это индикатор конца блока данных и команда, что передачу данных следует завершить и перейти в командный режим).
EOF - это макрос, который определён в stdio.h. Для передачи EOF в терминальных программах используется команда Ctrl+Z.

ты вообще далек от темы
ilya-m
Цитата(kabanchik @ Oct 28 2013, 15:29) *
ты вообще далек от темы


Извините. Действительно, с такой фишкой я в модемах раньше никогда не сталкивался.
kabanchik
ты с модемами вообще сталкивался?
погодика, дай угадаю, программист авр?!
ilya-m
Цитата(kabanchik @ Oct 28 2013, 15:37) *
ты с модемами вообще сталкивался?
погодика, дай угадаю, программист авр?!

Да, приходилось, немного. За последние лет 10 около 20000 серийных изделий.
А авр не люблю.
kabanchik
если не секрет, ссылку на изделия можно?
ilya-m
Цитата(kabanchik @ Oct 28 2013, 15:44) *
если не секрет, ссылку на изделия можно?

Например, Smart-Code, приложил руку ко всем, кроме mod.125 и серии SL.
ssokol
Цитата(kabanchik @ Oct 28 2013, 15:37) *
ты с модемами вообще сталкивался?
погодика, дай угадаю, программист авр?!

те программисты авр настолько глупы, что вообще не знают что такое модем? , интересное наблюдение , но, смею вас уверить, абсолютно неправильное.
kabanchik
задел за живое?
ssokol
Цитата(ilya-m @ Oct 28 2013, 15:42) *
А авр не люблю.

Ну и зря. Для 90-х годов очень хорошая серия была, как по цене, так и по навороченности и надежности и доставаемости. Причем, если вдруг где и сдохла, до сих пор ее можно запросто приобрести!
Battle-Piggy
Цитата(kabanchik @ Oct 28 2013, 16:40) *
задел за живое?

Такое чувство, что "программист авр" - это страшное ругательство. Чем можно парировать, например, : "За АВРщика ответишь"
ssokol
Цитата(kabanchik @ Oct 28 2013, 16:40) *
задел за живое?

еще как, с авээрок моя микроконтроллерная жизнь началась, да и устройства с 90х годов на них до сих пор работают!!!
kabanchik
обычно с авр жизнь заканчивается
Battle-Piggy
AVR-Troll was detected!
kabanchik , сам наверное только только на AVR программировать научился
kabanchik
программист авр - это программист в стиле:

"я твоё авр светодиод маргал"
и
"я твой авр пио нога шатал"

з.ы.
строчка в резюме по поводу авр - давай до свидания моменто море.
ssokol
Цитата(kabanchik @ Oct 28 2013, 16:56) *
программист авр - это программист в стиле:

"я твоё авр светодиод маргал"
и
"я твой авр пио нога шатал"

з.ы.
строчка в резюме по поводу авр - давай до свидания моменто море.

стало очень много программистов ARM в стиле :
купил крутой арм , скачал иар с кейлом да с либами, да вдобавок ртос какую-то,
а теперь объясните ,что такое пио, да как пио нога пошатать, да чем это посмотреть.
А строчку в резюме по поводу авров... даже уже в 2013 году попробуйте лично создать архитектуру хотя бы типа авр, а то языком все могут, а на деле... sad.gif
Ну да ладно, а то уже топикстартера достали спамом уже, сорри.
=F8=
Посмотрел функцию отправки вот ее кусок
Код
    strcpy(p_buffer, strAT_KTCPSND);
    p_buffer += 11;
    p_buffer = i_to_a((char*)p_buffer, socket);
    *p_buffer++=',';
    p_buffer = i_to_a(p_buffer, tx_socket_counter);
    *p_buffer = 0;

    if((PutCommandToGsm(p_gsm_port->TxCmdBuffer,
                       OK_GSM_FLAG|ERR_GSM_FLAG|CME_ERR_GSM_FLAG|NO_CARRIER_GSM_FLAG|CONNECT_GSM_FLAG,
                       5000, NULL,NULL) & (OK_GSM_FLAG | CONNECT_GSM_FLAG))==0)
    {  return -1;}

   vTaskDelay(50);
  
  while(tx_socket_counter != tx_counter){// Тут отправляю данные }

  while(GetFreeBufferSize(GSM_UART_PORT) !=  GSM_TX_BUFFER_SIZE); //А вот это самое интересное, жду пока уйдет последний байт из буфера (размер буфера 1024). Видимо это было важно что-бы последующая пауза в 50 мс перед EOF была именно после того как будет передан последний байт.

  vTaskDelay(50);

  if(!PutEOF())//Отправляю EOF.
  { return -1;  }
ilya_nn
Цитата(=F8= @ Oct 25 2013, 18:52) *
Уражите в команде кол-во байт которое хотите отправить - второй параметр. И если можете отказаться от этого "чуда" - откажитесь. Его встроенный стек столь чудесен, что пришлось прикручивать внешний.
PS Чтоб не создавать новую тему. Модуль работает в режиме мультиплексирования. Пытаюсь отправить смс с подтверждением о доставке. Вместо подтверждения, примерно в то время когда должно прийти подверждение получаю CME ERROR 24.


Про стек не соглашусь - в зрелых версиях прошивки (модуль v1) все вполне работает. Мультплексирования правда не использовал.
Самая главная проблема - модуль (в России по крайней мере) на текущий момент стал экзотикой со всеми вытекающими последствиями.
=F8=
Цитата(ilya_nn @ Oct 30 2013, 16:53) *
Про стек не соглашусь - в зрелых версиях прошивки (модуль v1) все вполне работает. Мультплексирования правда не использовал.
Самая главная проблема - модуль (в России по крайней мере) на текущий момент стал экзотикой со всеми вытекающими последствиями.


Проделайте следующий эксперемент: запускаете sagem как tcp сервер и пытаететесь подключится к нему не слишком терпеливым клиентом. Клиент посылает запрос на открытие соединения, но не дождавшись ответа сервера закрывает соединение. В таком поведении клиента нет абсолютно ничего преступного. Что должен сделать вменяемый сервер с таким полуоткрытым соединением(процедура установки соединения не закончена!!!)? - сбрость по таймауту. Что делает sagem? В лучшем случае один из сокетов остается занятым навсегда, в худшем и ч.с.х. наиболее частом - перестает вообще принимать входящие соединения.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.