📄 contactlessdemovcdlg.cpp
字号:
m_ctrOutput.AddString( "SCARD_E_DUPLICATE_READER:\r\n The reader driver didn't produce a unique reader name.");
break;
case SCARD_E_INSUFFICIENT_BUFFER:
m_ctrOutput.AddString( "SCARD_E_INSUFFICIENT_BUFFER:\r\n The data buffer for returned data is too small for the returned data.");
break;
case SCARD_E_INVALID_ATR:
m_ctrOutput.AddString( "SCARD_E_INVALID_ATR:\r\n An ATR string obtained from the registry is not a valid ATR string.");
break;
case SCARD_E_INVALID_HANDLE:
m_ctrOutput.AddString( "SCARD_E_INVALID_HANDLE:\r\n The supplied handle was invalid.");
break;
case SCARD_E_INVALID_PARAMETER:
m_ctrOutput.AddString( "SCARD_E_INVALID_PARAMETER:\r\n One or more of the supplied parameters could not be properly interpreted.");
break;
case SCARD_E_INVALID_TARGET:
m_ctrOutput.AddString( "SCARD_E_INVALID_TARGET:\r\n Registry startup information is missing or invalid.");
break;
case SCARD_E_INVALID_VALUE:
m_ctrOutput.AddString( "SCARD_E_INVALID_VALUE:\r\n One or more of the supplied parameter values could not be properly interpreted.");
break;
case SCARD_E_NO_MEMORY:
m_ctrOutput.AddString( "SCARD_E_NO_MEMORY:\r\n Not enough memory available to complete this command.");
break;
case SCARD_E_NO_SERVICE:
m_ctrOutput.AddString( "SCARD_E_NO_SERVICE:\r\n The smart card resource manager is not running.");
break;
case SCARD_E_NO_SMARTCARD:
m_ctrOutput.AddString( "SCARD_E_NO_SMARTCARD:\r\n The operation requires a smart card,\r\n\tbut no smart card is currently in the device.");
break;
case SCARD_E_NOT_READY:
m_ctrOutput.AddString( "SCARD_E_NOT_READY:\r\n The reader or card is not ready to accept commands.");
break;
case SCARD_E_NOT_TRANSACTED:
m_ctrOutput.AddString( "SCARD_E_NOT_TRANSACTED:\r\n An attempt was made to end a non-existent transaction.");
break;
case SCARD_E_PCI_TOO_SMALL:
m_ctrOutput.AddString( "SCARD_E_PCI_TOO_SMALL:\r\n The PCI receive buffer was too small.");
break;
case SCARD_E_PROTO_MISMATCH:
m_ctrOutput.AddString( "SCARD_E_PROTO_MISMATCH:\r\n The requested protocols are incompatible with the protocol\r\n\tcurrently in use with the card.");
break;
case SCARD_E_READER_UNAVAILABLE:
m_ctrOutput.AddString( "SCARD_E_READER_UNAVAILABLE:\r\n The specified reader is not currently available for use.");
break;
case SCARD_E_READER_UNSUPPORTED:
m_ctrOutput.AddString( "SCARD_E_READER_UNSUPPORTED:\r\n The reader driver does not meet minimal requirements for support.");
break;
case SCARD_E_SERVICE_STOPPED:
m_ctrOutput.AddString( "SCARD_E_SERVICE_STOPPED:\r\n The smart card resource manager has shut down.");
break;
case SCARD_E_SHARING_VIOLATION:
m_ctrOutput.AddString( "SCARD_E_SHARING_VIOLATION:\r\n The smart card cannot be accessed because of other outstanding connections.");
break;
case SCARD_E_SYSTEM_CANCELLED:
m_ctrOutput.AddString( "SCARD_E_SYSTEM_CANCELLED:\r\n The action was canceled by the system, presumably to log off or shut down.");
break;
case SCARD_E_TIMEOUT:
m_ctrOutput.AddString( "SCARD_E_TIMEOUT:\r\n The user-specified timeout value has expired.");
break;
case SCARD_E_UNKNOWN_CARD:
m_ctrOutput.AddString( "SCARD_E_UNKNOWN_CARD:\r\n The specified smart card name is not recognized.");
break;
case SCARD_E_UNKNOWN_READER:
m_ctrOutput.AddString( "SCARD_E_UNKNOWN_READER:\r\n The specified reader name is not recognized.");
break;
case SCARD_F_COMM_ERROR:
m_ctrOutput.AddString( "SCARD_F_COMM_ERROR:\r\n An internal communications error has been detected.");
break;
case SCARD_F_INTERNAL_ERROR:
m_ctrOutput.AddString( "SCARD_F_INTERNAL_ERROR:\r\n An internal consistency check failed.");
break;
case SCARD_F_UNKNOWN_ERROR:
m_ctrOutput.AddString( "SCARD_F_UNKNOWN_ERROR:\r\n An internal error has been detected, but the source is unknown.");
break;
case SCARD_F_WAITED_TOO_LONG:
m_ctrOutput.AddString( "SCARD_F_WAITED_TOO_LONG:\r\n An internal consistency timer has expired.");
break;
case SCARD_P_SHUTDOWN:
m_ctrOutput.AddString( "SCARD_P_SHUTDOWN:\r\n The operation has been aborted to allow the server application to exit.");
break;
case SCARD_S_SUCCESS:
m_ctrOutput.AddString( "SCARD_S_SUCCESS:\r\n No error was encountered.");
break;
case SCARD_W_REMOVED_CARD:
m_ctrOutput.AddString( "SCARD_W_REMOVED_CARD:\r\n The smart card has been removed, so that further communication is not possible.");
break;
case SCARD_W_RESET_CARD:
m_ctrOutput.AddString( "SCARD_W_RESET_CARD:\r\n The smart card has been reset, so any shared state information is invalid.");
break;
case SCARD_W_UNPOWERED_CARD:
m_ctrOutput.AddString( "SCARD_W_UNPOWERED_CARD:\r\n Power has been removed from the smart card, so that further communication is not possible.");
break;
case SCARD_W_UNRESPONSIVE_CARD:
m_ctrOutput.AddString( "SCARD_W_UNRESPONSIVE_CARD:\r\n The smart card is not responding to a reset.");
break;
case SCARD_W_UNSUPPORTED_CARD:
m_ctrOutput.AddString( "SCARD_W_UNSUPPORTED_CARD:\r\n The reader cannot communicate with the card, due to ATR string configuration conflicts.");
break;
default:
m_ctrOutput.AddString(" There was error in this operation, No error string available");
break;
}
iCount = m_ctrOutput. GetCount( );
for (int iUnsel = 0; iUnsel<iCount - 2;iUnsel++)
m_ctrOutput.SetSel(iUnsel, FALSE );
m_ctrOutput.SetSel(iCount - 1, TRUE );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CContactlessDemoVCDlg::CStringToUchar(CString str, UCHAR *ucBuffer, ULONG *ulBufferLen)
{
int Length = 0;
int DataLength = 0;
char cstr[] ="";
char strcstring[512] ="";
byte hexval=0x00;
int i = 0;
Length = str.GetLength();
for (i = 0; i<Length; i++)
strcstring[i] = str.GetAt(i);
DataLength = Length / 2;
for (i = 0; i<DataLength; i++)
{
cstr[0] = strcstring[2*i];
cstr[1] = strcstring[2*i+1];
sscanf( cstr, "%02x", &hexval );
ucBuffer[i]=hexval;
}
*ulBufferLen = DataLength;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CContactlessDemoVCDlg::UcharToStr(UCHAR *ucDataBuffer, ULONG ulDataBufLen, char *str)
{
ULONG i = 0;
char bytetochar[3] ="";
char Temp[1024] ="";
for (i=0;i<ulDataBufLen;i++)
{
_itoa(ucDataBuffer[i],bytetochar,16);
if (ucDataBuffer[i]<=0x0F)strcat(Temp,"0");
strcat(Temp,bytetochar);
}
memcpy(str,Temp,ulDataBufLen*2);
str[ulDataBufLen*2] = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CContactlessDemoVCDlg::OnSelchangeListreader()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_ctrOutput.AddString("Selected Reader is :");
m_ctrOutput.AddString(m_strReaderName);
TrackCard();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOLEAN CContactlessDemoVCDlg::GiveCardName(UCHAR *ucATR, ULONG ATRLen, char *CardName)
{
char strCardName[80] ="";
if (ATRLen == 17 && ucATR[1] == 0x0F && ucATR[2] == 0xFF) //Contactless Memory card
{
switch (ucATR[16] & 0x0F)
{
case ISO14443A_123:
switch (ucATR[16] & 0xF0)
{
case MIFARE_ST1K:
strcat(strCardName,"MIFARE_ST1K");
m_strMifAuthentKeyNr = "00";
EnableAllFields();
break;
case MIFARE_ST4K:
strcat(strCardName,"MIFARE_ST4K");
m_strMifAuthentKeyNr = "00";
EnableAllFields();
break;
case MIFARE_ULIT:
strcat(strCardName,"MIFARE_ULIT");
GetDlgItem(IDC_AUTHENTBLOCKNR)->EnableWindow(TRUE);
GetDlgItem(IDC_READ)->EnableWindow(TRUE);
GetDlgItem(IDC_DATAREAD)->EnableWindow(TRUE);
GetDlgItem(IDC_WRITE)->EnableWindow(TRUE);
GetDlgItem(IDC_DATATOWRITE)->EnableWindow(TRUE);
break;
case SLE55R_XXXX:
strcat(strCardName,"SLE55R_XXXX");
break;
default:
strcat(strCardName,"ISO14443A Card");
break;
}
break;
case ISO15693_12ICL:
GetDlgItem(IDC_TRANSMIT)->EnableWindow(TRUE);
GetDlgItem(IDC_BYTESEND)->EnableWindow(TRUE);
GetDlgItem(IDC_NBYTESEND)->EnableWindow(TRUE);
GetDlgItem(IDC_NBYTERECEIVED)->EnableWindow(TRUE);
switch (ucATR[16] & 0xF0)
{
case 0xC0:
strcat(strCardName,"iClass 2K");
break;
case 0x90:
strcat(strCardName,"iClass 2KS");
break;
case 0xD0:
strcat(strCardName,"iClass 16K");
break;
case 0xA0:
strcat(strCardName,"iClass 16KS");
break;
case 0xE0:
strcat(strCardName,"iClass 8x2K");
break;
case 0xB0:
strcat(strCardName,"iClass 8x2KS");
break;
default:
strcat(strCardName,"iClass Card");
break;
}
break;
case ISO15693_123:
switch (ucATR[16] & 0xF0)
{
case SRF55V10P:
strcat(strCardName,"SRF55V10P");
break;
case SRF55V02P:
strcat(strCardName,"SRF55V02P");
break;
case SRF55V10S:
strcat(strCardName,"SRF55V10S");
break;
case SRF55V02S:
strcat(strCardName,"SRF55V02S");
break;
case TAG_IT:
strcat(strCardName,"TAG_IT");
break;
case LRI512:
strcat(strCardName,"LRI512");
break;
case ICODESLI:
strcat(strCardName,"ICODESLI");
break;
case SRF55XXX:
strcat(strCardName,"SRF55XXX");
break;
case TEMPSENS:
strcat(strCardName,"TEMPSENS");
break;
default:
strcat(strCardName,"ISO 15693 Card");
break;
}
break;
case ISO14443B_12STM :
switch (ucATR[16] & 0xF0)
{
case SR176:
strcat(strCardName,"SR176");
break;
case SRIX4K:
strcat(strCardName,"SRIX4K");
break;
}
break;
case ISO14443B_123 :
switch (ucATR[16] & 0xF0)
{
case AT88RF020:
strcat(strCardName,"AT88RF020");
break;
case AT88SC6416CRF:
strcat(strCardName,"AT88RF020");
break;
default:
break;
}
break;
case ISO15693_12ICODE1:
strcat(strCardName,"ICODE1");
break;
default:
break;
}
m_strCardName = strCardName;
return TRUE;
}
else
{
GetDlgItem(IDC_TRANSMIT)->EnableWindow(TRUE);
GetDlgItem(IDC_BYTESEND)->EnableWindow(TRUE);
GetDlgItem(IDC_NBYTESEND)->EnableWindow(TRUE);
GetDlgItem(IDC_NBYTERECEIVED)->EnableWindow(TRUE);
if (ATRLen == 0x06 && ucATR[4] == 0x80 && ucATR[5] == 0x80 )
{
strcat(strCardName,"DESFire Card");
m_strCardName = strCardName;
return TRUE;
}
else if ((ucATR[1] & 0x80) == 0x80 && ucATR[2] == 0x80 && ucATR[3] == 0x01)
{
strcat(strCardName,"T=CL Card");
m_strCardName = strCardName;
return TRUE;
}
else
{
strcat(strCardName,"May be Contact Card");
m_strCardName = strCardName;
return FALSE;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CContactlessDemoVCDlg::OnRefoutputsc()
{
m_ctrOutput.ResetContent();
m_ctrOutput.AddString("CM5121 Demo Application, please see the help file of Synchronous API for detail functionality");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CContactlessDemoVCDlg::ShowTimeRequired()
{
char bytetochar[10]={'0'};
char strFortime[80]="";
SystemTimeToFileTime(&startTime, &ftimetmp);
ulistartTime.LowPart=ftimetmp.dwLowDateTime;
ulistartTime.HighPart=ftimetmp.dwHighDateTime;
SystemTimeToFileTime(&stopTime, &ftimetmp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -