DVBCore  22.11.0
Open Source DVB Engine
ap_si.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright © 2014 The DTVKit Open Software Foundation Ltd (www.dtvkit.org)
3  * Copyright © 2004 Ocean Blue Software Ltd
4  *
5  * This file is part of a DTVKit Software Component
6  * You are permitted to copy, modify or distribute this file subject to the terms
7  * of the DTVKit 1.0 Licence which can be found in licence.txt or at www.dtvkit.org
8  *
9  * THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
10  * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
11  * OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
12  *
13  * If you or your organisation is not a member of DTVKit then you have access
14  * to this source code outside of the terms of the licence agreement
15  * and you are expected to delete this and any associated files immediately.
16  * Further information on DTVKit, membership and terms can be found at www.dtvkit.org
17  *******************************************************************************/
24 // pre-processor mechanism so multiple inclusions don't cause compilation error
25 #ifndef _AP_SI_H
26 #define _AP_SI_H
27 
28 #include "techtype.h"
29 #include "stbsiflt.h"
30 #include "stbsitab.h"
31 
32 /* quality and strength are on a scale 0 to 10 */
33 #define GET_SIGNAL_STATUS(quality, strength) (((quality) << 8) | (strength))
34 #define BAD_SIGNAL_STATUS 0xffff
35 
36 #define GET_SIGNAL_QUALITY(status) ((status) >> 8)
37 #define GET_SIGNAL_STRENGTH(status) ((status) & 0xff)
38 
39 //---Constant and macro definitions for public use-----------------------------
40 
41 //---Enumerations for public use-----------------------------------------------
42 
43 typedef enum
44 {
45  APP_SI_MODE_NO_SI,
46  APP_SI_MODE_CHANNEL_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
47  APP_SI_MODE_CHANNEL_SEARCH_NO_NIT, // use STB_DPSetSearchMode(0, TRUE);
48  APP_SI_MODE_STARTUP_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
49  APP_SI_MODE_EVENT_PF_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
50  APP_SI_MODE_EVENT_SCHED_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
51  APP_SI_MODE_EVENT_PF_SCHED_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
52  APP_SI_MODE_DVB_SSU_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
53  APP_SI_MODE_UPDATE, // use STB_DPSetSearchMode(0, FALSE);
54  APP_SI_MODE_CIPLUS_UPDATE, // use STB_DPSetSearchMode(0, FALSE);
55  APP_SI_MODE_CIPLUS_NO_PAT_PMT, // use STB_DPSetSearchMode(0, FALSE);
56  APP_SI_MODE_TOT_SEARCH, // use STB_DPSetSearchMode(0, TRUE);
57  APP_SI_MODE_USER_DEFINED
58 } E_APP_SI_MODE;
59 
60 typedef enum
61 {
62  SEARCH_SERVICE_TYPE_ADVANCED_CODEC = 0x0001, /* Advanced codec services - H264, AC-3, AAC, etc */
63  SEARCH_SERVICE_TYPE_HD = 0x0002, /* Services defined as HD, including MPEG2 HD */
64  SEARCH_SERVICE_TYPE_HEVC = 0x0004, /* HEVC codec services */
65 
66  SEARCH_SERVICE_TYPE_FREE_TO_AIR = 0x4000,
67  SEARCH_SERVICE_TYPE_ENCRYPTED = 0x8000,
68 
69  SEARCH_SERVICE_TYPE_FTA = (SEARCH_SERVICE_TYPE_FREE_TO_AIR | 0x3fff),
70  SEARCH_SERVICE_TYPE_SCRAMBLED = (SEARCH_SERVICE_TYPE_ENCRYPTED | 0x3fff),
71  SEARCH_SERVICE_TYPE_ALL = 0xffff
72 } E_SEARCH_SERVICE_TYPE;
73 
74 /* Events passed to SI managers */
75 typedef enum
76 {
77  APP_SI_START_MANAGER = 0x0001,
78  APP_SI_STOP_MANAGER = 0x0002,
79  APP_SI_CHANNEL_CHANGE = 0x0003,
80 
81  APP_SI_PAT_RECEIVED = 0x0011,
82  APP_SI_PMT_RECEIVED = 0x0012,
83  APP_SI_SDT_RECEIVED = 0x0013,
84  APP_SI_NIT_RECEIVED = 0x0014,
85  APP_SI_EIT_RECEIVED = 0x0015,
86  APP_SI_TOT_RECEIVED = 0x0016,
87  APP_SI_TDT_RECEIVED = 0x0017,
88  APP_SI_CAT_RECEIVED = 0x0018,
89  APP_SI_RCT_RECEIVED = 0x0019,
90  APP_SI_AIT_RECEIVED = 0x001A,
91  APP_SI_BAT_RECEIVED = 0x0020,
92 
93  APP_SI_PAT_TIMEOUT = 0x0031,
94  APP_SI_PMT_TIMEOUT = 0x0032,
95  APP_SI_SDT_TIMEOUT = 0x0033,
96  APP_SI_NIT_TIMEOUT = 0x0034,
97  APP_SI_EIT_TIMEOUT = 0x0035,
98  APP_SI_TOT_TIMEOUT = 0x0036,
99  APP_SI_TDT_TIMEOUT = 0x0037,
100  APP_SI_CAT_TIMEOUT = 0x0038,
101  APP_SI_SCHED_TIMEOUT = 0x0039,
102  APP_SI_BAT_TIMEOUT = 0x0040,
103 
104  APP_SI_PMT_UPDATE = 0x0051,
105  APP_SI_UPDATE_DELAY_EXPIRED = 0x0052,
106  APP_SI_STOP_PMT_REPORTING = 0x0053,
107 
108  APP_SI_USER_DEFINED_EVENT = 0x0100
109 } E_APP_SI_EVENT_CODE;
110 
111 typedef enum
112 {
113  APP_SI_EIT_JOURNAL_TYPE_CLEAR,
114  APP_SI_EIT_JOURNAL_TYPE_ADD,
115  APP_SI_EIT_JOURNAL_TYPE_DELETE,
116  APP_SI_EIT_JOURNAL_TYPE_UPDATE,
117  APP_SI_EIT_JOURNAL_TYPE_EXPIRE
118 } E_APP_SI_EIT_JOURNAL_TYPE;
119 
120 typedef struct s_app_si_eit_journal
121 {
122  E_APP_SI_EIT_JOURNAL_TYPE type;
123  U16BIT orig_net_id;
124  U16BIT tran_id;
125  U16BIT serv_id;
126  U16BIT allocated_lcn;
127  BOOLEAN is_sched;
128  U16BIT event_id;
130 
131 
132 //---Global type defs for public use-------------------------------------------
133 typedef BOOLEAN (*F_SIManager)(U8BIT, U32BIT, SI_TABLE_RECORD *); /* Type of SI manager function */
134 typedef void (*F_EitParser)(U8BIT, U8BIT, U8BIT *, U32BIT, void *);
135 typedef void (*F_BatTableUpdate)(U8BIT, SI_BAT_TABLE *, SI_TABLE_RECORD *);
136 typedef void (*F_EitTableUpdate)(U8BIT, SI_TABLE_RECORD *);
137 typedef void (*F_NitTableUpdate)(U8BIT, SI_NIT_TABLE *, SI_TABLE_RECORD *);
138 typedef void (*F_PmtTableUpdate)(U8BIT, SI_PMT_TABLE *, SI_TABLE_RECORD *, void *);
139 typedef void (*F_SdtTableUpdate)(U8BIT, SI_SDT_TABLE *, SI_TABLE_RECORD *);
140 
141 typedef void (*F_EitSchedUpdateCB)(S_APP_SI_EIT_SCHED_UPDATE *update);
142 
143 
144 //---Global Function prototypes for public use---------------------------------
145 
154 BOOLEAN ASI_CheckForServiceChange(E_STB_DP_SIGNAL_TYPE tuner_type);
155 
160 void ASI_SetSearchServiceType(E_SEARCH_SERVICE_TYPE service_type);
161 
167 void ASI_AddServiceToPmtList(U16BIT service_id);
168 
173 void ASI_RemoveServiceFromPmtList(U16BIT service_id);
174 
178 void ASI_ClearPmtList(void);
179 
188 void ASI_ProcessPmt(U8BIT path, void *s_ptr, U8BIT *pmt_data);
189 
196 void ASI_SetEITScheduleLimit(U16BIT limit_hours);
197 
202 U16BIT ASI_GetEITScheduleLimit(void);
203 
212 void ASI_EnableBatCollection(BOOLEAN use_bats, U16BIT *bouquet_ids, U16BIT num_ids);
213 
226 void* ASI_GetNextOTALocation(void *network, void *prev_location, U16BIT *onid_ptr,
227  U16BIT *tid_ptr, U16BIT *sid_ptr);
228 
233 void ASI_RefuseSSU(BOOLEAN refuse);
234 
239 BOOLEAN ASI_SSURefused(void);
240 
245 void ASI_SSUSetMandatory(BOOLEAN mandatory);
246 
251 BOOLEAN ASI_SSUGetMandatory(void);
252 
253 
254 //---Global Function prototypes for internal use---------------------------------
258 void ASI_InitialiseAppSi(void);
259 
265 void ASI_SetAppSiMode(U8BIT path, E_APP_SI_MODE si_mode);
266 
274 U16BIT ASI_GetPmtPid(U16BIT serv_id, U16BIT ts_id, U16BIT on_id);
275 
279 void ASI_StopPmtReporting(U8BIT path);
280 
286 BOOLEAN ASI_PmtReported(U8BIT path);
287 
294 void ASI_SetStandbyState(BOOLEAN standby_state);
295 
301 void ASI_RestartCatFilter(U8BIT path);
302 
308 void ASI_RestartNitFilter(U8BIT path);
309 
315 void ASI_RestartSdtFilter(U8BIT path);
316 
322 void ASI_RestartBatFilter(U8BIT path);
323 
329 void ASI_RestartTotFilter(U8BIT path);
330 
336 void ASI_RestartTdtFilter(U8BIT path);
337 
346 void ASI_RestartSITables(U8BIT path, BOOLEAN use_standard_pids);
347 
353 void ASI_SetEITParserFunction(F_EitParser parser_func);
354 
359 void ASI_SetUpdateBatFunction(F_BatTableUpdate update_func);
360 
365 void ASI_SetUpdateEitFunction(F_EitTableUpdate update_func);
366 
371 void ASI_SetUpdateNitFunction(F_NitTableUpdate update_func);
372 
377 void ASI_SetUpdatePmtFunction(F_PmtTableUpdate update_func);
378 
383 void ASI_SetUpdateSdtFunction(F_SdtTableUpdate update_func);
384 
390 void ASI_ProcessEitTable(SI_TABLE_RECORD *table_rec, BOOLEAN playback);
391 
399 void ASI_RegisterEitSchedUpdateCallback(F_EitSchedUpdateCB sched_update_callback);
400 
408 void ASI_NotifyEitSchedUpdate(void *serv_ptr, U16BIT event_id, E_APP_SI_EIT_JOURNAL_TYPE type);
409 
414 void ASI_ProcessTotTable(SI_TABLE_RECORD *table_rec);
415 
420 void ASI_ProcessTdtTable(SI_TABLE_RECORD *table_rec);
421 
429 void ASI_SetActiveNetworkId(U16BIT network_id);
430 
445 void ASI_AllowDatabaseUpdates(E_STB_DP_SIGNAL_TYPE signal_type, BOOLEAN allow);
446 
452 BOOLEAN ASI_DatabaseUpdatesAllowed(E_STB_DP_SIGNAL_TYPE signal_type);
453 
454 #endif
BOOLEAN ASI_SSUGetMandatory(void)
Returns the flag indicating whether the SSU is mandatory and so can&#39;t be refused. ...
Definition: ap_si.c:9991
void ASI_StopPmtReporting(U8BIT path)
Prevents the current pmt being reported (e.g. to MHEG).
Definition: ap_si.c:9845
void ASI_NotifyEitSchedUpdate(void *serv_ptr, U16BIT event_id, E_APP_SI_EIT_JOURNAL_TYPE type)
Calls the EIT schedule update callback function, if one has been registered, with details of the serv...
Definition: ap_si.c:10813
void ASI_AllowDatabaseUpdates(E_STB_DP_SIGNAL_TYPE signal_type, BOOLEAN allow)
Sets whether updates should be allowed to the service database from standard SI tables that are recei...
Definition: ap_si.c:10869
BOOLEAN ASI_CheckForServiceChange(E_STB_DP_SIGNAL_TYPE tuner_type)
Checks whether the NIT or SDT version numbers have changed, which may indicate a change to the servic...
Definition: ap_si.c:10006
void ASI_SSUSetMandatory(BOOLEAN mandatory)
Sets the flag indicating whether the SSU can be refused by the user.
Definition: ap_si.c:9980
Definition: stbsitab.h:689
void ASI_InitialiseAppSi(void)
Initialises application SI handling.
Definition: ap_si.c:9610
void ASI_SetEITScheduleLimit(U16BIT limit_hours)
Sets the number of hours of EIT data that&#39;s kept for each service that hasn&#39;t its had EIT schedule di...
Definition: ap_si.c:10324
void ASI_RestartTotFilter(U8BIT path)
Forces the SI demux filter collecting the TOT tables to be reset, so a previously processed versions ...
Definition: ap_si.c:10129
void ASI_RestartTdtFilter(U8BIT path)
Forces the SI demux filter collecting the TDT tables to be reset, so a previously processed versions ...
Definition: ap_si.c:10149
Definition: ap_si.h:120
void ASI_RegisterEitSchedUpdateCallback(F_EitSchedUpdateCB sched_update_callback)
Registers a function that will be called whenever an EIT event is added, updated, deleted or expires ...
Definition: ap_si.c:10797
Definition: stbsitab.h:403
void ASI_SetUpdateSdtFunction(F_SdtTableUpdate update_func)
Sets a function that will be called when an SDT table is received.
Definition: ap_si.c:10675
void ASI_ProcessPmt(U8BIT path, void *s_ptr, U8BIT *pmt_data)
Takes data for a raw PMT for the given service and processes it as if it had been received from the d...
Definition: ap_si.c:10276
BOOLEAN ASI_DatabaseUpdatesAllowed(E_STB_DP_SIGNAL_TYPE signal_type)
Returns whether service database updates are allowed for the given signal type.
Definition: ap_si.c:10900
void ASI_AddServiceToPmtList(U16BIT service_id)
Add the given service id to the list of services whose PMT will be requested with a higher priority t...
Definition: ap_si.c:10180
void * ASI_GetNextOTALocation(void *network, void *prev_location, U16BIT *onid_ptr, U16BIT *tid_ptr, U16BIT *sid_ptr)
Returns the DVB triplet for the next location containing a possible OTA update.
Definition: ap_si.c:9905
Definition: stbsiflt.h:84
U16BIT ASI_GetPmtPid(U16BIT serv_id, U16BIT ts_id, U16BIT on_id)
Returns the PID for the pmt of a given service (on live path)
Definition: ap_si.c:9813
void ASI_ProcessTotTable(SI_TABLE_RECORD *table_rec)
Processes the TOT table record to extract data for the database.
Definition: ap_si.c:10698
void ASI_ClearPmtList(void)
Clears all service ids from the PMT priority list.
Definition: ap_si.c:10250
void ASI_RestartSdtFilter(U8BIT path)
Forces the SI demux filter collecting the SDT tables to be reset, so a previously processed versions ...
Definition: ap_si.c:10089
void ASI_SetActiveNetworkId(U16BIT network_id)
Sets the network ID to be used for all future requests to get an NIT. If this value isn&#39;t set...
Definition: ap_si.c:10846
Header file - macros and function prototypes for public use.
void ASI_SetStandbyState(BOOLEAN standby_state)
Performs the neccessary actions for this module when entering/exiting standby according to the value ...
Definition: ap_si.c:9871
void ASI_SetUpdateEitFunction(F_EitTableUpdate update_func)
Sets a function that will be called when an EIT table is received.
Definition: ap_si.c:10642
U16BIT ASI_GetEITScheduleLimit(void)
Returns the current setting for the number of hours of EIT data that&#39;s kept.
Definition: ap_si.c:10338
void ASI_RestartNitFilter(U8BIT path)
Forces the SI demux filter collecting the NIT tables to be reset, so a previously processed version o...
Definition: ap_si.c:10067
void ASI_RestartCatFilter(U8BIT path)
Forces the SI demux filter collecting the CAT tables to be reset, so a previously processed version o...
Definition: ap_si.c:10045
void ASI_RestartBatFilter(U8BIT path)
Forces the SI demux filter collecting the BAT tables to be reset, so a previously processed versions ...
Definition: ap_si.c:10109
void ASI_SetAppSiMode(U8BIT path, E_APP_SI_MODE si_mode)
Sets application SI mode - used before STB_DPStartSI() is called.
Definition: ap_si.c:9775
void ASI_RestartSITables(U8BIT path, BOOLEAN use_standard_pids)
Cancels any existing SI filters and starts a new one for the SDT, TDT, TOT, NIT, EIT (pf...
Definition: ap_si.c:10395
void ASI_RemoveServiceFromPmtList(U16BIT service_id)
Removes the service id from the PMT priority list.
Definition: ap_si.c:10215
void ASI_SetUpdateBatFunction(F_BatTableUpdate update_func)
Sets a function that will be called when a BAT table is received.
Definition: ap_si.c:10631
Definition: stbsitab.h:792
System Wide Global Technical Data Type Definitions.
void ASI_ProcessTdtTable(SI_TABLE_RECORD *table_rec)
Processes the TDT table record to extract data for the database.
Definition: ap_si.c:10762
void ASI_SetUpdatePmtFunction(F_PmtTableUpdate update_func)
Sets a function that will be called when a PMT table is received.
Definition: ap_si.c:10664
void ASI_RefuseSSU(BOOLEAN refuse)
Sets the flag indicating whether the SSU has been refused or not.
Definition: ap_si.c:9971
BOOLEAN ASI_SSURefused(void)
Returns the flag indicating whether the SSU was refused.
Definition: ap_si.c:9962
BOOLEAN ASI_PmtReported(U8BIT path)
Returns TRUE if pmt has been reported to third parties.
Definition: ap_si.c:9858
Definition: stbsitab.h:892
void ASI_SetUpdateNitFunction(F_NitTableUpdate update_func)
Sets a function that will be called when an NIT table is received.
Definition: ap_si.c:10653
void ASI_EnableBatCollection(BOOLEAN use_bats, U16BIT *bouquet_ids, U16BIT num_ids)
Enables or disables the collection of BATs as part of the SI processing and allows the bouquet IDs of...
Definition: ap_si.c:10353
void ASI_ProcessEitTable(SI_TABLE_RECORD *table_rec, BOOLEAN playback)
Processes an EIT table, partial or full, and updates the events of the service it is for...
Definition: ap_si.c:10687
void ASI_SetEITParserFunction(F_EitParser parser_func)
Sets a function that will be called when parsing an EIT table and a descriptor is found that the stan...
Definition: ap_si.c:10620
void ASI_SetSearchServiceType(E_SEARCH_SERVICE_TYPE service_type)
Set the type for services that should be added during a service search.
Definition: ap_si.c:10168
Header file - macros and function prototypes for public use.