X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb_ci%2Fdvbci.h;h=c11a1203311ab32fd828a29963252cedb55b5414;hp=fc6323e84b75e27dbf127409317699f5017fb1a3;hb=f8399204b2ce53dfd2c394f9d67b204356f2d40a;hpb=d290a6895aaba9660184b2ac9c1bb90d81ae494c diff --git a/lib/dvb_ci/dvbci.h b/lib/dvb_ci/dvbci.h index fc6323e..c11a120 100644 --- a/lib/dvb_ci/dvbci.h +++ b/lib/dvb_ci/dvbci.h @@ -1,9 +1,13 @@ #ifndef __dvbci_dvbci_h #define __dvbci_dvbci_h -#include +#ifndef SWIG +#include +#include +#include #include +#include class eDVBCISession; class eDVBCIApplicationManagerSession; @@ -11,25 +15,59 @@ class eDVBCICAManagerSession; class eDVBCIMMISession; class eDVBServicePMTHandler; class eDVBCISlot; +class eDVBCIInterfaces; + +struct queueData +{ + __u8 prio; + unsigned char *data; + unsigned int len; + queueData( unsigned char *data, unsigned int len, __u8 prio = 0 ) + :prio(prio), data(data), len(len) + { + + } + bool operator < ( const struct queueData &a ) const + { + return prio < a.prio; + } +}; + +enum data_source +{ + TUNER_A, TUNER_B, TUNER_C, TUNER_D, CI_A, CI_B, CI_C, CI_D +}; + +typedef std::pair providerPair; +typedef std::set providerSet; +typedef std::set caidSet; +typedef std::set 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 notifier; int state; - enum {stateRemoved, stateInserted}; - uint8_t prev_sent_capmt_version; + std::map running_services; eDVBCIApplicationManagerSession *application_manager; eDVBCICAManagerSession *ca_manager; eDVBCIMMISession *mmi_session; -public: + std::priority_queue 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 first_plugged; +public: + enum {stateRemoved, stateInserted, stateInvalid, stateResetted}; eDVBCISlot(eMainloop *context, int nr); ~eDVBCISlot(); @@ -43,22 +81,19 @@ public: eDVBCIMMISession *getMMIManager() { return mmi_session; } eDVBCICAManagerSession *getCAManager() { return ca_manager; } + int getState() { return state; } int getSlotID(); int reset(); - int initialize(); int startMMI(); int stopMMI(); int answerText(int answer); int answerEnq(char *value); int cancelEnq(); int getMMIState(); - void resendCAPMT(); int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector &caids=std::vector()); - uint8_t getPrevSentCAPMTVersion() const { return prev_sent_capmt_version; } - void resetPrevSentCAPMTVersion() { prev_sent_capmt_version = 0xFF; } - - int enableTS(int enable); - + void removeService(uint16_t program_number=0xFFFF); + int getNumOfServices() { return running_services.size(); } + int setSource(data_source source); }; struct CIPmtHandler @@ -79,25 +114,28 @@ struct CIPmtHandler typedef std::list PMTHandlerList; +#endif // SWIG + class eDVBCIInterfaces { -DECLARE_REF(eDVBCIInterfaces); + DECLARE_REF(eDVBCIInterfaces); static eDVBCIInterfaces *instance; -private: - eSmartPtrList m_slots; + eSmartPtrList m_slots; eDVBCISlot *getSlot(int slotid); - PMTHandlerList m_pmt_handlers; +#ifndef SWIG public: +#endif eDVBCIInterfaces(); ~eDVBCIInterfaces(); void addPMTHandler(eDVBServicePMTHandler *pmthandler); void removePMTHandler(eDVBServicePMTHandler *pmthandler); + 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); @@ -106,8 +144,16 @@ public: 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); +#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