2025-11-27 16:46:48 +09:00

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;
}