aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvbtime.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2008-12-03 23:47:36 +0100
committerghost <andreas.monzner@multimedia-labs.de>2008-12-03 23:48:20 +0100
commit39410381b5f023663c70c4dec09dc1eae287259d (patch)
tree2f81dad7a7378a40bd2da1a3a03bf3fc180cf85d /lib/dvb/dvbtime.cpp
parent2ff2e2c4f2a413b36d3eeafee3439ec5df38c59d (diff)
downloadenigma2-39410381b5f023663c70c4dec09dc1eae287259d.tar.gz
enigma2-39410381b5f023663c70c4dec09dc1eae287259d.zip
sync rtc time with linux time every 30 minutes when no transponder is tuned.. we need a fix for hardware without RTC...
Diffstat (limited to 'lib/dvb/dvbtime.cpp')
-rw-r--r--lib/dvb/dvbtime.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp
index c4335795..d879cfac 100644
--- a/lib/dvb/dvbtime.cpp
+++ b/lib/dvb/dvbtime.cpp
@@ -11,6 +11,8 @@
#define FP_IOCTL_SET_RTC 0x101
#define FP_IOCTL_GET_RTC 0x102
+#define TIME_UPDATE_INTERVAL (30*60*1000)
+
static time_t prev_time;
void setRTC(time_t time)
@@ -143,7 +145,7 @@ eDVBLocalTimeHandler *eDVBLocalTimeHandler::instance;
DEFINE_REF(eDVBLocalTimeHandler);
eDVBLocalTimeHandler::eDVBLocalTimeHandler()
- :m_time_ready(false)
+ :m_time_ready(false), m_updateNonTunedTimer(eTimer::create(eApp))
{
if ( !instance )
instance=this;
@@ -164,6 +166,7 @@ eDVBLocalTimeHandler::eDVBLocalTimeHandler()
/*emit*/ m_timeUpdated();
}
}
+ CONNECT(m_updateNonTunedTimer->timeout, eDVBLocalTimeHandler::updateNonTuned);
}
eDVBLocalTimeHandler::~eDVBLocalTimeHandler()
@@ -211,6 +214,12 @@ void eDVBLocalTimeHandler::writeTimeOffsetData( const char* filename )
}
}
+void eDVBLocalTimeHandler::updateNonTuned()
+{
+ updateTime(-1, 0, 0);
+ m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true);
+}
+
void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int update_count )
{
int time_difference;
@@ -397,7 +406,7 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int up
int updateCount = it->second.tdt->getUpdateCount();
it->second.tdt = 0;
it->second.tdt = new TDT(chan, updateCount);
- it->second.tdt->startTimer(60*60*1000); // restart TDT for this transponder in 60min
+ it->second.tdt->startTimer(TIME_UPDATE_INTERVAL); // restart TDT for this transponder in 30min
}
}
}
@@ -430,12 +439,15 @@ void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan)
{
case iDVBChannel::state_ok:
eDebug("[eDVBLocalTimerHandler] channel %p running", chan);
+ m_updateNonTunedTimer->stop();
it->second.tdt = new TDT(it->second.channel);
it->second.tdt->start();
break;
case iDVBChannel::state_release:
eDebug("[eDVBLocalTimerHandler] remove channel %p", chan);
m_knownChannels.erase(it);
+ if (m_knownChannels.empty())
+ m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true);
break;
default: // ignore all other events
return;