Changeset 678
- Timestamp:
- 12/04/09 08:52:18 (14 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-common.c
r615 r678 447 447 } 448 448 449 ////remove this when customspeed is solved generically 450 #include <termios.h> 451 #include <unistd.h> 452 #ifdef OS_LINUX 453 #include <linux/serial.h> 454 #endif 455 456 void Force_Baudrate_After_ATR(int newbaud) { 457 //baudrate will automatically be adjusted when overclocking 458 459 #ifdef OS_LINUX 460 if (reader[ridx].typ != R_INTERN) { 461 int bconst=B38400; 462 int baud=newbaud * reader[ridx].mhz/reader[ridx].cardmhz; 463 int fd=open(reader[ridx].device,O_RDWR|O_NONBLOCK|O_NOCTTY); 464 465 struct termios tio; 466 memset(&tio,0,sizeof(tio)); 467 tio.c_cflag = (CS8 | CREAD | HUPCL | CLOCAL); 468 tio.c_cflag |= CSTOPB; 469 tio.c_iflag = (INPCK | BRKINT); 470 tio.c_cc[VMIN] = 1; 471 cfsetispeed(&tio,bconst); 472 cfsetospeed(&tio,bconst); 473 tio.c_cflag |= (PARENB | PARODD); 474 475 struct serial_struct s; 476 if(ioctl(fd,TIOCGSERIAL,&s)<0) { 477 cs_log("%s: get serial failed: %s",reader[ridx].device,strerror(errno)); 478 return 0; 479 } 480 if(!tcsetattr(fd,TCSANOW,&tio)) { 481 if (reader[ridx].custom_speed) { 482 s.custom_divisor=(s.baud_base+(baud/2))/baud; 483 s.flags=(s.flags&~ASYNC_SPD_MASK) | ASYNC_SPD_CUST; 484 cs_log ("%s: custom: baud_base=%d baud=%d divisor=%d -> effective baudrate %d (%+.2f%% off)", 485 reader[ridx].device,s.baud_base,baud,s.custom_divisor,s.baud_base/s.custom_divisor, 486 (float)(s.baud_base/s.custom_divisor-baud)/(float)baud); 487 } else { 488 s.flags &= ~ASYNC_SPD_CUST; 489 cs_log ("%s: baud=%d", reader[ridx].device, 38400); 490 } 491 if(ioctl(fd,TIOCSSERIAL,&s)<0) { 492 cs_log ("%s: set serial failed: %s",reader[ridx].device,strerror(errno)); 493 return 0; 494 } 495 } 496 else { 497 cs_log ("%s: tcsetattr failed: %s",reader[ridx].device,strerror(errno)); 498 return 0; 499 } 500 } 501 #endif 502 }; 503 -
trunk/reader-nagra.c
r666 r678 472 472 return 0; 473 473 } 474 int setBaudrate(void)475 {476 #ifdef OS_LINUX477 if (reader[ridx].typ != R_INTERN)478 {479 int bconst=B38400;480 int baud=115200 * reader[ridx].mhz/reader[ridx].cardmhz;481 482 int fd=open(reader[ridx].device,O_RDWR|O_NONBLOCK|O_NOCTTY);483 484 struct termios tio;485 memset(&tio,0,sizeof(tio));486 tio.c_cflag = (CS8 | CREAD | HUPCL | CLOCAL);487 tio.c_cflag |= CSTOPB;488 tio.c_iflag = (INPCK | BRKINT);489 tio.c_cc[VMIN] = 1;490 cfsetispeed(&tio,bconst);491 cfsetospeed(&tio,bconst);492 tio.c_cflag |= (PARENB | PARODD);493 494 struct serial_struct s;495 if(ioctl(fd,TIOCGSERIAL,&s)<0)496 {497 cs_log("%s: get serial failed: %s",reader[ridx].device,strerror(errno));498 return 0;499 }500 if(!tcsetattr(fd,TCSANOW,&tio))501 {502 if (reader[ridx].custom_speed)503 {504 s.custom_divisor=(s.baud_base+(baud/2))/baud;505 s.flags=(s.flags&~ASYNC_SPD_MASK) | ASYNC_SPD_CUST;506 cs_log ("%s: custom: baud_base=%d baud=%d divisor=%d -> effective baudrate %d (%+.2f%% off)",507 reader[ridx].device,s.baud_base,baud,s.custom_divisor,s.baud_base/s.custom_divisor,508 (float)(s.baud_base/s.custom_divisor-baud)/(float)baud);509 }510 else511 {512 s.flags &= ~ASYNC_SPD_CUST;513 cs_log ("%s: baud=%d", reader[ridx].device, 38400);514 }515 if(ioctl(fd,TIOCSSERIAL,&s)<0)516 {517 cs_log ("%s: set serial failed: %s",reader[ridx].device,strerror(errno));518 return 0;519 }520 }521 else522 {523 cs_log ("%s: tcsetattr failed: %s",reader[ridx].device,strerror(errno));524 return 0;525 }526 }527 #endif528 return 1;529 }530 474 531 475 int nagra2_card_init(uchar *atr, int atrlen) … … 540 484 { 541 485 //if(SetIFS(0xFE) != 1) return 0; 542 if (!setBaudrate()) return 0; 486 Force_Baudrate_After_ATR(115200);//FIXME not necessary for a lot of cards!!! Try to call this routine only for ATRs that need it! 543 487 cs_debug("[nagra-reader] detect pure nagra card T1 protocol"); 544 488 is_pure_nagra=1; -
trunk/reader-videoguard2.c
r622 r678 653 653 //this way also unknown videoguard2/NDS cards will work 654 654 655 656 #ifdef OS_LINUX 657 if (reader[ridx].typ != R_INTERN) { 658 int bconst=B38400; 659 int baud=64516 * reader[ridx].mhz/reader[ridx].cardmhz; 660 int fd=open(reader[ridx].device,O_RDWR|O_NONBLOCK|O_NOCTTY); 661 662 struct termios tio; 663 memset(&tio,0,sizeof(tio)); 664 tio.c_cflag = (CS8 | CREAD | HUPCL | CLOCAL); 665 tio.c_cflag |= CSTOPB; 666 tio.c_iflag = (INPCK | BRKINT); 667 tio.c_cc[VMIN] = 1; 668 cfsetispeed(&tio,bconst); 669 cfsetospeed(&tio,bconst); 670 tio.c_cflag |= (PARENB | PARODD); 671 672 struct serial_struct s; 673 if(ioctl(fd,TIOCGSERIAL,&s)<0) { 674 cs_log("%s: get serial failed: %s",reader[ridx].device,strerror(errno)); 675 return 0; 676 } 677 if(!tcsetattr(fd,TCSANOW,&tio)) { 678 if (reader[ridx].custom_speed) { 679 s.custom_divisor=(s.baud_base+(baud/2))/baud; 680 s.flags=(s.flags&~ASYNC_SPD_MASK) | ASYNC_SPD_CUST; 681 cs_log ("%s: custom: baud_base=%d baud=%d divisor=%d -> effective baudrate %d (%+.2f%% off)", 682 reader[ridx].device,s.baud_base,baud,s.custom_divisor,s.baud_base/s.custom_divisor, 683 (float)(s.baud_base/s.custom_divisor-baud)/(float)baud); 684 } else { 685 s.flags &= ~ASYNC_SPD_CUST; 686 cs_log ("%s: baud=%d", reader[ridx].device, 38400); 687 } 688 if(ioctl(fd,TIOCSSERIAL,&s)<0) { 689 cs_log ("%s: set serial failed: %s",reader[ridx].device,strerror(errno)); 690 return 0; 691 } 692 } 693 else { 694 cs_log ("%s: tcsetattr failed: %s",reader[ridx].device,strerror(errno)); 695 return 0; 696 } 697 } 698 #endif 655 Force_Baudrate_After_ATR(64516);//FIXME not necessary for a lot of cards!!! Try to call this routine only for ATRs that need it! 699 656 700 657 unsigned char ins7401[5] = { 0xD0,0x74,0x01,0x00,0x00 };
Note:
See TracChangeset
for help on using the changeset viewer.