From 69cd319cd47047d7a3e4e1205a218ed66fd8f353 Mon Sep 17 00:00:00 2001 From: leslie Date: Mon, 11 Jan 2010 18:46:37 +0100 Subject: [PATCH] generic filter handle open --- cam.c | 29 +++++++++++++++++++++++++++++ cam.h | 5 +++++ filter.c | 3 ++- misc.c | 14 -------------- misc.h | 7 ------- sc.c | 6 ++++++ sc.h | 1 + 7 files changed, 43 insertions(+), 22 deletions(-) diff --git a/cam.c b/cam.c index 0ad88e0..570529b 100644 --- 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 519d49b..67e03c8 100644 --- 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); diff --git a/filter.c b/filter.c index 36eae04..fd69536 100644 --- a/filter.c +++ b/filter.c @@ -30,6 +30,7 @@ #include #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 04939db..eb41c6b 100644 --- a/misc.c +++ b/misc.c @@ -29,20 +29,6 @@ // ----------------------------------------------------------------------------- -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(cDevice::GetDevice(CardNum)); + return dev ? dev->FilterHandle() : -1; +} + // --- cScHousekeeper ---------------------------------------------------------- class cScHousekeeper : public cThread { diff --git a/sc.h b/sc.h index 618ea55..5e0717e 100644 --- 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 -- 2.39.5