#if 1
// begin calc capmt length
int wp=0;
+ int hlen;
if ( raw_data[3] & 0x80 )
{
int i=0;
wp |= (raw_data[4+i] << (8 * i++));
wp+=4;
wp+=lenbytes;
+ hlen = 4 + lenbytes;
}
else
{
wp = raw_data[3];
wp+=4;
+ hlen = 4;
}
// end calc capmt length
if (!ca_manager)
#endif
if (ca_manager)
{
- // TODO SEND buffer to CI ( add session number, add tag )
+ //dont need tag and lenfield
+ ca_manager->sendCAPMT(raw_data + hlen, wp - hlen);
prev_sent_capmt_version = pmt_version;
}
}
#include <lib/dvb_ci/dvbci_camgr.h>
+eDVBCICAManagerSession::eDVBCICAManagerSession(eDVBCISlot *tslot)
+{
+ slot = tslot;
+ slot->ca_manager = this;
+}
+
+eDVBCICAManagerSession::~eDVBCICAManagerSession()
+{
+ slot->ca_manager = 0;
+}
+
int eDVBCICAManagerSession::receivedAPDU(const unsigned char *tag, const void *data, int len)
{
printf("SESSION(%d)/CA %02x %02x %02x: ", session_nb, tag[0], tag[1],tag[2]);
return 0;
}
}
+
+int eDVBCICAManagerSession::sendCAPMT(unsigned char *data, int len)
+{
+ int i;
+ const unsigned char tag[3]={0x9F, 0x80, 0x32}; // ca_pmt
+
+ sendAPDU(tag, data, len);
+}
+
int receivedAPDU(const unsigned char *tag, const void *data, int len);
int doAction();
public:
+ eDVBCICAManagerSession(eDVBCISlot *tslot);
+ ~eDVBCICAManagerSession();
+
const std::vector<uint16_t> &getCAIDs() const { return caids; }
+ int sendCAPMT(unsigned char *pmt, int len);
};
#endif
printf("APPLICATION MANAGER\n");
break;
case 0x00030041:
- session=slot->ca_manager=new eDVBCICAManagerSession;
+ session = new eDVBCICAManagerSession(slot);
printf("CA MANAGER\n");
break;
case 0x00240041: