// --- cScDvbDeviceProbe -------------------------------------------------------
+#define DEV_DVB_DVR "dvr"
+#define DEV_DVB_DEMUX "demux"
+#define DEV_DVB_CA "ca"
+
#if APIVERSNUM >= 10711
static cScDvbDeviceProbe *scProbe=0;
#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)
{
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
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);
#include <vdr/tools.h>
#include "filter.h"
+#include "sc.h"
#include "misc.h"
#include "log-core.h"
{
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;
// -----------------------------------------------------------------------------
-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]);
// ----------------------------------------------------------------
-#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)
}
}
+int cSoftCAM::FilterHandle(int CardNum)
+{
+ cScDvbDevice *dev=dynamic_cast<cScDvbDevice *>(cDevice::GetDevice(CardNum));
+ return dev ? dev->FilterHandle() : -1;
+}
+
// --- cScHousekeeper ----------------------------------------------------------
class cScHousekeeper : public cThread {
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