Changeset 3028
- Timestamp:
- 09/09/10 19:58:27 (14 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r3015 r3028 258 258 extern void cs_switch_led(int led, int action); 259 259 #endif 260 261 262 #define MAX_ATR_LEN 33 // max. ATR length 263 #define MAX_HIST 15 // max. number of historical characters 264 260 265 261 266 typedef struct s_classtab … … 365 370 struct aes_entry *next; 366 371 } AES_ENTRY; 372 373 typedef struct nds_atr { 374 char atr[MAX_ATR_LEN]; 375 ushort atr_len; 376 int base_year; 377 const char *desc; 378 } NDS_ATR_ENTRY; 367 379 368 380 struct s_ecm -
trunk/reader-common.c
r3026 r3028 269 269 else if (viaccess_card_init(reader, atr)) 270 270 reader->card_system=SC_VIACCESS; 271 272 273 274 271 else if (videoguard1_card_init(reader, atr)) 272 reader->card_system=SC_VIDEOGUARD1; 273 else if (videoguard12_card_init(reader, atr)) 274 reader->card_system=SC_VIDEOGUARD12; 275 275 else if (videoguard2_card_init(reader, atr)) 276 276 reader->card_system=SC_VIDEOGUARD2; -
trunk/reader-videoguard1.c
r3026 r3028 245 245 int videoguard1_card_init(struct s_reader *reader, ATR newatr) 246 246 { 247 248 /* known class 48 only atrs */ 249 NDS_ATR_ENTRY nds1_atr_table[]={ 250 {{ 0x3F, 0x78, 0x13, 0x25, 0x04, 0x40, 0xB0, 0x09, 0x4A, 0x50, 0x01, 0x4E, 0x5A }, 13, 1992, "VideoGuard Sky New Zealand (0969)"}, 251 {{0},0,0,NULL}, 252 }; 253 247 254 get_hist; 248 255 // 40 B0 09 4A 50 01 4E 5A … … 256 263 get_atr; 257 264 def_resp; 258 259 /* known class 48 only atrs */ 260 unsigned char atr_skynz_969[] = { 0x3F, 0x78, 0x13, 0x25, 0x04, 0x40, 0xB0, 0x09, 0x4A, 0x50, 0x01, 0x4E, 0x5A }; 261 262 if ((atr_size == sizeof(atr_skynz_969)) && (memcmp(atr, atr_skynz_969, atr_size) == 0)) { 263 cs_log("[videoguard1-reader] type: VideoGuard Sky New Zealand (0969)"); 264 VG1_BASEYEAR = 1992; 265 } 265 int i=0; 266 while(nds1_atr_table[i].desc) { 267 if ((atr_size == nds1_atr_table[i].atr_len) && (memcmp (atr, nds1_atr_table[i].atr, atr_size) == 0)) { 268 VG1_BASEYEAR=nds1_atr_table[i].base_year; 269 cs_ri_log(reader, "[videoguard1-reader] type: %s", nds1_atr_table[i].desc); 270 break; 271 } 272 i++; 273 } 274 if(!nds1_atr_table[i].desc) 275 return ERROR; // unknown ATR... probably not NDS1 276 266 277 // NDS1 NZ Class 48 cards do not respond to do_cmd(ins7416) 267 278 // nor do they return list of valid command therefore do not even try -
trunk/reader-videoguard12.c
r3026 r3028 586 586 int videoguard12_card_init(struct s_reader * reader, ATR newatr) 587 587 { 588 589 /* known atrs */ 590 NDS_ATR_ENTRY nds12_atr_table[]={ 591 {{ 0x3F, 0x78, 0x13, 0x25, 0x03, 0x40, 0xB0, 0x20, 0xFF, 0xFF, 0x4A, 0x50, 0x00 }, 13, 1997, "VideoGuard DirecTV"}, 592 {{0},0,0,NULL}, 593 }; 594 588 595 get_hist; 589 596 if ((hist_size < 7) || (hist[1] != 0xB0) || (hist[4] != 0xFF) || (hist[5] != 0x4A) || (hist[6] != 0x50)) … … 592 599 def_resp; 593 600 594 /* known atrs */ 595 unsigned char atr_directv[] = { 0x3F, 0x78, 0x13, 0x25, 0x03, 0x40, 0xB0, 0x20, 0xFF, 0xFF, 0x4A, 0x50, 0x00 }; 596 597 if ((atr_size == sizeof (atr_directv)) && (memcmp (atr, atr_directv, atr_size) == 0)) 598 { 599 cs_ri_log(reader, "[videoguard12-reader] type: VideoGuard DirecTV"); 600 } 601 else { 602 return ERROR; 603 } 601 int i=0; 602 while(nds12_atr_table[i].desc) { 603 if ((atr_size == nds12_atr_table[i].atr_len) && (memcmp (atr, nds12_atr_table[i].atr, atr_size) == 0)) { 604 VG12_BASEYEAR=nds12_atr_table[i].base_year; 605 cs_ri_log(reader, "[videoguard12-reader] type: %s", nds12_atr_table[i].desc); 606 break; 607 } 608 i++; 609 } 610 if(!nds12_atr_table[i].desc) 611 return ERROR; // unknown ATR... probably not NDS1+ 612 613 604 614 605 615 //a non videoguard2/NDS card will fail on read_cmd_len(ins7401) -
trunk/reader-videoguard2.c
r3027 r3028 7 7 #include <linux/serial.h> 8 8 #endif 9 10 #define MAX_ATR_LEN 33 // max. ATR length11 #define MAX_HIST 15 // max. number of historical characters12 9 13 10 #define VG2_EMMTYPE_MASK 0xC0 … … 586 583 int videoguard2_card_init(struct s_reader * reader, ATR newatr) 587 584 { 585 586 /* known atrs */ 587 NDS_ATR_ENTRY nds2_atr_table[]={ 588 {{ 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x00, 0x0F, 0x33, 0xB0, 0x0F, 0x69, 0xFF, 0x4A, 0x50, 0xD0, 0x00, 0x00, 0x53, 0x59, 0x02 }, 21, 1997,"VideoGuard BSkyB (0963)"}, 589 {{ 0x3F, 0xFF, 0x13, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x0E, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x49, 0x54, 0x02, 0x00, 0x00 }, 22, 1997,"VideoGuard Sky Italia (0919)"}, 590 {{ 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x33, 0xB0, 0x13, 0x69, 0xFF, 0x4A, 0x50, 0xD0, 0x80, 0x00, 0x49, 0x54, 0x03 }, 21, 1997, "VideoGuard Sky Italia (093B)"}, 591 {{ 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x54, 0xB0, 0x04, 0x69, 0xFF, 0x4A, 0x50, 0xD0, 0x80, 0x00, 0x49, 0x54, 0x03 }, 21, 1997, "VideoGuard Sky Italia (09CD)"}, 592 {{ 0x3F, 0xFF, 0x13, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x11, 0x69, 0xFF, 0x4A, 0x50, 0x50, 0x00, 0x00, 0x47, 0x54, 0x01, 0x00, 0x00 }, 22, 1997, "VideoGuard YES DBS Israel"}, 593 {{ 0x3F, 0x7D, 0x11, 0x25, 0x02, 0x41, 0xB0, 0x03, 0x69, 0xFF, 0x4A, 0x50, 0xF0, 0x80, 0x00, 0x56, 0x54, 0x03}, 18, 2000, "VideoGuard Viasat (093E)"}, 594 {{ 0x3F, 0x7F, 0x11, 0x25, 0x03, 0x33, 0xB0, 0x09, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x56, 0x54, 0x01, 0x00, 0x00 }, 20, 2000, "VideoGuard Viasat Scandinavia"}, 595 {{ 0x3F, 0xFF, 0x11, 0x25, 0x03, 0x10, 0x80, 0x41, 0xB0, 0x07, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x50, 0x31, 0x01, 0x00, 0x11 }, 22, 1997, "VideoGuard Sky Germany"}, 596 {{ 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x41, 0xB0, 0x01, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x5A, 0x48, 0x01, 0x00, 0x00 }, 22, 2004, "VideoGuard DSMART Turkey"}, 597 {{ 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x54, 0xB0, 0x01, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x4B, 0x57, 0x01, 0x00, 0x00}, 22 , 1997, "VideoGuard Kabel BW"}, 598 {{ 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x10, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x5A, 0x45, 0x01, 0x00, 0x00}, 22 , 2004, "VideoGuard Get Kabel Norway"}, 599 {{ 0x3F, 0x7F, 0x11, 0x25, 0x03, 0x33, 0xB0, 0x09, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x46, 0x44, 0x01, 0x00, 0x00}, 20, 2000, "VideoGuard Foxtel Australia (090B)"}, 600 {{ 0x3F, 0x7F, 0x13, 0x25, 0x04, 0x33, 0xB0, 0x02, 0x69, 0xFF, 0x4A, 0x50, 0xE0, 0x00, 0x00, 0x54, 0x42, 0x00, 0x00, 0x00}, 20, 1997, "VideoGuard China (0988)"}, 601 {{ 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x41, 0xB0, 0x02, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x80, 0x00, 0x58, 0x38, 0x01, 0x00, 0x14}, 22, 1997, "VideoGuard TopTV (09B8)"}, 602 {{ 0x3F, 0xFF, 0x13, 0x25, 0x02, 0x40, 0xB0, 0x12, 0x69, 0xFF, 0x4A, 0x50, 0x90, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00 }, 20, 2000, "VideoGuard SkyBrasil GL23 (0942)"}, 603 {{ 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x33, 0xB0, 0x08, 0xFF, 0xFF, 0x4A, 0x50, 0x90, 0x00, 0x00, 0x47, 0x4C, 0x01}, 21, 2004, "VideoGuard SkyBrasil GL39 (0907)"}, 604 {{ 0x3F, 0xFF, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x54, 0xB0, 0x03, 0xFF, 0xFF, 0x4A, 0x50, 0x80, 0x00, 0x00, 0x00, 0x00, 0x47, 0x4C, 0x05 }, 22, 2009, "VideoGuard SkyBrasil GL54 (0943)"}, 605 {{ 0x3F, 0xFF, 0x13, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x10, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x4E, 0x5A, 0x01, 0x00, 0x00}, 13, 1992, "VideoGuard Sky New Zealand (096A)"}, 606 {{0},0,0,NULL}, 607 }; 608 588 609 get_hist; 589 610 if ((hist_size < 7) || (hist[1] != 0xB0) || (hist[4] != 0xFF) || (hist[5] != 0x4A) || (hist[6] != 0x50)) … … 591 612 get_atr; 592 613 def_resp; 593 /* known atrs */ 594 unsigned char atr_bskyb_new[] = { 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x00, 0x0F, 0x33, 0xB0, 0x0F, 0x69, 0xFF, 0x4A, 0x50, 0xD0, 0x00, 0x00, 0x53, 0x59, 0x02 }; 595 unsigned char atr_skyitalia919[] = { 0x3F, 0xFF, 0x13, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x0E, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x49, 0x54, 0x02, 0x00, 0x00 }; 596 unsigned char atr_skyitalia93b[] = { 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x33, 0xB0, 0x13, 0x69, 0xFF, 0x4A, 0x50, 0xD0, 0x80, 0x00, 0x49, 0x54, 0x03 }; 597 unsigned char atr_skyitalia9cd[] = { 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x54, 0xB0, 0x04, 0x69, 0xFF, 0x4A, 0x50, 0xD0, 0x80, 0x00, 0x49, 0x54, 0x03 }; 598 unsigned char atr_yes[] = { 0x3F, 0xFF, 0x13, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x11, 0x69, 0xFF, 0x4A, 0x50, 0x50, 0x00, 0x00, 0x47, 0x54, 0x01, 0x00, 0x00 }; 599 unsigned char atr_viasat_new[] = { 0x3F, 0x7D, 0x11, 0x25, 0x02, 0x41, 0xB0, 0x03, 0x69, 0xFF, 0x4A, 0x50, 0xF0, 0x80, 0x00, 0x56, 0x54, 0x03}; 600 unsigned char atr_dsmart[] = { 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x41, 0xB0, 0x01, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x5A, 0x48, 0x01, 0x00, 0x00 }; 601 unsigned char atr_viasat_scandinavia[] = { 0x3F, 0x7F, 0x11, 0x25, 0x03, 0x33, 0xB0, 0x09, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x56, 0x54, 0x01, 0x00, 0x00 }; 602 unsigned char atr_premiere[] = { 0x3F, 0xFF, 0x11, 0x25, 0x03, 0x10, 0x80, 0x41, 0xB0, 0x07, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x50, 0x31, 0x01, 0x00, 0x11 }; 603 unsigned char atr_kbw[] = { 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x54, 0xB0, 0x01, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x4B, 0x57, 0x01, 0x00, 0x00}; 604 unsigned char atr_get[] = { 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x10, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x5A, 0x45, 0x01, 0x00, 0x00}; 605 unsigned char atr_foxtel_90b[] = { 0x3F, 0x7F, 0x11, 0x25, 0x03, 0x33, 0xB0, 0x09, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x46, 0x44, 0x01, 0x00, 0x00}; 606 unsigned char atr_china_988[] = { 0x3F, 0x7F, 0x13, 0x25, 0x04, 0x33, 0xB0, 0x02, 0x69, 0xFF, 0x4A, 0x50, 0xE0, 0x00, 0x00, 0x54, 0x42, 0x00, 0x00, 0x00}; 607 unsigned char atr_toptv_9b8[] = { 0x3F, 0xFF, 0x14, 0x25, 0x03, 0x10, 0x80, 0x41, 0xB0, 0x02, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x80, 0x00, 0x58, 0x38, 0x01, 0x00, 0x14}; 608 unsigned char atr_skybrgl23[] = { 0x3F, 0xFF, 0x13, 0x25, 0x02, 0x40, 0xB0, 0x12, 0x69, 0xFF, 0x4A, 0x50, 0x90, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00 }; 609 unsigned char atr_skybrgl39[] = { 0x3F, 0xFD, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x33, 0xB0, 0x08, 0xFF, 0xFF, 0x4A, 0x50, 0x90, 0x00, 0x00, 0x47, 0x4C, 0x01}; 610 unsigned char atr_skybrgl54[] = { 0x3F, 0xFF, 0x13, 0x25, 0x02, 0x50, 0x80, 0x0F, 0x54, 0xB0, 0x03, 0xFF, 0xFF, 0x4A, 0x50, 0x80, 0x00, 0x00, 0x00, 0x00, 0x47, 0x4C, 0x05 }; 611 unsigned char atr_skynz_96a[] = { 0x3F, 0xFF, 0x13, 0x25, 0x03, 0x10, 0x80, 0x33, 0xB0, 0x10, 0x69, 0xFF, 0x4A, 0x50, 0x70, 0x00, 0x00, 0x4E, 0x5A, 0x01, 0x00, 0x00}; 612 unsigned char atr_skynz_969[] = { 0x3F, 0x78, 0x13, 0x25, 0x04, 0x40, 0xB0, 0x09, 0x4A, 0x50, 0x01, 0x4E, 0x5A }; 613 614 if ((atr_size == sizeof (atr_bskyb_new)) && (memcmp (atr, atr_bskyb_new, atr_size) == 0)) 615 { 616 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard BSkyB (0963)"); 617 } 618 else if ((atr_size == sizeof (atr_skyitalia919)) && (memcmp (atr, atr_skyitalia919, atr_size) == 0)) 619 { 620 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Sky Italia (0919)"); 621 } 622 else if ((atr_size == sizeof (atr_skyitalia93b)) && (memcmp (atr, atr_skyitalia93b, atr_size) == 0)) 623 { 624 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Sky Italia (093B)"); 625 } 626 else if ((atr_size == sizeof (atr_skyitalia9cd)) && (memcmp (atr, atr_skyitalia9cd, atr_size) == 0)) 627 { 628 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Sky Italia (09CD)"); 629 } 630 else if ((atr_size == sizeof (atr_yes)) && (memcmp (atr, atr_yes, atr_size) == 0)) 631 { 632 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard YES DBS Israel"); 633 } 634 else if ((atr_size == sizeof (atr_viasat_new)) && (memcmp (atr, atr_viasat_new, atr_size) == 0)) 635 { 636 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Viasat (093E)"); 637 VG2_BASEYEAR = 2000; 638 } 639 else if ((atr_size == sizeof (atr_viasat_scandinavia)) && (memcmp (atr, atr_viasat_scandinavia, atr_size) == 0)) 640 { 641 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Viasat Scandinavia"); 642 VG2_BASEYEAR = 2000; 643 } 644 else if ((atr_size == sizeof (atr_premiere)) && (memcmp (atr, atr_premiere, atr_size) == 0)) 645 { 646 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Sky Germany"); 647 } 648 else if ((atr_size == sizeof (atr_dsmart)) && (memcmp (atr, atr_dsmart, atr_size) == 0)) 649 { 650 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard DSMART Turkey"); 651 VG2_BASEYEAR = 2004; 652 } 653 else if ((atr_size == sizeof (atr_kbw)) && (memcmp (atr, atr_kbw, atr_size) == 0)) 654 { 655 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Kabel BW"); 656 } 657 else if ((atr_size == sizeof (atr_get)) && (memcmp (atr, atr_get, atr_size) == 0)) 658 { 659 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Get Kabel Norway"); 660 VG2_BASEYEAR = 2004; 661 } 662 else if ((atr_size == sizeof (atr_foxtel_90b)) && (memcmp (atr, atr_foxtel_90b, atr_size) == 0)) 663 { 664 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard Foxtel Australia (090B)"); 665 VG2_BASEYEAR = 2000; 666 } 667 else if ((atr_size == sizeof (atr_china_988)) && (memcmp (atr, atr_china_988, atr_size) == 0)) 668 { 669 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard China (0988)"); 670 } 671 else if ((atr_size == sizeof (atr_toptv_9b8)) && (memcmp (atr, atr_toptv_9b8, atr_size) == 0)) 672 { 673 cs_ri_log(reader, "[videoguard2-reader] type: VideoGuard TopTV (09B8)"); 674 } 675 else if ((atr_size == sizeof (atr_skybrgl23)) && (memcmp (atr, atr_skybrgl23, atr_size) == 0)) 676 { 677 cs_log("[videoguard2-reader] type: VideoGuard SkyBrasil GL23 (0942)"); 678 VG2_BASEYEAR = 2000; 679 } 680 else if ((atr_size == sizeof (atr_skybrgl39)) && (memcmp (atr, atr_skybrgl39, atr_size) == 0)) 681 { 682 cs_log("[videoguard2-reader] type: VideoGuard SkyBrasil GL39 (0907)"); 683 VG2_BASEYEAR = 2004; 684 } 685 else if ((atr_size == sizeof (atr_skybrgl54)) && (memcmp (atr, atr_skybrgl54, atr_size) == 0)) 686 { 687 cs_log("[videoguard2-reader] type: VideoGuard SkyBrasil GL54 (0943)"); 688 VG2_BASEYEAR = 2009; 689 } 690 else if ((atr_size == sizeof (atr_skynz_96a)) && (memcmp (atr, atr_skynz_96a, atr_size) == 0)) 691 { 692 cs_log("[videoguard2-reader] type: VideoGuard Sky New Zealand (096A)"); 693 VG2_BASEYEAR = 1992; 694 } 695 else if ((atr_size == sizeof (atr_skynz_969)) && (memcmp (atr, atr_skynz_969, atr_size) == 0)) 696 { 697 cs_log("[videoguard2-reader] type: VideoGuard Sky New Zealand (0969)"); 698 VG2_BASEYEAR = 1992; 699 cs_log("[videoguard2-reader] NDS1 cards currently not supported, patches welcome"); 700 return ERROR; 701 } 614 615 int i=0; 616 while(nds2_atr_table[i].desc) { 617 if ((atr_size == nds2_atr_table[i].atr_len) && (memcmp (atr, nds2_atr_table[i].atr, atr_size) == 0)) { 618 VG2_BASEYEAR=nds2_atr_table[i].base_year; 619 cs_ri_log(reader, "[videoguard2-reader] type: %s", nds2_atr_table[i].desc); 620 break; 621 } 622 i++; 623 } 702 624 703 625 //a non videoguard2/NDS card will fail on read_cmd_len(ins7401)
Note:
See TracChangeset
for help on using the changeset viewer.