Re[4]: Как принять данные из COM-порта
От: Аноним  
Дата: 22.06.04 06:03
Оценка:
еще один вопрос по теме — есть некое устройство (носимый терминал транкинговой связи), понимающее АТ команды. необходимо написать небольшую программку которая бы эти команды слала и получала ответ. Почитал все ветки, посвященные работе с портами, написал примерно следующее:

char *buf_out="AT\r";
char *buf_in;

DWORD bc;
DCB *dcb;
COMMTIMEOUTS ct;
HANDLE port;
DWORD mask;


dcb=(DCB*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DCB));
BuildCommDCB("baud=38400 parity=N data=8 stop=1",dcb);
dcb->fNull=TRUE;

ct.ReadIntervalTimeout=50;
ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant=0;
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0;


port=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(port==INVALID_HANDLE_VALUE) {
MessageBox("Error");
ExitProcess(1);
}
else m_status.AddString("Com1 connected...");

GetCommState(port,dcb);
SetCommState(port,dcb);
SetCommTimeouts(port,&ct);
HeapFree(GetProcessHeap(),0,dcb);



buf_in=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,strlen(buf_out)+1);

WriteFile(port,buf_out,strlen(buf_out),&bc,NULL);

ReadFile(port,buf_in,strlen(buf_out),&bc,NULL);


Вообщем все как в приведенном примере. А в итоге вместо отмета "OK" я получаю в buf_in тоже самое что я слал в buf_out.

Подскажите что я делаю не так!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.