313 lines
8.8 KiB
C++
313 lines
8.8 KiB
C++
// ==========================================================================
|
|
// Class Implementation : COXSerialCommSetup
|
|
// ==========================================================================
|
|
|
|
// Source file : oxscstp.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 "OXSCSTP.H"
|
|
#include "OXSCCNST.H"
|
|
|
|
COXSerialCommSetup::COXSerialCommSetup(CString sTitle /*= _T("")*/, CWnd* pParent /*=NULL*/)
|
|
: CDialog(COXSerialCommSetup::IDD, pParent),
|
|
m_sCommTitle(sTitle)
|
|
{
|
|
//{{AFX_DATA_INIT(COXSerialCommSetup)
|
|
m_sBaudRate = _T("");
|
|
m_sDataBit = _T("");
|
|
m_sParity = _T("");
|
|
m_sPort = _T("");
|
|
m_sStopBit = _T("");
|
|
m_sFlowControl = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
void COXSerialCommSetup::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
if (!pDX->m_bSaveAndValidate)
|
|
{ // if loading
|
|
m_sPort = _T("Com x");
|
|
m_sPort.SetAt(4, (TCHAR)(m_config.m_nPortId + _T('1')));
|
|
m_sBaudRate = BaudRateToString(m_config.m_nBaudRate);
|
|
m_sDataBit = _T("x");
|
|
m_sDataBit.SetAt(0, (TCHAR)(m_config.m_nByteSize + _T('0')));
|
|
m_sParity = ParityToString(m_config.m_nParity);
|
|
m_sStopBit = (m_config.m_nStopBits == ONESTOPBIT) ? _T("1") : _T("2");
|
|
m_sFlowControl = FlowControlToString(m_config.m_eFlowControl);
|
|
}
|
|
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(COXSerialCommSetup)
|
|
DDX_CBString(pDX, IDC_BAUDRATE, m_sBaudRate);
|
|
DDX_CBString(pDX, IDC_DATABIT, m_sDataBit);
|
|
DDX_CBString(pDX, IDC_PARITY, m_sParity);
|
|
DDX_CBString(pDX, IDC_PORT, m_sPort);
|
|
DDX_CBString(pDX, IDC_STOPBIT, m_sStopBit);
|
|
DDX_CBString(pDX, IDC_FLOWCONTROL, m_sFlowControl);
|
|
//}}AFX_DATA_MAP
|
|
|
|
if (pDX->m_bSaveAndValidate)
|
|
{ // if saving
|
|
m_config.m_nPortId = (BYTE) (m_sPort[4] - _T('1'));
|
|
m_config.m_nBaudRate = BaudRateToVal(m_sBaudRate);
|
|
m_config.m_nByteSize = (BYTE) (m_sDataBit[0] - _T('0'));
|
|
m_config.m_nParity = ParityToVal(m_sParity);
|
|
m_config.m_nStopBits = (m_sStopBit == _T("1")) ? (BYTE)ONESTOPBIT : (BYTE)TWOSTOPBITS;
|
|
m_config.m_eFlowControl = FlowControlToVal(m_sFlowControl);
|
|
}
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(COXSerialCommSetup, CDialog)
|
|
//{{AFX_MSG_MAP(COXSerialCommSetup)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL COXSerialCommSetup::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
if (!m_sCommTitle.IsEmpty())
|
|
SetWindowText(m_sCommTitle);
|
|
|
|
CenterWindow();
|
|
return TRUE;
|
|
}
|
|
|
|
void COXSerialCommSetup::OnOK()
|
|
{
|
|
if (UpdateData(TRUE))
|
|
{
|
|
if (!m_config.IsPortAvailable())
|
|
{
|
|
AfxMessageBox(IDS_MSG_NO_PORT_AVAILABLE, MB_OK | MB_ICONSTOP);
|
|
CWnd* pPort = GetDlgItem(IDC_PORT); ASSERT (pPort != NULL);
|
|
pPort->SetFocus();
|
|
}
|
|
else
|
|
CDialog::OnOK();
|
|
}
|
|
}
|
|
|
|
CString COXSerialCommSetup::BaudRateToString(UINT nVal)
|
|
{
|
|
CString sString;
|
|
|
|
if (HIBYTE(nVal) != 0xff)
|
|
{
|
|
sString.Format(_T("%d"), nVal);
|
|
}
|
|
else
|
|
{
|
|
switch (nVal)
|
|
{
|
|
case CBR_110:
|
|
sString.LoadString(IDS_110);
|
|
break;
|
|
case CBR_300:
|
|
sString.LoadString(IDS_300);
|
|
break;
|
|
case CBR_600:
|
|
sString.LoadString(IDS_600);
|
|
break;
|
|
case CBR_1200:
|
|
sString.LoadString(IDS_1200);
|
|
break;
|
|
case CBR_2400:
|
|
sString.LoadString(IDS_2400);
|
|
break;
|
|
case CBR_4800:
|
|
sString.LoadString(IDS_4800);
|
|
break;
|
|
case CBR_9600:
|
|
sString.LoadString(IDS_9600);
|
|
break;
|
|
case CBR_14400:
|
|
sString.LoadString(IDS_14400);
|
|
ASSERT(FALSE); // not to be used (win3.1 bug!)
|
|
break;
|
|
case CBR_19200:
|
|
sString.LoadString(IDS_19200);
|
|
break;
|
|
case CBR_38400:
|
|
sString.LoadString(IDS_38400);
|
|
break;
|
|
case CBR_56000:
|
|
sString.LoadString(IDS_56000);
|
|
break;
|
|
#ifdef WIN32
|
|
case CBR_57600:
|
|
sString.LoadString(IDS_57600);
|
|
break;
|
|
case CBR_115200:
|
|
sString.LoadString(IDS_115200);
|
|
break;
|
|
#endif
|
|
case CBR_128000:
|
|
sString.LoadString(IDS_128000);
|
|
break;
|
|
case CBR_256000:
|
|
sString.LoadString(IDS_256000);
|
|
break;
|
|
default:
|
|
sString.LoadString(IDS_9600);
|
|
ASSERT(FALSE);
|
|
break;
|
|
}
|
|
}
|
|
return sString;
|
|
}
|
|
|
|
CString COXSerialCommSetup::ParityToString(BYTE nVal)
|
|
{
|
|
CString sString;
|
|
|
|
switch (nVal)
|
|
{
|
|
case NOPARITY:
|
|
sString.LoadString(IDS_NOPARITY);
|
|
break;
|
|
case ODDPARITY:
|
|
sString.LoadString(IDS_ODD);
|
|
break;
|
|
case EVENPARITY:
|
|
sString.LoadString(IDS_EVEN);
|
|
break;
|
|
case MARKPARITY:
|
|
sString.LoadString(IDS_MARK);
|
|
break;
|
|
case SPACEPARITY:
|
|
sString.LoadString(IDS_SPACE);
|
|
break;
|
|
default:
|
|
sString.LoadString(IDS_EVEN);
|
|
ASSERT(FALSE);
|
|
break;
|
|
}
|
|
return sString;
|
|
}
|
|
|
|
CString COXSerialCommSetup::FlowControlToString(COXSerialCommConfig::EFlowControl eVal)
|
|
{
|
|
CString sString;
|
|
|
|
switch (eVal)
|
|
{
|
|
case COXSerialCommConfig::NONE:
|
|
sString.LoadString(IDS_NONE);
|
|
break;
|
|
case COXSerialCommConfig::HARDWARE:
|
|
sString.LoadString(IDS_HARDWARE);
|
|
break;
|
|
case COXSerialCommConfig::XON_XOFF:
|
|
sString.LoadString(IDS_XONXOFF);
|
|
break;
|
|
default:
|
|
sString.LoadString(IDS_NONE);
|
|
ASSERT(FALSE);
|
|
break;
|
|
}
|
|
return sString;
|
|
}
|
|
|
|
UINT COXSerialCommSetup::BaudRateToVal(CString sString)
|
|
{
|
|
CString sTemp;
|
|
UINT nRetVal;
|
|
|
|
sTemp.LoadString(IDS_14400);
|
|
if (sString == sTemp)
|
|
nRetVal = 14400; // to avoid windows 3.1 bug!
|
|
else {
|
|
if (sTemp.LoadString(IDS_110) && sString == sTemp)
|
|
nRetVal = CBR_110;
|
|
else if (sTemp.LoadString(IDS_300) && sString == sTemp)
|
|
nRetVal = CBR_300;
|
|
else if (sTemp.LoadString(IDS_600) && sString == sTemp)
|
|
nRetVal = CBR_600;
|
|
else if (sTemp.LoadString(IDS_1200) && sString == sTemp)
|
|
nRetVal = CBR_1200;
|
|
else if (sTemp.LoadString(IDS_2400) && sString == sTemp)
|
|
nRetVal = CBR_2400;
|
|
else if (sTemp.LoadString(IDS_4800) && sString == sTemp)
|
|
nRetVal = CBR_4800;
|
|
else if (sTemp.LoadString(IDS_9600) && sString == sTemp)
|
|
nRetVal = CBR_9600;
|
|
else if (sTemp.LoadString(IDS_14400) && sString == sTemp)
|
|
nRetVal = CBR_14400;
|
|
else if (sTemp.LoadString(IDS_19200) && sString == sTemp)
|
|
nRetVal = CBR_19200;
|
|
else if (sTemp.LoadString(IDS_38400) && sString == sTemp)
|
|
nRetVal = CBR_38400;
|
|
else if (sTemp.LoadString(IDS_56000) && sString == sTemp)
|
|
nRetVal = CBR_56000;
|
|
#ifdef WIN32
|
|
else if (sTemp.LoadString(IDS_57600) && sString == sTemp)
|
|
nRetVal = CBR_57600;
|
|
else if (sTemp.LoadString(IDS_115200) && sString == sTemp)
|
|
nRetVal = CBR_115200;
|
|
#endif
|
|
else if (sTemp.LoadString(IDS_128000) && sString == sTemp)
|
|
nRetVal = CBR_128000;
|
|
else if (sTemp.LoadString(IDS_256000) && sString == sTemp)
|
|
nRetVal = CBR_256000;
|
|
else
|
|
{
|
|
ASSERT(FALSE);
|
|
nRetVal = CBR_9600;
|
|
}
|
|
}
|
|
return nRetVal;
|
|
}
|
|
|
|
BYTE COXSerialCommSetup::ParityToVal(CString sString)
|
|
{
|
|
CString sTemp;
|
|
BYTE nRetVal;
|
|
|
|
if (sTemp.LoadString(IDS_NOPARITY) && sString == sTemp)
|
|
nRetVal = NOPARITY;
|
|
else if (sTemp.LoadString(IDS_ODD) && sString == sTemp)
|
|
nRetVal = ODDPARITY;
|
|
else if (sTemp.LoadString(IDS_EVEN) && sString == sTemp)
|
|
nRetVal = EVENPARITY;
|
|
else if (sTemp.LoadString(IDS_MARK) && sString == sTemp)
|
|
nRetVal = MARKPARITY;
|
|
else if (sTemp.LoadString(IDS_SPACE) && sString == sTemp)
|
|
nRetVal = SPACEPARITY;
|
|
else
|
|
{
|
|
ASSERT(FALSE);
|
|
nRetVal = EVENPARITY;
|
|
}
|
|
return nRetVal;
|
|
}
|
|
|
|
COXSerialCommConfig::EFlowControl COXSerialCommSetup::FlowControlToVal(CString sString)
|
|
{
|
|
CString sTemp;
|
|
COXSerialCommConfig::EFlowControl eRetVal;
|
|
|
|
if (sTemp.LoadString(IDS_NONE) && sString == sTemp)
|
|
eRetVal = COXSerialCommConfig::NONE;
|
|
else if (sTemp.LoadString(IDS_HARDWARE) && sString == sTemp)
|
|
eRetVal = COXSerialCommConfig::HARDWARE;
|
|
else if (sTemp.LoadString(IDS_XONXOFF) && sString == sTemp)
|
|
eRetVal = COXSerialCommConfig::XON_XOFF;
|
|
else
|
|
{
|
|
ASSERT(0);
|
|
eRetVal = COXSerialCommConfig::NONE;
|
|
}
|
|
return eRetVal;
|
|
}
|