source: svn/newcon3bcm2_21bu/dst/dmw/src/include/DMW_PsiAPI.h

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 19.8 KB
Line 
1/*
2        DMW_PsiAPI.h
3
4        DST TV MW PSI Scan Module
5
6        PSI Scan API implementation
7
8        Copyright 2006~2010 Digital STREAM Technology, Inc.
9        All Rights Reserved
10
11*/
12
13
14#ifndef __DMW_PSI_API_H__
15#define __DMW_PSI_API_H__
16
17
18#include "DHL_PSI.h"
19
20//#include "DMW_PsiTypes.h"
21#include "DMW_PsiConfig.h"
22
23#include "DLIB_PSI.h"
24#include "DLIB_PSIP.h"
25
26
27
28
29#if DMW_PSI_SUPPORT_ELAPSED_TIMER
30        #include "DMW_Timer.h"
31#endif
32
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38
39#if COMMENT
40____Overview____(){}
41#endif
42
43/*
44        ===========================================================
45          DST TV Middleware: PSI Scan Module, Operation Overview
46        ===========================================================
47       
48        ÀÌ PSI scan ¸ðµâÀº TV Viewing, TV recording ÀÛ¾÷¿¡ ÇÊ¿äÇÑ ¸ðµç Å×À̺íÀ»
49        ´Ù¿î·Îµå ÇÏ¿© »ç¿ëÀÌ ¿ëÀÌÇÑ ÇüÅ·ΠÁ¦°øÇÏ´Â ±â´ÉÀ» ´ã´çÇÑ´Ù.
50
51        ´Ù¿î·Îµå ´ë»óÀÌ µÇ´Â Å×À̺í Á¾·ù:
52                PSI
53                        PAT, PMT
54                PSIP
55                        MGT, VCT, STT, RRT, EIT, ETT
56                ±âŸ
57                        EAS (emergency alert system) section
58
59        °¢ Å×À̺íµéÀº ¼­·Î dependency °ü°è°¡ Á¸ÀçÇÑ´Ù.
60        ¿¹¸¦ µé¾î PMT¸¦ ¼ö½ÅÇϱâ À§Çؼ­´Â PAT¸¦ ¸ÕÀú ¼ö½ÅÇÑ ÈÄ¿¡ PMT pid¸¦ ¾Ë¾Æ³½ ÈÄ¿¡¾ß
61        PMT ¼ö½ÅÀÌ °¡´ÉÇÏ´Ù.
62
63                PAT -> pid of PMT -> PMT ¼ö½Å
64
65                VCT -> source_id ÃßÃâ -> EIT, ETT ¼ö½Å
66
67
68        ¾î¶² Å×À̺íµéÀº ÇϳªÀÇ ÀνºÅϽº°¡ ¾Æ´Ï¶ó ¿©·¯°³ÀÇ ÀνºÅϽº°¡ Á¸ÀçÇÑ´Ù.
69
70                PMTs: ÇÁ·Î±×·¥ °¹¼ö ¸¸Å­ Á¸ÀçÇÑ´Ù.
71
72                EITs: ½Ã°£´ë º°·Î EIT[0]~EIT[127] ÀÌ Á¸ÀçÇϸç, ¶ÇÇÑ ÇÁ·Î±×·¥ (¼­ºêä³Î)º°·Î
73                      Çϳª ÀÌ»óÀÇ EIT[N] ÀÌ Á¸ÀçÇÑ´Ù.
74
75                ETTs: ÇÁ·Î±×·¥ À̺¥Æ® Çϳª´ç Çϳª¾¿ Á¸ÀçÇÒ ¼ö ÀÖ´Ù.
76               
77
78        ¾î¶² Å×À̺íÀº ´Ù·ç±â ÆíÇÑ ÇüÅ·Πº¯ÇüµÈ ÈÄ¿¡ ¼ö½ÅµÈ´Ù.
79
80                TVCT & CVCT -> µÎ Å×À̺íÀ» ÇϳªÀÇ Å¸ÀÔÀ¸·Î ´Ù·ç±â À§ÇØ ÅëÇÕ. -> xVCT ¶Ç´Â ±×³É VCT
81
82                RRT -> Å×ÀÌºí ³»ºÎ¿¡ user optionÀ» ÀúÀå ÇÒ ¼ö ÀÖ´Â °ø°£ÀÌ È®º¸µÈ ÇüÅ·ΠȮÀåµÊ.
83
84
85        ------------------------------------
86          Ç÷οì Â÷Æ®
87        ------------------------------------
88
89                1. DMW_PSI_Init: ½Ã½ºÅÛ ÃʱâÈ­ ½Ã¿¡ Çѹø È£Ãâ.
90                        º¸ÅëÀº Application init ´Ü°è¿¡¼­ callÇÏ´Â °ÍÀ¸·Î ¿Ï·áµÈ´Ù.
91
92                2. DMW_PSI_StartUpdate
93                        ä³Î Æ©´×, ·¹ÄÚµù, autoscan ÇÒ ¶§¿¡ È£Ãâ.
94                        ä³Î Æ©´×, autoscan ÇÒ ¶§¿¡´Â channel control moduleÀÌ caller°¡ µÇ¸ç,
95                        ·¹ÄÚµùÀÇ °æ¿ì¿¡´Â record scheduler¿Í meta data collector°¡ caller°¡ µÈ´Ù.
96
97                3. DMW_PSI_CancelUpdate
98                        µ¿ÀÛ ÁßÀÎ scan ÀÛ¾÷À» ÁßÁö. ä³Î º¯È¯ Á÷Àü, Air/Cable Àüȯ ½Ã¿¡ »ç¿ëµÈ´Ù.
99
100                4. DMW_PSI_LockDB, DMW_PSI_GetChInfo, DMW_PSI_GetSubChInfo
101                        ½ÇÁ¦·Î DB¿¡ access Çϱâ À§ÇÑ API¸¦ »ç¿ë.
102
103                5. DMW_PSI_DeleteTables
104                        DB¸¦ »èÁ¦ÇÒ °æ¿ì´Â º¸Åë Air/Cable º¯È¯À» ÇÏ´Â °æ¿ì »ÓÀÌ´Ù.
105
106
107        ------------------------------------
108          Autoscan °Ë»ö ¿¹Á¦ (ÀÛ¼º Áß)
109        ------------------------------------
110
111                1. DMW_PSI_StartUpdate
112
113                2. ePSIM_EVENT_AllPmtsReceived
114                ..
115       
116        ------------------------------------
117        ±âÁ¸ old EPG MW (1.5) ´ëºñ Ư¡
118        ------------------------------------
119
120        1. µ¿ÀÛ ¹æ½Ä
121       
122                ±âÁ¸ EPG MW´Â ±âº»ÀûÀ¸·Î synchronous ¹æ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù.
123                ¹Ý¸é »õ PSI scan MW´Â 100% asynchronous ¹æ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù.
124
125                synchronous
126                        download Çϸ鼭 cancel check Çϰí, µ¿½Ã¿¡ multiple tableÀ» ¼ö½ÅÇÏ´Â
127                        º°µµÀÇ ¸ðµâ ÇÊ¿ä (ChannelDemux)
128                        Multi-tuner (TS input) Áö¿øÀÌ ºÒ°¡.
129
130                asynchronous
131                        DHL PSI API ¸¸À¸·Î ¸ðµç µ¿ÀÛ ¼öÇà.
132                        Multi-tuner Áö¿øÀÌ ÀÚ¿¬½º·´°Ô µÊ.
133
134        2. Áö¿ø ¹üÀ§
135
136                ±âÁ¸ EPG MW´Â PSIP ¸¸À» ´ë»óÀ¸·Î ÇÑ´Ù.
137                »õ PSI scan MW´Â PSIP ´Â ¹°·Ð PSI (PAT, PMT)µµ ´ë»óÀ¸·Î ÇÑ´Ù.
138
139                ±âÁ¸ EPG MW´Â ä³Î °Ë»ö (autoscan) ¿ëµµ·Î´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
140                ¿ÀÁ÷ TV viewing ½Ã¿¡¸¸ »ç¿ëµÈ´Ù.
141                »õ PSI scan MW´Â ä³Î °Ë»öÀ» À§ÇÑ ¸ðµå, TV viewingÀ» À§ÇÑ ¸ðµå,
142                TV recordingÀ» À§ÇÑ ¸ðµå µîÀÇ ´Ù¾çÇÑ ¸ðµå¸¦ Áö¿øÇÑ´Ù.
143
144                ÀÚ¼¼ÇÑ ¼³¸íÀº PSI_FLAGS_MODE ÀÇ ÁÖ¼®À» Âü°íÇÑ´Ù.
145
146        3. ³»ºÎ ±¸Á¶
147
148                ±âÁ¸ EPG MW´Â »ç½Ç»ó EpgBase core Çϳª°¡ ¸ðµç °ÍÀ» ´ã´çÇÑ´Ù.
149                ¹Ý¸é PSI scan MW´Â API, Database, Task, Engine µî ¿ªÇÒ¿¡ µû¶ó ¼¼ºÐÈ­ µÇ¾î ÀÖ´Ù.
150
151                ±âÁ¸ EPG MW´Â ÀϺΠasynchronous µ¿ÀÛÀ» À§ÇÏ¿© µÎ°³ÀÇ task°¡ »ç¿ëµÈ´Ù.
152                »õ PSI scan MW´Â ´Ü ÇϳªÀÇ task ¸¸À¸·Î ¸ðµç µ¿ÀÛÀ» Áö¿øÇÑ´Ù.
153
154        4. ¼º´É
155
156                ±âÁ¸ EPG MW´Â EIT Çϳª¿¡ ¹Ýµå½Ã hardware section filter Çϳª°¡ ÇÊ¿äÇÏ¿´´Ù.
157                ¹Ý¸é »õ PSI scan MW´Â ƯÁ¤ ¸ðµå¿¡¼­´Â ÇϳªÀÇ hardware filter·Î ¿¬°üµÈ
158                ¸ðµç EIT¸¦ ¼ö½ÅÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. (ÇÏÁö¸¸ »ç¿ë °¡´ÉÇÑ »óȲÀº Á¦ÇÑÀûÀÓ)
159
160       
161        ------------------------------------
162        ±âÁ¸ old EPG MW (1.5)¿ÍÀÇ API ȣȯ¼º
163        ------------------------------------
164       
165                ÀÌ PSI scan MW API´Â ±âÁ¸ EPG MW API¿Í ÀüÇô ȣȯµÇÁö ¾Ê´Â´Ù.
166                ´Ù¸¸ µ¿ÀÛ ¹æ½Ä µîÀº ºñ½ÁÇϸç,
167                Scan ¿Ï·á µÈ TableµéÀ» Query ÇÏ´Â ¹æ½Ä ¶ÇÇÑ ºñ½ÁÇÏ´Ù.
168
169                EPG DBÀÇ ±¸Á¶µµ Å©°Ô ´Ù¸£Áö ¾Ê´Ù.
170
171                old EPG MW             new PSI scan MW
172                ---------------        -----------------
173                DmcChannelInfo    ->   S_PSIM_CHINFO
174                DmcSubChannelInfo ->   S_PSIM_SUBCHINFO
175
176                Dmc_EpgUpdateStart     DMW_PSI_StartUpdate
177                Dmc_EpgUpdateCancel    DMW_PSI_CancelUpdate
178
179                Dmc_EpgDelete          DMW_PSI_DeleteTables
180                Dmc_EpgPrintAllTables  PSIDB_PrintAllTables  (no public API yet)
181
182                Dmc_EpgLockCoreDB      DMW_PSI_LockDB
183
184
185
186        ------------------------------------
187        *** naming rule ***
188        ------------------------------------
189                api prefix: DMW_PSI_
190                struct type: S_PSIM_STRUCTTYPE
191                enum type: E_PSIM_ENUMTYPE
192                enum constant: eENUMTYPE_ConstantName
193
194*/
195
196
197
198
199#if COMMENT
200____PSI_Flags____(){}
201#endif
202
203/*
204        DMW_PSI_StartUpdate ¿¡¼­ »ç¿ëµÇ´Â flag.
205
206        PSI_FLAGS_MODE..
207       
208                PSI_FLAGS_NORMAL
209                        °¡Àå ÀϹÝÀûÀÎ »ç¿ë ¸ðµå. TV Viewing ¿¡¼­ »ç¿ë.
210                        ¼ö½ÅÇÏ´Â Å×ÀÌºí ¹üÀ§:
211                                pat, pmt (ÁöÁ¤ÇÑ program number)
212                                mgt, vct, stt, rrt, eas
213                                ÇöÀç subchannelÀÇ ¸ðµç eits, ¸ðµç etts
214
215                PSI_FLAGS_SIMPLE
216                        ³ìÈ­ ¸ðµå¿¡¼­ »ç¿ë.
217                        ¼ö½ÅÇÏ´Â Å×ÀÌºí ¹üÀ§:
218                                pat, pmt (ÁöÁ¤ÇÑ program number)
219                                mgt, vct, stt, rrt
220                                ÇöÀç subchannelÀÇ eit[0]
221
222                PSI_FLAGS_AUTOSCAN
223                        ä³Î °Ë»ö ½Ã »ç¿ëÇÏ´Â ¸ðµå.
224                        pat, ¸ðµç pmt,
225                        mgt, vct, stt
226                        ÇöÀçÀÇ RF³»ÀÇ ¸ðµç subchannelÀÇ eit[0]
227
228                        pmt, mgt, vct, sttÀÇ °æ¿ì one shot ¸ðµå·Î ¼ö½Å. Áï Çϳª¸¸ ¹Þ°í ¹Ù·Î closeÇÑ´Ù.
229                        ÀÌ´Â pmt multi¼ö½ÅÀÇ ¼º´ÉÀ» ³ôÀ̱â À§ÇÑ trickÀÓ.
230
231                        eit[0]ÀÇ °æ¿ì coninuous ¸ðµå·Î ¸ðµç subchÀÇ eit[0]¸¦ ´Ù ¹Þ´Â´Ù.
232*/
233
234#define PSI_FLAGS_MODE_MASK 0x3
235        #define PSI_FLAGS_NORMAL 0x0
236        #define PSI_FLAGS_SIMPLE 0x1
237        #define PSI_FLAGS_AUTOSCAN 0x2
238
239#define PSI_FLAGS_MODE(flag) ((flag) & PSI_FLAGS_MODE_MASK)
240
241
242
243
244
245#if COMMENT
246____Events____(){}
247#endif
248
249
250
251//
252//  Callback ÇÔ¼öÀÇ ÀÎÀÚ·Î Àü´ÞµÉ À̺¥Æ® ŸÀÔ°ú µ¿¹ÝµÇ´Â parameter Á¤ÀÇ.
253//
254//
255typedef enum //E_PSIM_EVENT_t
256{
257        ePSIM_EVENT_Unknown,
258       
259        ePSIM_EVENT_PatReceived,
260                // PAT°¡ »õ·Ó°Ô ¼ö½Å (º¯°æ)
261                // param: MPEG_PAT *pat
262
263        ePSIM_EVENT_PmtReceived,
264                // ÇöÀç ÇÁ·Î±×·¥ÀÇ pmt°¡ ¼ö½Å (º¯°æ)
265                // param: MPEG_PMT *pmt
266
267        ePSIM_EVENT_AllPmtsReceived,
268                // ¸ðµç pmt°¡ ¼ö½Å ¿Ï·á.
269                // autoscan ¸ðµå¿¡¼­ »ç¿ëµÊ.
270                // param: none
271
272        ePSIM_EVENT_VctReceived,
273                // vct°¡ »õ·Ó°Ô ¼ö½Å (º¯°æ)
274                // param: xvctPtr_t vct
275
276        ePSIM_EVENT_BasePsipReceived,
277                // mgt, vct ¼ö½Å ¿Ï·á.
278                // param: none
279       
280
281        ePSIM_EVENT_SttReceived,
282                // »õ·Î¿î STT°¡ µµÂø, ¶Ç´Â STT °ªÀÇ Jump µî.
283                // stt°¡ ¿Ã ¶§ ¸¶´Ù notify µÇÁö´Â ¾Ê°í, scan ÈÄ ÃÖÃÊ 1ȸ,
284                //  ±×¸®°í stt jump°¡ »ý±â¸é ¾Ë·ÁÁØ´Ù.
285                //
286                // param: sttSection_t pointer (flat stt)
287       
288        ePSIM_EVENT_ProgramChanged,
289                // ÇöÀç Program Event°¡ º¯°æµÇ¾úÀ½À» ¾Ë¸².
290                //
291                // param: S_PSIM_PROGRAM_CHANGED_CB_PARAM *
292
293
294        ePSIM_EVENT_RrtUpdated,
295                // rrt°¡ update µÇ¾úÀ½À» ¾Ë¸².
296                //
297                // param: rrtSectionPtr_t rrt
298
299        ePSIM_EVENT_EitReceived,
300                // param: (S_PSIM_SCAN_STATUS_CB_PARAM *) current Epg scan status of this channel
301
302        ePSIM_EVENT_EttReceived,
303                // param: (S_PSIM_SCAN_STATUS_CB_PARAM *) current Epg scan status of this channel
304
305
306        //-------------------------------
307        //  °¢Á¾ start notifications
308
309        ePSIM_EVENT_ChannelStarted,
310                // ÇØ´ç ä³ÎÀÇ Epg °Ë»öÀÌ ½ÃÀ۵ǾúÀ½À» ¾Ë¸°´Ù.
311                //
312                // param : S_PSIM_CH_START_CB_PARAM *
313
314        ePSIM_EVENT_SubChannelStarted,
315                // ÇØ´ç subchannelÀÇ epg °Ë»öÀÌ ½ÃÀ۵ǾúÀ½À» ¾Ë¸°´Ù.
316                //
317                // param : S_PSIM_SUBCH_START_CB_PARAM *
318       
319
320
321        //-------------------------------
322        //  °¢Á¾ complete notifications
323       
324        ePSIM_EVENT_EitsCompleted,
325                // ÇØ´ç subchannelÀÇ ¸ðµç eit°¡ ¼ö½Å ¿Ï·á µÇ¾úÀ½.
326                //
327                // param : S_PSIM_COMPLETE_CB_PARAM *
328                //   id, source_id
329       
330        ePSIM_EVENT_SubChannelCompleted,
331                // ÇØ´ç subchannelÀÇ ¸ðµç tableÀÌ ¼ö½Å ¿Ï·á µÇ¾úÀ½.
332                //
333                // param : S_PSIM_COMPLETE_CB_PARAM *
334                //    id, source_id
335       
336        ePSIM_EVENT_ChannelCompleted,
337                // ÇØ´ç channelÀÇ ¸ðµç tableÀÌ ¼ö½Å ¿Ï·á µÇ¾úÀ½.
338                //
339                // param : S_PSIM_COMPLETE_CB_PARAM *
340                //    only 'id' is valid.
341
342               
343        //----------------
344        // belows are not ported yet. do not use!
345       
346
347
348        epgEventStarted = 101,
349                // param 1 : reason: EpgUpdateStartxxxx °ª Áß Çϳª
350                // param 2 : none
351
352        epgEventStopped,
353                // param : none
354
355#if 0
356
357               
358        //epgEventCancelled, <-- ÀÌ·± event´Â ´õÀÌ»ó Á¦°øÇÏÁö ¾ÊÀ½..
359                // param 1 : id
360                // param 2
361
362
363        epgEventUpdateChannelEtt, // cafrii 050203 add
364                //
365                // ¾î¶² ä³ÎÀÇ ett-v °¡ ¼ö½ÅµÇ¾úÀ½.
366                // epgEventEttReceived ¿Í´Â º°µµ·Î µû·Î ºÒ¸°´Ù.
367                // ÀÌ¹Ì ¼ö½ÅµÈ ett-v ¿¡ ´ëÇØ¼­µµ ¶Ç ´Ù½Ã ºÒ¸± ¼öµµ ÀÖ´Ù. (Áߺ¹ üũ ¾ÈÇÔ)
368                // µû¶ó¼­ application ¿¡¼­ Áߺ¹ üũ¸¦ ÇØ¾ß ÇÒ °ÍÀÌ´Ù.
369                // Application ¿¡¼­´Â ä³Î °ü·Ã Á¤º¸¸¦ UCM CSD¿¡ update ÇÒ ¼ö ÀÖ´Ù.
370                //
371                // param 1 : DmcEpgChannelEttCbParam *
372                // param 2 : none
373
374        epgEventChannelEttUpdated,  // cafrii 041129 add
375                //
376                // ¾î¶² ä³ÎÀÇ ett-v °¡ update µÇ¾úÀ¸¸ç ÀÌ Á¤º¸°¡ UCM CSD¿¡ update µÇ¾úÀ½À» ¾Ë¸°´Ù.
377                // Application ¿¡¼­´Â ÇÊ¿äÇϸé UCMÀ» NvRam ¿¡ ÀúÀåÇØ¾ß ÇÑ´Ù.
378                // ÀÌ event´Â AutoCsdUpdate flag°¡ 1ÀÎ »óÅ·Πcompile ÇØ¾ß¸¸ »ç¿ëµÈ´Ù.
379                //
380                // param 1 : none
381                // param 2 : none
382
383
384#endif
385
386} E_PSIM_EVENT;
387
388
389#ifdef __DEFINE_PSIM_STRING__
390        #define PSIM_EVENT_STRING(e) ( \
391                (e) == ePSIM_EVENT_PatReceived ? "pat" : \
392                (e) == ePSIM_EVENT_PmtReceived ? "pmt" : \
393                (e) == ePSIM_EVENT_AllPmtsReceived ? "allpmts" : \
394                (e) == ePSIM_EVENT_VctReceived ? "vct" : \
395                (e) == ePSIM_EVENT_BasePsipReceived ? "basepsip" : \
396                (e) == ePSIM_EVENT_SttReceived ? "stt" : \
397                (e) == ePSIM_EVENT_ProgramChanged ? "pgm_change" : \
398                (e) == ePSIM_EVENT_RrtUpdated ? "rrt" : \
399                (e) == ePSIM_EVENT_ChannelStarted ? "ch_start" : \
400                (e) == ePSIM_EVENT_SubChannelStarted ? "subch_start" : \
401                (e) == ePSIM_EVENT_EitsCompleted ? "eits_end" : \
402                (e) == ePSIM_EVENT_SubChannelCompleted ? "subch_end" : \
403                (e) == ePSIM_EVENT_ChannelCompleted ? "ch_end" : \
404                (e) == epgEventStarted ? "psi_start" : \
405                (e) == epgEventStopped ? "psi_stop" : \
406                "??" )
407#else
408        const char *DMW_PSI_EventString(E_PSIM_EVENT e);
409#endif // __DEFINE_PSIM_EVENT_STRING__
410
411
412
413/*
414        PSI module ³»¿¡¼­ °¢Á¾ »óÅ º¯°æ½Ã È£ÃâµÇ´Â Äݹé ÇÔ¼ö ŸÀÔ.
415
416        »ç¿ëÀÚ´Â StartUpdate api¸¦ È£ÃâÇϸ鼭 ÀÌ callback procÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
417*/
418typedef void (*F_PSIM_EVENT_PROC) (tDHL_TSD tsd, E_PSIM_EVENT evt, UINT32 param);
419
420
421
422
423
424#if COMMENT
425____Input____(){}
426#endif
427
428
429/*
430        »ç¿ëÀÚ ÀÔ·Â Á¤º¸.
431        S_PSIM_USER_PARAM ¿Í ºñ½ÁÇÏÁö¸¸, ±× ¿ëµµ°¡ ´Ù¸§.
432        ÀÌ ±¸Á¶Ã¼´Â API¿¡¼­´Â »ç¿ëµÇÁö ¾Ê°í ³»ºÎ ¿ëÀ¸·Î¸¸ »ç¿ëÇÑ´Ù.
433
434        API¿¡¼­´Â º°µµ·Î S_PSIM_USER_PARAM À̶ó´Â ±¸Á¶Ã¼°¡ »ç¿ëµÈ´Ù.
435*/
436
437typedef struct
438{
439        int rf;
440        int program_number;
441        int source_id;
442
443        UINT32 flags;
444
445        F_PSIM_EVENT_PROC userproc;
446        UINT32 userparam;
447       
448} S_PSIM_USER_INPUT;
449
450
451
452#if COMMENT
453____Status____(){}
454#endif
455
456
457/*      Epg Status Enum
458
459        ÇöÀç EpgDBÀÇ scan »óŸ¦ ³ªÅ¸³»´Â °ªµé..
460        Dmc_EpgCheckScanStatus ÇÔ¼öÀÇ °á°ú·Î »ç¿ëµÈ´Ù.
461*/
462typedef enum //E_PSIM_SCAN_STATUS_t
463{
464        ePSIM_SCAN_STATUS_NOT_FOUND = 1,       // ÁöÁ¤ÇÑ sub ä³Î Á¤º¸°¡ ¾øÀ½..
465        ePSIM_SCAN_STATUS_INCOMPLETE = 2,      // ÇöÀç ÁøÇàÁßÀÓ..
466        ePSIM_SCAN_STATUS_EIT_COMPLETE = 3,    // Eit ¸¸ ¿Ï·áµÇ¾úÀ½..
467        ePSIM_SCAN_STATUS_SUBCH_COMPLETE = 4,  // subchannleÀÌ ´Ù ¿Ï·áµÇ¾úÀ½..
468        ePSIM_SCAN_STATUS_CH_COMPLETE = 5,     // ÁöÁ¤ÇÑ sub ä³ÎÀ» Æ÷ÇÔÇÏ´Â PTC ä³ÎÀÌ ¸ðµÎ ¿Ï·áµÇ¾úÀ½..
469        //ePSIM_SCANSTATUS_SUBCH_SKIPPED = 6,
470
471} E_PSIM_SCAN_STATUS;
472
473
474#ifdef __DEFINE_PSIM_STRING__
475        #define PSIM_SCAN_STATUS_STRING(e) \
476                (e) == ePSIM_SCAN_STATUS_NOT_FOUND ? "NotFound" : \
477                (e) == ePSIM_SCAN_STATUS_INCOMPLETE ? "Incomplete" : \
478                (e) == ePSIM_SCAN_STATUS_EIT_COMPLETE ? "EitOnlyComplete" : \
479                (e) == ePSIM_SCAN_STATUS_SUBCH_COMPLETE ? "SubchannelComplete" : \
480                (e) == ePSIM_SCAN_STATUS_CH_COMPLETE ? "ChannelComplete" : \
481                "??"
482#else
483        const char *DMW_PSI_ScanStatusString(E_PSIM_SCAN_STATUS e);
484#endif
485
486
487/*
488       
489*/
490
491typedef struct
492{
493        tDHL_TSD tsd;
494       
495        S_PSIM_USER_INPUT input; // »ç¿ëÀÚ°¡ StartUpdate¸¦ È£Ãâ ÇÒ ¶§ ÁöÁ¤ÇÑ ÀÎÀÚµé.
496               
497} S_PSIM_STATUS;
498
499
500
501#if COMMENT
502____CallbackParams____(){}
503#endif
504
505
506
507/*
508        ePSIM_EVENT_ProgramChanged ÀÇ ÆÄ¶ó¹ÌÅÍ ±¸Á¶Ã¼
509*/
510typedef struct //S_PSIM_PROGRAM_CHANGED_CB_PARAM_t
511{
512        int channel_id;
513        int source_id;
514       
515        int event_id;   // new event_id
516       
517        int eit_index;  // ÀÌ event°¡ ¹ß°ßµÈ ù Eit index.. probably 0..
518       
519        UINT32  system_time; // ÇöÀç STT GPS time
520       
521        UINT32  start_time;
522        UINT32  length_in_seconds;
523
524        int     descriptor_length;
525        UINT8*  descriptors;
526                // ÁÖÀÇ!!
527                // ÀÌ unparsed descriptor´Â Eit¿¡ ÀÖ´Â descriptor¸¦ ±×´ë·Î pointingÇÑ´Ù.
528                // ÀÌ callbackÀÌ Á¾·áµÇ¸é ¾ðÁ¦ free µÉÁö ¸ð¸£¹Ç·Î
529                // ÇÊ¿äÇÑ Á¤º¸°¡ ÀÖ´Ù¸é º°µµ·Î º¹»çÇÏ¿© ÀúÀåÀ» ÇØ µÑ Çʿ䰡 ÀÖ´Ù.
530       
531} S_PSIM_PROGRAM_CHANGED_CB_PARAM;
532
533
534/*
535        ePSIM_EVENT_ChannelStarted À̺¥Æ®ÀÇ ÆÄ¶ó¹ÌÅÍ ±¸Á¶Ã¼
536*/
537typedef struct //S_PSIM_CH_START_CB_PARAM_t
538{
539        int id;    // id of this PTC.. º¸Åë rf ¹øÈ£¸¦ »ç¿ëÇÑ´Ù.
540        tDHL_TSD *tsd;  // stream source
541       
542        mgtSectionPtr_t mgt;   
543        xvctPtr_t vct;
544
545        int n_subchannel;
546       
547} S_PSIM_CH_START_CB_PARAM;
548
549/*
550        ePSIM_EVENT_SubChannelStarted À̺¥Æ®ÀÇ ÆÄ¶ó¹ÌÅÍ ±¸Á¶Ã¼
551*/
552typedef struct //S_PSIM_SUBCH_START_CB_PARAM_t
553{
554        int index;   // subchannel index.. 0 ~ n_subchannel-1
555        UINT16 source_id;
556
557        UINT32 flags; // ¾î¶² ¸ðµå·Î ½ÃÀ۵Ǿú´ÂÁö ¾Ë·ÁÁÜ.
558                // StartUpdate APIÀÇ flags ÀÎÀÚ·Î ÁöÁ¤µÈ °ªÀÌ´Ù.
559               
560        struct {
561                UINT16  short_name[7];
562                UINT16  major_channel_number;
563                UINT16  minor_channel_number;
564                UINT16  program_number;
565        } vct_info;   // ¹Ýµå½Ã subchannel infoÀÇ vct_info ¿Í µ¿ÀÏÇØ¾ß ÇÑ´Ù.
566
567} S_PSIM_SUBCH_START_CB_PARAM;
568
569/*
570        ePSIM_EVENT_XxxxxCompleted À̺¥Æ®ÀÇ ÆÄ¶ó¹ÌÅÍ ±¸Á¶Ã¼
571*/
572typedef struct //S_PSIM_COMPLETE_CB_PARAM_t
573{
574        // channel id
575        int id;
576       
577        // subchannel id
578        int    index;      // subchannel index. (0 ~ num_subchannel-1)
579        UINT16 source_id;
580
581        // ChannelCompleted ÀÎ °æ¿ì¿¡ subchannel id Á¤º¸´Â ¹«ÀǹÌÇÏ´Ù.
582       
583} S_PSIM_COMPLETE_CB_PARAM;
584
585
586
587
588typedef struct //S_PSIM_SCAN_STATUS_CB_PARAM_t
589{
590        int id;
591        int source_id;
592
593        E_PSIM_SCAN_STATUS cStatus;     // EPG_STATUS_XXX °ª ÁßÀÇ Çϳª..
594
595        int nElapsedSec;  // ÀÌ subchannelÀ» scanÇϴµ¥ »ç¿ëµÈ ÃÑ ´©Àû °Ë»ö ½Ã°£.
596                           // compile option¿¡ µû¶ó¼­ Áö¿øµÇÁö ¾ÊÀ» ¼öµµ ÀÖÀ½.
597       
598        int nEitReceived;
599        int nEitTotal;    // ¹Þ¾Æ¾ß ÇÒ Àüü Eit table
600       
601        int nEttReceived;
602        int nEttTotal;    // ¹Þ¾Æ¾ß ÇÒ Àüü Ett table (ÇöÀç±îÁö ¹àÇôÁø °Í±îÁö¸¸.. Eit¸¦ ¹ÞÀ¸¸é¼­ °è¼Ó ´Ã¾î³¯°ÍÀÓ)
603       
604} S_PSIM_SCAN_STATUS_CB_PARAM;
605
606
607
608
609#if COMMENT
610____Structures____(){}
611#endif
612
613/*
614        mgt ÀÇ ¿ä¾à Á¤º¸.
615        ¸ðµç pidÀÇ ÃʱⰪÀº 0 À̰í, ¸ðµç versionÀÇ ÃʱⰪÀº 0xff ÀÌ´Ù.
616        mgt¿¡ ±â¼úµÇÁö ¾ÊÀº Å×À̺í Á¤º¸´Â ¸ðµÎ ÃʱⰪÀ» °¡Áö°í ÀÖ°Ô µÈ´Ù.
617*/
618typedef struct //S_PSIM_MGT_DIGEST_t
619{
620        UINT16 eit_pids[128]; // if this eit not exist, it will be 0.
621        UINT8  eit_ver[128];  // if this eit not exist, it will be 0xFF
622       
623        UINT16 ett_pids[128];  // event_ett
624        UINT8  ett_ver[128];
625       
626        UINT16 channel_ett_pid;
627        UINT8  channel_ett_ver;
628       
629        BOOLEAN tvct_exist_in_mgt, cvct_exist_in_mgt;
630       
631        UINT8  tvct_ver;
632        UINT8  cvct_ver;
633
634} S_PSIM_MGT_DIGEST;
635       
636
637struct S_PSIM_CHINFO_t; // forward declaration
638
639//-----------------------------------------------------------------------
640//  S_PSIM_SUBCHINFO
641//
642//    Sub channel ÀÇ ¸ðµç PSIP Á¤º¸¸¦ ÀúÀåÇÏ´Â ±¸Á¶Ã¼
643//
644typedef struct //S_PSIM_SUBCHINFO_t
645{
646        struct S_PSIM_CHINFO_t *parent;  // back pointer to parent chInfo
647        int index;   // subchannel index.. 0 ~ chInfo->n_subchannel-1
648        BOOL active; // TRUE if this structure field data is valid
649
650        UINT16 source_id;  // ÀÌ ¿ª½Ã vct¿¡ ³ª¿Í ÀÖÁö¸¸ ¿©±â¿¡ copy¸¦ µÐ´Ù.
651       
652        // ´õ ½±°Ô Á¢±ÙÇϱâ ÁÁ°Ô À̰÷¿¡ vctInfo »çº»À» µÐ´Ù.
653        struct {
654                UINT16  short_name[7];
655                UINT16  major_channel_number;
656                UINT16  minor_channel_number;
657                UINT16  program_number;
658               
659                BOOL    analog;
660                ETM_location_k etm_location;
661        } vct_info;
662
663        eitPtr_t eits[128];
664       
665        BOOL eit_complete; // ¸ðµç eit°¡ ´Ù ¼ö½ÅµÇ¸é TRUE
666       
667        int n_ett[128];               // ettÀÇ °¹¼ö°¡ ¾Æ´Ï¶ó ¾Æ·¡ etts[k]ÀÇ element °¹¼ö (arrayÅ©±â)
668        ettSectionPtr_t *etts[128];   // ÇØ´ç eit-k¿¡ ¿¬°áµÇ¾î ÀÖ´Â ettµéÀÇ array pointerµé.
669
670        BOOL ett_complete; // ¸ðµç ett°¡ ´Ù ¼ö½ÅµÇ¸é TRUE
671
672        // todo..
673        // ÇØ´ç ett°¡ Á¸ÀçÇÏ´ÂÁö ¾ÈÇÏ´ÂÁö¸¦ »¡¸® ¾Ë¾Æº¼¼ö ÀÖ´Â ¹æ¹ýÀ» ã¾Æº¸ÀÚ.
674        // ÇöÀç ±¸Á¶·Î´Â chInfo->ett_pid°¡ ÀÖ´ÂÁö È®ÀÎÇØº¸°í,
675        // subchInfo->eits[]¿¡¼­ °¢ eventº°·Î ETM_locationÀ» È®ÀÎÇØºÁ¾ß ÇÑ´Ù.
676       
677        ettSectionPtr_t channel_ett;
678        //BOOL channel_ett_exist;  // channel ett°¡ ¼ö½ÅµÇ¾îÁ®¾ß ÇÏ´Â °æ¿ì¿¡´Â TRUE
679                // ÀÌ Á¤º¸´Â ÇÊ¿äÇÒ ¶§ ¸¶´Ù Á÷Á¢ vct Á¤º¸¸¦ ã¾Æº¸´Â °ÍÀ¸·Î ÇÏ¿´À½.
680                // µû¶ó¼­ º°µµ·Î Ç÷¡±× ÀúÀåÀº ºÒÇÊ¿äÇÔ.
681
682        // °¢ complete event message°¡ ºÒ·È´ÂÁö ¾Æ´ÑÁö¸¦ ÀúÀåÇÏ´Â flag.
683        // caller°¡ óÀ½ API¸¦ ºÎ¸£¸é ¸®¼ÂµÇ¾ú´Ù°¡ notifyµÇ¸é °¢°¢ setµÈ´Ù.
684        // µ¿ÀÏ event procÀÌ ¿©·¯¹ø ºÒ¸®´Â °ÍÀ» ¸·±â À§Çؼ­ÀÓ.
685        //
686        BOOL eit_complete_notified;
687        BOOL subchannel_complete_notified;
688       
689        BOOL subchannel_start_notified;
690
691#if DMW_PSI_SUPPORT_ELAPSED_TIMER
692        // cafrii 060814 add
693        DMW_Counter counter;
694       
695#endif
696
697} S_PSIM_SUBCHINFO;
698
699
700//
701// to access EIT:
702//     subchInfo->eits[eit_index]
703// to access ETT:
704//     if (subchInfo->etts[eit_index])
705//       subchInfo->etts[eit_index][event_index_in_eit]
706
707
708#define CHANNEL_INFO_MAGIC 0x20040419
709
710//-----------------------------------------------------------------------
711//  S_PSIM_CHINFO
712//
713//    Physical Channel ÀÇ ¸ðµç PSIP Á¤º¸¸¦ ÀúÀåÇÏ´Â ±¸Á¶Ã¼
714//    ³»ºÎ¿¡ Subchannel °¹¼ö ¸¸Å­ÀÇ SubchInfo ¸¦ Æ÷ÇÔÇÑ´Ù.
715//
716typedef struct S_PSIM_CHINFO_t
717{
718        UINT32 magic;  // CHANNEL_INFO_MAGIC °ªÀ» °¡Á®¾ß ÇÔ.
719       
720        struct S_PSIM_CHINFO_t *prev, *next;
721       
722        int id;        // id of this PTC.. º¸Åë rf ¹øÈ£¸¦ »ç¿ëÇÑ´Ù.
723        tDHL_TSD tsd;  // stream source
724       
725        //-----------------
726        // table pointers
727
728        // PAT
729        MPEG_PAT *pat;
730
731        // PMT array. array size is pat->numPrograms.
732        MPEG_PMT **pmts;
733
734        // MGT
735        // °¡Àå ¸¶Áö¸·À¸·Î ¼ö½ÅµÇ¾î ÇöÀç À¯È¿ÇÑ mgt¿Í
736        // ±× ¹Ù·Î Á÷ÀüÀÇ À¯È¿Çß´ø mgt (mgt_old) µÎ°³¸¦ ÀúÀåÇÑ´Ù.
737        mgtSectionPtr_t mgt, mgt_old;
738       
739        // VCT
740        xvctPtr_t vct;
741
742        // STT
743        BOOL stt_valid;         // cafrii 050721 add, flat_stt °ªÀÌ ÇѹøÀÌ¶óµµ set µÇ¸é TRUE
744        sttSection_t flat_stt;  // cafrii 050330 change to flat_stt
745                                // sttÀÇ descriptor´Â ÇöÀç·Î¼­´Â »ç¿ëÇÒ ÀÏÀÌ ¾ø´Ù.
746                                // µû¶ó¼­ descriptor°¡ NULLÀÎ flat stt¸¦ ±â¾ïÇϵµ·Ï ÇÑ´Ù.
747        UINT32 tick_stt_get; // ÀÌ stt¸¦ ¼ö½ÅÇÏ¿´À» ¶§ÀÇ System Time Tick
748       
749        //-----------------
750        // from mgt, various pids info.. ¹Ì¸® ÃßÃâÇØ ³õ´Â°Ô ÆíÇÏ´Ù.
751        // version ÀÇ ÃʱⰪÀº -1 (all bit 1) À¸·Î Á¤ÀÇÇϵµ·Ï ÇÑ´Ù.
752
753        S_PSIM_MGT_DIGEST smgt; // summarized mgt (mgt digest)
754
755        //-----------------
756       
757        // ÁÖÀÇ!! PID Á¤º¸°¡ mgt¿¡ ÀÖ´Ù°í ÇØ¼­ ±× tableÀÌ Á¸ÀçÇÏ´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾Ê´Â´Ù.
758
759        // subchannelÀÇ °¹¼ö´Â vct¿¡ ³ª¿Í Àִµ¥, ¾î´À vct°¡ »ç¿ëµÉÁö ¾Ë ¼ö ¾øÀ¸¹Ç·Î
760        //
761
762        // Rule: n_subchannel ÀÌ >0 À̸é subchannel ptrÀº ¹Ýµå½Ã non-NULLÀ̾î¾ß ÇÑ´Ù.
763        int n_subchannel;
764        S_PSIM_SUBCHINFO *subchannel;
765
766        // cafrii 040726 add
767        BOOL channel_complete_notified;
768
769#if DMW_PSI_SUPPORT_ELAPSED_TIMER
770        // cafrii 060814 add
771        DMW_Counter counter;
772
773#endif
774       
775} S_PSIM_CHINFO;
776
777
778
779
780#if COMMENT
781____APIs____(){}
782#endif
783
784/*
785        For detail description, refer comments of function definition.
786*/
787
788
789/*
790        Initializations
791*/
792STATUS DMW_PSI_Init(void);
793
794
795/*
796        Start & Stop control
797*/
798
799STATUS DMW_PSI_StartUpdate(tDHL_TSD tsd, int rf, int program_number, int source_id, 
800                                                        UINT32 flags, F_PSIM_EVENT_PROC userproc, UINT32 userparam);
801
802void DMW_PSI_CancelUpdate(tDHL_TSD tsd);
803
804
805
806/*
807        PSI Database control & query
808*/
809void DMW_PSI_DeleteTables(int rf);
810
811void DMW_PSI_LockDB(BOOL bLock);
812
813S_PSIM_CHINFO *DMW_PSI_GetChInfo(int rf);
814S_PSIM_SUBCHINFO *DMW_PSI_GetSubChInfo(int rf, int source_id);
815
816
817#ifdef __cplusplus
818} /* extern "C" */
819#endif
820
821
822#endif // __DMW_PSI_API_H__
823
824
825
826
Note: See TracBrowser for help on using the repository browser.