}
-RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel, bool fake)
{
/* first, check if a channel is already existing. */
if (allocateFrontend(fe, feparm))
return errNoFrontend;
-
- RESULT res;
- ePtr<eDVBChannel> ch;
- ch = new eDVBChannel(this, fe);
- res = ch->setChannel(channelid, feparm);
- if (res)
+ if (!fake)
{
- channel = 0;
- return errChidNotFound;
- }
+ RESULT res;
+ ePtr<eDVBChannel> ch;
+ ch = new eDVBChannel(this, fe);
+
+ res = ch->setChannel(channelid, feparm);
+ if (res)
+ {
+ channel = 0;
+ return errChidNotFound;
+ }
- channel = ch;
+ channel = ch;
+ }
return 0;
}
errNoDemux = -2,
errChidNotFound = -3
};
-
+
/* allocate channel... */
- RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel);
+ RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel, bool fake=false);
RESULT allocateRawChannel(eUsePtr<iDVBChannel> &channel, int frontend_index);
RESULT allocatePVRChannel(eUsePtr<iDVBPVRChannel> &channel);
#include <dvbsi++/iso639_language_descriptor.h>
#include <dvbsi++/component_descriptor.h>
+int eDVBServicePMTHandler::m_count;
+
eDVBServicePMTHandler::eDVBServicePMTHandler(int record)
:m_ca_servicePtr(0)
{
CONNECT(m_PMT.tableReady, eDVBServicePMTHandler::PMTready);
CONNECT(m_PAT.tableReady, eDVBServicePMTHandler::PATready);
eDebug("new PMT handler record: %d", m_record);
+ ++m_count;
}
eDVBServicePMTHandler::~eDVBServicePMTHandler()
eDVBCAService::unregister_service(m_reference, demux_num, ptr);
eDVBCIInterfaces::getInstance()->removePMTHandler(this);
}
+ --m_count;
}
void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel)
void PATready(int error);
int m_record;
+ static int m_count;
public:
+ static int getCount() { return m_count; }
eDVBServicePMTHandler(int record);
~eDVBServicePMTHandler();
it->m_frontend->getData(1, oucsw);
it->m_frontend->getData(2, oToneburst);
it->m_frontend->getData(6, oRotorPos);
-
+#if 0
eDebug("compare csw %02x == lcsw %02x",
csw, ocsw);
if ( diseqc )
if ( rotor )
eDebug("compare pos %d == current pos %d",
sat.orbital_position, oRotorPos);
-
+#endif
if ( (csw != ocsw) ||
( diseqc && (ucsw != oucsw || toneburst != oToneburst) ) ||
( rotor && oRotorPos != sat.orbital_position ) )
{
- eDebug("can not tune this transponder with linked tuner in use!!");
+// eDebug("can not tune this transponder with linked tuner in use!!");
ret=0;
}
- else
- eDebug("OK .. can tune this transponder with linked tuner in use :)");
+// else
+// eDebug("OK .. can tune this transponder with linked tuner in use :)");
}
}
}
#include <lib/service/service.h>
#include <lib/gdi/font.h>
#include <lib/dvb/epgcache.h>
+#include <lib/dvb/pmt.h>
void eListboxServiceContent::setRoot(const eServiceReference &root)
{
DEFINE_REF(eListboxServiceContent);
eListboxServiceContent::eListboxServiceContent()
- :epgcache(eEPGCache::getInstance()), m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0)
+ :m_epgcache(eEPGCache::getInstance()), m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0)
{
cursorHome();
eServiceCenter::getInstance(m_service_center);
+ if (eDVBResourceManager::getInstance(m_res_mgr))
+ eDebug("no resource manager");
}
void eListboxServiceContent::cursorHome()
{
painter.clip(eRect(offset, m_itemsize));
+ bool tuneable=true;
+
+ if (m_res_mgr && cursorValid() && !((m_cursor->flags & eServiceReference::flagDirectory) == eServiceReference::flagDirectory))
+ {
+ if ( eDVBServicePMTHandler::getCount() > 1 )
+ {
+ eServiceReferenceDVB &ref = (eServiceReferenceDVB&) *m_cursor;
+ eUsePtr<iDVBChannel> channel;
+ eDVBChannelID chid;
+ ref.getChannelID(chid);
+ tuneable = !m_res_mgr->allocateChannel(chid, channel, true); // no real allocate channel..just fake
+ }
+ }
+
if (m_current_marked && selected)
style.setStyle(painter, eWindowStyle::styleListboxMarked);
else if (cursorValid() && isMarked(*m_cursor))
style.setStyle(painter, eWindowStyle::styleListboxMarked);
else
+ {
style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
+ if (!tuneable)
+ painter.setForegroundColor(gRGB(0xbbbbbb));
+ }
painter.clear();
if (cursorValid())
{
ePtr<eServiceEvent> evt;
time_t t=-1;
- if ( !epgcache->lookupEventTime(*m_cursor, t, evt) )
+ if ( !m_epgcache->lookupEventTime(*m_cursor, t, evt) )
text = '(' + evt->getEventName() + ')';
else
continue;
#ifndef __lib_service_listboxservice_h
#define __lib_service_listboxservice_h
+#include <lib/dvb/dvb.h>
#include <lib/gui/elistbox.h>
#include <lib/service/iservice.h>
#include <set>
class eListboxServiceContent: public virtual iListboxContent
{
DECLARE_REF(eListboxServiceContent);
- eEPGCache *epgcache;
+ eEPGCache *m_epgcache;
+ ePtr<eDVBResourceManager> m_res_mgr;
public:
eListboxServiceContent();
void setRoot(const eServiceReference &ref);