FILE *f = fopen("/proc/stb/fp/rtc", "w");
if (f)
{
- time_t wakeup=0;
- FILE *f2 = fopen("/proc/stb/fp/wakeup_time", "r");
- if (f2)
- {
- fscanf(f2, "%u", &wakeup);
- fclose(f2);
- }
- if (wakeup) // atmel firmware okay?
- {
- if (fprintf(f, "%u", time))
- prev_time = time;
- else
- eDebug("write /proc/stb/fp/rtc failed (%m)");
- fclose(f);
- }
+ if (fprintf(f, "%u", time))
+ prev_time = time;
else
- eDebug("dont set rtc because of buggy atmel firmware!");
+ eDebug("write /proc/stb/fp/rtc failed (%m)");
+ fclose(f);
}
else
{
}
TDT::TDT(eDVBChannel *chan, int update_count)
- :chan(chan), update_count(update_count)
+ :chan(chan), m_interval_timer(eTimer::create()), update_count(update_count)
{
CONNECT(tableReady, TDT::ready);
- CONNECT(m_interval_timer.timeout, TDT::start);
+ CONNECT(m_interval_timer->timeout, TDT::start);
if (chan)
chan->getDemux(demux, 0);
}
void TDT::startTimer( int interval )
{
- m_interval_timer.start(interval, true);
+ m_interval_timer->start(interval, true);
}
eDVBLocalTimeHandler *eDVBLocalTimeHandler::instance;
eDVBLocalTimeHandler::~eDVBLocalTimeHandler()
{
instance=0;
- for (std::map<iDVBChannel*, channel_data>::iterator it=m_knownChannels.begin(); it != m_knownChannels.end(); ++it)
- delete it->second.tdt;
if (ready())
{
eDebug("set RTC to previous valid time");
m_knownChannels.find(chan);
if ( it != m_knownChannels.end() )
{
- TDT *prev_tdt = it->second.tdt;
- it->second.tdt = new TDT(chan, prev_tdt->getUpdateCount());
+ 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
- delete prev_tdt;
}
}
}
break;
case iDVBChannel::state_release:
eDebug("[eDVBLocalTimerHandler] remove channel %p", chan);
- delete it->second.tdt;
m_knownChannels.erase(it);
break;
default: // ignore all other events