I have been through this hell, and it is possible to write a program that will process a couple of different cards. However, I have done it with C++ and not C#. I will try to give you an idea of how to do this in C#. What I did, was that I had a Mifare and a 15693 contactless mix. The readers were made by entirely different companies. Each reader has its own dll and there is unmanaged code to and from the reader, so in C# you must use delegates for you methods. You must also add the references (dlls to the project). Then you create a reader object for every kind of reader that you have dlls for. I had a dll which was able to read and code to differentiate the various RFID technologies, and using that bit of code snippet, I was able to determine what dlls and reader objects to use. The SDKs were fairly expensive, but I can give you a C++ code snippet on how to determine the various technologies: (you will notice that this can determine 1so15693, 14443A, 14443B, iso8000, felica
/////////////////////////////////////////////////////////////////////////////
// CIso_benchDlg dialog
CIso_benchDlg::CIso_benchDlg(CWnd* pParent /*=NULL*/)
: CDialog(CIso_benchDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CIso_benchDlg)
m_tagid = _T("");
m_type = _T("");
m_iso15693 = FALSE;
m_iso14443A = FALSE;
m_iso14443B = FALSE;
m_iso18000 = FALSE;
m_felica = FALSE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CIso_benchDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIso_benchDlg)
DDX_Control(pDX, IDC_DETECT, m_button);
DDX_Text(pDX, IDC_TAGID, m_tagid);
DDX_Text(pDX, IDC_TYPE, m_type);
DDX_Check(pDX, IDC_CHECK1, m_iso15693);
DDX_Check(pDX, IDC_CHECK2, m_iso14443A);
DDX_Check(pDX, IDC_CHECK3, m_iso14443B);
DDX_Check(pDX, IDC_CHECK4, m_iso18000);
DDX_Check(pDX, IDC_CHECK5, m_felica);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIso_benchDlg, CDialog)
//{{AFX_MSG_MAP(CIso_benchDlg)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_DETECT, OnDetect)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIso_benchDlg message handlers
BOOL CIso_benchDlg::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