реклама на сайте
подробности

 
 
> Как обрабатывать сообщение REMOTE IP:
david_off
сообщение Nov 7 2008, 11:19
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 37
Регистрация: 15-10-08
Из: Одесса, Украина
Пользователь №: 40 978



В моей программе все сообщения обрабатываются по установке флага получения нового сообщения. Анализатор флага работает так: получив CRLF (начало) - начинает ожидать CRLF(конец). Как только получен конец - флаг устанавливается. Обработчик сообщений, получив флаг, смотрит в буфер и обрабатывает пришедшее сообщение. После обработки флаг сбрасывается.

Алгоритм работает шикарно. Единственный его нюанс - нельзя работать с командами типа CLCC, которые возращают несколько строк и строки начиная со втрой не имеют CRLF (начало). Данные ответы имеют вид: CRLF<line1>CRLF<line2>CRLF...<lineN>CRLF OK CRLF. Проблема решается путём отказа от таких комманд - они мне не нужны.

Так вот с сообщением <CRLF REMOTE IP:> тоже наблюдается лажа.
Есть вариант выхода из сложившейся ситуации следующий: после соединения модулей посылать текст, который всегда будет заканчиватся на CRLF. Тогда сообщение будет иметь вид
<CRLF REMOTE IP: текст CRLF> - такое корректно обработается.

Но вот найти решение корректной обработки, когда приходит RING или ещё какое-то неожиданное сообщение - не могу. По сему спрашиваю здесь. Как обрабатывать REMOTE IP на тот случай, если влазит кто-то?

Сообщение отредактировал david_off - Nov 7 2008, 11:20
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Nov 7 2008, 22:23
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(david_off @ Nov 7 2008, 13:19) *
В моей программе все сообщения обрабатываются по установке флага получения нового сообщения. Анализатор флага работает так: получив CRLF (начало) - начинает ожидать CRLF(конец). Как только получен конец - флаг устанавливается. Обработчик сообщений, получив флаг, смотрит в буфер и обрабатывает пришедшее сообщение. После обработки флаг сбрасывается.

А я так и не пойму, как при таком алгоритме можно принимать не только сообщения модема, но еще и данные, которые сыпятся по GPRS-у (или по CSD). Я уже писал об этом тут рядом.

У меня основа алгоритма - кольцевой приемный буфер достаточного размера, чтобы разместить мах возможный пакет данных + несколько ответов модема, включая незапрашиваемые (unsolicited).
Признак получения данных - таймаут (дырка в данных) в ~50ms
После чего начинает работать обработчик по разбору всего, что пришло (причем в это время могут начинать валится новые данные, они попадут дальше в кольцевой буфер и будут обработаны позднее)

Обработчик сверяет по шаблону все нужные ответы. Если ответ найден, он стирается, если нет, то ожидаются еще данные в пределах максимального времени ожидания ответа на данную команду (эти времена у меня разные для разных команд, мах несколько минут). Если за это время ожидания не обнаружено требуемых в данном месте ответов, то обработчик выдает ошибку, весь приемный буфер очищается и продвигаемся далее по алгоритму обработки ошибок.

Тут имейте в виду, что ответы модема не только часто состоят из нескольких строчек, но и еще в разных условиях они могут менять свой порядок. sad.gif Я как-то об этом писал.

Еще добавлю, что работать с модемом без операционки я не рискую, уж больно большой гемор cool.gif
Правда, я сам полноценную ОС не использую, а применяю ее зачаток, где кроме главного цикла и прерываний есть еще один поток, в котором выполняются модемные процедуры и можно применять "ожидания событий", во время которых крутится главный цикл (ну и прерывания ессно) smile.gif
Go to the top of the page
 
+Quote Post
FormatCft
сообщение Nov 9 2008, 10:18
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145



Цитата(Baser @ Nov 8 2008, 03:23) *
А я так и не пойму, как при таком алгоритме можно принимать не только сообщения модема, но еще и данные, которые сыпятся по GPRS-у (или по CSD). Я уже писал об этом тут рядом.

У меня основа алгоритма - кольцевой приемный буфер достаточного размера, чтобы разместить мах возможный пакет данных + несколько ответов модема, включая незапрашиваемые (unsolicited).
Признак получения данных - таймаут (дырка в данных) в ~50ms
После чего начинает работать обработчик по разбору всего, что пришло (причем в это время могут начинать валится новые данные, они попадут дальше в кольцевой буфер и будут обработаны позднее)

Обработчик сверяет по шаблону все нужные ответы. Если ответ найден, он стирается, если нет, то ожидаются еще данные в пределах максимального времени ожидания ответа на данную команду (эти времена у меня разные для разных команд, мах несколько минут). Если за это время ожидания не обнаружено требуемых в данном месте ответов, то обработчик выдает ошибку, весь приемный буфер очищается и продвигаемся далее по алгоритму обработки ошибок.

Тут имейте в виду, что ответы модема не только часто состоят из нескольких строчек, но и еще в разных условиях они могут менять свой порядок. sad.gif Я как-то об этом писал.

Еще добавлю, что работать с модемом без операционки я не рискую, уж больно большой гемор cool.gif
Правда, я сам полноценную ОС не использую, а применяю ее зачаток, где кроме главного цикла и прерываний есть еще один поток, в котором выполняются модемные процедуры и можно применять "ожидания событий", во время которых крутится главный цикл (ну и прерывания ессно) smile.gif

А почему бы еще плюсом очереди (queue) не использовать?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- david_off   Как обрабатывать сообщение REMOTE IP:   Nov 7 2008, 11:19
- - FormatCft   Цитата(david_off @ Nov 7 2008, 16:19) В м...   Nov 7 2008, 11:28
|- - _zag_   Цитата(FormatCft @ Nov 7 2008, 15:28) ИМХ...   Nov 7 2008, 11:49
- - PIC_Embedder   У меня получилось что-то среднее. Алгоритм такой. ...   Nov 7 2008, 12:31
|- - david_off   Цитата(PIC_Embedder @ Nov 7 2008, 16:31) ...   Nov 7 2008, 12:38
|- - _zag_   Цитата(david_off @ Nov 7 2008, 16:38) неп...   Nov 7 2008, 13:54
||- - david_off   Думал, думал и надумал... По суте у меня выбор ме...   Nov 7 2008, 16:24
||- - @Ark   Цитата(david_off @ Nov 7 2008, 19:24) Дум...   Nov 7 2008, 17:11
||- - david_off   Цитата(@Ark @ Nov 7 2008, 21:11) Предложу...   Nov 7 2008, 18:30
||- - @Ark   Цитата(david_off @ Nov 7 2008, 21:30) Вы ...   Nov 7 2008, 18:53
||- - david_off   Цитата(@Ark @ Nov 7 2008, 22:53) Здесь, к...   Nov 7 2008, 20:00
||- - @Ark   Цитата(david_off @ Nov 7 2008, 23:00) Нав...   Nov 8 2008, 00:14
|- - PIC_Embedder   Цитата(david_off @ Nov 7 2008, 16:38) неп...   Nov 7 2008, 15:40
- - david_off   Цитата(Baser @ Nov 8 2008, 02:23) А я так...   Nov 8 2008, 13:00
|- - @Ark   Цитата(david_off @ Nov 8 2008, 16:00) ......   Nov 8 2008, 13:23
|- - Baser   Цитата(david_off @ Nov 8 2008, 15:00) Не ...   Nov 8 2008, 13:45
|- - david_off   Цитата(Baser @ Nov 8 2008, 17:45) Ну, есл...   Nov 8 2008, 15:47
|- - Baser   Цитата(david_off @ Nov 8 2008, 17:47) Кст...   Nov 8 2008, 17:19
- - Baser   Цитата(FormatCft @ Nov 9 2008, 12:18) А п...   Nov 9 2008, 16:38


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016