Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

Как получить ответ от Com-порта?   Найти похожие ветки 

 
Аноним2000   (2006-05-25 22:51) [0]

Всем привет! Задача очень простая. На com-порте висит модем. Открываю com при помощи CreateFile. WriteFile-ом посылаю туда строку "AT\r". Как мне получить строку "OK" как в терминале?

И вообще, если не трудно, киньте ссылкой с материалами по теме? ;)


 
Marser ©   (2006-05-25 22:54) [1]

В йнексе навалом.


 
Marser ©   (2006-05-25 22:54) [2]

> йнексе

Яндексе.


 
isasa ©   (2006-05-25 23:16) [3]

Да, в Яндексе.:)
Только, сразу можно сказать, что модем работает в двух режимах: данных и команд. По умолчанию - в режиме данных. Для Ok! - надо перевести в режим команд. Там не все так просто(в смысле перевода - посыл +++, с определенной задержкой).
Ищи "модем" "команднвй режим".


 
wal ©   (2006-05-26 09:22) [4]


> [3] isasa ©   (25.05.06 23:16)
Неправда ваша, по умолчанию как раз в режиме команд. В режим данных переходит только после ATD, и при удачном коннекте. Но и в режиме команд есть нюанс, а именно два подрежима: отвечать текстом или кодом (то есть вместо "ОК" вполне можно получить "0"-ноль). Но, опять таки, по умолчанию, текстовый режим. Только тут еще один нюанс, настройки по умолчанию тоже могут быть изменены.

С уважением.


 
tesseract ©   (2006-05-26 10:50) [5]


> WriteFile-ом посылаю туда строку "AT\r". Как мне получить
> строку "OK" как в терминале?

Классный вопрос !!!
REadFile-ом конечно


 
Аноним2000   (2006-05-29 00:38) [6]


> Классный вопрос !!!
> REadFile-ом конечно

ну, попробуй :)

я добился своего.
надо просто подождать WaitCommEvent-ом события EV_RXCHAR.
тогда ReadFile прочитает что-то типа "AT\r\r\nOK\r\n"

единственная проблема - я понятия не имею сколько байтов нужно запросить в ReadFile. Дело в том, что если последний параметр ReadFile указать NULL (не OVERLAPPED I/O). то она не вернет управление пока не прочитает столько байто сколько я укажу (т.е. я не могу попросить ее прочитать с запасом).
Как быть? читать по одному символу? или юзать OVERLAPPED-режим?

но как? если напишу что-то типа:


HANDLE hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

OVERLAPPED ov;
memset ( &ov, 0, sizeof (ov) );
ov.hEvent = CreateEvent(0/*security*/, TRUE /*auto reset event*/, FALSE /*not signaled*/, 0);
   assert(ov.hEvent);
...
BOOL write_ok = ::WriteFile ( hCom, str, strlen(str), &written, &ov);

WriteFile не сработает


 
Аноним2000   (2006-05-29 00:47) [7]

2wal

я об этом слышал (о том, что вместо текстового ответа может код возвращаться). а не знаешь ли как при помощи API функций управлять этим делом?
интересно, кстати как при коннекте все эти мессаги тогда полезут что CONNECTED at 33600.. )

а модем кстати, верно, по умолчанию находится в коммандном режиме (мой по крайней мере:) )


 
Defunct ©   (2006-05-29 04:55) [8]

> единственная проблема - я понятия не имею сколько байтов нужно запросить в ReadFile.

по одному - не ошибетесь


 
tesseract ©   (2006-05-29 10:04) [9]


> Как быть? читать по одному символу? или юзать OVERLAPPED-
> режим?


Его надо юзать.

Пример определить сколько байт в буфере:

function TcomPort.pApiGetInCount: dword;
var  hCurState:TCOMSTAT;
    ErrCode:cardinal;
begin
  ClearCommError(hCom, ErrCode, @hCurState);
  result:=hCurState.cbInQue;
end;


 
Аноним2000   (2006-05-29 22:46) [10]

2Defunct
можно по одному, но это как-то не круто)
хотя http://www.codeproject.com/system/SerialPortComm.asp поступают именно так

2tesseract
точно! я никак не мог допереть! сенкс!
теперь все работает.

всем спасибо. еще поизучаю статьи на досуге


 
DiamondShark ©   (2006-05-30 00:02) [11]


> т.е. я не могу попросить ее прочитать с запасом

могу.
если тайм-ауты для порта настроить.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
4-1143231811
Delphi_is_cool
2006-03-24 23:23
2006.06.25
Как изменить цвет шрифта ? (Static)


15-1149081898
Lamer@fools.ua
2006-05-31 17:24
2006.06.25
Генератор документации для .NET (C#) 2.0


2-1149450252
ZV
2006-06-04 23:44
2006.06.25
???


15-1149209179
Коды
2006-06-02 04:46
2006.06.25
Зачем Linux сделали несовместимым с программами под Виндос?


15-1149121986
dancer
2006-06-01 04:33
2006.06.25
PHP: выборка из массива





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский