информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
А ты жди ответа от модема 07.01.04 13:21  Число просмотров: 1214
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Модем отвечает на команды в основном OK или ERROR. Вот отправляешь ему команду и ждешь пока он что нибудь ответит. Если команда - не дозвон и не отправка голосового потока ставишь к примеру таймаут 5 сек и если ответ не пришел - ругаешься юзеру что modem failure. Если дозвон - то таймаут побольше. Но вообще по вкусу. Далее учти что обычно по дефолту модемы делают эхо на твои команды. То есть выглядит это примерно так:
ТЫ : ATZ\xD\xA
MODEM:ATZ\xD\xA\xDOK\xD\xA
Эхо отключается командой ATE0
<programming>
[C++] Сколько ждать ответ модема? 06.01.04 01:09  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Послал в СОМ порт команду модему, и жду время пока она выполниться... как точно узнать время выполнения команды??? Ставить задержку как-то неприкольно, наверное есть какой-нить способ, если есть, поделитесь!
Hayes-compatible модем должен дать ответ в течение 3 сек 06.01.04 10:09  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
Естественно это не относиться к командом предпологающим установление связи.
[C++] SetCommTimeouts 06.01.04 01:43  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Послал в СОМ порт команду модему, и жду время пока она
> выполниться... как точно узнать время выполнения команды???
> Ставить задержку как-то неприкольно, наверное есть
> какой-нить способ, если есть, поделитесь!
И работа с COM-портом в OVERLAPPED режиме. Примеры есть в MSDN. На форуме уже обсуждалось вроде.

Еще можешь (вместе с таймаутами, а не вместо них) поставить с помощью SetCommState поле EvtChar структуры DCB в 0x0a (возврат каретки), потом SetCommMask на EV_RXFLAG и ждать прибытия этого символа (WaitCommEvent). А только потом делать ReadFile из порта. Основано на том, что каждая команда заканчивается вводом (который шлет в терминал символ 0a).
Как я понял, после того как придёт 0x0a можно читать... 07.01.04 12:55  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Как я понял, после того как придёт 0x0a можно читать результат выполнения команды, а до этого времени типо ждём??? Одним словом после того как послал команду жду символ перевода строки и читаю результат?
А ты жди ответа от модема 07.01.04 13:21  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
Модем отвечает на команды в основном OK или ERROR. Вот отправляешь ему команду и ждешь пока он что нибудь ответит. Если команда - не дозвон и не отправка голосового потока ставишь к примеру таймаут 5 сек и если ответ не пришел - ругаешься юзеру что modem failure. Если дозвон - то таймаут побольше. Но вообще по вкусу. Далее учти что обычно по дефолту модемы делают эхо на твои команды. То есть выглядит это примерно так:
ТЫ : ATZ\xD\xA
MODEM:ATZ\xD\xA\xDOK\xD\xA
Эхо отключается командой ATE0
Мда... 08.01.04 22:49  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Мне нужно точно определить время выполнения той или иной команды.. То, что приходит ОК если команда успешно, это понятно, но это в конце рузультата, мнеж нужно определить то время которое пройдёт прежде чем можно будет читать данные из порта!!!!
Лучше всего: ставь таймаут и ожидай события 08.01.04 23:51  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Мне нужно точно определить время выполнения той или иной
> команды.. То, что приходит ОК если команда успешно, это
> понятно, но это в конце рузультата, мнеж нужно определить
> то время которое пройдёт прежде чем можно будет читать
> данные из порта!!!!
Как уже и было сказано. Таймаут уже не важно какой (SetCommTimeouts немного из другой оперы, для установки таймаута на WaitCommEvent придется ставить SetTimer), можешь даже конфигурируемым сделать (так лучше всего). Команды как уже сказано заканчиваются CRLF-ом, но поставить в качестве флага можно только один символ, посему ставь LF. Да, тут сделали замечание, о котором я забыл, по умолчанию, если не ошибаюсь, у модемов включена локальная эха. Или отключай ее или жди двух флагов. Если флаг не пришел до определнного таймаута - ошибка (даже если в порту есть данные, то это вряд ли ответ модема), если пришел - читай данные (но если ты ставил маску на несколько событий - проверяй какое сработало). Если сработало EV_RXFLAG - можешь читать сразу же. Данные уже в буфере и именно столько сколько надо. Просто выделяешь буфер побольше, ставишь (SetCommTimeouts) таймайты для RIT, RTTM, RTTC в MAXDWORD, 0, 0 соответственно и выполняешь ReadFile
А зачем? 08.01.04 23:10  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 08.01.04 23:13  Количество правок: 1
<"чистая" ссылка>
> Мне нужно точно определить время выполнения той или иной
> команды.. То, что приходит ОК если команда успешно, это
> понятно, но это в конце рузультата, мнеж нужно определить
> то время которое пройдёт прежде чем можно будет читать
> данные из порта!!!!
Зачем те это время нужно? Есть два вариант - делать периодический опрос порта на предмет наличия новых данных или юзать Overlapped режим, создавать дополнитенльный поток и ожидать в нем прихода новых данных (или проверять наличие данных по OVERLAPPED структуре в основном потоке когда твоей проге захочется узнать). Точного времени выполнения команд и прихода ответа от них предсказать никак нельзя. Ниче страшного не случится если твоя программа попытается прочитать данные из порта когда их там нет. В этом случае в зависимости от SetCommTimeouts она или зависнет на неопределенное время пока придут данные или подождет данных и прочитает их если они есть или вернется без данных.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach