diff options
Diffstat (limited to 'service.h')
-rw-r--r-- | service.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/service.h b/service.h new file mode 100644 index 0000000..f0fda6f --- /dev/null +++ b/service.h @@ -0,0 +1,111 @@ +/** + * GraphLCD plugin for the Video Disk Recorder + * + * service.h - class for events from external services + * + * (c) 2010-2011 Wolfgang Astleitner <mrwastl AT users sourceforge net> + * + * mailbox-contribution: user 'Keine_Ahnung' + **/ + +#ifndef _GRAPHLCD_SERVICE_H_ +#define _GRAPHLCD_SERVICE_H_ + +#include <glcdskin/type.h> + +#include <string> +#include <vdr/plugin.h> + +#include <vector> // req. for state.h +#include "state.h" + +// Radiotext +struct RadioTextService_v1_0 { + int rds_info; + int rds_pty; + char *rds_text; + char *rds_title; + char *rds_artist; + struct tm *title_start; +}; + +// LcrData +struct LcrService_v1_0 { + cString destination; + cString price; + cString pulse; +}; + +// Femon +struct FemonService_v1_0 { + cString fe_name; + cString fe_status; + uint16_t fe_snr; + uint16_t fe_signal; + uint32_t fe_ber; + uint32_t fe_unc; + double video_bitrate; + double audio_bitrate; + double dolby_bitrate; +}; + +// Span +struct Span_GetBarHeights_v1_0 { + // all heights are normalized to 100(%) + unsigned int bands; // number of bands to compute + unsigned int *barHeights; // the heights of the bars of the two channels combined + unsigned int *barHeightsLeftChannel; // the heights of the bars of the left channel + unsigned int *barHeightsRightChannel; // the heights of the bars of the right channel + unsigned int *volumeLeftChannel; // the volume of the left channels + unsigned int *volumeRightChannel; // the volume of the right channels + unsigned int *volumeBothChannels; // the combined volume of the two channels + const char *name; // name of the plugin that wants to get the data + // (must be unique for each client!) + unsigned int falloff; // bar falloff value + unsigned int *barPeaksBothChannels; // bar peaks of the two channels combined + unsigned int *barPeaksLeftChannel; // bar peaks of the left channel + unsigned int *barPeaksRightChannel; // bar peaks of the right channel +}; + + +class cGraphLCDService +{ +private: + //cMutex mutex; + cGraphLCDState * mState; + + RadioTextService_v1_0 checkRTSData, currRTSData; + LcrService_v1_0 checkLcrData, currLcrData; + FemonService_v1_0 checkFemonData, currFemonData; + Span_GetBarHeights_v1_0 checkSpanData, currSpanData; + bool checkMailboxNewData, currMailboxNewData; + unsigned long checkMailboxUnseenData, currMailboxUnseenData; + /* __Changed = data has been changed */ + /* __Active = plugin/service is available and active */ + /* __Use = service is requested in skin (don't call services that wouldn't be used anyway) */ + /* __Init = ServiceIsAvailable() has been called at least one for this service */ + bool radioChanged, radioActive, radioUse, radioInit; + bool lcrChanged, lcrActive, lcrUse, lcrInit; + bool femonChanged, femonActive, femonUse, femonInit; + bool mailboxChanged, mailboxActive, mailboxUse, mailboxInit; + bool spanChanged, spanActive, spanUse, spanInit; + // timestamp of last service update request + uint64_t radioLastChange, lcrLastChange, femonLastChange, mailboxLastChange, spanLastChange; + // min. delay between two service update requests + int radioUpdateDelay, lcrUpdateDelay, femonUpdateDelay, mailboxUpdateDelay, spanUpdateDelay; + + // check if femon version <= 1.7.7 + bool femonVersionChecked, femonVersionValid; +//protected: + +public: + cGraphLCDService(cGraphLCDState * state); + virtual ~cGraphLCDService(); + + bool ServiceIsAvailable(const std::string & Name, const std::string & Options = NULL); + void SetServiceUpdateDelay(const std::string & Name, int delay); + bool NeedsUpdate(uint64_t CurrentTime); + GLCD::cType GetItem(const std::string & ServiceName, const std::string & Item); +}; + +#endif |