Обмен данными с модемом

Привет, Артем!
Суть проблемы такова: в модемах 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(); //Окно с сообщением о результате
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Клементьев В.А.