Motáte sa tu v začarovanom kruhu. Karta je aktívna, pretože je na nej aktívny("nenulový") provider - 00ba4cff. Je pravda, že verejný oscam panenské karty aktivovať nevie, ale takisto platí, že takéto(panenské) karty sa už prakticky nevyskytujú. Ak vám aj freesat pošle quazi "novú" kartu, tak je s najväčšou pravdepodobnosťou už aktivovaná, teda v minulosti používaná. Takže v tomto problém nie je.
Problém môže byť v oprávneniach(zápisoch). Verejný oscam(dokonca aj niektoré certif. zar.) nevie správne, lepšie povedané kompletne, vylistovať zápisy. Koho to zaujíma, takto to mám ja a freesat(po migrácií) zápisy vidím komplet:
Kód: Vybrat vše
static int32_t irdeto_card_info(struct s_reader *reader)
{
def_resp;
int32_t i, p;
struct irdeto_data *csystem_data = reader->csystem_data;
cs_clear_entitlement(reader); // reset the entitlements
uint8_t sc_GetCountryCode2[] = { 0x02, 0x0B, 0x00, 0x00, 0x00 };
uint8_t sc_GetChanelIds[] = { 0x02, 0x04, 0x00, 0x00, 0x01, 0x00 };
uint8_t sc_Acs57Code[] = { 0xD2, 0x16, 0x00, 0x00, 0x01 , 0x37 };
uint8_t sc_Acs57Prid[] = { 0xD2, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00 };
uint8_t sc_Acs57_Cmd[] = { ACS57GET, 0xFE, 0x00, 0x00, 0x00 };
int32_t acspadd = 0;
if(csystem_data->acs57 == 1)
{
acspadd = 8;
reader_chk_cmd(sc_Acs57Code, 0);
int32_t acslength = cta_res[cta_lr - 1];
sc_Acs57_Cmd[4] = acslength;
reader_chk_cmd(sc_Acs57_Cmd, acslength + 2);
}
else
{
reader_chk_cmd(sc_GetCountryCode2, 0);
}
if(((cta_lr > 9) && !(cta_res[cta_lr - 2] | cta_res[cta_lr - 1])) || (csystem_data->acs57 == 1))
{
rdr_log_dbg(reader, D_READER, "max chids: %d, %d, %d, %d",
cta_res[6 + acspadd], cta_res[7 + acspadd], cta_res[8 + acspadd], cta_res[9 + acspadd]);
for(i = p = 0; i < reader->nprov; i++)
{
int32_t j, k, chid, first = 1;
char t[32];
if(reader->prid[i][1] != 0xff) //[1]..necita ost. providerov...[4]-original
{
p++;
sc_Acs57Prid[3] = i;
sc_GetChanelIds[3] = i; // provider at index i
j = 0;
for (j=0; j<3; j++) //stranky providera(na nase karty stacia 3), inak while
// for (j=0; j<10; j++)=> why 10 .. do we know for sure the there are only 10 chids !!!
// shouldn't it me the max chid value we read above ?!
// while(1) // will exit if cta_lr < 61 .. which is the correct break condition.
{
if(csystem_data->acs57 == 1)
{
int32_t crc = 63;
sc_Acs57Prid[5] = j;
crc ^= 0x01;
crc ^= 0x02;
crc ^= 0x04;
crc ^= sc_Acs57Prid[2];
crc ^= sc_Acs57Prid[3];
crc ^= (sc_Acs57Prid[4] - 1);
crc ^= sc_Acs57Prid[5];
sc_Acs57Prid[6] = crc;
irdeto_do_cmd(reader, sc_Acs57Prid, 0x903C, cta_res, &cta_lr);
int32_t acslength = cta_res[cta_lr - 1];
if(acslength == 0x09) //posledna instancia, inak nekonecny cyklus while
{
break;
}
sc_Acs57_Cmd[4] = acslength;
reader_chk_cmd(sc_Acs57_Cmd, acslength + 2);
/* if(cta_res[10] == 0xFF) //zbytocne, potom break po prvom FF
{
break;
} */
cta_res[cta_lr - 3] = 0xff;
cta_res[cta_lr - 2] = 0xff;
cta_res[cta_lr - 1] = 0xff;
acspadd = 8;
}
else
{
sc_GetChanelIds[5] = j; // chid at index j for provider at index i
reader_chk_cmd(sc_GetChanelIds, 0);
}
// if (cta_lr<61) break; // why 61 (0 to 60 in steps of 6 .. is it 10*6 from the 10 in the for loop ?
// what happen if the card only send back.. 9 chids (or less)... we don't see them
// so we should check whether or not we have at least 6 bytes (1 chid).
if(cta_lr < 6)
{
break;
}
for(k = 0 + acspadd; k < cta_lr; k += 6)
{
chid = b2i(2, cta_res + k);
if(chid && chid != 0xFFFF)
{
time_t date, start_t, end_t;
start_t = chid_date(reader, date = b2i(2, cta_res + k + 2), t, 16);
end_t = chid_date(reader, date + cta_res[k + 4], t + 16, 16);
// todo: add entitlements to list but produces a warning related to date variable
cs_add_entitlement(reader, reader->caid, b2i(3, &reader->prid[i][1]), chid, 0, start_t, end_t, 3, 1);
if(first)
{
rdr_log(reader, "entitlements for provider: %d, id: %06X", p, b2i(3, &reader->prid[i][1]));
first = 0;
}
rdr_log(reader, "chid: %04X, date: %s - %s", chid, t, t + 16);
}
}
// j++; //to tu snad vobec nemusi byt
}
}
}
}
rdr_log(reader, "ready for requests");
return OK;
}
V každom prípade zápisy na karte byť musia, inak vyhadzuje "unsubscribed channel or chid missing" - 90 00. Ak tam nie sú, potom je potrebné v koordinácií s providerom skúmať prečo tam nie sú.
Ak tam validné zápisy sú a karta nedékoduje, je treba sa riadiť statusmi karty - odpoveď na ecm.