Changeset 616
- Timestamp:
- 12/02/09 11:14:43 (14 years ago)
- Location:
- branches/azbox
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/azbox/csctapi/azbox.c
r614 r616 1 /*2 * azbox.c3 *4 * Created on: 2 Dec 20095 * Author: cogsi6 */7 1 2 #include "azbox.h" 3 4 int xcas_sc_open(void) 5 { 6 int n, rfd = -1; 7 uchar buf[512]; 8 9 bzero(buf, sizeof(buf)); 10 11 // init openxcas 12 if (openxcas_open_with_smartcard("oscam") < 0) { 13 cs_log("azbox: failed to open openxcas"); 14 return -1; 15 } 16 17 sleep(2); 18 19 // open device 20 if ((rfd = openxcas_get_smartcard_device(0)) < 0) { 21 cs_log("azbox: failed to open scard dev"); 22 return -1; 23 } 24 25 // check if card is present 26 if ((n = ioctl (rfd, SCARD_IOC_CHECKCARD, &buf)) >= 3) { 27 cs_log("azbox: failed to check card, status = %d", n); 28 return -1; 29 } 30 31 return rfd; 32 } 33 34 int xcas_sc_read(int rfd, uchar *buf, int l) 35 { 36 return read(rfd, buf, l); 37 } 38 39 int xcas_sc_write(int rfd, uchar *buf, int l) 40 { 41 return write(rfd, buf, l); 42 } 43 44 int xcas_sc_get_atr(int rfd, uchar *atr) 45 { 46 int n; 47 48 buf[0] = 1; 49 if (!(n = ioctl (rfd, SCARD_IOC_CHECKCARD, &atr))) { 50 cs_log("azbox: failed to get atr"); 51 return -1; 52 } 53 54 cs_log("azbox: atr len = %d: %s", n, cs_hexdump(0, buf, n)); 55 56 return n; 57 } 58 59 int xcas_sc_close(int rfd) 60 { 61 rfd = -1; 62 openxcas_release_smartcard_device(0); 63 } -
branches/azbox/csctapi/azbox.h
r614 r616 1 /*2 * azbox.h3 *4 * Created on: 2 Dec 20095 * Author: cogsi6 */7 1 8 2 #ifndef AZBOX_H_ 9 3 #define AZBOX_H_ 10 4 5 #include "globals.h" 6 #include "openxcas/openxcas_api.h" 7 #include "openxcas/openxcas_message.h" 8 #include "openxcas/openxcas_smartcard.h" 9 #include "azbox.h" 10 11 int xcas_sc_open(void); 12 int xcas_sc_read(int rfd, uchar *buf, int l); 13 int xcas_sc_write(int rfd, uchar *buf, int l); 14 int xcas_sc_get_atr(int rfd, uchar *atr, int l); 15 int xcas_sc_close(int rfd); 11 16 12 17 #endif /* AZBOX_H_ */ -
branches/azbox/oscam-config.c
r597 r616 1099 1099 if (!strcmp(token, "protocol")) 1100 1100 { 1101 if (!strcmp(value, "azbox")) { rdr->typ=R_AZBOX; return; } 1101 1102 if (!strcmp(value, "mouse")) { rdr->typ=R_MOUSE; return; } 1102 1103 if (!strcmp(value, "smartreader")) { rdr->typ=R_SMART; return; } -
branches/azbox/reader-common.c
r597 r616 99 99 int rc; 100 100 cs_ddump(buf, l, "write to cardreader %s:",reader[ridx].label); 101 rc = reader_doapi(0, buf, l, D_DEVICE); 101 if (reader[ridx].typ != R_AZBOX) { 102 rc = xcas_sc_write(reader[ridx].fd, buf, l); 103 cta_lr = xcas_sc_read(reader[ridx].fd, cta_res, 512); 104 } else { 105 rc = reader_doapi(0, buf, l, D_DEVICE); 106 } 102 107 cs_ddump(cta_res, cta_lr, "answer from cardreader %s:", reader[ridx].label); 103 108 return rc; … … 120 125 static int reader_activate_card() 121 126 { 122 int i; 123 char ret; 124 125 cta_cmd[0] = CTBCS_INS_RESET; 126 cta_cmd[1] = CTBCS_P2_RESET_GET_ATR; 127 cta_cmd[2] = 0x00; 128 129 ret = reader_cmd2api(cta_cmd, 3); 130 if (ret!=OK) 131 { 132 cs_log("Error reset terminal: %d", ret); 133 return(0); 134 } 127 if (reader[ridx].typ = R_AZBOX) { 128 reader[ridx].fd = xcas_sc_open(); 129 atr_size = xcas_sc_get_atr(reader[ridx].fd, atr); 130 cs_ri_log("ATR: %s", cs_hexdump(1, atr, atr_size)); 131 } else { 132 int i; 133 char ret; 134 135 cta_cmd[0] = CTBCS_INS_RESET; 136 cta_cmd[1] = CTBCS_P2_RESET_GET_ATR; 137 cta_cmd[2] = 0x00; 135 138 136 cta_cmd[0] = CTBCS_CLA; 137 cta_cmd[1] = CTBCS_INS_STATUS; 138 cta_cmd[2] = CTBCS_P1_CT_KERNEL; 139 cta_cmd[3] = CTBCS_P2_STATUS_ICC; 140 cta_cmd[4] = 0x00; 141 142 // ret=reader_cmd2api(cmd, 11); warum 11 ?????? 143 ret=reader_cmd2api(cta_cmd, 5); 144 if (ret!=OK) 145 { 146 cs_log("Error getting status of terminal: %d", ret); 147 return(0); 148 } 149 if (cta_res[0]!=CTBCS_DATA_STATUS_CARD_CONNECT) 150 return(0); 151 152 /* Activate card */ 153 // for (i=0; (i<5) && ((ret!=OK)||(cta_res[cta_lr-2]!=0x90)); i++) 154 for (i=0; i<5; i++) 155 { 156 //reader_irdeto_mode = i%2 == 1; //does not work when overclocking 139 ret = reader_cmd2api(cta_cmd, 3); 140 if (ret!=OK) 141 { 142 cs_log("Error reset terminal: %d", ret); 143 return(0); 144 } 145 157 146 cta_cmd[0] = CTBCS_CLA; 158 cta_cmd[1] = CTBCS_INS_ REQUEST;159 cta_cmd[2] = CTBCS_P1_ INTERFACE1;160 cta_cmd[3] = CTBCS_P2_ REQUEST_GET_ATR;147 cta_cmd[1] = CTBCS_INS_STATUS; 148 cta_cmd[2] = CTBCS_P1_CT_KERNEL; 149 cta_cmd[3] = CTBCS_P2_STATUS_ICC; 161 150 cta_cmd[4] = 0x00; 162 151 152 // ret=reader_cmd2api(cmd, 11); warum 11 ?????? 163 153 ret=reader_cmd2api(cta_cmd, 5); 164 if ((ret==OK)||(cta_res[cta_lr-2]==0x90)) 165 { 166 i=100; 167 break; 168 } 169 cs_log("Error activating card: %d", ret); 170 cs_sleepms(500); 171 } 172 if (i<100) return(0); 173 174 /* Store ATR */ 175 atr_size=cta_lr-2; 176 memcpy(atr, cta_res, atr_size); 177 #ifdef CS_RDR_INIT_HIST 178 reader[ridx].init_history_pos=0; 179 memset(reader[ridx].init_history, 0, sizeof(reader[ridx].init_history)); 180 #endif 181 cs_ri_log("ATR: %s", cs_hexdump(1, atr, atr_size)); 182 if (!memcmp(atr+4, "IRDETO", 6)) 183 reader_irdeto_mode = 1; 184 else 185 reader_irdeto_mode = 0; 154 if (ret!=OK) 155 { 156 cs_log("Error getting status of terminal: %d", ret); 157 return(0); 158 } 159 if (cta_res[0]!=CTBCS_DATA_STATUS_CARD_CONNECT) 160 return(0); 161 162 /* Activate card */ 163 // for (i=0; (i<5) && ((ret!=OK)||(cta_res[cta_lr-2]!=0x90)); i++) 164 for (i=0; i<5; i++) 165 { 166 //reader_irdeto_mode = i%2 == 1; //does not work when overclocking 167 cta_cmd[0] = CTBCS_CLA; 168 cta_cmd[1] = CTBCS_INS_REQUEST; 169 cta_cmd[2] = CTBCS_P1_INTERFACE1; 170 cta_cmd[3] = CTBCS_P2_REQUEST_GET_ATR; 171 cta_cmd[4] = 0x00; 172 173 ret=reader_cmd2api(cta_cmd, 5); 174 if ((ret==OK)||(cta_res[cta_lr-2]==0x90)) 175 { 176 i=100; 177 break; 178 } 179 cs_log("Error activating card: %d", ret); 180 cs_sleepms(500); 181 } 182 if (i<100) return(0); 183 184 /* Store ATR */ 185 atr_size=cta_lr-2; 186 memcpy(atr, cta_res, atr_size); 187 #ifdef CS_RDR_INIT_HIST 188 reader[ridx].init_history_pos=0; 189 memset(reader[ridx].init_history, 0, sizeof(reader[ridx].init_history)); 190 #endif 191 cs_ri_log("ATR: %s", cs_hexdump(1, atr, atr_size)); 192 if (!memcmp(atr+4, "IRDETO", 6)) 193 reader_irdeto_mode = 1; 194 else 195 reader_irdeto_mode = 0; 196 } 186 197 sleep(1); 187 198 return(1); … … 299 310 cs_ptyp=D_DEVICE; 300 311 snprintf(oscam_device, sizeof(oscam_device), "%s", device); 301 if ((rc=CT_init(1, reader_device_type(device, typ),reader[ridx].typ,reader[ridx].mhz))!=OK) 302 cs_log("Cannot open device: %s", device); 312 if (reader[ridx].typ != R_AZBOX) { 313 if ((rc=CT_init(1, reader_device_type(device, typ),reader[ridx].typ,reader[ridx].mhz))!=OK) 314 cs_log("Cannot open device: %s", device); 315 } else rc = OK; 303 316 cs_debug("ct_init on %s: %d", device, rc); 304 317 cs_ptyp=cs_ptyp_orig; -
branches/azbox/reader-common.h
r94 r616 1 1 #include "ctapi.h" 2 2 #include "ctbcs.h" 3 #include "azbox.h" 3 4 4 5 #define ADDRLEN 4 // Address length in EMM commands
Note:
See TracChangeset
for help on using the changeset viewer.