Changeset 4875
- Timestamp:
- 04/01/11 16:26:29 (13 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-conax.c
r4671 r4875 221 221 static void conax_get_emm_filter(struct s_reader * rdr, uchar *filter) 222 222 { 223 int idx = 2; 224 223 225 filter[0]=0xFF; //header 224 filter[1]=3; //filter count 225 226 filter[2]=GLOBAL; 227 filter[3]=1; // FIXME: dont see any conax global EMM yet 228 229 filter[4+0] = 0x82; 230 filter[4+0+16] = 0xFF; 231 filter[4+8] = 0x70; 232 filter[4+8+16] = 0xFF; 233 234 filter[36]=SHARED; 235 filter[37]=0; 236 237 filter[38+0] = 0x82; 238 filter[38+0+16] = 0xFF; 239 filter[38+8] = 0x70; 240 filter[38+8+16] = 0xFF; 241 memcpy(filter+38+4, rdr->sa[0], 4); 242 memset(filter+38+4+16, 0xFF, 4); 243 244 filter[70]=UNIQUE; 245 filter[71]=0; 246 filter[72+0] = 0x82; 247 filter[72+0+16] = 0xFF; 248 filter[72+8] = 0x70; 249 filter[72+8+16] = 0xFF; 250 memcpy(filter+72+4, rdr->hexserial + 2, 4); 251 memset(filter+72+4+16, 0xFF, 4); 226 filter[1]=0; //filter count 227 228 if ((!rdr->blockemm_g && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 229 { 230 filter[idx++]=GLOBAL; 231 filter[idx++]=1; // FIXME: dont see any conax global EMM yet 232 filter[idx+0] = 0x82; 233 filter[idx+0+16] = 0xFF; 234 filter[idx+8] = 0x70; 235 filter[idx+8+16] = 0xFF; 236 ++filter[1]; 237 idx += 32; 238 } 239 240 if ((!rdr->blockemm_s && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 241 { 242 filter[idx++]=SHARED; 243 filter[idx++]=0; 244 filter[idx+0] = 0x82; 245 filter[idx+0+16] = 0xFF; 246 filter[idx+8] = 0x70; 247 filter[idx+8+16] = 0xFF; 248 memcpy(filter+idx+4, rdr->sa[0], 4); 249 memset(filter+idx+4+16, 0xFF, 4); 250 ++filter[1]; 251 idx += 32; 252 } 253 254 if ((!rdr->blockemm_u && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 255 { 256 filter[idx++]=UNIQUE; 257 filter[idx++]=0; 258 filter[idx+0] = 0x82; 259 filter[idx+0+16] = 0xFF; 260 filter[idx+8] = 0x70; 261 filter[idx+8+16] = 0xFF; 262 memcpy(filter+idx+4, rdr->hexserial + 2, 4); 263 memset(filter+idx+4+16, 0xFF, 4); 264 ++filter[1]; 265 idx += 32; 266 } 252 267 253 268 return; -
trunk/reader-cryptoworks.c
r4674 r4875 451 451 static void cryptoworks_get_emm_filter(struct s_reader * rdr, uchar *filter) 452 452 { 453 int idx = 2; 454 453 455 filter[0]=0xFF; 454 filter[1]=4; 455 456 filter[2]=GLOBAL; 457 filter[3]=0; 458 459 filter[4+0] = 0x88; 460 filter[4+0+16] = 0xFE; 461 filter[4+1] = 0xA9; 462 filter[4+1+16] = 0xFF; 463 filter[4+2] = 0xFF; 464 filter[4+2+16] = 0xFF; 465 466 467 filter[36]=SHARED; 468 filter[37]=0; 469 470 filter[38+0] = 0x84; 471 filter[38+0+16] = 0xFF; 472 filter[38+1] = 0xA9; 473 filter[38+1+16] = 0xFF; 474 filter[38+2] = 0xFF; 475 filter[38+2+16] = 0xFF; 476 memcpy(filter+38+3, rdr->hexserial, 4); 477 memset(filter+38+3+16, 0xFF, 4); 478 479 480 filter[70]=UNIQUE; 481 filter[71]=0; 482 483 filter[72+0] = 0x82; 484 filter[72+0+16] = 0xFF; 485 filter[72+1] = 0xA9; 486 filter[72+1+16] = 0xFF; 487 filter[72+2] = 0xFF; 488 filter[72+2+16] = 0xFF; 489 memcpy(filter+72+3, rdr->hexserial, 5); 490 memset(filter+72+3+16, 0xFF, 5); 491 492 493 filter[104]=GLOBAL; 494 filter[105]=0; 495 496 filter[106+0] = 0x86; 497 filter[106+16] = 0xFF; 498 filter[106+1] = 0xA9; 499 filter[106+1+16] = 0xFF; 500 filter[106+2] = 0xFF; 501 filter[106+2+16] = 0xFF; 456 filter[1]=0; 457 458 if ((!rdr->blockemm_g && !(rdr->b_nano[0x88] & 0x01)) || (rdr->b_nano[0x88] & 0x02)) // not blocked or to be saved 459 { 460 filter[idx++]=GLOBAL; 461 filter[idx++]=0; 462 filter[idx+0] = 0x88; 463 filter[idx+0+16] = 0xFE; 464 filter[idx+1] = 0xA9; 465 filter[idx+1+16] = 0xFF; 466 filter[idx+2] = 0xFF; 467 filter[idx+2+16] = 0xFF; 468 ++filter[1]; 469 idx += 32; 470 } 471 472 if ((!rdr->blockemm_g && !(rdr->b_nano[0x86] & 0x01)) || (rdr->b_nano[0x86] & 0x02)) // not blocked or to be saved 473 { 474 filter[idx++]=GLOBAL; 475 filter[idx++]=0; 476 filter[idx+0] = 0x86; 477 filter[idx+16] = 0xFF; 478 filter[idx+1] = 0xA9; 479 filter[idx+1+16] = 0xFF; 480 filter[idx+2] = 0xFF; 481 filter[idx+2+16] = 0xFF; 482 ++filter[1]; 483 idx += 32; 484 } 485 486 if ((!rdr->blockemm_s && !(rdr->b_nano[0x84] & 0x01)) || (rdr->b_nano[0x84] & 0x02)) // not blocked or to be saved 487 { 488 filter[idx++]=SHARED; 489 filter[idx++]=0; 490 filter[idx+0] = 0x84; 491 filter[idx+0+16] = 0xFF; 492 filter[idx+1] = 0xA9; 493 filter[idx+1+16] = 0xFF; 494 filter[idx+2] = 0xFF; 495 filter[idx+2+16] = 0xFF; 496 memcpy(filter+idx+3, rdr->hexserial, 4); 497 memset(filter+idx+3+16, 0xFF, 4); 498 ++filter[1]; 499 idx += 32; 500 } 501 502 if ((!rdr->blockemm_u && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 503 { 504 filter[idx++]=UNIQUE; 505 filter[idx++]=0; 506 filter[idx+0] = 0x82; 507 filter[idx+0+16] = 0xFF; 508 filter[idx+1] = 0xA9; 509 filter[idx+1+16] = 0xFF; 510 filter[idx+2] = 0xFF; 511 filter[idx+2+16] = 0xFF; 512 memcpy(filter+idx+3, rdr->hexserial, 5); 513 memset(filter+idx+3+16, 0xFF, 5); 514 ++filter[1]; 515 idx += 32; 516 } 502 517 503 518 return; -
trunk/reader-dre.c
r4692 r4875 355 355 void dre_get_emm_filter(struct s_reader * rdr, uchar *filter) 356 356 { 357 int idx = 2; 358 357 359 filter[0]=0xFF; 358 filter[1]=3; 359 360 filter[2]=GLOBAL; 361 filter[3]=1; //not active 362 363 //FIXME: Dont now how to filter GLOBAL EMM's 364 filter[4+0] = 0xFF; //dummy 365 filter[4+0+16] = 0xFF; 366 367 368 filter[36]=SHARED; 369 filter[37]=0; 370 371 filter[38+0] = 0x89; 372 filter[38+0+16] = 0xFF; 373 // FIXME: Seems to be that SA is only used with caid 0x4ae1 374 if (rdr->caid == 0x4ae1) { 375 memcpy(filter+38+1, &rdr->sa[0][0], 4); 376 memset(filter+38+1+16, 0xFF, 4); 360 filter[1]=0; 361 362 if ((!rdr->blockemm_g && !(rdr->b_nano[0xFF] & 0x01)) || (rdr->b_nano[0xFF] & 0x02)) // not blocked or to be saved 363 { 364 filter[idx++]=GLOBAL; 365 filter[idx++]=1; //not active 366 //FIXME: Dont now how to filter GLOBAL EMM's 367 filter[idx+0] = 0xFF; //dummy 368 filter[idx+0+16] = 0xFF; 369 ++filter[1]; 370 idx += 32; 377 371 } 378 372 379 380 //FIXME: No filter for hexserial 381 filter[70]=UNIQUE; 382 filter[71]=0; 383 384 filter[72+0] = 0x87; 385 filter[72+0+16] = 0xFF; 373 if ((!rdr->blockemm_s && !(rdr->b_nano[0x89] & 0x01)) || (rdr->b_nano[0x89] & 0x02)) // not blocked or to be saved 374 { 375 filter[idx++]=SHARED; 376 filter[idx++]=0; 377 filter[idx+0] = 0x89; 378 filter[idx+0+16] = 0xFF; 379 // FIXME: Seems to be that SA is only used with caid 0x4ae1 380 if (rdr->caid == 0x4ae1) { 381 memcpy(filter+idx+1, &rdr->sa[0][0], 4); 382 memset(filter+idx+1+16, 0xFF, 4); 383 } 384 ++filter[1]; 385 idx += 32; 386 } 387 388 if ((!rdr->blockemm_u && !(rdr->b_nano[0x87] & 0x01)) || (rdr->b_nano[0x87] & 0x02)) // not blocked or to be saved 389 { 390 filter[70]=UNIQUE; 391 filter[71]=0; 392 filter[72+0] = 0x87; 393 filter[72+0+16] = 0xFF; 394 //FIXME: No filter for hexserial 395 ++filter[1]; 396 idx += 32; 397 } 386 398 387 399 return; -
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; -
trunk/reader-nagra.c
r4811 r4875 1033 1033 static void nagra2_get_emm_filter(struct s_reader * rdr, uchar *filter) 1034 1034 { 1035 int idx = 2; 1036 1035 1037 filter[0]=0xFF; 1036 filter[1]=3; 1037 1038 1039 filter[2]=GLOBAL; 1040 filter[3]=0; 1041 1042 filter[4+0] = 0x82; 1043 filter[4+0+16] = 0xFF; 1044 1045 1046 filter[36]=SHARED; 1047 filter[37]=0; 1048 1049 filter[38+0] = 0x83; 1050 filter[38+1] = rdr->hexserial[4]; 1051 filter[38+2] = rdr->hexserial[3]; 1052 filter[38+3] = rdr->hexserial[2]; 1053 filter[38+4] = 0x00; 1054 filter[38+5] = 0x10; 1055 memset(filter+38+0+16, 0xFF, 6); 1056 1057 1058 filter[70]=UNIQUE; 1059 filter[71]=0; 1060 1061 filter[72+0] = 0x83; 1062 filter[72+1] = rdr->hexserial[4]; 1063 filter[72+2] = rdr->hexserial[3]; 1064 filter[72+3] = rdr->hexserial[2]; 1065 filter[72+4] = rdr->hexserial[5]; 1066 filter[72+5] = 0x00; 1067 memset(filter+72+0+16, 0xFF, 6); 1038 filter[1]=0; 1039 1040 1041 if ((!rdr->blockemm_g && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 1042 { 1043 filter[idx++]=GLOBAL; 1044 filter[idx++]=0; 1045 filter[idx+0] = 0x82; 1046 filter[idx+0+16] = 0xFF; 1047 ++filter[1]; 1048 idx += 32; 1049 } 1050 1051 if ((!rdr->blockemm_s && !(rdr->b_nano[0x83] & 0x01)) || (rdr->b_nano[0x83] & 0x02)) // not blocked or to be saved 1052 { 1053 filter[idx++]=SHARED; 1054 filter[idx++]=0; 1055 filter[idx+0] = 0x83; 1056 filter[idx+1] = rdr->hexserial[4]; 1057 filter[idx+2] = rdr->hexserial[3]; 1058 filter[idx+3] = rdr->hexserial[2]; 1059 filter[idx+4] = 0x00; 1060 filter[idx+5] = 0x10; 1061 memset(filter+idx+0+16, 0xFF, 6); 1062 ++filter[1]; 1063 idx += 32; 1064 } 1065 1066 if ((!rdr->blockemm_u && !(rdr->b_nano[0x83] & 0x01)) || (rdr->b_nano[0x83] & 0x02)) // not blocked or to be saved 1067 { 1068 filter[idx++]=UNIQUE; 1069 filter[idx++]=0; 1070 filter[idx+0] = 0x83; 1071 filter[idx+1] = rdr->hexserial[4]; 1072 filter[idx+2] = rdr->hexserial[3]; 1073 filter[idx+3] = rdr->hexserial[2]; 1074 filter[idx+4] = rdr->hexserial[5]; 1075 filter[idx+5] = 0x00; 1076 memset(filter+idx+0+16, 0xFF, 6); 1077 ++filter[1]; 1078 idx += 32; 1079 } 1068 1080 1069 1081 return; -
trunk/reader-seca.c
r4795 r4875 254 254 static void seca_get_emm_filter(struct s_reader * rdr, uchar *filter) 255 255 { 256 int numfilter=1; 257 258 filter[2]=UNIQUE; 259 filter[3]=0; 260 261 filter[4+0] = 0x82; 262 filter[4+0+16] = 0xFF; 263 memcpy(filter+4+1, rdr->hexserial, 6); 264 memset(filter+4+1+16, 0xFF, 6); 265 266 int prov, startpos=36; 267 for (prov=0; prov<rdr->nprov; prov++) { 268 filter[startpos++]=SHARED; 269 filter[startpos++]=0; 270 271 filter[startpos+0] = 0x84; 272 filter[startpos+0+16] = 0xFF; 273 274 memcpy(filter+startpos+1, &rdr->prid[prov][2], 2); 275 memset(filter+startpos+1+16, 0xFF, 2); 276 277 memcpy(filter+startpos+3, &rdr->sa[prov], 3); 278 memset(filter+startpos+3+16, 0xFF, 3); 279 280 numfilter++; 281 startpos+=32; 282 if (numfilter>=10) { 283 cs_log("seca_get_emm_filter: could not start all emm filter"); 284 break; 256 int idx = 2; 257 258 filter[0]=0xFF; 259 filter[1]=0; 260 261 if ((!rdr->blockemm_u && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 262 { 263 filter[idx++]=UNIQUE; 264 filter[idx++]=0; 265 filter[idx+0] = 0x82; 266 filter[idx+0+16] = 0xFF; 267 memcpy(filter+idx+1, rdr->hexserial, 6); 268 memset(filter+idx+1+16, 0xFF, 6); 269 ++filter[1]; 270 idx += 32; 271 } 272 273 if ((!rdr->blockemm_s && !(rdr->b_nano[0x84] & 0x01)) || (rdr->b_nano[0x84] & 0x02)) // not blocked or to be saved 274 { 275 int prov; 276 for (prov=0; prov<rdr->nprov; prov++) { 277 filter[idx++]=SHARED; 278 filter[idx++]=0; 279 filter[idx+0] = 0x84; 280 filter[idx+0+16] = 0xFF; 281 memcpy(filter+idx+1, &rdr->prid[prov][2], 2); 282 memset(filter+idx+1+16, 0xFF, 2); 283 memcpy(filter+idx+3, &rdr->sa[prov], 3); 284 memset(filter+idx+3+16, 0xFF, 3); 285 ++filter[1]; 286 idx += 32; 287 if (filter[1]>=10) { 288 cs_log("seca_get_emm_filter: could not start all emm filter"); 289 break; 290 } 285 291 } 286 292 } 287 288 filter[0]=0xFF;289 filter[1]=numfilter;290 293 291 294 return; -
trunk/reader-viaccess.c
r4833 r4875 565 565 static void viaccess_get_emm_filter(struct s_reader * rdr, uchar *filter) 566 566 { 567 int idx = 2; 568 567 569 filter[0]=0xFF; 568 filter[1]=3; 569 570 filter[2]=GLOBAL; 571 filter[3]=0; 572 573 filter[4+0] = 0x8D; 574 filter[4+0+16] = 0xFE; 575 //filter[4+6] = 0xA0; // FIXME: dummy, flood client with EMM's 576 //filter[4+6+16] = 0xF0; 577 578 579 filter[36]=SHARED; 580 filter[37]=0; 581 582 filter[38+0] = 0x8E; 583 filter[38+0+16] = 0xFF; 584 memcpy(filter+38+1, &rdr->sa[0][0], 3); 585 memset(filter+38+1+16, 0xFF, 3); 586 587 588 filter[70]=UNIQUE; 589 filter[71]=0; 590 591 filter[72+0] = 0x88; 592 filter[72+0+16] = 0xFF; 593 memcpy(filter+72+1, rdr->hexserial + 1, 4); 594 memset(filter+72+1+16, 0xFF, 4); 570 filter[1]=0; 571 572 if ((!rdr->blockemm_g && !(rdr->b_nano[0x8D] & 0x01)) || (rdr->b_nano[0x8D] & 0x02)) // not blocked or to be saved 573 { 574 filter[idx++]=GLOBAL; 575 filter[idx++]=0; 576 filter[idx+0] = 0x8D; 577 filter[idx+0+16] = 0xFE; 578 //filter[idx+6] = 0xA0; // FIXME: dummy, flood client with EMM's 579 //filter[idx+6+16] = 0xF0; 580 ++filter[1]; 581 idx += 32; 582 } 583 584 if ((!rdr->blockemm_s && !(rdr->b_nano[0x8E] & 0x01)) || (rdr->b_nano[0x8E] & 0x02)) // not blocked or to be saved 585 { 586 filter[idx++]=SHARED; 587 filter[idx++]=0; 588 filter[idx+0] = 0x8E; 589 filter[idx+0+16] = 0xFF; 590 memcpy(filter+idx+1, &rdr->sa[0][0], 3); 591 memset(filter+idx+1+16, 0xFF, 3); 592 ++filter[1]; 593 idx += 32; 594 } 595 596 if ((!rdr->blockemm_u && !(rdr->b_nano[0x88] & 0x01)) || (rdr->b_nano[0x88] & 0x02)) // not blocked or to be saved 597 { 598 filter[idx++]=UNIQUE; 599 filter[idx++]=0; 600 filter[idx+0] = 0x88; 601 filter[idx+0+16] = 0xFF; 602 memcpy(filter+idx+1, rdr->hexserial + 1, 4); 603 memset(filter+idx+1+16, 0xFF, 4); 604 ++filter[1]; 605 idx += 32; 606 } 595 607 596 608 return; -
trunk/reader-videoguard-common.c
r4845 r4875 881 881 void videoguard_get_emm_filter(struct s_reader * rdr, uchar *filter) 882 882 { 883 int idx = 2; 884 883 885 filter[0]=0xFF; 884 filter[1]= 5;886 filter[1]=0; 885 887 886 888 //ToDo videoguard_get_emm_filter basic construction 887 filter[2]=UNIQUE; 888 filter[3]=0; 889 890 filter[4+0] = 0x82; 891 filter[4+0+16] = 0xFF; 892 filter[4+1] = 0x40; 893 filter[4+1+16] = 0xC0; 894 memcpy(filter+4+2, rdr->hexserial+2, 4); 895 memset(filter+4+2+16, 0xFF, 4); 896 897 filter[36]=UNIQUE; 898 filter[37]=0; 899 900 filter[38+0] = 0x82; 901 filter[38+0+16] = 0xFF; 902 filter[38+1] = 0x40; 903 filter[38+1+16] = 0xC0; 904 memcpy(filter+38+6, rdr->hexserial+2, 4); 905 memset(filter+38+6+16, 0xFF, 4); 906 907 filter[70]=UNIQUE; 908 filter[71]=0; 909 910 filter[72+0] = 0x82; 911 filter[72+0+16] = 0xFF; 912 filter[72+1] = 0x40; 913 filter[72+1+16] = 0xC0; 914 memcpy(filter+72+10, rdr->hexserial+2, 4); 915 memset(filter+72+10+16, 0xFF, 4); 916 917 // fourth serial position does not fit within the 16bytes demux filter 918 919 920 filter[104]=SHARED; 921 filter[105]=0; 922 923 filter[106+0] = 0x82; 924 filter[106+0+16] = 0xFF; 925 filter[106+1] = 0x80; 926 filter[106+1+16] = 0xC0; 927 memcpy(filter+106+2, rdr->hexserial+2, 3); 928 memset(filter+106+2+16, 0xFF, 3); 929 930 931 filter[138]=GLOBAL; 932 filter[139]=0; 933 934 filter[140+0] = 0x82; 935 filter[140+0+16] = 0xFF; 936 filter[140+1] = 0x00; 937 filter[140+1+16] = 0xC0; 938 889 if ((!rdr->blockemm_u && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 890 { 891 filter[idx++]=UNIQUE; 892 filter[idx++]=0; 893 filter[idx+0] = 0x82; 894 filter[idx+0+16] = 0xFF; 895 filter[idx+1] = 0x40; 896 filter[idx+1+16] = 0xC0; 897 memcpy(filter+idx+2, rdr->hexserial+2, 4); 898 memset(filter+idx+2+16, 0xFF, 4); 899 idx +=32; 900 901 filter[idx++]=UNIQUE; 902 filter[idx++]=0; 903 filter[idx+0] = 0x82; 904 filter[idx+0+16] = 0xFF; 905 filter[idx+1] = 0x40; 906 filter[idx+1+16] = 0xC0; 907 memcpy(filter+idx+6, rdr->hexserial+2, 4); 908 memset(filter+idx+6+16, 0xFF, 4); 909 idx +=32; 910 911 filter[idx++]=UNIQUE; 912 filter[idx++]=0; 913 filter[idx+0] = 0x82; 914 filter[idx+0+16] = 0xFF; 915 filter[idx+1] = 0x40; 916 filter[idx+1+16] = 0xC0; 917 memcpy(filter+idx+10, rdr->hexserial+2, 4); 918 memset(filter+idx+10+16, 0xFF, 4); 919 idx +=32; 920 filter[1] += 3; 921 // fourth serial position does not fit within the 16bytes demux filter 922 } 923 924 if ((!rdr->blockemm_s && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 925 { 926 filter[idx++]=SHARED; 927 filter[idx++]=0; 928 filter[idx+0] = 0x82; 929 filter[idx+0+16] = 0xFF; 930 filter[idx+1] = 0x80; 931 filter[idx+1+16] = 0xC0; 932 memcpy(filter+idx+2, rdr->hexserial+2, 3); 933 memset(filter+idx+2+16, 0xFF, 3); 934 ++filter[1]; 935 idx += 32; 936 } 937 938 if ((!rdr->blockemm_g && !(rdr->b_nano[0x82] & 0x01)) || (rdr->b_nano[0x82] & 0x02)) // not blocked or to be saved 939 { 940 filter[idx++]=GLOBAL; 941 filter[idx++]=0; 942 filter[idx+0] = 0x82; 943 filter[idx+0+16] = 0xFF; 944 filter[idx+1] = 0x00; 945 filter[idx+1+16] = 0xC0; 946 ++filter[1]; 947 idx += 32; 948 } 939 949 940 950 return;
Note:
See TracChangeset
for help on using the changeset viewer.