MFCAppDlg.cpp
上传用户:lyfy_2008
上传日期:2014-07-13
资源大小:3016k
文件大小:12k
源码类别:

USB编程

开发平台:

Visual C++

  1. // MFCAppDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MFCApp.h"
  5. #include "MFCAppDlg.h"
  6. #include <windows.h>
  7. #include <winioctl.h>
  8. #include "ForUsbioctl.h"
  9. #include "ForUsbDeviceinterface.h" // Has class GUID definition
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // This function is found in module OpenByIntf.cpp
  17. HANDLE OpenByInterface(GUID* pClassGuid, DWORD instance, PDWORD pError);
  18. GUID ClassGuid = ForUsbDevice_CLASS_GUID;
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CAboutDlg dialog used for App About
  21. class CAboutDlg : public CDialog
  22. {
  23. public:
  24. CAboutDlg();
  25. // Dialog Data
  26. //{{AFX_DATA(CAboutDlg)
  27. enum { IDD = IDD_ABOUTBOX };
  28. //}}AFX_DATA
  29. // ClassWizard generated virtual function overrides
  30. //{{AFX_VIRTUAL(CAboutDlg)
  31. protected:
  32. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  33. //}}AFX_VIRTUAL
  34. // Implementation
  35. protected:
  36. //{{AFX_MSG(CAboutDlg)
  37. //}}AFX_MSG
  38. DECLARE_MESSAGE_MAP()
  39. };
  40. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  41. {
  42. //{{AFX_DATA_INIT(CAboutDlg)
  43. //}}AFX_DATA_INIT
  44. }
  45. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CDialog::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CAboutDlg)
  49. //}}AFX_DATA_MAP
  50. }
  51. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  52. //{{AFX_MSG_MAP(CAboutDlg)
  53. // No message handlers
  54. //}}AFX_MSG_MAP
  55. END_MESSAGE_MAP()
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CMFCAppDlg dialog
  58. CMFCAppDlg::CMFCAppDlg(CWnd* pParent /*=NULL*/)
  59. : CDialog(CMFCAppDlg::IDD, pParent)
  60. {
  61. //{{AFX_DATA_INIT(CMFCAppDlg)
  62. m_Mes = _T("");
  63. m_key0 = FALSE;
  64. m_key1 = FALSE;
  65. m_key2 = FALSE;
  66. m_key3 = FALSE;
  67. m_key4 = FALSE;
  68. m_key5 = FALSE;
  69. m_key6 = FALSE;
  70. m_key7 = FALSE;
  71. m_buzzer = FALSE;
  72. m_lcd1 = _T("");
  73. m_left = _T("");
  74. m_right = _T("");
  75. m_lcd2 = _T("");
  76. //}}AFX_DATA_INIT
  77. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  78. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  79. }
  80. void CMFCAppDlg::DoDataExchange(CDataExchange* pDX)
  81. {
  82. CDialog::DoDataExchange(pDX);
  83. //{{AFX_DATA_MAP(CMFCAppDlg)
  84. DDX_Text(pDX, IDC_EDIT_Mes, m_Mes);
  85. DDX_Check(pDX, IDC_CHECK1, m_key0);
  86. DDX_Check(pDX, IDC_CHECK2, m_key1);
  87. DDX_Check(pDX, IDC_CHECK3, m_key2);
  88. DDX_Check(pDX, IDC_CHECK4, m_key3);
  89. DDX_Check(pDX, IDC_CHECK5, m_key4);
  90. DDX_Check(pDX, IDC_CHECK6, m_key5);
  91. DDX_Check(pDX, IDC_CHECK7, m_key6);
  92. DDX_Check(pDX, IDC_CHECK8, m_key7);
  93. DDX_Check(pDX, IDC_CHECK9, m_buzzer);
  94. DDX_Text(pDX, IDC_EDIT3, m_lcd1);
  95. DDX_Text(pDX, IDC_EDIT1, m_left);
  96. DDX_Text(pDX, IDC_EDIT2, m_right);
  97. DDX_Text(pDX, IDC_EDIT4, m_lcd2);
  98. //}}AFX_DATA_MAP
  99. }
  100. BEGIN_MESSAGE_MAP(CMFCAppDlg, CDialog)
  101. //{{AFX_MSG_MAP(CMFCAppDlg)
  102. ON_WM_SYSCOMMAND()
  103. ON_WM_PAINT()
  104. ON_WM_QUERYDRAGICON()
  105. // ON_BN_CLICKED(IDC_BUTTON1, OnLed)
  106. ON_BN_CLICKED(IDC_BUTTON2, OnLed0)
  107. ON_BN_CLICKED(IDC_BUTTON3, OnLed1)
  108. ON_BN_CLICKED(IDC_BUTTON4, OnLed2)
  109. ON_BN_CLICKED(IDC_BUTTON8, OnLed3)
  110. ON_BN_CLICKED(IDC_BUTTON9, OnLed4)
  111. ON_BN_CLICKED(IDC_BUTTON5, OnLed5)
  112. ON_BN_CLICKED(IDC_BUTTON6, OnLed6)
  113. ON_BN_CLICKED(IDC_BUTTON7, OnLed7)
  114. ON_WM_TIMER()
  115. ON_BN_CLICKED(IDC_CHECK9, OnBuzzer)
  116. ON_EN_CHANGE(IDC_EDIT1, OnChangeLeft)
  117. ON_EN_CHANGE(IDC_EDIT2, OnChangeRight)
  118. ON_EN_CHANGE(IDC_EDIT3, OnChangelcd1)
  119. ON_EN_CHANGE(IDC_EDIT4, OnChangeLcd2)
  120. //}}AFX_MSG_MAP
  121. END_MESSAGE_MAP()
  122. /////////////////////////////////////////////////////////////////////////////
  123. // CMFCAppDlg message handlers
  124. BOOL CMFCAppDlg::OnInitDialog()
  125. {
  126. CDialog::OnInitDialog();
  127. // Add "About..." menu item to system menu.
  128. // IDM_ABOUTBOX must be in the system command range.
  129. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  130. ASSERT(IDM_ABOUTBOX < 0xF000);
  131. CMenu* pSysMenu = GetSystemMenu(FALSE);
  132. if (pSysMenu != NULL)
  133. {
  134. CString strAboutMenu;
  135. strAboutMenu.LoadString(IDS_ABOUTBOX);
  136. if (!strAboutMenu.IsEmpty())
  137. {
  138. pSysMenu->AppendMenu(MF_SEPARATOR);
  139. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  140. }
  141. }
  142. // Set the icon for this dialog.  The framework does this automatically
  143. //  when the application's main window is not a dialog
  144. SetIcon(m_hIcon, TRUE); // Set big icon
  145. SetIcon(m_hIcon, FALSE); // Set small icon
  146. // TODO: Add extra initialization here
  147. led=0xff;
  148. hDevice = INVALID_HANDLE_VALUE;
  149. m_Mes="Test application Test_ForUsb starting...n";
  150. UpdateData(FALSE);
  151. DWORD Error;
  152. hDevice = OpenByInterface( &ClassGuid, 0, &Error);
  153. if (hDevice == INVALID_HANDLE_VALUE)
  154. {
  155. m_Mes="ERROR opening device:  returned from CreateFilen" ;
  156. // m_Mes+=GetLastError();
  157. }
  158. else
  159. {
  160. m_Mes="Found TX-1B USB Device, handle open.";
  161. }
  162. UpdateData(FALSE);
  163. SetTimer(1,80,0);
  164. CEdit *pedit=(CEdit *)GetDlgItem(IDC_EDIT1);
  165. pedit->SetLimitText(1);
  166. pedit=(CEdit *)GetDlgItem(IDC_EDIT2);
  167. pedit->SetLimitText(1);
  168. pedit=(CEdit *)GetDlgItem(IDC_EDIT3);
  169. pedit->SetLimitText(16);
  170. pedit=(CEdit *)GetDlgItem(IDC_EDIT4);
  171. pedit->SetLimitText(16);
  172. return TRUE;  // return TRUE  unless you set the focus to a control
  173. }
  174. void CMFCAppDlg::OnSysCommand(UINT nID, LPARAM lParam)
  175. {
  176. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  177. {
  178. CAboutDlg dlgAbout;
  179. dlgAbout.DoModal();
  180. }
  181. else
  182. {
  183. CDialog::OnSysCommand(nID, lParam);
  184. }
  185. }
  186. // If you add a minimize button to your dialog, you will need the code below
  187. //  to draw the icon.  For MFC applications using the document/view model,
  188. //  this is automatically done for you by the framework.
  189. void CMFCAppDlg::OnPaint() 
  190. {
  191. if (IsIconic())
  192. {
  193. CPaintDC dc(this); // device context for painting
  194. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  195. // Center icon in client rectangle
  196. int cxIcon = GetSystemMetrics(SM_CXICON);
  197. int cyIcon = GetSystemMetrics(SM_CYICON);
  198. CRect rect;
  199. GetClientRect(&rect);
  200. int x = (rect.Width() - cxIcon + 1) / 2;
  201. int y = (rect.Height() - cyIcon + 1) / 2;
  202. // Draw the icon
  203. dc.DrawIcon(x, y, m_hIcon);
  204. }
  205. else
  206. {
  207. CDialog::OnPaint();
  208. }
  209. }
  210. // The system calls this to obtain the cursor to display while the user drags
  211. //  the minimized window.
  212. HCURSOR CMFCAppDlg::OnQueryDragIcon()
  213. {
  214. return (HCURSOR) m_hIcon;
  215. }
  216. void CMFCAppDlg::OnLed() 
  217. {
  218. // TODO: Add your control notification handler code here
  219. char buff[16];
  220. CHAR bufOutput[16]; // Output from device
  221. ULONG nOutput;
  222. buff[0]=0x01;
  223. buff[1]=led;
  224. if (!DeviceIoControl(hDevice,
  225.  FORUSB_IOCTL_Write,
  226.  buff,
  227.  16,
  228.  bufOutput,
  229.  0,
  230.  &nOutput,
  231.  NULL)
  232.    )
  233. {
  234. m_Mes="ERROR: DeviceIoControl returns .";
  235. UpdateData(FALSE);
  236. }
  237. }
  238. CMFCAppDlg::~CMFCAppDlg()
  239. {
  240. // KillTimer(1);
  241. if (hDevice != INVALID_HANDLE_VALUE)
  242. {
  243. // Close the handle to the driver
  244. if (!CloseHandle(hDevice))
  245. {
  246. m_Mes="ERROR: CloseHandle returns %0x.n";
  247. UpdateData(FALSE);
  248. }
  249. hDevice = INVALID_HANDLE_VALUE;
  250. }
  251. //
  252. }
  253. void CMFCAppDlg::OnLed0() 
  254. {
  255. // TODO: Add your control notification handler code here
  256. if(led&0x01)
  257. led&=0xfe;
  258. else
  259. led|=0x01;
  260. OnLed();
  261. }
  262. void CMFCAppDlg::OnLed1() 
  263. {
  264. if(led&0x02)
  265. led&=0xfd;
  266. else
  267. led|=0x02;
  268. OnLed();
  269. }
  270. void CMFCAppDlg::OnLed2() 
  271. {
  272. if(led&0x04)
  273. led&=0xfb;
  274. else
  275. led|=0x04;
  276. OnLed();
  277. }
  278. void CMFCAppDlg::OnLed3() 
  279. {
  280. if(led&0x08)
  281. led&=0xf7;
  282. else
  283. led|=0x08;
  284. OnLed();
  285. }
  286. void CMFCAppDlg::OnLed4() 
  287. {
  288. // TODO: Add your control notification handler code here
  289. if(led&0x10)
  290. led&=0xef;
  291. else
  292. led|=0x10;
  293. OnLed();
  294. }
  295. void CMFCAppDlg::OnLed5() 
  296. {
  297. // TODO: Add your control notification handler code here
  298. if(led&0x20)
  299. led&=0xdf;
  300. else
  301. led|=0x20;
  302. OnLed();
  303. }
  304. void CMFCAppDlg::OnLed6() 
  305. {
  306. // TODO: Add your control notification handler code here
  307. if(led&0x40)
  308. led&=0xbf;
  309. else
  310. led|=0x40;
  311. OnLed();
  312. }
  313. void CMFCAppDlg::OnLed7() 
  314. {
  315. // TODO: Add your control notification handler code here
  316. if(led&0x80)
  317. led&=0x7f;
  318. else
  319. led|=0x80;
  320. OnLed();
  321. }
  322. void CMFCAppDlg::OnTimer(UINT nIDEvent) 
  323. {
  324. // TODO: Add your message handler code here and/or call default
  325. char Key; // Output from device
  326. ULONG nOutput;
  327. if (!DeviceIoControl(hDevice,
  328.  FORUSB_IOCTL_Read,
  329.  NULL,
  330.  0,
  331.  &Key,
  332.  1,
  333.  &nOutput,
  334.  NULL)
  335.    )
  336. {
  337. m_Mes="ERROR: DeviceIoControl returns .";
  338. UpdateData(FALSE);
  339. if(Key&0x01)m_key0=0;else m_key0=1;
  340. if(Key&0x02)m_key1=0;else m_key1=1;
  341. if(Key&0x04)m_key2=0;else m_key2=1;
  342. if(Key&0x08)m_key3=0;else m_key3=1;
  343. if(Key&0x10)m_key4=0;else m_key4=1;
  344. if(Key&0x20)m_key5=0;else m_key5=1;
  345. if(Key&0x40)m_key6=0;else m_key6=1;
  346. if(Key&0x80)m_key7=0;else m_key7=1;
  347. UpdateData(FALSE);
  348. CDialog::OnTimer(nIDEvent);
  349. }
  350. //DEL void CMFCAppDlg::OnRadio1() 
  351. //DEL {
  352. //DEL  // TODO: Add your control notification handler code here
  353. //DEL 
  354. //DEL }
  355. void CMFCAppDlg::OnBuzzer() 
  356. {
  357. // TODO: Add your control notification handler code here
  358. UpdateData(TRUE);
  359. char buff[16];
  360. ULONG nOutput;
  361. buff[0]=0x03;
  362. buff[1]=!m_buzzer;
  363. if (!DeviceIoControl(hDevice,
  364.  FORUSB_IOCTL_Write,
  365.  buff,
  366.  16,
  367.  NULL,
  368.  0,
  369.  &nOutput,
  370.  NULL)
  371.    )
  372. {
  373. m_Mes="ERROR: DeviceIoControl returns .";
  374. UpdateData(FALSE);
  375. }
  376. }
  377. void CMFCAppDlg::OnChangeLeft() 
  378. {
  379. // TODO: If this is a RICHEDIT control, the control will not
  380. // send this notification unless you override the CDialog::OnInitDialog()
  381. // function and call CRichEditCtrl().SetEventMask()
  382. // with the ENM_CHANGE flag ORed into the mask.
  383. UpdateData();
  384. if(m_left.GetLength()==0||m_right.GetLength()==0)return ;
  385. char buff[16];
  386. ULONG nOutput;
  387. buff[0]=0x02;
  388. buff[1]=m_left.GetAt(0)-'0';
  389. buff[2]=m_right.GetAt(0)-'0';
  390. if (!DeviceIoControl(hDevice,
  391.  FORUSB_IOCTL_Write,
  392.  buff,
  393.  16,
  394.  NULL,
  395.  0,
  396.  &nOutput,
  397.  NULL)
  398.    )
  399. {
  400. m_Mes="ERROR: DeviceIoControl returns .";
  401. UpdateData(FALSE);
  402. }
  403. // TODO: Add your control notification handler code here
  404. }
  405. void CMFCAppDlg::OnChangeRight() 
  406. {
  407. // TODO: If this is a RICHEDIT control, the control will not
  408. // send this notification unless you override the CDialog::OnInitDialog()
  409. // function and call CRichEditCtrl().SetEventMask()
  410. // with the ENM_CHANGE flag ORed into the mask.
  411. UpdateData();
  412. if(m_left.GetLength()==0||m_right.GetLength()==0)return ;
  413. char buff[16];
  414. ULONG nOutput;
  415. buff[0]=0x02;
  416. buff[1]=m_left.GetAt(0)-'0';
  417. buff[2]=m_right.GetAt(0)-'0';
  418. if (!DeviceIoControl(hDevice,
  419.  FORUSB_IOCTL_Write,
  420.  buff,
  421.  16,
  422.  NULL,
  423.  0,
  424.  &nOutput,
  425.  NULL)
  426.    )
  427. {
  428. m_Mes="ERROR: DeviceIoControl returns .";
  429. UpdateData(FALSE);
  430. }
  431. // TODO: Add your control notification handler code here
  432. }
  433. void CMFCAppDlg::OnChangelcd1() 
  434. {
  435. // TODO: If this is a RICHEDIT control, the control will not
  436. // send this notification unless you override the CDialog::OnInitDialog()
  437. // function and call CRichEditCtrl().SetEventMask()
  438. // with the ENM_CHANGE flag ORed into the mask.
  439. UpdateData();
  440. // if(m_lcd1.GetLength()==0)return;
  441. if(!IsE(&m_lcd1))
  442. {
  443. MessageBox("只能输入英文字符");
  444. m_lcd1="";
  445. UpdateData(FALSE);
  446. }
  447. char buff[18];
  448. ULONG nWritten;
  449. memset(buff,' ',18*sizeof(char));
  450. buff[0]=1;
  451. buff[1]=1;
  452. for(int i=0;i!=m_lcd1.GetLength();i++)buff[i+2]=m_lcd1.GetAt(i);
  453. WriteFile(hDevice, buff, 18, &nWritten, NULL);
  454. // TODO: Add your control notification handler code here
  455. }
  456. BOOL CMFCAppDlg::IsE(CString * str)
  457. {
  458. for(int i=0;i!=str->GetLength();i++)
  459. if(str->GetAt(i)>255||str->GetAt(i)<0)return FALSE;
  460. return TRUE;
  461. }
  462. void CMFCAppDlg::OnChangeLcd2() 
  463. {
  464. // TODO: If this is a RICHEDIT control, the control will not
  465. // send this notification unless you override the CDialog::OnInitDialog()
  466. // function and call CRichEditCtrl().SetEventMask()
  467. // with the ENM_CHANGE flag ORed into the mask.
  468. UpdateData();
  469. // if(m_lcd1.GetLength()==0)return;
  470. if(!IsE(&m_lcd2))
  471. {
  472. MessageBox("只能输入英文字符");
  473. m_lcd2="";
  474. UpdateData(FALSE);
  475. }
  476. char buff[18];
  477. ULONG nWritten;
  478. memset(buff,' ',18*sizeof(char));
  479. buff[0]=1;
  480. buff[1]=2;
  481. for(int i=0;i!=m_lcd2.GetLength();i++)buff[i+2]=m_lcd2.GetAt(i);
  482. WriteFile(hDevice, buff, 18, &nWritten, NULL);
  483. // TODO: Add your control notification handler code here
  484. }