interruptio.cpp

来自「2410下面的外部中断的测试程序 此代码包含驱动和应用程序」· C++ 代码 · 共 106 行

CPP
106
字号
// InterruptIO.cpp: implementation of the InterruptIO class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "InterruptApp.h"
#include "InterruptIO.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

InterruptIO::InterruptIO()
{
	m_hDev = INVALID_HANDLE_VALUE;
}

InterruptIO::~InterruptIO()
{

}


DWORD InterruptIO::ReadIOThreadFunc(LPVOID lparam)
{
	InterruptIO *Dipio = (InterruptIO*)lparam;
	if(Dipio->m_hDev == INVALID_HANDLE_VALUE)
	{
		return 0;
	}
	while(TRUE)
	{
	  if(Dipio->m_hDev != INVALID_HANDLE_VALUE)
	  {
	    ReadFile(Dipio->m_hDev,(WORD*)&(Dipio->m_RegValue),sizeof(WORD),&(Dipio->m_dwReadedBytes),NULL);
	    Dipio->m_onDipRead(Dipio->m_pPortOwner,&(Dipio->m_RegValue));
	  }
	  if(WaitForSingleObject(Dipio->m_readIOCloseEvent,1000) == WAIT_OBJECT_0)
	  {
		 break;
	  }
	}
	return 0;

}

void InterruptIO::ClosePort()
{
		if(m_hDev == INVALID_HANDLE_VALUE)
	{
		return;
	}
	CloseReadThread();
	if(CloseHandle(m_hDev))
	{
		m_hDev = INVALID_HANDLE_VALUE;
		return;
	}

}

void InterruptIO::CloseReadThread()
{
	SetEvent(m_readIOCloseEvent);
	if(WaitForSingleObject(m_readIOThread,1000) == WAIT_TIMEOUT)
	{
		m_readIOThread = NULL;
	}

}

void InterruptIO::SetWindowFun(CWnd *pPortOwner, ONDIPIOREAD pFunc)
{
	m_pPortOwner=pPortOwner;
	m_onDipRead = pFunc;

}

BOOL InterruptIO::OpenPort()
{
	if(m_hDev != INVALID_HANDLE_VALUE)
	{
		return TRUE;
	}
	m_hDev = CreateFile(_T("KEY1:"),GENERIC_READ | GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,NULL);
	if(m_hDev == INVALID_HANDLE_VALUE)
	{
		TRACE(_T("CreateFile 返回句柄无效"));
		return FALSE;
	}
	else 
	{
		m_readIOCloseEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
		m_readIOThread=CreateThread(NULL,0,ReadIOThreadFunc,this,0,&m_dwReadIOThreadID);
		TRACE(_T("CreateFile 打开设备成功"));
		return TRUE;
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?