1 #ifndef __LIB_DVB_DVBTIME_H_
2 #define __LIB_DVB_DVBTIME_H_
6 #include <lib/base/eerror.h>
7 #include <lib/dvb/esection.h>
8 #include <dvbsi++/time_date_section.h>
12 inline int fromBCD(int bcd)
18 return ((bcd&0xF0)>>4)*10+(bcd&0xF);
21 inline int toBCD(int dec)
25 return int(dec/10)*0x10 + dec%10;
28 time_t parseDVBtime(uint16_t mjd, uint32_t stime_bcd);
29 time_t parseDVBtime(const uint8_t* data);
30 time_t parseDVBtime(const uint8_t* data, uint16_t *hash);
32 class TDT: public eGTable
35 ePtr<iDVBDemux> demux;
36 ePtr<eTimer> m_interval_timer;
37 int createTable(unsigned int nr, const __u8 *data, unsigned int max);
41 TDT(eDVBChannel *chan, int update_count=0);
43 void startTimer(int interval);
44 int getUpdateCount() { return update_count; }
49 class eDVBLocalTimeHandler: public Object
51 DECLARE_REF(eDVBLocalTimeHandler);
55 ePtr<eDVBChannel> channel;
56 ePtr<eConnection> m_stateChangedConn;
57 int m_prevChannelState;
60 ePtr<eTimer> m_updateNonTunedTimer;
62 std::map<iDVBChannel*, channel_data> m_knownChannels;
63 std::map<eDVBChannelID,int> m_timeOffsetMap;
64 ePtr<eConnection> m_chanAddedConn;
66 int m_time_difference;
67 int m_last_tp_time_difference;
68 void DVBChannelAdded(eDVBChannel*);
69 void DVBChannelStateChanged(iDVBChannel*);
70 void readTimeOffsetData(const char*);
71 void writeTimeOffsetData(const char*);
72 void updateTime(time_t tp_time, eDVBChannel*, int updateCount);
73 void updateNonTuned();
74 static eDVBLocalTimeHandler *instance;
76 eDVBLocalTimeHandler();
77 ~eDVBLocalTimeHandler();
81 eDVBLocalTimeHandler();
82 ~eDVBLocalTimeHandler();
84 bool getUseDVBTime() { return m_use_dvb_time; }
85 void setUseDVBTime(bool b);
86 PSignal0<void> m_timeUpdated;
87 bool ready() const { return m_time_ready; }
88 static eDVBLocalTimeHandler *getInstance() { return instance; }
91 #endif // __LIB_DVB_DVBTIME_H_