source: svn/newcon3bcm2_21bu/dst/dmw/src/example/dmw_m2.c @ 22

Last change on this file since 22 was 22, checked in by phkim, 11 years ago
  1. phkim
  2. newcon3sk 를 kctv 로 브랜치 함
  • Property svn:executable set to *
File size: 4.4 KB
Line 
1/*
2        dmw_m2.c
3       
4*/
5
6#include "DHL_OSAL.h"
7
8#include "DMW_Main.h"
9
10#include "DMW_Timer.h"
11#include "DMW_SysTime.h"
12#include "DMW_Mutex.h"
13#include "DMW_Channel.h"
14#include "DMW_ChannelAPI.h"
15//#include "DMW_ChannelDemux.h"
16
17
18
19DHL_MODULE("@m2 ", 4);
20
21#if COMMENT
22__________(){}
23#endif
24
25
26// nvm layout. flash¸¦ »ç¿ëÇϰí, 32K Â¥¸® UCM DB 1°³ »ç¿ë.
27#define M2_UCM_OFFSET 0x80000100
28#define M2_UCM_LIMIT 0x8000 // 32K
29
30
31// °¢Á¾ ¸ðµâ µð¹ö±× ·Î±× ¼³Á¤.
32// m2 ÃʱâÈ­ °úÁ¤ ÁßÀÇ µð¹ö±× ·Î±×µµ º¸°í ½Í´Ù¸é m3_init Çϱâ Àü¿¡ debug ¸¦ enable ÇØ¾ß ÇÔ.
33void m2_debug(BOOL enable)
34{
35        struct {
36                char *module; int level;
37        } list[] = {
38                "$nvm", 4,
39                "$dmc", 4,
40                "$scn", 4,
41                "$tmr", 1,
42                "$stm", 1,
43                "$ucm", 1,
44                "*NVM", 1,
45        };
46       
47        int i;
48        if (enable) {
49                for (i=0; i<sizeof(list)/sizeof(list[0]); i++)
50                        DHL_DBG_SetModuleLevel(list[i].module, list[i].level);
51        }
52        else {
53                for (i=0; i<sizeof(list)/sizeof(list[0]); i++)
54                        DHL_DBG_SetModuleLevel(list[i].module, 0);
55        }
56}
57
58// nvramÀ» format ÇÑ´Ù.
59void m2_format(void)
60{
61        STATUS status;
62
63        dprint(2, "low-level format..\n");
64        DMW_CDB_LowLevelFormatNvRam();
65
66        dprint(2, "init ucm..\n");
67        if (1) {
68                UINT32 addr[2];
69                addr[0] = M2_UCM_OFFSET;
70                status = DMW_CDB_InitUCM2(addr, 1, FALSE); // ³ªÁß¿¡ ÇѲ¨¹ø¿¡ sync ÇÒ °ÍÀÓ..
71                if (status) {
72                        dprint(0, "!! FormatNvRam: InitUCM2 err %d\n", status);
73                        return;
74                }
75        }
76        dprint(2, "format completed\n");
77}
78
79// ucm Ãâ·Â.
80void m2_ucm(int level)
81{
82        // ÇöÀç ä³Î Á¤º¸µµ Ãâ·Â..
83        // todo
84       
85        DMW_CDB_PrintUcm(level);
86}
87
88// nvm¿¡¼­ ucm ·Îµå.
89void m2_load_ucm(void)
90{
91        STATUS err;
92        dprint(2, "Load UCM\n");
93        err = DMW_CDB_ReadUCM2(M2_UCM_OFFSET);
94        if (err)
95                dprint(0, "read ucm err %d\n", err);
96
97        dprint(2, "UCM loaded.\n");
98        m2_ucm(0);
99}
100
101// ucmÀ» nvm¿¡ ÀúÀå.
102void m2_save_ucm(void)
103{
104        STATUS err;
105        err = DMW_CDB_WriteUCM2(M2_UCM_OFFSET, M2_UCM_LIMIT, "M2 TEST UCM");
106                                                // cafrii 041129 prototype changed, add new parameter
107        if (err) {
108                dprint(0,"!! WriteUCM err %d\n", err);
109                return;
110        }
111        dprint(2, "ucm save completed. now sync..\n");
112
113        // ucm dbÀÇ °æ¿ì ¹Ù·Î ¹Ù·Î sync¸¦ Çϵµ·Ï ÇÏÀÚ.
114        err = DMW_CDB_SyncNvRam(0x80000000);   
115        if(err) {
116                dprint(0, "!! SyncNvRam err %d\n", err);
117                return;
118        }
119        dprint(2, "sync completed\n");
120}
121
122// autoscan..
123void m2_scan(int start, int end, int bUpdateMode)
124{
125        void TestDigitalScan(int, int); // defined in DMW_ChannelScan.c
126
127        if(start == 0 && end == 0)
128        {
129                start = 79;
130                end = 83;
131        }
132
133        // update mode °¡ ¾Æ´Ï¶ó¸é ±âÁ¸ DB »èÁ¦ÇÏ°í »õ·Ó°Ô scan.
134        if (!bUpdateMode) {
135                dprint(2, "cleaning previous channel list..\n");
136                DMW_CDB_ClearAll();
137        }
138
139        Dmc_StopVideo();
140       
141        dprint(2, "start scanning, ch %d ~ %d..\n", start, end);
142        TestDigitalScan(start, end);
143}
144
145// ch tune callback
146static void m2_cb_tune(STATUS status, UINT32 userParam, AppRfTuneCallbackParam *param)
147{
148        dprint(2, "---- tune callback, status %d, param 0x%x ----\n", status, userParam);
149}
150
151// uid ¸¦ ÀÌ¿ëÇÑ Æ©´×.
152void m2_uid(int uid)
153{
154        STATUS err;
155        dprint(2, "tune channel, uid %d..\n", uid);
156        err = DMW_TUN_TuneChannelByUid(
157                uid, 
158                TRUE, //bSkipPrescanPids
159                FALSE, //bWaitCompletion
160                m2_cb_tune, 0);
161        if (err) 
162                dprint(0, "!! uid tune err %d\n", err);
163}
164
165// ä³Î ¹øÈ£¸¦ ÀÌ¿ëÇÑ Æ©´×.
166void m2_tune(int major, int minor)
167{
168        // search..
169        int uid, n = -1;
170        UINT32 flag = CSF_Include_PSI | CSF_Include_Skipped;
171
172        dprint(2, "searching ch %d-%d..\n", major, minor);
173        n = DMW_MSC_FindChannelMajorMinor(major, minor, flag, 1, &uid);
174        if (n == 0) {
175                dprint(2, "searching ch %d..\n", major);
176                n = DMW_MSC_FindChannelMajor(major, flag, 1, &uid);
177        }
178        if (n == 0) {
179                dprint(2, "searching ch rf %d..\n", major);
180                // todo..
181        }
182        if (n > 0)
183                m2_uid(uid);
184        else
185                dprint(0, "!! ch %d %d not found\n", major, minor);
186}
187
188void m2_chtype(int type)
189{
190        if (type == 0)
191                DMW_CDB_InitializeChannelLib(ChannelType_Air, 0);
192        else 
193                DMW_CDB_InitializeChannelLib(ChannelType_Cable, 0);
194}
195
196// m2 ÃʱâÈ­.
197void m2_init(void)
198{
199        STATUS err;
200        BOOL bFormatRequired = FALSE;
201
202        DMW_CDB_InitNvRam();
203       
204        if (DMW_CDB_CheckNvRam() != statusOK) {
205                dprint(0, "!! MW: NvRam not valid\n");
206                bFormatRequired = TRUE;
207        }
208
209        if (bFormatRequired) {
210                /* FormatÀÌ ¾ÈµÇ¾îÀÖ´Â °æ¿ì */
211                dprint(2, "format required!\n");
212                //m3_format();
213        }
214
215        err = Dmc_Init();
216        if (err)
217                dprint(0, "!! dmc init err %d\n");
218
219        // channel typeÀº default cable·Î..
220        m2_chtype(1); 
221}
222
223
224
Note: See TracBrowser for help on using the repository browser.