commtestDlg.cpp
上传用户:skyblue117
上传日期:2013-02-13
资源大小:53k
文件大小:13k
源码类别:

串口编程

开发平台:

Visual C++

  1. /*
  2. ** FILENAME CommTestDlg.cpp
  3. **
  4. ** PURPOSE This is the dialog that shows the comm activity.
  5. **
  6. ** CREATION DATE 15-09-1997
  7. ** LAST MODIFICATION 12-11-1997
  8. **
  9. ** AUTHOR Remon Spekreijse
  10. **
  11. */
  12. #include "stdafx.h"
  13. #include "commtest.h"
  14. #include "commtestDlg.h"
  15. #include "configdlg.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21. CCommtestDlg::CCommtestDlg(CWnd* pParent /*=NULL*/)
  22. : CDialog(CCommtestDlg::IDD, pParent)
  23. {
  24. //{{AFX_DATA_INIT(CCommtestDlg)
  25. // NOTE: the ClassWizard will add member initialization here
  26. //}}AFX_DATA_INIT
  27. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  28. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  29. }
  30. void CCommtestDlg::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CDialog::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CCommtestDlg)
  34. // NOTE: the ClassWizard will add DDX and DDV calls here
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CCommtestDlg, CDialog)
  38. //{{AFX_MSG_MAP(CCommtestDlg)
  39. ON_WM_PAINT()
  40. ON_WM_QUERYDRAGICON()
  41. ON_BN_CLICKED(IDC_BUTTON1, OnSendButton1)
  42. ON_BN_CLICKED(IDC_BUTTON2, OnSendButton2)
  43. ON_BN_CLICKED(IDC_BUTTON3, OnSendButton3)
  44. ON_BN_CLICKED(IDC_BUTTON4, OnSendButton4)
  45. ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
  46. ON_MESSAGE(WM_COMM_CTS_DETECTED, OnCTSDetected)
  47. ON_BN_CLICKED(IDC_BUTTON7, OnClearButton1)
  48. ON_BN_CLICKED(IDC_BUTTON8, OnClearButton2)
  49. ON_BN_CLICKED(IDC_BUTTON9, OnClearButton3)
  50. ON_BN_CLICKED(IDC_BUTTON10, OnClearButton4)
  51. ON_BN_CLICKED(IDC_CONFIGBUTTON1, OnConfigbutton1)
  52. ON_BN_CLICKED(IDC_CONFIGBUTTON2, OnConfigbutton2)
  53. ON_BN_CLICKED(IDC_CONFIGBUTTON3, OnConfigbutton3)
  54. ON_BN_CLICKED(IDC_CONFIGBUTTON4, OnConfigbutton4)
  55. //}}AFX_MSG_MAP
  56. END_MESSAGE_MAP()
  57. BOOL CCommtestDlg::OnInitDialog()
  58. {
  59. CDialog::OnInitDialog();
  60. // Set the icon for this dialog.  The framework does this automatically
  61. //  when the application's main window is not a dialog
  62. SetIcon(m_hIcon, TRUE); // Set big icon
  63. SetIcon(m_hIcon, FALSE); // Set small icon
  64. m_ListBox[0].SubclassDlgItem(IDC_LIST1, this);
  65. m_ListBox[1].SubclassDlgItem(IDC_LIST2, this);
  66. m_ListBox[2].SubclassDlgItem(IDC_LIST3, this);
  67. m_ListBox[3].SubclassDlgItem(IDC_LIST4, this);
  68. m_Edit[0].SubclassDlgItem(IDC_EDIT1, this);
  69. m_Edit[1].SubclassDlgItem(IDC_EDIT2, this);
  70. m_Edit[2].SubclassDlgItem(IDC_EDIT3, this);
  71. m_Edit[3].SubclassDlgItem(IDC_EDIT4, this);
  72. // init the ports
  73. for (int i = 0; i < 4; i++)
  74. {
  75. if (m_Ports[i].InitPort(this, i + 1, i == 0 ? 9600 : 19200))
  76. m_Ports[i].StartMonitoring();
  77. else
  78. {
  79. // port not found
  80. m_Edit[i].SetWindowText("NOT FOUND");
  81. m_Edit[i].EnableWindow(FALSE);
  82. m_ListBox[i].EnableWindow(FALSE);
  83. }
  84. }
  85. return TRUE;  // return TRUE  unless you set the focus to a control
  86. }
  87. void CCommtestDlg::OnPaint() 
  88. {
  89. if (IsIconic())
  90. {
  91. CPaintDC dc(this); // device context for painting
  92. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  93. // Center icon in client rectangle
  94. int cxIcon = GetSystemMetrics(SM_CXICON);
  95. int cyIcon = GetSystemMetrics(SM_CYICON);
  96. CRect rect;
  97. GetClientRect(&rect);
  98. int x = (rect.Width() - cxIcon + 1) / 2;
  99. int y = (rect.Height() - cyIcon + 1) / 2;
  100. // Draw the icon
  101. dc.DrawIcon(x, y, m_hIcon);
  102. }
  103. else
  104. {
  105. CDialog::OnPaint();
  106. }
  107. }
  108. HCURSOR CCommtestDlg::OnQueryDragIcon()
  109. {
  110. return (HCURSOR) m_hIcon;
  111. }
  112. void CCommtestDlg::OnSendButton1() 
  113. {
  114. char buf[100];
  115. memset(&buf, 0, sizeof(buf));
  116. GetDlgItemText(IDC_EDIT1, buf, sizeof(buf));
  117. if (strcmp("NOT FOUND", buf) == 0)
  118. return;
  119. if (((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck())
  120. buf[strlen(buf)] = 13;
  121. m_Ports[0].WriteToPort(buf);
  122. }
  123. void CCommtestDlg::OnSendButton2() 
  124. {
  125. char buf[100];
  126. memset(&buf, 0, sizeof(buf));
  127. GetDlgItemText(IDC_EDIT2, buf, sizeof(buf));
  128. if (strcmp("NOT FOUND", buf) == 0)
  129. return;
  130. if (((CButton*)GetDlgItem(IDC_CHECK2))->GetCheck())
  131. buf[strlen(buf)] = 13;
  132. m_Ports[1].WriteToPort(buf);
  133. }
  134. void CCommtestDlg::OnSendButton3() 
  135. {
  136. char buf[100];
  137. memset(&buf, 0, sizeof(buf));
  138. GetDlgItemText(IDC_EDIT3, buf, sizeof(buf));
  139. if (strcmp("NOT FOUND", buf) == 0)
  140. return;
  141. if (((CButton*)GetDlgItem(IDC_CHECK3))->GetCheck())
  142. buf[strlen(buf)] = 13;
  143. m_Ports[2].WriteToPort(buf);
  144. }
  145. void CCommtestDlg::OnSendButton4() 
  146. {
  147. char buf[100];
  148. memset(&buf, 0, sizeof(buf));
  149. GetDlgItemText(IDC_EDIT4, buf, sizeof(buf));
  150. if (strcmp("NOT FOUND", buf) == 0)
  151. return;
  152. if (((CButton*)GetDlgItem(IDC_CHECK4))->GetCheck())
  153. buf[strlen(buf)] = 13;
  154. m_Ports[3].WriteToPort(buf);
  155. }
  156. LONG CCommtestDlg::OnCommunication(WPARAM ch, LPARAM port)
  157. {
  158. if (port <= 0 || port > 4)
  159. return -1;
  160. if (ch == 13 && ((CButton*)GetDlgItem(IDC_CHECK5 + port - 1))->GetCheck())
  161. {
  162. m_ListBox[port-1].AddString(m_strReceived[port-1]);
  163. m_ListBox[port-1].SetSel(m_ListBox[port-1].GetCount()-1, TRUE);
  164. (m_strReceived[port-1]).Empty();
  165. }
  166. else if (((CButton*)GetDlgItem(IDC_CHECK5 + port - 1))->GetCheck())
  167. m_strReceived[port-1] += (char)ch;
  168. else
  169. {
  170. CString string;
  171. string += (char)ch;
  172. m_ListBox[port-1].AddString(string);
  173. m_ListBox[port-1].SetSel(m_ListBox[port-1].GetCount()-1, TRUE);
  174. }
  175. return 0;
  176. }
  177. LONG CCommtestDlg::OnCTSDetected(WPARAM, LPARAM port)
  178. {
  179. if (port <= 0 || port > 4)
  180. return -1;
  181. CString string;
  182. string = "Clear To Send";
  183. m_ListBox[port-1].AddString(string);
  184. m_ListBox[port-1].SetSel(m_ListBox[port-1].GetCount()-1, TRUE);
  185. return 0;
  186. }
  187. void CCommtestDlg::OnClearButton1() 
  188. {
  189. m_ListBox[0].ResetContent();
  190. }
  191. void CCommtestDlg::OnClearButton2() 
  192. {
  193. m_ListBox[1].ResetContent();
  194. }
  195. void CCommtestDlg::OnClearButton3() 
  196. {
  197. m_ListBox[2].ResetContent();
  198. }
  199. void CCommtestDlg::OnClearButton4() 
  200. {
  201. m_ListBox[3].ResetContent();
  202. }
  203. void CCommtestDlg::OnConfigbutton1() 
  204. {
  205. CConfigDlg* dlg = new CConfigDlg(this, m_Ports[0].GetDCB());
  206. dlg->m_strSendBuffer.Format("%d", m_Ports[0].GetWriteBufferSize());
  207. DWORD dwCommEvents = m_Ports[0].GetCommEvents();
  208. dlg->m_CommBreakDetected = (dwCommEvents & EV_BREAK) > 0 ? TRUE : FALSE;
  209. dlg->m_CommCTSDetected   = (dwCommEvents & EV_CTS) > 0 ? TRUE : FALSE;
  210. dlg->m_CommDSRDetected   = (dwCommEvents & EV_DSR) > 0 ? TRUE : FALSE;
  211. dlg->m_CommERRDetected   = (dwCommEvents & EV_ERR) > 0 ? TRUE : FALSE;
  212. dlg->m_CommRingDetected  = (dwCommEvents & EV_RING) > 0 ? TRUE : FALSE;
  213. dlg->m_CommRLSDDetected  = (dwCommEvents & EV_RLSD) > 0 ? TRUE : FALSE;
  214. dlg->m_CommRxchar        = (dwCommEvents & EV_RXCHAR) > 0 ? TRUE : FALSE;
  215. dlg->m_CommRxcharFlag    = (dwCommEvents & EV_RXFLAG) > 0 ? TRUE : FALSE;
  216. dlg->m_CommTXEmpty       = (dwCommEvents & EV_TXEMPTY) > 0 ? TRUE : FALSE;
  217. if (dlg->DoModal() == IDOK)
  218. {
  219. DWORD dwCommEvents = 0;
  220. if (dlg->m_CommBreakDetected)
  221. dwCommEvents |= EV_BREAK;
  222. if (dlg->m_CommCTSDetected)
  223. dwCommEvents |= EV_CTS;
  224. if (dlg->m_CommDSRDetected)
  225. dwCommEvents |= EV_DSR;
  226. if (dlg->m_CommERRDetected)
  227. dwCommEvents |= EV_ERR;
  228. if (dlg->m_CommRingDetected)
  229. dwCommEvents |= EV_RING;
  230. if (dlg->m_CommRLSDDetected)
  231. dwCommEvents |= EV_RLSD;
  232. if (dlg->m_CommRxchar)
  233. dwCommEvents |= EV_RXCHAR;
  234. if (dlg->m_CommRxcharFlag)
  235. dwCommEvents |= EV_RXFLAG;
  236. if (dlg->m_CommTXEmpty)
  237. dwCommEvents |= EV_TXEMPTY;
  238. m_Ports[0].InitPort(this, 1, 
  239. atoi(dlg->m_strBaudRate),
  240. dlg->m_strParity[0],
  241. atoi(dlg->m_strDataBits),
  242. atoi(dlg->m_strStopBits),
  243. dwCommEvents,
  244. atoi(dlg->m_strSendBuffer));
  245. m_Ports[0].StartMonitoring();
  246. }
  247. delete dlg;
  248. }
  249. void CCommtestDlg::OnConfigbutton2() 
  250. {
  251. CConfigDlg* dlg = new CConfigDlg(this, m_Ports[1].GetDCB());
  252. DWORD dwCommEvents = m_Ports[1].GetCommEvents();
  253. dlg->m_strSendBuffer.Format("%d", m_Ports[1].GetWriteBufferSize());
  254. dlg->m_CommBreakDetected = (dwCommEvents & EV_BREAK) > 0 ? TRUE : FALSE;
  255. dlg->m_CommCTSDetected   = (dwCommEvents & EV_CTS) > 0 ? TRUE : FALSE;
  256. dlg->m_CommDSRDetected   = (dwCommEvents & EV_DSR) > 0 ? TRUE : FALSE;
  257. dlg->m_CommERRDetected   = (dwCommEvents & EV_ERR) > 0 ? TRUE : FALSE;
  258. dlg->m_CommRingDetected  = (dwCommEvents & EV_RING) > 0 ? TRUE : FALSE;
  259. dlg->m_CommRLSDDetected  = (dwCommEvents & EV_RLSD) > 0 ? TRUE : FALSE;
  260. dlg->m_CommRxchar        = (dwCommEvents & EV_RXCHAR) > 0 ? TRUE : FALSE;
  261. dlg->m_CommRxcharFlag    = (dwCommEvents & EV_RXFLAG) > 0 ? TRUE : FALSE;
  262. dlg->m_CommTXEmpty       = (dwCommEvents & EV_TXEMPTY) > 0 ? TRUE : FALSE;
  263. if (dlg->DoModal() == IDOK)
  264. {
  265. dwCommEvents = 0;
  266. if (dlg->m_CommBreakDetected)
  267. dwCommEvents |= EV_BREAK;
  268. if (dlg->m_CommCTSDetected)
  269. dwCommEvents |= EV_CTS;
  270. if (dlg->m_CommDSRDetected)
  271. dwCommEvents |= EV_DSR;
  272. if (dlg->m_CommERRDetected)
  273. dwCommEvents |= EV_ERR;
  274. if (dlg->m_CommRingDetected)
  275. dwCommEvents |= EV_RING;
  276. if (dlg->m_CommRLSDDetected)
  277. dwCommEvents |= EV_RLSD;
  278. if (dlg->m_CommRxchar)
  279. dwCommEvents |= EV_RXCHAR;
  280. if (dlg->m_CommRxcharFlag)
  281. dwCommEvents |= EV_RXFLAG;
  282. if (dlg->m_CommTXEmpty)
  283. dwCommEvents |= EV_TXEMPTY;
  284. m_Ports[1].InitPort(this, 2, 
  285. atoi(dlg->m_strBaudRate),
  286. dlg->m_strParity[0],
  287. atoi(dlg->m_strDataBits),
  288. atoi(dlg->m_strStopBits),
  289. dwCommEvents,
  290. atoi(dlg->m_strSendBuffer));
  291. m_Ports[1].StartMonitoring();
  292. }
  293. delete dlg;
  294. }
  295. void CCommtestDlg::OnConfigbutton3() 
  296. {
  297. CConfigDlg* dlg = new CConfigDlg(this, m_Ports[2].GetDCB());
  298. DWORD dwCommEvents = m_Ports[2].GetCommEvents();
  299. dlg->m_strSendBuffer.Format("%d", m_Ports[2].GetWriteBufferSize());
  300. dlg->m_CommBreakDetected = (dwCommEvents & EV_BREAK) > 0 ? TRUE : FALSE;
  301. dlg->m_CommCTSDetected   = (dwCommEvents & EV_CTS) > 0 ? TRUE : FALSE;
  302. dlg->m_CommDSRDetected   = (dwCommEvents & EV_DSR) > 0 ? TRUE : FALSE;
  303. dlg->m_CommERRDetected   = (dwCommEvents & EV_ERR) > 0 ? TRUE : FALSE;
  304. dlg->m_CommRingDetected  = (dwCommEvents & EV_RING) > 0 ? TRUE : FALSE;
  305. dlg->m_CommRLSDDetected  = (dwCommEvents & EV_RLSD) > 0 ? TRUE : FALSE;
  306. dlg->m_CommRxchar        = (dwCommEvents & EV_RXCHAR) > 0 ? TRUE : FALSE;
  307. dlg->m_CommRxcharFlag    = (dwCommEvents & EV_RXFLAG) > 0 ? TRUE : FALSE;
  308. dlg->m_CommTXEmpty       = (dwCommEvents & EV_TXEMPTY) > 0 ? TRUE : FALSE;
  309. if (dlg->DoModal() == IDOK)
  310. {
  311. dwCommEvents = 0;
  312. if (dlg->m_CommBreakDetected)
  313. dwCommEvents |= EV_BREAK;
  314. if (dlg->m_CommCTSDetected)
  315. dwCommEvents |= EV_CTS;
  316. if (dlg->m_CommDSRDetected)
  317. dwCommEvents |= EV_DSR;
  318. if (dlg->m_CommERRDetected)
  319. dwCommEvents |= EV_ERR;
  320. if (dlg->m_CommRingDetected)
  321. dwCommEvents |= EV_RING;
  322. if (dlg->m_CommRLSDDetected)
  323. dwCommEvents |= EV_RLSD;
  324. if (dlg->m_CommRxchar)
  325. dwCommEvents |= EV_RXCHAR;
  326. if (dlg->m_CommRxcharFlag)
  327. dwCommEvents |= EV_RXFLAG;
  328. if (dlg->m_CommTXEmpty)
  329. dwCommEvents |= EV_TXEMPTY;
  330. m_Ports[2].InitPort(this, 3, 
  331. atoi(dlg->m_strBaudRate),
  332. dlg->m_strParity[0],
  333. atoi(dlg->m_strDataBits),
  334. atoi(dlg->m_strStopBits),
  335. dwCommEvents,
  336. atoi(dlg->m_strSendBuffer));
  337. m_Ports[2].StartMonitoring();
  338. }
  339. delete dlg;
  340. }
  341. void CCommtestDlg::OnConfigbutton4() 
  342. {
  343. CConfigDlg* dlg = new CConfigDlg(this, m_Ports[3].GetDCB());
  344. DWORD dwCommEvents = m_Ports[3].GetCommEvents();
  345. dlg->m_strSendBuffer.Format("%d", m_Ports[3].GetWriteBufferSize());
  346. dlg->m_CommBreakDetected = (dwCommEvents & EV_BREAK) > 0 ? TRUE : FALSE;
  347. dlg->m_CommCTSDetected   = (dwCommEvents & EV_CTS) > 0 ? TRUE : FALSE;
  348. dlg->m_CommDSRDetected   = (dwCommEvents & EV_DSR) > 0 ? TRUE : FALSE;
  349. dlg->m_CommERRDetected   = (dwCommEvents & EV_ERR) > 0 ? TRUE : FALSE;
  350. dlg->m_CommRingDetected  = (dwCommEvents & EV_RING) > 0 ? TRUE : FALSE;
  351. dlg->m_CommRLSDDetected  = (dwCommEvents & EV_RLSD) > 0 ? TRUE : FALSE;
  352. dlg->m_CommRxchar        = (dwCommEvents & EV_RXCHAR) > 0 ? TRUE : FALSE;
  353. dlg->m_CommRxcharFlag    = (dwCommEvents & EV_RXFLAG) > 0 ? TRUE : FALSE;
  354. dlg->m_CommTXEmpty       = (dwCommEvents & EV_TXEMPTY) > 0 ? TRUE : FALSE;
  355. if (dlg->DoModal() == IDOK)
  356. {
  357. dwCommEvents = 0;
  358. if (dlg->m_CommBreakDetected)
  359. dwCommEvents |= EV_BREAK;
  360. if (dlg->m_CommCTSDetected)
  361. dwCommEvents |= EV_CTS;
  362. if (dlg->m_CommDSRDetected)
  363. dwCommEvents |= EV_DSR;
  364. if (dlg->m_CommERRDetected)
  365. dwCommEvents |= EV_ERR;
  366. if (dlg->m_CommRingDetected)
  367. dwCommEvents |= EV_RING;
  368. if (dlg->m_CommRLSDDetected)
  369. dwCommEvents |= EV_RLSD;
  370. if (dlg->m_CommRxchar)
  371. dwCommEvents |= EV_RXCHAR;
  372. if (dlg->m_CommRxcharFlag)
  373. dwCommEvents |= EV_RXFLAG;
  374. if (dlg->m_CommTXEmpty)
  375. dwCommEvents |= EV_TXEMPTY;
  376. m_Ports[3].InitPort(this, 4, 
  377. atoi(dlg->m_strBaudRate),
  378. dlg->m_strParity[0],
  379. atoi(dlg->m_strDataBits),
  380. atoi(dlg->m_strStopBits),
  381. dwCommEvents,
  382. atoi(dlg->m_strSendBuffer));
  383. m_Ports[3].StartMonitoring();
  384. }
  385. delete dlg;
  386. }