SASC
DVBSoftCAM

cPidFilter Class Reference

#include <filter.h>

Inheritance diagram for cPidFilter:

List of all members.

Public Member Functions

 cPidFilter (const char *Id, int Num, cDevice *Device, unsigned int IdleTime)
virtual ~cPidFilter ()
void Flush (void)
virtual void Start (int Pid, int Section, int Mask)
void Stop (void)
void SetBuffSize (int BuffSize)
void Wakeup (void)
int SetIdleTime (unsigned int IdleTime)
int Pid (void)
bool Active (void)
 cPidFilter (const char *Id, int Num, cDevice *Device, unsigned int IdleTime)
virtual ~cPidFilter ()
void Flush (void)
virtual void Start (int Pid, int Section, int Mask)
void Stop (void)
void SetBuffSize (int BuffSize)
void Wakeup (void)
int SetIdleTime (unsigned int IdleTime)
int Pid (void)
bool Active (void)

Public Attributes

void * userData

Protected Attributes

char * id
int fd
int pid

Friends

class cAction

Detailed Description

Definition at line 58 of file filter.h.


Constructor & Destructor Documentation

cPidFilter::cPidFilter ( const char *  Id,
int  Num,
cDevice *  Device,
unsigned int  IdleTime 
)

Definition at line 39 of file filter.c.

References bprintf(), fd, L_CORE_ACTION, PRINTF, and userData.

{
  device=Device;
  idleTime=IdleTime;
  id=0; fd=-1; forceRun=false; userData=0;
  id=bprintf("%s/%d",Id,Num);
  PRINTF(L_CORE_ACTION,"new filter '%s' (%d ms)",id,idleTime);
}
cPidFilter::~cPidFilter ( ) [virtual]

Definition at line 48 of file filter.c.

References free, L_CORE_ACTION, PRINTF, and Stop().

{
  cMutexLock lock(this);
  Stop();
  PRINTF(L_CORE_ACTION,"filter '%s' removed",id);
  free(id);
}
cPidFilter::cPidFilter ( const char *  Id,
int  Num,
cDevice *  Device,
unsigned int  IdleTime 
)
virtual cPidFilter::~cPidFilter ( ) [virtual]

Member Function Documentation

bool cPidFilter::Active ( void  ) [inline]

Definition at line 81 of file filter.h.

References fd.

Referenced by cAction::Action(), cAction::IdleFilter(), and Pid().

{ return fd>=0; }
bool cPidFilter::Active ( void  ) [inline]

Definition at line 81 of file filter.h.

References fd.

{ return fd>=0; }
void cPidFilter::Flush ( void  )

Definition at line 56 of file filter.c.

References fd, and MAX_SECT_SIZE.

Referenced by cAction::Action(), cTpsAuHook::Process(), and cEcmHandler::Process().

{
  cMutexLock lock(this);
  if(fd>=0) {
    unsigned char buff[MAX_SECT_SIZE];
    while(read(fd,buff,sizeof(buff))>0);
    }
}
void cPidFilter::Flush ( void  )
int cPidFilter::Pid ( void  )

Definition at line 118 of file filter.c.

References Active().

Referenced by cEcmHandler::Process(), cLogger::Process(), cHookManager::Process(), and Start().

{
  return Active() ? pid : -1;
}
int cPidFilter::Pid ( void  )
void cPidFilter::SetBuffSize ( int  BuffSize)

Definition at line 94 of file filter.c.

References CHECK, fd, max(), and Stop().

{
  cMutexLock lock(this);
  if(fd>=0) {
    Stop();
    int s=max(BuffSize,8192);
    CHECK(ioctl(fd,DMX_SET_BUFFER_SIZE,s));
    }
}
void cPidFilter::SetBuffSize ( int  BuffSize)
int cPidFilter::SetIdleTime ( unsigned int  IdleTime)
int cPidFilter::SetIdleTime ( unsigned int  IdleTime)

Definition at line 104 of file filter.c.

References i.

Referenced by cEcmHandler::Process().

{
  int i=idleTime;
  idleTime=IdleTime;
  return i;
}
void cPidFilter::Start ( int  Pid,
int  Section,
int  Mask 
) [virtual]

Definition at line 65 of file filter.c.

References fd, i, L_CORE_ACTION, LBEND, LBPUT, LBSTART, cDevice::OpenFilter(), Pid(), and Stop().

Referenced by cTpsAuHook::Process().

{
  cMutexLock lock(this);
  Stop();
  fd=device->OpenFilter(Pid,Section,Mask);
  if(fd>=0) {
    pid=Pid;

    LBSTART(L_CORE_ACTION);
    LBPUT("filter '%s' -> pid=0x%04x sct=0x%02x/0x%02x matching",id,Pid,Section,Mask);
    int Mode=0;
    int mam =Mask &  (~Mode);
    int manm=Mask & ~(~Mode);
    for(int i=0; i<256; i++) {
      int xxxor=Section ^ i;
      if((mam&xxxor) || (manm && !(manm&xxxor))) {}
      else
        LBPUT(" 0x%02x",i);
      }
    LBEND();
    }
}
virtual void cPidFilter::Start ( int  Pid,
int  Section,
int  Mask 
) [virtual]
void cPidFilter::Stop ( void  )
void cPidFilter::Stop ( void  )

Definition at line 88 of file filter.c.

References cDevice::CloseFilter(), and fd.

Referenced by SetBuffSize(), Start(), and ~cPidFilter().

{
  cMutexLock lock(this);
  if(fd>=0) { device->CloseFilter(fd); fd=-1; }
}
void cPidFilter::Wakeup ( void  )

Definition at line 111 of file filter.c.

References L_CORE_ACTION, and PRINTF.

Referenced by cEcmHandler::SetPrg(), cEcmHandler::ShiftCwIndex(), and cEcmHandler::Stop().

{
  cMutexLock lock(this);
  forceRun=true;
  PRINTF(L_CORE_ACTION,"filter '%s': wakeup",id);
}
void cPidFilter::Wakeup ( void  )

Friends And Related Function Documentation

cAction [friend]

Definition at line 59 of file filter.h.


Member Data Documentation

int cPidFilter::fd [protected]

Definition at line 67 of file filter.h.

Referenced by cAction::Action(), Active(), cPidFilter(), Flush(), SetBuffSize(), Start(), and Stop().

char * cPidFilter::id [protected]

Definition at line 66 of file filter.h.

Referenced by cAction::Action().

int cPidFilter::pid [protected]

Definition at line 68 of file filter.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines