📄 capturedlg.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 + -