source: svn/newcon3bcm2_21bu/dst/app/src/kview/Proc/App_Proc_ChEdit.c

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

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

  • Property svn:executable set to *
File size: 11.9 KB
Line 
1/****************************************************************************
2* NAME: App_Proc_ChEdit.c
3*----------------------------------------------------------------------------
4* Copyright (c) DIGITAL STREAM Technology Inc.
5*----------------------------------------------------------------------------
6* CREATED_BY: Chan Hun Jeon
7* CREATION_DATE: 2009/08/31
8* $Author: chjeon $
9* $Revision: 1.0 $
10* $Date: 2009/08/31 17:56:32 $
11*----------------------------------------------------------------------------
12* PURPOSE:
13*       -
14*****************************************************************************/
15
16/*_____ I N C L U D E __________________________________________*/
17
18#include "App_Main.h"
19#include "App_Proc.h"
20
21#include "App_Res_Resources.h"
22#include "App_OSD_ChEdit.h"
23#include "App_OSD_Main.h"
24#include "App_OSD_Banner.h"
25
26#include "App_Fnc_Common.h"
27#include "App_Fnc_ChTune.h"
28#include "App_Fnc_Ucm.h"
29#include "App_Fnc_SignalMonitor.h"
30
31
32
33
34
35/*_____ D E F I N I T I O N ____________________________________*/
36
37#if COMMENT
38____DbgPrint____(){}
39#endif
40
41DHL_MODULE("@p_che",0);
42
43
44
45
46
47#if COMMENT
48____Config____(){}
49#endif
50
51#define MAX_CH_DRAW_ROW 8 // 7
52
53#define MOD(x,y) if(y!=0){for(;x<0;x+=y);for(;x>=y;x-=y);}
54
55
56
57
58
59#if COMMENT
60____Types____(){}
61#endif
62
63
64
65
66
67#if COMMENT
68____Variables____(){}
69#endif
70
71static tApp_UcmShortInfo *s_chinfo = NULL;
72static int s_chDrawStIdx;
73static int s_numch;
74static BOOL s_bChEditChange;
75
76
77
78
79
80/*_____ F U N C T I O N ________________________________________*/
81
82#if COMMENT
83____Function____(){}
84#endif
85
86void App_CalculateChDrawStIdx(int* chDrawStIdx, int* curChIdx)
87{
88        if(*chDrawStIdx+MAX_CH_DRAW_ROW <= *curChIdx)
89                *chDrawStIdx=*curChIdx-MAX_CH_DRAW_ROW+1;
90        else if(*chDrawStIdx > *curChIdx)
91                *chDrawStIdx=*curChIdx;
92       
93        if(*chDrawStIdx<0) *chDrawStIdx=0;
94}
95
96int App_ChLoadUid(int idx)
97{
98        return s_chinfo[idx].uid;
99}
100
101int App_ChEditLoadData(int* nCurChPos)
102{
103        DST_CURCHANNEL ChannelInfo;
104        tApp_UcmShortInfo ucm_info;
105        int numCh=0;
106        int TotalUcmCount=0;
107        int i;
108
109        *nCurChPos = 0;
110       
111        App_Ucm_GetCurChInfo(&ChannelInfo);
112
113        TotalUcmCount = App_Ucm_GetTotalUcmCount();
114       
115        s_chinfo = DHL_OS_Malloc(sizeof(tApp_UcmShortInfo)*TotalUcmCount);
116        memset(s_chinfo, 0, sizeof(tApp_UcmShortInfo)*TotalUcmCount);
117       
118        if(App_GetChSortMode()==APP_CH_SORT_GROUP)
119        {
120                //hd, sd, audio only..
121                int uid=-1, mode=0;
122                tApp_ChSelParam ch_sel_param={FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE};
123               
124                for(mode=0; mode<3; mode++)
125                {
126                        switch(mode) {
127                                case 0:
128                                        ch_sel_param.exc_hd=FALSE;
129                                        ch_sel_param.exc_sd=TRUE;
130                                        ch_sel_param.exc_audio=TRUE;
131                                        break;
132                                       
133                                case 1:
134                                        ch_sel_param.exc_hd=TRUE;
135                                        ch_sel_param.exc_sd=FALSE;
136                                        ch_sel_param.exc_audio=TRUE;
137                                        break;
138                                       
139                                case 2:
140                                        ch_sel_param.exc_hd=TRUE;
141                                        ch_sel_param.exc_sd=TRUE;
142                                        ch_sel_param.exc_audio=FALSE;
143                                        break;
144                        }
145                       
146                        while(1) {
147                                int idx;
148                               
149                                uid=App_Ucm_GetNextChannel(uid, &ch_sel_param);
150                               
151                                if(uid<=0) break;
152                               
153                                DMW_MSC_LockUcm();
154                               
155                                idx=DMW_MSC_Uid2Index(uid);
156                               
157                                DMW_MSC_UnlockUcm();
158                               
159                                App_Ucm_GetShortInfobyIndex(idx, &ucm_info);
160                               
161                               
162                                if(!App_Ucm_CheckHiddenCh(idx) && 
163                                (!App_Ucm_CheckDisabledCh(idx) || ChannelInfo.nUid == ucm_info.uid))
164                                {       
165                                        // cafrii 101209
166                                        // ¸ðµç ä³ÎÀÌ ´Ù ä³Î edit¿¡ Æ÷ÇÔµÇÁö ¾ÊÀ½À¸·Î ÀÎÇÑ ¼öÁ¤..
167                                        App_Ucm_GetShortInfobyIndex(idx, &s_chinfo[numCh]);
168                                       
169                                        if(ChannelInfo.nUid == s_chinfo[numCh].uid)
170                                                *nCurChPos = numCh;
171                                       
172                                        numCh++;
173                                }
174                               
175                        }
176                }
177        }
178        else if (App_GetChSortMode()==APP_CH_SORT_NUMBER)
179        {
180                int idx;
181                int uid = 0;
182
183                DMW_MSC_LockUcm();
184                for(i = 0; i < TotalUcmCount; i++)
185                {
186                        uid=App_Ucm_GetNextChannelNumber(i, TRUE, FALSE);
187                        if(uid<=0) break;
188                        idx=DMW_MSC_Uid2Index(uid);
189                        App_Ucm_GetShortInfobyIndex(idx, &ucm_info);
190                                       
191                        if(!App_Ucm_CheckHiddenCh(idx) && 
192                        (!App_Ucm_CheckDisabledCh(idx) || ChannelInfo.nUid == ucm_info.uid))
193                        {       
194                                // cafrii 101209
195                                // ¸ðµç ä³ÎÀÌ ´Ù ä³Î edit¿¡ Æ÷ÇÔµÇÁö ¾ÊÀ½À¸·Î ÀÎÇÑ ¼öÁ¤..
196                                App_Ucm_GetShortInfobyIndex(idx, &s_chinfo[numCh]);
197                       
198                                if(ChannelInfo.nUid == s_chinfo[numCh].uid)
199                                        *nCurChPos = numCh;
200                               
201                                numCh++;
202                        }
203                }
204               
205                DMW_MSC_UnlockUcm();
206        }
207        else {
208        DMW_MSC_LockUcm();
209
210        for(i=0 ; i<TotalUcmCount ; i++) 
211        {
212                App_Ucm_GetShortInfobyIndex(i, &ucm_info);
213
214                // cafrii 101208
215                // ÇöÀç ½Ãû ä³ÎÀº ¼³·É disabled ¶ó°í ÇÏ´õ¶óµµ chedit list¿¡ Ãß°¡ÇÔ.
216                if(!App_Ucm_CheckHiddenCh(i) && 
217                        (!App_Ucm_CheckDisabledCh(i) || ChannelInfo.nUid == ucm_info.uid))
218                {       
219                        // cafrii 101209
220                        // ¸ðµç ä³ÎÀÌ ´Ù ä³Î edit¿¡ Æ÷ÇÔµÇÁö ¾ÊÀ½À¸·Î ÀÎÇÑ ¼öÁ¤..
221                        App_Ucm_GetShortInfobyIndex(i, &s_chinfo[numCh]);
222                       
223                        if(ChannelInfo.nUid == s_chinfo[numCh].uid)
224                                *nCurChPos = numCh;
225                       
226                        numCh++;
227                }
228        }
229
230        DMW_MSC_UnlockUcm();
231        }
232
233        return numCh;
234}
235
236
237void App_Save_ChEdit(void)
238{
239        int idx;
240        int i;
241               
242        DMW_MSC_LockUcm();
243       
244        for(i=0; i<s_numch; i++)
245        {
246                idx = DMW_MSC_Uid2Index(s_chinfo[i].uid);
247                App_Ucm_SetChinfo_AddFav(idx, s_chinfo[i].bAdd, s_chinfo[i].bFav);
248
249        }
250        DMW_MSC_UnlockUcm();
251
252        App_NVM_SaveUcm();
253}
254
255
256BOOL App_Proc_ChEdit(tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2)
257{
258        BOOL bret=TRUE;
259        tDMG_Menu *pmenu;
260        int nUid = -1;
261       
262        dprint(1, "%s proc : cmd(%s:%x), param1(%x), param2(%x)\n", 
263                __FUNCTION__, DMG_CMD_STR(cmd), cmd, param1, param2);
264       
265        switch(cmd) {
266                case eDMG_CMD_ON_MENU_ACTIVE :
267                        pmenu=(tDMG_Menu *)param1;
268                       
269                        pmenu->param1=0;        // x ÁÂÇ¥
270                        s_chDrawStIdx = 0;
271                        s_numch = App_ChEditLoadData((int *)(&(pmenu->param2)));
272                       
273                        if(s_numch==0) {
274                                APP_OSD_DrawWarningBanner(2, FALSE);
275                                break;
276                        }
277                       
278                        App_CalculateChDrawStIdx(&s_chDrawStIdx,(int *)(&pmenu->param2));                       
279                        s_bChEditChange =  FALSE;
280                       
281                        App_OSD_DrawChEditBG();
282                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
283                        DMG_SetTimer(TIMER_ID_CHEDIT, 1500, 0);                 
284                        break;
285                       
286                case eDMG_CMD_ON_MENU_INVISIBLE :
287                case eDMG_CMD_ON_MENU_INACTIVE :
288                        break;
289                       
290                case eDMG_CMD_ON_MENU_EXIT :
291                       
292                        if(s_numch==0) break;
293                       
294                        if(s_bChEditChange == TRUE)
295                        {
296                                // save
297                        }
298                        DHL_OS_Free((void **)&s_chinfo);
299                        s_chinfo = NULL;
300                        s_numch = 0;                   
301                        App_OSD_EraseChEditBG();
302                        DMG_KillTimer(TIMER_ID_CHEDIT);
303                        break;
304                       
305                case eDMG_CMD_ON_KEY :
306                        pmenu=DMG_GetCurMenu();
307                       
308                        switch(param2) {
309                                case APP_VK_LEFT :
310                                        if(pmenu->param1 == 0 || s_numch==0)
311                                                break;
312                                        else
313                                                pmenu->param1=0;
314
315                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
316                                        break;
317                               
318                                case APP_VK_RIGHT :
319                                        if(pmenu->param1 == 1 || s_numch==0)
320                                                break;
321                                        else
322                                                pmenu->param1=1;       
323
324                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
325                                        break;
326                                       
327                                case APP_VK_UP :
328                                        if(s_numch == 0) break;                                         
329                                               
330                                        if(pmenu->param2 == 0)
331                                                pmenu->param2 = s_numch-1;
332                                        else 
333                                                pmenu->param2--;
334                                               
335                                        dprint(2, "channel position:%d // total channel:%d \n", s_chinfo[pmenu->param2].uid, s_numch-1);
336                                        App_CalculateChDrawStIdx(&s_chDrawStIdx, (int *)(&pmenu->param2));
337                                       
338                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);
339                                        DMG_AutoRefresh();
340                                       
341                                        App_TuneChannelByUid(s_chinfo[pmenu->param2].uid);
342                                        DMG_SetTimer(TIMER_ID_CHEDIT, 1500, 0);
343                                        break;
344                                       
345                                case APP_VK_DOWN :
346                                        if(s_numch == 0) break;
347                                               
348                                        if(pmenu->param2 == s_numch-1)
349                                                pmenu->param2 = 0;
350                                        else
351                                                pmenu->param2++;
352                                       
353                                        dprint(2, "channel position:%d // total channel:%d \n", s_chinfo[pmenu->param2].uid, s_numch+1);
354                                       
355                                        App_CalculateChDrawStIdx(&s_chDrawStIdx,(int *)(&pmenu->param2));
356                                       
357                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
358                                        DMG_AutoRefresh();
359                                       
360                                        App_TuneChannelByUid(s_chinfo[pmenu->param2].uid);
361                                        DMG_SetTimer(TIMER_ID_CHEDIT, 1500, 0);
362                                        break;
363                               
364                                case APP_VK_SELECT :
365                                       
366                                        if(s_numch==0) break;
367                                       
368                                        if(pmenu->param1 == 0)  //Add-Item
369                                        {
370                                                BOOL bNeedChangeFavCol = FALSE;
371                                               
372                                                if(s_chinfo[pmenu->param2].bAdd)
373                                                {
374                                                        s_chinfo[pmenu->param2].bAdd = FALSE;
375                                                       
376                                                        if(s_chinfo[pmenu->param2].bFav)
377                                                        {
378                                                                s_chinfo[pmenu->param2].bFav = FALSE;
379                                                                bNeedChangeFavCol= TRUE;
380                                                        }
381                                                }
382                                                else
383                                                        s_chinfo[pmenu->param2].bAdd = TRUE;
384                                               
385                                                dprint(5, "bNeedChangeFavCol(%d)? it doesn't be used !!\n", bNeedChangeFavCol);
386                                                       
387                                                s_bChEditChange = TRUE;
388                                               
389                                                App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
390                                        }
391                                        else                            // Fav-Item
392                                        {
393                                                if(s_chinfo[pmenu->param2].bAdd)
394                                                {
395                                                        if(s_chinfo[pmenu->param2].bFav)
396                                                                s_chinfo[pmenu->param2].bFav = FALSE;
397                                                        else
398                                                                s_chinfo[pmenu->param2].bFav = TRUE;
399
400                                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
401                                                       
402                                                        s_bChEditChange = TRUE;
403                                                }
404                                        }                       
405                                        break;
406                               
407                                case APP_VK_CH_UP :
408                                        if(s_numch == 0) break;                                         
409                                       
410                                        if(pmenu->param2 > 0) {
411                                               
412                                                if(pmenu->param2>=7)
413                                                        pmenu->param2 -= 7;
414                                                else
415                                                        pmenu->param2 = 0;
416                                                //if(pmenu->param2 < 7) pmenu->param2 = 0;
417                                                //else                  pmenu->param2 -= 6;
418                                        }
419                                        else { // ¸Ç À§¿¡¼­ page upÇÒ °æ¿ì¿¡´Â Ch List ¸Ç ¾Æ·¡·Î À̵¿ÇÑ´Ù.
420                                                pmenu->param2 = s_numch-1;
421                                        }
422                                        dprint(2, "channel position:%d // total channel:%d \n", s_chinfo[pmenu->param2].uid, s_numch-1);
423                                       
424                                        App_CalculateChDrawStIdx(&s_chDrawStIdx, (int *)(&pmenu->param2));
425                                       
426                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
427                                        DMG_AutoRefresh();
428                                       
429                                        App_TuneChannelByUid(s_chinfo[pmenu->param2].uid);
430                                        DMG_SetTimer(TIMER_ID_CHEDIT, 1500, 0);
431                                        break;
432                                       
433                                case APP_VK_CH_DOWN :
434                                        if(s_numch == 0) break;
435                                       
436                                        if(pmenu->param2 < s_numch-1) {
437                                                //if(pmenu->param2+6 < 7) pmenu->param2 += 6;
438                                                //else                    pmenu->param2 = s_numch-1;
439                                                pmenu->param2 += 7;
440                                                if(pmenu->param2 > s_numch-1) pmenu->param2 = s_numch-1;
441                                        }
442                                        else { // ¸Ç ¾Æ·¡¿¡¼­ page downÇÒ °æ¿ì¿¡´Â Ch List ¸Ç À§·Î À̵¿ÇÑ´Ù.
443                                                pmenu->param2 = 0;
444                                        }
445                                        dprint(2, "channel position:%d // total channel:%d \n", s_chinfo[pmenu->param2].uid, s_numch-1);
446                                       
447                                        App_CalculateChDrawStIdx(&s_chDrawStIdx,(int *)(&pmenu->param2));
448                                        App_OSD_DrawChEditData(pmenu->param1, pmenu->param2, s_chDrawStIdx, s_chinfo, s_numch);                                 
449                                        DMG_AutoRefresh();
450                                       
451                                        App_TuneChannelByUid(s_chinfo[pmenu->param2].uid);
452                                        DMG_SetTimer(TIMER_ID_CHEDIT, 1500, 0);
453                                        break;
454                               
455                                case APP_VK_BACK :
456                                case APP_VK_MENU :
457                                        App_Save_ChEdit();
458                                        DMG_MenuExit(MID_CHEDIT);
459                                        break;
460                                       
461                                case APP_VK_FAV :
462                                case APP_VK_PREV_CH :
463                                        break;
464                                       
465                                default :
466                                        bret=FALSE;
467                        }
468                       
469                        break;
470
471                case eDMG_CMD_ON_TIME :
472                        if(param1==TIMER_ID_CHEDIT) {
473
474//                              App_OSD_RedrawChEditSignal();
475                               
476                                // refresh signal
477//                              App_OSD_DrawChEditSignal(SigMon_GetStrength());
478
479                                // refresh icon
480//                              App_OSD_DrawChEditIcon();
481                        }
482                        else
483                                bret=FALSE;
484                        break;
485               
486                case eDMG_CMD_ON_TIMEOUT :
487                        DMG_MenuExit(MID_MAIN);
488                        DMG_MenuExit(MID_CHEDIT);
489                        break;
490                       
491                default :
492                        bret=FALSE;
493                        break;
494       
495        }
496       
497        if(!bret)
498                bret=App_Proc_Idle(cmd, opt, param1, param2);
499               
500        DMG_AutoRefresh();
501       
502        return bret;
503}
504
505
506void App_Menu_CreateChEdit()
507{
508        if(DMG_GetMenu(MID_CHEDIT)) {
509                return;
510        }
511       
512        DMG_CreateMenu(MID_CHEDIT_CFG);
513}
514
515
516
517
518
519/* end of file */
Note: See TracBrowser for help on using the repository browser.