X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/a6f6641c559ba36617562c3a9e71338d620b7193..e330dbae62e83dd2aa2ff63a984519a84b23c3ad:/lib/dvb/pmt.h diff --git a/lib/dvb/pmt.h b/lib/dvb/pmt.h index b917383b..a23abf1e 100644 --- a/lib/dvb/pmt.h +++ b/lib/dvb/pmt.h @@ -1,6 +1,7 @@ #ifndef __lib_dvb_dvbmid_h #define __lib_dvb_dvbmid_h +#include #include #include #include @@ -16,31 +17,29 @@ class eDVBServicePMTHandler; +typedef std::map CAServiceMap; + class eDVBCAService: public Object { - eDVBServicePMTHandler &m_parent; - int m_sock, m_clilen; + eServiceReferenceDVB m_service; + uint8_t m_used_demux[10]; + unsigned int m_prev_build_hash; + + int m_sock, m_clilen; struct sockaddr_un m_servaddr; unsigned int m_sendstate; - unsigned char *m_capmt; + unsigned char m_capmt[2048]; eTimer m_retryTimer; void sendCAPMT(); void Connect(); + + static CAServiceMap exist; + eDVBCAService(); + ~eDVBCAService(); public: - eDVBCAService( eDVBServicePMTHandler &parent ) - :m_parent(parent), m_sendstate(0), m_capmt(NULL), m_retryTimer(eApp) - { - CONNECT(m_retryTimer.timeout, eDVBCAService::sendCAPMT); - Connect(); -// eDebug("[eDVBCAHandler] new service %s", service.toString().c_str() ); - } - ~eDVBCAService() - { - delete [] m_capmt; - ::close(m_sock); -// eDebug("[eDVBCAHandler] leave service %s", me.toString().c_str() ); - } - void buildCAPMT(); + static RESULT register_service( const eServiceReferenceDVB &ref, int demux_num, eDVBCAService *&caservice ); + static RESULT unregister_service( const eServiceReferenceDVB &ref, int demux_num, eTable *ptr ); + void buildCAPMT(eTable *ptr); }; class eDVBServicePMTHandler: public Object @@ -50,7 +49,6 @@ class eDVBServicePMTHandler: public Object ePtr m_service; int m_last_channel_state; - uint16_t m_pmt_pid; eDVBCAService *m_ca_servicePtr; eAUTable > m_PMT; @@ -75,6 +73,7 @@ public: enum { eventNoResources, // a requested resource couldn't be allocated + eventTuneFailed, // tune failed eventNoPAT, // no pat could be received (timeout) eventNoPATEntry, // no pat entry for the corresponding SID could be found eventNoPMT, // no pmt could be received (timeout) @@ -109,8 +108,11 @@ public: int getProgramInfo(struct program &program); int getDemux(ePtr &demux); int getPVRChannel(ePtr &pvr_channel); - - int tune(eServiceReferenceDVB &ref); + int getService(eServiceReferenceDVB &service) { service = m_reference; return 0; } + int getPMT(ePtr > &ptr) { return m_PMT.getCurrent(ptr); } + int getChannel(eUsePtr &channel); + + int tune(eServiceReferenceDVB &ref); }; #endif