#ifndef __dvbci_dvbci_h
#define __dvbci_dvbci_h
-#include <lib/base/ebase.h>
+#ifndef SWIG
+#include <lib/base/ebase.h>
+#include <lib/service/iservice.h>
+#include <lib/python/python.h>
#include <set>
#include <queue>
class eDVBCIMMISession;
class eDVBServicePMTHandler;
class eDVBCISlot;
+class eDVBCIInterfaces;
struct queueData
{
}
};
+enum data_source
+{
+ TUNER_A, TUNER_B, TUNER_C, TUNER_D, CI_A, CI_B, CI_C, CI_D
+};
+
+typedef std::pair<std::string, uint32_t> providerPair;
+typedef std::set<providerPair> providerSet;
+typedef std::set<uint16_t> caidSet;
+typedef std::set<eServiceReference> serviceSet;
+
class eDVBCISlot: public iObject, public Object
{
-DECLARE_REF(eDVBCISlot);
-private:
+ friend class eDVBCIInterfaces;
+ DECLARE_REF(eDVBCISlot);
int slotid;
int fd;
- void data(int);
- eSocketNotifier *notifier;
-
+ ePtr<eSocketNotifier> notifier;
int state;
std::map<uint16_t, uint8_t> running_services;
eDVBCIApplicationManagerSession *application_manager;
eDVBCICAManagerSession *ca_manager;
eDVBCIMMISession *mmi_session;
std::priority_queue<queueData> sendqueue;
+ caidSet possible_caids;
+ serviceSet possible_services;
+ providerSet possible_providers;
+ int use_count;
+ eDVBCISlot *linked_next; // needed for linked CI handling
+ data_source current_source;
+ int current_tuner;
+ bool user_mapped;
+ void data(int);
+ bool plugged;
public:
enum {stateRemoved, stateInserted, stateInvalid, stateResetted};
- int use_count;
-
eDVBCISlot(eMainloop *context, int nr);
~eDVBCISlot();
int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector<uint16_t> &caids=std::vector<uint16_t>());
void removeService(uint16_t program_number=0xFFFF);
int getNumOfServices() { return running_services.size(); }
-
- int enableTS(int enable, int tuner=0);
-
+ int setSource(data_source source);
+ int setClockRate(int);
};
struct CIPmtHandler
typedef std::list<CIPmtHandler> PMTHandlerList;
+#endif // SWIG
+
class eDVBCIInterfaces
{
-DECLARE_REF(eDVBCIInterfaces);
+ DECLARE_REF(eDVBCIInterfaces);
static eDVBCIInterfaces *instance;
-private:
eSmartPtrList<eDVBCISlot> m_slots;
eDVBCISlot *getSlot(int slotid);
-
PMTHandlerList m_pmt_handlers;
+#ifndef SWIG
public:
+#endif
eDVBCIInterfaces();
~eDVBCIInterfaces();
void recheckPMTHandlers();
void gotPMT(eDVBServicePMTHandler *pmthandler);
void ciRemoved(eDVBCISlot *slot);
+ int getSlotState(int slot);
- static eDVBCIInterfaces *getInstance();
-
int reset(int slot);
int initialize(int slot);
int startMMI(int slot);
int answerEnq(int slot, char *value);
int cancelEnq(int slot);
int getMMIState(int slot);
- int enableTS(int slot, int enable);
int sendCAPMT(int slot);
+ int setInputSource(int tunerno, data_source source);
+ int setCIClockRate(int slot, int rate);
+#ifdef SWIG
+public:
+#endif
+ static eDVBCIInterfaces *getInstance();
+ int getNumOfSlots() { return m_slots.size(); }
+ PyObject *getDescrambleRules(int slotid);
+ RESULT setDescrambleRules(int slotid, SWIG_PYOBJECT(ePyObject) );
+ PyObject *readCICaIds(int slotid);
};
#endif