Changeset 4352
- Timestamp:
- 01/06/11 23:15:28 (13 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/atr.h
r3198 r4352 77 77 */ 78 78 79 typedef struct 79 typedef struct s_ATR 80 80 { 81 81 unsigned length; -
trunk/csctapi/icc_async.c
r4196 r4352 82 82 reader->written = 0; 83 83 84 if (reader->crdr.active==1 && reader->crdr.reader_init) { 85 return reader->crdr.reader_init(reader); 86 } 87 84 88 switch(reader->typ) { 85 89 case R_SC8in1: … … 214 218 { 215 219 int in=0; 216 217 // printf("\n%08X\n", (int)ifd->io); 218 220 221 if (reader->crdr.active==1 && reader->crdr.get_status) { 222 reader->crdr.get_status(reader, &in); 223 224 if (in) 225 *card = TRUE; 226 else 227 *card = FALSE; 228 229 return OK; 230 } 231 219 232 switch(reader->typ) { 220 233 case R_DB2COM1: … … 287 300 } 288 301 else { 302 if (reader->crdr.active && reader->crdr.activate) { 303 call(reader->crdr.activate(reader, atr)); 304 } else { 305 289 306 switch(reader->typ) { 290 307 case R_MP35: … … 339 356 return ERROR; 340 357 } 358 } 341 359 } 342 360 … … 440 458 sent = data; 441 459 460 if (reader->crdr.active==1 && reader->crdr.transmit) { 461 call(reader->crdr.transmit(reader, sent, size)); 462 if (buffer) 463 free (buffer); 464 cs_debug_mask(D_IFD, "IFD Transmit succesful"); 465 return OK; 466 } 467 442 468 switch(reader->typ) { 443 469 case R_MP35: … … 477 503 int ICC_Async_Receive (struct s_reader *reader, unsigned size, BYTE * data) 478 504 { 505 506 if (reader->crdr.active && reader->crdr.receive) { 507 call(reader->crdr.receive(reader, data, size)); 508 509 if (reader->convention == ATR_CONVENTION_INVERSE && reader->crdr.set_baudrate) 510 ICC_Async_InvertBuffer (size, data); 511 512 cs_ddump_mask(D_IFD, data, size, "IFD Received: "); 513 return OK; 514 } 515 479 516 switch(reader->typ) { 480 517 case R_MP35: … … 516 553 { 517 554 cs_debug_mask (D_IFD, "IFD: Closing device %s", reader->device); 555 556 if (reader->crdr.active && reader->crdr.close) { 557 call(reader->crdr.close(reader)); 558 cs_debug_mask (D_IFD, "IFD: Device %s succesfully closed", reader->device); 559 return OK; 560 } 518 561 519 562 switch(reader->typ) { … … 728 771 cs_debug_mask (D_IFD, "PTS: Sending request: %s", cs_hexdump(1, params, len_request)); 729 772 773 if (reader->crdr.active && reader->crdr.set_protocol) { 774 ret = reader->crdr.set_protocol(reader, params, length, len_request); 775 return ret; 776 } 777 730 778 #if defined(WITH_STAPI) && !defined(SCI_DEV) 731 779 ret = STReader_SetProtocol(reader->stsmart_handle, params, length, len_request); … … 782 830 static int ICC_Async_SetParity (struct s_reader * reader, unsigned short parity) 783 831 { 832 if (reader->crdr.active && reader->crdr.set_parity) { 833 call(reader->crdr.set_parity(reader, parity)); 834 return OK; 835 } 836 784 837 switch(reader->typ) { 785 838 case R_MP35: … … 843 896 844 897 //set clock speed to max if internal reader 845 if(reader->typ > R_MOUSE )898 if(reader->typ > R_MOUSE || (reader->crdr.active == 1 && reader->crdr.set_baudrate)) 846 899 if (reader->mhz == 357 || reader->mhz == 358) //no overclocking 847 900 reader->mhz = atr_fs_table[FI] / 10000; //we are going to clock the card to this nominal frequency … … 856 909 if (reader->protocol_type != ATR_PROTOCOL_TYPE_T14) { //dont switch for T14 857 910 unsigned long baud_temp = d * ICC_Async_GetClockRate (reader->cardmhz) / F; 858 if (reader->typ <= R_MOUSE) 859 call (Phoenix_SetBaudrate (reader, baud_temp)); 911 if (reader->crdr.active == 1) { 912 if (reader->crdr.set_baudrate) 913 call (reader->crdr.set_baudrate(reader, baud_temp)); 914 } else { 915 if (reader->typ <= R_MOUSE) 916 call (Phoenix_SetBaudrate(reader, baud_temp)); 917 } 860 918 cs_debug_mask(D_IFD, "Setting baudrate to %lu", baud_temp); 861 919 reader->current_baudrate = baud_temp; //this is needed for all readers to calculate work_etu for timings … … 972 1030 call (SetRightParity (reader)); 973 1031 1032 if (reader->crdr.active && reader->crdr.write_settings) { 1033 unsigned long ETU = 0; 1034 //for Irdeto T14 cards, do not set ETU 1035 if (!(atr->hbn >= 6 && !memcmp(atr->hb, "IRDETO", 6) && reader->protocol_type == ATR_PROTOCOL_TYPE_T14)) 1036 ETU = F / d; 1037 call(reader->crdr.write_settings(reader, ETU, EGT, 5, I)); 1038 } 1039 974 1040 //write settings to internal device 975 1041 if(reader->typ == R_INTERNAL) { -
trunk/csctapi/ifd_phoenix.c
r4149 r4352 283 283 284 284 } 285 286 static int mouse_init(struct s_reader *reader) { 287 cs_log("mouse_test init"); 288 reader->handle = open (reader->device, O_RDWR | O_NOCTTY| O_NONBLOCK); 289 if (reader->handle < 0) { 290 cs_log("ERROR opening device %s",reader->device); 291 return ERROR; 292 } 293 if (Phoenix_Init(reader)) { 294 cs_log("ERROR: Phoenix_Init returns error"); 295 Phoenix_Close (reader); 296 return ERROR; 297 } 298 return OK; 299 } 300 301 static int mouse_receive(struct s_reader *reader, unsigned char *data, unsigned int size) { 302 return Phoenix_Receive(reader, data, size, reader->read_timeout); 303 } 304 305 static int mouse_transmit(struct s_reader *reader, unsigned char *sent, unsigned int size) { 306 return Phoenix_Transmit(reader, sent, size, reader->block_delay, reader->char_delay); 307 } 308 309 void cardreader_mouse(struct s_cardreader *crdr) 310 { 311 strcpy(crdr->desc, "mouse_test"); 312 crdr->reader_init = mouse_init; 313 crdr->get_status = Phoenix_GetStatus; 314 crdr->activate = Phoenix_Reset; 315 crdr->transmit = mouse_transmit; 316 crdr->receive = mouse_receive; 317 crdr->close = Phoenix_Close; 318 crdr->set_parity = IO_Serial_SetParity; 319 crdr->set_baudrate = Phoenix_SetBaudrate; 320 } 321 -
trunk/globals.h
r4348 r4352 512 512 PTAB *ptab; 513 513 int num; 514 }; 515 516 struct s_ATR ; 517 518 struct s_cardreader 519 { 520 int active; 521 char desc[16]; 522 int (*reader_init)(struct s_reader*); 523 int (*get_status)(struct s_reader*, int*); 524 int (*activate)(struct s_reader*, struct s_ATR *); 525 int (*transmit)(struct s_reader*, unsigned char *sent, unsigned int size); 526 int (*receive)(struct s_reader*, unsigned char *data, unsigned int size); 527 int (*close)(struct s_reader*); 528 int (*set_parity)(struct s_reader*, uchar parity); 529 int (*write_settings)(struct s_reader*, unsigned long ETU, unsigned long EGT, unsigned char P, unsigned char I); 530 int (*set_protocol)(struct s_reader*, unsigned char * params, unsigned *length, uint len_request); 531 int (*set_baudrate)(struct s_reader*, ulong baud); //set only for readers which need baudrate setting and timings need to be guarded by OSCam 514 532 }; 515 533 … … 803 821 int deprecated; //if 0 ATR obeyed, if 1 default speed (9600) is chosen; for devices that cannot switch baudrate 804 822 struct s_module ph; 823 struct s_cardreader crdr; 805 824 uchar ncd_key[16]; 806 825 uchar ncd_skey[16]; … … 1302 1321 extern struct s_module ph[CS_MAX_MOD]; 1303 1322 extern struct s_cardsystem cardsystem[CS_MAX_MOD]; 1323 extern struct s_cardreader cardreader[CS_MAX_MOD]; 1304 1324 //extern ECM_REQUEST *ecmtask; 1305 1325 … … 1532 1552 void reader_tongfang(); 1533 1553 1554 void cardreader_mouse(); 1555 1534 1556 // protocol modules 1535 1557 extern int monitor_send_idx(struct s_client *, char *); -
trunk/oscam-config.c
r4348 r4352 3255 3255 if (!strcmp(token, "protocol")) { 3256 3256 3257 for (i=0; i<CS_MAX_MOD; i++) { 3258 if (!strcmp(value, cardreader[i].desc)) { 3259 rdr->crdr = cardreader[i]; 3260 rdr->crdr.active = 1; 3261 rdr->typ = R_MOUSE; //FIXME 3262 return; 3263 } 3264 } 3265 3257 3266 if (!strcmp(value, "mp35")) { 3258 3267 rdr->typ = R_MP35; -
trunk/oscam.c
r4323 r4352 22 22 *****************************************************************************/ 23 23 int exit_oscam=0; 24 struct s_module ph[CS_MAX_MOD]; // Protocols 25 struct s_cardsystem cardsystem[CS_MAX_MOD]; // Protocols 24 struct s_module ph[CS_MAX_MOD]; // Protocols 25 struct s_cardsystem cardsystem[CS_MAX_MOD]; 26 struct s_cardreader cardreader[CS_MAX_MOD]; 27 26 28 struct s_client * first_client = NULL; //Pointer to clients list, first client is master 27 29 struct s_reader * first_reader = NULL; … … 3264 3266 }; 3265 3267 3268 void (*cardreader_def[])(struct s_cardreader *)= 3269 { 3270 cardreader_mouse, 3271 0 3272 }; 3273 3266 3274 while ((i=getopt(argc, argv, "bc:t:d:r:hm:x"))!=EOF) 3267 3275 { … … 3332 3340 memset(&cardsystem[i], 0, sizeof(struct s_cardsystem)); 3333 3341 cardsystem_def[i](&cardsystem[i]); 3342 } 3343 3344 memset(&cardreader, 0, sizeof(struct s_cardsystem) * CS_MAX_MOD); 3345 for (i=0; cardreader_def[i]; i++) // must be later BEFORE init_config() 3346 { 3347 cardreader_def[i](&cardreader[i]); 3334 3348 } 3335 3349
Note:
See TracChangeset
for help on using the changeset viewer.