vdr  1.7.27
diseqc.h
Go to the documentation of this file.
00001 /*
00002  * diseqc.h: DiSEqC handling
00003  *
00004  * See the main source file 'vdr.c' for copyright information and
00005  * how to reach the author.
00006  *
00007  * $Id: diseqc.h 2.5 2011/09/17 13:15:17 kls Exp $
00008  */
00009 
00010 #ifndef __DISEQC_H
00011 #define __DISEQC_H
00012 
00013 #include "config.h"
00014 #include "thread.h"
00015 
00016 class cScr : public cListObject {
00017 private:
00018   int devices;
00019   int channel;
00020   uint userBand;
00021   int pin;
00022   bool used;
00023 public:
00024   cScr(void);
00025   bool Parse(const char *s);
00026   int Devices(void) const { return devices; }
00027   int Channel(void) const { return channel; }
00028   uint UserBand(void) const { return userBand; }
00029   int Pin(void) const { return pin; }
00030   bool Used(void) const { return used; }
00031   void SetUsed(bool Used) { used = Used; }
00032   };
00033 
00034 class cScrs : public cConfig<cScr> {
00035 private:
00036   cMutex mutex;
00037 public:
00038   cScr *GetUnused(int Device);
00039   };
00040 
00041 extern cScrs Scrs;
00042 
00043 class cDiseqc : public cListObject {
00044 public:
00045   enum eDiseqcActions {
00046     daNone,
00047     daToneOff,
00048     daToneOn,
00049     daVoltage13,
00050     daVoltage18,
00051     daMiniA,
00052     daMiniB,
00053     daScr,
00054     daCodes,
00055     };
00056   enum { MaxDiseqcCodes = 6 };
00057 private:
00058   int devices;
00059   int source;
00060   int slof;
00061   char polarization;
00062   int lof;
00063   mutable int scrBank;
00064   char *commands;
00065   bool parsing;
00066   uint SetScrFrequency(uint SatFrequency, const cScr *Scr, uint8_t *Codes) const;
00067   int SetScrPin(const cScr *Scr, uint8_t *Codes) const;
00068   const char *Wait(const char *s) const;
00069   const char *GetScrBank(const char *s) const;
00070   const char *GetCodes(const char *s, uchar *Codes = NULL, uint8_t *MaxCodes = NULL) const;
00071 public:
00072   cDiseqc(void);
00073   ~cDiseqc();
00074   bool Parse(const char *s);
00075   eDiseqcActions Execute(const char **CurrentAction, uchar *Codes, uint8_t *MaxCodes, const cScr *Scr, uint *Frequency) const;
00091   int Devices(void) const { return devices; }
00092   int Source(void) const { return source; }
00093   int Slof(void) const { return slof; }
00094   char Polarization(void) const { return polarization; }
00095   int Lof(void) const { return lof; }
00096   bool IsScr() const { return scrBank >= 0; }
00097   const char *Commands(void) const { return commands; }
00098   };
00099 
00100 class cDiseqcs : public cConfig<cDiseqc> {
00101 public:
00102   const cDiseqc *Get(int Device, int Source, int Frequency, char Polarization, const cScr **Scr) const;
00110   };
00111 
00112 extern cDiseqcs Diseqcs;
00113 
00114 #endif //__DISEQC_H