diff options
| author | Ronny Strutz <ronny.strutz@multimedia-labs.de> | 2005-11-22 22:33:54 +0000 |
|---|---|---|
| committer | Ronny Strutz <ronny.strutz@multimedia-labs.de> | 2005-11-22 22:33:54 +0000 |
| commit | 7fcee9d52e615789975fd049a6c5d5eb5a34faa2 (patch) | |
| tree | 17c830c75db2551d7b5300d3450d11319f7408f1 /lib | |
| parent | c326dee2e7ce346cffecd196d971dd91ef1454f5 (diff) | |
| download | enigma2-7fcee9d52e615789975fd049a6c5d5eb5a34faa2.tar.gz enigma2-7fcee9d52e615789975fd049a6c5d5eb5a34faa2.zip | |
send capmt to ci
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dvb_ci/dvbci.cpp | 6 | ||||
| -rw-r--r-- | lib/dvb_ci/dvbci_camgr.cpp | 20 | ||||
| -rw-r--r-- | lib/dvb_ci/dvbci_camgr.h | 4 | ||||
| -rw-r--r-- | lib/dvb_ci/dvbci_session.cpp | 2 |
4 files changed, 30 insertions, 2 deletions
diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp index 82d3349d..efd6925c 100644 --- a/lib/dvb_ci/dvbci.cpp +++ b/lib/dvb_ci/dvbci.cpp @@ -404,6 +404,7 @@ int eDVBCISlot::sendCAPMT(eDVBServicePMTHandler *pmthandler, const std::vector<u #if 1 // begin calc capmt length int wp=0; + int hlen; if ( raw_data[3] & 0x80 ) { int i=0; @@ -412,11 +413,13 @@ int eDVBCISlot::sendCAPMT(eDVBServicePMTHandler *pmthandler, const std::vector<u 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) @@ -429,7 +432,8 @@ int eDVBCISlot::sendCAPMT(eDVBServicePMTHandler *pmthandler, const std::vector<u #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; } } diff --git a/lib/dvb_ci/dvbci_camgr.cpp b/lib/dvb_ci/dvbci_camgr.cpp index d700b0a1..b7651464 100644 --- a/lib/dvb_ci/dvbci_camgr.cpp +++ b/lib/dvb_ci/dvbci_camgr.cpp @@ -2,6 +2,17 @@ #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]); @@ -47,3 +58,12 @@ int eDVBCICAManagerSession::doAction() 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); +} + diff --git a/lib/dvb_ci/dvbci_camgr.h b/lib/dvb_ci/dvbci_camgr.h index c09997c2..91d3eef6 100644 --- a/lib/dvb_ci/dvbci_camgr.h +++ b/lib/dvb_ci/dvbci_camgr.h @@ -14,7 +14,11 @@ class eDVBCICAManagerSession: public eDVBCISession 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 diff --git a/lib/dvb_ci/dvbci_session.cpp b/lib/dvb_ci/dvbci_session.cpp index afe9e97e..1bd3d18b 100644 --- a/lib/dvb_ci/dvbci_session.cpp +++ b/lib/dvb_ci/dvbci_session.cpp @@ -140,7 +140,7 @@ eDVBCISession *eDVBCISession::createSession(eDVBCISlot *slot, const unsigned cha printf("APPLICATION MANAGER\n"); break; case 0x00030041: - session=slot->ca_manager=new eDVBCICAManagerSession; + session = new eDVBCICAManagerSession(slot); printf("CA MANAGER\n"); break; case 0x00240041: |
