⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capturedlg.cpp

📁 rfid在wince的平台的驱动
💻 CPP
字号:
// captureDlg.cpp : implementation file
//

#include "stdafx.h"
#include "capture.h"
#include "capture1.h"
#include "captureDlg.h"
#include "uIMG-Main.h"
#include <winioctl.h>
#include <windows.h>

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

int g_IsContinuous;
int g_BuzzState;
int g_FouceState;
int g_LightState;
int g_KeyPressed;
int g_StartDecode;
int g_Space;
int g_Totle;
int g_Succ;
CString InfoBuff;
HWND g_DlgHWND;
HANDLE g_DecodeEven;
unsigned char g_PicBuff[640*480];
/////////////////////////////////////////////////////////////////////////////
// CCaptureDlg dialog

//用于旧版本声音驱动
/*#define NL_PDA_IOCTL_BEEP   CTL_CODE(FILE_DEVICE_HAL, 5500, METHOD_BUFFERED, FILE_ANY_ACCESS)

void beep()
{
	HANDLE hBeep;
	
	hBeep = ::CreateFile(_T("BUZ1:"), GENERIC_READ | GENERIC_WRITE,
		     FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

	if (INVALID_HANDLE_VALUE == hBeep)
	{
		NKDbgPrintfW(_T("CreateFile BUZ1 Error. LastErr %d.\r\n"), GetLastError());
		return;
	}
	NKDbgPrintfW(_T("KeypdBeep: DeviceIoControl NL_PDA_IOCTL_BEEP.\r\n"));
	DeviceIoControl(hBeep, NL_PDA_IOCTL_BEEP, NULL, 0, NULL, 0, NULL, NULL);
	if (hBeep)
	{
		CloseHandle(hBeep);
	}
}*/

//用于新版本声音驱动
#define NL_PDA_IOCTL_BEEP_TEST			CTL_CODE(FILE_DEVICE_HAL, 5501, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define BUZ_WAIT_DELAY			80		// 40ms delay Beep

typedef struct _NL_PDA_BEEP_PARAM_INFO_
{
	DWORD dwSilient;					// 是否静音
	unsigned int uiPWMCR0;
	unsigned int uiPWMCR0Idle;
	unsigned int uiPWMDCR0;
	unsigned int uiPWMDCR0Idle;
	unsigned int uiPWMPCR0;
	unsigned int uiPWMPCR0Idle;
	unsigned int uiTimeout;		// 时延
}NL_PDA_BEEP_PARAM_INFO, *PNL_PDA_BEEP_PARAM_INFO;

void beep()
{
	DWORD dwIOControlCode = NL_PDA_IOCTL_BEEP_TEST;
	HANDLE hBeep = NULL;
	BOOL bRet = TRUE;

	NL_PDA_BEEP_PARAM_INFO BeepParam;	

	BeepParam.uiPWMCR0 = 0x4;
	BeepParam.uiPWMDCR0 = 0x1DC;
	BeepParam.uiPWMPCR0 = 0x3B8;

	BeepParam.uiPWMCR0Idle = 0x4;
	BeepParam.uiPWMDCR0Idle = 0x0;
	BeepParam.uiPWMPCR0Idle = 0x3B8;

	BeepParam.dwSilient = 0;
	BeepParam.uiTimeout = BUZ_WAIT_DELAY;

	hBeep = ::CreateFile(_T("BUZ1:"),
				GENERIC_READ | GENERIC_WRITE,
				FILE_SHARE_READ | FILE_SHARE_WRITE,
				NULL,
				OPEN_EXISTING,
				0,
				NULL);

	if (INVALID_HANDLE_VALUE == hBeep)
	{
		NKDbgPrintfW(_T("hPwr = %x, LastErr = %d.\r\n"), hBeep, GetLastError());
		bRet = FALSE;
		return;
	}

	bRet = DeviceIoControl(hBeep,
			dwIOControlCode,
			(VOID *) &BeepParam,
			sizeof(NL_PDA_BEEP_PARAM_INFO),
			NULL,
			0,
			NULL,
			NULL);
	if (hBeep)
	{
		CloseHandle(hBeep);
	}
}

#define NL_PDA_IOCTL_VBN    CTL_CODE(FILE_DEVICE_HAL, 7500, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define VBN_WAIT_DELAY      200      // 200ms viberation

void shake()
{
	HANDLE hVBN;
	DWORD dwDelayTime = VBN_WAIT_DELAY;

	hVBN = ::CreateFile(_T("VBN1:"), GENERIC_READ | GENERIC_WRITE,
			FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

	if (INVALID_HANDLE_VALUE == hVBN)
	{
		NKDbgPrintfW(_T("CreateFile VBN1 Error. LastErr %d.\r\n"), GetLastError());
		return;
	}
	DeviceIoControl(hVBN, NL_PDA_IOCTL_VBN, NULL, dwDelayTime, NULL, 0, NULL, NULL);
	if (hVBN)
	{
		CloseHandle(hVBN);
	}
}

CCaptureDlg::CCaptureDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCaptureDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCaptureDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCaptureDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TAB_MAIN, m_tabmain);
	//{{AFX_DATA_MAP(CCaptureDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCaptureDlg, CDialog)
	//{{AFX_MSG_MAP(CCaptureDlg)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_MAIN, OnSelchangeTabMain)
	ON_WM_DESTROY()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCaptureDlg message handlers

#if 0
void CaptureLight(int foc, int lec)
{
	if((NORMAL == g_LightState) && (NORMAL == g_FouceState))
	{
		lightcontrol(foc, lec);
	}
	else if((ALWAYSON == g_LightState) && (NORMAL == g_FouceState))
	{
		lightcontrol(foc, 1);
	}
	else if((ALWAYSOFF == g_LightState) && (NORMAL == g_FouceState))
	{
		lightcontrol(foc, 0);
	}
	if((NORMAL == g_LightState) && (ALWAYSON == g_FouceState))
	{
		lightcontrol(1, lec);
	}
	else if((NORMAL == g_LightState) && (ALWAYSOFF == g_FouceState))
	{
		lightcontrol(0, lec);
	}
	if((ALWAYSON == g_LightState) && (ALWAYSON == g_FouceState))
	{
		lightcontrol(1, 1);
	}
	if((ALWAYSOFF == g_LightState) && (ALWAYSON == g_FouceState))
	{
		lightcontrol(1, 0);
	}
	if((ALWAYSON == g_LightState) && (ALWAYSOFF == g_FouceState))
	{
		lightcontrol(0, 1);
	}
	if((ALWAYSOFF == g_LightState) && (ALWAYSOFF == g_FouceState))
	{
		lightcontrol(0, 0);
	}
	return;
}

void Decode()
{
	int iResult = 0;
	int iLength = 0;
	unsigned char* Info;
	g_DecodeEven = CreateEvent(NULL, FALSE, FALSE, NULL);
	while(g_StartDecode)
	{
		WaitForSingleObject(g_DecodeEven, INFINITE);
		CaptureLight(0,1);
		while(1 == g_KeyPressed
			&& 1 == g_StartDecode
			&& 1 != iResult)
		{
			PauseCapture();
			CaptureLight(0,1);
			SavePic(g_PicBuff);
			CaptureLight(1,1);
			ContinueCapture();
			vIniParam(g_PicBuff);
			iResult = iProcImgMain();
			CaptureLight(0,1);
			if (g_IsContinuous)
			{
				g_KeyPressed = FALSE;
				g_Totle ++;
				if(1 == iResult)
				{
					g_Succ++;
				}
				InfoBuff.Format(_T("Decode totle:%u, succ:%u"), g_Totle, g_Succ);
				::SendMessage(g_DlgHWND, WM_SHOWINFO, 0, 0);
			}
		}
		if (1 == iResult)
		{
			iLength = uGetInfoLen();
			Info = uGetDecInfoBuff();
			if(g_BuzzState == TRUE)
			{
				beep();
				shake();
			}
			::SendMessage(g_DlgHWND, WM_DECODESUCC, iLength, (long)Info);
			iResult = 0;
		}
		CaptureLight(0,0);
	}
	return;
}
#endif

BOOL CCaptureDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	ShowWindow(SW_SHOWMAXIMIZED);
	TCITEM item;
	//HANDLE HDecodeThread;
	item.mask = TCIF_TEXT;
	//item.pszText = _T("Camera");
	//m_tabmain.InsertItem(0,&item);
	//item.pszText = _T("Config");
	//m_tabmain.InsertItem(1,&item);
	item.pszText = _T("RFIDReadWrite");
	m_tabmain.InsertItem(0,&item);
// 	m_DlgCamera.Create(IDD_CAMERA, &m_tabmain);
// 	m_DlgConfig.Create(IDD_CONFIG, &m_tabmain);
	m_DlgRFIDT2.Create(IDD_RFIDT2, &m_tabmain);
	
// 	m_DlgConfig.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
// 	m_DlgCamera.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 
	m_DlgRFIDT2.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 

	g_BuzzState = TRUE;
	g_FouceState = NORMAL;
	g_LightState = NORMAL;
	g_IsContinuous = FALSE;
	g_Totle = 0;
	g_Succ = 0;

//	g_DlgHWND = GetSafeHwnd();
	g_KeyPressed = FALSE;
	g_StartDecode = TRUE;
	//InitCapture();
	//SetScale(TRUE);
	//StartCapture();
	//CaptureLight(0,0);
	//HDecodeThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Decode,NULL,0,NULL);
	//CloseHandle(HDecodeThread);
	m_tabmain.SetFocus();
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CCaptureDlg::OnSelchangeTabMain(NMHDR* pNMHDR, LRESULT* pResult) 
{
	#if 0
	HANDLE HDecodeThread;
	// TODO: Add your control notification handler code here

	switch(m_tabmain.GetCurSel()) 
	{
	case 1:
		g_StartDecode = FALSE;
		g_Totle = 0;
		g_Succ = 0;
		CaptureLight(0,0);
		StopCapture();
		m_DlgRFIDT2.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
// 		m_DlgConfig.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 
// 		m_DlgCamera.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		if(TRUE == g_IsContinuous)
		{
			KillTimer(TIMER1);
		}
		break;
	case 0:
		g_StartDecode = TRUE;
		StartCapture();
		HDecodeThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Decode,NULL,0,NULL);
		CloseHandle(HDecodeThread);
		m_DlgRFIDT2.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		m_DlgConfig.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		m_DlgCamera.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 
		m_tabmain.SetFocus();
		if(TRUE == g_IsContinuous)
		{
			SetTimer(TIMER1, g_Space, NULL);
		}
		InfoBuff.Format(_T(""));
		::SendMessage(g_DlgHWND, WM_SHOWINFO, 0, 0);
		break;
	case 2:
		CaptureLight(0,0);
		StopCapture();
		m_DlgConfig.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		m_DlgCamera.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		m_DlgRFIDT2.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 
		break;
	default:
		m_DlgRFIDT2.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		m_DlgConfig.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 
		m_DlgCamera.SetWindowPos(NULL,1,22,300,350,SWP_HIDEWINDOW); 
		break;
	}
#endif
	m_DlgRFIDT2.SetWindowPos(NULL,1,22,300,350,SWP_SHOWWINDOW); 
	*pResult = 0;
}

void CCaptureDlg::OnDestroy() 
{	
	if((1 == g_KeyPressed))
	{
		g_KeyPressed = 0;
	}
	if(TRUE == g_IsContinuous)
	{
		KillTimer(TIMER1);
	}
	//lightcontrol(0,0);
	//StopCapture();
	//DeinitCapture();
	PostQuitMessage(0);
	CDialog::OnDestroy();
	// TODO: Add your message handler code here
	
}

BOOL CCaptureDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if((WM_KEYDOWN == pMsg->message) && (FALSE == g_IsContinuous))
	{
		if(((VK_F4 == pMsg->wParam) || (VK_F3 == pMsg->wParam)) && (0 == g_KeyPressed))
		{
			g_KeyPressed = 1;
			SetEvent(g_DecodeEven);
//			SetDlgItemText(IDC_INFO, _T(""));
			NKDbgPrintfW(TEXT("\t\t\tKeyDown\r\n"));
		}
	}
	else if(WM_KEYUP == pMsg->message)
	{
		if((VK_F4 == pMsg->wParam) || (VK_F3 == pMsg->wParam))
		{
			g_KeyPressed = 0;
			NKDbgPrintfW(TEXT("\t\t\tKeyUp\r\n"));
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CCaptureDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	case TIMER1:
		if(TRUE == g_StartDecode)
		{
			g_KeyPressed = TRUE;
			SetEvent(g_DecodeEven);
		}
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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