close Warning: Can't use blame annotator:
No changeset 2 in the repository

source: svn/newcon3bcm2_21bu/dst/dmw/src/Channel/DMW_ChannelAPI.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: 44.5 KB
RevLine 
1/*******************************************************************
2 * DMW_ChannelAPI.h
3 *
4 *   Channel Middleware main header file
5 *
6 * Copyright 2004 Digital STREAM Technology, Inc.
7 * All Rights Reserved
8 *
9 * $Id: DMW_ChannelAPI.h, v?? 2004 cafrii Exp $
10 *
11 ********************************************************************/
12
13#ifndef __DMW_ChannelAPI_H__
14#define __DMW_ChannelAPI_H__
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20
21#include "DMW_Channel.h"
22#include "DMW_Status.h"  // °¢Á¾ status »ó¼ö °ª.
23
24
25
26
27
28
29
30//***************************************************************
31//
32//  Channel Specific Data DB
33//
34//  041126 add
35
36// °¢ CSD entry¸¦ ±¸ºÐÇÏ´Â tag
37enum {
38        CSD_TAG_END = 0x00,
39                // csd listÀÇ ¸Ç ¸¶Áö¸·À» ÀǹÌÇÏ´Â terminator.
40                // csd¸¦ list ÇüÅ·Π»ç¿ëÇÒ °æ¿ì ¸Ç ¸¶Áö¸· end¸¦ ÀǹÌÇϵµ·Ï »ç¿ë ÇÒ ¼ö ÀÖ´Ù.
41               
42        CSD_TAG_SHORT_NAME = 0x10,
43                // Channel Short Name, from VCT
44                //    format: 16-bit Unicode, Null (0x0000) terminated
45                //    ptr: Unicode string of short name, should be null-terminated.
46       
47        CSD_TAG_EXTENDED_NAME = 0x11,
48                // Channel Extended Name, (A.K.A. long channel name) from VCT descriptor
49                //    format: MSS
50                //    ptr: byte string of extended name
51       
52        CSD_TAG_EXTENDED_TEXT = 0x12,
53                // Channel description, from Channel-Ett
54                //    format: MSS
55                //    ptr: byte string of extended text
56               
57        CSD_TAG_SI_SOURCE_NAME = 0x13,
58                // Source name, from NTT-SNS (source name subtable)
59                //    format: MTS
60                //    ptr: byte string of source name
61       
62       
63        // cafrii 041221 add
64        CSD_TAG_XDS_CALL_LETTER = 0x14,
65                // XDS call letter (Station ID)
66                //    format: ASCII (4 or 6 character)
67                //    ptr: byte string of call letter
68       
69        CSD_TAG_XDS_NETWORK_NAME = 0x15,
70                // XDS Network Name
71                //    format: ASCII (max 32 bytes) with null termination (total max 33 bytes)
72                //    ptr: byte string of network name
73
74        CSD_TAG_EXTENDED_NAME_UC = 0x16,
75                // Channel Extended Name from VCT descriptor
76                // MSS Àüü¸¦ ´Ù ÁöÁ¤ÇÏ´Â ´ë½Å english ¸¸À» µû·Î ÃßÃâÇÏ¿© ÀúÀåÇϰíÀÚ ÇÒ °æ¿ì »ç¿ëÇÑ´Ù.
77                //    format: Unicode-16, null-terminated
78                //    ptr: UC16 string pointer of extended name
79       
80        CSD_TAG_USER_CHANNEL_NAME = 0x80,
81                // User Channel Name, from user input via GUI
82                //    format: Ascii
83                //    ptr: byte string of user channel name
84       
85};
86
87
88typedef struct ChannelSpecificData_t
89{
90        UINT8 tag;
91                // meaning what kinds of data it is..    CSD_TAG_XXX
92                // 'ptr'ÀÌ ¾î¶² ³»¿ëÀÇ µ¥ÀÌÅÍÀÎÁö¸¦ ³ªÅ¸³½´Ù.
93
94        UINT16 byte_len;
95                // byte length of data pointed by 'ptr'
96                // 'ptr' bufferÀÇ Å©±âÀÌ´Ù. null terminate µÈ °æ¿ì´Â null byteµµ Æ÷ÇÔÇÑ´Ù.
97       
98        UINT8 *ptr;
99                // pointer of CSD data..
100                // OS_Malloc ¿¡ ÀÇÇØ¼­ ÇÒ´çµÈ ¸Þ¸ð¸®.
101                //
102       
103} ChannelSpecificData;
104
105
106
107
108
109
110// cafrii 060630 add
111
112#define DMW_PID_NOT_EXIST 0  // elementary stream not exist..
113#define DMW_PID_NO_INFO 1    // we do not have information.
114
115/*
116        special pid:
117                ´ÙÀ½°ú °°Àº °æ¿ì, Ưº°ÇÑ Àǹ̸¦ ºÎ¿©ÇϰíÀÚ ÇÒ ¶§ »ç¿ë.
118
119                - DBÀÇ pid field¿¡ ÀúÀåÇÒ ¶§
120               
121        * ÇØ´ç streamÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â DMW_PID_NOT_EXIST¸¦ ÁöÁ¤ÇÑ´Ù.
122
123        * PID Á¤º¸°¡ À¯È¿ÇÏÁö ¾ÊÀº °æ¿ì´Â DMW_PID_NO_INFO¸¦ ÁöÁ¤ÇÑ´Ù.
124       
125                - DB¿¡ ÀúÀåµÈ ³»¿ëÀÌ Àǹ̰¡ ¾ø¾îÁø °æ¿ì (audio language¸¦ º¯°æÇÑ´Ù´ø°¡ µî)
126                - NvRam loadÇÑ ÈÄ..
127                - ½Ã°£ÀÌ ¸¹ÀÌ °æ°úÇØ¼­ ÀúÀåÇÑ pid Á¤º¸¸¦ ¹ÏÀ» ¼ö ¾ø´Â °æ¿ì µî..
128
129        * Çϳª¶óµµ DMW_PID_NO_INFO pid°¡ ÁöÁ¤µÇ¸é
130          Rf TuneÀ» ÇÒ ¶§ pid¸¦ ÀÌ¿ëÇÑ fast tuningÀº ºÒ°¡´ÉÇÏ´Ù.
131
132*/
133
134
135
136
137
138
139/*******************************************************************************
140        Channel Map Definition
141
142        Terminology Definition
143
144        -MCM(Master Channel Map)
145        -UCM(User Channel Map)
146
147        DB Generation
148                Temp. MCM -> UCM
149
150*******************************************************************************/
151
152
153/*******************************************************************************
154        UCM_DB_T
155
156        ±âº»ÀûÀΠä³Î Á¤º¸ÀÌ´Ù.
157        ¸ðµç ä³Î °ü·Ã APIµéÀÇ ±âº»ÀÌ µÈ´Ù.
158
159        Auto ScanÇÒ °æ¿ì
160                temp M.C.M¿¡ ÀÇÇØ Áߺ¹¼º Á¦°ÅµÇ°í, Major/Minor sortingÇØ¼­ »ý¼ºµÈ´Ù.
161
162        Channel Add¸¦ ÇÒ °æ¿ì
163                minor channel Ãß°¡: append --> insert·Î º¯°æ.
164                major channel Ãß°¡: append --> insert·Î º¯°æ. Ç×»ó sort »óŸ¦ À¯Áö.
165                RF channel Ãß°¡: update
166
167        Âü°í: DCMÀ̶ó°í À̸§À» º¯°æÇÏ´Â °ÇÀº ÇöÀç ¾ÆÁ÷ Àû¿ëÀÌ ¾ÈµÇ¾î ÀÖÀ½.
168
169*******************************************************************************/
170
171// Some restriction:
172//   ordered by Major/Minor/Rf/Vf
173//   only 1 channel info should be "active" among same Mj/Mn/Rf/Vf group
174//
175/*
176        ShortName°ú LongNameÀº ¸ðµÎ 16-bit unicode stringÀÌ´Ù.
177        ÀÌ µÎ stringÀº (°¡´ÉÇϸé) null Á¾·á µÇ¾î¾ß ÇÑ´Ù.
178        ÃÖ´ë ±æÀ̰¡ 7ÀÚ, 30ÀÚ µîÀ¸·Î Á¦ÇÑÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î, string ±æÀ̰¡ ÃÖ´ë ±æÀÌÀÎ °æ¿ì
179        null Á¾·á°¡ ¾ÈµÉ ¼ö ÀÖÀ½¿¡µµ À¯ÀÇÇØ¾ß ÇÑ´Ù.
180
181        --> ´ÙÀ½ MW design ½Ã¿¡´Â null Á¾·á ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ¿© array¸¦ ÇÒ´çÇϰí
182                stringÀº ¹Ýµå½Ã null Á¾·áÇϵµ·Ï ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÔ.
183*/
184typedef struct UserChMap_DB
185{
186        UINT16  Major;    // Major channel number
187        UINT16  Minor;    // Minor channel number
188        UINT8   RF;       // RF channel number
189        UINT8   VctFlag;  // True if this info come from VCT.
190
191        UINT16  Prog_number;  // prog_number
192        UINT8   Service_type; // 0: NTSC, 1: ATSC-VSB, 2: ATSC-64QAM, 3: ATSC-256QAM
193
194        UINT8   Skipped; //     0: retained (active), 1: skipped
195        UINT16  SurfIndex; // surf channel index in Surf Channel Map
196                                        //      0: not included in Surf list
197                                        //      >=1: included in Surf list and Surf channel index
198
199        UINT16  ShortName[7];  // channel short_name (from VCT)
200
201        INT32   freqOffset;    // signed value, unit: Hz
202        UINT16  source_id;     // source_id
203
204        UINT16   Uid;     // UCM element UID. (uniquely distinguishable ID).
205        void    *pEpgDB;  // pointer to EPG DB
206
207        // temporary values. ÀÌÇÏ °ªµéÀº NvRam¿¡ ÀúÀåµÇÁö ¾ÊÀ¸¹Ç·Î Èֹ߼ºÀÌ´Ù.
208        //
209        UINT16  Pcr_pid;    // pcr pid
210        UINT16  Video_pid;  // video pid
211        UINT16  Audio_pid;  // preference audio pid
212        tDHL_VideoCodingType Video_type;
213        tDHL_AudioCodingType Audio_type;
214       
215        //neverdai add 101018
216        tDHL_DispFormat video_format;
217
218        UINT16 pmt_pid; // cafrii 070201 add. if 0, this pid info is invalid.
219       
220        UINT8   signal_strength;  // strength of signal whose tsid is 'TSID'
221        UINT16  TSID;             // TSID of the channel which contains this PSIP info.
222        UINT16  channel_tsid;     // channel TSID of this descriptive target channel
223        BOOL    hidden;           // this channel is hidden in VCT.
224
225        // cafrii 031205 add
226        BOOL    blocked;          // if TRUE, this channel is blocked. (application use)
227       
228        // cafrii 041129 add
229        BOOL    scrambled;        // if TRUE, one of streams is scrambled
230
231        // cafrii 060724 add
232        BOOL    fresh;
233                // ±âÁ¸¿¡ Á¸ÀçÇß´ø ä³ÎÀÎÁö, »õ·Ó°Ô Ãß°¡µÈ ä³ÎÀÎÁö
234                // ¾Ë°í ÀÖÀ¸¸é µµ¿òÀÌ µÇ´Â °æ¿ì°¡ À־
235                // À̸¦ ±¸ºÐÇϱâ À§ÇØ Ãß°¡ÇÔ.
236                // NvRam¿¡´Â ÀúÀåµÇÁö ¾Ê´Â temporary value
237
238        // cafrii 101208 add
239        BOOL    disabled;
240                // ÀÌ flag°¡ trueÀ̸é ÀÌ Ã¤³ÎÀº ¾ÈÀüÇÑ ½ÃÁ¡¿¡ ä³ÎÀÌ »èÁ¦µÇ¾î¾ß ÇÔÀ» ÀǹÌ.
241                // ¹Ù·Î »èÁ¦ÇÏÁö ¾Ê´Â ÀÌÀ¯´Â ÀÌ Ã¤³ÎÀÌ ÇöÀç ½Ãû ä³ÎÀÏ ¼öµµ Àֱ⠶§¹®.
242
243        //-------------------------
244        // Channel specific data structure
245        //
246        // cafrii 041125 add for extended channel from VCT.. it is temporary data for MCM only
247        //extendedChannelNameDescriptorPtr_t xcnd;
248       
249        int num_csd;    // number of csd data
250        int max_csd;  // array size of 'csd'
251
252        ChannelSpecificData *csd;
253        //-------------------------
254
255        UINT16 LongName[30];  // extended channel name (from VCT)
256                // max 30 wide characters (UC16)
257                // null terminated or length limited (by 30)
258
259} UCM_DB_T;   // User Channel Map DB
260
261//   NvRam¿¡´Â ÀÌ ¸ðµç Á¤º¸°¡ ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï´Ù.
262//
263
264
265//------------------------------------------
266// cafrii 031205, add UCM CORE functions..
267//
268typedef struct UCM_CORE_ENTRY_t {
269       
270        // IDs to distinguish each channels..
271        UINT16 major;
272        UINT16 minor;
273        UINT8 rf;
274       
275        // channel parameters to be persistent between Autoscan..
276        BOOLEAN skip;
277        BOOLEAN block;
278        UINT16 surf;
279       
280} UCM_CORE_ENTRY;
281
282typedef struct {
283       
284        int num;                // number of ucm core entries
285        UCM_CORE_ENTRY *entry;
286       
287} UCM_CORE;
288
289UCM_CORE *DMW_CDB_BackupUcmCore(void);
290        // Make ucm core from UCM DB.
291        // if NULL returned, memory resource is not sufficient to allocate memory..
292        // Caller should call FreeUcmCore after use.
293               
294STATUS DMW_CDB_UpdateUcmCore(UCM_CORE *core);
295        // update UCM core so that channel parameters can be unchanged..
296
297void   DMW_CDB_FreeUcmCore(UCM_CORE *core);
298        // free ucm core
299//------------------------------------------
300       
301
302extern char *ShortNameString(UINT16 *src, char *dst);
303        // unicode¹®ÀÚ¸¦ ascii char·Î.. (¿µ¹®¸¸..)
304
305extern const int g_sizeUcmExtension;
306        // user°¡ ¿øÇÏ´Â ¸¸Å­ UCMÀº È®ÀåµÉ ¼ö ÀÖ´Ù.
307        // ChannelLibÀ» ÃʱâÈ­ ÇÒ ¶§ ÁöÁ¤°¡´ÉÇÏ´Ù.
308        //
309#define UcmItemMemorySize() (sizeof(UCM_DB_T) + g_sizeUcmExtension)
310        // ½ÇÁ¦·Î UCM Çϳª°¡ ¸Þ¸ð¸®¿¡¼­ Â÷ÁöÇϰí ÀÖ´Â ¹ÙÀÌÆ® Å©±â.
311
312#define UcmExt(p) ((p)+sizeof(UCM_DB_T))
313        //
314        // UCM Extension ºÎºÐÀ» Á¢±ÙÇϱâ À§ÇÑ ¸ÅÅ©·Î.
315        // ÀÌ Æ÷ÀÎÅ͸¦ ´Ù½Ã applicationº°·Î ÁغñµÈ (UCM_EXT *)·Î ij½ºÆÃ ÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù.
316        // ¿¹)
317        // typedef struct UCM_EX_t {
318        //     UINT32 var1;
319        //     UINT8 var2[3];
320        // } UCM_EX;
321        //
322        // #define XUCM(p) ((UCM_EX *)UcmExt(p))  // to reach ucm extension use this.
323        //
324        // DMW_CDB_InitializeChannelLib(ChannelType_Air, sizeof(UCM_EX));
325        //
326        // XUCM(&g_UCM[i])->var1 = 10;
327        //
328
329
330//
331//***************************************************************
332//
333//  4.4 API
334//
335
336//***************************************************************
337//
338//  4.4.1-1  Tuning °ü·Ã ±âº»»çÇ×.
339//
340//
341//
342
343
344STATUS  DMW_CDB_InitializeChannelLib(ChannelType type, int sizeExtionsion);
345        //
346        // ä³Î ŸÀÔÀ» ¹Ù²Û´Ù.
347        //  - ÇöÀç ucmÀÌ »õ ä³Î ŸÀÔ°ú ¸ÂÁö ¾ÊÀ» °æ¿ì ucmÀ» Æó±âÇÑ´Ù.
348        //  - ucm sema4°¡ ¾øÀ¸¸é »õ·Î ¸¸µç´Ù.
349        //    ucmÀ» NvRam¿¡¼­ ÀÚµ¿À¸·Î loadÇÏÁö´Â ¾Ê´Â´Ù. ±×°ÍÀº applicationÀÇ ¸òÀÌ´Ù.
350
351STATUS  DMW_CDB_TerminateChannelLib(void);
352        // ä³Î ¶óÀ̺귯¸®¸¦ ´Ý´Â´Ù.
353        // °¢Á¾ ŽºÅ©, ¼¼¸¶Æ÷¾î¸¦ ÇØÁ¦ÇÑ´Ù.
354        //
355       
356
357
358
359//------------------------------
360// UCM DB pointer
361
362extern UCM_DB_T *g_UCM;          // DB pointer
363extern INT32    g_UCM_number;   // number of DB element stored in RAM, not NvRam!!!
364extern INT32    g_UCM_max;      // max number of DB (unit: element)
365        //
366        // UCM DB´Â 1Â÷¿ø ¹è¿­ ±¸Á¶¸¦ °®´Â´Ù.
367        // UCM DB¸¦ À§ÇÑ ¸Þ¸ð¸®ÀÇ ÇÒ´ç/ÀçÇÒ´çÀº M/W¿¡¼­ ´ã´çÇÑ´Ù.
368        //
369        // Application¿¡¼­´Â DB ³»¿ë ¼öÁ¤À» ÇÏ¸é ¾ÈµÈ´Ù. ¿ÀÁ÷ API¸¦ ÀÌ¿ëÇÏ¿©¾ß ÇÑ´Ù.
370        //   application¿¡¼­ ¿øÇÑ´Ù¸é DB¸¦ Á÷Á¢ Àо ÂüÁ¶Çϴ°ÍÀº °¡´ÉÇÏÁö¸¸,
371        //   ±×·²°æ¿ì sema4·Î º¸È£µÈ »óÅ¿¡¼­ Àоî¾ß ÇÑ´Ù. Lock/Unlock()ÇÔ¼ö ÀÌ¿ë.
372        //
373        // Application¿¡¼­´Â Read-Only·Î °£ÁÖÇÑ´Ù. M/W¿¡ ÀÇÇØ¼­¸¸ ¼öÁ¤µÈ´Ù.
374        //
375        // UCM DB´Â ¿øÄ¢ÀûÀ¸·Î AutoScan¿¡ ÀÇÇØ MCMÀ¸·ÎºÎÅÍ »ý¼ºµÇ¹Ç·Î ±× ¼ø°£ Å©±â°¡ °áÁ¤µÇÁö¸¸,
376        //   Update °ü·Ã API¿¡ ÀÇÇØ Ãß°¡ È®ÀåµÉ ¼ö ÀÖ´Ù. DWM_TUN_xxx()..
377        //
378        // Âü°í:
379        //  Application¿¡¼­ DBÀÇ ³»¿ëÀ» Á÷Á¢ ¼öÁ¤ÇÏ´Â ¹æ¹ýÀº ¾ÆÁ÷ ¾øÀ¸³ª,
380        //  ÇâÈÄ 'Skipped' flag¿Í °°ÀÌ application Á¤Ã¥¿¡ ¸¹ÀÌ ÀÇÁ¸ÀûÀÎ ÀϺΠÇʵ带 ¼öÁ¤ÇÏ´Â ÇÔ¼ö°¡
381        //  Á¦°øµÇ±â Àü±îÁö ¼öÁ¤À» ÀӽùæÆíÀ¸·Î Çã¿ëÇϰí ÀÖ´Ù. ÀÌ °æ¿ì ¹Ýµå½Ã LockÀ¸·Î º¸È£Çϱ⠹ٶ÷.
382        //
383
384extern BOOL g_bReserveUcmIndex0;
385        // ÀÌ °ªÀº index 0À» Ưº°ÇÑ ¿ëµµ·Î »ç¿ëÇÏ±æ ¿øÇÏ´Â platformÀ» À§ÇÑ flagÀÌ´Ù.
386        // TRUEÀ̸é UCM index 0 (g_UCM[0])Àº Ư¼ö ¿ëµµ·Î reserveµÈ´Ù.
387
388void DMW_MSC_LockUcm(void);
389void DMW_MSC_UnlockUcm(void);
390
391STATUS DMW_MSC_LockUcmWait(UINT32 tick);
392        // cafrii 060804 add
393        // Ucm mutex¸¦ lockÇϱâ À§Çؼ­ ¹«ÇÑÁ¤ ±â´Ù¸®Áö ¾Ê°í ÁöÁ¤µÈ ½Ã°£¸¸ ±â´Ù¸°´Ù.
394        // dead lockÀ» ¹æÁöÇϱâ À§Çؼ­ °£´ÜÇÏ°Ô Ã¼Å©¸¦ ÇÒ ¶§ À¯¿ë.
395
396
397
398// °¢Á¾ ä³Î ¼­ÇÎ ÇÔ¼öµé..
399// ±âÁ¸ ä³Î Æ©´× Á¤Ã¥¿¡¼­ Á¦°øµÇ´ø ÇÔ¼öÀÌÀÓ.
400
401STATUS DMW_MSC_FindUcmByRF(int rf, int *returnIndex); // cafrii 050528 add
402
403#if 0  // cafrii 051031 delete, do not use any more
404
405STATUS DMW_MSC_FindUpperUcm(int curMajor, int curMinor, int *returnIndex, int *returnRF);
406STATUS DMW_MSC_FindLowerUcm(int curMajor, int curMinor, int *returnIndex, int *returnRF);
407
408STATUS DMW_MSC_FindUpperMajor(int curMajor, int flag, int *returnIndex, int *returnRF);
409STATUS DMW_MSC_FindLowerMajor(int curMajor, int flag, int *returnIndex, int *returnRF);
410
411#endif // 0
412
413
414// UCM ¿À·ù¸¦ üũÇÏ´Â µð¹ö±× ÇÔ¼ö. Å×½ºÆ® ¿ëµµÀÓ.
415//
416BOOL DMW_MSC_IsUcmValid(void);
417
418
419STATUS DMW_MSC_EnableChannel(int uid, BOOL bEnable);
420        // Skipped flag ¼³Á¤ÇÏ´Â ÇÔ¼ö.
421
422
423void DMW_MSC_SortUcm(void);
424        // UCMÀ» ´Ù½Ã Á¤·ÄÇÏ´Â ÇÔ¼ö.
425
426
427void DMW_CDB_PrintUcm(int detailLevel); // ¸Þ¸ð¸®¿¡ ÀÖ´Â UCMÀ» ¸®½ºÆ®ÇÑ´Ù.
428void DMW_CDB_PrintOneUcm(int i, int detailLevel);
429
430//------------------------------------------
431// »õ·Î¿î Tuning Policy¿¡ ÀÇÇÑ Ã¤³Î ¼­ÇÎ ÇÔ¼ö.
432//
433//
434
435
436// »õ Tuning Policy ¿ä±¸»çÇ×À» Àû¿ëÇÑ ÄÚµå.
437
438// UCM ä³Î Á¤º¸ÀÇ Uid (Unique ID)
439//
440// »õ Tuning Policy¿¡´Â Uid¶ó´Â »õ id°ªÀ» »ç¿ëÇÑ´Ù.
441// ´õÀÌ»ó Major/Minor/RF µ¥ÀÌÅÍ ½ÖÀÌ unique ÇÔÀ» º¸ÀåÇÒ ¼ö ¾ø°í,
442// UCMÀÇ index °ªÀº UCM lockÀ» ÇÒ °æ¿ì¿¡¸¸ Àǹ̰¡ ÀÖÀ¸¹Ç·Î »õ·Î¿î ID°¡ ÇÊ¿äÇÏ°Ô µÈ °Í.
443//
444// Uid´Â 16bit unsigned °ªÀ¸·Î¼­ ä³Î Á¤º¸°¡ ¸Þ¸ð¸®¿¡ Á¸ÀçÇÏ´Â µ¿¾ÈÀº ±× Á¤º¸¸¦ À¯ÀÏÇϰÔ
445// ±¸º°ÇÒ ¼ö ÀÖµµ·Ï ºÎ¿©µÈ °ªÀÌ´Ù.
446// NvRam¿¡´Â ÀúÀåµÇÁö ¾Ê´Â Èֹ߼º °ªÀÌ´Ù. NvRam¿¡¼­ loadµÉ °æ¿ì¿¡´Â »õ·Ó°Ô ID°¡ ÇÒ´çµÈ´Ù.
447//
448// ÇöÀç ±¸Çö Á¤º¸:
449//    ÇöÀç ±¸ÇöÀº 1ºÎÅÍ ½ÃÀÛÇÏ´Â ÀÏ·Ã ¹øÈ£À̸ç, Áß°£¿¡ UCM µ¥ÀÌÅÍ ÀϺθ¦ »èÁ¦ÇÒ °æ¿ì ºó ¹øÈ£°¡
450//    Á¸ÀçÇϱ⵵ ÇÑ´Ù.
451//    UINT16ÀÇ ÃÖ´ë°ªÀÎ 65535¸¦ ³Ñ¾î°¡¸é wrap-aroundµÇÁö¸¸ '0'ÀÇ °ªÀº »ç¿ëÇÏÁö ¾Ê°í ÀÖ´Ù.
452//
453
454int DMW_MSC_Uid2Index(int uid);
455int DMW_MSC_Index2Uid(int index);
456        //
457        // index <--> Uid°£ÀÇ º¯È¯¿¡ »ç¿ëÇÑ´Ù. µÎ µ¥ÀÌÅÍ´Â UCM¾È¿¡¼­ 1:1·Î ¸ÅĪÀÌ µÇ¾î ÀÖ´Ù.
458        // ÇØ´ç ä³ÎÀÌ ¾øÀ¸¸é -1À» ¸®ÅÏÇÑ´Ù.
459        //
460        // ÁÖÀÇ1:
461        // UidÀÇ Å¸ÀÔÀº ¿ø·¡ UINT16À̳ª, -1°ú °°Àº ¿¡·¯¸¦ ¾Ë·ÁÁÖ±â À§ÇØ ¸®Åϰª 'int'°¡ »ç¿ëµÇ¾ú´Ù.
462        //
463        // ÁÖÀÇ2:
464        // index¸¦ ÇÔ¼öÀÎÀÚ³ª ¸®ÅϰªÀ¸·Î »ç¿ëÇÏ´Â ¸ðµç ÇÔ¼ö´Â caller¿¡¼­ UcmÀ» lockÀ» °É¾î º¸È£ÇØ ÁÙ Çʿ䰡 ÀÖ´Ù.
465        // ÀÌ µÎ ÇÔ¼öµµ ¿¹¿Ü°¡ ¾Æ´Ô.
466
467
468int DMW_MSC_GetMaxMinorNumber(int major);
469        //
470        // ÇØ´ç 'major' °ªÀ» ¸ÞÀÌÀú ¹øÈ£·Î °®´Â ä³Î Á¤º¸µé Áß¿¡¼­ ÃÖ´ë minor°ªÀ» ã´Â´Ù.
471        // ÀÌ´Â PSI·ÎºÎÅÍ ÃßÃâµÈ ä³Î Á¤º¸¿¡ Major-Minor ½ºÅ¸ÀÏÀÇ Ã¤³Î ¹øÈ£ ¸í¸íÀ» Çϱâ À§ÇØ
472        // application¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
473        //
474        // ¿¹¸¦ µé¾î ÇöÀç major 9¸¦ °®´Â ä³Î Á¤º¸µé Áß, minor °ªÀÇ ÃÖ´ë°ªÀÌ 3À̶ó°í Çϸé
475        // applicaiton¿¡¼­´Â PMT¿¡¼­ ¾Ë¾Æ³½ ä³Î Á¤º¸ µÎ°³¸¦ 9-4, 9-5·Î ¸í¸íÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
476        //
477        // PSI ä³Î Á¤º¸ÀÇ ¸í¸í¹ýÀº applicationÀÇ ÀÚÀ¯À̹ǷΠÀ§ÀÇ ¿¹´Â °­Á¦»çÇ×ÀÌ ¾Æ´Ï´Ù.
478        //
479
480
481
482//--------------------------------
483//  ä³Î up/down ÇÔ¼öµé.
484//
485
486//   format of CSF_Xxx
487//
488//                    5  4  3  2  1  0
489//    +-------------+--+--+--+--+-----+
490//    |          Res      |IS|PF|  MF |
491//    +-------------+--+--+--+--+-----+
492//
493//    MF: modulation filter
494//        00 : all
495//        01 : ATSC only
496//        10 : NTSC only
497//
498//    PF: PSI filter
499//        0 : do not include channel info from PSI table
500//        1 : all info including PSI
501//
502//    IS: Ignore Surf Order
503//        1 : ignore surf index value.
504//
505
506#define CSF_Default         0
507
508#define CSF_Mask_MF         3
509#define CSF_ATSC_Only       1  // search only ATSC channel.
510#define CSF_NTSC_Only       2  // search only NTSC channel.
511
512#define CSF_Include_PSI     4  // include PSI channel as well as PSIP channel.
513
514#define CSF_IgnoreSurfOrder 8  // do not count on surf index number. just use zero/non-zero info.
515                               // used in SurfUp/Down() API only.
516
517#define CSF_Include_Skipped 0x10  // include skipped (disabled) channel also.
518
519#define CSF_Include_Hidden  0x20
520        // cafrii 050602 add
521#define CSF_DontWrapAround  0x40  // do not wrap around if not found..
522        // cafrii 050602 add
523
524#define CSF_Include_Disabled 0x80 // include disabled channel. by default, they are skipped.
525
526
527int DMW_MSC_FindChannelMajorMinor(int major, int minor, int flag, int szBuf, int *uidBuf);
528int DMW_MSC_FindChannelMajor(int major, int flag, int szBuf, int *uidBuf);
529        //
530        // ÇØ´ç major[¶Ç´Â minor]¿¡ ´ëÀÀÇÏ´Â(°°Àº °ªÀ» °®´Â) ä³Î Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù.
531        // ÇÔ¼öÀÇ ¸®ÅϰªÀº ÀÏÄ¡Çϴ ä³Î Á¤º¸ÀÇ °¹¼ö.
532        // bIncludePsi´Â PSI·ÎºÎÅÍ ¾òÀº ä³Î Á¤º¸µµ °°ÀÌ
533        // ÀÏÄ¡ÇÏ´Â ¸ðµç ä³Î Á¤º¸¸¦ ¹ÞÀ»·Á¸é ÀÎÀÚ·Î uid ÀúÀå ¹öÆÛ¸¦ ³Ñ°ÜÁÖ¸é µÈ´Ù.
534        // ¹öÆÛ Å©±â´Â 'szBuf'À̸ç, ÀÌ ÀÌ»ó µ¥ÀÌÅͰ¡ ¸¹À» °æ¿ì truncateµÈ´Ù.
535        //  ¸®ÅÏ °ª > szBuf À̸é truncate µÈ °æ¿ìÀ̹ǷΠ´Ù½Ã È£ÃâÇØ¼­ Á¤È®ÇÑ Á¤º¸¸¦ ¾Ë¾Æ³»¾ß ÇÒ °ÍÀÌ´Ù.
536
537
538int DMW_MSC_FindMajorUp(int uidCurrentOrMajor, int flag, int szBuf, int *uidBuf);
539int DMW_MSC_FindMajorDown(int uidCurrentOrMajor, int flag, int szBuf, int *uidBuf);
540
541int DMW_MSC_FindMinorUp(int uidCurrentOrMajorMinor, int flag, int szBuf, int *uidBuf);
542int DMW_MSC_FindMinorDown(int uidCurrentOrMajorMinor, int flag, int szBuf, int *uidBuf);
543        //
544        // uidStart¸¦ ±âÁØÀ¸·Î upper/lower channel Á¤º¸¸¦ ã´Â´Ù.
545        //  (uidStart ÀÚü´Â Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ±×³É ½ÃÀÛÁ¡ÀÏ »ÓÀÓ)
546        //
547        // ¸®ÅϵǴ °á°ú ¿ª½Ã uid (¶Ç´Â uidÀÇ ¹öÆÛ)ÀÌ´Ù.
548        // MajorÀÇ °æ¿ì Çϳª°¡ ¾Æ´Ï¹Ç·Î º¹¼ö°³ÀÇ uid°¡ °Ë»öµÈ´Ù.
549        // ¸®ÅϰªÀ¸·Î °Ë»öµÈ uidÀÇ °¹¼ö¸¦ ³Ñ°ÜÁØ´Ù.
550
551
552int DMW_MSC_FindRfUp(UINT16 rfCurrent, int flag, int szBuf, int *uidBuf);
553int DMW_MSC_FindRfDown(UINT16 rfCurrent, int flag, int szBuf, int *uidBuf);
554        //
555        // rfCurrent¸¦ ±âÁØÀ¸·Î upper/lower RF "ä³Îµé"À» ã´Â´Ù.
556        // rfCurrentº¸´Ù Å©°Å³ª ÀÛÀº ä³ÎÀ» ã´Â´Ù.
557        // ¸®ÅϵǴ °á°ú ¿ª½Ã uid (¶Ç´Â uidÀÇ ¹öÆÛ)ÀÌ´Ù.
558        // ¸®ÅϰªÀ¸·Î °Ë»öµÈ uidÀÇ °¹¼ö¸¦ ³Ñ°ÜÁØ´Ù.
559
560
561//-----------------------------
562// surf ä³Î °ü·Ã.. 3/21 Ãß°¡
563//
564// surf ä³ÎÀ̶õ UCMÀÇ SurfIndex°¡ non-zero °ªÀ» °¡Áö´Â ä³Î·Î¼­
565// ÀÌ Ã¤³ÎµéÀº surf channel list¿¡ µî·ÏÀÌ µÇ¾î Àִ ä³ÎÀÌ´Ù.
566// surf-up, surf-down ¸í·ÉÀ¸·Î surf ä³Î ¼­ÇÎÀ» ÇÒ ¼ö ÀÖ´Ù.
567//
568// surf ä³ÎÀÇ µî·Ï ¹× ÇØÁ¦´Â
569// DMW_CDB_SetSurfChannel()/DMW_CDB_ReleaseSurfChannel() ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù.
570//
571
572int DMW_MSC_FindUidFromSurfIndex(int surfIndex); // return uid.
573        //
574        // ¿øÇÏ´Â surf_index¸¦ °¡Áø active ä³ÎÀ» ã¾Æ¼­ ±× Uid¸¦ µÇµ¹·ÁÁØ´Ù.
575        //
576
577
578int    DMW_MSC_Surf2Index(int surf); // surf --> index.  require caller's UCM lock.
579UINT16 DMW_MSC_FindSurfIndexFromUid(int uid);  // don't require caller's umc lock.
580
581UINT16 DMW_MSC_FindMaxSurfIndex(int *returnUcmIndex); // return value: surfIndex
582UINT16 DMW_MSC_FindMinSurfIndex(int *returnUcmIndex); // return value: surfIndex
583        //
584        // ¸¹Àº °æ¿ì¿¡ À־ min surf index´Â ¾Æ¸¶µµ 1ÀÏ °ÍÀÌ´Ù.
585        // surf ä³ÎÀÌ Çϳªµµ ¹ß°ßµÇÁö ¾ÊÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù.
586
587
588int DMW_MSC_FindSurfUp(int uidCurrent, int flag);  // return uid.
589int DMW_MSC_FindSurfDown(int uidCurrent, int flag);  // return uid.
590        //
591        // uidCurrent ´ÙÀ½ºÎÅÍ Ã£±â ½ÃÀÛÇÏ¿© °¡Àå °¡±î¿î upper/lower surf ä³ÎÀ» ã´Â´Ù.
592        // flag´Â CSF_IgnoreSurfOrder ¸¸ »ç¿ë °¡´ÉÇÏ´Ù.
593        // ÇöÀç uidCurrent°¡ invalidÀ̰ųª, uidCurrentÀÇ Ã¤³ÎÀÌ  surf list¿¡ Àִ ä³ÎÀÌ
594        // ¾Æ´Ï¶ó¸é µ¿ÀÛÀº ¾Æ·¡ °æ¿ì¿¡ µû¶ó ³ª´²Áø´Ù.
595        //  - CSF_IgnoreSurfOrder set ÀÎ °æ¿ì:
596        //       find lowest index channel which is in surf list. (¾Æ¸¶µµ surfIndex == 1)
597        //  - µðÆúÆ® ¼¼ÆÃÀÎ °æ¿ì:
598        //       uidCurrentÀÇ Ã¤³Î·ÎºÎÅÍ °¡Àå ±Ùó¿¡ ÀÖ´Â (minor ±âÁØÀ¸·Î nearest)
599        //       Ã¤³ÎÀ» µÇµ¹·ÁÁØ´Ù.
600        // ¸ðµç °æ¿ì¿¡ inactive channelÀº °Ë»öÇÏÁö ¾Ê´Â´Ù.
601
602
603
604
605
606
607//***************************************************************
608//
609//  4.4.1-2  Tuning °ü·Ã APIs
610//
611//
612
613typedef DMC_FN_TUNE_COMPLETED ChannelTuneCallback;
614
615//
616// ¸ðµç Tuning ÀÛ¾÷Àº ±Ã±ØÀûÀ¸·Î Dmc_Task¿¡¼­ ÀÌ·ç¾îÁø´Ù.
617// º°µµÀÇ Àü´ã ŽºÅ©·Î ±¸¼ºÇÔÀ¸·Î½á ¸®¼Ò½º »ç¿ëÀÇ Ãæµ¹À» ¹æÁöÇÒ ¼ö ÀÖ´Ù. (tuner¼³Á¤ µî)
618//
619
620STATUS DMW_TUN_TuneChannelByUid(UINT16 uid, BOOL bSkipPrescanPids,
621                BOOL bWaitForCompletion, ChannelTuneCallback fn, UINT32 userparam);
622        //
623        // UID¸¦ ¹Þ¾Æ¼­ Æ©´×À» ÇÑ´Ù.
624        // ¸ðµç ´Ù¸¥ ÇüÅÂÀÇ ¿ä±¸ (RF, Major-Minor, Up/Down µî..)´Â UidÀÇ ÇüÅ·Πº¯°æµÇ¾î
625        // ÀÌ ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ÅëÇØ Àü´ÞµÈ´Ù.
626        // ÇÊ¿äÇÑ °æ¿ì M/WÀÇ ´Ù¸¥ helper ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
627        //
628        // bWaitForCompletionÀÌ TRUEÀÏ °æ¿ì TuningÀÌ ¿ÏÀüÈ÷ ³¡³¯¶§±îÁö blockµÈ´Ù.
629        // FALSEÀ̸é Dmc_Task·Î command messge¸¦ Àü´Þ¸¸ ÇÏ°í ¹Ù·Î ¸®ÅϵȴÙ.
630        //
631
632STATUS DMW_TUN_TuneChannelByUidAndFlag(UINT16 uid, UINT32 flag,
633                BOOL bWaitCompletion, ChannelTuneCallback fn, UINT32 userparam);
634        //
635        // cafrii 041202 add
636        // more specific UidTune API
637       
638
639// ä³Î Æ©´×ÀÇ Smartness¿¡ °üÇÏ¿©:
640//
641// UCM¿¡´Â pre-scanned pids, Major-Minor, RF µîÀÇ ¸¹Àº Á¤º¸µéÀÌ Àִµ¥
642// Æ©´×À» ÇÏ´Â ÀýÂ÷´Â ¾Æ·¡¿Í °°´Ù.
643//
644// 1. pre-scan pid Á¤º¸ÀÇ video_pid ¶Ç´Â audio_pid°¡ non-zeroÀ̸é ÀÌ °ªÀ» ÀÌ¿ëÇÏ¿© ½Ãû.
645//
646// 2. 1)ÀÇ ¹æ¹ýÀÌ ½ÇÆÐÇÒ °æ¿ì¿¡´Â pre-scan pid°¡ À߸ø ¼öÁýµÇ¾ú°Å³ª out-of-dateÀÎ °æ¿ìÀÌ´Ù.
647//    À̶§´Â ±× ä³Î Á¤º¸ÀÇ ÇüÅ¿¡ µû¶ó ´ëÀÀÀÌ ´Þ¶óÁø´Ù.
648//
649// 2-A. VCT·ÎºÎÅÍ ¾ò¾îÁø ä³Î Á¤º¸¶ó¸é, VCT¸¦ ºÐ¼®ÇÏ¿© Major-Minor ¹øÈ£·Î ½ÃûÀ» ÇÑ´Ù.
650// 2-B. PSI·ÎºÎÅÍ ¾ò¾îÁø ä³Î Á¤º¸¶ó¸é, PMTÀÇ Program number·Î ½ÃûÀ» ÇÑ´Ù.
651//
652//      ä³Î Á¤º¸ ³»¿ë¿¡ µû¶ó À§ÀÇ µÎ ¹æ¹ýÁß ÇѰ¡Áö ¹æ¹ý¸¸ÀÌ ½ÃµµµÈ´Ù.
653//      ½ÇÆÐ ÇÒ °æ¿ì ´õ ÀÌ»óÀÇ Ã³¸®´Â ÇÏÁö ¾Ê´Â´Ù.
654//
655
656
657// Dmc_Task¿¡¼­ ¹ß»ýÇÑ ¿¡·¯ °ªÀ» Application¿¡¼­ ¾Ë·Á°í ÇÒ °æ¿ì¿¡´Â µÎ°¡Áö ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
658//
659//  1) APIÀÇ ¸®Åϰª.
660//     blocking call¿¡¼­¸¸ °¡´ÉÇϸç, DMW_TUN_Xxx() ÇÔ¼öÀÇ ¸®Åϰª(STATUS)À» ÀÌ¿ëÇÏ¿© Á¦ÇÑÀûÀÎ
661//     Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
662//  2) Application callback
663//     ¹Ì¸® µî·ÏÇÑ callback ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¿©·¯°¡Áö Á¤º¸¸¦ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. (todo..)
664//  3) Polled watch
665//     ¸¶Áö¸·À¸·Î callÇÑ ÇÔ¼ö°¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾ú´ÂÁö application¿¡¼­ ÁÖ±âÀûÀ¸·Î üũÇÑ´Ù. (todo..)
666//
667
668
669
670
671
672//***************************************************************
673//
674//  4.4.2 Auto channel search API
675//
676//
677
678
679typedef BOOL (*ChannelScanCancelCheckFn)();
680
681
682
683// cafrii 061219 add
684typedef enum
685{
686        // ÀϹÝÀûÀÎ °æ¿ì¿¡´Â analog/digital ÃÑÇÕÇØ¼­ Çѹø¿¡ ÁøÇàµÈ´Ù.
687        ScanOnePassStage,
688
689        // Analog Separate scan flag¸¦ ÁöÁ¤ÇÏ¸é ¾Æ·¡ µÎ°¡Áö Stage·Î ÁøÇàµÈ´Ù.
690        ScanAnalogStage,
691        ScanDigitalStage,
692
693} ScanStage;
694
695#define ScanStageString(s) ( \
696        (s)==ScanAnalogStage ? "Analog" : \
697        (s)==ScanDigitalStage ? "Digital" : "All" )
698
699
700
701// structure
702// 
703
704
705typedef struct
706{
707        int flag;   // CBTF_XXX
708
709        ScanStage stage;
710       
711}  ScanStartedCbParam;
712
713typedef struct
714{
715        BOOL bStoppedByUser;
716        BOOL bUpdate;
717
718                // param1: bStoppedByUser, TRUEÀ̸é StopScan() ¸í·É¿¡ ÀÇÇØ Áß´ÜµÈ °æ¿ìÀÓ.
719                // param2: bUpdate,
720                //            TRUEÀ̸é StopScan(bUpdate==TRUE, ..)·Î È£ÃâµÇ¾úÀ½.
721                //            bStoppedByUser°¡ TRUEÀ϶§¸¸ Àǹ̰¡ ÀÖÀ½.
722
723        int flag;   // CBTF_XXX
724
725        ScanStage stage;
726       
727}  ScanCompleteCbParam;
728
729typedef struct 
730{
731        // input parameter;
732        //
733        int  channel;          // current RF channel number to check
734        //ModulationType demod;  // modulation
735       
736        UINT32 flag;        // scan flag:  CBTF_XXX
737       
738        ChannelScanCancelCheckFn chkfn;    // cancel check function
739                // application code should repeatedly check cancel calling this function.
740                // if this function returns TRUE (meaning autoscan is cancelled),
741                // then application should exit scan immediately
742                // with 'return_value' to 'statusCancelled'
743
744        BOOL one_channel_scan;  // true if this scan is quick scan (one channel scan)
745       
746        // output parameter;
747        //
748        BOOL locked;          // TRUE if signal locked.
749        ModulationType mode;  // detected modulation type. valid if 'locked' is TRUE
750        int strength;         // signal strength
751        int  freq_offset;     // frequency offset detected in Hz unit
752        STATUS return_value;
753       
754       
755}  ScanTunerSetCbParam;
756
757
758
759typedef struct
760{
761        int current_rf;
762        BOOL after_scan;  // TRUE if this 'rf' is completed.
763       
764        int channel_idx;  // ¸î¹øÂ° channelÀΰ¡?
765        int total_channel;
766
767        ScanStage stage;
768       
769        //
770        // ÁøÇà »óȲ Á¤µµ
771        // (channel_idx+1) * 100 / total_channel
772       
773} ScanProgressCbParam;
774
775// Note!
776//   ÀÌ event´Â 'rf' ½ÃÀÛÇϱâ Á÷Àü¿¡ Çѹø (after_scan = 0),
777//   Á¾·áÇÏ°í ³ª¼­ Çѹø (after_scan = 1), ÀÌ·¸°Ô µÎ¹ø ºÒ¸°´Ù.
778
779
780typedef struct
781{
782        UCM_DB_T *ucm;
783
784        BOOL (*fn_lookup_mj_mn)(int major, int minor);
785        BOOL (*fn_lookup_rf_pn)(int rf, int program_number);
786        // ...
787
788} ScanNewChannelCbParam;
789
790
791typedef struct
792{
793        STATUS status;
794       
795        int rf;
796        UINT32 flag;
797       
798        //UINT32 userparam; // cafrii 060804 no more used
799       
800        int nUid;
801        int *uidBuf;  // ÀÌ buffer´Â event callback Á÷ÈÄ¿¡ freeµÉ °ÍÀ̹ǷΠÁÖÀÇ.
802       
803} OneChannelScanCompleteParam;
804
805//
806//  Callback ÇÔ¼öÀÇ ÀÎÀÚ·Î Àü´ÞµÉ À̺¥Æ® ŸÀÔ°ú µ¿¹ÝµÇ´Â parameter Á¤ÀÇ.
807//
808typedef enum 
809{
810        evtScanStarted,
811                // ä³Î °Ë»ö ÀÛ¾÷ÀÌ ½ÃÀ۵ǾúÀ½.
812                // param1: ScanStartedCbParam *
813                // param2: NULL
814
815        evtScanComplete,
816                // ä³Î °Ë»öÀÌ ¸ðµÎ ³¡³µÀ½.
817                // UCM »ý¼º ÀÛ¾÷µµ ¸ðµÎ ¿Ï·á µÇ¾ú±â ¶§¹®¿¡ ÀÌÈÄ application¿¡¼­
818                // UCM µ¥ÀÌÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
819                // param1: ScanCompleteCbParam *
820               
821        evtScanTunerSet,
822                // param1: ScanTunerSetCbParam *
823
824        evtNewChannel,
825                // »õ·Î¿î ä³ÎÀÌ ¹ß°ßµÇ¾úÀ½.
826                // param1: ScanNewChannelCbParam *
827
828        evtOnProgress,
829                // ä³Î °Ë»ö ÁøÃ´ »óȲ. »óÅ ÁøÇà ±×·¡ÇÁ¸¦ Ç¥½ÃÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.
830                // param1: ScanProgressCbParam *
831
832        //evtError,
833                // ¿¡·¯°¡ ¹ß»ýÇÏ¿´À½.
834                // param1: ¿¡·¯ Á¤º¸.. ¿¡·¯ Á¾·ù¸¦ ¼³¸íÇÏ´Â ½ºÆ®¸µ.
835                //   ex)  "out of memory for MCM. some channel info will be dropped"
836       
837        //evtOneChannelComplete,  // cafrii 060804 delete
838                // scan one channel ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§¿¡¸¸ Àü´ÞµÇ´Â À̺¥Æ®.
839                // param: OneChannelScanCompleteParam*
840       
841
842} ChannelScanEventType;
843
844
845typedef STATUS (*ChannelScanCallback)
846                        (ChannelScanEventType evt, UINT32 param);
847        // Äݹé ÇÔ¼öÀÇ prototype.
848
849
850
851typedef struct SparseChannelMap_t
852{
853        int num_seg;
854       
855        struct   // describe channel from 'rf_start' to 'rf_start' + 'rf_num' - 1
856        {
857                int ch_start;
858                int ch_num;
859               
860        } seg[10];
861       
862} ChannelScanSparseMap;
863
864
865
866
867//-----------------------------------------------------------------------
868// Channel Broadcast Type Flag definition.
869// this flag is used as an argument of StartScan function.
870
871
872#define CBTF_ChannelTypeMask 0x0001
873
874#define CBTF_Air             0x0000
875#define CBTF_Cable           0x0001
876        // Only one of above two flag option should be selected.
877        //    use of (CBTF_Air | CBTF_QAM) is illegal.
878        // NOTE!
879        // UpdateMode (DMW_CDB_UpdateDB) ¿¡¼­´Â ÀÌ Ç÷¡±×´Â »ç¿ëµÇÁö ¾Ê´Â´Ù.
880        //
881
882#define CBTF_NTSC      0x0002  // NTSC
883#define CBTF_8VSB      0x0004  // ATSC 8VSB
884#define CBTF_QAM       0x0008  // ATSC QAM (64, 256 cannot be distinguished.)
885        // °Ë»öÇÒ Modulation Mode¸¦ ÁöÁ¤ÇÑ´Ù.
886        // Ç÷§Æû¿¡ µû¶ó Áö¿øµÇÁö ¾Ê´Â ¸ðµå°¡ ÀÖ°ÚÀ¸³ª MW API¿¡¼­ üũÇÏÁö´Â ¾Ê´Â´Ù.
887
888#define CBTF_Ext       0x0010  // extended channel Air: 69 -> 83, Cable: 125 -> 130
889        // Start ScanÀ» Çϸ鼭 ½ÃÀÛ/³¡ ä³Î ¹øÈ£¸¦ ÁöÁ¤Çϵµ·Ï ÇÑ »õ·Î¿î API¸¦ »ç¿ëÇϸé
890        // ÀÌ flag´Â ÇÊ¿äÇÏÁö ¾Ê´Ù.
891        // ´õ ÀÌ»ó Áö¿øÇÏÁö ¾Ê´Â´Ù.
892
893#define CBTF_ForcePSI  0x0020  // force scan using PSI as well as VCT.
894        // VCTÀÇ À¯¹«¿Í »ó°ü¾øÀÌ PSI ä³ÎÀ» °Ë»öÇÏ¿© Á¤º¸¸¦ ¸ðÀº´Ù.
895
896#define CBTF_IgnoreNtscInVct      0x0040
897        // VCT¾ÈÀÇ analog ä³Î Á¤º¸¸¦ ¹«½ÃÇÑ´Ù.
898        // Digital Only Moduel/STB¿¡¼­´Â ²À ¼¼ÆÃÇØ¼­ callÇØ¾ß ÇÑ´Ù.
899        // ¾Æ´Ï¸é AutoscanÀÌ Á¾·áµÈ ÈÄ¿¡ Analog ä³Î Á¤º¸¸¦ »èÁ¦ÇØ¾ß ÇÑ´Ù.
900
901//#define CBTF_IgnoreRemoteChannelInVct      0x0080
902        // VCT¾ÈÀÇ remote ä³Î Á¤º¸¸¦ ¹«½ÃÇÑ´Ù.
903        // DMW_CDB_UpdateDB ¿¡¼­´Â MW API³»¿¡¼­ ÀÌ Ç÷¡±×¸¦ ÀÚµ¿ÀûÀ¸·Î ¼¼ÆÃÇÑ´Ù.
904        // ÀÌ API´Â ÇöÀç ½Ãû ä³Î¸¸ updateÇÏ´Â °ÍÀ̹ǷΠ´Ù¸¥ RF ä³ÎÀÇ link Á¤º¸´Â
905        // ÂüÁ¶ÇÏ¸é ¾ÈµÇ±â ¶§¹®ÀÌ´Ù.
906
907#define CBTF_EnableNewChannelInUpdateMode      0x0100
908        // UpdateMode (DMW_CDB_UpdateDB)¿¡¼­¸¸ »ç¿ëµÇ´Â Ç÷¡±×
909        // »õ·Î ¹ß°ßµÈ ä³ÎÀº ¸ðµÎ Enable ½ÃŲ´Ù. (skipped FALSE)
910        // ±âÁ¸ Á¤º¸¿¡ overwriteµÇ´Â ä³ÎÀº ±×´ë·Î µÐ´Ù.
911
912//#define CBTF_QuerySignalInfo  0x0200
913        // JVC ¸ðµâó·³ ¸Å ä³Î/modulation ¸¶´Ù signal strength µîÀÇ Á¤º¸¸¦
914        // ¾Ë°í ½ÍÀ»¶§ ON.
915        // evtSignalInfo À̺¥Æ®°¡ ¹ß»ýµÈ´Ù.
916        // cafrii 060616
917        //  ÀÌ flag´Â ´õÀÌ»ó Áö¿øÇÏÁö ¾Ê°í ÀÖ¾úÀ½. »èÁ¦ÇÔ.
918       
919#define CBTF_IgnoreTvctInCable      0x0400
920        // ÄÉÀÌºí ¸ðµå¿¡¼­ TVCT´Â ¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù.
921       
922#define CBTF_CheckScrambleByVideoContext 0x0800  // cafrii 041130 change name
923        // Video Context »ý¼º ¿©ºÎ·Î scramble ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.
924        //
925        // scramble µÈ ä³ÎÀ» ¹Ù·Î ignore ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í ÀÏ´Ü DB¿¡ ³ÖµÇ
926        // scrambed flag¸¦ set ÇÑ´Ù.
927        // ÀÌ·± ä³ÎÀÌ ÇÊ¿ä ¾ø´Â °æ¿ì¶ó¸é autoscan ÀÌ ³¡³­ µÚ¿¡ »èÁ¦ÇÏ¸é µÈ´Ù.
928
929#define CBTF_IgnorePidsInfo  0x1000
930        // PID °ªÀº ¼öÁýÇÏÁö ¾Ê´Â´Ù. Major-Minor Á¤º¸¸¸ ¼öÁýÇϵµ·Ï ÇÑ´Ù.
931        //
932        // cafrii 060710, not used any more
933        // pid´Â »ç¿ëÇÏÁö ¾Ê´õ¶óµµ, scramble check´Â ÇÏÁö ¾Ê´õ¶óµµ
934        // VCT recover ±â¹ýÀÌ Ç×»ó »ç¿ëµÇ¹Ç·Î
935        // À̸¦ À§Çؼ­ ¹Ýµå½Ã pid Á¤º¸´Â ÇÊ¿äÇÏ´Ù.
936
937//#define CBTF_AnalogCableSystemDetect  0x2000
938        //
939        // Analog °Ë»öÀ» ¼öÇàÇϸ鼭 CableSystem À» ÀÚµ¿À¸·Î °áÁ¤ÇÑ´Ù. (STD/IRC/HRC)
940        // ä³Î °Ë»öÀÌ ¼öÇàµÇ´Â µ¿¾ÈÀº ÀáÁ¤ÀûÀ¸·Î STD ¸ðµå·Î ¼³Á¤ÀÌ µÇ¾î °Ë»öÀ» Çϰí,
941        // ä³Î °Ë»öÀÌ ´Ù Á¾·áµÇ¸é °Ë»öµÈ °á°ú¸¦ ¹ÙÅÁÀ¸·Î CableSystemÀ» °áÁ¤ÇÏ°Ô µÈ´Ù.
942        // À̶§ HRC³ª IRC·Î °áÁ¤ÀÌ µÇ¸é ¸ðµç ä³Î ¸ÊµéÀÇ frequency offsetµµ ¸ðµÎ ÀÚµ¿À¸·Î Á¶ÀýµÈ´Ù.
943        //
944        // À¯ÀÇ »çÇ×
945        //
946        // * Cable ¸ðµå¿¡¼­¸¸ »ç¿ë °¡´ÉÇÏ´Ù. (CBTF_Cable only)
947        // * ¾Æ³¯·Î±× (NTSC) ¸¸ ´Üµ¶À¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. (CBTF_NTSC | CBTF_8VSB ÀÌ·± ½ÄÀ¸·Î »ç¿ë ºÒ°¡)
948        // * ¹Ýµå½Ã ChannelDB¸¦ ¸ðµÎ clear ÇÑ »óÅ¿¡¼­ AutoscanÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù.
949        //   ±âÁ¸ÀÇ DB data°¡ ³²¾ÆÀÖÀº »óÅ¿¡¼­ ½ÃÀÛÇÒ °æ¿ì Á¦´ë·Î µ¿ÀÛÇÔÀ» º¸ÀåÇÏÁö ¾Ê´Â´Ù.
950        //
951
952// cafrii 050718 delete, not used any more
953//#define CBTF_DigitalCableSystemDetect  0x4000  // cafrii 050603 add
954        //
955        // Digital °Ë»öÀ» ¼öÇàÇϸ鼭 CableSystemÀ» °áÁ¤ÇÑ´Ù.
956        // ä³Î °Ë»öÀÌ ¼öÇàµÇ´Â µ¿¾ÈÀº ÀáÁ¤ÀûÀ¸·Î STD ¸ðµå·Î ¼³Á¤ÀÌ µÇ¾î °Ë»öÀ» Çϰí,
957        // ä³Î °Ë»öÀÌ ´Ù Á¾·áµÇ¸é °Ë»öµÈ °á°ú¸¦ ¹ÙÅÁÀ¸·Î CableSystemÀ» °áÁ¤ÇÏ°Ô µÈ´Ù.
958        // À̶§ HRC³ª IRC·Î °áÁ¤ÀÌ µÇ¸é ¸ðµç ä³Î ¸ÊµéÀÇ frequency offsetµµ ¸ðµÎ ÀÚµ¿À¸·Î Á¶ÀýµÈ´Ù.
959        //
960        // À¯ÀÇ »çÇ×
961        //
962        // * Cable ¸ðµå¿¡¼­¸¸ »ç¿ë °¡´ÉÇÏ´Ù. (CBTF_Cable only)
963        // * Digital¸¸ ´Üµ¶À¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. (CBTF_NTSC | CBTF_QAM ÀÌ·± ½ÄÀ¸·Î »ç¿ë ºÒ°¡)
964        // * ¹Ýµå½Ã ChannelDB¸¦ ¸ðµÎ clear ÇÑ »óÅ¿¡¼­ AutoscanÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù.
965        //   ±âÁ¸ÀÇ DB data°¡ ³²¾ÆÀÖÀº »óÅ¿¡¼­ ½ÃÀÛÇÒ °æ¿ì Á¦´ë·Î µ¿ÀÛÇÔÀ» º¸ÀåÇÏÁö ¾Ê´Â´Ù.
966        //
967        // ÀÌ Ç÷¡±×¸¦ »ç¿ëÇϸé CBTF_8VSB ¿Í CBTF_QAMÀÌ ±âº»À¸·Î ¼³Á¤µÈ °Í ó·³ µ¿ÀÛÇÑ´Ù.
968        //
969
970
971// cafrii 050721 add   
972#define CBTF_DontSelectMaxChannel 0x8000
973        //
974        // Set µÇ¸é Autoscan ¿Ï·á ÈÄ MCMÀ» UCMÀ¸·Î º¯È¯ÇÒ ¶§
975        // ´ëÇ¥ ä³Î ¼±ÅÃÀ» ÇÏÁö ¾Ê´Â´Ù.
976        //
977
978// cafrii 050802 add
979//#define CBTF_IgnoreVctWithoutPid  0x10000
980        //
981        // SLDÀÇ PID Á¤º¸°¡ ¿Ïº®ÇÏÁö ¾ÊÀº VCT Å×À̺íÀº ¹«½ÃÇÑ´Ù.
982        //
983
984#define CBTF_PsiOnlyMode 0x10000
985        // cafrii 050902
986        // ÀÌ flag°¡ Set µÇ¸é autoscan ÇÒ ¶§¿¡ PSIP Á¤º¸¸¦ ÀüÇô »ç¿ëÇÏÁö ¾Ê°í
987        // ¿À·ÎÁö PSI Å×ÀÌºí¸¸À» »ç¿ëÇÑ´Ù.
988        // Major, Minor ¹øÈ£´Â RF.program_number °ªÀ» »ç¿ëÇÏ°Ô µÈ´Ù.
989
990// cafrii 060626 add
991#define CBTF_SkipTunerSet 0x20000
992        //
993        // ÀÌ flag°¡ set µÇ¸é tuner¼³Á¤Àº ÀüÇô ÇÏÁö ¾Ê°í
994        // ÇöÀç tuner ¼³Á¤µÈ »óÅ¿¡¼­ Table ¼ö½Å °Ë»ö¸¸ ¼öÇàÇÑ´Ù.
995        // µû¶ó¼­ ÀÌ flag´Â tuner°¡ ÀÌ¹Ì ¼³Á¤µÈ ÈÄ
996        // one channel scan ¸ðµå·Î¸¸ »ç¿ëÀÌ °¡´ÉÇÏ´Ù.
997        //
998
999// cafrii 061219 add
1000#define CBTF_AnalogSeparateScan 0x40000
1001        //
1002        // ÀÌ flag°¡ setµÇ¸é analog scanÀ» ¸ÕÀú ÁøÇàÇÑ ÈÄ
1003        // ³ªÁß¿¡ digital scanÀ» µû·Î ¼öÇà ÇÑ´Ù.
1004        // CBTF_NTSC °¡ »ç¿ëµÇ¾î¾ß Àǹ̰¡ ÀÖ´Ù.
1005        //
1006
1007
1008#define CBTF_IncludeSpecialHidden 0x80000
1009        // KBS Çâ K-ViewÀÇ ¿ä±¸»çÇ×À» ¸¸Á·½ÃŲ´Ù.
1010        // Hidden ä³Î Áß, ƯÁ¤ pid¸¦ °¡Áö´Â ä³ÎÀº hiddenÀ» Ǭ´Ù.
1011
1012#define CBTF_IgnoreScrambledChannel 0x100000
1013        // scramble °É¸° ä³ÎµéÀº ¾Æ¿¹ ä³Î DB¿¡ Áý¾î³ÖÁö ¾Ê´Â´Ù.
1014
1015//-----------------------------------------------------------------------
1016       
1017STATUS DMW_ASC_InitScan(void);
1018        //
1019        // ä³Î °Ë»ö ¸ðµâÀ» ÃʱâÈ­ ÇÑ´Ù.
1020        //
1021
1022STATUS DMW_ASC_StartScan(int flag, ChannelScanCallback fn,
1023                                                        int chStart, int chEnd);
1024
1025STATUS DMW_ASC_StartScanEx(int flag, ChannelScanCallback fn,
1026                                                        UINT8 *rfMap, int numRf);
1027
1028STATUS DMW_ASC_StartSparseScan(int flag, ChannelScanCallback fn, 
1029                                                        ChannelScanSparseMap *map);
1030
1031        //
1032        // ÀÚµ¿ ä³Î °Ë»öÀ» ½ÃÀÛÇÑ´Ù.
1033        // 1) flag : °Ë»öÇϰíÀÚ Çϴ ȯ°æ µî °¢Á¾ ¼³Á¤...
1034        // 2) blind == TRUEÀ̸é È­¸éÀ» º¸¸é¼­ scanÇÑ´Ù.
1035        //     ÀÌ ¸ðµå´Â µðÁöÅРä³ÎÀÇ °æ¿ì ¼Óµµ ¹®Á¦¶§¹®¿¡ °ÅÀÇ Çö½ÇÀûÀÌÁö ¸øÇÔ.
1036        //     ¾Æ³¯·Î±× ä³ÎÀÇ °æ¿ì´Â °¡´ÉÇÒ °Í °°À½.
1037        //    blind == FALSEÀ̸é scan ÀÛ¾÷ Áß¿¡´Â È­¸éÀÌ blank·Î ¾Æ¹«°Íµµ º¸ÀÌÁö ¾Ê´Â´Ù.
1038        // 3) fn: Äݹé ÇÔ¼ö Æ÷ÀÎÅÍ. NULLÀÌ ¾Æ´Ï¾î¾ß ÇÔ.
1039
1040        // ÀÌ ÇÔ¼öµéÀº ¸ðµÎ non-blocking ÇÔ¼öÀÌ´Ù. ÇÊ¿äÇÑ ÀÛ¾÷¸¸ ¼öÇàÇÏ°í ¹Ù·Î ¸®ÅÏÇÑ´Ù.
1041        // ½ÇÁ¦ scanning ÀÛ¾÷Àº ´Ù¸¥ ŽºÅ©¿¡¼­ ÀÌ·ç¾îÁø´Ù.
1042
1043        // ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§ÇÑ ¿©·¯°¡Áö Á¦¾à»çÇ×ÀÌ ÀÖ´Ù.
1044        //  (¾Æ·¡ Application »ç¿ë ¿¹ ¼³¸í ÂüÁ¶)
1045
1046        // °Ë»öµÈ ä³Î Á¤º¸´Â À̺¥Æ®¸¦ ÅëÇØ¼­ applicationÀ¸·Î Àü´ÞµÈ´Ù.
1047        //    (¾Æ·¡ À̺¥Æ®Àü´Þ±¸Á¶ ¼³¸í ÂüÁ¶)
1048
1049
1050STATUS DMW_ASC_StopScan(BOOL bUpdate);  // stop auto scan
1051        //
1052        // °Ë»ö ÀÛ¾÷ µµÁß¿¡ ä³Î °Ë»ö ÀÛ¾÷À» Á¾·áÇÑ´Ù.
1053        //
1054        // bUpdate°¡ TRUEÀ̸é ÀÌ ½ÃÁ¡±îÁö °Ë»öµÈ ä³Î Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© UCMÀÌ updateµÈ´Ù.
1055        //   Áö±Ý±îÁö °Ë»ö °á°ú¸¦ ¿ÏÀüÈ÷ cancelÇÏ·Á¸é FALSE ÁöÁ¤.
1056        //  ChannelScanComplete À̺¥Æ®°¡ Àü´Þ µÇ°í ³­ ÀÌÈÄ¿¡ ºÒ¸° StopScan()ÀÇ bUpdate´Â
1057        //   ¹«½ÃµÈ´Ù. (ÀÌ¹Ì update°¡ µÈ ÀÌ ÈÄ¿¡ À̺¥Æ®°¡ Àü´ÞµÇ¹Ç·Î..)
1058        //
1059
1060
1061STATUS DMW_ASC_ScanChannel(int rf, int flag, 
1062                                BOOL bWaitComplete,
1063                                ChannelScanCallback eventcb,
1064                                DMC_FN_COMPLETED pfnComplete, UINT32 userParam,
1065                                BOOL bCancelPrevCmds);
1066
1067
1068STATUS DMW_ASC_UpdateChannel(int rf, int flag, 
1069                                BOOL bWaitComplete, 
1070                                DMC_FN_COMPLETED pfnComplete, UINT32 userParam,
1071                                BOOL bCancelPrevCmds);
1072
1073int DMW_ASC_ProgramNumberToMinor(UINT16 program_number);
1074
1075
1076//------------------------
1077
1078/*
1079        Âü°í) À̺¥Æ® Àü´Þ ±¸Á¶
1080                Channel search µµÁß¿¡, °ü·ÃµÈ event message°¡ applicationÀ¸·Î Àü´ÞµÈ´Ù.
1081                Callback ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù.
1082                callback ÇÔ¼ö Æ÷ÀÎÅÍ´Â start scan ÇÒ¶§ Àμö·Î Àü´ÞÇÑ´Ù.
1083
1084                ApplicationÀº ÀÌ callback ÇÔ¼ö ³»¿¡¼­ ÇÊ¿äÇÑ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Ù.
1085                        ¿¹) eventNewChannel À̺¥Æ®°¡ ¿À¸é GUI¿¡ Àû´çÇÑ ¸Þ½ÃÁö Ç¥½Ã ¶Ç´Â Host¿¡ ¾Ë·ÁÁÜ.
1086
1087        »ç¿ë¿¹)
1088                1) ±âÁ¸ ä³Î Á¤º¸¸¦ ¸ðÁ¶¸® »èÁ¦Çϰí óÀ½ºÎÅÍ °Ë»öÇÏ´Â °æ¿ì.
1089                        ¸ÕÀú DMW_CDB_ClearAll()À» È£ÃâÇÏ¿© UCMÀ» ÃʱâÈ­ÇÑ´Ù.
1090
1091                2) ±âÁ¸ ä³Î Á¤º¸¸¦ À¯ÁöÇÑ »óÅ¿¡¼­ º¯°æ»çÇ×À» °Ë»öÇÏ´Â °æ¿ì
1092                        ±×³É auto scanÀ» ½ÃÀÛÇÑ´Ù.
1093*/
1094
1095
1096//***************************************************************
1097//
1098// 5.3.1  Update Channel DB
1099//
1100//
1101//
1102//      ÀÌ ¼½¼ÇÀÇ API ÇÔ¼ö´Â ¿ÀÁ÷ UCM¿¡ ´ëÇØ¼­¸¸ µ¿ÀÛÇÑ´Ù. (¸Þ¸ð¸®»ó¿¡ Á¸ÀçÇÏ´Â ÀνºÅϽº)
1103//
1104//      NvRam »óÀÇ µ¥ÀÌÅÍ¿¡´Â Àû¿ëÇÏÁö "¾Ê´Â´Ù".
1105//  -----
1106//      NvRamÀÇ µ¥ÀÌÅÍ´Â Application¿¡¼­ ¸í½ÃÀûÀΠȣÃâÀÌ ÀÖ´Â °æ¿ì¿¡¸¸ º¯°æµÈ´Ù. (see 5.3.2)
1107//
1108
1109
1110STATUS  DMW_CDB_ClearAll(void); // initialize channel DB
1111        // UCMÀ» ´Ù Áö¿î´Ù.
1112        // NvRamÀº Áö¿ìÁö ¾Ê´Â´Ù.
1113        // NvRamÀÇ channel dB¸¦ Áö¿ì°í ½ÍÀ¸¸é ÀÌ ÇÔ¼ö È£Ãâ ÈÄ DMW_CDB_WriteUCM()À» È£ÃâÇÑ´Ù.
1114        // ±×·¯³ª UCM°ú NvRamÀÇ µ¿±âÈ­ Á¤Ã¥Àº °¢ product¸¶´Ù ´Ù¸£¹Ç·Î ¾Ë¾Æ¼­ ÇÑ´Ù.
1115        // ¿¹: Àü¿ø off ÇÒ¶§¸¸ µ¿±âÈ­,  ¶Ç´Â ¸Å 1½Ã°£¸¶´Ù µ¿±âÈ­ µîµî..
1116
1117STATUS DMW_CDB_UpdateChannel(xvctPtr_t vct, MPEG_PAT *pat, MPEG_PMT **pmtlist, 
1118                                                int rf, int scan_flag, 
1119                                                int *pnUid, int **puidBuf);
1120        // ÁÖ¾îÁø Å×À̺í Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© ä³Î ¸ÊÀ» ±¸¼ºÇϰí UCM¿¡ Ãß°¡ÇÑ´Ù.
1121        // »õ·Ó°Ô Ãß°¡µÈ ä³ÎÀÇ uid buffer¸¦ ¸®ÅÏÇϹǷÎ,
1122        // caller´Â ÈÄ¼Ó Ã³¸® ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.
1123        //
1124        // puidbuf´Â DHL_OS_Free¸¦ ÀÌ¿ëÇÏ¿© free µÇ¾î¾ß ÇÑ´Ù.
1125
1126int DMW_CDB_MakeNewUcm(int major, int minor, int rf, int vf, int st);
1127        // ÁÖ¾îÁø ÀÎÀÚ¸¦ ۰ªÀ¸·Î °®´Â »õ·Î¿î Ucm entry¸¦ »ý¼ºÇÑ´Ù.
1128        // ¸®ÅϰªÀº »õ·Î »ý¼ºµÈ Ucm entryÀÇ indexÀÌ´Ù. ÀÌ °ªÀ» »ç¿ëÇÏ·Á¸é ÀÌ ÇÔ¼ö call Àü¿¡
1129        // UcmLockÀ» ÇØ¾ß ÇÑ´Ù.
1130
1131void *DMW_CDB_RegisterUcmDeleteHook(STATUS (*fn)(int idx));
1132        // Channel Delete¸¦ ¼öÇàÇÒ ¶§ È£ÃâµÇ´Â hook functionÀ» µî·ÏÇÑ´Ù.
1133        // Ucm entry°¡ »èÁ¦µÉ¶§ ²À ¼öÇàÇØ¾ß ÇÏ´Â clean-up ·çƾÀÌ ÀÖÀ» °æ¿ì µî·ÏÇÏ¸é µÈ´Ù.
1134        // EPG DB ¿Í °°ÀÌ Ucm entry¿¡ system resource°¡ linkµÈ °æ¿ì °°ÀÌ »èÁ¦µÇµµ·Ï Çϱâ À§ÇØ »ç¿ëµÊ.
1135        // ¸®ÅϰªÀº previous hook functionÀ̹ǷΠÀ̸¦ ±â¾ïÇß´Ù°¡
1136        // hook chain ³¡±îÁö Á¦´ë·Î callµÉ ¼ö ÀÖµµ·Ï °ü¸®ÇØ¾ß ÇÑ´Ù.
1137
1138STATUS DMW_CDB_DeleteUcmChannel(int index);
1139        // UCM index¸¦ ÁöÁ¤ÇÏ¿© ÇØ´ç ucm entry¸¦ »èÁ¦ÇÑ´Ù.
1140        // callerÃø¿¡¼­ Ucm lockÀ» ÇØ¾ß ÇÑ´Ù.
1141
1142STATUS DMW_CDB_DeleteChanInfoUid(UINT16 uid);
1143        // ÇØ´ç uid °ªÀ» °¡Áö´Â ä³Î Á¤º¸¸¦ »èÁ¦ÇÑ´Ù.
1144
1145STATUS DMW_CDB_DeleteRFChanInfo(int RF_number);
1146        // ÇØ´ç RF °ªÀ» °¡Áö´Â ¸ðµç ä³ÎÀ» »èÁ¦ÇÑ´Ù.
1147        // Ãâó°¡ VCT/PSI ±¸ºÐÇÏÁö ¾Ê°í ´Ù »èÁ¦ÇÑ´Ù.
1148
1149STATUS DMW_CDB_DeleteMajorChanInfo(int major_number);
1150STATUS DMW_CDB_DeleteMajorMinorChanInfo(int major, int minor);
1151        // ÇØ´ç ä³ÎÀ» »èÁ¦ÇÑ´Ù.
1152        // »èÁ¦µÇ´Â ´ë»óÀº VctFlag==1ÀΠä³Î¿¡¸¸ ÇØ´çÇÑ´Ù.
1153        // ±âŸ ´Ù¸¥ Çʵå´Â °ü°è¾ø´Ù. (inactive channelµµ »èÁ¦)
1154
1155STATUS DMW_CDB_DeleteAllAnalogChannel(void);
1156        // UCM¿¡¼­ analog ä³Î Á¤º¸¸¦ ¸ðµÎ »èÁ¦ÇÑ´Ù.
1157        // digital only stb¿¡¼­ À¯¿ëÇÑ ÇÔ¼ö.
1158
1159void DMW_CDB_DeleteDisabledChannel(void);
1160        // disabled flag set µÈ ä³Î¸¸ ¸ðµÎ »èÁ¦.
1161
1162STATUS  DMW_CDB_SetFavChannel(int index);
1163        // set a channel as active channel
1164STATUS  DMW_CDB_ReleaseFavChannel(int index);
1165        // set a channel as inactive channel
1166        //
1167        // UCM¿¡ ÀÖ´Â channel list Áß¿¡¼­ ÀϺθ¦ ¼±ÅÃÇÏ¿© Favorite channel list¸¦ ¸¸µç´Ù.
1168        // channel Up/Down Ű·Î ä³Î º¯°æÀ» ÇÒ ¼ö Àִ ä³Î ¸®½ºÆ®ÀÌ´Ù.
1169        // UCMÀÇ skip field¸¦ ÀÌ¿ëÇÏ¿© ±¸ºÐÇÑ´Ù. skipÀÌ FALSEÀ̸é FavList¿¡ Æ÷ÇÔµÈ °ÍÀÌ´Ù.
1170        //
1171
1172STATUS DMW_CDB_SetSurfChannel(int index, int prev_index);
1173        // insert a channel in Surf channel link
1174STATUS DMW_CDB_ReleaseSurfChannel(int index);
1175        // delete a channel in Surf channel link
1176        //
1177        // Surf channel list (SCM)¸¦ ¸¸µç´Ù.
1178        // ÇÔ¼ö ÀÎÀÚ·Î »ç¿ëµÇ´Â index °ªµéÀº ¸ðµÎ UCM indexÀ̹ǷΠcallerÀÇ lockÀÌ ÇÊ¿äÇÑ ÇÔ¼öµéÀÌ´Ù.
1179        //
1180        //
1181
1182void DMW_CDB_InvalidateAllPidInfo(void);
1183        // cafrii 060630 add
1184        // prescan pid¸¦ ÀÌ¿ëÇÑ tuningÀ» ÇÏÁö ¸øÇϵµ·Ï
1185        // DB¿¡ ÀÖ´Â ¸ðµç pid Á¤º¸¸¦ invalidate½ÃŲ´Ù.
1186
1187void DMW_CDB_RegisterChannelUcmSymbols(void);
1188
1189
1190
1191
1192//***************************************************************
1193//
1194//  Channel Specific Data Access API
1195//
1196//
1197
1198const char *CsdTagString(int tag);
1199void DMW_CDB_PrintCsd(ChannelSpecificData *csd, int num_csd, int indent, int detailLevel);
1200
1201void DMW_CDB_DeleteUcmCsd(int idx);
1202                // ÇØ´ç indexÀÇ UCM entry¿¡ ¿¬°áµÈ csd record¸¦ »èÁ¦ÇÑ´Ù.
1203void DMW_CDB_DeleteAllUcmCsd(void);
1204                // ¸ðµç csd ¸¦ »èÁ¦ÇÑ´Ù.
1205
1206STATUS  DMW_CDB_DeleteCsd(ChannelSpecificData *csd, int num_csd);
1207int     DMW_CDB_DeleteCsdEntry(ChannelSpecificData *csd, int num_csd, int tag);
1208
1209ChannelSpecificData * DMW_CDB_DuplicateCsd(ChannelSpecificData *csd, int num_csd, int max_csd);
1210
1211STATUS  DMW_CDB_UpdateCsd(ChannelSpecificData **pdst, int *pdst_num, int *pdst_max, 
1212                          ChannelSpecificData *src, int src_num);
1213                         
1214STATUS DMW_CDB_UpdateCsdEntry(ChannelSpecificData **pdst, int *pdst_num, int *pdst_max,
1215                              int tag, int len, UINT8 *ptr);
1216        // ÇѰ³ÀÇ CSD entry¸¦ update ÇÏ´Â ÇÔ¼ö
1217
1218STATUS DMW_CDB_UpdateUcmCsdEntry(int rf, int source_id, int tag, int length, UINT8 *ptr);
1219        // DMW_CDB_UpdateCsdEntry ÀÇ ´Ù¸¥ parameter ¹öÀü
1220
1221
1222//***************************************************************
1223//
1224// 5.3.2  Read/Write Channel DB in NvRam
1225//
1226//
1227
1228// NvRamÀº Å©°Ô EEPROM (device_0)°ú Flash memory (device_1)·Î ³ª´©¾îÁ® ÀÖ´Ù.
1229// Á¦Ç°¿¡ µû¶ó¼­ Flash memoryÀÇ NvRam ¿ëµµ ºÎºÐÀÌ Á¸ÀçÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. (eeprom only)
1230//
1231
1232//-------------------------------------
1233// Level 1 API.
1234// HAL function ¹Ù·Î À§ÀÇ API.
1235
1236//  NvRam Structure
1237//
1238//  device 0 (0x0 ~ )
1239//  +----------------------------+
1240//  |                            |  »ç¿ë°¡´ÉÇÑ ¿µ¿ª.
1241//  |        ...                 |
1242//  |                            |
1243//  +----------------------------+ <-- DMW_CDB_GetNvRamAvailableSize(0)
1244//
1245//  device 1 (0x80000000 ~ )
1246//  +----------------------------+
1247//  |        ...                 |  »ç¿ë°¡´ÉÇÑ ¿µ¿ª.
1248//  |                            |
1249//  +----------------------------+ <-- DMW_CDB_GetNvRamAvailableSize(1)
1250
1251
1252// device 0: EEPROM
1253// device 1: Flash
1254//
1255// Device 0:  0x0        ~ 0x7FFFFFFF
1256// Device 1:  0x80000000 ~ 0xFFFFFFFF.  Flash ¿µ¿ª (device_1)Àº addressÀÇ MSB°¡ 1.
1257//
1258
1259STATUS DMW_CDB_InitNvRam(void);
1260
1261STATUS DMW_CDB_LowLevelFormatNvRam(void);
1262        // °øÀå ÃâÇÏÈÄ 1ȸ ½ÇÇàÇØÁֱ⸸ ÇÏ¸é µÈ´Ù.
1263        // ÇÁ·Î±×·¥ÀÌ ¾÷µ¥ÀÌÆ® µÉ °æ¿ì Çѹø ´õ Æ÷¸ËÇØÁà¾ß ¾ÈÀüÇÏ´Ù.
1264        //
1265
1266STATUS DMW_CDB_CheckNvRam(void);
1267        // NvRamÀÌ Á¦´ë·Î Æ÷¸ËÀÌ µÇ¾úÀ¸¸ç »ç¿ë °¡´ÉÇÑÁö üũÇÑ´Ù.
1268
1269
1270UINT32 DMW_CDB_GetNvRamAvailableSize(int device);
1271        // °¢ ÀåÄ¡º° NvRamÀÇ »ç¿ë°¡´ÉÇÑ ¿µ¿ªÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ¸®ÅÏÇÑ´Ù.
1272        //
1273
1274STATUS DMW_CDB_ReadNvRam(UINT32 address, UINT32 size, UINT8 *buf);
1275STATUS DMW_CDB_WriteNvRam(UINT32 address, UINT32 size, UINT8 *buf);
1276        // application¿¡¼­ È£Ãâ °¡´ÉÇÑ NvRam access API.
1277
1278
1279
1280//-------------------------------------
1281// Level 3 API.
1282//
1283//   Manages Ucm storing format and Raw DB.
1284//
1285//      ¾Æ·¡ API´Â ¸ðµÎ NvRam¿¡ ÀúÀåµÈ UCMÁ¤º¸¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.
1286
1287//extern const UINT8 gUcmStoringVersion;
1288        // see DMW_ChannelDB.c for ucm storing version.
1289
1290UINT32 DMW_CDB_GetUcmItemStoringSize(void);
1291        // UCM storing format ±¸Á¶¿¡¼­ ÇÑ UCM itemÀÌ NvRam¿¡ ÀúÀåµÉ ¶§ Â÷ÁöÇÏ´Â Å©±â.
1292        // sizeof(UCM_DB_T)¿Í´Â ´Ù¸¦ ¼ö ÀÖ´Ù.
1293        // application¿¡¼­ NvRam¿¡ µé¾î°¥ DB Å©±â °è»êÀ» ÇÒ ¶§¿¡´Â
1294        // ÀÌ ÇÔ¼öÀÇ ¸®ÅϰªÀ» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù.
1295        //
1296        // UCMÀº ¸Þ¸ð¸®¿¡ ÀÖ´Â »óÅ ±×´ë·Î writeÇÏÁö ¾Ê´Â´Ù´Â Á¡¿¡ À¯ÀÇÇÑ´Ù.
1297
1298
1299
1300//-------------------------------------
1301//  Level 4 API
1302//
1303//  UCM Header ±¸Á¶¸¦ Áö¿øÇÏ´Â »õ·Î¿î UCM I/O API
1304// 
1305STATUS DMW_CDB_InitUCM2(UINT32 *paddr, int n_db, BOOL bSyncNow);
1306STATUS DMW_CDB_WriteUCM2(UINT32 address, int max_db_size, const char *description); // cafrii 041129 change
1307STATUS DMW_CDB_ReadUCM2(UINT32 address);
1308
1309STATUS DMW_CDB_WriteRawDB2(UINT32 address, UINT8 *buf, int newsize);
1310STATUS DMW_CDB_ReadRawDB2(UINT32 address, UINT8 *buf, int newsize);
1311
1312
1313//  Utility API
1314//
1315STATUS DMW_CDB_SyncNvRam(UINT32 address);
1316
1317UINT32 DMW_CDB_CalcCRC32(UINT32 crc_start, const UINT8 *data, UINT32 len);
1318
1319BOOL DMW_CDB_IsNvRamSyncWorking(void); // cafrii 060802 add
1320void   DMW_CDB_WaitForNvRamSyncDone(void);
1321void   DMW_CDB_InvalidateNvRamCache(void);
1322
1323
1324//  Debugging API
1325//
1326void DMW_CDB_RegisterChannelNvRamSymbols(void);
1327
1328
1329
1330
1331
1332//-------------------------------------
1333//
1334//  CSD DB Access API
1335//
1336// 
1337//
1338int DMW_CDB_FlattenCsd(ChannelSpecificData *csd, int num_csd, UINT8 *buf, int buf_limit);
1339        // WriteCSD¿¡¼­ ³»ºÎÀûÀ¸·Î »ç¿ëÇÏ´Â ÇÔ¼ö
1340
1341
1342STATUS DMW_CDB_InitCSD(UINT32 *pAddrList, int n_csd_db);
1343STATUS DMW_CDB_WriteCSD(UINT32 db_start_address, int max_size);
1344STATUS DMW_CDB_ReadCSD(UINT32 db_start_address, int max_size);
1345        //
1346        // ÁöÁ¤ÇÑ NvRam ¿µ¿ª (½ÃÀÛ ÁÖ¼Ò, ÃÖ´ë Å©±â) ¿¡ Àüü CSD ¸¦ ±â·ÏÇϰí ÀоîµéÀδÙ.
1347        //
1348
1349
1350/*
1351        UCM DB Å©±â °è»ê µµ¿ò¸»:
1352                16K : UCM entry ¾à 500°³ ºÐ·® (overhead°¡ ÀÖÀ¸¹Ç·Î Á¤È®ÇÑ ¼ýÀÚ´Â ¾à°£ ´Þ¶óÁú ¼ö ÀÖÀ½)
1353                32K : UCM entry ¾à 1000°³ ºÐ·®
1354               
1355        CSD DB Å©±â °è»ê µµ¿ò¸»:
1356                16K : ÇÑ UCM entry ´ç ÃÖ´ë CSD Å©±â¸¦ 100 À¸·Î Çϸé, 163°³ ä³ÎÀÇ CSD¸¦ ÀúÀå °¡´É
1357                        Analog ä³ÎÀÇ °æ¿ì¿¡´Â CSD ´Â User Channel Name ¹Û¿¡ ¾øÀ½.
1358                       
1359                        ¸¸¾à User Channel Name ÀÌ ¾ø°í µðÁöÅРä³Î Áß ¾à Àý¹Ý Á¤µµ¸¸ CSD¸¦ °¡Áø´Ù°í °¡Á¤Çϸé
1360                        µðÁöÅРä³Î ¾à 320°³, (¾Æ³¯·Î±× ä³Î °¹¼ö´Â µðÁöÅРä³Î °¹¼ö¿Í ºñ½ÁÇϹǷΠ¿ª½Ã 320°³)
1361                        ÃÑ 640°³ ºÐ·®ÀÇ UCM entry ¿¡ ÇØ´çµÇ´Â Å©±â¶ó°í º¼¼ö ÀÖÀ½.
1362                       
1363                        POD UCM DBÀÇ °æ¿ì¿¡´Â Extended Channel Text °¡ ¾ø´Ù.
1364*/
1365
1366
1367
1368
1369
1370
1371
1372// µ¶ÀÚÀûÀÎ Çü½ÄÀ¸·Î DB¸¦ °ü¸®Çϱâ À§ÇØ »ç¿ëÇÏ´Â ÇÔ¼ö.
1373STATUS DMW_CDB_ReadRawDB(int dir_index, UINT8 *buf, int bufsize);
1374STATUS DMW_CDB_WriteRawDB(int dir_index, UINT8 *buf, int newsize);
1375
1376
1377
1378/*
1379$$$$ ¼³°è¹®¼­·ÎºÎÅÍÀÇ º¯°æ»çÇ×: from 030117
1380
1381        1. ¸ðµç APIÀÇ ¸¶Áö¸· ÀÎÀÚ·Î BOOL air °¡ Ãß°¡µÊ.
1382                air == TRUEÀ̸é Áö»óÆÄ, FALSE À̸é ÄÉÀ̺íÀÇ °æ¿ìÀÌ´Ù.
1383        2. ReadXX ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ¸ðµÎ pointer ÇüÀ¸·Î º¯°æÇÏ¿© °á°ú¸¦ ¸®ÅÏÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù.
1384                (ReadShortNameÇÔ¼öÀÇ ÀÎÀÚ´Â Á¦¿ÜÇÔ.)
1385                ¹öÆÛ Æ÷ÀÎÅÍ´Â NULLÀÌ ¾Æ´Ï¾î¾ß ÇÑ´Ù. (NULL üũÇÏÁö ¾ÊÀ½)
1386        3. »õ API Ãß°¡.
1387                DMW_CDB_GetNvRamAvailableSize(device)
1388                DMW_CDB_GetUcmItemStoringSize
1389                DMW_CDB_Read/WriteRawDB
1390        4. Level1/2/3 API ºÐ¸®. Level 1 API Ãß°¡.
1391           UCM storing formatÀÌ UCM structure¿Í ´Ù¸§À» ¸íÈ®È÷ ÇÔ.
1392
1393*/
1394
1395
1396/*
1397Âü°í)
1398        ÀÌ °³°³ÀÇ ÇÔ¼öµéÀº »ç½Ç Ưº°È÷ »ç¿ëÇÒ °æ¿ì´Â ¾ø´Ù.
1399        ReadUCM(), WriteUCM()À» ´ëºÎºÐ »ç¿ëÇÏ¿© Àüü DB¸¦ load/save Çϵµ·Ï ÇÑ´Ù.
1400
1401        ±×·¯³ª ´ÙÀ½°ú °°Àº ½Ã³ª¸®¿À°¡ ÀÖÀ» ¼ö ÀÖ´Ù.
1402        Áß°£¿¡ ä³Î Á¤º¸°¡ º¯°æµÇ¾ú´Ù¸é ¸Þ¸ð¸®¿¡ ÀÖ´Â UCM DB¸¦ ¼öÁ¤Çϰí NvRam¿¡ update¸¦ ÇØ¾ß Çϴµ¥,
1403        ÀÌ ¶§ Àüü ³»¿ëÀ» writeÇÏ·Á¸é ½Ã°£ÀÌ °É¸± °æ¿ì°¡ ÀÖÀ¸¹Ç·Î ÇÊµå ´ÜÀ§·Î updateÇÏ´Â°Ô ÇÊ¿äÇÏ´Ù.
1404
1405        NvRamÀÇ ½Çü(EEPROM ¶Ç´Â Flash)¿¡ °üÇÑ Æ¯¼ºÀº application¿¡¼­ ¾Ë¾Æ¼­ ÁÖÀÇÇÏ¿© ÄÚµùÇØ¾ß ÇÑ´Ù.
1406*/
1407
1408
1409
1410
1411#ifdef __cplusplus
1412}
1413#endif
1414
1415
1416#endif
1417
1418
1419/********************************************************************
1420        $Log: DMW_ChannelAPI.h,v $
1421
1422        2.04  2004/03/15 CBTF_AnalogCableSystemDetect Ãß°¡
1423
1424        2.03    2004/12/21 cafrii XDS °ü·Ã tag Ãß°¡
1425        2.02  2004/12/07 cafrii Cable System Detect °è¿­ evnet msg Ãß°¡
1426        2.01  2004/12/02 cafrii DMW_TUN_TuneChannelByUidAndFlag Ãß°¡
1427
1428        2.00  2004/11/29  cafrii
1429                WriteUCM2 ¿¡ max_db_size ÀÎÀÚ Ãß°¡
1430                CSD µ¥ÀÌÅÍÀÇ NvRam I/O API Ãß°¡
1431                UCM¿¡ scrambled flag Ãß°¡
1432                CBTF_CheckScrambleByVideoContext Ç÷¡±× À̸§ º¯°æ (È¥¶õ¹æÁö)
1433
1434        041126 »ç¿ëÇÏÁö ¾Ê´Â °ªµé ¸ðµÎ »èÁ¦.
1435               CSD °ü·Ã data structure, API Ãß°¡
1436
1437        041122 MMode_XX °ªµé »èÁ¦..
1438
1439        040830 ChannelType/FreqStd, Freq.c °ü·Ã ÄÚµå Channel.h·Î À̵¿
1440       
1441        040611 FindMultiStandardRF Ãß°¡
1442        040607 #include DMW_EEPROM.h »èÁ¦ÇÔ (ÇÊ¿äÇÑ ¸ðµâ¿¡¼­¸¸ ¼±ÅÃÀûÀ¸·Î include ÇØ¾ßÇÔ)
1443
1444        Revision 1.10  ??
1445        pEpgDB added
1446        New channel tuning policy applied.
1447
1448        Revision 1.03  2003/3/4  cafrii
1449        DMW_MSC_FindUpper[Lower]Major() Ãß°¡.
1450        DMW_ASC_StopScan()¿¡¼­ killTask ±â´É ¹«½ÃÇÔ.
1451
1452        Revision 1.02  2003/02/17  cafrii
1453        FineTune type changed.
1454        some API added.
1455
1456        Revision 1.01  2003/01/28  cafrii
1457        NvRam strategy, some prototype is changed.
1458
1459        Revision 1.0  2003/01/13  cafrii
1460        Initial coding from ground, based on M/W API document
1461
1462 ********************************************************************/
1463
Note: See TracBrowser for help on using the repository browser.