X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/3353982034f151f4615cb1842873d99a7a6fa0ca..bac62ae64bc2b0cba82a26daec4b3623cae3a859:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 376ed027..8c68f902 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -7,6 +7,8 @@ #include #include +class eServiceEvent; + class eServiceReference { public: @@ -20,7 +22,6 @@ public: }; int type; - int flags; // flags will NOT be compared. enum { isDirectory=1, // SHOULD enter (implies mustDescent) @@ -38,21 +39,44 @@ public: hasSortKey=16, // has a sort key in data[3]. not having a sort key implies 0. sort1=32 // sort key is 1 instead of 0 }; + int flags; // flags will NOT be compared. inline int getSortKey() const { return (flags & hasSortKey) ? data[3] : ((flags & sort1) ? 1 : 0); } +#ifndef SWIG int data[8]; std::string path; +#endif + std::string getPath() { return path; } + std::string setPath( const std::string &n ) { path=n; } + + int getData(unsigned int num) const + { + if ( num < sizeof(data)/sizeof(int) ) + return data[num]; + return 0; + } + + void setData(unsigned int num, int val) + { + if ( num < sizeof(data)/sizeof(int) ) + data[num] = val; + } // only for override service names in bouquets or to give servicerefs a name which not have a // real existing service ( for dvb eServiceDVB ) +#ifndef SWIG std::string name; +#endif + std::string getName() { return name; } + void setName( const std::string &n ) { name=n; } eServiceReference() : type(idInvalid), flags(0) { + memset(data, 0, sizeof(data)); } - +#ifndef SWIG eServiceReference(int type, int flags) : type(type), flags(flags) { @@ -103,13 +127,14 @@ public: { memset(data, 0, sizeof(data)); } +#endif eServiceReference(const std::string &string); std::string toString() const; bool operator==(const eServiceReference &c) const { if (type != c.type) return 0; - return /* (flags == c.flags) && */ (memcmp(data, c.data, sizeof(int)*8)==0) && (path == c.path); + return (memcmp(data, c.data, sizeof(int)*8)==0) && (path == c.path); } bool operator!=(const eServiceReference &c) const { @@ -122,11 +147,6 @@ public: if (type > c.type) return 0; - -/* if (flags < c.flags) - return 1; - if (flags > c.flags) - return 0; */ int r=memcmp(data, c.data, sizeof(int)*8); if (r) @@ -146,7 +166,7 @@ public: SWIG_ALLOW_OUTPUT_SIMPLE(eServiceReference); -typedef unsigned long long pts_t; +typedef long long pts_t; /* the reason we have the servicereference as additional argument is that we don't have to create one object for every entry in a possibly @@ -175,13 +195,17 @@ public: virtual SWIG_VOID(RESULT) getName(const eServiceReference &ref, std::string &SWIG_OUTPUT)=0; // doesn't need to be implemented, should return -1 then. - virtual int getLength(const eServiceReference &ref)=0; + virtual int getLength(const eServiceReference &ref); + virtual SWIG_VOID(RESULT) getEvent(const eServiceReference &ref, ePtr &SWIG_OUTPUT, time_t start_time=0); + // returns true when not implemented + virtual bool isPlayable(const eServiceReference &ref, const eServiceReference &ignore); + + virtual int getInfo(const eServiceReference &ref, int w); + virtual std::string getInfoString(const eServiceReference &ref,int w); }; TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); -class eServiceEvent; - TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); class iServiceInformation: public iObject @@ -189,15 +213,65 @@ class iServiceInformation: public iObject public: virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) getEvent(ePtr &SWIG_OUTPUT, int nownext); + + enum { + sIsCrypted, /* is encrypted (no indication if decrypt was possible) */ + sAspect, /* aspect ratio: 0=4:3, 1=16:9, 2=whatever we need */ + sIsMultichannel, /* multichannel *available* (probably not selected) */ + + /* "user serviceable info" - they are not reliable. Don't use them for anything except the service menu! + that's also the reason why they are so globally defined. + + + again - if somebody EVER tries to use this information for anything else than simply displaying it, + i will change this to return a user-readable text like "zero x zero three three" (and change the + exact spelling in every version) to stop that! + */ + sVideoPID, + sAudioPID, + sPCRPID, + sPMTPID, + sTXTPID, + + sSID, + sONID, + sTSID, + sNamespace, + sProvider, + + sDescription, + sTimeCreate, // unix time or string + }; + enum { resNA = -1, resIsString = -2 }; + + virtual int getInfo(int w); + virtual std::string getInfoString(int w); }; TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); +class iFrontendStatusInformation: public iObject +{ +public: + enum { + bitErrorRate, + signalPower, + signalQuality + }; + virtual int getFrontendInfo(int w)=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iFrontendStatusInformationPtr); + class iPauseableService: public iObject { public: virtual RESULT pause()=0; virtual RESULT unpause()=0; + + /* hm. */ + virtual RESULT setSlowMotion(int ratio=0)=0; + virtual RESULT setFastForward(int ratio=0)=0; }; TEMPLATE_TYPEDEF(ePtr, iPauseableServicePtr); @@ -210,14 +284,21 @@ public: enum { dirForward = +1, dirBackward = -1 }; virtual RESULT seekRelative(int direction, pts_t to)=0; virtual RESULT getPlayPosition(pts_t &SWIG_OUTPUT)=0; + /* if you want to do several seeks in a row, you can enable the trickmode. + audio will be switched off, sync will be disabled etc. */ + virtual RESULT setTrickmode(int trick=0)=0; }; TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); struct iAudioTrackInfo { +#ifndef SWIG std::string m_description; + std::string m_language; /* iso639 */ +#endif std::string getDescription() { return m_description; } + std::string getLanguage() { return m_language; } }; SWIG_ALLOW_OUTPUT_SIMPLE(iAudioTrackInfo); @@ -232,6 +313,24 @@ public: TEMPLATE_TYPEDEF(ePtr, iAudioTrackSelectionPtr); +class iSubserviceList: public iObject +{ +public: + virtual int getNumberOfSubservices()=0; + virtual SWIG_VOID(RESULT) getSubservice(eServiceReference &SWIG_OUTPUT, unsigned int n)=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iSubserviceListPtr); + +class iTimeshiftService: public iObject +{ +public: + virtual RESULT startTimeshift()=0; + virtual RESULT stopTimeshift()=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iTimeshiftServicePtr); + class iPlayableService: public iObject { friend class iServiceHandler; @@ -242,8 +341,9 @@ public: evEnd, evTuneFailed, - // when iServiceInformation is implemented: - evUpdatedEventInfo + // when iServiceInformation is implemented: + evUpdatedEventInfo, + evUpdatedInfo, }; virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; virtual RESULT start()=0; @@ -252,6 +352,9 @@ public: virtual SWIG_VOID(RESULT) pause(ePtr &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) info(ePtr &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) audioTracks(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) subServices(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) frontendStatusInfo(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) timeshift(ePtr &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr);