1 Star 0 Fork 0

jeffkuang/USB_ICCardReader_Test

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
HID_DemoDlg.cpp 13.48 KB
一键复制 编辑 原始数据 按行查看 历史
jeffkuang 提交于 2015-06-08 21:06 +08:00 . 建立VS2008工程项目。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
//////////////////////////////////////////////////////////////////////////
// Easy USB 51 Programer Test1Dlg.cpp : implementation file //
// 百合电子工作室 //
// www.baiheee.com //
//////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HID_Demo.h"
#include "HID_DemoDlg.h"
//#include "stdlib.h"
//#include "Dbt.h"
//#include "process.h"
//#include <string.h>
/* global constants */
#define VID 0x0483//0x0471
#define PID 0x5750//0x0666
#define KEY_LEN 64
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHIDDemoTestDlg dialog
CHIDDemoTestDlg::CHIDDemoTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHIDDemoTestDlg::IDD, pParent)
, m_RadioModeSelect(0)
{
//{{AFX_DATA_INIT(CHIDDemoTestDlg)
m_strTx = _T("");
m_strRx = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CHIDDemoTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHIDDemoTestDlg)
DDX_Control(pDX, IDC_BTN_WRITE, m_ctrlWrite);
DDX_Control(pDX, IDC_LIST_MESSAGE, m_ctrlMessage);
DDX_Text(pDX, IDC_EDIT_TX, m_strTx);
DDX_Text(pDX, IDC_EDIT_RX, m_strRx);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_LOADFILE, m_ctrlLoadFile);
}
BEGIN_MESSAGE_MAP(CHIDDemoTestDlg, CDialog)
//{{AFX_MSG_MAP(CHIDDemoTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTN_WRITE, OnBtnWrite)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange)
ON_BN_CLICKED(IDC_RADIO1, &CHIDDemoTestDlg::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_RADIO2, &CHIDDemoTestDlg::OnBnClickedRadio2)
ON_BN_CLICKED(IDC_RADIO3, &CHIDDemoTestDlg::OnBnClickedRadio3)
ON_BN_CLICKED(IDC_RADIO4, &CHIDDemoTestDlg::OnBnClickedRadio4)
ON_BN_CLICKED(IDC_RADIO5, &CHIDDemoTestDlg::OnBnClickedRadio5)
ON_BN_CLICKED(IDC_RADIO6, &CHIDDemoTestDlg::OnBnClickedRadio6)
ON_BN_CLICKED(IDC_BUTTON1, &CHIDDemoTestDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_LOADFILE, &CHIDDemoTestDlg::OnBnClickedLoadfile)
ON_BN_CLICKED(IDC_ClearTxBuffer, &CHIDDemoTestDlg::OnBnClickedCleartxbuffer)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHIDDemoTestDlg message handlers
BOOL CHIDDemoTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 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
// TODO: Add extra initialization here
m_strTx = "HID_Demo Test App.";
//set Radio6 to default
((CButton *)GetDlgItem(IDC_RADIO6))->SetCheck(TRUE);
UpdateData(FALSE);
m_ctrlLoadFile.EnableWindow(FALSE); //禁用"loadFile"按钮
m_MyHidDevice.m_hParentWnd = (HANDLE*) this->GetSafeHwnd( );
if(m_MyHidDevice.FindHid()) //找到指定HID设备
{
m_ctrlMessage.InsertString(-1,"My hid device detected");
m_hDevice = INVALID_HANDLE_VALUE;
if (m_MyHidDevice.OpenHidDevice(&m_hDevice, VID, PID) != TRUE)
{
AfxMessageBox(_T("Open HID Device Error!!!"));
}
}
else //没有找到指定HID设备
{
m_ctrlMessage.InsertString(-1,"My hid device not detected");
m_ctrlWrite.EnableWindow(FALSE); //禁用"write"按钮
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CHIDDemoTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CHIDDemoTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CHIDDemoTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CHIDDemoTestDlg::OnBtnWrite()
{
unsigned char ucTxBuffer[64]; //发送缓冲
unsigned char ucRxBuffer[17]; //接收缓冲
CString aa;
UpdateData(TRUE);
switch(m_RadioModeSelect)
{
case 0: //write custom
//准备发送缓冲区中的内容
if (TransData(m_strTx, ucTxBuffer))
{
////写操作
m_MyHidDevice.WriteHidEx(m_hDevice, ucTxBuffer, 64);
//读操作
m_MyHidDevice.ReadHidEx(m_hDevice, ucRxBuffer, 17);
for (int i = 0; i < 17; i++)
{
aa.Format("%.2x", ucRxBuffer[i]);
m_strRx += aa;
m_strRx += ' ';
}
m_strRx += "\r\n";
}
break;
case 1: //write IC Card
ucTxBuffer[0] = 0x01;
ucTxBuffer[1] = 0xa1;
ucTxBuffer[2] = 0x00;
ucTxBuffer[3] = 0x00;
for (int i = 0; i < 8; i++)
{
ucTxBuffer[i+4] = i + 1;
}
////写操作
m_MyHidDevice.WriteHidEx(m_hDevice, ucTxBuffer, 64);
//读操作
m_MyHidDevice.ReadHidEx(m_hDevice, ucRxBuffer, 17);
for (int i = 0; i < 17; i++)
{
aa.Format("%.2x", ucRxBuffer[i]);
m_strRx += aa;
m_strRx += ' ';
}
m_strRx += "\r\n";
break;
case 2: //read IC Card
ucTxBuffer[0] = 0x01;
ucTxBuffer[1] = 0xa2;
ucTxBuffer[2] = 0x00;
ucTxBuffer[3] = 0x00;
for (int i = 0; i < 8; i++)
{
ucTxBuffer[i+4] = i + 1;
}
////写操作
m_MyHidDevice.WriteHidEx(m_hDevice, ucTxBuffer, 64);
//读操作
m_MyHidDevice.ReadHidEx(m_hDevice, ucRxBuffer, 17);
for (int i = 0; i < 17; i++)
{
aa.Format("%.2x", ucRxBuffer[i]);
m_strRx += aa;
m_strRx += ' ';
}
m_strRx += "\r\n";
break;
case 3: //Get IC Card status
ucTxBuffer[0] = 0x01;
ucTxBuffer[1] = 0xa3;
ucTxBuffer[2] = 0x00;
ucTxBuffer[3] = 0x00;
for (int i = 0; i < 8; i++)
{
ucTxBuffer[i+4] = i + 1;
}
////写操作
m_MyHidDevice.WriteHidEx(m_hDevice, ucTxBuffer, 64);
//读操作
m_MyHidDevice.ReadHidEx(m_hDevice, ucRxBuffer, 17);
for (int i = 0; i < 17; i++)
{
aa.Format("%.2x", ucRxBuffer[i]);
m_strRx += aa;
m_strRx += ' ';
}
m_strRx += "\r\n";
break;
case 4: //Get Firmware Version
ucTxBuffer[0] = 0x01;
ucTxBuffer[1] = 0xf1;
ucTxBuffer[2] = 0x00;
ucTxBuffer[3] = 0x00;
for (int i = 0; i < 8; i++)
{
ucTxBuffer[i+4] = i + 1;
}
////写操作
m_MyHidDevice.WriteHidEx(m_hDevice, ucTxBuffer, 64);
//读操作
m_MyHidDevice.ReadHidEx(m_hDevice, ucRxBuffer, 17);
for (int i = 0; i < 17; i++)
{
aa.Format("%.2x", ucRxBuffer[i]);
m_strRx += aa;
m_strRx += ' ';
}
m_strRx += "\r\n";
break;
case 5: //Download Firmware
break;
default:
break;
}
UpdateData(FALSE);
}
bool CHIDDemoTestDlg::TransData(CString InStr, PUCHAR OutStr)
{
UINT i = 0, j = 0;
UINT len = 0;
UCHAR Str[KEY_LEN * 3];
UCHAR Str1[KEY_LEN *2];
len = InStr.GetLength();
memset(OutStr, 0, sizeof(UCHAR[KEY_LEN]));
memset(Str, 0, sizeof(UCHAR[KEY_LEN * 3]));
strcpy((char*)(Str), InStr.GetBuffer(0));
InStr.ReleaseBuffer();
j = 0;
for (i = 0; i < len; i++,j++)
{
if ((Str[i] > 47) && (Str[i] < 58))
{
Str1[j] = Str[i] - 48;
}
else if ((Str[i] > 64) && (Str[i] < 71))
{
Str1[j] = Str[i] - 55;
}
else if ((Str[i] > 96) && (Str[i] < 103))
{
Str1[j] = Str[i] - 87;
}
else if ((Str[i] == ' ') || (Str[i] == ','))
{
j--;
}
else
{
MessageBox("数据格式错误!", "错误", MB_OK | MB_ICONERROR);
return FALSE;
}
}
i = 0;
j = 0;
while(i < len)
{
OutStr[j] = Str1[i] * 16 + Str1[i + 1];
i += 2;
j++;
}
return TRUE;
}
bool CHIDDemoTestDlg::TransData1(CString InStr, unsigned char OutStr[])
{
CString aa;
for (int i = 0; i < 17; i++)
{
aa.Format("%.2x", OutStr[i]);
InStr += aa;
}
return false;
}
LRESULT CHIDDemoTestDlg::OnDeviceChange(WPARAM wParam, LPARAM lParam)
{
/* take the appropriate action for the message */
switch(LOWORD(wParam))
{
/* HID device arrival */
case DBT_DEVICEARRIVAL:
{
/* try to open a handle to the device */
if(m_MyHidDevice.FindHid()) /*此处必须调用FindHid()判断是否是“ 我”的HID设备插入USB口*/
{
/*检测到指定的HID设备插入USB口*/
/*您在这里可以添加其它功能代码*/
unsigned short nIndex = m_ctrlMessage.InsertString(-1,"My hid device detected");
m_ctrlMessage.SetCurSel(nIndex); //流动信息窗口
m_ctrlWrite.EnableWindow(TRUE); //启用"write"按钮
m_hDevice = INVALID_HANDLE_VALUE;
if (m_MyHidDevice.OpenHidDevice(&m_hDevice, VID, PID) != TRUE)
{
AfxMessageBox(_T("Open HID Device Error!!!"));
}
}
break;
}
/* HID device removal */
case DBT_DEVICEREMOVECOMPLETE:
{
if(!m_MyHidDevice.FindHid()) /*此处必须调用FindHid()判断是否是“ 我”的HID设备拨出USB口*/
{
/*检测到指定的HID设备拨出USB口*/
/*您在这里可以添加其它功能代码*/
unsigned short nIndex = m_ctrlMessage.InsertString(-1,"My hid device removed");
m_ctrlMessage.SetCurSel(nIndex); //流动信息窗口
m_ctrlWrite.EnableWindow(FALSE); //禁用"write"按钮
}
break;
}
/* HID Device Change - Note that Win2k tends to use this messages
instead of the previous two. */
case DBT_DEVNODES_CHANGED:
{
if(m_MyHidDevice.FindHid()) /*此处必须调用FindHid()判断是否是“ 我”的HID设备插入USB口*/
{
/*检测到指定的HID设备插入USB口*/
/*您在这里可以添加其它功能代码*/
unsigned short nIndex = m_ctrlMessage.InsertString(-1,"My hid device detected");
m_ctrlMessage.SetCurSel(nIndex); //流动信息窗口
m_ctrlWrite.EnableWindow(TRUE); //启用"write"按钮
m_hDevice = INVALID_HANDLE_VALUE;
if (m_MyHidDevice.OpenHidDevice(&m_hDevice, VID, PID) != TRUE)
{
AfxMessageBox(_T("Open HID Device Error!!!"));
}
}
else
{
/*检测到指定的HID设备拨出USB口*/
/*您在这里可以添加其它功能代码*/
unsigned short nIndex = m_ctrlMessage.InsertString(-1,"My hid device removed");
m_ctrlMessage.SetCurSel(nIndex); //流动信息窗口
m_ctrlWrite.EnableWindow(FALSE); //禁用"write"按钮
}
break;
}
}
return true;
}
void CHIDDemoTestDlg::OnBnClickedRadio1()
{
if (m_RadioModeSelect != 1)
{
m_RadioModeSelect = 1;
m_ctrlLoadFile.EnableWindow(FALSE);
}
}
void CHIDDemoTestDlg::OnBnClickedRadio2()
{
if (m_RadioModeSelect != 2)
{
m_RadioModeSelect = 2;
m_ctrlLoadFile.EnableWindow(FALSE);
}
}
void CHIDDemoTestDlg::OnBnClickedRadio3()
{
if (m_RadioModeSelect != 3)
{
m_RadioModeSelect = 3;
m_ctrlLoadFile.EnableWindow(FALSE);
}
}
void CHIDDemoTestDlg::OnBnClickedRadio4()
{
if (m_RadioModeSelect != 4)
{
m_RadioModeSelect = 4;
m_ctrlLoadFile.EnableWindow(FALSE);
}
}
void CHIDDemoTestDlg::OnBnClickedRadio5()
{
if (m_RadioModeSelect != 5)
{
m_RadioModeSelect = 5;
m_ctrlLoadFile.EnableWindow(TRUE);
}
}
void CHIDDemoTestDlg::OnBnClickedRadio6()
{
if (m_RadioModeSelect != 0)
{
m_RadioModeSelect = 0;
m_ctrlLoadFile.EnableWindow(FALSE);
}
}
void CHIDDemoTestDlg::OnBnClickedButton1()
{
UpdateData(TRUE);
m_strRx = "";
UpdateData(FALSE);
}
void CHIDDemoTestDlg::OnBnClickedLoadfile()
{
CString m_strFilePath;
CFileDialog fileDlg(TRUE, "*.bin", "*.bin", NULL, "Bin Files (*.bin)|*.bin|所有文件 (*.*)|*.*|", 0);
if(fileDlg.DoModal()==IDOK)
{
CString strTemp;
m_strFilePath = fileDlg.GetPathName();
if (m_strFilePath != "")
{
//打开文件
CFile file(m_strFilePath, CFile::modeRead);
nFileLength = file.GetLength();
if (nFileLength > 0x10000)
{
AfxMessageBox(_T("文件超出64K!"));
return;
}
else
{
UpdateData(TRUE);
m_strTx = m_strFilePath;
UpdateData(FALSE);
HGLOBAL hgl=::GlobalAlloc(GMEM_MOVEABLE,nFileLength+1);
buffer=(unsigned char *)::GlobalLock(hgl);
file.Read(buffer,nFileLength);
::GlobalUnlock(hgl);
::GlobalFree(hgl);
AfxMessageBox(_T("文件装载成功!"));
}
}
else
{
AfxMessageBox(_T("文件装载失败!"));
}
}
}
void CHIDDemoTestDlg::OnBnClickedCleartxbuffer()
{
UpdateData(TRUE);
m_strTx = "";
UpdateData(FALSE);
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/jeffkuang_workspace/USB_ICCardReader_Test.git
git@gitee.com:jeffkuang_workspace/USB_ICCardReader_Test.git
jeffkuang_workspace
USB_ICCardReader_Test
USB_ICCardReader_Test
master

搜索帮助