source: svn/newcon3bcm2_21bu/dst/app/src/kview/Proc/App_Proc_Init.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: 26.8 KB
Line 
1/****************************************************************************
2* NAME: App_Proc_Init.c
3*----------------------------------------------------------------------------
4* Copyright (c) DIGITAL STREAM Technology Inc.
5*----------------------------------------------------------------------------
6* CREATED_BY: Yong Dae Park
7* CREATION_DATE: 2009/08/25
8* $Author: x2silo $
9* $Revision: 1.0 $
10* $Date: 2010/01/27 14:07:25 $
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_Fnc_Comm.h"
22
23#include "DHL_Graphic.h"
24#include "DHL_UIO.h"
25
26#include "App_OSD_Common.h"
27#include "App_OSD_Main.h"
28#include "App_OSD_ChEdit.h"
29
30#include "App_Res_Resources.h"
31#include "App_Fnc_Power.h"
32
33#include "App_Priv_KeyMap.h"
34
35
36#define MAX_RCU_VENDOR 4
37
38
39/*_____ D E F I N I T I O N ____________________________________*/
40
41#if COMMENT
42_____DbgPrint_____(){}
43#endif
44
45DHL_MODULE("@p_ini", 0);
46
47
48
49
50
51#if COMMENT
52_____Config_____(){}
53#endif
54
55
56
57#define APP_KEYSEQ_MAX_LEN 8
58        // ¿¬¼Ó Ű ÃÖ´ë ±æÀÌ
59
60#define APP_KEYSEQ_MAX_INTERVAL 2000
61        // °¢ ۵éÀ» 2ÃÊ À̳»¿¡ ¿¬¼ÓÇØ¼­ ´­·¯¾ß ÀԷ ó¸®.
62
63
64#if COMMENT
65_____Types_____(){}
66#endif
67
68
69// backdoor Ű Á¾·ù
70typedef enum
71{
72        eAPP_KEYSEQ_NONE = 0,
73        eAPP_KEYSEQ_REMOCON_TEST,
74        eAPP_KEYSEQ_SERVICE_MENU,
75        eAPP_KEYSEQ_FACTORY_TEST,
76        eAPP_KEYSEQ_RF_UPDATE,
77} eAPP_KEYSEQ;
78
79
80typedef struct
81{
82        eAPP_KEYSEQ id;
83        int num_key;
84        tApp_VK keys[APP_KEYSEQ_MAX_LEN];
85
86} tAPP_KEYSEQ;
87
88
89#if COMMENT
90_____Variables_____(){}
91#endif
92
93
94
95static tAPP_KEYSEQ s_keyseq[] = 
96{
97        {       eAPP_KEYSEQ_REMOCON_TEST,
98                4, { APP_VK_0, APP_VK_MUTE, APP_VK_1, APP_VK_MUTE, },
99        },
100        {       eAPP_KEYSEQ_SERVICE_MENU,
101                7, { APP_VK_0, APP_VK_6, APP_VK_2, APP_VK_5, APP_VK_9, APP_VK_6, APP_VK_MUTE, },
102        },
103        {       eAPP_KEYSEQ_FACTORY_TEST,
104                4, { APP_VK_0, APP_VK_MUTE, APP_VK_3, APP_VK_MUTE, },
105        },
106        {       eAPP_KEYSEQ_RF_UPDATE,
107                4, { APP_VK_0, APP_VK_MUTE, APP_VK_7, APP_VK_MUTE, },
108        },
109        // insert any key sequence here
110
111        {  eAPP_KEYSEQ_NONE, // this should be the LAST!
112        },
113};
114
115
116
117/*_____ F U N C T I O N ________________________________________*/
118
119#if COMMENT
120__COMM_Init() {}
121#endif
122
123/*
124        °¢ vendor º° key map¿¡¼­ vendor Äڵ带 ÃßÃâÇÏ¿© IR driver¿¡ µî·ÏÇÑ´Ù.
125        ÀÌÁ¦ ´õ ÀÌ»ó IR driver¿¡¼­ vendor list¸¦ À¯ÁöÇÒ ÇÊ¿ä ¾ø¾îÁü.
126*/
127static void p_rcv_register_vender_list(void)
128{
129        /*
130                0x0204, // HD5150
131                0x0103, // Houston
132                //0xFB04, // LG family
133                0xFE01, // Namsung
134                0x3412, // D2A1D(WooJin) Only
135                0x9C21, // g_RcuKeyMap_CBL_Americast
136                0xFB0C, // g_RcuKeyMap_SAT_DirectTV
137        */
138
139#if 0
140        #define MAX_RCU_VENDOR 20       
141
142        int k;
143        UINT16 vendor_list[MAX_RCU_VENDOR];
144        int n_vendor = 0;
145       
146        for (k=0; k<sizeof(g_RcuKeyConvTbl)/sizeof(g_RcuKeyConvTbl[0]); k++)
147        {
148                vendor_list[n_vendor] = g_RcuKeyConvTbl[k].vendor_code;
149                n_vendor++;
150               
151                if (n_vendor > MAX_RCU_VENDOR)
152                        break;
153        }
154       
155        DHL_SYS_IR_RegisterVendorList(n_vendor, vendor_list);
156       
157#else
158        // ¹ü¿ë filter ¼³Á¤ API »ç¿ë.
159        tDHL_UIO_InputDataFilter filter;
160        int num_filter = sizeof(g_RcuKeyConvTbl)/sizeof(g_RcuKeyConvTbl[0]);
161        int k;
162       
163        DHL_ASSERT(num_filter < DHL_UIO_MAX_INPUT_FILTER, "too many uio filter");
164       
165        for (k=0; k<num_filter; k++) {
166                filter.filters[k].mask = 0xffff;
167                filter.filters[k].data = g_RcuKeyConvTbl[k].vendor_code;
168        }
169        filter.numFilter = num_filter;
170
171        DHL_UIO_Config(eDHL_UIO_Cfg_InputDataFilter, &filter);
172
173#endif // #if 0
174}
175
176
177static UINT32 p_get_vk_code(tDHL_UIO_Type source, UINT32 data, BOOL bRepeat)
178{
179        int k;
180        App_KeyConvTable *tbl = NULL;
181        App_KeyMapEntry *map;
182
183        UINT16 vendor_code = data & 0xffff;
184        UINT8 key, xor_key;
185        BOOL menu_status;
186
187        key = (data >> 16) & 0xff;
188        xor_key = (data >> 24) & 0xff;
189
190        dprint(3, "G2H: source(%d), data(%08x), repeat(%d)\n", source, data, bRepeat); 
191
192        if(source == eDHL_UIO_INPUT_KEYPAD)
193        {
194                for (k=0; k<sizeof(g_KpdKeyConvTbl)/sizeof(g_KpdKeyConvTbl[0]); k++)
195                        if (g_KpdKeyConvTbl[k].vendor_code == vendor_code)
196                                tbl = &g_KpdKeyConvTbl[k];
197        }
198        else if(source == eDHL_UIO_INPUT_GPIO)
199        {
200                tbl=&g_KpdKeyConvTbl[0];
201                key=data&0xff;
202        }
203        else if(source == eDHL_UIO_INPUT_IR)
204        {
205                if ((key ^ 0xff) != xor_key) {
206                        dprint(0, "!! ir/kpd key xor mismatch, key:0x%x xor:0x%x\n", key, xor_key);
207                        return APP_VK_NONE;
208                }
209               
210                for (k=0; k<sizeof(g_RcuKeyConvTbl)/sizeof(g_RcuKeyConvTbl[0]); k++)
211                        if (g_RcuKeyConvTbl[k].vendor_code == vendor_code)
212                                tbl = &g_RcuKeyConvTbl[k];
213        }
214
215        if (tbl == NULL) {
216                dprint(0, "!! unsupported keypad type 0x%x\n", vendor_code);
217                return APP_VK_NONE;
218        }
219
220        map = tbl->map;
221        for (k=0; k<tbl->num_entry; k++)
222        {
223                if (map[k].raw == key) {
224
225                        if(source == eDHL_UIO_INPUT_KEYPAD || source==eDHL_UIO_INPUT_GPIO) { 
226                                /* arzhna, 100518, osd°¡ display ÁßÀÎÁö¸¦ È®ÀÎ */
227                                menu_status = DMG_GetMenuStatus(MID_MAIN) || DMG_GetMenuStatus(MID_EPG) 
228                                        || DMG_GetMenuStatus(MID_EPG_DETAIL) || DMG_GetMenuStatus(MID_CHEDIT) 
229                                        || DMG_GetMenuStatus(MID_SETUP_WIZARD);
230
231                                /*      arzhna, 100518
232                                        kpd ÀÏ °æ¿ì menu°¡ display µÇÁö ¾ÊÀ» ½Ã ch, vol up/down À¸·Î ó¸® ÇÑ´Ù.
233                                        key map¿¡¼­ ch, vol up/donwÀº navigation key °ª¿¡ KPD_NO_MENU_ACTION_CODE¸¦ ´õÇØ Á¤ÀÇÇÑ´Ù.
234                                */
235                                if((!menu_status) && (map[k].g2h >= APP_VK_UP) && (map[k].g2h <= APP_VK_RIGHT)){
236                                        key = key | KPD_NO_MENU_ACTION_CODE;
237                                        continue;
238                                }
239                               
240                        }
241                       
242                        /*ÇØ»óµµ º¯°æ ŰÀÇ °æ¿ì, óÀ½¿¡ ¿À´Â Ű´Â ¹«½ÃÇÔ*/
243                        if(map[k].g2h==APP_VK_RESOLUTION && bRepeat==FALSE) { 
244                                //return APP_VK_NONE;
245                                //ÇöÀç ÇØ»óµµ¸¦ popup ÇüÅ·Πº¸¿©Áà¾ß Çϴµ¥...
246                                return APP_VK_CUSTOM0;
247                        }
248                       
249                        //neverdai add 080502 °æ¿ì¿¡ µû¶ó repeat key 󸮸¦ ´Þ¸®ÇÔ
250                        if(bRepeat && !map[k].bUseRepeat) return APP_VK_NONE;
251                       
252                        dprint(3, "key conv: %s %x --> [%d]:%x\n", tbl->vendor_name, data, k, map[k].g2h);
253                        return map[k].g2h;
254                }
255        }
256        dprint(0, "!! unsupported ir key 0x%02x in vendor 0x%04x\n", key, vendor_code);
257
258        return APP_VK_NONE;
259}
260
261// todo
262//  ¾Æ·¡ ¼ýÀÚ·Î µÈ °ªµéÀ» config ºÎºÐÀ¸·Î ¸ð¾Æ Á¤¸®ÇÒ °Í..
263static void p_chk_repeat_isr(tDHL_UIO_Type source, UINT32 data, tDHL_UIO_RepeatSetting *settings)
264{
265        UINT32 vk = p_get_vk_code(source, data, 1);
266
267        if (vk == APP_VK_UP || vk == APP_VK_DOWN || vk == APP_VK_LEFT || vk == APP_VK_RIGHT) {
268                settings->msIntervalFirst = 400;
269                settings->msIntervalNext = 300;
270        }
271        else if (vk == APP_VK_CH_UP || vk == APP_VK_CH_DOWN || vk == APP_VK_FAV) {
272                settings->msIntervalFirst = 800;
273                settings->msIntervalNext = 800;
274        }
275        else if (vk == APP_VK_VOL_UP || vk == APP_VK_VOL_DOWN) {
276                settings->msIntervalFirst = 400;
277                settings->msIntervalNext = 200;
278        }
279        else if (vk == APP_VK_RESOLUTION) { 
280                /* ÇØ»óµµ º¯°æÀÌ »ç¿ëÀÚÀÇ ½Ç¼ö·Î ÀϾÁö ¾Ê±â À§ÇØ ÃÖ¼Ò 2Ãʸ¦ ´­·¯¾ß ½ÇÇàµÇµµ·Ï ÇÔ,
281                        ¶ÇÇÑ °è¼Ó ´©¸£°í ÀÖÀ¸¸é 4ÃÊ °£°ÝÀ¸·Î ۰¡ ¹ß»ýÇϵµ·Ï ÇÔ */
282                settings->msIntervalFirst =2000; 
283                settings->msIntervalNext = 4000;
284        }
285        else {
286                settings->msIntervalFirst = 0;
287                settings->msIntervalNext = 0;
288        }
289}
290
291
292
293/* »õ·Î ÀÔ·ÂµÈ Å°¸¦ queue¿¡ ³Ö°í backdoor Ű Á¶ÇÕ¿¡ ¸Â´ÂÁö üũ.
294  ¸ÂÀ¸¸é id ¸®ÅÏ.
295*/
296eAPP_KEYSEQ p_check_key_sequence(tApp_VK key)
297{
298        static tApp_VK s_que[APP_KEYSEQ_MAX_LEN];
299        static UINT32  s_lastputtime;
300
301        int i;
302        UINT32 now;
303
304        // check key press interval
305        now = DHL_OS_GetMsCount();
306        if (now - s_lastputtime > APP_KEYSEQ_MAX_INTERVAL) {
307                memset(s_que, 0, sizeof(s_que));
308        }
309        s_lastputtime = now;
310       
311        // add (append) key history queue
312        memmove(&s_que[0], &s_que[1], sizeof(s_que)-sizeof(s_que[0])); // shift to front
313        s_que[APP_KEYSEQ_MAX_LEN-1] = (tApp_VK)key;   // append to last position
314
315        // check any pattern match.
316        for (i=0; s_keyseq[i].id!=eAPP_KEYSEQ_NONE; i++)
317        {
318                if (memcmp(&s_que[APP_KEYSEQ_MAX_LEN-s_keyseq[i].num_key], 
319                                s_keyseq[i].keys, 
320                                s_keyseq[i].num_key*sizeof(tApp_VK))==0)
321                        return s_keyseq[i].id;
322        }
323
324        return eAPP_KEYSEQ_NONE;
325}
326
327
328#if 0
329static BOOL p_check_remocon_test(tApp_VK vk)
330{
331        static int idx=0;
332        static tApp_VK vk_remocon_test[]={APP_VK_0, APP_VK_MUTE, APP_VK_1, APP_VK_MUTE};
333       
334        if(vk_remocon_test[idx]!=vk) {
335                idx=0;
336                if(vk_remocon_test[idx]==vk) idx++;
337        }
338        else {
339                idx++;
340               
341                if(idx>=4) {
342                        idx=0;
343                        return TRUE;
344                }
345        }
346        return FALSE;
347}
348#endif
349
350static void p_ir_key_isr(tDHL_UIO_Type source, UINT32 data, tDHL_UIO_Flag flag)
351{
352        UINT32 vk = p_get_vk_code(source, data, flag & DHL_UIO_FLAG_IsRepeat ? 1 : 0);
353       
354#if TO_TEST
355        // todo
356        // ¾Æ·¡ power state üũ ÇÏ´Â ºÎºÐÀº Á» ´õ °ËÅ並 ÇØ º¼ °Í!!
357        if (App_Pwr_GetPowerState() != eNEO_PS_NORMAL && vk != APP_VK_POWER_OFF) {
358                char *RCU_KEY_STR(UINT32 id);
359                dprint(0, "!! standby mode! key press %x (%s) ignored!\n", vk, RCU_KEY_STR(vk));
360                return;
361        }
362#endif // #if TO_TEST
363        // standby ¸ðµå¿¡¼­´Â key seq µ¿ÀÛÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÔ.. todo..
364        switch (p_check_key_sequence((tApp_VK)vk))
365        {
366                case eAPP_KEYSEQ_REMOCON_TEST:
367                        App_Menu_StartFactory(eAPP_FAC_REMOCON_TEST);
368                        return;
369                case eAPP_KEYSEQ_SERVICE_MENU:
370                        App_Menu_StartFactory(eAPP_FAC_SERVICE_MENU);
371                        return;
372                case eAPP_KEYSEQ_FACTORY_TEST:
373                        App_Menu_StartFactory(eAPP_FAC_CH_TEST);
374                        return;
375                case eAPP_KEYSEQ_RF_UPDATE:
376                        App_RFUpdateTuneKBS_RF18(); // megakiss 2012.10.30
377                        // App_Menu_StartFactory(eAPP_FAC_RF_UPDATE);
378                        return;
379        }
380#if 0
381        //¿©±â¼­ factory check¸¦ ÇÏÀÚ..
382        if(p_check_remocon_test((tApp_VK)vk)) {
383                App_Menu_StartFactory(eAPP_FAC_REMOCON_TEST);
384                return; //¹Ù·Î ³Ñ±è
385        }
386#endif
387
388        DMG_SetKeyInput(vk);
389       
390        if(App_Menu_GetLedMode()!=0)
391                DHL_UIO_Control(eDHL_UIO_CT_LED, GPIO_LED_G, 0);
392        else
393                DHL_UIO_Control(eDHL_UIO_CT_LED, GPIO_LED_R, 0);
394                       
395        DHL_OS_Delay(100);
396       
397        if(App_Menu_GetLedMode()!=0)
398                DHL_UIO_Control(eDHL_UIO_CT_LED, GPIO_LED_G, 1);
399        else
400                DHL_UIO_Control(eDHL_UIO_CT_LED, GPIO_LED_R, 1);
401       
402}
403
404
405
406
407
408#if COMMENT
409__Menu_Manage_Proc__() {}
410#endif
411
412#define IS_NON_PERSISTENT_MENU(m) ( \
413                (m)==MID_CH_BANNER || \
414                (m)==MID_VOL_BANNER || \
415                (m)==MID_POPUP_BANNER || \
416                (m)==MID_INFO_BANNER || \
417        0)
418       
419static tDMG_MenuManange p_menu_manage_proc(tDMG_MenuManageParam *pmanage_param)
420{
421        tDMG_MenuManange menu_ret;
422        tDMG_MenuId prev = pmanage_param->active_id;
423       
424        dprint(0, "### menu_manage_proc\n");
425       
426        if(pmanage_param->is_start) {
427               
428                switch(pmanage_param->action_id) {
429                       
430                        case MID_STANDBY:
431                                menu_ret=eDMG_MENU_MANAGE_EXIT_ALL_AND_DRAW;
432                                break;
433                       
434                        case MID_CC :
435                        case MID_IDLE :
436                                /* ±âÁ¸ ¸Þ´º°¡ ¾øÀ» ¶§¿¡¸¸ ¶ç¿ò */
437                                menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
438                                break;
439                               
440                        case MID_EPG :
441                        case MID_MAIN :                                      // XXÀÏ ¶§, MainMenu³ª EPG¸¦ µ¿ÀÛÇϸé...
442                                if(pmanage_param->active_id==MID_CH_BANNER)        // CH bannerÀÏ ¶§, MainMenu¸¦ µ¿ÀÛÇϸé,
443                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;    // ±×¸®±â Àü¿¡ CH banner¸¦ ´Ý´Â´Ù.
444                                else if(pmanage_param->active_id==MID_HTML_LIST)   // HTML ÀÏ ¶§, MainMenu¸¦ µ¿ÀÛÇϸé,
445                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;    // ±×¸®±â Àü¿¡ HTMLÀ» ´Ý´Â´Ù.
446                                else if(pmanage_param->active_id==MID_INFO_BANNER) // Info banner ÀÏ ¶§, MainMenu¸¦ µ¿ÀÛÇϸé,
447                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;    // ±×¸®±â Àü¿¡ Info banner¸¦ ´Ý´Â´Ù.
448                                else if(pmanage_param->active_id==MID_POPUP_BANNER)// Popup banner ÀÏ ¶§, MainMenu¸¦ µ¿ÀÛÇϸé,
449                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;    // ±×¸®±â Àü¿¡ Popup banner¸¦ ´Ý´Â´Ù.
450                                else if(pmanage_param->active_id==MID_SLEEP_TIMER)// Popup banner ÀÏ ¶§, MainMenu¸¦ µ¿ÀÛÇϸé,
451                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;    // ±×¸®±â Àü¿¡ Popup banner¸¦ ´Ý´Â´Ù.
452                                else if(pmanage_param->active_id==MID_VOL_BANNER)  // Volume ÀÏ ¶§, MainMenu¸¦ µ¿ÀÛÇϸé,
453                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;    // ±×¸®±â Àü¿¡ Volume banner¸¦ ´Ý´Â´Ù.
454                                else if(pmanage_param->active_id==MID_SIGNAL_BANNER)
455                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
456                                else if(pmanage_param->active_id==MID_EA)
457                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
458                                else
459                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;    // MainMenu³ª EPG ±×¸®±â Àü¿¡ ÀÌÀü ¸Þ´º¸¦ ¼û±â´Â °ÍÀÌ ±âº»µ¿ÀÛ
460                                break;
461                               
462                        case MID_INFO_BANNER :
463                                if(pmanage_param->active_id==MID_CH_BANNER)        // XXÀÏ ¶§, Info banner¸¦ µ¿ÀÛÇϸé...
464                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
465                                else if(pmanage_param->active_id==MID_POPUP_BANNER)
466                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
467                                else if(pmanage_param->active_id==MID_SLEEP_TIMER)
468                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
469                                else if(pmanage_param->active_id==MID_VOL_BANNER)
470                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
471                                else if(pmanage_param->active_id==MID_EA)
472                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
473                                else if(pmanage_param->active_id==MID_MAIN)        // MainMenuÀÏ ¶§, Info banner¸¦ µ¿ÀÛÇϸé,
474                                        menu_ret=eDMG_MENU_MANAGE_DENY;                  // ¾Æ¹«µ¿ÀÛ ÇÏÁö ¾Ê´Â´Ù.
475                                else
476                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;    // Info banner¸¦ ±×¸®±â Àü¿¡ ÀÌÀü ¸Þ´º¸¦ ¼û±â´Â °ÍÀÌ ±âº»µ¿ÀÛ
477                                break;
478                               
479                        case MID_CH_BANNER :                                 // XXÀÏ ¶§, CH banner°¡ ºÒ¸®¸é...
480                                /* cafrii comment
481                                                neverdai¿Í ÇùÀÇÇÑ °á°ú, ÇöÀç priority base default actionÀÌ ±¸ÇöÀÌ ¾ÈµÈ »óÅÂ¶ó¼­ ¹®Á¦ÀÓ.
482                                                if else if else µî°ú °°ÀÌ ¸ðµç case¿¡ ´ëÀÀÇÏ´Â ¹æ¹ýÀº ÁÁÁö ¾ÊÀ½.
483                                                ÀÏ´Ü CH_BANNER ºÎºÐ ¿©±â¼­¸¸ Á¦ÇÑÀûÀ¸·Î priority ¹æ½ÄÀ¸·Î ¼öÁ¤.
484                                                ´Ù¸¥ ¸ðµç ºÎºÐµµ ¸ðµÎ Á¡°ËÀÌ ÇÊ¿äÇÔ.
485                                */
486                                if(0) /* priority¿¡ ÀÇÇÑ rule¿¡ ¾î±ß³ª´Â µ¿ÀÛÀ» ÇØ¾ß ÇÏ´Â ¿¹¿Ü¸¦ À̰÷¿¡ µÐ´Ù. */
487                                        ;
488                                else {
489                                        /* priority rule¿¡ µû¸¥ µðÆúÆ® µ¿ÀÛ..
490                                                ÀÌ ÄÚµå´Â ó¸® ¾ÈµÈ ¸ðµç case¿¡ ´ëÇØ µ¿ÀÛÇÒ ¼ö ÀÖµµ·Ï À§Ä¡°¡ ¿Å°ÜÁ®¾ß ¸¶¶¥ÇÔ.
491                                        */
492                                        if(pmanage_param->active_id < MID_CH_BANNER)
493                                                // if ch banner has lower priority than current active menu,
494                                                // deny ch banner.
495                                                menu_ret=eDMG_MENU_MANAGE_DENY;
496                                        else if(pmanage_param->active_id==MID_FACTORY)
497                                                menu_ret=eDMG_MENU_MANAGE_DENY;
498                                        else if(pmanage_param->active_id==MID_VOL_BANNER ||
499                                                pmanage_param->active_id==MID_POPUP_BANNER ||
500                                                pmanage_param->active_id==MID_EA ||
501                                                pmanage_param->active_id==MID_SLEEP_TIMER)
502                                                menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
503                                        else
504                                                menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
505                                }
506                                break;
507
508                        case MID_SCAN_BANNER:
509                                if (IS_NON_PERSISTENT_MENU(prev))
510                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
511                                else if (prev < MID_SCAN_BANNER)
512                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
513                                else if(pmanage_param->active_id==MID_CH_BANNER)
514                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
515                                else
516                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
517                                break;
518                               
519                        case MID_HTML_LIST :                                 // XXÀÏ ¶§, HTML page°¡ µ¿ÀÛÇϸé...
520                                /* 2010.04.20 foxhunt
521                                 * Host MMI´Â priority°¡ ³·±â ¶§¹®¿¡ ´Ù¸¥ ¸Þ´º¿Í °ãÄ¡¸é, Á¤±ÛÆùÆ®ÀÇ ¼Ó¼ºÀÌ ´Ù¸¥ ¸Þ´º¿¡µµ Àû¿ëµÉ ¼ö ÀÖ´Ù.
522                                 * priority¸¦ ³ôÀ̰ųª ´ÙÀ½°ú °°ÀÌ ´Ù¸¥ ¸Þ´º µ¿À۽ÿ¡´Â deny¸¦ Àû¿ëÇϵµ·Ï ÇÑ´Ù. */
523                                if(pmanage_param->active_id==MID_AUTOSCAN)
524                                        menu_ret=eDMG_MENU_MANAGE_DENY;
525                                else if(pmanage_param->active_id==MID_CHEDIT)
526                                        menu_ret=eDMG_MENU_MANAGE_DENY;
527                                else if(pmanage_param->active_id==MID_EPG)
528                                        menu_ret=eDMG_MENU_MANAGE_DENY;
529                                else if(pmanage_param->active_id==MID_INFO_BANNER)
530                                        menu_ret=eDMG_MENU_MANAGE_DENY;
531                                else if(pmanage_param->active_id==MID_MAIN)
532                                        menu_ret=eDMG_MENU_MANAGE_DENY;
533                                else if(pmanage_param->active_id==MID_RRT)
534                                        menu_ret=eDMG_MENU_MANAGE_DENY; 
535                                else if(pmanage_param->active_id==MID_SIGNAL_BANNER)
536                                        menu_ret=eDMG_MENU_MANAGE_DENY;
537                                else if(pmanage_param->active_id==MID_CARD_ON)
538                                        menu_ret=eDMG_MENU_MANAGE_DENY;
539                                else if(pmanage_param->active_id==MID_CH_BANNER)
540                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
541                                else if(pmanage_param->active_id==MID_VOL_BANNER)
542                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
543                                else if(pmanage_param->active_id==MID_POPUP_BANNER)
544                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
545                                else if(pmanage_param->active_id==MID_SLEEP_TIMER)
546                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
547                                else if(pmanage_param->active_id==MID_WAIT_HOST_MMI)
548                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
549                                else
550                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
551                                break;
552
553                        case MID_VOL_BANNER:                                 // XXÀÏ ¶§, Volume or Popup banner°¡ µ¿ÀÛÇϸé...
554                        case MID_POPUP_BANNER:
555                        case MID_SLEEP_TIMER:                           
556                                if(pmanage_param->active_id==MID_AUTOSCAN)
557                                        menu_ret=eDMG_MENU_MANAGE_DENY;
558                                else if(pmanage_param->active_id==MID_CHEDIT)
559                                        menu_ret=eDMG_MENU_MANAGE_DENY;
560                                else if(pmanage_param->active_id==MID_EPG)
561                                        menu_ret=eDMG_MENU_MANAGE_DENY;
562                                else if(pmanage_param->active_id==MID_EPG_DETAIL)
563                                        menu_ret=eDMG_MENU_MANAGE_DENY;
564                                else if(pmanage_param->active_id==MID_MAIN)
565                                        menu_ret=eDMG_MENU_MANAGE_DENY;
566                                else if(pmanage_param->active_id==MID_SIGNAL_BANNER)
567                                        menu_ret=eDMG_MENU_MANAGE_DENY;
568                                else if(pmanage_param->active_id==MID_CH_BANNER)
569                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
570                                else if(pmanage_param->active_id==MID_VOL_BANNER ||
571                                                                pmanage_param->active_id==MID_EA ||
572                                              pmanage_param->active_id==MID_POPUP_BANNER ||
573                                              pmanage_param->active_id==MID_SLEEP_TIMER)
574                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
575                                else
576                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
577                                break;
578                               
579                        case MID_RATING :
580                                if(pmanage_param->active_id>MID_RATING)
581                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
582                                else
583                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
584                                break;
585                       
586                        case MID_SIG_MON :
587                                if(pmanage_param->active_id==MID_IDLE || pmanage_param->active_id==MID_CC)
588                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
589                                else
590                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
591                                break;
592/*                     
593                        case MID_SI_STATE :
594                                if(pmanage_param->active_id==MID_HTML_MMI_CARD)
595                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
596                                else
597                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
598                                break;
599*/                     
600                        case MID_NO_CH_GUIDE :
601                                if(pmanage_param->active_id==MID_AUTOSCAN)
602                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
603                                else if(pmanage_param->active_id==MID_CARD_ON)
604                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
605                                else if(pmanage_param->active_id==MID_HTML_MMI_CARD)
606                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
607                                else if(pmanage_param->active_id==MID_MAIN)
608                                        menu_ret=eDMG_MENU_MANAGE_DENY_BUT_HIDE;
609                                else
610                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
611                                break;
612                       
613                        case MID_WAIT_HOST_MMI :
614                                if(pmanage_param->active_id==MID_CARD_ON)
615                                        menu_ret=eDMG_MENU_MANAGE_DENY;
616                                else
617                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
618                                break;
619                       
620                        case MID_AUTOSCAN :
621                        case MID_AUTO_OFF :
622                        case MID_CARD_ON :
623                        case MID_CHEDIT :
624                        case MID_EPG_DETAIL :
625                        case MID_HTML_MMI :
626                        case MID_HTML_MMI_CARD :
627                        case MID_RRT :
628                                if(pmanage_param->active_id==MID_CH_BANNER)
629                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
630                                else
631                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
632                                break;
633                               
634                        case MID_SIGNAL_BANNER : // 2010.02.25 foxhunt : ¼³Á¤ÇØÁÖÁö ¾ÊÀ¸¸é MainMenu-Signal Strength¿¡¼­ hang-up
635                                if(pmanage_param->active_id==MID_CH_BANNER)
636                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
637                                else if(
638                                         pmanage_param->active_id==MID_EPG_DETAIL ||
639                                         pmanage_param->active_id==MID_EPG ||
640                                         pmanage_param->active_id==MID_AUTOSCAN ||
641                                         pmanage_param->active_id==MID_CHEDIT ||
642                                         /*pmanage_param->active_id==MID_MAIN ||*/
643                                         pmanage_param->active_id==MID_INFO_BANNER ||
644                                         pmanage_param->active_id==MID_CH_BANNER)
645                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
646                                else if(pmanage_param->active_id==MID_EPG_DETAIL)
647                                        menu_ret=eDMG_MENU_MANAGE_DENY;
648                                else
649                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
650                                break;
651                       
652                        case MID_FACTORY :
653                                if(pmanage_param->active_id==MID_CH_BANNER ||
654                                        pmanage_param->active_id==MID_SETUP_WIZARD)
655                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
656                                else
657                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
658                                break;
659                       
660                        case MID_EA :
661                                if(pmanage_param->active_id==MID_VOL_BANNER ||
662                                         pmanage_param->active_id==MID_POPUP_BANNER ||
663                                         pmanage_param->active_id==MID_SLEEP_TIMER)
664                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
665                                else if(pmanage_param->active_id==MID_CH_BANNER)
666                                        menu_ret=eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW;
667                                else if(pmanage_param->active_id<=MID_RATING)
668                                         menu_ret=eDMG_MENU_MANAGE_DENY;
669                                else
670                                        menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
671                               
672                                break;
673                               
674                        case MID_SETUP_WIZARD :
675                                menu_ret=eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW;
676                                break;
677                               
678                        default:
679                                DHL_OS_Printf("\n!! invalid mid 0x%x\n", pmanage_param->action_id);
680                                DHL_ASSERT(FALSE, "");
681                                break;
682                }
683               
684                return menu_ret;
685        }
686       
687        /* end */
688        menu_ret=eDMG_MENU_MANAGE_EXIT;
689       
690        return menu_ret;
691}
692
693
694
695
696
697#if COMMENT
698__User_Proc() {}
699#endif
700
701
702BOOL App_Menu_DefUserProc(tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2)
703{
704        /* ? */
705        return FALSE;
706}
707
708
709
710#if COMMENT
711__Menu_Init__() {}
712#endif
713
714
715
716UINT32 *App_Menu_GetVenderPowerCode()
717{
718        static UINT32 vendor_power[MAX_RCU_VENDOR+1];
719        int i, j, idx=0;
720       
721        for (i=0; i<sizeof(g_RcuKeyConvTbl)/sizeof(g_RcuKeyConvTbl[0]); i++)
722        {
723                UINT8 power=0;
724               
725                for(j=0; j<g_RcuKeyConvTbl[i].num_entry; j++) {
726                        if(g_RcuKeyConvTbl[i].map[j].g2h!=APP_VK_POWER_OFF && 
727                                g_RcuKeyConvTbl[i].map[j].g2h!=APP_VK_AD)
728                                continue;
729                               
730                        power=g_RcuKeyConvTbl[i].map[j].raw;
731                        //Á¤ÀǵǾîÀÖ´Â vender code´Â vender1(MSB) vender0(LSB)·Î µÇ¾îÀÖÀ½.
732                        vendor_power[idx++] = 
733                                ((g_RcuKeyConvTbl[i].vendor_code&0xff)<<24) | 
734                                (((g_RcuKeyConvTbl[i].vendor_code>>8)&0xff)<<16) |
735                                (power<<8) | 
736                                (power^0xff);
737                       
738                                if (idx >= MAX_RCU_VENDOR)
739                                        break;
740                }
741               
742                if(idx >= MAX_RCU_VENDOR)
743                        break;
744        }
745       
746        vendor_power[idx]=0;
747       
748        return vendor_power;
749}
750
751
752
753void App_Menu_Init()
754{
755        static BOOL bmenu_inited=FALSE;
756       
757        if(bmenu_inited) return;
758               
759        bmenu_inited=TRUE;
760
761        DMG_DrawInit();
762        DMG_MenuInit(p_menu_manage_proc);
763       
764        {
765                tDMG_FontAttr attr;
766                DMG_GetFontAttr(&attr);
767                attr.font_style=eDMG_FS_KOREAN;
768                DMG_SetFontAttr(&attr);
769                DMG_SetFont(eDMG_FONT_BMF);
770        }
771
772        DHL_CreatePlane(APP_PLANE_DISP, 720, 480, eDHL_PIXELTYPE_ARGB8888);
773        DHL_CreatePlane(APP_PLANE_WRITE, 720, 480, eDHL_PIXELTYPE_ARGB8888);
774        DHL_CreatePlane(APP_PLANE_TEMP1, 720, 480, eDHL_PIXELTYPE_ARGB8888);
775        DHL_CreatePlane(APP_PLANE_TEMP2, 720, 480, eDHL_PIXELTYPE_ARGB8888);
776        DHL_SetDisplayPlane(APP_PLANE_DISP);
777        DMG_SetPlane(APP_PLANE_WRITE);
778
779
780        App_Menu_CreateMain();
781        App_Menu_CreateIdle();
782       
783        App_Menu_CreateScan();
784        App_Menu_CreateCC();
785        App_Menu_CreateChEdit();
786       
787        App_Menu_CreateChBanner();
788        App_Menu_CreateScanBanner();
789        App_Menu_CreateEpg();
790        App_Menu_CreateEpgDetail();
791       
792        App_Menu_CreateRating();
793       
794       
795        App_Menu_CreateInfoBanner();
796        App_Menu_CreatePopupBanner();
797        App_Menu_CreateSleepTimer();
798        App_Menu_CreateSignalBanner();
799        App_Menu_CreateSigMon();
800        App_Menu_CreateEA();
801        App_Menu_CreateVolBanner();
802       
803        App_Menu_CreateStandby();
804        App_Menu_CreateFactory(); /* factory mode */
805       
806        App_Menu_CreateSetupWizard();
807       
808        //App_Menu_CreateWarningBanner();
809       
810        /* key isr µî·Ï */
811        DHL_UIO_RegisterCallback(p_ir_key_isr);
812        p_rcv_register_vender_list();
813        DHL_UIO_Config(eDHL_UIO_Cfg_CheckRepeatCb, (void *)p_chk_repeat_isr);
814
815        /* front µî·Ï - TODO */
816       
817        AppO_BackupMainBG();
818       
819        DMG_MenuStart(MID_IDLE); /* idle task´Â menu initÇÒ ¶§ »ý¼ºÇÔ */
820        dprint(0, "%s is completed\n", __FUNCTION__);
821}
822
823
824
825
826
827#if COMMENT
828__Menu_Etc__() {}
829#endif
830
831
832
833
834
835#if COMMENT
836__Test_Func__() {}
837#endif
838
839void tkbd()
840{
841        extern int DHL_OS_GetChar(void);
842       
843        while(1) 
844        {
845                int ch=DHL_OS_GetChar();
846               
847                /* number & navigation */
848                if(ch>='0' && ch<='9') DMG_SetKeyInput(APP_VK_0+ch-'0');
849                else if(ch=='-') DMG_SetKeyInput(APP_VK_DOT);
850                else if(ch=='j') DMG_SetKeyInput(APP_VK_LEFT);
851                else if(ch=='l') DMG_SetKeyInput(APP_VK_RIGHT);
852                else if(ch=='i') DMG_SetKeyInput(APP_VK_UP);
853                else if(ch=='k') DMG_SetKeyInput(APP_VK_DOWN);
854                else if(ch=='u') DMG_SetKeyInput(APP_VK_BACK);         // previous menu
855                else if(ch=='m') DMG_SetKeyInput(APP_VK_SELECT);       // Select or Info banner
856               
857                /* menu & up/down */
858                else if(ch=='n') DMG_SetKeyInput(APP_VK_MENU);         // Main Menu
859                else if(ch=='p') DMG_SetKeyInput(APP_VK_PREV_CH);      // ÀÌÀüä³Î or HD5150 ¹æ½Ä epg ÀÏ ¶§ ¾²´Â key
860                else if(ch=='v') DMG_SetKeyInput(APP_VK_FAV);          // favorit channel
861                else if(ch=='f') DMG_SetKeyInput(APP_VK_CH_UP);        // Channel up / epg page up
862                else if(ch=='b') DMG_SetKeyInput(APP_VK_CH_DOWN);      // Channel down / epg page down
863                else if(ch==']') DMG_SetKeyInput(APP_VK_VOL_UP);
864                else if(ch=='[') DMG_SetKeyInput(APP_VK_VOL_DOWN);
865               
866                /* hot key */
867                else if(ch=='e') DMG_SetKeyInput(APP_VK_EPG);          // EPG
868                else if(ch=='z') DMG_SetKeyInput(APP_VK_MUTE);         // sound mute
869                else if(ch=='a') DMG_SetKeyInput(APP_VK_ALANG);        // MTS
870                else if(ch=='c') DMG_SetKeyInput(APP_VK_CC);           // cc
871                else if(ch=='d') DMG_SetKeyInput(APP_VK_DMODE);        // Aspect Ratio
872                else if(ch=='s') DMG_SetKeyInput(APP_VK_SLEEP);        // sleep timer
873                else if(ch=='g') DMG_SetKeyInput(APP_VK_METER);        // signal meter
874                else if(ch=='h') DMG_SetKeyInput(APP_VK_AD);           // HTML mmi
875               
876                /* exit */
877                else if(ch=='q') DMG_SetKeyInput(APP_VK_POWER_OFF);    // TV Power Off
878                else if(ch=='o') {DMG_SetKeyInput(APP_VK_EXIT);break;} // Menu Exit
879                else if(ch=='x') break;                                // tkbd function exit
880        }
881}
882
883
884void tkbd_help()
885{
886        DHL_OS_Printf("\n\n======================================\n");
887        DHL_OS_Printf("\n***** Number & Navigation *****\n");
888        DHL_OS_Printf("  Number and Dot      : 0~9, -\n");
889        DHL_OS_Printf("  Up/Down/Left/Right  : i, k, j, l\n");
890        DHL_OS_Printf("  Select, Info Banner : m\n");
891        DHL_OS_Printf("  Previous Menu(Back) : u\n");
892       
893        DHL_OS_Printf("\n***** Menu & up/down *****\n");
894        DHL_OS_Printf("  MainMenu         : n\n");
895        DHL_OS_Printf("  Previous Channel : p\n");
896        DHL_OS_Printf("  Favorit Channel  : v\n");
897        DHL_OS_Printf("  Channel Up/Down  : f, b\n");
898        DHL_OS_Printf("  Volume Up/Down   : ], [\n");
899       
900        DHL_OS_Printf("\n***** Hot Key *****\n");
901        DHL_OS_Printf("  EPG Menu     : e\n");
902        DHL_OS_Printf("  Mute         : z\n");
903        DHL_OS_Printf("  MTS          : a\n");
904        DHL_OS_Printf("  CC           : c\n");
905        DHL_OS_Printf("  Aspect Ratio : d\n");
906        DHL_OS_Printf("  Sleep Timer  : s\n");
907        DHL_OS_Printf("  Signal Meter : g\n");
908        DHL_OS_Printf("  HTML mmi     : h\n");
909       
910        DHL_OS_Printf("\n***** Exit *****\n");
911        DHL_OS_Printf("  STB Power Off   : q\n");
912        DHL_OS_Printf("  Only Menu Exit  : x\n");
913        DHL_OS_Printf("  Menu & kkk Exit : o\n\n");
914        DHL_OS_Printf("======================================\n\n");
915}
916
917
918void kkk()
919{
920        tkbd_help();
921        tkbd();
922}
923
924
925
926
927
928/* end of file */
Note: See TracBrowser for help on using the repository browser.