Загружаю комп втыкаю модем, запускаю прогу - всё виснет, соединения - нет.
Закрываю прогу. Запускаю гипертерминал. Ввожу любую команду - всё ништяк, устройство отвечает.
Закрываю гипертерминал. Запускаю прогу, и всё уже пашет без проблем, только установка настроек порта(SetCommState(Port, &dcb) странно работет (то работает, то не работает, но восновном не работает).
Так вроде в DCB всё указываю что надо для работы устройства.
Исходник открытия и настройки порта:
if(PortOpen == 1) return false;
DCB dcb;
COMMTIMEOUTS ct;
unsigned long int bc;
//dcb = (DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
//BuildCommDCB("baud = 9600 parity = N data = 8 stop = 1", &dcb);
dcb.fBinary = TRUE;
dcb.BaudRate = 9600;
dcb.fParity = NOPARITY;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fNull = TRUE; //Èãíîðèðîâàíèå íóëåâûõ áàéò ïðè ïðè¸ìå
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
ct.ReadIntervalTimeout = D_TimeOutValue;
ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant = D_TimeOutValue;
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant = D_TimeOutValue;
Port = CreateFile(D_COM_Name, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(Port == INVALID_HANDLE_VALUE)
{
Application->MessageBox(D_ComOpenError, D_Error, MB_OK+MB_ICONERROR);
ComPortClose();
return FALSE;
}
if(!SetCommState(Port, &dcb))
{
// Application->MessageBox(D_ComOpenError, D_Error, MB_OK+MB_ICONERROR);
// ComPortClose();
// return false;
}
if (!SetCommTimeouts(Port, &ct))
{
Application->MessageBox(D_ComOpenError, D_Error, MB_OK+MB_ICONERROR);
ComPortClose();
return FALSE;
}
else PortOpen = 1;
PurgeComm(Port, PURGE_RXABORT);
PurgeComm(Port, PURGE_TXCLEAR|PURGE_RXCLEAR);
Подскажите, пожалуста, как решить эту проблему.
