NCam Support card nC+ provid FEDC ?
fix oscam patch FEDC (uni-seca by Jej@n ) FEDC_11.07.2018.patch
Diff
Index: reader-seca.c
===================================================================
--- reader-seca.c (wersja 11425)
+++ reader-seca.c (kopia robocza)
@@ -12,7 +12,7 @@
};
-static uint64_t get_pbm(struct s_reader *reader, uint8_t idx)
+static uint64_t get_pbm(struct s_reader *reader, uint8_t idx, bool fedc)
{
def_resp;
unsigned char ins34[] = { 0xc1, 0x34, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00}; // set request options
@@ -24,24 +24,27 @@
ins32[4] = 0x0D;
ins34[5] = 0x04;
}
- write_cmd(ins34, ins34 + 5); //set request options
- write_cmd(ins32, NULL); //pbm request
+ if(!fedc)
+ {
+ write_cmd(ins34, ins34 + 5); //set request options
+ write_cmd(ins32, NULL); //pbm request
- switch(cta_res[0])
- {
- case 0x04:
- rdr_log(reader, "no PBM for provider %u", idx + 1);
- break;
- case 0x83:
- pbm = b2ll(8, cta_res + 1);
- rdr_log(reader, "PBM for provider %u: %08llx", idx + 1, (unsigned long long) pbm);
- break;
- case 0xb2:
- pbm = b2ll(8, cta_res + 1);
- rdr_log(reader, "PBM for provider %u: %08llx", idx + 1, (unsigned long long) pbm);
- break;
- default:
- rdr_log(reader, "ERROR: PBM returns unknown byte %02x", cta_res[0]);
+ switch(cta_res[0])
+ {
+ case 0x04:
+ rdr_log(reader, "no PBM for provider %u", idx + 1);
+ break;
+ case 0x83:
+ pbm = b2ll(8, cta_res + 1);
+ rdr_log(reader, "PBM for provider %u: %08llx", idx + 1, (unsigned long long) pbm);
+ break;
+ case 0xb2:
+ pbm = b2ll(8, cta_res + 1);
+ rdr_log(reader, "PBM for provider %u: %08llx", idx + 1, (unsigned long long) pbm);
+ break;
+ default:
+ rdr_log(reader, "ERROR: PBM returns unknown byte %02x", cta_res[0]);
+ }
}
return pbm;
}
@@ -54,6 +57,7 @@
struct tm lt;
time_t t;
bool valid = false;
+ bool fedc = false;
char l_name[16 + 8 + 1] = ", name: ";
char tmp[9];
@@ -66,6 +70,26 @@
if((cta_res[25] != 0x90) || (cta_res[26] != 0x00)) { return ERROR; }
reader->prid[i][0] = 0;
reader->prid[i][1] = 0; //blanken high byte provider code
+
+ if (cta_res[0] == 0xFE)
+ { fedc = true;
+ rdr_log(reader, "FEDC provider %i", i + 1);
+ cta_res[0] = 0x00;
+ switch(i + 1)
+ {
+ case 0x01:
+ cta_res[1] = 0x00;
+ break;
+ case 0x02:
+ cta_res[1] = 0x68;
+ break;
+ case 0x03:
+ cta_res[1] = 0x65;
+ break;
+ default:
+ cta_res[1] = 0x68;
+ }
+ }
memcpy(&reader->prid[i][2], cta_res, 2);
provid = b2ll(4, reader->prid[i]);
@@ -116,12 +140,12 @@
{
// update entitlement info if found
entry->end = mktime(<);
- entry->id = get_pbm(reader, i);
+ entry->id = get_pbm(reader, i, fedc);
entry->type = (i) ? 6 : 7;
}
else
// add entitlement info
- { cs_add_entitlement(reader, reader->caid, provid, get_pbm(reader, i), 0, 0, mktime(<), (i) ? 6 : 7, 1); }
+ { cs_add_entitlement(reader, reader->caid, provid, get_pbm(reader, i, fedc), 0, 0, mktime(<), (i) ? 6 : 7, 1); }
return OK;
}
Display More