{"id":311,"date":"2000-04-21T17:39:24","date_gmt":"2000-04-22T00:39:24","guid":{"rendered":"http:\/\/192.168.1.2\/wordpress\/?p=311"},"modified":"2013-03-13T17:56:29","modified_gmt":"2013-03-14T00:56:29","slug":"rs232-connecter","status":"publish","type":"post","link":"http:\/\/cywang.no-ip.org\/wordpress\/?p=311","title":{"rendered":"RS232 Connecter"},"content":{"rendered":"<p>\n\tThis is a simple example to connect a RS232 device. It supports following parameters:\n<\/p>\n<ul>\n<li>\n\t\tCom Port: COM1~COM11\n\t<\/li>\n<li>\n\t\tBaud Rate: 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 and 921600\n\t<\/li>\n<li>\n\t\tData Bit: 7 and 8\n\t<\/li>\n<li>\n\t\tStop Bit: 1, 1.5 and 2\n\t<\/li>\n<li>\n\t\tParity: no parity, odd, even, mark and space\n\t<\/li>\n<li>\n\t\tFlow Control: hardware, Xon\/Xoff and none\n\t<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>\n\t<a href=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/RS232.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"RS232\" class=\"alignnone size-full wp-image-312\" height=\"582\" src=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/RS232.jpg\" width=\"952\" srcset=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/RS232.jpg 952w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/RS232-300x183.jpg 300w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/RS232-490x300.jpg 490w\" sizes=\"auto, (max-width: 952px) 100vw, 952px\" \/><\/a>\n<\/p>\n<pre class=\"brush:cpp;\">\r\n\r\n\/\/ RS232_ConnectionDlg.cpp : implementation file\r\n\/\/\r\n\r\n#include &quot;stdafx.h&quot;\r\n#include &quot;RS232_Connection.h&quot;\r\n#include &quot;RS232_ConnectionDlg.h&quot;\r\n#include &quot;afxdialogex.h&quot;\r\n\r\n#ifdef _DEBUG\r\n#define new DEBUG_NEW\r\n#endif\r\n\r\n\r\nstruct THREAD_INFO\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;CString csCMD;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/HandlerCallback hCMD; \/\/for CALLBACK function\r\n&nbsp;&nbsp;&nbsp;&nbsp;HWND hWnd;\r\n}Thread_Info;\r\n\/\/---------------------------------------------------------------------------\r\n\r\nUINT StartCOMThread(LPVOID param)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;THREAD_INFO *Thread_Info = (THREAD_INFO*)param;\r\n&nbsp;&nbsp;&nbsp;&nbsp;CRS232_ConnectionDlg *TheDlg = (CRS232_ConnectionDlg*) (Thread_Info-&gt;hWnd);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;TheDlg-&gt;ComReceive(Thread_Info-&gt;csCMD);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;return 0;\r\n}\r\n\/\/---------------------------------------------------------------------------\r\n\r\n\r\n\/\/ CAboutDlg dialog used for App About\r\n\r\nclass CAboutDlg : public CDialogEx\r\n{\r\npublic:\r\n&nbsp;&nbsp;&nbsp;&nbsp;CAboutDlg();\r\n\r\n\/\/ Dialog Data\r\n&nbsp;&nbsp;&nbsp;&nbsp;enum { IDD = IDD_ABOUTBOX };\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected:\r\n&nbsp;&nbsp;&nbsp;&nbsp;virtual void DoDataExchange(CDataExchange* pDX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ DDX\/DDV support\r\n\r\n\/\/ Implementation\r\nprotected:\r\n&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()\r\n};\r\n\r\nCAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)\r\n{\r\n}\r\n\r\nvoid CAboutDlg::DoDataExchange(CDataExchange* pDX)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;CDialogEx::DoDataExchange(pDX);\r\n}\r\n\r\nBEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n\/\/ CRS232_ConnectionDlg dialog\r\n\r\n\r\n\r\n\r\nCRS232_ConnectionDlg::CRS232_ConnectionDlg(CWnd* pParent \/*=NULL*\/)\r\n&nbsp;&nbsp;&nbsp;&nbsp;: CDialogEx(CRS232_ConnectionDlg::IDD, pParent)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_hIcon = AfxGetApp()-&gt;LoadIcon(IDR_MAINFRAME);\r\n}\r\n\r\nvoid CRS232_ConnectionDlg::DoDataExchange(CDataExchange* pDX)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;CDialogEx::DoDataExchange(pDX);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_COMBO_ComPort, m_ComPort);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_COMBO_BaudRate, m_BaudRate);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_COMBO_DataBit, m_DataBit);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_COMBO_StopBit, m_StopBit);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_COMBO_Parity, m_Parity);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_COMBO_FlowControl, m_FlowControl);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_CHECK_LineFeed, m_LineFeed);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_Echo, m_Echo);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_CHECK_Recv_LineFeed, m_RecvLineFeed);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_EDIT_SendMessage, m_SendMessage);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_LIST_SendRecvHistory, m_ListSendRecvHistory);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_CHECK_RecvDataAuto, m_RecvAuto);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_BUTTON_Recv, m_BtnRecv);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_STATIC_img, m_ConnectStatusImg);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_BUTTON_Connect, m_BtnConnect);\r\n&nbsp;&nbsp;&nbsp;&nbsp;DDX_Control(pDX, IDC_BUTTON_Send, m_BtnSend);\r\n}\r\n\r\nBEGIN_MESSAGE_MAP(CRS232_ConnectionDlg, CDialogEx)\r\n&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_SYSCOMMAND()\r\n&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_PAINT()\r\n&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_QUERYDRAGICON()\r\n&nbsp;&nbsp;&nbsp;&nbsp;ON_BN_CLICKED(IDC_BUTTON_Connect, &amp;CRS232_ConnectionDlg::OnBnClickedButtonConnect)\r\n&nbsp;&nbsp;&nbsp;&nbsp;ON_BN_CLICKED(IDC_BUTTON_Send, &amp;CRS232_ConnectionDlg::OnBnClickedButtonSend)\r\n&nbsp;&nbsp;&nbsp;&nbsp;ON_BN_CLICKED(IDC_BUTTON_Recv, &amp;CRS232_ConnectionDlg::OnBnClickedButtonRecv)\r\nEND_MESSAGE_MAP()\r\n\r\n\r\n\/\/ CRS232_ConnectionDlg message handlers\r\n\r\nBOOL CRS232_ConnectionDlg::OnInitDialog()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;CDialogEx::OnInitDialog();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Add &quot;About...&quot; menu item to system menu.\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ IDM_ABOUTBOX must be in the system command range.\r\n&nbsp;&nbsp;&nbsp;&nbsp;ASSERT((IDM_ABOUTBOX &amp; 0xFFF0) == IDM_ABOUTBOX);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(IDM_ABOUTBOX &lt; 0xF000);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;CMenu* pSysMenu = GetSystemMenu(FALSE);\r\n&nbsp;&nbsp;&nbsp;&nbsp;if (pSysMenu != NULL)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL bNameValid;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString strAboutMenu;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(bNameValid);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!strAboutMenu.IsEmpty())\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSysMenu-&gt;AppendMenu(MF_SEPARATOR);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSysMenu-&gt;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Set the icon for this dialog.&nbsp;&nbsp;&nbsp;&nbsp; The framework does this automatically\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;&nbsp;&nbsp;&nbsp; when the application&#39;s main window is not a dialog\r\n&nbsp;&nbsp;&nbsp;&nbsp;SetIcon(m_hIcon, TRUE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Set big icon\r\n&nbsp;&nbsp;&nbsp;&nbsp;SetIcon(m_hIcon, FALSE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Set small icon\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/List Com Port\r\n&nbsp;&nbsp;&nbsp;&nbsp;CString csPort;\r\n&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 1 ; i &lt; 12 ; i++)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csPort.Format(&quot;COM%d&quot;, i);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ComPort.AddString(csPort);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ComPort.SetCurSel(0);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/List Baud Rate\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;110&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;300&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;1200&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;2400&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;4800&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;9600&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;19200&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;38400&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;57600&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;115200&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;230400&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;460800&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.AddString(&quot;921600&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.SetCurSel(5);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/List Data Bit\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_DataBit.AddString(&quot;7&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_DataBit.AddString(&quot;8&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_DataBit.SetCurSel(0);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/List Stop Bit\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_StopBit.AddString(&quot;1&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_StopBit.AddString(&quot;1.5&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_StopBit.AddString(&quot;2&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_StopBit.SetCurSel(0);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/List Parity\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.AddString(&quot;No parity&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.AddString(&quot;Odd&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.AddString(&quot;Even&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.AddString(&quot;Mark&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.AddString(&quot;Space&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.SetCurSel(0);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/List Flow Control\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_FlowControl.AddString(&quot;Hardware&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_FlowControl.AddString(&quot;Xon\/Xoff&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_FlowControl.AddString(&quot;None&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_FlowControl.SetCurSel(0);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/Insert ListControl Column\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.InsertColumn(0,&quot;&lt;-&gt;&quot;,LVCFMT_LEFT,40);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.InsertColumn(1,&quot;Time&quot;,LVCFMT_LEFT,120);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.InsertColumn(2,&quot;Message&quot;,LVCFMT_LEFT,240);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_RecvAuto.SetCheck(true);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ return TRUE&nbsp;&nbsp;&nbsp;&nbsp; unless you set the focus to a control\r\n}\r\n\r\nvoid CRS232_ConnectionDlg::EnableCOMSetting(bool enable)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ComPort.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BaudRate.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_DataBit.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_StopBit.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_Parity.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_FlowControl.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_LineFeed.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_RecvLineFeed.EnableWindow(enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BtnSend.EnableWindow(!enable);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_RecvAuto.EnableWindow(enable);\r\n}\r\n\r\nbool CRS232_ConnectionDlg::ComOpen(int iComNo, int iBaudRate, int iDataBit, \r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iStopBit, int iParityCheck)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_hComm != NULL)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComClose();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;iComNo++;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(iComNo &lt; 1 &amp;&amp; iComNo &gt; 10)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iComNo = 1;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;switch(iBaudRate)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 0:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 110;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 300;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 2:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 1200;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 3:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 2400;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 4:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 4800;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 5:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 9600;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 6:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 19200;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 7:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 38400;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 8:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 57600;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 9:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 115200;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 10:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 230400;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 11:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 460800;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 12:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 921600;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iBaudRate = 9600;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;switch(iDataBit)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 0:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iDataBit = 7;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iDataBit = 8;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;DCB PortDCB;\r\n&nbsp;&nbsp;&nbsp;&nbsp;COMMTIMEOUTS CommTimeouts;\r\n&nbsp;&nbsp;&nbsp;&nbsp;CString cs;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;cs.Format(&quot;COM%d&quot;, iComNo);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Open the serial port.\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_hComm = CreateFile(cs, \/\/ Pointer to the name of the port\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GENERIC_READ | GENERIC_WRITE, \/\/ Access (read\/write) mode\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Share mode\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Pointer to the security attribute\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPEN_EXISTING,\/\/ How to open the serial port\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Port attributes\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Handle to port with attribute\r\n\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_hComm == INVALID_HANDLE_VALUE) \r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;Open com port fails.&quot;,&quot;Error&quot;,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MB_ICONERROR | MB_OK);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.DCBlength = sizeof (DCB);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Get the default port setting information.\r\n&nbsp;&nbsp;&nbsp;&nbsp;GetCommState (m_hComm, &amp;PortDCB);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Change the DCB structure settings.\r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.BaudRate = iBaudRate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Current baud \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.ByteSize = iDataBit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Number of bits\/bytes, 4-8 \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.Parity = iParityCheck;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 0-4=no,odd,even,mark,space \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.StopBits = iStopBit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 0,1,2 = 1, 1.5, 2 \r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(iParityCheck &gt; 0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fParity = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Enable parity checking. \r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fParity = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Disable parity checking. \r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fBinary = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Binary mode; no EOF check \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fOutxCtsFlow = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ No CTS output flow control \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fOutxDsrFlow = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ No DSR output flow control \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fDtrControl = DTR_CONTROL_DISABLE; &nbsp;&nbsp;&nbsp;&nbsp;\/\/ DTR flow control type \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fDsrSensitivity = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ DSR sensitivity \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fTXContinueOnXoff = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ XOFF continues Tx \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fOutX = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ No XON\/XOFF out flow control \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fInX = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ No XON\/XOFF in flow control \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fErrorChar = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Disable error replacement. \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fNull = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Disable null stripping. \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fRtsControl = RTS_CONTROL_HANDSHAKE;\/\/RTS_CONTROL_DISABLE;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ RTS flow control \r\n&nbsp;&nbsp;&nbsp;&nbsp;PortDCB.fAbortOnError = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Do not abort reads\/writes on error.\r\n\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Configure the port according to the specifications of the DCB structure.\r\n&nbsp;&nbsp;&nbsp;&nbsp;if (!SetCommState (m_hComm, &amp;PortDCB))\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;Setting com DCB structure fails.&quot;,&quot;Error&quot;,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MB_ICONERROR | MB_OK);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComClose();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Retrieve the time-out parameters for all read and write operations on the port. \r\n&nbsp;&nbsp;&nbsp;&nbsp;GetCommTimeouts(m_hComm, &amp;CommTimeouts);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Change the COMMTIMEOUTS structure settings.\r\n&nbsp;&nbsp;&nbsp;&nbsp;CommTimeouts.ReadIntervalTimeout = MAXDWORD;&nbsp;&nbsp;&nbsp;&nbsp; \r\n&nbsp;&nbsp;&nbsp;&nbsp;CommTimeouts.ReadTotalTimeoutMultiplier = 0;&nbsp;&nbsp;&nbsp;&nbsp; \r\n&nbsp;&nbsp;&nbsp;&nbsp;CommTimeouts.ReadTotalTimeoutConstant = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r\n&nbsp;&nbsp;&nbsp;&nbsp;CommTimeouts.WriteTotalTimeoutMultiplier = 10;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 10&nbsp;&nbsp;&nbsp;&nbsp; \r\n&nbsp;&nbsp;&nbsp;&nbsp;CommTimeouts.WriteTotalTimeoutConstant = 1000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ 1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Set the time-out parameters for all read and write operations on the port. \r\n&nbsp;&nbsp;&nbsp;&nbsp;if (!SetCommTimeouts(m_hComm, &amp;CommTimeouts))\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;Setting com timeout parameters fails.&quot;,&quot;Error&quot;,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MB_ICONERROR | MB_OK);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComClose();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;EscapeCommFunction(m_hComm, SETDTR);\r\n&nbsp;&nbsp;&nbsp;&nbsp;EscapeCommFunction(m_hComm, SETRTS);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;ComClear();\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;return true;\r\n}\r\nbool CRS232_ConnectionDlg::IsComOpen()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_hComm != NULL)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;\r\n}\r\n\r\nbool CRS232_ConnectionDlg::ComSend(char *buffer, int iSize)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;unsigned long iLength = 0;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;int iErrorCount=0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;bool status = true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;while(WriteFile(m_hComm, buffer, iSize, &amp;iLength, NULL) == 0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/retransmission\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iErrorCount++;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iErrorCount&gt;5)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(100);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;return status;\r\n}\r\n\/\/---------------------------------------------------------------------------\r\nbool CRS232_ConnectionDlg::ComReceive(CString &amp;recvData)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;bool bResult;\r\n&nbsp;&nbsp;&nbsp;&nbsp;while(IsComOpen())\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long ulNumRead = 0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *buffer=new char[128];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer,0,128);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bResult = ::ReadFile(m_hComm,buffer, 128, &amp;ulNumRead, NULL);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!bResult &amp;&amp; ulNumRead == 0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bResult = false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else \r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recvData.Format(&quot;%s&quot;,buffer);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete [] buffer;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!bResult)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(50);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;return bResult;\r\n}\r\n\/\/---------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;\r\nvoid CRS232_ConnectionDlg::ComClear()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;PurgeComm(m_hComm, PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_RXABORT);\r\n}\r\n\/\/---------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;\r\nbool CRS232_ConnectionDlg::ComClose()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_hComm == INVALID_HANDLE_VALUE || m_hComm == NULL)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hComm = NULL;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;bool b = ::CloseHandle(m_hComm) == 0 ? false : true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(b)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hComm = NULL;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;return b;\r\n}\r\n\r\n\r\nvoid CRS232_ConnectionDlg::OnBnClickedButtonConnect()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_LineFeed.GetCheck())\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Line Feed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Carriage Return&nbsp;&nbsp;&nbsp;&nbsp;CR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\r\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csLineFeed = &quot;\\n&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csCarrierReture = &quot;\\r&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csLineFeed = &quot;&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csCarrierReture = &quot;&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_Echo.GetCheck())\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bEcho = true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bEcho = false;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_RecvLineFeed.GetCheck())\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csRecvLineFeed = &quot;\\n\\r&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csRecvLineFeed = &quot;&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/++++++++++Setting UI++++++++++\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_RecvAuto.GetCheck())\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bAutoRecv = true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bAutoRecv = false;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BtnRecv.ShowWindow(!bAutoRecv);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;tSysTime;\r\n&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;&nbsp;&nbsp;&nbsp;tm* ptm_time;\r\n&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;bufTime[2048];\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;time(&amp;tSysTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ptm_time = localtime(&amp;tSysTime);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;strftime(bufTime, sizeof(bufTime), &quot;%Y\/%m\/%d %H:%M:%S\\n&quot;, ptm_time);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.InsertItem(0,&quot;&lt;-&gt;&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/----------Setting UI----------\r\n\r\n\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;CString csBtnCaption;\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BtnConnect.GetWindowTextA(csBtnCaption);\r\n&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;&nbsp;&nbsp;&nbsp;ResultPic;\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(csBtnCaption == &quot;Connect&quot;)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/++++++++++Connect to RS232++++++++++\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool status;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString csMsg=&quot;&quot;;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = ComOpen(&nbsp;&nbsp;&nbsp;&nbsp; m_ComPort.GetCurSel(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ComNo\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_BaudRate.GetCurSel(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/BaudRate\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_DataBit.GetCurSel(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/DataBit\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_StopBit.GetCurSel(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/StopBit\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Parity.GetCurSel()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ParityCheck\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/----------Connect to RS232----------\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(status)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultPic.LoadBitmapA(IDB_BITMAP_CONNECT);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ConnectStatusImg.SetBitmap(HBITMAP(ResultPic));\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_BtnConnect.SetWindowTextA(&quot;Disconnect&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnableCOMSetting(false);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,1,bufTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,2,&quot;Connect&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,1,bufTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,2,&quot;Connect Fail&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;else if(csBtnCaption == &quot;Disconnect&quot;)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/++++++++++Disconnect RS232++++++++++\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool status = ComClose();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/----------Disconnect RS232----------\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(status)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultPic.LoadBitmapA(IDB_BITMAP_DISCONNECT);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ConnectStatusImg.SetBitmap(HBITMAP(ResultPic));\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_BtnConnect.SetWindowTextA(&quot;Connect&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnableCOMSetting(true);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,1,bufTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,2,&quot;Disconnect&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,1,bufTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,2,&quot;Disconnect Fail&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n}\r\n\r\nvoid CRS232_ConnectionDlg::OnBnClickedButtonSend()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;CString csMessage;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;tSysTime;\r\n&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;&nbsp;&nbsp;&nbsp;tm* ptm_time;\r\n&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;bufTime[2048];\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;time(&amp;tSysTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ptm_time = localtime(&amp;tSysTime);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;strftime(bufTime, sizeof(bufTime), &quot;%Y\/%m\/%d %H:%M:%S\\n&quot;, ptm_time);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_SendMessage.GetWindowTextA(csMessage);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.InsertItem(0,&quot;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,1,bufTime);\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_ListSendRecvHistory.SetItemText(0,2,csMessage+csLineFeed+csCarrierReture);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_RecvAuto.GetCheck())\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bAutoRecv = true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;else\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bAutoRecv = false;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;m_BtnRecv.ShowWindow(!bAutoRecv);\r\n}\r\n\r\nvoid CRS232_ConnectionDlg::OnBnClickedButtonRecv()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;if(m_hComm != NULL) \r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Thread_Info.csCMD = csRecvMsg;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Thread_Info.hCMD = AddMessage;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread_Info.hWnd = (HWND)theApp.m_hInstance;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(StartCOMThread, (LPVOID)&amp;Thread_Info, THREAD_PRIORITY_NORMAL);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}<\/pre>\n<p>\n\t&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a simple example to connect a RS232 device. It supports following parameters: Com Port: COM1~COM11 Baud Rate: 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 and 921600 Data Bit: 7 and 8 Stop Bit: &hellip; <a href=\"http:\/\/cywang.no-ip.org\/wordpress\/?p=311\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[7,3],"tags":[16,17],"class_list":["post-311","post","type-post","status-publish","format-standard","hentry","category-cc","category-programming","tag-mfc","tag-rs232"],"_links":{"self":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=311"}],"version-history":[{"count":3,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/311\/revisions"}],"predecessor-version":[{"id":315,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/311\/revisions\/315"}],"wp:attachment":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=311"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}