📄 ctapi.c
字号:
{ *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 + -