RESULT eDVBScan::nextChannel() { ePtr<iDVBFrontend> fe; m_SDT = 0; m_PAT = 0; m_BAT = 0; m_NIT = 0, m_PMT = 0; m_ready = 0; m_pat_tsid = eTransportStreamID(); /* check what we need */ m_ready_all = readySDT; if (m_flags & scanNetworkSearch) m_ready_all |= readyNIT; if (m_flags & scanSearchBAT) m_ready_all |= readyBAT; if (m_usePAT) m_ready_all |= readyPAT; if (!m_ch_blindscan.empty()) { /* keep iterating with the same 'channel' till we get a tune failure */ SCAN_eDebug("[eDVBScan] blindscan channel iteration"); m_ch_current = m_ch_blindscan.front(); } else { m_ch_blindscan_result = NULL; if (m_ch_toScan.empty()) { SCAN_eDebug("[eDVBScan] no channels left: %zd scanned, %zd unavailable, %zd database.", m_ch_scanned.size(), m_ch_unavailable.size(), m_new_channels.size()); m_event(evtFinish); return -ENOENT; } m_ch_current = m_ch_toScan.front(); m_ch_toScan.pop_front(); } if (m_channel->getFrontend(fe)) { m_event(evtFail); return -ENOTSUP; } m_chid_current = eDVBChannelID(); m_channel_state = iDVBChannel::state_idle; if (fe->tune(*m_ch_current, !m_ch_blindscan.empty())) return nextChannel(); m_event(evtUpdate); return 0; }
RESULT eDVBScan::nextChannel() { ePtr<iDVBFrontend> fe; m_SDT = 0; m_PAT = 0; m_BAT = 0; m_NIT = 0, m_PMT = 0; m_ready = 0; m_pat_tsid = eTransportStreamID(); /* check what we need */ m_ready_all = readySDT; if (m_flags & scanNetworkSearch) m_ready_all |= readyNIT; if (m_flags & scanSearchBAT) m_ready_all |= readyBAT; if (m_usePAT) m_ready_all |= readyPAT; if (m_ch_toScan.empty()) { SCAN_eDebug("[eDVBScan] no channels left to scan."); SCAN_eDebug("[eDVBScan] %zd channels scanned, %zd were unavailable.", m_ch_scanned.size(), m_ch_unavailable.size()); SCAN_eDebug("[eDVBScan] %zd channels in database.", m_new_channels.size()); m_event(evtFinish); return -ENOENT; } m_ch_current = m_ch_toScan.front(); m_ch_toScan.pop_front(); if (m_channel->getFrontend(fe)) { m_event(evtFail); return -ENOTSUP; } m_chid_current = eDVBChannelID(); m_channel_state = iDVBChannel::state_idle; if (fe->tune(*m_ch_current)) return nextChannel(); m_event(evtUpdate); return 0; }
void eDVBLocalTimeHandler::readTimeOffsetData( const char* filename ) { m_timeOffsetMap.clear(); FILE *f=fopen(filename, "r"); if (!f) return; char line[256]; fgets(line, 256, f); while (true) { if (!fgets( line, 256, f )) break; if (strstr(line, "Transponder UTC Time Offsets\n")) continue; int dvbnamespace,tsid,onid,offs; if ( sscanf( line, "%08x,%04x,%04x:%d\n",&dvbnamespace,&tsid,&onid,&offs ) == 4 ) m_timeOffsetMap[eDVBChannelID(dvbnamespace,tsid,onid)]=offs; } fclose(f); }