summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h211
1 files changed, 64 insertions, 147 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
index a769328..3ae30a7 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
@@ -27,29 +27,60 @@
27#include "xbmc_pvr_types.h" 27#include "xbmc_pvr_types.h"
28#include "libXBMC_addon.h" 28#include "libXBMC_addon.h"
29 29
30#define PVR_HELPER_DLL_NAME XBMC_DLL_NAME("pvr")
31#define PVR_HELPER_DLL XBMC_DLL("pvr")
32
33#define DVD_TIME_BASE 1000000 30#define DVD_TIME_BASE 1000000
34 31
35//! @todo original definition is in DVDClock.h 32//! @todo original definition is in DVDClock.h
36#define DVD_NOPTS_VALUE 0xFFF0000000000000 33#define DVD_NOPTS_VALUE 0xFFF0000000000000
37 34
35namespace KodiAPI
36{
37namespace V1
38{
39namespace PVR
40{
41
42typedef struct CB_PVRLib
43{
44 void (*TransferEpgEntry)(void *userData, const ADDON_HANDLE handle, const EPG_TAG *epgentry);
45 void (*TransferChannelEntry)(void *userData, const ADDON_HANDLE handle, const PVR_CHANNEL *chan);
46 void (*TransferTimerEntry)(void *userData, const ADDON_HANDLE handle, const PVR_TIMER *timer);
47 void (*TransferRecordingEntry)(void *userData, const ADDON_HANDLE handle, const PVR_RECORDING *recording);
48 void (*AddMenuHook)(void *addonData, PVR_MENUHOOK *hook);
49 void (*Recording)(void *addonData, const char *Name, const char *FileName, bool On);
50 void (*TriggerChannelUpdate)(void *addonData);
51 void (*TriggerTimerUpdate)(void *addonData);
52 void (*TriggerRecordingUpdate)(void *addonData);
53 void (*TriggerChannelGroupsUpdate)(void *addonData);
54 void (*TriggerEpgUpdate)(void *addonData, unsigned int iChannelUid);
55
56 void (*TransferChannelGroup)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group);
57 void (*TransferChannelGroupMember)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member);
58
59 void (*FreeDemuxPacket)(void *addonData, DemuxPacket* pPacket);
60 DemuxPacket* (*AllocateDemuxPacket)(void *addonData, int iDataSize);
61
62 void (*ConnectionStateChange)(void* addonData, const char* strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage);
63 void (*EpgEventStateChange)(void* addonData, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState);
64} CB_PVRLib;
65
66} /* namespace PVR */
67} /* namespace V1 */
68} /* namespace KodiAPI */
69
38class CHelper_libXBMC_pvr 70class CHelper_libXBMC_pvr
39{ 71{
40public: 72public:
41 CHelper_libXBMC_pvr(void) 73 CHelper_libXBMC_pvr(void)
42 { 74 {
43 m_libXBMC_pvr = NULL; 75 m_Handle = nullptr;
44 m_Handle = NULL; 76 m_Callbacks = nullptr;
45 } 77 }
46 78
47 ~CHelper_libXBMC_pvr(void) 79 ~CHelper_libXBMC_pvr(void)
48 { 80 {
49 if (m_libXBMC_pvr) 81 if (m_Handle && m_Callbacks)
50 { 82 {
51 PVR_unregister_me(m_Handle, m_Callbacks); 83 m_Handle->PVRLib_UnRegisterMe(m_Handle->addonData, m_Callbacks);
52 dlclose(m_libXBMC_pvr);
53 } 84 }
54 } 85 }
55 86
@@ -60,98 +91,12 @@ public:
60 */ 91 */
61 bool RegisterMe(void* handle) 92 bool RegisterMe(void* handle)
62 { 93 {
63 m_Handle = handle; 94 m_Handle = static_cast<AddonCB*>(handle);
64 95 if (m_Handle)
65 std::string libBasePath; 96 m_Callbacks = (KodiAPI::V1::PVR::CB_PVRLib*)m_Handle->PVRLib_RegisterMe(m_Handle->addonData);
66 libBasePath = ((cb_array*)m_Handle)->libPath; 97 if (!m_Callbacks)
67 libBasePath += PVR_HELPER_DLL; 98 fprintf(stderr, "libXBMC_pvr-ERROR: PVRLib_register_me can't get callback table from Kodi !!!\n");
68 99
69 m_libXBMC_pvr = dlopen(libBasePath.c_str(), RTLD_LAZY);
70 if (m_libXBMC_pvr == NULL)
71 {
72 fprintf(stderr, "Unable to load %s\n", dlerror());
73 return false;
74 }
75
76 PVR_register_me = (void* (*)(void *HANDLE))
77 dlsym(m_libXBMC_pvr, "PVR_register_me");
78 if (PVR_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
79
80 PVR_unregister_me = (void (*)(void* HANDLE, void* CB))
81 dlsym(m_libXBMC_pvr, "PVR_unregister_me");
82 if (PVR_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
83
84 PVR_transfer_epg_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const EPG_TAG *epgentry))
85 dlsym(m_libXBMC_pvr, "PVR_transfer_epg_entry");
86 if (PVR_transfer_epg_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
87
88 PVR_transfer_channel_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL *chan))
89 dlsym(m_libXBMC_pvr, "PVR_transfer_channel_entry");
90 if (PVR_transfer_channel_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
91
92 PVR_transfer_timer_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_TIMER *timer))
93 dlsym(m_libXBMC_pvr, "PVR_transfer_timer_entry");
94 if (PVR_transfer_timer_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
95
96 PVR_transfer_recording_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_RECORDING *recording))
97 dlsym(m_libXBMC_pvr, "PVR_transfer_recording_entry");
98 if (PVR_transfer_recording_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
99
100 PVR_add_menu_hook = (void (*)(void* HANDLE, void* CB, PVR_MENUHOOK *hook))
101 dlsym(m_libXBMC_pvr, "PVR_add_menu_hook");
102 if (PVR_add_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
103
104 PVR_recording = (void (*)(void* HANDLE, void* CB, const char *Name, const char *FileName, bool On))
105 dlsym(m_libXBMC_pvr, "PVR_recording");
106 if (PVR_recording == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
107
108 PVR_trigger_timer_update = (void (*)(void* HANDLE, void* CB))
109 dlsym(m_libXBMC_pvr, "PVR_trigger_timer_update");
110 if (PVR_trigger_timer_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
111
112 PVR_trigger_recording_update = (void (*)(void* HANDLE, void* CB))
113 dlsym(m_libXBMC_pvr, "PVR_trigger_recording_update");
114 if (PVR_trigger_recording_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
115
116 PVR_trigger_channel_update = (void (*)(void* HANDLE, void* CB))
117 dlsym(m_libXBMC_pvr, "PVR_trigger_channel_update");
118 if (PVR_trigger_channel_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
119
120 PVR_trigger_channel_groups_update = (void (*)(void* HANDLE, void* CB))
121 dlsym(m_libXBMC_pvr, "PVR_trigger_channel_groups_update");
122 if (PVR_trigger_channel_groups_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
123
124 PVR_trigger_epg_update = (void (*)(void* HANDLE, void* CB, unsigned int iChannelUid))
125 dlsym(m_libXBMC_pvr, "PVR_trigger_epg_update");
126 if (PVR_trigger_epg_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
127
128 PVR_transfer_channel_group = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group))
129 dlsym(m_libXBMC_pvr, "PVR_transfer_channel_group");
130 if (PVR_transfer_channel_group == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
131
132 PVR_transfer_channel_group_member = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member))
133 dlsym(m_libXBMC_pvr, "PVR_transfer_channel_group_member");
134 if (PVR_transfer_channel_group_member == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
135
136#ifdef USE_DEMUX
137 PVR_free_demux_packet = (void (*)(void* HANDLE, void* CB, DemuxPacket* pPacket))
138 dlsym(m_libXBMC_pvr, "PVR_free_demux_packet");
139 if (PVR_free_demux_packet == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
140
141 PVR_allocate_demux_packet = (DemuxPacket* (*)(void* HANDLE, void* CB, int iDataSize))
142 dlsym(m_libXBMC_pvr, "PVR_allocate_demux_packet");
143 if (PVR_allocate_demux_packet == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
144#endif
145
146 PVR_connection_state_change = (void (*)(void* HANDLE, void* CB, const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage))
147 dlsym(m_libXBMC_pvr, "PVR_connection_state_change");
148 if (PVR_connection_state_change == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
149
150 PVR_epg_event_state_change = (void (*)(void* HANDLE, void* CB, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState))
151 dlsym(m_libXBMC_pvr, "PVR_epg_event_state_change");
152 if (PVR_epg_event_state_change == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
153
154 m_Callbacks = PVR_register_me(m_Handle);
155 return m_Callbacks != NULL; 100 return m_Callbacks != NULL;
156 } 101 }
157 102
@@ -162,7 +107,7 @@ public:
162 */ 107 */
163 void TransferEpgEntry(const ADDON_HANDLE handle, const EPG_TAG* entry) 108 void TransferEpgEntry(const ADDON_HANDLE handle, const EPG_TAG* entry)
164 { 109 {
165 return PVR_transfer_epg_entry(m_Handle, m_Callbacks, handle, entry); 110 return m_Callbacks->TransferEpgEntry(m_Handle->addonData, handle, entry);
166 } 111 }
167 112
168 /*! 113 /*!
@@ -172,7 +117,7 @@ public:
172 */ 117 */
173 void TransferChannelEntry(const ADDON_HANDLE handle, const PVR_CHANNEL* entry) 118 void TransferChannelEntry(const ADDON_HANDLE handle, const PVR_CHANNEL* entry)
174 { 119 {
175 return PVR_transfer_channel_entry(m_Handle, m_Callbacks, handle, entry); 120 return m_Callbacks->TransferChannelEntry(m_Handle->addonData, handle, entry);
176 } 121 }
177 122
178 /*! 123 /*!
@@ -182,7 +127,7 @@ public:
182 */ 127 */
183 void TransferTimerEntry(const ADDON_HANDLE handle, const PVR_TIMER* entry) 128 void TransferTimerEntry(const ADDON_HANDLE handle, const PVR_TIMER* entry)
184 { 129 {
185 return PVR_transfer_timer_entry(m_Handle, m_Callbacks, handle, entry); 130 return m_Callbacks->TransferTimerEntry(m_Handle->addonData, handle, entry);
186 } 131 }
187 132
188 /*! 133 /*!
@@ -192,7 +137,7 @@ public:
192 */ 137 */
193 void TransferRecordingEntry(const ADDON_HANDLE handle, const PVR_RECORDING* entry) 138 void TransferRecordingEntry(const ADDON_HANDLE handle, const PVR_RECORDING* entry)
194 { 139 {
195 return PVR_transfer_recording_entry(m_Handle, m_Callbacks, handle, entry); 140 return m_Callbacks->TransferRecordingEntry(m_Handle->addonData, handle, entry);
196 } 141 }
197 142
198 /*! 143 /*!
@@ -202,7 +147,7 @@ public:
202 */ 147 */
203 void TransferChannelGroup(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP* entry) 148 void TransferChannelGroup(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP* entry)
204 { 149 {
205 return PVR_transfer_channel_group(m_Handle, m_Callbacks, handle, entry); 150 return m_Callbacks->TransferChannelGroup(m_Handle->addonData, handle, entry);
206 } 151 }
207 152
208 /*! 153 /*!
@@ -212,7 +157,7 @@ public:
212 */ 157 */
213 void TransferChannelGroupMember(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER* entry) 158 void TransferChannelGroupMember(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER* entry)
214 { 159 {
215 return PVR_transfer_channel_group_member(m_Handle, m_Callbacks, handle, entry); 160 return m_Callbacks->TransferChannelGroupMember(m_Handle->addonData, handle, entry);
216 } 161 }
217 162
218 /*! 163 /*!
@@ -221,7 +166,7 @@ public:
221 */ 166 */
222 void AddMenuHook(PVR_MENUHOOK* hook) 167 void AddMenuHook(PVR_MENUHOOK* hook)
223 { 168 {
224 return PVR_add_menu_hook(m_Handle, m_Callbacks, hook); 169 return m_Callbacks->AddMenuHook(m_Handle->addonData, hook);
225 } 170 }
226 171
227 /*! 172 /*!
@@ -232,7 +177,7 @@ public:
232 */ 177 */
233 void Recording(const char* strRecordingName, const char* strFileName, bool bOn) 178 void Recording(const char* strRecordingName, const char* strFileName, bool bOn)
234 { 179 {
235 return PVR_recording(m_Handle, m_Callbacks, strRecordingName, strFileName, bOn); 180 return m_Callbacks->Recording(m_Handle->addonData, strRecordingName, strFileName, bOn);
236 } 181 }
237 182
238 /*! 183 /*!
@@ -240,7 +185,7 @@ public:
240 */ 185 */
241 void TriggerTimerUpdate(void) 186 void TriggerTimerUpdate(void)
242 { 187 {
243 return PVR_trigger_timer_update(m_Handle, m_Callbacks); 188 return m_Callbacks->TriggerTimerUpdate(m_Handle->addonData);
244 } 189 }
245 190
246 /*! 191 /*!
@@ -248,7 +193,7 @@ public:
248 */ 193 */
249 void TriggerRecordingUpdate(void) 194 void TriggerRecordingUpdate(void)
250 { 195 {
251 return PVR_trigger_recording_update(m_Handle, m_Callbacks); 196 return m_Callbacks->TriggerRecordingUpdate(m_Handle->addonData);
252 } 197 }
253 198
254 /*! 199 /*!
@@ -256,7 +201,7 @@ public:
256 */ 201 */
257 void TriggerChannelUpdate(void) 202 void TriggerChannelUpdate(void)
258 { 203 {
259 return PVR_trigger_channel_update(m_Handle, m_Callbacks); 204 return m_Callbacks->TriggerChannelUpdate(m_Handle->addonData);
260 } 205 }
261 206
262 /*! 207 /*!
@@ -265,7 +210,7 @@ public:
265 */ 210 */
266 void TriggerEpgUpdate(unsigned int iChannelUid) 211 void TriggerEpgUpdate(unsigned int iChannelUid)
267 { 212 {
268 return PVR_trigger_epg_update(m_Handle, m_Callbacks, iChannelUid); 213 return m_Callbacks->TriggerEpgUpdate(m_Handle->addonData, iChannelUid);
269 } 214 }
270 215
271 /*! 216 /*!
@@ -273,7 +218,7 @@ public:
273 */ 218 */
274 void TriggerChannelGroupsUpdate(void) 219 void TriggerChannelGroupsUpdate(void)
275 { 220 {
276 return PVR_trigger_channel_groups_update(m_Handle, m_Callbacks); 221 return m_Callbacks->TriggerChannelGroupsUpdate(m_Handle->addonData);
277 } 222 }
278 223
279#ifdef USE_DEMUX 224#ifdef USE_DEMUX
@@ -283,7 +228,7 @@ public:
283 */ 228 */
284 void FreeDemuxPacket(DemuxPacket* pPacket) 229 void FreeDemuxPacket(DemuxPacket* pPacket)
285 { 230 {
286 return PVR_free_demux_packet(m_Handle, m_Callbacks, pPacket); 231 return m_Callbacks->FreeDemuxPacket(m_Handle->addonData, pPacket);
287 } 232 }
288 233
289 /*! 234 /*!
@@ -293,7 +238,7 @@ public:
293 */ 238 */
294 DemuxPacket* AllocateDemuxPacket(int iDataSize) 239 DemuxPacket* AllocateDemuxPacket(int iDataSize)
295 { 240 {
296 return PVR_allocate_demux_packet(m_Handle, m_Callbacks, iDataSize); 241 return m_Callbacks->AllocateDemuxPacket(m_Handle->addonData, iDataSize);
297 } 242 }
298#endif 243#endif
299 244
@@ -306,7 +251,7 @@ public:
306 */ 251 */
307 void ConnectionStateChange(const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage) 252 void ConnectionStateChange(const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage)
308 { 253 {
309 return PVR_connection_state_change(m_Handle, m_Callbacks, strConnectionString, newState, strMessage); 254 return m_Callbacks->ConnectionStateChange(m_Handle->addonData, strConnectionString, newState, strMessage);
310 } 255 }
311 256
312 /*! 257 /*!
@@ -318,38 +263,10 @@ public:
318 */ 263 */
319 void EpgEventStateChange(EPG_TAG *tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState) 264 void EpgEventStateChange(EPG_TAG *tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState)
320 { 265 {
321 return PVR_epg_event_state_change(m_Handle, m_Callbacks, tag, iUniqueChannelId, newState); 266 return m_Callbacks->EpgEventStateChange(m_Handle->addonData, tag, iUniqueChannelId, newState);
322 } 267 }
323 268
324protected:
325 void* (*PVR_register_me)(void*);
326 void (*PVR_unregister_me)(void*, void*);
327 void (*PVR_transfer_epg_entry)(void*, void*, const ADDON_HANDLE, const EPG_TAG*);
328 void (*PVR_transfer_channel_entry)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL*);
329 void (*PVR_transfer_timer_entry)(void*, void*, const ADDON_HANDLE, const PVR_TIMER*);
330 void (*PVR_transfer_recording_entry)(void*, void*, const ADDON_HANDLE, const PVR_RECORDING*);
331 void (*PVR_add_menu_hook)(void*, void*, PVR_MENUHOOK*);
332 void (*PVR_recording)(void*, void*, const char*, const char*, bool);
333 void (*PVR_trigger_channel_update)(void*, void*);
334 void (*PVR_trigger_channel_groups_update)(void*, void*);
335 void (*PVR_trigger_timer_update)(void*, void*);
336 void (*PVR_trigger_recording_update)(void* , void*);
337 void (*PVR_trigger_epg_update)(void*, void*, unsigned int);
338 void (*PVR_transfer_channel_group)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL_GROUP*);
339 void (*PVR_transfer_channel_group_member)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL_GROUP_MEMBER*);
340#ifdef USE_DEMUX
341 void (*PVR_free_demux_packet)(void*, void*, DemuxPacket*);
342 DemuxPacket* (*PVR_allocate_demux_packet)(void*, void*, int);
343#endif
344 void (*PVR_connection_state_change)(void*, void*, const char*, PVR_CONNECTION_STATE, const char*);
345 void (*PVR_epg_event_state_change)(void*, void*, EPG_TAG*, unsigned int, EPG_EVENT_STATE);
346
347private: 269private:
348 void* m_libXBMC_pvr; 270 AddonCB* m_Handle;
349 void* m_Handle; 271 KodiAPI::V1::PVR::CB_PVRLib *m_Callbacks;
350 void* m_Callbacks;
351 struct cb_array
352 {
353 const char* libPath;
354 };
355}; 272};