]> www.vanbest.org Git - sasc-ng.git/commitdiff
generic filter handle open
authorleslie <unknown>
Mon, 11 Jan 2010 17:46:37 +0000 (18:46 +0100)
committerleslie <unknown>
Mon, 11 Jan 2010 17:46:37 +0000 (18:46 +0100)
cam.c
cam.h
filter.c
misc.c
misc.h
sc.c
sc.h

diff --git a/cam.c b/cam.c
index 0ad88e034444b6e497fd19fee8cafb4bd050c21f..570529b04002df482fc1791f98e1521135e3a5e0 100644 (file)
--- a/cam.c
+++ b/cam.c
@@ -2996,6 +2996,10 @@ uchar *cDeCsaTSBuffer::Get(void)
 
 // --- cScDvbDeviceProbe -------------------------------------------------------
 
+#define DEV_DVB_DVR      "dvr"
+#define DEV_DVB_DEMUX    "demux"
+#define DEV_DVB_CA       "ca"
+
 #if APIVERSNUM >= 10711
 static cScDvbDeviceProbe *scProbe=0;
 
@@ -3195,6 +3199,31 @@ bool cScDvbDevice::Initialize(void)
 #endif
 }
 
+int cScDvbDevice::FilterHandle(void)
+{
+#if APIVERSNUM >= 10711
+  return DvbOpen(DEV_DVB_DEMUX,adapter,frontend,O_RDWR|O_NONBLOCK);
+#else
+  return DvbOpen(DEV_DVB_DEMUX,CardIndex(),O_RDWR|O_NONBLOCK);
+#endif
+}
+
+#if APIVERSNUM < 10711
+void cScDvbDevice::DvbName(const char *Name, int n, char *buffer, int len)
+{
+  snprintf(buffer,len,"/dev/dvb/adapter%d/%s%d",n,Name,0);
+}
+
+int cScDvbDevice::DvbOpen(const char *Name, int n, int Mode, bool ReportError)
+{
+  char FileName[128];
+  DvbName(Name,n,FileName,sizeof(FileName));
+  int fd=open(FileName,Mode);
+  if(fd<0 && ReportError) LOG_ERROR_STR(FileName);
+  return fd;
+}
+#endif
+
 #if APIVERSNUM >= 10501
 bool cScDvbDevice::HasCi(void)
 {
diff --git a/cam.h b/cam.h
index 519d49b4d7ce6f10dd80c96565980e278bdf39a3..67e03c8f2b7f6c28c3dde53b65100ec3d6e2a1d6 100644 (file)
--- a/cam.h
+++ b/cam.h
@@ -225,6 +225,10 @@ protected:
   virtual bool OpenDvr(void);
   virtual void CloseDvr(void);
   virtual bool GetTSPacket(uchar *&Data);
+#if APIVERSNUM < 10711
+  static void DvbName(const char *Name, int n, char *buffer, int len);
+  static int DvbOpen(const char *Name, int n, int Mode, bool ReportError=false);
+#endif
 #endif //SASC
 public:
 #if APIVERSNUM >= 10711
@@ -249,6 +253,7 @@ public:
   static bool ForceBudget(int n);
   virtual bool SetCaDescr(ca_descr_t *ca_descr, bool initial);
   virtual bool SetCaPid(ca_pid_t *ca_pid);
+  int FilterHandle(void);
   void DumpAV7110(void);
   cCam *Cam(void) { return cam; }
   bool SoftCSA(bool live);
index 36eae0437e24744203d71d6c3a78f00d542414ac..fd69536b42d9094cc2a1b17edf680955ed9cf6c6 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -30,6 +30,7 @@
 #include <vdr/tools.h>
 
 #include "filter.h"
+#include "sc.h"
 #include "misc.h"
 #include "log-core.h"
 
@@ -59,7 +60,7 @@ bool cPidFilter::Open(void)
 {
   cMutexLock lock(this);
   if(fd<0) {
-    fd=DvbOpen(DEV_DVB_DEMUX,dvbNum,O_RDWR|O_NONBLOCK);
+    fd=cSoftCAM::FilterHandle(dvbNum);
     if(fd>=0) return true;
     }
   return false;
diff --git a/misc.c b/misc.c
index 04939db3fb8fee244ea4c1d4864e0913bc9c30cd..eb41c6b0d1595123701224587cbfd558d360d19f 100644 (file)
--- a/misc.c
+++ b/misc.c
 
 // -----------------------------------------------------------------------------
 
-void DvbName(const char *Name, int n, char *buffer, int len)
-{
-  snprintf(buffer,len,"/dev/dvb/adapter%d/%s%d",n,Name,0);
-}
-
-int DvbOpen(const char *Name, int n, int Mode, bool ReportError)
-{
-  char FileName[128];
-  DvbName(Name,n,FileName,sizeof(FileName));
-  int fd=open(FileName,Mode);
-  if(fd<0 && ReportError) LOG_ERROR_STR(FileName);
-  return fd;
-}
-
 const char *HexStr(char *str, const unsigned char *mem, int len)
 {
   for(int i=0 ; i<len ; i++) sprintf(&str[i*2],"%02X",mem[i]);
diff --git a/misc.h b/misc.h
index 3207e9c1eaf764cf6ed5512d43a6f80678ec844d..11e555170ff06d5a9d4e1712c6a0c886d54739be 100644 (file)
--- a/misc.h
+++ b/misc.h
 
 // ----------------------------------------------------------------
 
-#define DEV_DVB_FRONTEND "frontend"
-#define DEV_DVB_DVR      "dvr"
-#define DEV_DVB_DEMUX    "demux"
-#define DEV_DVB_CA       "ca"
-void DvbName(const char *Name, int n, char *buffer, int len);
-int DvbOpen(const char *Name, int n, int Mode, bool ReportError=false);
-
 const char *HexStr(char *str, const unsigned char *mem, int len);
 #define KeyStr(str,key) HexStr(str,key,8)
 
diff --git a/sc.c b/sc.c
index 85dc9d55ad31d87674a1ab080a5b346672f1ba00..120b887104d5f23e326c7aa2bd711e8518d63754 100644 (file)
--- a/sc.c
+++ b/sc.c
@@ -1062,6 +1062,12 @@ void cSoftCAM::CaidsChanged(void)
     }
 }
 
+int cSoftCAM::FilterHandle(int CardNum)
+{
+  cScDvbDevice *dev=dynamic_cast<cScDvbDevice *>(cDevice::GetDevice(CardNum));
+  return dev ? dev->FilterHandle() : -1;
+}
+
 // --- cScHousekeeper ----------------------------------------------------------
 
 class cScHousekeeper : public cThread {
diff --git a/sc.h b/sc.h
index 618ea5543d9d8b1e8203799560e7fbd4c20822d6..5e0717e21ec062f497122a1e9a11e6863f1c0a3a 100644 (file)
--- a/sc.h
+++ b/sc.h
@@ -36,6 +36,7 @@ public:
   static void AddHook(int CardNum, cLogHook *hook);
   static bool TriggerHook(int CardNum, int id);
   static void CaidsChanged(void);
+  static int FilterHandle(int CardNum);
   };
 
 #endif // ___SC_H