Changeset 4875 for trunk/reader-irdeto.c
- Timestamp:
- 04/01/11 16:26:29 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-irdeto.c
r4803 r4875 559 559 static void irdeto_get_emm_filter(struct s_reader * rdr, uchar *filter) 560 560 { 561 int idx = 2; 562 561 563 filter[0]=0xFF; 562 563 int numfilter = 4; 564 filter[1]=0; //filter count 564 565 565 566 int base = rdr->hexserial[3]; … … 568 569 int emm_u = emm_g + 3; 569 570 570 filter[2]=GLOBAL; 571 filter[3]=0; 572 filter[4+0] = 0x82; 573 filter[4+0+16] = 0xFF; 574 filter[4+1] = emm_g; 575 filter[4+1+16] = 0xFF; 576 577 filter[36]=SHARED; 578 filter[37]=0; 579 filter[38+0] = 0x82; 580 filter[38+0+16] = 0xFF; 581 filter[38+1] = emm_s; 582 filter[38+1+16] = 0xFF; 583 memcpy(filter+38+2, rdr->hexserial, 2); 584 memset(filter+38+2+16, 0xFF, 2); 585 586 filter[70]=UNIQUE; 587 filter[71]=0; 588 filter[72+0] = 0x82; 589 filter[72+0+16] = 0xFF; 590 filter[72+1] = emm_u; 591 filter[72+1+16] = 0xFF; 592 memcpy(filter+72+2, rdr->hexserial, 3); 593 memset(filter+72+2+16, 0xFF, 3); 594 595 filter[104]=GLOBAL; 596 filter[105]=0; 597 filter[106+0] = 0x82; 598 filter[106+16] = 0xFF; 599 filter[106+1] = 0x81; 600 filter[106+1+16] = 0xFF; 601 memcpy(filter+106+2, rdr->hexserial, 1); 602 memset(filter+106+2+16, 0xFF, 1); 603 604 int i, pos=138; 605 for(i = 0; i < rdr->nprov; i++) { 606 if (rdr->prid[i][1]==0xFF) 607 continue; 608 609 filter[pos]=SHARED; 610 filter[pos+1]=0; 611 filter[pos+2+0] = 0x82; 612 filter[pos+2+0+16] = 0xFF; 613 // filter[pos+2+1] = 0x02; // base = 0, len = 2 614 // filter[pos+2+1+16] = 0xFF; 615 memcpy(filter+pos+2+2, &rdr->prid[i][1], 2); 616 memset(filter+pos+2+2+16, 0xFF, 2); 617 pos+=34; 618 numfilter++; 619 620 if (numfilter>=10) 621 break; 622 } 623 624 filter[1]=numfilter; 625 571 if ((!rdr->blockemm_g && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 572 { 573 filter[idx++]=GLOBAL; 574 filter[idx++]=0; 575 filter[idx+0] = 0x82; 576 filter[idx+0+16] = 0xFF; 577 filter[idx+1] = emm_g; 578 filter[idx+1+16] = 0xFF; 579 ++filter[1]; 580 idx += 32; 581 582 filter[idx++]=GLOBAL; 583 filter[idx++]=0; 584 filter[idx+0] = 0x82; 585 filter[idx+16] = 0xFF; 586 filter[idx+1] = 0x81; 587 filter[idx+1+16] = 0xFF; 588 memcpy(filter+idx+2, rdr->hexserial, 1); 589 memset(filter+idx+2+16, 0xFF, 1); 590 ++filter[1]; 591 idx += 32; 592 } 593 594 if ((!rdr->blockemm_s && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 595 { 596 filter[idx++]=SHARED; 597 filter[idx++]=0; 598 filter[idx+0] = 0x82; 599 filter[idx+0+16] = 0xFF; 600 filter[idx+1] = emm_s; 601 filter[idx+1+16] = 0xFF; 602 memcpy(filter+idx+2, rdr->hexserial, 2); 603 memset(filter+idx+2+16, 0xFF, 2); 604 ++filter[1]; 605 idx += 32; 606 607 int i; 608 for(i = 0; i < rdr->nprov; i++) { 609 if (rdr->prid[i][1]==0xFF) 610 continue; 611 612 filter[idx++]=SHARED; 613 filter[idx++]=0; 614 filter[idx+0] = 0x82; 615 filter[idx+0+16] = 0xFF; 616 // filter[idx+1] = 0x02; // base = 0, len = 2 617 // filter[idx+1+16] = 0xFF; 618 memcpy(filter+idx+2, &rdr->prid[i][1], 2); 619 memset(filter+idx+2+16, 0xFF, 2); 620 ++filter[1]; 621 idx += 32; 622 623 if (filter[1]>=10) 624 break; 625 } 626 } 627 628 if ((!rdr->blockemm_u && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 629 { 630 filter[idx++]=UNIQUE; 631 filter[idx++]=0; 632 filter[idx+0] = 0x82; 633 filter[idx+0+16] = 0xFF; 634 filter[idx+1] = emm_u; 635 filter[idx+1+16] = 0xFF; 636 memcpy(filter+idx+2, rdr->hexserial, 3); 637 memset(filter+idx+2+16, 0xFF, 3); 638 ++filter[1]; 639 idx += 32; 640 } 626 641 627 642 return;
Note:
See TracChangeset
for help on using the changeset viewer.