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

📄 ctapi.c

📁 This little Program allows you to send commands to the CardReader (CT-BCS) or to the Card itself. F
💻 C
📖 第 1 页 / 共 2 页
字号:
               {                  *lenr = 2;                  response[0] = 0x62;                  response[1] = 0x00;                  return OK;               }               memcpy (block2send, SP_POWER, sizeof(SP_POWER));               block2send[3] = 0x01;               retval = SendBlock (fd, 0x80, sizeof(SP_POWER), block2send);               if (retval != 0)               {                  *lenr = 0;                  return (ERR_TRANS);               }               retval = GetBlock(fd, &STS, &LEN, block2recv, 1000);               if (retval != 0)               {                  *lenr = 0;                  return (ERR_TRANS);               }               if ((block2recv[LEN-2] == 0x67) && (block2recv[LEN-1] == 0x04))               {                  *lenr = 2;                  response[0] = 0x62;                  response[1] = 0x00;                  return OK;               }               if ((block2recv[LEN-2] == 0x67) && (block2recv[LEN-1] == 0x09))               {                   *lenr = 2;                  response[0] = 0x64;                  response[1] = 0x00;                  return OK;               }               if ((block2recv[LEN-2] != 0x90) || (block2recv[LEN-1] != 0x00))               {                  *lenr = 2;                  response[0] = 0x64;                  response[1] = 0x00;                  return OK;               }                              P2 = P2 & 0x03;               if (P2 > 0)               {                  if (*lenr < LEN)                  {                     *lenr = 0;                     return (ERR_MEMORY);                  }                  memcpy (response, block2recv, LEN);                  *lenr = LEN;               }               else               {                  *lenr = 2;                   response[0] = 0x90;               }               if ((STS & STS_ISOCard) == STS_ISOCard)               {                  response[*lenr-1] = 0x01;               }               else               {                  response[*lenr-1] = 0x00;               }               return OK;                      break;                  case GET_STATUS:               if (P1 != 0x00)               {                  *lenr = 2;                  response[0] = 0x6a;                  response[1] = 0x00;                  return OK;               }               if (Lc != 0)                {                  *lenr = 2;                  response[0] = 0x67;                  response[1] = 0x00;                  return OK;               }               if (*Le != 0)               {                  *lenr = 2;                  response[0] = 0x67;                  response[1] = 0x00;                  return OK;               }               switch (P2)               {                  case 0x46:                     if (*lenr < 17)                     {                        *lenr = 0;                        return (ERR_MEMORY);                     }                     *lenr = 17;                      memcpy (response, "UST2ISPort 0.20\x90\x00", 17);                     return OK;                  case 0x80:                     if (*lenr < 3)                     {                        *lenr = 0;                        return (ERR_MEMORY);                     }                     retval = SendBlock(fd, 0xc0, sizeof(SP_STATUS), SP_STATUS);                     if (retval != 0)                     {                        *lenr = 0;                        return (ERR_TRANS);                     }                     retval = GetBlock(fd, &STS, &LEN, block2recv, 1000);                     if (retval != 0)                     {                        *lenr = 0;                        return (ERR_TRANS);                     }                       if ((block2recv[0] != 0x90) && (block2recv[1] != 0x00) && LEN != 2)                     {                        if (*lenr < LEN)                        {                           *lenr = 0;                           return (ERR_MEMORY);                        }                        *lenr = LEN;                        memcpy (response, block2recv, LEN);                        return OK;                     }                     if ((STS & STS_CardDetect) != STS_CardDetect)                     {                        response[0] = 0x00;                     }                     else                     {                        response[0] = 0x01;                        if ((STS & STS_Powered) == STS_Powered)                        {                           response[0] = response[0] | 0x04;                        }                        else                        {                           response[0] = response[0] | 0x02;                        }                     }                     *lenr = 3;                     response[1] = 0x90;                     response[2] = 0x00;                     return OK;                  default:                     *lenr = 2;                     response[0] = 0x6a;                     response[1] = 0x00;                     return OK;                                        }                break;             case EJECT_ICC:               if (P1 != 0x01)               {                  *lenr = 2;                   response[0] = 0x6a;                  response[1] = 0x00;                  return OK;               }               timing = 0;               if (Lc == 1)               {                  timing = DataField[0]*10;               }               retval = SendBlock(fd, 0x80, sizeof(SP_POWER), SP_POWER);	       if (retval != 0)                {                  *lenr = 0;                  return (ERR_TRANS);               }               retval = GetBlock(fd, &STS, &LEN, block2recv, 500);               if (retval != 0)               {                  *lenr = 0;                  return (ERR_TRANS);               }               for (i=0; i<timing; i++)               {                  retval = SendBlock(fd, 0xc0, sizeof(SP_STATUS), SP_STATUS);                  if (retval != 0)                  {                     *lenr = 0;                     return (ERR_TRANS);                  }                  retval = GetBlock(fd, &STS, &LEN, block2recv, 100);                  if (retval != 0)                  {                     *lenr = 0;                     return (ERR_TRANS);                  }                  if ((STS & STS_CardDetect) != STS_CardDetect)                  {                     *lenr = 2;                     response[0] = 0x90;                     response[1] = 0x01;                     return OK;                  }               scsleep(100);               }               if ((STS & STS_CardDetect) != STS_CardDetect)               {                  *lenr = 2;                  response[0] = 0x90;                  response[1] = 0x01;                  return OK;               }               *lenr = 2;               response[0] = 0x62;               response[1] = 0x00;               return OK;                              break;            default:               if (*lenr <= 2)               {                  *lenr = 0;                  return (ERR_MEMORY);               }               *lenr = 2;               response[0] = 0x6d;               response[1] = 0x00;               return (OK);                     }                    case 0:  // ICC1         *dad = HOST;         *sad = ICC1;         if (*lenr < 2)         {            *lenr = 0;            return (ERR_MEMORY);         }         retval = SendBlock(fd, 0xc0, sizeof(SP_STATUS), SP_STATUS);         if (retval != 0)         {            *lenr = 0;            return (ERR_TRANS);         }         retval = GetBlock(fd, &STS, &LEN, block2recv, 500);         if (retval != 0)         {            *lenr = 0;            return (ERR_TRANS);         }         if ((STS & STS_Powered) != STS_Powered)         {            *sad = CT;            *lenr = 2;            response[0] = 0x6f;            response[1] = 0x00;            return OK;         }                 retval = SendBlock(fd, 0x80, sizeof(SP_SEL_CHAN), SP_SEL_CHAN);         if (retval != 0)         {            *lenr = 0;            return (ERR_TRANS);         }         retval = GetBlock(fd, &STS, &LEN, block2recv, 1000);         if (retval != 0)         {            *lenr = 0;            return (ERR_TRANS);         }         if ((block2recv[0] != 0x90) && (block2recv[1] != 0x00))         {            *sad = CT;            *lenr = 2;            response[0] = 0x6f;            response[1] = 0x00;            return OK;         }                  CTL = CTL_Direction;         if (lenc > 255)         {            CTL = CTL | CTL_MSB;         }         LEN = lenc & 0xff;         retval = SendBlock(fd, CTL, LEN, command);         if (retval != 0)         {            *lenr = 0;            return (ERR_TRANS);         }         retval = GetBlock(fd, &STS, &LEN, block2recv, 1000);         if (retval != 0)         {            *lenr = 0;            return (ERR_TRANS);         }         memcpy(response, block2recv, LEN);         if (STS & STS_MSB == STS_MSB)         {            *lenr = 0x100 | LEN;         }         else         {            *lenr = LEN;         }         return OK;                  break;            }      }char CT_close ( unsigned short  ctn ){   int fd;   if ((fd = ctn2fd[ctn]) < 1)       return ERR_INVALID;   scclose(fd);   ctn2fd[ctn] = 0;   return OK;}      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -