vdr
1.7.27
|
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