fixed: Improved DVDPlayer to fix problem with switch channels
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / pvrclients / vdr / pvrclient-vdr.h
1 #pragma once
2
3 #ifndef __PVRCLIENT_VDR_H__
4 #define __PVRCLIENT_VDR_H__
5
6 /*
7  *      Copyright (C) 2005-2008 Team XBMC
8  *      http://xbmc.org
9  *
10  *  This Program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2, or (at your option)
13  *  any later version.
14  *
15  *  This Program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with XBMC; see the file COPYING.  If not, write to
22  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23  *  http://www.gnu.org/copyleft/gpl.html
24  *
25  */
26
27 /*
28 * for DESCRIPTION see 'PVRClient-vdr.cpp'
29 */
30
31 #include "vtptransceiver.h"
32 #include "StdString.h"
33 #include <vector>
34
35 /* Master defines for client control */
36 #include "../../addons/include/xbmc_pvr_types.h"
37
38 extern pthread_mutex_t m_critSection;
39
40 class cPVRClientVDR
41 {
42 public:
43   /* Class interface */
44   cPVRClientVDR();
45   ~cPVRClientVDR();
46
47   /* VTP Listening Thread */
48   static void* Process(void*);
49
50   /* Server handling */
51   PVR_ERROR GetProperties(PVR_SERVERPROPS *props);
52
53   bool Connect();
54   void Disconnect();
55   bool IsUp();
56
57   /* General handling */
58   const char* GetBackendName();
59   const char* GetBackendVersion();
60   const char* GetConnectionString();
61   PVR_ERROR GetDriveSpace(long long *total, long long *used);
62   PVR_ERROR GetClientTime(time_t *time, int *diff_from_gmt);
63
64   /* EPG handling */
65   PVR_ERROR RequestEPGForChannel(const PVR_CHANNEL &channel, PVRHANDLE handle, time_t start = NULL, time_t end = NULL);
66
67   /* Channel handling */
68   int GetNumChannels(void);
69   PVR_ERROR RequestChannelList(PVRHANDLE handle, bool radio = false);
70
71   /* Record handling **/
72   int GetNumRecordings(void);
73   PVR_ERROR RequestRecordingsList(PVRHANDLE handle);
74   PVR_ERROR DeleteRecording(const PVR_RECORDINGINFO &recinfo);
75   PVR_ERROR RenameRecording(const PVR_RECORDINGINFO &recinfo, const char *newname);
76
77   /* Timer handling */
78   int GetNumTimers(void);
79   PVR_ERROR RequestTimerList(PVRHANDLE handle);
80   PVR_ERROR GetTimerInfo(unsigned int timernumber, PVR_TIMERINFO &tag);
81   PVR_ERROR AddTimer(const PVR_TIMERINFO &timerinfo);
82   PVR_ERROR DeleteTimer(const PVR_TIMERINFO &timerinfo, bool force = false);
83   PVR_ERROR RenameTimer(const PVR_TIMERINFO &timerinfo, const char *newname);
84   PVR_ERROR UpdateTimer(const PVR_TIMERINFO &timerinfo);
85
86   /* Live stream handling */
87   bool OpenLiveStream(const PVR_CHANNEL &channelinfo);
88   void CloseLiveStream();
89   int ReadLiveStream(BYTE* buf, int buf_size);
90   int GetCurrentClientChannel();
91   bool SwitchChannel(const PVR_CHANNEL &channelinfo);
92   PVR_ERROR SignalQuality(PVR_SIGNALQUALITY &qualityinfo);
93
94   /* Record stream handling */
95   bool OpenRecordedStream(const PVR_RECORDINGINFO &recinfo);
96   void CloseRecordedStream(void);
97   int ReadRecordedStream(BYTE* buf, int buf_size);
98   __int64 SeekRecordedStream(__int64 pos, int whence=SEEK_SET);
99   __int64 LengthRecordedStream(void);
100
101   static CVTPTransceiver *GetTransceiver() { return m_transceiver; }
102
103 protected:
104   static CVTPTransceiver *m_transceiver;
105   static SOCKET           m_socket_video;
106   static SOCKET           m_socket_data;
107
108 private:
109   bool readNoSignalStream();
110   int writeNoSignalStream(BYTE* buf, int buf_size);
111
112   /* VDR to XBMC Callback functions */
113   static void* CallbackRcvThread(void* arg);
114   bool VDRToXBMCCommand(char *Cmd);
115   bool CallBackMODT(const char *Option);
116   bool CallBackDELT(const char *Option);
117   bool CallBackADDT(const char *Option);
118   bool CallBackSMSG(const char *Option);
119   bool CallBackIMSG(const char *Option);
120   bool CallBackWMSG(const char *Option);
121   bool CallBackEMSG(const char *Option);
122
123   int                     m_iCurrentChannel;
124   static bool             m_bConnected;
125   pthread_t               m_thread;
126   static bool             m_bStop;
127
128   /* Following is for recordings streams */
129   uint64_t                m_currentPlayingRecordBytes;
130   uint32_t                m_currentPlayingRecordFrames;
131   uint64_t                m_currentPlayingRecordPosition;
132
133   /* No Signal Stream information */
134   char                    m_noSignalStreamData[ 6 + 0xffff ];
135   long                    m_noSignalStreamSize;
136   long                    m_noSignalStreamReadPos;
137   time_t                  m_TimeOut;
138   bool                    m_playingNoSignal;
139   int                     m_FirstRead;
140
141   CStdString              m_connectionString;
142
143   void Close();
144 };
145
146 #endif // __PVRCLIENT_VDR_H__