aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Strutz <ronny.strutz@multimedia-labs.de>2005-11-22 22:33:54 +0000
committerRonny Strutz <ronny.strutz@multimedia-labs.de>2005-11-22 22:33:54 +0000
commit7fcee9d52e615789975fd049a6c5d5eb5a34faa2 (patch)
tree17c830c75db2551d7b5300d3450d11319f7408f1
parentc326dee2e7ce346cffecd196d971dd91ef1454f5 (diff)
downloadenigma2-7fcee9d52e615789975fd049a6c5d5eb5a34faa2.tar.gz
enigma2-7fcee9d52e615789975fd049a6c5d5eb5a34faa2.zip
send capmt to ci
-rw-r--r--lib/dvb_ci/dvbci.cpp6
-rw-r--r--lib/dvb_ci/dvbci_camgr.cpp20
-rw-r--r--lib/dvb_ci/dvbci_camgr.h4
-rw-r--r--lib/dvb_ci/dvbci_session.cpp2
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: