1 /*
2  *  Copyright (C) 2005-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #ifndef C_API_ADDONINSTANCE_PVR_EPG_H
10 #define C_API_ADDONINSTANCE_PVR_EPG_H
11 
12 #include "pvr_defines.h"
13 
14 #include <time.h>
15 
16 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
17 // "C" Definitions group 4 - PVR EPG
18 #ifdef __cplusplus
19 extern "C"
20 {
21 #endif /* __cplusplus */
22 
23   //============================================================================
24   /// @defgroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT enum EPG_EVENT_CONTENTMASK (and sub types)
25   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
26   /// @brief **EPG entry content event types.**\n
27   /// These ID's come from the DVB-SI EIT table "content descriptor"
28   /// Also known under the name "E-book genre assignments".
29   ///
30   /// See [ETSI EN 300 468 V1.14.1 (2014-05)](https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.14.01_60/en_300468v011401p.pdf)
31   /// about.
32   ///
33   /// Values used by this functions:
34   /// - @ref kodi::addon::PVREPGTag::SetGenreType()
35   /// - @ref kodi::addon::PVREPGTag::SetGenreSubType()
36   /// - @ref kodi::addon::PVRRecording::SetGenreType()
37   /// - @ref kodi::addon::PVRRecording::SetGenreSubType()
38   ///
39   /// Following types are listed here:
40   /// | emum Type | Description
41   /// |-----------|--------------------
42   /// | @ref EPG_EVENT_CONTENTMASK | EPG entry main content to use.
43   /// | @ref EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_MOVIEDRAMA event types for sub type of <b>"Movie/Drama"</b>.
44   /// | @ref EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_NEWSCURRENTAFFAIRS event types for sub type of <b>"News/Current affairs"</b>.
45   /// | @ref EPG_EVENT_CONTENTSUBMASK_SHOW | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SHOW event types for sub type of <b>"Show/Game show"</b>.
46   /// | @ref EPG_EVENT_CONTENTSUBMASK_SPORTS | @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SPORTS event types for sub type of <b>"Sports"</b>.
47   /// | @ref EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_CHILDRENYOUTH event types for sub type of <b>"Children's/Youth programmes"</b>.
48   /// | @ref EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_MUSICBALLETDANCE event types for sub type of <b>"Music/Ballet/Dance"</b>.
49   /// | @ref EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_ARTSCULTURE event types for sub type of <b>"Arts/Culture (without music)"</b>.
50   /// | @ref EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SOCIALPOLITICALECONOMICS event types for sub type of <b>"Social/Political issues/Economics"</b>.
51   /// | @ref EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_EDUCATIONALSCIENCE event types for sub type of <b>"Education/Science/Factual topics"</b>.
52   /// | @ref EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_LEISUREHOBBIES event types for sub type of <b>"Leisure hobbies"</b>.
53   /// | @ref EPG_EVENT_CONTENTSUBMASK_SPECIAL | EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SPECIAL event types for sub type of <b>"Special characteristics"</b>.
54   ///@{
55 
56   //============================================================================
57   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
58   /// @brief EPG entry main content to use.
59   ///
60   ///@{
61   typedef enum EPG_EVENT_CONTENTMASK
62   {
63     /// @brief __0x00__ : Undefined content mask entry.
64     EPG_EVENT_CONTENTMASK_UNDEFINED = 0x00,
65 
66     /// @brief __0x10__ : Movie/Drama.\n
67     /// \n
68     /// See @ref EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA about related sub types.
69     EPG_EVENT_CONTENTMASK_MOVIEDRAMA = 0x10,
70 
71     /// @brief __0x20__ : News/Current affairs.\n
72     /// \n
73     /// See @ref EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS about related sub types.
74     EPG_EVENT_CONTENTMASK_NEWSCURRENTAFFAIRS = 0x20,
75 
76     /// @brief __0x30__ : Show/Game show.\n
77     /// \n
78     /// See @ref EPG_EVENT_CONTENTSUBMASK_SHOW about related sub types.
79     EPG_EVENT_CONTENTMASK_SHOW = 0x30,
80 
81     /// @brief __0x40__ : Sports.\n
82     /// \n
83     /// See @ref EPG_EVENT_CONTENTSUBMASK_SPORTS about related sub types.
84     EPG_EVENT_CONTENTMASK_SPORTS = 0x40,
85 
86     /// @brief __0x50__ : Children's/Youth programmes.\n
87     /// \n
88     /// See @ref EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH about related sub types.
89     EPG_EVENT_CONTENTMASK_CHILDRENYOUTH = 0x50,
90 
91     /// @brief __0x60__ : Music/Ballet/Dance.\n
92     /// \n
93     /// See @ref EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE about related sub types.
94     EPG_EVENT_CONTENTMASK_MUSICBALLETDANCE = 0x60,
95 
96     /// @brief __0x70__ : Arts/Culture (without music).\n
97     /// \n
98     /// See @ref EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE about related sub types.
99     EPG_EVENT_CONTENTMASK_ARTSCULTURE = 0x70,
100 
101     /// @brief __0x80__ : Social/Political issues/Economics.\n
102     /// \n
103     /// See @ref EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS about related sub types.
104     EPG_EVENT_CONTENTMASK_SOCIALPOLITICALECONOMICS = 0x80,
105 
106     /// @brief __0x90__ : Education/Science/Factual topics.\n
107     /// \n
108     /// See @ref EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE about related sub types.
109     EPG_EVENT_CONTENTMASK_EDUCATIONALSCIENCE = 0x90,
110 
111     /// @brief __0xA0__ : Leisure hobbies.\n
112     /// \n
113     /// See @ref EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES about related sub types.
114     EPG_EVENT_CONTENTMASK_LEISUREHOBBIES = 0xA0,
115 
116     /// @brief __0xB0__ : Special characteristics.\n
117     /// \n
118     /// See @ref EPG_EVENT_CONTENTSUBMASK_SPECIAL about related sub types.
119     EPG_EVENT_CONTENTMASK_SPECIAL = 0xB0,
120 
121     /// @brief __0xF0__ User defined.
122     EPG_EVENT_CONTENTMASK_USERDEFINED = 0xF0,
123 
124     /// @brief Used to override standard genre types with a own name about.\n
125     /// \n
126     /// Set to this value @ref EPG_GENRE_USE_STRING on following places:
127     /// - @ref kodi::addon::PVREPGTag::SetGenreType()
128     /// - @ref kodi::addon::PVREPGTag::SetGenreSubType()
129     /// - @ref kodi::addon::PVRRecording::SetGenreType()
130     /// - @ref kodi::addon::PVRRecording::SetGenreSubType()
131     ///
132     /// @warning Value here is not a [ETSI EN 300 468 V1.14.1 (2014-05)](https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.14.01_60/en_300468v011401p.pdf)
133     /// conform.
134     ///
135     /// @note This is a own Kodi definition to set that genre is given by own
136     /// string. Used on @ref kodi::addon::PVREPGTag::SetGenreDescription() and
137     /// @ref kodi::addon::PVRRecording::SetGenreDescription()
138     EPG_GENRE_USE_STRING = 0x100
139   } EPG_EVENT_CONTENTMASK;
140   ///@}
141   //----------------------------------------------------------------------------
142 
143   //============================================================================
144   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
145   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_MOVIEDRAMA event
146   /// types for sub type of <b>"Movie/Drama"</b>.
147   ///
148   ///@{
149   typedef enum EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA
150   {
151     /// @brief __0x0__ : Movie/drama (general).
152     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_GENERAL = 0x0,
153 
154     /// @brief __0x1__ : Detective/thriller.
155     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_DETECTIVE_THRILLER = 0x1,
156 
157     /// @brief __0x2__ : Adventure/western/war.
158     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_ADVENTURE_WESTERN_WAR = 0x2,
159 
160     /// @brief __0x3__ : Science fiction/fantasy/horror.
161     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_SCIENCEFICTION_FANTASY_HORROR = 0x3,
162 
163     /// @brief __0x4__ : Comedy.
164     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_COMEDY = 0x4,
165 
166     /// @brief __0x5__ : Soap/melodrama/folkloric.
167     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_SOAP_MELODRAMA_FOLKLORIC = 0x5,
168 
169     /// @brief __0x6__ : Romance.
170     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_ROMANCE = 0x6,
171 
172     /// @brief __0x7__ : Serious/classical/religious/historical movie/drama.
173     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_SERIOUS_CLASSICAL_RELIGIOUS_HISTORICAL = 0x7,
174 
175     /// @brief __0x8__ : Adult movie/drama.
176     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_ADULT = 0x8,
177 
178     /// @brief __0xF__ : User defined.
179     EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA_USERDEFINED = 0xF
180   } EPG_EVENT_CONTENTSUBMASK_MOVIEDRAMA;
181   ///@}
182   //----------------------------------------------------------------------------
183 
184   //============================================================================
185   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
186   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_NEWSCURRENTAFFAIRS event
187   /// types for sub type of <b>"News/Current affairs"</b>.
188   ///
189   typedef enum EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS
190   {
191     /// @brief __0x0__ : News/current affairs (general).
192     EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS_GENERAL = 0x0,
193 
194     /// @brief __0x1__ : News/weather report.
195     EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS_WEATHER = 0x1,
196 
197     /// @brief __0x2__ : News magazine.
198     EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS_MAGAZINE = 0x2,
199 
200     /// @brief __0x3__ : Documentary.
201     EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS_DOCUMENTARY = 0x3,
202 
203     /// @brief __0x4__ : Discussion/interview/debate
204     EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS_DISCUSSION_INTERVIEW_DEBATE = 0x4,
205 
206     /// @brief __0xF__ : User defined.
207     EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS_USERDEFINED = 0xF
208   } EPG_EVENT_CONTENTSUBMASK_NEWSCURRENTAFFAIRS;
209   //----------------------------------------------------------------------------
210 
211   //============================================================================
212   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
213   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SHOW event
214   /// types for sub type of <b>"Show/Game show"</b>.
215   ///
216   typedef enum EPG_EVENT_CONTENTSUBMASK_SHOW
217   {
218     /// @brief __0x0__ : Show/game show (general).
219     EPG_EVENT_CONTENTSUBMASK_SHOW_GENERAL = 0x0,
220 
221     /// @brief __0x1__ : Game show/quiz/contest.
222     EPG_EVENT_CONTENTSUBMASK_SHOW_GAMESHOW_QUIZ_CONTEST = 0x1,
223 
224     /// @brief __0x2__ : Variety show.
225     EPG_EVENT_CONTENTSUBMASK_SHOW_VARIETY_SHOW = 0x2,
226 
227     /// @brief __0x3__ : Talk show.
228     EPG_EVENT_CONTENTSUBMASK_SHOW_TALK_SHOW = 0x3,
229 
230     /// @brief __0xF__ : User defined.
231     EPG_EVENT_CONTENTSUBMASK_SHOW_USERDEFINED = 0xF
232   } EPG_EVENT_CONTENTSUBMASK_SHOW;
233   //----------------------------------------------------------------------------
234 
235   //============================================================================
236   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
237   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SPORTS event
238   /// types for sub type of <b>"Sports"</b>.
239   ///
240   typedef enum EPG_EVENT_CONTENTSUBMASK_SPORTS
241   {
242     /// @brief __0x0__ : Sports (general).
243     EPG_EVENT_CONTENTSUBMASK_SPORTS_GENERAL = 0x0,
244 
245     /// @brief __0x1__ : Special events (Olympic Games, World Cup, etc.).
246     EPG_EVENT_CONTENTSUBMASK_SPORTS_OLYMPICGAMES_WORLDCUP = 0x1,
247 
248     /// @brief __0x2__ : Sports magazines.
249     EPG_EVENT_CONTENTSUBMASK_SPORTS_SPORTS_MAGAZINES = 0x2,
250 
251     /// @brief __0x3__ : Football/soccer.
252     EPG_EVENT_CONTENTSUBMASK_SPORTS_FOOTBALL_SOCCER = 0x3,
253 
254     /// @brief __0x4__ : Tennis/squash.
255     EPG_EVENT_CONTENTSUBMASK_SPORTS_TENNIS_SQUASH = 0x4,
256 
257     /// @brief __0x5__ : Team sports (excluding football).
258     EPG_EVENT_CONTENTSUBMASK_SPORTS_TEAMSPORTS = 0x5,
259 
260     /// @brief __0x6__ : Athletics.
261     EPG_EVENT_CONTENTSUBMASK_SPORTS_ATHLETICS = 0x6,
262 
263     /// @brief __0x7__ : Motor sport.
264     EPG_EVENT_CONTENTSUBMASK_SPORTS_MOTORSPORT = 0x7,
265 
266     /// @brief __0x8__ : Water sport.
267     EPG_EVENT_CONTENTSUBMASK_SPORTS_WATERSPORT = 0x8,
268 
269     /// @brief __0x9__ : Winter sports.
270     EPG_EVENT_CONTENTSUBMASK_SPORTS_WINTERSPORTS = 0x9,
271 
272     /// @brief __0xA__ : Equestrian.
273     EPG_EVENT_CONTENTSUBMASK_SPORTS_EQUESTRIAN = 0xA,
274 
275     /// @brief __0xB__ : Martial sports.
276     EPG_EVENT_CONTENTSUBMASK_SPORTS_MARTIALSPORTS = 0xB,
277 
278     /// @brief __0xF__ : User defined.
279     EPG_EVENT_CONTENTSUBMASK_SPORTS_USERDEFINED = 0xF
280   } EPG_EVENT_CONTENTSUBMASK_SPORTS;
281   //----------------------------------------------------------------------------
282 
283   //============================================================================
284   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
285   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_CHILDRENYOUTH event
286   /// types for sub type of <b>"Children's/Youth programmes"</b>.
287   ///
288   typedef enum EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH
289   {
290     /// @brief __0x0__ : Children's/youth programmes (general).
291     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_GENERAL = 0x0,
292 
293     /// @brief __0x1__ : Pre-school children's programmes.
294     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_PRESCHOOL_CHILDREN = 0x1,
295 
296     /// @brief __0x2__ : Entertainment programmes for 6 to 14.
297     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_ENTERTAIN_6TO14 = 0x2,
298 
299     /// @brief __0x3__ : Entertainment programmes for 10 to 16.
300     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_ENTERTAIN_10TO16 = 0x3,
301 
302     /// @brief __0x4__ : Informational/educational/school programmes.
303     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_INFORMATIONAL_EDUCATIONAL_SCHOOL = 0x4,
304 
305     /// @brief __0x5__ : Cartoons/puppets.
306     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_CARTOONS_PUPPETS = 0x5,
307 
308     /// @brief __0xF__ : User defined.
309     EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH_USERDEFINED = 0xF
310   } EPG_EVENT_CONTENTSUBMASK_CHILDRENYOUTH;
311   //----------------------------------------------------------------------------
312 
313   //============================================================================
314   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
315   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_MUSICBALLETDANCE event
316   /// types for sub type of <b>"Music/Ballet/Dance"</b>.
317   ///
318   typedef enum EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE
319   {
320     /// @brief __0x0__ : Music/ballet/dance (general).
321     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_GENERAL = 0x0,
322 
323     /// @brief __0x1__ : Rock/pop.
324     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_ROCKPOP = 0x1,
325 
326     /// @brief __0x2__ : Serious music/classical music.
327     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_SERIOUSMUSIC_CLASSICALMUSIC = 0x2,
328 
329     /// @brief __0x3__ : Folk/traditional music.
330     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_FOLK_TRADITIONAL_MUSIC = 0x3,
331 
332     /// @brief __0x4__ : Jazz.
333     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_JAZZ = 0x4,
334 
335     /// @brief __0x5__ : Musical/opera.
336     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_MUSICAL_OPERA = 0x5,
337 
338     /// @brief __0x6__ : Ballet.
339     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_BALLET = 0x6,
340 
341     /// @brief __0xF__ : User defined.
342     EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE_USERDEFINED = 0xF
343   } EPG_EVENT_CONTENTSUBMASK_MUSICBALLETDANCE;
344   //----------------------------------------------------------------------------
345 
346   //============================================================================
347   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
348   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_ARTSCULTURE event
349   /// types for sub type of <b>"Arts/Culture (without music)"</b>.
350   ///
351   typedef enum EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE
352   {
353     /// @brief __0x0__ : Arts/culture (without music, general).
354     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_GENERAL = 0x0,
355 
356     /// @brief __0x1__ : Performing arts.
357     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_PERFORMINGARTS = 0x1,
358 
359     /// @brief __0x2__ : Fine arts.
360     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_FINEARTS = 0x2,
361 
362     /// @brief __0x3__ : Religion.
363     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_RELIGION = 0x3,
364 
365     /// @brief __0x4__ : Popular culture/traditional arts.
366     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_POPULARCULTURE_TRADITIONALARTS = 0x4,
367 
368     /// @brief __0x5__ : Literature.
369     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_LITERATURE = 0x5,
370 
371     /// @brief __0x6__ : Film/cinema.
372     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_FILM_CINEMA = 0x6,
373 
374     /// @brief __0x7__ : Experimental film/video.
375     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_EXPERIMENTALFILM_VIDEO = 0x7,
376 
377     /// @brief __0x8__ : Broadcasting/press.
378     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_BROADCASTING_PRESS = 0x8,
379 
380     /// @brief __0x9__ : New media.
381     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_NEWMEDIA = 0x9,
382 
383     /// @brief __0xA__ : Arts/culture magazines.
384     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_ARTS_CULTUREMAGAZINES = 0xA,
385 
386     /// @brief __0xB__ : Fashion.
387     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_FASHION = 0xB,
388 
389     /// @brief __0xF__ : User defined.
390     EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE_USERDEFINED = 0xF
391   } EPG_EVENT_CONTENTSUBMASK_ARTSCULTURE;
392   //----------------------------------------------------------------------------
393 
394   //============================================================================
395   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
396   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SOCIALPOLITICALECONOMICS event
397   /// types for sub type of <b>"Social/Political issues/Economics"</b>.
398   ///
399   typedef enum EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS
400   {
401     /// @brief __0x0__ : Social/political issues/economics (general).
402     EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS_GENERAL = 0x0,
403 
404     /// @brief __0x1__ : Magazines/reports/documentary.
405     EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS_MAGAZINES_REPORTS_DOCUMENTARY = 0x1,
406 
407     /// @brief __0x2__ : Economics/social advisory.
408     EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS_ECONOMICS_SOCIALADVISORY = 0x2,
409 
410     /// @brief __0x3__ : Remarkable people.
411     EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS_REMARKABLEPEOPLE = 0x3,
412 
413     /// @brief __0xF__ : User defined.
414     EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS_USERDEFINED = 0xF
415   } EPG_EVENT_CONTENTSUBMASK_SOCIALPOLITICALECONOMICS;
416   //----------------------------------------------------------------------------
417 
418   //============================================================================
419   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
420   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_EDUCATIONALSCIENCE event
421   /// types for sub type of <b>"Education/Science/Factual topics"</b>.
422   ///
423   typedef enum EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE
424   {
425     /// @brief __0x0__ : Education/science/factual topics (general).
426     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_GENERAL = 0x0,
427 
428     /// @brief __0x1__ : Nature/animals/environment.
429     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_NATURE_ANIMALS_ENVIRONMENT = 0x1,
430 
431     /// @brief __0x2__ : Technology/natural sciences.
432     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_TECHNOLOGY_NATURALSCIENCES = 0x2,
433 
434     /// @brief __0x3__ : Medicine/physiology/psychology.
435     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_MEDICINE_PHYSIOLOGY_PSYCHOLOGY = 0x3,
436 
437     /// @brief __0x4__ : Foreign countries/expeditions.
438     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_FOREIGNCOUNTRIES_EXPEDITIONS = 0x4,
439 
440     /// @brief __0x5__ : Social/spiritual sciences.
441     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_SOCIAL_SPIRITUALSCIENCES = 0x5,
442 
443     /// @brief __0x6__ : Further education.
444     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_FURTHEREDUCATION = 0x6,
445 
446     /// @brief __0x7__ : Languages.
447     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_LANGUAGES = 0x7,
448 
449     /// @brief __0xF__ : User defined.
450     EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE_USERDEFINED = 0xF
451   } EPG_EVENT_CONTENTSUBMASK_EDUCATIONALSCIENCE;
452   //----------------------------------------------------------------------------
453 
454   //============================================================================
455   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
456   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_LEISUREHOBBIES event
457   /// types for sub type of <b>"Leisure hobbies"</b>.
458   ///
459   typedef enum EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES
460   {
461     /// @brief __0x0__ : Leisure hobbies (general) .
462     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_GENERAL = 0x0,
463 
464     /// @brief __0x1__ : Tourism/travel.
465     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_TOURISM_TRAVEL = 0x1,
466 
467     /// @brief __0x2__ : Handicraft.
468     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_HANDICRAFT = 0x2,
469 
470     /// @brief __0x3__ : Motoring.
471     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_MOTORING = 0x3,
472 
473     /// @brief __0x4__ : Fitness and health.
474     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_FITNESSANDHEALTH = 0x4,
475 
476     /// @brief __0x5__ : Cooking.
477     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_COOKING = 0x5,
478 
479     /// @brief __0x6__ : Advertisement/shopping.
480     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_ADVERTISEMENT_SHOPPING = 0x6,
481 
482     /// @brief __0x7__ : Gardening.
483     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_GARDENING = 0x7,
484 
485     /// @brief __0xF__ : User defined.
486     EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES_USERDEFINED = 0xF
487   } EPG_EVENT_CONTENTSUBMASK_LEISUREHOBBIES;
488   //----------------------------------------------------------------------------
489 
490   //============================================================================
491   /// @ingroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT
492   /// @brief EPG entry sub content to @ref EPG_EVENT_CONTENTMASK_SPECIAL event
493   /// types for sub type of <b>"Special characteristics"</b>.
494   ///
495   typedef enum EPG_EVENT_CONTENTSUBMASK_SPECIAL
496   {
497     /// @brief __0x0__ : Special characteristics / Original language (general).
498     EPG_EVENT_CONTENTSUBMASK_SPECIAL_GENERAL = 0x0,
499 
500     /// @brief __0x1__ : Black and white.
501     EPG_EVENT_CONTENTSUBMASK_SPECIAL_BLACKANDWHITE = 0x1,
502 
503     /// @brief __0x2__ : Unpublished.
504     EPG_EVENT_CONTENTSUBMASK_SPECIAL_UNPUBLISHED = 0x2,
505 
506     /// @brief __0x3__ : Live broadcast.
507     EPG_EVENT_CONTENTSUBMASK_SPECIAL_LIVEBROADCAST = 0x3,
508 
509     /// @brief __0x4__ : Plano-stereoscopic.
510     EPG_EVENT_CONTENTSUBMASK_SPECIAL_PLANOSTEREOSCOPIC = 0x4,
511 
512     /// @brief __0x5__ : Local or regional.
513     EPG_EVENT_CONTENTSUBMASK_SPECIAL_LOCALORREGIONAL = 0x5,
514 
515     /// @brief __0xF__ : User defined.
516     EPG_EVENT_CONTENTSUBMASK_SPECIAL_USERDEFINED = 0xF
517   } EPG_EVENT_CONTENTSUBMASK_SPECIAL;
518   //----------------------------------------------------------------------------
519 
520   ///@}
521 
522   //============================================================================
523   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
524   /// @brief Separator to use in strings containing different tokens, for example
525   /// writers, directors, actors of an event.
526   ///
527   #define EPG_STRING_TOKEN_SEPARATOR ","
528   //----------------------------------------------------------------------------
529 
530   //============================================================================
531   /// @defgroup cpp_kodi_addon_pvr_Defs_epg_EPG_TAG_FLAG enum EPG_TAG_FLAG
532   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
533   /// @brief <b>Bit field of independent flags associated with the EPG entry.</b>\n
534   /// Values used by @ref kodi::addon::PVREPGTag::SetFlags().
535   ///
536   /// Here's example about the use of this:
537   /// ~~~~~~~~~~~~~{.cpp}
538   /// kodi::addon::PVREPGTag tag;
539   /// tag.SetFlags(EPG_TAG_FLAG_IS_SERIES | EPG_TAG_FLAG_IS_NEW);
540   /// ~~~~~~~~~~~~~
541   ///
542   ///@{
543   typedef enum EPG_TAG_FLAG
544   {
545     /// @brief __0000 0000__ : Nothing special to say about this entry.
546     EPG_TAG_FLAG_UNDEFINED = 0,
547 
548     /// @brief __0000 0001__ : This EPG entry is part of a series.
549     EPG_TAG_FLAG_IS_SERIES = (1 << 0),
550 
551     /// @brief __0000 0010__ : This EPG entry will be flagged as new.
552     EPG_TAG_FLAG_IS_NEW = (1 << 1),
553 
554     /// @brief __0000 0100__ : This EPG entry will be flagged as a premiere.
555     EPG_TAG_FLAG_IS_PREMIERE = (1 << 2),
556 
557     /// @brief __0000 1000__ : This EPG entry will be flagged as a finale.
558     EPG_TAG_FLAG_IS_FINALE = (1 << 3),
559 
560     /// @brief __0001 0000__ : This EPG entry will be flagged as live.
561     EPG_TAG_FLAG_IS_LIVE = (1 << 4),
562   } EPG_TAG_FLAG;
563   ///@}
564   //----------------------------------------------------------------------------
565 
566   //============================================================================
567   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
568   /// @brief Special PVREPGTag::SetUniqueBroadcastId value
569   ///
570   /// Special @ref kodi::addon::PVREPGTag::SetUniqueBroadcastId() value to
571   /// indicate that a tag has not a valid EPG event uid.
572   ///
573   #define EPG_TAG_INVALID_UID 0
574   //----------------------------------------------------------------------------
575 
576   //============================================================================
577   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
578   /// @brief Special @ref kodi::addon::PVREPGTag::SetSeriesNumber(), @ref kodi::addon::PVREPGTag::SetEpisodeNumber()
579   /// and @ref kodi::addon::PVREPGTag::SetEpisodePartNumber() value to indicate
580   /// it is not to be used.
581   ///
582   #define EPG_TAG_INVALID_SERIES_EPISODE -1
583   //----------------------------------------------------------------------------
584 
585   //============================================================================
586   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
587   /// @brief Timeframe value for use with @ref kodi::addon::CInstancePVRClient::SetEPGTimeFrame()
588   /// function to indicate "no timeframe".
589   ///
590   #define EPG_TIMEFRAME_UNLIMITED -1
591   //----------------------------------------------------------------------------
592 
593   //============================================================================
594   /// @defgroup cpp_kodi_addon_pvr_Defs_epg_EPG_EVENT_STATE enum EPG_EVENT_STATE
595   /// @ingroup cpp_kodi_addon_pvr_Defs_epg
596   /// @brief **EPG event states.**\n
597   /// Used with @ref kodi::addon::CInstancePVRClient::EpgEventStateChange()
598   /// callback.
599   ///
600   ///@{
601   typedef enum EPG_EVENT_STATE
602   {
603     /// @brief __0__ : Event created.
604     EPG_EVENT_CREATED = 0,
605 
606     /// @brief __1__ : Event updated.
607     EPG_EVENT_UPDATED = 1,
608 
609     /// @brief __2__ : Event deleted.
610     EPG_EVENT_DELETED = 2,
611   } EPG_EVENT_STATE;
612   ///@}
613   //----------------------------------------------------------------------------
614 
615   /*!
616    * @brief "C" PVR add-on channel group member.
617    *
618    * Structure used to interface in "C" between Kodi and Addon.
619    *
620    * See @ref kodi::addon::PVREPGTag for description of values.
621    */
622   typedef struct EPG_TAG
623   {
624     unsigned int iUniqueBroadcastId;
625     unsigned int iUniqueChannelId;
626     const char* strTitle;
627     time_t startTime;
628     time_t endTime;
629     const char* strPlotOutline;
630     const char* strPlot;
631     const char* strOriginalTitle;
632     const char* strCast;
633     const char* strDirector;
634     const char* strWriter;
635     int iYear;
636     const char* strIMDBNumber;
637     const char* strIconPath;
638     int iGenreType;
639     int iGenreSubType;
640     const char* strGenreDescription;
641     const char* strFirstAired;
642     int iParentalRating;
643     int iStarRating;
644     int iSeriesNumber;
645     int iEpisodeNumber;
646     int iEpisodePartNumber;
647     const char* strEpisodeName;
648     unsigned int iFlags;
649     const char* strSeriesLink;
650   } EPG_TAG;
651 
652 #ifdef __cplusplus
653 }
654 #endif /* __cplusplus */
655 
656 #endif /* !C_API_ADDONINSTANCE_PVR_EPG_H */
657