add support for read signal quality, power and biterror rate from python
[enigma2.git] / lib / service / servicedvb.cpp
index a49ce5c4e083371c7535eeb89359c4715599e4b8..9e77a7a7a33ecf7310c8152fe78f457e489dd8fd 100644 (file)
@@ -25,7 +25,7 @@ DEFINE_REF(eStaticServiceDVBInformation);
 
 RESULT eStaticServiceDVBInformation::getName(const eServiceReference &ref, std::string &name)
 {
-       if ( ref.name.length() )
+       if ( !ref.name.empty() )
        {
                name = ref.name;
                return 0;
@@ -358,22 +358,25 @@ RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr<iListableServ
 
 RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
-               /* do we have a PVR service? */
-       if (ref.flags & eServiceReference::flagDirectory) // bouquet
+       /* is a listable service? */
+       if ((ref.flags & eServiceReference::flagDirectory) == eServiceReference::flagDirectory) // bouquet
        {
-               ptr = new eStaticServiceDVBBouquetInformation;
+               if ( !ref.name.empty() )  // satellites or providers list
+                       ptr = new eStaticServiceDVBInformation;
+               else // a dvb bouquet
+                       ptr = new eStaticServiceDVBBouquetInformation;
                return 0;
        }
-       else if (!ref.path.empty())
+       else if (!ref.path.empty()) /* do we have a PVR service? */
        {
                ptr = new eStaticServiceDVBPVRInformation(ref);
                return 0;
        }
-       else
+       else // normal dvb service
        {
                ePtr<eDVBService> service;
                int r = lookupService(service, ref);
-               if (r)
+               if (r) // no eDVBService avail for this reference ( Linkage Services... )
                        ptr = new eStaticServiceDVBInformation;
                else
                        /* eDVBService has the iStaticServiceInformation interface, so we pass it here. */
@@ -678,6 +681,12 @@ RESULT eDVBServicePlay::getPlayPosition(pts_t &pos)
        return pvr_channel->getCurrentPosition(demux, pos);
 }
 
+RESULT eDVBServicePlay::frontendStatusInfo(ePtr<iFrontendStatusInformation> &ptr)
+{
+       ptr = this;
+       return 0;
+}
+
 RESULT eDVBServicePlay::info(ePtr<iServiceInformation> &ptr)
 {
        ptr = this;
@@ -717,7 +726,7 @@ int eDVBServicePlay::getInfo(int w)
        switch (w)
        {
        case sVideoPID: if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
-       case sAudioPID: if (program.audioStreams.empty()) return -1; return program.videoStreams[m_current_audio_stream].pid;
+       case sAudioPID: if (program.audioStreams.empty()) return -1; return program.audioStreams[m_current_audio_stream].pid;
        case sPCRPID: return program.pcrPid;
        case sPMTPID: return program.pmtPid;
        case sTXTPID: return -1;
@@ -808,6 +817,17 @@ int eDVBServicePlay::selectAudioStream(int i)
        return 0;
 }
 
+int eDVBServicePlay::getFrontendInfo(int w)
+{
+       eUsePtr<iDVBChannel> channel;
+       if(m_service_handler.getChannel(channel))
+               return 0;
+       ePtr<iDVBFrontend> fe;
+       if(channel->getFrontend(fe))
+               return 0;
+       return fe->readFrontendData(w);
+}
+
 DEFINE_REF(eDVBServicePlay)
 
 eAutoInitPtr<eServiceFactoryDVB> init_eServiceFactoryDVB(eAutoInitNumbers::service+1, "eServiceFactoryDVB");