X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/a8310a1a7345577916560e789cdb8c1712e620a9..358845c0c1b60f79831ee81ccf55c7c5f5d771e3:/lib/dvb/dvbtime.h?ds=sidebyside diff --git a/lib/dvb/dvbtime.h b/lib/dvb/dvbtime.h index a1746b5e..34c5d5f6 100644 --- a/lib/dvb/dvbtime.h +++ b/lib/dvb/dvbtime.h @@ -3,10 +3,19 @@ #include #include -#include +#include class eDVBChannel; +inline int fromBCD(int bcd) +{ + if ((bcd&0xF0)>=0xA0) + return -1; + if ((bcd&0xF)>=0xA) + return -1; + return ((bcd&0xF0)>>4)*10+(bcd&0xF); +} + time_t parseDVBtime(__u8 t1, __u8 t2, __u8 t3, __u8 t4, __u8 t5); class TDT: public eGTable @@ -16,37 +25,43 @@ class TDT: public eGTable eTimer m_interval_timer; int createTable(int nr, const __u8 *data, unsigned int max); void ready(int); + int update_count; public: - TDT(eDVBChannel *chan); + TDT(eDVBChannel *chan, int update_count=0); void start(); void startTimer(int interval); + int getUpdateCount() { return update_count; } }; class eDVBLocalTimeHandler: public Object { + struct channel_data + { + TDT *tdt; + ePtr channel; + ePtr m_stateChangedConn; + int m_prevChannelState; + }; friend class TDT; DECLARE_REF(eDVBLocalTimeHandler) - std::map m_active_tables; + std::map m_knownChannels; std::map m_timeOffsetMap; ePtr m_chanAddedConn; - ePtr m_chanRemovedConn; - ePtr m_chanRunningConn; bool m_time_ready; int m_time_difference; int m_last_tp_time_difference; void DVBChannelAdded(eDVBChannel*); - void DVBChannelRemoved(eDVBChannel*); - void DVBChannelRunning(iDVBChannel*); + void DVBChannelStateChanged(iDVBChannel*); void readTimeOffsetData(const char*); void writeTimeOffsetData(const char*); - void updateTime(time_t tp_time, eDVBChannel*); + void updateTime(time_t tp_time, eDVBChannel*, int updateCount); static eDVBLocalTimeHandler *instance; public: PSignal0 m_timeUpdated; eDVBLocalTimeHandler(); ~eDVBLocalTimeHandler(); - bool ready() { return m_time_ready; } - int difference() { return m_time_difference; } + bool ready() const { return m_time_ready; } + int difference() const { return m_time_difference; } static eDVBLocalTimeHandler *getInstance() { return instance; } };