fixes for /dev/misc/pvr opening problems in some conditions
[enigma2.git] / lib / dvb / specs.h
index 1a0353e576c2cb94d5b509a0c858eb330db55f86..6be938cb067f9d3efca2abddc5977d436f664ed1 100644 (file)
@@ -2,24 +2,24 @@
 #define __lib_dvb_specs_h
 
 #include <lib/dvb/idvb.h>
-#include <lib/dvb/isection.h>
-#include <lib/dvb_si/pmt.h>
-#include <lib/dvb_si/sdt.h>
-#include <lib/dvb_si/nit.h>
-#include <lib/dvb_si/bat.h>
-#include <lib/dvb_si/pat.h>
-#include <lib/dvb_si/eit.h>
+#include <lib/dvb/idemux.h>
+#include <dvbsi++/program_map_section.h>
+#include <dvbsi++/service_description_section.h>
+#include <dvbsi++/network_information_section.h>
+#include <dvbsi++/bouquet_association_section.h>
+#include <dvbsi++/program_association_section.h>
+#include <dvbsi++/event_information_section.h>
 
 struct eDVBPMTSpec
 {
        eDVBTableSpec m_spec;
 public:
-       eDVBPMTSpec(int pid, int sid)
+       eDVBPMTSpec(int pid, int sid, int timeout = 20000)
        {
                m_spec.pid     = pid;
-               m_spec.tid     = ProgramMapTable::TID;
+               m_spec.tid     = ProgramMapSection::TID;
                m_spec.tidext  = sid;
-               m_spec.timeout = ProgramMapTable::TIMEOUT;
+               m_spec.timeout = timeout; // ProgramMapSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion | 
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfHaveTIDExt | 
                        eDVBTableSpec::tfCheckCRC | eDVBTableSpec::tfHaveTimeout;
@@ -36,13 +36,30 @@ struct eDVBSDTSpec
 public:
        eDVBSDTSpec()
        {
-               m_spec.pid     = ServiceDescriptionTable::PID;
-               m_spec.tid     = ServiceDescriptionTable::TID;
-               m_spec.timeout = 20000; // ServiceDescriptionTable::TIMEOUT;
+               m_spec.pid     = ServiceDescriptionSection::PID;
+               m_spec.tid     = ServiceDescriptionSection::TID;
+               m_spec.timeout = 20000; // ServiceDescriptionSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion |
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC |
                        eDVBTableSpec::tfHaveTimeout;
        }
+       eDVBSDTSpec(int tsid, bool other=false)
+       {
+               m_spec.pid     = ServiceDescriptionSection::PID;
+               m_spec.tid     = ServiceDescriptionSection::TID;
+               m_spec.tidext  = tsid;
+               m_spec.timeout = 60000; // ServiceDescriptionSection::TIMEOUT;
+               m_spec.flags   = eDVBTableSpec::tfAnyVersion |
+                       eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC |
+                       eDVBTableSpec::tfHaveTIDExt | eDVBTableSpec::tfHaveTimeout;
+               if (other)
+               {
+                       // SDT other transport stream have TID 0x46 (current is 0x42)
+                       // so we mask out the third bit in table id mask..
+                       m_spec.flags |= eDVBTableSpec::tfHaveTIDMask;
+                       m_spec.tid_mask = 0xFB;
+               }
+       }
        operator eDVBTableSpec &()
        {
                return m_spec;
@@ -55,9 +72,9 @@ struct eDVBNITSpec
 public:
        eDVBNITSpec()
        {
-               m_spec.pid     = NetworkInformationTable::PID;
-               m_spec.tid     = NetworkInformationTable::TID;
-               m_spec.timeout = NetworkInformationTable::TIMEOUT;
+               m_spec.pid     = NetworkInformationSection::PID;
+               m_spec.tid     = NetworkInformationSection::TID;
+               m_spec.timeout = NetworkInformationSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion |
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC |
                        eDVBTableSpec::tfHaveTimeout;
@@ -74,9 +91,9 @@ struct eDVBBATSpec
 public:
        eDVBBATSpec()
        {
-               m_spec.pid     = BouquetAssociationTable::PID;
-               m_spec.tid     = BouquetAssociationTable::TID;
-               m_spec.timeout = BouquetAssociationTable::TIMEOUT;
+               m_spec.pid     = BouquetAssociationSection::PID;
+               m_spec.tid     = BouquetAssociationSection::TID;
+               m_spec.timeout = BouquetAssociationSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion |
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC |
                        eDVBTableSpec::tfHaveTimeout;
@@ -91,11 +108,11 @@ struct eDVBPATSpec
 {
        eDVBTableSpec m_spec;
 public:
-       eDVBPATSpec()
+       eDVBPATSpec(int timeout=20000)
        {
-               m_spec.pid     = ProgramAssociationTable::PID;
-               m_spec.tid     = ProgramAssociationTable::TID;
-               m_spec.timeout = ProgramAssociationTable::TIMEOUT;
+               m_spec.pid     = ProgramAssociationSection::PID;
+               m_spec.tid     = ProgramAssociationSection::TID;
+               m_spec.timeout = timeout; // ProgramAssociationSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion |
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC |
                        eDVBTableSpec::tfHaveTimeout;
@@ -113,10 +130,10 @@ public:
                /* this is for now&next on actual transponder. */
        eDVBEITSpec(int sid)
        {
-               m_spec.pid     = EventInformationTable::PID;
-               m_spec.tid     = EventInformationTable::TID;
+               m_spec.pid     = EventInformationSection::PID;
+               m_spec.tid     = EventInformationSection::TID;
                m_spec.tidext  = sid;
-               m_spec.timeout = EventInformationTable::TIMEOUT;
+               m_spec.timeout = EventInformationSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion | 
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfHaveTIDExt |
                        eDVBTableSpec::tfCheckCRC | eDVBTableSpec::tfHaveTimeout;
@@ -127,4 +144,25 @@ public:
        }
 };
 
+class eDVBEITSpecOther
+{
+       eDVBTableSpec m_spec;
+public:
+               /* this is for now&next on actual transponder. */
+       eDVBEITSpecOther(int sid)
+       {
+               m_spec.pid     = EventInformationSection::PID;
+               m_spec.tid     = TID_EIT_OTHER;
+               m_spec.tidext  = sid;
+               m_spec.timeout = EventInformationSection::TIMEOUT;
+               m_spec.flags   = eDVBTableSpec::tfAnyVersion |
+                       eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfHaveTIDExt |
+                       eDVBTableSpec::tfCheckCRC | eDVBTableSpec::tfHaveTimeout;
+       }
+       operator eDVBTableSpec &()
+       {
+               return m_spec;
+       }
+};
+
 #endif