Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Как получить ответ от 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
3-1146564654
wirg
2006-05-02 14:10
2006.06.25
Помогите с кавычками


2-1149332528
Revan
2006-06-03 15:02
2006.06.25
MediaPlayer1.Length


1-1147946147
RUNaum
2006-05-18 13:55
2006.06.25
Разбираемся с перерисовкой.


1-1147857997
Kvinta
2006-05-17 13:26
2006.06.25
Как сохранить объект в фаил?


15-1148928902
i-s-v
2006-05-29 22:55
2006.06.25
Нитропруссид натрия