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

📄 contactlessdemovcdlg.cpp

📁 RFID Omnikey Reader Application source
💻 CPP
📖 第 1 页 / 共 5 页
字号:
         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 + -