215 lines
5.9 KiB
C++
215 lines
5.9 KiB
C++
// ==========================================================================
|
|
// Class Implementation : COXSerialCommConfig
|
|
// ==========================================================================
|
|
|
|
// Source file : oxsccfg.cpp
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "OXSCCFG.H"
|
|
#include "OXSCSTP.H"
|
|
#include "OXSRLZR.H"
|
|
#include "OXSCCNST.H"
|
|
|
|
//private headers
|
|
#include "OXRSERCM.H"
|
|
|
|
IMPLEMENT_SERIAL(COXSerialCommConfig, CObject, 1)
|
|
|
|
|
|
COXSerialCommConfig::COXSerialCommConfig() :
|
|
m_nPortId(0),
|
|
m_nBaudRate(CBR_9600),
|
|
m_nByteSize(8),
|
|
m_nParity(NOPARITY),
|
|
m_nStopBits(ONESTOPBIT),
|
|
m_eFlowControl(NONE),
|
|
m_nSizeReceivingQueue(DefaultSizeReceivingQueue),
|
|
m_nSizeTransmissionQueue(DefaultSizeTransmissionQueue),
|
|
m_nCdTimeout(DefaultCdTimeout),
|
|
m_nCtsTimeout(DefaultCtsTimeout),
|
|
m_nDsrTimeout(DefaultDsrTimeout)
|
|
{
|
|
}
|
|
|
|
COXSerialCommConfig::COXSerialCommConfig(COXSerialCommConfig& config)
|
|
{
|
|
m_nPortId=config.m_nPortId;
|
|
m_nBaudRate=config.m_nBaudRate;
|
|
m_nByteSize=config.m_nByteSize;
|
|
m_nParity=config.m_nParity;
|
|
m_nStopBits=config.m_nStopBits;
|
|
m_eFlowControl=config.m_eFlowControl;
|
|
|
|
m_nSizeReceivingQueue=config.m_nSizeReceivingQueue;
|
|
m_nSizeTransmissionQueue=config.m_nSizeTransmissionQueue;
|
|
m_nCdTimeout=config.m_nCdTimeout;
|
|
|
|
m_nCtsTimeout=config.m_nCtsTimeout;
|
|
m_nDsrTimeout=config.m_nDsrTimeout;
|
|
}
|
|
|
|
CString COXSerialCommConfig::GetCommName() const
|
|
{
|
|
CString sComX;
|
|
|
|
// sComX.Format(_T("COM%c"), (char) (m_nPortId + '1'));
|
|
sComX.Format(_T("COM%d"), m_nPortId+1);
|
|
return sComX;
|
|
}
|
|
|
|
int COXSerialCommConfig::DoConfigDialog(CString sTitle /* = NULL */)
|
|
{
|
|
int nResult;
|
|
COXSerialCommSetup dlg(sTitle);
|
|
|
|
dlg.m_config = *this;
|
|
if ((nResult = dlg.DoModal()) == IDOK)
|
|
*this = dlg.m_config;
|
|
return nResult;
|
|
}
|
|
|
|
BOOL COXSerialCommConfig::IsPortAvailable() const
|
|
{
|
|
CString sComX;
|
|
HANDLE hCommDevice;
|
|
|
|
/* if (m_nPortId > 8)
|
|
return FALSE;*/
|
|
// sComX.Format(_T("COM%c"), (char)m_nPortId + '1');
|
|
sComX.Format(_T("COM%d"), m_nPortId+1);
|
|
if ((hCommDevice =::CreateFile(sComX,
|
|
GENERIC_READ |
|
|
GENERIC_WRITE,
|
|
0,
|
|
NULL,
|
|
OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL |
|
|
FILE_FLAG_SEQUENTIAL_SCAN,
|
|
NULL))
|
|
!= INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hCommDevice);
|
|
return TRUE;
|
|
}
|
|
TRACE1("COXSerialCommConfig::IsPortAvailable(): port %s unavailable",sComX);
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL COXSerialCommConfig::Load(CString sFileName)
|
|
{
|
|
COXSerializer serializer;
|
|
BOOL bRetVal = TRUE;
|
|
|
|
if (sFileName.IsEmpty())
|
|
sFileName.LoadString(IDS_DEFAULTFILE);
|
|
VERIFY(serializer.Initialize(sFileName, this));
|
|
if (!serializer.Load(FALSE))
|
|
{
|
|
if (serializer.m_fileException.m_cause == CFileException::fileNotFound)
|
|
{
|
|
CString sString;
|
|
sString.Format(IDS_MSG_DEFAULT_CONFIG, GetCommName());
|
|
AfxMessageBox(sString, MB_OK | MB_ICONINFORMATION);
|
|
}
|
|
else
|
|
{
|
|
if (!serializer.Load())
|
|
{
|
|
CString sString;
|
|
sString.Format(IDS_MSG_BAD_CONFIG, GetCommName());
|
|
AfxMessageBox(sString, MB_OK | MB_ICONINFORMATION);
|
|
bRetVal = FALSE;
|
|
}
|
|
}
|
|
serializer.Save();
|
|
}
|
|
return bRetVal;
|
|
}
|
|
|
|
BOOL COXSerialCommConfig::Save(CString sFileName)
|
|
{
|
|
COXSerializer serializer;
|
|
BOOL bRetVal = TRUE;
|
|
|
|
if (sFileName.IsEmpty())
|
|
sFileName.LoadString(IDS_DEFAULTFILE);
|
|
VERIFY(serializer.Initialize(sFileName,this));
|
|
if (!serializer.Save())
|
|
{
|
|
CString sString;
|
|
sString.Format(IDS_MSG_NO_SAVE, GetCommName());
|
|
AfxMessageBox(sString, MB_OK | MB_ICONINFORMATION);
|
|
bRetVal = FALSE;
|
|
}
|
|
return bRetVal;
|
|
}
|
|
|
|
COXSerialCommConfig& COXSerialCommConfig::operator = (const COXSerialCommConfig& config)
|
|
{
|
|
m_nPortId = config.m_nPortId;
|
|
m_nBaudRate = config.m_nBaudRate;
|
|
m_nByteSize = config.m_nByteSize;
|
|
m_nParity= config.m_nParity;
|
|
m_nStopBits = config.m_nStopBits;
|
|
m_eFlowControl = config.m_eFlowControl;
|
|
|
|
m_nSizeReceivingQueue = config.m_nSizeReceivingQueue;
|
|
m_nSizeTransmissionQueue = config.m_nSizeTransmissionQueue;
|
|
m_nCdTimeout = config.m_nCdTimeout;
|
|
m_nCtsTimeout = config.m_nCtsTimeout;
|
|
m_nDsrTimeout = config.m_nDsrTimeout;
|
|
|
|
return *this;
|
|
}
|
|
|
|
// protected:
|
|
|
|
void COXSerialCommConfig::Serialize(CArchive& ar)
|
|
// --- In: ar: the archive this object has to serialize to or from
|
|
// --- Out: none
|
|
// --- Returns: none
|
|
// --- Effect: reading or writing to the archive depending of
|
|
// the read/write state of the archive
|
|
{
|
|
CObject::Serialize(ar);
|
|
|
|
if (ar.IsStoring())
|
|
{
|
|
ar << m_nPortId;
|
|
ar << (WORD)m_nBaudRate;
|
|
ar << m_nByteSize;
|
|
ar << m_nParity;
|
|
ar << m_nStopBits;
|
|
ar << (WORD)m_eFlowControl;
|
|
ar << (WORD)m_nSizeReceivingQueue;
|
|
ar << (WORD)m_nSizeTransmissionQueue;
|
|
ar << (WORD)m_nCdTimeout;
|
|
ar << (WORD)m_nCtsTimeout;
|
|
ar << (WORD)m_nDsrTimeout;
|
|
}
|
|
else
|
|
{
|
|
ar >> m_nPortId;
|
|
WORD tmp;
|
|
ar >> tmp; m_nBaudRate = (UINT) tmp;
|
|
ar >> m_nByteSize;
|
|
ar >> m_nParity;
|
|
ar >> m_nStopBits;
|
|
ar >> tmp; m_eFlowControl = (EFlowControl) tmp;
|
|
ar >> tmp; m_nSizeReceivingQueue = (UINT) tmp;
|
|
ar >> tmp; m_nSizeTransmissionQueue = (UINT) tmp;
|
|
ar >> tmp; m_nCdTimeout = (UINT) tmp;
|
|
ar >> tmp; m_nCtsTimeout = (UINT) tmp;
|
|
ar >> tmp; m_nDsrTimeout = (UINT) tmp;
|
|
}
|
|
}
|