Привет, Артем! Суть проблемы такова: в модемах ZyXEL U-336E существует сложность с полноценным сохранением конфигурации. Говорят, что партия бракованная и т.д., в общем, настроить их раз и навсегда никто не может. Большинство настроек после выключения/включения питания пропадает. Ну пропадает и ладно :-) Можно каждый раз делать это программно. Скажем, тачка непрерывно работает по Dial-Up'у произошел облом с питанием, загружаем заново, и хотим поставить скорость порта 38400, еще чтобы модем сразу начал дозваниваться и осуществлял повторный перезвон при не установке соединения через 20 с. Т.е. в терминале программирование модема выглядело бы примерно так: AT&ATQ0 >OK ATS7=20 >OK Ну а в программе: см. исходник CComportDlg::SetModem(). Клементьев В.А
А вот и эта функция.
void CComportDlg::SetModem() //Настраиваем модем { BOOL bResult = TRUE; m_sComPort = "Com1"; m_hCom = CreateFile(m_sComPort, GENERIC_READ | GENERIC_WRITE, 0, // эксклюзивный доступ NULL, // никакой безопасности :-) OPEN_EXISTING, 0, NULL); m_bPortReady = SetupComm(m_hCom, 128, 128); // установка размера буфера m_bPortReady = GetCommState(m_hCom, &m_dcb); m_dcb.BaudRate = nBaudRate; //38400 m_dcb.ByteSize = nByteSize; //8 m_dcb.Parity = NOPARITY; m_dcb.StopBits = ONESTOPBIT; m_dcb.fAbortOnError = TRUE; m_bPortReady = SetCommState(m_hCom, &m_dcb); m_bPortReady = GetCommTimeouts (m_hCom, &m_CommTimeouts); m_CommTimeouts.ReadIntervalTimeout = nReadIntervalTimeout; //50 m_CommTimeouts.ReadTotalTimeoutConstant = nReadTotalTimeoutConstant; //50 m_CommTimeouts.ReadTotalTimeoutMultiplier = nReadTotalTimeoutMultiplier; //10 m_CommTimeouts.WriteTotalTimeoutConstant = nWriteTotalTimeoutConstant; //50 m_CommTimeouts.WriteTotalTimeoutMultiplier = nWriteTotalTimeoutMultiplier; //10 m_bPortReady = SetCommTimeouts (m_hCom, &m_CommTimeouts); sFirstCommand+="\r"; //AT&ATQ0 sSecondCommand+="\r"; //ATS7=20 // Первая команда bWriteRC = WriteFile(m_hCom, (LPCVOID) sFirstCommand, 8, &iBytesWritten, NULL); ReadPortData(); //Считываем ответ if(sPortValue.Find("OK", 0) != -1) //Если вернулось "ОК" или "0" { //Вторая команда (тоже самое) bWriteRC = WriteFile(m_hCom, (LPCVOID)sSecondCommand, 8, &iBytesWritten, NULL); ReadPortData(); if(sPortValue.Find("OK", 0) == -1) bResult = FALSE; } else bResult = FALSE; //Результат обеих команд if(bResult) dlgRep.m_RepString="Modem initialization is OK"; else dlgRep.m_RepString="Modem initialization error occur"; CloseHandle(m_hCom); m_uTimerID = SetTimer(0x451,1000,NULL); dlgRep.DoModal(); //Окно с сообщением о результате }