source: svn/newcon3bcm2_21bu/dst/app/src/kview/OSD/App_OSD_Banner.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: 43.1 KB
Line 
1/****************************************************************************
2* NAME: App_OSD_Banner.c
3*----------------------------------------------------------------------------
4* Copyright (c) DIGITAL STREAM Technology Inc.
5*----------------------------------------------------------------------------
6* CREATED_BY: Chan Hun Jeon
7* CREATION_DATE: 2009/12/21
8* $Author: chjeon $
9* $Revision: 1.0 $
10* $Date: 2009/12/21 20:01:32 $
11*----------------------------------------------------------------------------
12* PURPOSE:
13* -
14*****************************************************************************/
15
16/*_____ I N C L U D E __________________________________________*/
17
18#include "App_Main.h"
19
20#include "App_Version.h"
21
22#include "App_OSD_Common.h"
23#include "App_Fnc_Common.h"
24
25#include "App_OSD_Banner.h"
26
27#include "App_Fnc_Time.h"
28
29#include "App_Fnc_Ucm.h"
30#include "App_Fnc_Video.h"
31#include "App_Fnc_CC.h"
32#include "App_Fnc_ChTune.h"
33#include "App_Fnc_DigitKeyProc.h"
34#include "App_Fnc_Video.h"
35#include "App_Fnc_Audio.h"
36#include "App_Fnc_Sdds.h"
37#include "App_Fnc_AutoScan.h"
38#include "App_Fnc_Rating.h"
39
40#include "App_Fnc_Comm.h"
41
42#include "App_Res_Resources.h"
43
44#include "DMW_CodeConv.h"
45#include "DMG_Util.h"
46
47#include "DLIB_PSI_Utils.h"
48#include "DMW_Channel.h"
49
50
51/*_____ D E F I N I T I O N ____________________________________*/
52
53#if COMMENT
54____DbgPrint____(){}
55#endif
56
57DHL_MODULE("@o_ban", 0);
58
59
60
61
62
63#if COMMENT
64____Config____(){}
65#endif
66
67
68
69
70
71#if COMMENT
72____Types____(){}
73#endif
74
75
76
77
78
79#if COMMENT
80____Variables____(){}
81#endif
82
83BOOL bWarningBanner = FALSE;
84
85
86
87/*_____ F U N C T I O N ________________________________________*/
88
89
90
91#if COMMENT
92__Channel_Banner__() {}
93#endif
94
95#define CHB_STX 444
96#define CHB_STY 60
97#define CHB_WIDTH 220
98#define CHB_HEIGHT 120
99
100#define CHB_TITLEX 458
101#define CHB_TITLEY 75
102#define CHB_TITLEW 191
103#define CHB_TITLEH 26
104
105#define CHB_CHX 458
106#define CHB_CHY 101
107#define CHB_CHW 191
108#define CHB_CHH 63
109
110#define CHB_CHIMG_W 28
111#define CHB_CHIMG_S_W 18
112#define CHB_CHIMG_DASH_W 16
113#define CHB_CHIMG_H 36
114#define CHB_CHIMG_S_H 24
115#define CHB_CHIMG_DASH_H 6
116
117static void p_draw_ch_banner_png(int major, int minor, char* pch_str)
118{
119        int i=0, temp_index=0;
120        int ch_str_len=0;
121       
122        unsigned char *pimg=NULL;
123        int img_x=0, imt_y=0, temp_x=0;
124        BOOL bCurMajorNum = TRUE;
125        BOOL bError = FALSE;
126        BOOL b345=FALSE;
127                //À̹ÌÁö 3,4,5´Â ¼¼·Î°¡ 27, ³ª¸ÓÁö´Â 24ÀÓ ¤Ñ¤Ñ. º¸Á¤ÀÌ ÇÊ¿äÇÔ.
128       
129        ch_str_len = strlen(pch_str);
130       
131        if(major >= 10000)
132                temp_index=5;
133        if(major >= 1000)
134                temp_index=4;
135        else if(major >= 100)
136                temp_index=3;
137        else if(major >= 10)   
138                temp_index=2;
139        else 
140                temp_index=1;
141        img_x +=temp_index*CHB_CHIMG_W;
142       
143        if(ch_str_len > temp_index)     // '-' °¡ ÀÔ·ÆµÈ »óÅÂÀ̰ųª minor ¹øÈ£±îÁöÀԷµȰæ¿ì
144                img_x +=CHB_CHIMG_DASH_W;               // '-'
145       
146        if(major>=0&&minor != ONE_PART_CHANNEL_INDICATOR&&minor != -1) {
147                if(minor >= 100)        //ÀÏ´Ü 4ÀÚ¸®ÀÎ °æ¿ì´Â °í·ÁÇÏÁö ¾Ê´Â´Ù.
148                        img_x +=3*CHB_CHIMG_S_W;
149                else if(minor >= 10)   
150                        img_x +=2*CHB_CHIMG_S_W;
151                else 
152                        img_x +=1*CHB_CHIMG_S_W;
153        }
154        img_x = CHB_CHX + (CHB_CHW - img_x)/2;
155       
156        temp_index=0;
157        if(pch_str) {
158                for(i=0;i<ch_str_len;i++) {
159                        if(bCurMajorNum) {
160                                switch(pch_str[i])//large number
161                                {
162                                        case '0':
163                                                pimg = DST_channel_banner_0_480;
164                                                break;
165                                        case '1':
166                                                pimg = DST_channel_banner_1_480;
167                                                break;
168                                        case '2':
169                                                pimg = DST_channel_banner_2_480;
170                                                break;
171                                        case '3':
172                                                pimg = DST_channel_banner_3_480;
173                                                break;
174                                        case '4':
175                                                pimg = DST_channel_banner_4_480;
176                                                break;
177                                        case '5':
178                                                pimg = DST_channel_banner_5_480;
179                                                break;
180                                        case '6':
181                                                pimg = DST_channel_banner_6_480;
182                                                break;
183                                        case '7':
184                                                pimg = DST_channel_banner_7_480;
185                                                break;
186                                        case '8':
187                                                pimg = DST_channel_banner_8_480;
188                                                break;
189                                        case '9':
190                                                pimg = DST_channel_banner_9_480;
191                                                break;
192                                        case '-':
193                                                pimg = DST_channel_banner_dash_480;
194                                                bCurMajorNum = FALSE;
195                                                temp_x = (i*CHB_CHIMG_W)+CHB_CHIMG_DASH_W;
196                                                temp_index = i+1;
197                                                break;
198                                        default:
199                                                bError = TRUE;
200                                                break;
201                                }
202                                if(!bError)
203                                        DRAW_IMAGE(img_x+(i*CHB_CHIMG_W), bCurMajorNum?CHB_CHY+(CHB_CHH-CHB_CHIMG_H)/2:
204                                                                CHB_CHY+(CHB_CHH-CHB_CHIMG_DASH_H)/2, pimg);
205                        }
206                        else {
207                                switch(pch_str[i])//small number
208                                {
209                                        case '0':
210                                                pimg = DST_channel_banner_0_s_480;
211                                                break;
212                                        case '1':
213                                                pimg = DST_channel_banner_1_s_480;
214                                                break;
215                                        case '2':
216                                                pimg = DST_channel_banner_2_s_480;
217                                                break;
218                                        case '3':
219                                                pimg = DST_channel_banner_3_s_480;
220                                                break;
221                                        case '4':
222                                                pimg = DST_channel_banner_4_s_480;
223                                                break;
224                                        case '5':
225                                                pimg = DST_channel_banner_5_s_480;
226                                                break;
227                                        case '6':
228                                                pimg = DST_channel_banner_6_s_480;
229                                                break;
230                                        case '7':
231                                                pimg = DST_channel_banner_7_s_480;
232                                                break;
233                                        case '8':
234                                                pimg = DST_channel_banner_8_s_480;
235                                                break;
236                                        case '9':
237                                                pimg = DST_channel_banner_9_s_480;
238                                                break;
239                                        default:
240                                                bError = TRUE;
241                                                break;
242                                }
243                               
244                                if(pch_str[i]>='3' && pch_str[i]<='5') b345=TRUE;
245                                else                                   b345=FALSE;
246                               
247                                if(!bError) {
248                                        int ypos=CHB_CHY+(CHB_CHH-CHB_CHIMG_S_H)/2;
249                                        if(b345) ypos-=2;
250                                               
251                                        DRAW_IMAGE(img_x+temp_x+((i-temp_index)*CHB_CHIMG_W), ypos, pimg);
252                                }
253                        }
254                }
255        }
256}
257
258void App_OSD_EraseDigitBanner()
259{
260        DMG_EraseRect(CHB_STX, CHB_STY, CHB_WIDTH, CHB_HEIGHT, 0x0);
261}
262
263void App_OSD_DrawDigitBanner(void)
264{
265#if 0
266        char ch_str[40];
267        char temp[20];
268        int orig_font_size;
269       
270        // ÀÎÀÚ·Î ÀÔ·Â ¹ÞÀº µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó fnc_digitkey ¸ðµâ¿¡¼­ Á¶ÇÕµÈ °ªÀ» »ç¿ëÇÔ.
271        App_DigitKeyParam dkp;
272        App_DigitKeyGetInfo(&dkp);
273
274        App_OSD_EraseDigitBanner();
275
276        char ch_str[40];
277        char temp[20];
278        int orig_font_size;
279       
280        // ÀÎÀÚ·Î ÀÔ·Â ¹ÞÀº µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó fnc_digitkey ¸ðµâ¿¡¼­ Á¶ÇÕµÈ °ªÀ» »ç¿ëÇÔ.
281        App_DigitKeyParam dkp;
282        App_DigitKeyGetInfo(&dkp);
283
284        App_OSD_EraseDigitBanner();
285       
286        ch_str[0] = 0;
287        if (dkp.is_drf_tuning) {
288                DMG_PrintStrEx(454, 75, 196, 28, "RF", 0xff041819, DMG_OPT_A_CT);
289                //strcat(ch_str, "RF ");
290                if (dkp.major >= 0) {
291                        sprintf(temp, "%d", dkp.major);
292                        strcat(ch_str, temp);
293                }
294        }
295        else if (dkp.major >= 0) {
296                sprintf(temp, "%d", dkp.major);
297                strcat(ch_str, temp);
298                if (dkp.is_dot) {
299                        strcat(ch_str, "-");   
300                        if (dkp.minor >= 0) {
301                                sprintf(temp, "%d", dkp.minor);
302                                strcat(ch_str, temp);
303                        }
304                }
305        }
306
307        orig_font_size=DMG_GetFontSize();
308       
309        DRAW_IMAGE(CHB_STX, CHB_STY, CH_BANNER_BG);
310       
311        DMG_SetFontSize(36);
312       
313        if(ch_str)
314                DMG_PrintStrEx(CHB_CHX, CHB_CHY, CHB_CHW, CHB_CHH, ch_str,
315                        0xff54cdff, DMG_OPT_A_CT);
316
317        DMG_SetFontSize(orig_font_size);
318#else
319        char ch_str[40];
320        char temp[20];
321        int orig_font_size;
322        // ÀÎÀÚ·Î ÀÔ·Â ¹ÞÀº µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó fnc_digitkey ¸ðµâ¿¡¼­ Á¶ÇÕµÈ °ªÀ» »ç¿ëÇÔ.
323        App_DigitKeyParam dkp;
324       
325        App_DigitKeyGetInfo(&dkp);
326
327        App_OSD_EraseDigitBanner();
328        DRAW_IMAGE(CHB_STX, CHB_STY, CH_BANNER_BG);
329       
330        ch_str[0] = 0;
331        if (dkp.is_drf_tuning) {
332                orig_font_size = DMG_GetFontSize();
333                DMG_SetFontSize(20);
334                DMG_PrintStrEx(454, 75, 196, 28, "RF", 0xff041819, DMG_OPT_A_CT);
335                DMG_SetFontSize(orig_font_size);
336                if (dkp.major >= 0) {
337                        sprintf(temp, "%d", dkp.major);
338                        strcat(ch_str, temp);
339                }
340        }
341        else if (dkp.major >= 0) {
342                sprintf(temp, "%d", dkp.major);
343                strcat(ch_str, temp);
344                if (dkp.is_dot) {
345                        strcat(ch_str, "-");   
346                        if (dkp.minor >= 0) {
347                                sprintf(temp, "%d", dkp.minor);
348                                strcat(ch_str, temp);
349                        }
350                }
351        }
352       
353        p_draw_ch_banner_png(dkp.major, dkp.minor, ch_str);
354#endif
355
356}
357
358
359void App_OSD_EraseChBanner()
360{
361        DMG_EraseRect(CHB_STX, CHB_STY, CHB_WIDTH, CHB_HEIGHT, 0x0);
362}
363
364
365void App_OSD_DrawChBanner(int major, int minor, char* pch_str, UINT16 *pch_name)
366{
367        int i=0;
368        int orig_font_size;
369       
370        orig_font_size=DMG_GetFontSize();
371       
372        App_OSD_EraseChBanner();
373       
374        DRAW_IMAGE(CHB_STX, CHB_STY, CH_BANNER_BG);
375       
376        DMG_SetFontSize(20);
377       
378        if(pch_name) {
379                UINT16 temp[20];
380               
381                DMG_UStrCpy(temp, pch_name);
382               
383                if(temp[0]=='K' && temp[1]=='o' && temp[2]=='r' && temp[3]=='e' && temp[4]=='a'
384                        && temp[5]=='V' && temp[6]=='i') {
385                        temp[7]='e';
386                        temp[8]='w';
387                        temp[9]=0;
388                }
389                DMG_PrintUStrEx(454, 75, 196, 28, temp, 0xff041819, DMG_OPT_A_CT);
390        }
391       
392        DMG_SetFontSize(orig_font_size);
393
394        p_draw_ch_banner_png(major, minor, pch_str);
395}
396
397
398/*
399        ch name ºÎºÐÀ» ASCII·Î ¹Þ¾Æ¼­ ¹ü¿ë ÀûÀ¸·Î »ç¿ë °¡´ÉÇÑ ch banner osd Api.
400
401        ±¸Á¶ÀûÀ¸·Î proc ¹× fnc ¸ðµâ¿¡¼­ string »ó¼ö¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ÀûÀýÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ½
402        ³ªÁß¿¡ ´Ù±¹¾î Áö¿ø °í·ÁÇÏ¿© Á¤¸® ÇÊ¿äÇÔ.
403*/
404void App_OSD_DrawChBanner2(char *pch_body, char *pch_hdr)
405{
406        char temp[20];
407        int orig_font_size;
408        orig_font_size=DMG_GetFontSize();
409       
410        App_OSD_EraseChBanner();
411       
412        DRAW_IMAGE(CHB_STX, CHB_STY, CH_BANNER_BG);
413       
414        DMG_SetFontSize(20);
415       
416        if(pch_hdr)
417                DMG_PrintStrEx(454, 75, 196, 28, pch_hdr, 0xff041819, DMG_OPT_A_CT);
418       
419        DMG_SetFontSize(36);
420       
421        if(pch_body)
422                DMG_PrintStrEx(CHB_CHX, CHB_CHY, CHB_CHW, CHB_CHH, pch_body, 
423                        0xff54cdff, DMG_OPT_A_CT);
424       
425        DMG_SetFontSize(orig_font_size);
426}
427
428
429
430#if COMMENT
431__Scan_Banner__() {}
432#endif
433/*
434        rf==-1 : scan failed.
435        rf==-2 : scan canceled.
436*/
437void App_OSD_DrawManualScanBanner(int rf, int progress)
438{
439        char temp[20], temp2[20];
440        int orig_font_size;
441        int i;
442       
443        orig_font_size=DMG_GetFontSize();
444       
445        DRAW_IMAGE(CHB_STX, CHB_STY, CH_BANNER_BG);
446       
447        if (progress >= 0) {
448                DMG_SetFontSize(20);
449               
450                if (rf == -1)
451                        sprintf(temp2, "scan failed!"); 
452                else if (rf == -2)
453                        sprintf(temp2, "scan cancelled");
454                else {
455                        char mark[4] = { '/', '-', '\\', '|', };
456                        sprintf(temp2, "scanning.. %c", mark[progress%4]);
457                }
458                DMG_PrintStrEx(454, 75, 196, 34, temp2, 0xffffffff, DMG_OPT_A_CT);
459               
460                if (rf >= 0) {
461                        DMG_SetFontSize(47);
462                       
463                        sprintf(temp, "RF %d", rf);
464                        DMG_PrintStrEx(CHB_CHX, CHB_CHY, CHB_CHW, CHB_CHH, temp, 
465                                0xff5af4f6, DMG_OPT_A_CT);
466                }
467        }
468       
469        DMG_SetFontSize(orig_font_size);
470}
471
472
473void App_OSD_EraseManualScanBanner()
474{
475        DMG_EraseRect(CHB_STX, CHB_STY, CHB_WIDTH, CHB_HEIGHT, 0x0);
476}
477
478
479
480
481
482#if COMMENT
483__Volume_Banner__() {}
484#endif
485
486#define VOL_BG_X 77
487#define VOL_BG_Y 376
488#define VOL_BG_W 566
489#define VOL_BG_H 68
490
491#define VOL_TEXT_X 97
492#define VOL_TEXT_Y 403
493#define VOL_TEXT_W 120
494#define VOL_TEXT_H 24
495
496#define VOL_BAR_X 227
497#define VOL_BAR_Y 399
498#define VOL_BAR_W 373
499#define VOL_BAR_H 26
500
501#define C_VOL 0xff54cdff
502#define C_VOL_BG 0xff091537
503
504
505void App_OSD_DrawVolumeBG(void)
506{       
507        DRAW_IMAGE(VOL_BG_X, VOL_BG_Y, VOL_BANNER_BG);
508}
509
510
511void App_OSD_DrawVolume(UINT8 vol)
512{
513        char temp[20], *s;
514        int orig_font_size;
515        int i;
516        int width=VOL_BAR_W*vol/20;
517       
518        orig_font_size=DMG_GetFontSize();
519
520        DMG_SetFontSize(20);
521
522        GET_STR(s, POPUP_VOLUME);
523        sprintf(temp, s, vol);
524
525        // text
526        DMG_FillRect(VOL_TEXT_X, VOL_TEXT_Y, VOL_TEXT_W, VOL_TEXT_H, C_VOL_BG);
527        DMG_PrintStrEx(VOL_TEXT_X, VOL_TEXT_Y, VOL_TEXT_W, VOL_TEXT_H, temp, C_VOL, DMG_OPT_A_CT);
528
529        // volume bar
530        DMG_FillRect(VOL_BAR_X, VOL_BAR_Y, VOL_BAR_W, VOL_BAR_H, C_VOL_BG);
531        for(i=0; i<width; i++) {               
532                DRAW_IMAGE(VOL_BAR_X+i, VOL_BAR_Y, VOL_BANNER_BAR);
533        }
534
535        DMG_SetFontSize(orig_font_size);
536}
537
538
539void App_OSD_EraseVolBanner(void)
540{
541        DMG_EraseRect(VOL_BG_X, VOL_BG_Y, VOL_BG_W, VOL_BG_H, 0x0);
542}
543
544
545
546
547
548#if COMMENT
549___Info_Banner__() {}
550#endif
551
552#define INFO_BANNER_X 71
553#define INFO_BANNER_Y 37
554#define INFO_BANNER_W 577
555#define INFO_BANNER_H 187
556
557#define INFO_CUR_CH_X 91
558#define INFO_CUR_CH_Y 50
559#define INFO_CUR_CH_W (350-40)
560#define INFO_CUR_CH_H 31//36
561
562#define INFO_CUR_TIME_X (INFO_CUR_CH_X+INFO_CUR_CH_W)
563#define INFO_CUR_TIME_Y INFO_CUR_CH_Y
564#define INFO_CUR_TIME_W (187+40)
565#define INFO_CUR_TIME_H 30//36
566
567#define INFO_PROGRAM_X INFO_CUR_CH_X
568#define INFO_PROGRAM_Y 81//91
569#define INFO_PROGRAM_W 537
570#define INFO_PROGRAM_H 31//36
571
572#define INFO_SCHEDULE_X INFO_CUR_CH_X
573#define INFO_SCHEDULE_Y 112//132
574#define INFO_SCHEDULE_W INFO_PROGRAM_W
575#define INFO_SCHEDULE_H 31//36
576
577#define INFO_RATING_X INFO_CUR_CH_X
578#define INFO_RATING_Y 143//106//132
579#define INFO_RATING_W INFO_PROGRAM_W
580#define INFO_RATING_H 31//36
581
582#define INFO_ICON_X INFO_CUR_CH_X
583#define INFO_ICON_Y (INFO_RATING_Y+41-2)
584#define INFO_ICON_W 270
585#define INFO_ICON_H 36
586
587#define INFO_SIGNAL_X (INFO_CUR_CH_X + INFO_ICON_W + 20)
588#define INFO_SIGNAL_Y (INFO_RATING_Y+41-2)
589#define INFO_SIGNAL_W 245
590#define INFO_SIGNAL_H 36
591#define INFO_SIGNAL_BAR_BG_W 66
592
593#define C_INFO_BG_1             0xff06295F              // #206
594#define C_INFO_BG_2             0xff476298              // #20
595#define C_INFO_BG_3             0xff2a4879             
596
597#define C_INFO_BLACK    0xff000000
598#define C_INFO_WHITE    0xffffffff
599#define C_INFO_TEXT     0xffffffff
600#define C_INFO_BG_LINE_1        0xffa0c3e9      // #12
601#define C_INFO_BG_LINE_2        0xff5184d8      // #208
602
603static BOOL p_is_kview_ch()
604{
605        int i, num_ucm=App_Ucm_GetTotalUcmCount();
606        tApp_UcmShortInfo ucm_info;
607        UINT16 rf;
608        // ÇöÀç ä³ÎÀÌ kview ä³ÎÀÎÁö ¿©ºÎ¸¦ ¸®ÅÏÇÔ
609        App_GetCurUcmShortInfo(&ucm_info);
610       
611        if(App_GetCurUcmShortInfo(&ucm_info)!=statusOK) return FALSE;
612               
613        rf=ucm_info.rf;
614       
615        for(i=0; i<num_ucm; i++) {
616               
617                if(App_Ucm_GetShortInfobyIndex(i, &ucm_info)!=statusOK) continue;
618               
619                if(ucm_info.rf==rf && ucm_info.vid_type==eDHL_VIDEO_TYPE_H264) return TRUE;
620               
621        }
622        return FALSE;
623}
624
625void App_OSD_DrawInfoBannerBG()
626{
627        int nTx,nTy,nTw,nTh;
628        int gapBg = 5;
629        int gapLine=2;
630       
631        /* Info banner default background image */
632        nTx = INFO_BANNER_X;
633        nTy = INFO_BANNER_Y;
634        nTw = INFO_BANNER_W;
635        nTh = INFO_BANNER_H;
636        App_OSD_CommonBox1(nTx, nTy, nTw, nTh, gapBg, gapLine,
637                                C_INFO_BG_1, C_INFO_BG_2, C_INFO_BG_LINE_1);
638                               
639        nTx = nTx+2*gapBg+gapLine;
640        nTy = nTy+2*gapBg+gapLine;
641        nTw = nTw -2*(2*gapBg+gapLine);
642        nTh = nTh -2*(2*gapBg+gapLine);
643        App_OSD_CommonBox2(nTx, nTy, nTw, nTh, gapLine, 
644                                C_INFO_BG_1, C_INFO_BLACK, C_INFO_BG_LINE_2);
645
646        DMG_EraseRect(nTx+gapLine, nTy+nTh-36, nTw-2*gapLine, 36, C_INFO_BG_3);
647       
648        /* backup plane for BLT */
649        App_OSD_BackupScreen(INFO_BANNER_X, INFO_BANNER_Y, INFO_BANNER_W, INFO_BANNER_H);
650}
651
652
653void App_OSD_DrawInfoProgramSchedule(UINT32 nStartTime,UINT32 nLength)
654{
655        UINT32 nEnd;
656        int k;
657        char s[50], t[30];
658       
659        int orig_font_size;
660       
661        APP_TIME_T Start_TimeData;
662        APP_TIME_T End_TimeData;
663
664        App_OSD_UpdateInfoBanner(4, TRUE);  // erase Program Schedule
665        App_OSD_UpdateInfoBanner(4, FALSE); // resotre Program Schedule
666       
667        App_OSD_UpdateInfoBanner(7, TRUE);  // erase Program Schedule
668        App_OSD_UpdateInfoBanner(7, FALSE); // resotre Program Schedule
669       
670        orig_font_size=DMG_GetFontSize();
671        DMG_SetFontSize(24);
672       
673        nEnd = nStartTime + nLength;
674
675        AppTime_GetTimeFromGPS(nStartTime, &Start_TimeData);
676        AppTime_GetTimeFromGPS(nEnd, &End_TimeData);
677
678        App_MakeDateTimeString(s, Start_TimeData, 3);
679        strcat(s," ");
680        App_MakeDateTimeString(t, Start_TimeData, 11);
681        strcat(s,t);
682        strcat(s," ~ ");
683        App_MakeDateTimeString(t, End_TimeData, 11);
684        strcat(s,t);
685
686        // Draw date, time
687        DMG_PrintStrEx(INFO_SCHEDULE_X, INFO_SCHEDULE_Y, INFO_SCHEDULE_W, INFO_SCHEDULE_H, s, C_INFO_TEXT, DMG_OPT_A_LT);
688       
689        //RATING info.
690        {
691                char rating_str[128];
692                BOOL bRating;
693               
694                char *NO_RATING[]=
695                {
696                        "No Rating",
697                        //"No Calificaci#f3n"
698                        "No hay informaci#f3n. de la Calificaci#f3n"
699                };
700               
701                bRating = AppRating_GetRatingInfo_R5R1(rating_str);
702
703                if(bRating) {
704                        DMG_PrintStrEx(INFO_RATING_X, INFO_RATING_Y, INFO_RATING_W, INFO_RATING_H, 
705                                rating_str, C_INFO_TEXT, DMG_OPT_A_LT);
706                }
707                else {
708                        #if 1
709                        DMG_PrintStrEx(INFO_RATING_X, INFO_RATING_Y, INFO_RATING_W, INFO_RATING_H, 
710                                                        NO_RATING[App_NVM_GetMenuLang()], C_INFO_TEXT, DMG_OPT_A_LT);
711                        #else
712                        DMG_PrintStrEx(INFO_RATING_X, INFO_RATING_Y, INFO_RATING_W, INFO_RATING_H, 
713                                DST_MenuLanguage == MENULANG_ENG? "No Rating":NoRating_spa, C_INFO_TEXT, DMG_OPT_A_LT);
714                        #endif
715                }
716               
717               
718               
719               
720        }
721       
722        DMG_SetFontSize(orig_font_size);
723}
724
725
726void App_OSD_DrawInfoBannerCurChinfo(BOOL bUpdate)
727{
728        char str[30] = {0,};
729        APP_TIME_T nCurTime;
730        DMW_EpgEventPtr event;
731        //tApp_UcmShortInfo Channelinfo; // ¼±¾ð À§Ä¡¿¡ µû¶ó µé¾î°¡´Â garbage °ªÀÌ ´Ù¸£´Ù.. why??
732       
733        UINT32 nStartTime=0;
734        UINT32 nProgramLength=0;
735        UINT16 pName[90]={0,};
736       
737        int orig_font_size;
738        tApp_UcmShortInfo Channelinfo;
739       
740       
741        orig_font_size=DMG_GetFontSize();
742        DMG_SetFontSize(24);
743       
744       
745        if(bUpdate)
746        {
747                App_OSD_UpdateInfoBanner(1, TRUE);  // erase CurCh
748                App_OSD_UpdateInfoBanner(1, FALSE); // resotre CurCh
749                App_OSD_UpdateInfoBanner(3, TRUE);  // erase Program
750                App_OSD_UpdateInfoBanner(3, FALSE); // resotre Program
751        }
752       
753        /* Current Channel Number */
754        if(App_GetCurUcmShortInfo(&Channelinfo)==statusOK)
755        {
756               
757                if(0/*p_is_kview_ch()*/) {
758                        if(Channelinfo.minor != ONE_PART_CHANNEL_INDICATOR && Channelinfo.minor != 0)
759                                sprintf(str, "%d-%d  KoreaView  %s", Channelinfo.major, Channelinfo.minor, 
760                                        DMW_Unicode2Ks(Channelinfo.short_name, 7, NULL));
761                        else 
762                                sprintf(str, "%d  KoreaView  %s", Channelinfo.major,
763                                        DMW_Unicode2Ks(Channelinfo.short_name, 7, NULL));
764                }
765                else {
766                        UINT16 temp[20];
767               
768                        DMG_UStrCpy(temp, Channelinfo.short_name);
769                       
770                        if(temp[0]=='K' && temp[1]=='o' && temp[2]=='r' && temp[3]=='e' && temp[4]=='a'
771                                && temp[5]=='V' && temp[6]=='i') {
772                                temp[7]='e';
773                                temp[8]='w';
774                                temp[9]=0;
775                        }
776
777#if 0                   
778                        if(Channelinfo.minor != ONE_PART_CHANNEL_INDICATOR && Channelinfo.minor != 0)
779                                sprintf(str, "%d-%d (RF %d) %s", Channelinfo.major, Channelinfo.minor,
780                                        Channelinfo.rf, DMW_Unicode2Ks(temp, 10, NULL));
781                        else
782                                sprintf(str, "%d (RF %d) %s", Channelinfo.major, Channelinfo.rf,
783                                        DMW_Unicode2Ks(temp, 10, NULL));
784#else
785{       
786                        /* 110503, sjpark ¸Þ´º¾ð¾î°¡ koreaÀÏ °æ¿ì¿¡¸¸ KoreaView¸¦ ºÙÀ̵µ·Ï ÇÔ */
787                        int iLang=App_NVM_GetMenuLang()==0?0:App_NVM_GetMenuLang()==1?2:3;
788                       
789                        if(Channelinfo.minor != ONE_PART_CHANNEL_INDICATOR && Channelinfo.minor != 0){
790                                if(iLang == 3){
791                                        sprintf(str, "%d-%d KoreaView %s", Channelinfo.major, Channelinfo.minor, 
792                                                DMW_Unicode2Ks(temp, 10, NULL));
793                                }else{
794                                        sprintf(str, "%d-%d %s", Channelinfo.major, Channelinfo.minor, 
795                                                DMW_Unicode2Ks(temp, 10, NULL));
796                               
797                                }
798                        }else{
799                                if(iLang == 3){
800                                        sprintf(str, "%d KoreaView %s", Channelinfo.major,
801                                                DMW_Unicode2Ks(temp, 10, NULL));
802                                }else {
803                                        sprintf(str, "%d %s", Channelinfo.major,
804                                                DMW_Unicode2Ks(temp, 10, NULL));
805                                }
806                        }
807}
808#endif
809                }
810        }
811        else {
812#if 0
813                if(g_CurChannelType==ChannelType_Air)
814                        sprintf(str, "2-1(RF 2)");
815                else
816                        sprintf(str, "1-1(RF 1)");
817#else
818{       
819                /* 110503, sjpark ¸Þ´º¾ð¾î°¡ koreaÀÏ °æ¿ì¿¡¸¸ KoreaView¸¦ ºÙÀ̵µ·Ï ÇÔ */
820                int iLang=App_NVM_GetMenuLang()==0?0:App_NVM_GetMenuLang()==1?2:3;
821                DST_CURCHANNEL chinfo;
822               
823                App_Ucm_GetCurChInfo(&chinfo);
824                if(g_CurChannelType==ChannelType_Air){
825                        if(iLang == 3)
826                                sprintf(str, "%d KoreaView", chinfo.nRF);
827                        else
828                                sprintf(str, "%d", chinfo.nRF);
829                }
830                else
831                {
832                        if(iLang == 3)
833                                sprintf(str, "%d KoreaView", chinfo.nRF);
834                        else
835                                sprintf(str, "%d", chinfo.nRF);
836                }
837}
838#endif
839        }
840       
841        dprint(3, "Infobanner major : %d // minor : %d // rf : %d\n", Channelinfo.major, Channelinfo.minor, Channelinfo.rf);
842        DMG_PrintStrEx(INFO_CUR_CH_X, INFO_CUR_CH_Y, INFO_CUR_CH_W, INFO_CUR_CH_H, str, C_INFO_TEXT, DMG_OPT_A_LT);
843       
844       
845        /* Current Program Information */
846#if 0
847        if(Channelinfo.uid >= 0)
848                /*      ARZHNA, uid°¡ UINT16 ŸÀÔÀ̹ǷΠÀÌ °á°ú´Â Ç×»ó ÂüÀÌ´Ù.
849                        ÀÌ Á¶°Ç¹®ÀÌ Á¤È®ÇÏ´Ù¸é ¾ø¾îµµ µÇ¹Ç·Î »èÁ¦ÇÑ´Ù.
850                */
851#endif         
852        {
853                // Program Title
854                if(AppTime_GetCurTime(&nCurTime, 0)== 0)
855                {
856                        UINT32 flag = GET_EVENT_TITLE | 0x000001;       //GET_EVENT_TITLE =>0x040000
857                       
858                        if(DMW_EPG_GetEventInTime(Channelinfo.uid, nCurTime.sys_time, &event, flag)==statusOK)
859                        {
860                                if(event != NULL)
861                                {
862                                        if(event->titleTextLength)
863                                        {
864                                                DLIB_PSI_DecodeMultipleStringStructure(event->titleTextLength, event->titleText, "eng", 90, pName);
865                                        }
866                                       
867                                        // Schedule (Start ~ End Time)
868                                        nStartTime = event->startTime;
869                                        nProgramLength = event->programLength;
870                                       
871                                        DMG_PrintUStrEx(INFO_PROGRAM_X, INFO_PROGRAM_Y, INFO_PROGRAM_W, INFO_PROGRAM_H, pName, C_INFO_TEXT, DMG_OPT_A_LT);
872                                       
873                                        App_OSD_DrawInfoProgramSchedule(nStartTime, nProgramLength);
874                                       
875                                        DMW_EPG_FreeEpgEvents(event,1); 
876                                }
877                        }
878                }
879        }
880       
881        DMG_SetFontSize(orig_font_size);
882}
883
884
885void App_OSD_DrawInfoTime(BOOL bUpdate)
886{
887        int status= -1;
888        char s[50], t[30];
889        int orig_font_size;
890        APP_TIME_T strTime;
891       
892        status = AppTime_GetCurTime(&strTime, 1);
893       
894        if(bUpdate)
895        {
896                App_OSD_UpdateInfoBanner(2, TRUE);  // erase time icon
897                App_OSD_UpdateInfoBanner(2, FALSE); // resotre time icon
898        }
899       
900        if(status == 0)
901        {
902                // Draw hour
903                orig_font_size = DMG_GetFontSize();
904                DMG_SetFontSize(24);
905#if 0
906                App_MakeDateTimeString(s, strTime, 3);
907                strcat(s,", ");
908                App_MakeDateTimeString(t, strTime, 11);
909                strcat(s,t);
910#else
911                App_MakeDateTimeString(s, strTime, 0);
912#endif
913                /* 110503, sjpark, info banner¿¡¼­ eng/spa ¾ð¾î ÀÏ °æ¿ì ref timeÀÌ À߸®´Â ¹®Á¦·Î À§Ä¡¸¦ ´Þ¸®ÇÔ. */
914                if(App_NVM_GetMenuLang()==2) // koeran
915                        DMG_PrintStrEx(INFO_CUR_TIME_X, INFO_CUR_TIME_Y, INFO_CUR_TIME_W, INFO_CUR_TIME_H, s, C_INFO_TEXT, DMG_OPT_A_CT);
916                else
917                        DMG_PrintStrEx(INFO_CUR_TIME_X-30, INFO_CUR_TIME_Y, INFO_CUR_TIME_W+30, INFO_CUR_TIME_H, s, C_INFO_TEXT, DMG_OPT_A_CT);
918               
919                DMG_SetFontSize(orig_font_size);
920        }
921        else
922                dprint(0, "[ERROR] DST_PrintCurrentTime error!!! \n ");
923}
924
925
926void App_OSD_DrawInfoBannerSignal(int signal, BOOL bUpdate)
927{
928        UINT8 i=0;
929        UINT32 width =0;
930        UINT8 idx=0;
931        tMenuImage signalbar[] = INFO_BANNER_SIGNALBAR;
932       
933        if(bUpdate)
934        {
935                App_OSD_UpdateInfoBanner(5, TRUE);  // erase signal
936                App_OSD_UpdateInfoBanner(5, FALSE); // resotre signal
937        }
938
939        DRAW_IMAGE(INFO_SIGNAL_X, INFO_SIGNAL_Y, IMG_SIGNAL);
940
941        width = INFO_SIGNAL_BAR_BG_W * 3 * signal / 100;
942
943        for(i=0 ; i<width ; i++)
944        {
945                idx = i / INFO_SIGNAL_BAR_BG_W;
946                DRAW_IMAGE(INFO_SIGNAL_X+44+i, INFO_SIGNAL_Y+12, signalbar[idx]);
947        }       
948}
949
950
951void App_OSD_DrawInfoBannerICON(BOOL bUpdate)
952{
953        char str[20]={0,};
954        APP_VIDEO_FORMAT format;
955        BOOL bHdtv, bCC, bMulti, bDolby, bStereo;
956        STATUS status = statusError; 
957        int nAudioCount=0;
958
959       
960        if(bUpdate)
961        {
962                App_OSD_UpdateInfoBanner(6, TRUE);  // erase resolution icon
963                App_OSD_UpdateInfoBanner(6, FALSE); // resotre resolution icon
964        }
965       
966        // Resolution
967        format = App_GetInputVideoFormat();
968       
969        switch(format)
970        {
971                case APP_VIDEO_FORMAT_1080I:           
972                case APP_VIDEO_FORMAT_1080P:   
973                case APP_VIDEO_FORMAT_720P:
974                        bHdtv = TRUE;
975                        break;
976                case APP_VIDEO_FORMAT_480P:
977                case APP_VIDEO_FORMAT_480I:
978                case APP_VIDEO_FORMAT_NONE:
979                default:
980                        bHdtv = FALSE;
981                        break;
982        }
983       
984        // Closed Caption Info.
985        bCC = App_CC_IsServiceOn(0);
986       
987        // Multilingual Info.
988        bMulti = FALSE;
989        status = App_AudioGetMLInfo(NULL, &nAudioCount, NULL);
990       
991        if(status == statusOK && nAudioCount > 1)
992                bMulti = TRUE;
993               
994        {
995                tDHL_AudioStatus aud_status;
996               
997                DHL_AV_AudioGetStatus(&aud_status);
998                bStereo=aud_status.bStereo;
999                bDolby=aud_status.bSurround;
1000        }
1001       
1002        // Display information
1003        if(bHdtv)
1004                DRAW_IMAGE(INFO_ICON_X, INFO_ICON_Y, INFO_BANNER_HDTV_ACTIVE);
1005        else 
1006                DRAW_IMAGE(INFO_ICON_X, INFO_ICON_Y, INFO_BANNER_HDTV_DEFAULT);
1007       
1008        if(bStereo)
1009                DRAW_IMAGE(INFO_ICON_X+80, INFO_ICON_Y, INFO_BANNER_STEREO_ACTIVE);
1010        else 
1011                DRAW_IMAGE(INFO_ICON_X+80, INFO_ICON_Y, INFO_BANNER_STEREO_DEFAULT);
1012
1013        if(bMulti)
1014                DRAW_IMAGE(INFO_ICON_X+130, INFO_ICON_Y, INFO_BANNER_MULTI_ACTIVE);
1015        else 
1016                DRAW_IMAGE(INFO_ICON_X+130, INFO_ICON_Y, INFO_BANNER_MULTI_DEFAULT);
1017       
1018        if(bCC)
1019                DRAW_IMAGE(INFO_ICON_X+176, INFO_ICON_Y, INFO_BANNER_CC_ACTIVE);
1020        else 
1021                DRAW_IMAGE(INFO_ICON_X+176, INFO_ICON_Y, INFO_BANNER_CC_DEFAULT);
1022
1023        if(bDolby)
1024                DRAW_IMAGE(INFO_ICON_X+222, INFO_ICON_Y, INFO_BANNER_DOLBY_ACTIVE);     
1025        else
1026                DRAW_IMAGE(INFO_ICON_X+222, INFO_ICON_Y, INFO_BANNER_DOLBY_DEFAULT);   
1027               
1028               
1029}
1030
1031
1032
1033
1034void App_OSD_DrawInfoBannerMagic(int which)
1035{
1036        char str[100];
1037        int orig_font_size;
1038        orig_font_size=DMG_GetFontSize();
1039        DMG_SetFontSize(20);
1040       
1041        DMG_EraseRect(INFO_BANNER_X, INFO_BANNER_Y, INFO_BANNER_W, INFO_BANNER_H, C_INFO_BG_1);
1042       
1043        sprintf(str, "%s ver %s %s Build %s %s", 
1044                App_GetPrjName(), App_GetSwVersion(), App_Menu_GetMicomVer(), App_GetBuildDateString(), App_GetBuildTimeString());
1045        DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+10, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1046       
1047        sprintf(str, "1 : enable cable(%d)", App_IsForceEnableAirCable());
1048        DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+40, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1049
1050        sprintf(str, "2 : support cable qam(%s)", App_GetEnableCableQam()==TRUE?"Enabled":"Disabled");
1051        DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+65, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1052       
1053        sprintf(str, "3 : start sdds update");
1054        DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+90, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1055       
1056        if(which==1) {
1057                sprintf(str, "  Preparing for SDDS Update...", App_IsForceEnableAirCable());
1058                DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+115, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1059        }
1060        else if(which==2) {
1061                //show sdds update result..\n");
1062                char str[40];
1063                APP_SDDS_SHORT_INFO info;
1064               
1065                App_SddsGetInfo(&info);
1066               
1067                sprintf(str, "  Now SDDS updating...(%s)", APP_SDDS_STATE_STR(info.state));
1068                DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+115, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1069               
1070               
1071                if(info.state==eSDDS_STATE_COMPELTED) {
1072                        sprintf(str, "  Completed successfully, please restart!");
1073                        DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+140, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1074                        DMG_KillTimer(TIMER_ID_L1);
1075                }
1076               
1077                if(info.state==eSDDS_STATE_INIT) {
1078                        sprintf(str, "  Update failed, please check the cause for failure!");
1079                        DMG_PrintStrEx(INFO_CUR_CH_X+10, INFO_CUR_CH_Y+140, INFO_PROGRAM_W-20, 20, str, C_INFO_WHITE, DMG_OPT_A_LT);
1080                        DMG_KillTimer(TIMER_ID_L1);
1081                }
1082               
1083        }
1084       
1085        DMG_SetFontSize(orig_font_size);
1086}
1087
1088
1089void App_OSD_UpdateInfoBanner(int mode, BOOL bEraseOn)
1090{
1091        /*
1092           bEraseOn
1093            - TRUE  : Restore area
1094            - FALSE : Erase area
1095           
1096           mode 0 : info banner Entire
1097           mode 1 : Current Channel
1098           mode 2 : Current Time
1099           mode 3 : Program
1100           mode 4 : Program Schedule
1101           mode 5 : Signal
1102           mode 6 : Icon
1103        */
1104        if(bEraseOn == TRUE)        // erase infobanner area
1105        {
1106                switch(mode)
1107                {
1108                        case 0 : DMG_EraseRect(INFO_BANNER_X, INFO_BANNER_Y, INFO_BANNER_W, INFO_BANNER_H, 0x0); break;
1109                        case 1 : DMG_EraseRect(INFO_CUR_CH_X, INFO_CUR_CH_Y, INFO_CUR_CH_W, INFO_CUR_CH_H, 0x0); break;
1110                        case 2 : DMG_EraseRect(INFO_CUR_TIME_X, INFO_CUR_TIME_Y, INFO_CUR_TIME_W, INFO_CUR_TIME_H, 0x0); break;
1111                        case 3 : DMG_EraseRect(INFO_PROGRAM_X, INFO_PROGRAM_Y, INFO_PROGRAM_W, INFO_PROGRAM_H, 0x0); break;
1112                        case 4 : DMG_EraseRect(INFO_SCHEDULE_X, INFO_SCHEDULE_Y, INFO_SCHEDULE_W, INFO_SCHEDULE_H, 0x0); break;
1113                        case 5 : DMG_EraseRect(INFO_SIGNAL_X, INFO_SIGNAL_Y, INFO_SIGNAL_W, INFO_SIGNAL_H, 0x0); break;
1114                        case 6 : DMG_EraseRect(INFO_ICON_X, INFO_ICON_Y, INFO_ICON_W, INFO_ICON_H, 0x0); break;
1115                        case 7 : DMG_EraseRect(INFO_RATING_X, INFO_RATING_Y, INFO_RATING_W, INFO_RATING_H, 0x0); break;
1116                        default: dprint(2, "!! Unknown infobanner erase type : mode(%d) !!\n\n", mode); break;
1117                }
1118        }
1119        else if(bEraseOn == FALSE)  // restore infobanner area
1120        {
1121                switch(mode)
1122                {
1123                        case 0 : App_OSD_RestoreScreen(INFO_BANNER_X, INFO_BANNER_Y, INFO_BANNER_W, INFO_BANNER_H); break;
1124                        case 1 : App_OSD_RestoreScreen(INFO_CUR_CH_X, INFO_CUR_CH_Y, INFO_CUR_CH_W, INFO_CUR_CH_H); break;
1125                        case 2 : App_OSD_RestoreScreen(INFO_CUR_TIME_X, INFO_CUR_TIME_Y, INFO_CUR_TIME_W, INFO_CUR_TIME_H); break;
1126                        case 3 : App_OSD_RestoreScreen(INFO_PROGRAM_X, INFO_PROGRAM_Y, INFO_PROGRAM_W, INFO_PROGRAM_H); break;
1127                        case 4 : App_OSD_RestoreScreen(INFO_SCHEDULE_X, INFO_SCHEDULE_Y, INFO_SCHEDULE_W, INFO_SCHEDULE_H); break;
1128                        case 5 : App_OSD_RestoreScreen(INFO_SIGNAL_X, INFO_SIGNAL_Y, INFO_SIGNAL_W, INFO_SIGNAL_H); break;
1129                        case 6 : App_OSD_RestoreScreen(INFO_ICON_X, INFO_ICON_Y, INFO_ICON_W, INFO_ICON_H); break;
1130                        case 7 : App_OSD_RestoreScreen(INFO_RATING_X, INFO_RATING_Y, INFO_RATING_W, INFO_RATING_H); break;
1131                        default: dprint(2, "!! Unknown infobanner restore type : mode(%d) !!\n\n", mode); break;
1132                }
1133        }
1134        else
1135                dprint(0, "\n !! Unknown infobanner type : mode(%d) / bEraseOn(%d) !!\n\n", mode, bEraseOn);
1136}
1137
1138
1139
1140
1141#if COMMENT
1142___WeakSignal__() {}
1143#endif
1144
1145static int p_prev_sig_banner_pos=-1;
1146
1147void App_OSD_DrawWeakSignal(int type, int position)
1148{
1149        int pos[5][2] = 
1150        {
1151                {60, 60},
1152                {421, 60},             
1153                {241, 210},
1154                {60, 359},
1155                {421, 359},
1156        };
1157
1158        int orig_font_size;
1159        orig_font_size=DMG_GetFontSize();
1160        DMG_SetFontSize(24);//24
1161       
1162        if (bWarningBanner)
1163                APP_OSD_EraseWarningBanner();
1164
1165        DRAW_IMAGE( pos[position][0], pos[position][1], IMG_WEAK_SIGNAL);
1166       
1167        if(type==UD_PARAM_SIG_MON_DRAW_WEAK_BANNER1) {
1168                PRINT_STR_EX(pos[position][0]+20, pos[position][1], 239, 61, SIG_MON_WEAK_SIG,
1169                        C_INFO_WHITE, DMG_OPT_A_CT);
1170        }
1171        else if(type==UD_PARAM_SIG_MON_DRAW_WEAK_BANNER2) {
1172                PRINT_STR_EX(pos[position][0]+20, pos[position][1], 239, 61, SIG_MON_NO_PROGRAM,
1173                        C_INFO_WHITE, DMG_OPT_A_CT);
1174        }
1175        else if(type==UD_PARAM_SIG_MON_DRAW_AUDIO_ONLY) {
1176                PRINT_STR_EX(pos[position][0]+20, pos[position][1], 239, 61, SIG_MON_AUDIO_ONLY,
1177                        C_INFO_WHITE, DMG_OPT_A_CT);
1178        }
1179       
1180        p_prev_sig_banner_pos=position;
1181       
1182        DMG_SetFontSize(orig_font_size);
1183}
1184
1185
1186void App_OSD_EraseWeakSignal(int position)
1187{
1188        int pos[5][2] = 
1189        {
1190                {60, 60},
1191                {421, 60},             
1192                {241, 210},
1193                {60, 359},
1194                {421, 359},
1195        };
1196       
1197        if(position==-1 && p_prev_sig_banner_pos!=-1)
1198                DMG_EraseRect(pos[p_prev_sig_banner_pos][0], pos[p_prev_sig_banner_pos][1], 
1199                        239, 61, 0x00000000);
1200        else
1201                DMG_EraseRect(pos[position][0], pos[position][1], 239, 61, 0x00000000);
1202}
1203
1204
1205
1206
1207
1208#if COMMENT
1209___Popup__() {}
1210#endif
1211
1212#define POPUP_BG_X 252
1213#define POPUP_BG_Y 377
1214#define POPUP_BG_W 216
1215#define POPUP_BG_H 54
1216
1217#define POPUP_TEXT_X 252
1218#define POPUP_TEXT_Y 377
1219#define POPUP_TEXT_W 216
1220#define POPUP_TEXT_H 54
1221
1222#define C_POPUP_TEXT 0xff54cdff
1223
1224
1225void App_OSD_PrintPopupText(char* str)
1226{
1227#if 0
1228        int orig_font_size, cur_size;
1229        orig_font_size=DMG_GetFontSize();
1230       
1231        cur_size=orig_font_size;
1232       
1233        //DMG_SetFontSize(24);
1234       
1235        while(DMG_GetStrWidth(str)>POPUP_TEXT_W && cur_size>=13) {
1236                cur_size-=2;
1237                DMG_SetFontSize(cur_size);
1238        }
1239       
1240        DMG_PrintStrEx(POPUP_TEXT_X, POPUP_TEXT_Y, POPUP_TEXT_W, POPUP_TEXT_H, str, C_POPUP_TEXT, DMG_OPT_A_CT);
1241       
1242        DMG_SetFontSize(orig_font_size);
1243#else
1244       
1245        DMG_PrintStrEx(POPUP_TEXT_X-POPUP_TEXT_W/2, POPUP_TEXT_Y, POPUP_TEXT_W*2, POPUP_TEXT_H, str, C_POPUP_TEXT, DMG_OPT_A_CT);
1246
1247#endif
1248}
1249
1250
1251void App_OSD_ErasePopupBG(void)
1252{
1253        //DMG_EraseRect(POPUP_BG_X, POPUP_BG_Y, POPUP_BG_W, POPUP_BG_H, 0x0);
1254        DMG_EraseRect(0, POPUP_BG_Y, 720, POPUP_BG_H, 0x0);
1255}
1256
1257
1258void App_OSD_DrawPopupBG(char* str)
1259{
1260        int width;
1261        App_OSD_ErasePopupBG();
1262       
1263        if(!str) {
1264                DRAW_IMAGE(POPUP_BG_X, POPUP_BG_Y, POPUP_BG);
1265                return;
1266        }       
1267       
1268        width=DMG_GetStrWidth(str);
1269       
1270        if(width<=POPUP_BG_W-4) {
1271                DRAW_IMAGE(POPUP_BG_X, POPUP_BG_Y, POPUP_BG);
1272        }
1273       
1274        else if(width<=POPUP_BG_W*3/2-4) {
1275                DRAW_IMAGE(POPUP_BG_X-POPUP_BG_W/4, POPUP_BG_Y, POPUP_BG);
1276                DRAW_IMAGE(POPUP_BG_X+POPUP_BG_W/4, POPUP_BG_Y, POPUP_BG);
1277        }
1278        else {
1279                DRAW_IMAGE(POPUP_BG_X-POPUP_BG_W/2, POPUP_BG_Y, POPUP_BG);
1280                DRAW_IMAGE(POPUP_BG_X+POPUP_BG_W/2, POPUP_BG_Y, POPUP_BG);
1281        }
1282       
1283        if(str)
1284                App_OSD_PrintPopupText(str);
1285}
1286
1287
1288#if COMMENT
1289___SignalStrength_Banner__() {}
1290#endif
1291
1292#define SIGNAL_BG_X 216
1293#define SIGNAL_BG_Y 56
1294#define SIGNAL_BG_W 286
1295#define SIGNAL_BG_H 366
1296
1297#define SIGNAL_IMG_X 248
1298#define SIGNAL_IMG_Y 144
1299
1300#define SIGNAL_VLINE_X 247
1301#define SIGNAL_VLINE_Y 303
1302
1303#define SIGNAL_TITLE_X 216
1304#define SIGNAL_TITLE_Y 63
1305#define SIGNAL_TITLE_W 286
1306#define SIGNAL_TITLE_H 40
1307
1308#define SIGNAL_WEAK_X 248
1309#define SIGNAL_WEAK_Y 315
1310#define SIGNAL_GOOD_X_KOR 431
1311#define SIGNAL_GOOD_X 420//431
1312
1313#define SIGNAL_BAR_X 247
1314#define SIGNAL_BAR_Y 337
1315
1316#define SIGNAL_BAR_BG_W 75
1317
1318#define MSG_BANNER_C_WHITE 0xffc8c8e6
1319
1320
1321void App_OSD_DrawSignalBar(int signal)
1322{
1323        UINT8 i=0;
1324        UINT32 width =0;
1325        UINT8 idx=0;
1326        tMenuImage signalbar[] = INFO_BANNER_SIGNALBAR;
1327
1328        width = SIGNAL_BAR_BG_W * 3 * signal / 100;
1329
1330        for(i=0 ; i<width ; i++)
1331        {
1332                idx = i / SIGNAL_BAR_BG_W;
1333                DRAW_IMAGE(SIGNAL_BAR_X+1+i, SIGNAL_BAR_Y+1, signalbar[idx]);
1334        }       
1335}
1336
1337
1338void App_OSD_DrawSignalStrength(int signal)
1339{
1340        // draw back
1341        DRAW_IMAGE(SIGNAL_BG_X, SIGNAL_BG_Y, IMG_COMMON_BG);
1342
1343        // draw signal image
1344        DRAW_IMAGE(SIGNAL_IMG_X, SIGNAL_IMG_Y, SIGNAL_IMG);
1345
1346        // draw vline
1347        DRAW_IMAGE(SIGNAL_VLINE_X, SIGNAL_VLINE_Y, IMG_H_LINE);
1348        // draw signal back
1349        DRAW_IMAGE(SIGNAL_BAR_X, SIGNAL_BAR_Y, SIGNAL_BAR_BG);
1350       
1351       
1352        DMG_SetFontSize(20);
1353        // µ¿ÀÏÇÑ Ä÷¯ ÀçȰ¿ë
1354        PRINT_STR_EX(SIGNAL_TITLE_X, SIGNAL_TITLE_Y, SIGNAL_TITLE_W, SIGNAL_TITLE_H, SIGNAL_TITLE, MSG_BANNER_C_WHITE, DMG_OPT_A_CT);
1355
1356        DMG_SetFontSize(20);
1357        PRINT_STR(SIGNAL_WEAK_X, SIGNAL_WEAK_Y, SIGNAL_WEAK, C_INFO_WHITE);
1358       
1359        if(DMG_GetLanguage()==2)
1360        {// ¸Þ´º¾ð¾î°¡ Çѱ¹¾î ÀÏ °æ¿ì.
1361                PRINT_STR(SIGNAL_GOOD_X_KOR, SIGNAL_WEAK_Y, SIGNAL_GOOD, C_INFO_WHITE);
1362        }
1363        else
1364        {
1365                if(DMG_GetLanguage()==0) {
1366                        PRINT_STR(SIGNAL_GOOD_X+3, SIGNAL_WEAK_Y, SIGNAL_GOOD, C_INFO_WHITE);
1367                }
1368                else {
1369                        PRINT_STR(SIGNAL_GOOD_X-4, SIGNAL_WEAK_Y, SIGNAL_GOOD, C_INFO_WHITE);
1370                }
1371        }
1372        App_OSD_DrawSignalBar(signal);
1373}
1374
1375
1376void App_OSD_EraseSignalStrength()
1377{
1378        DMG_EraseRect(SIGNAL_BG_X, SIGNAL_BG_Y, SIGNAL_BG_W, SIGNAL_BG_H, 0x0);
1379}
1380
1381
1382
1383
1384
1385#if COMMENT
1386___Warning_Banner__() {}
1387#endif
1388
1389/* Warning message banner position */
1390#define WARN_BACK_X    204   // background X position
1391#define WARN_BACK_Y    125   // background Y position
1392#define WARN_BACK_W    325   // background width
1393#define WARN_BACK_H    243   // background height
1394#define WARN_ICON_X    331   // exclamation mark X position
1395#define WARN_ICON_Y    143   // exclamation mark Y position
1396#define WARN_BTN_X     303   // OK button X position
1397#define WARN_BTN_Y     300   // OK button Y position
1398#define WARN_BTN_W     114   // OK string width
1399#define WARN_TEXT_Y    229   // Text Y position
1400#define WARN_TEXT_W    312   // Text width (CARD_NOTI_BACK_W - 13) : À½¿µ ³Êºñ »©Áà¾ß ÇÔ.
1401
1402
1403/******************************************************************************************
1404FUNCTION:
1405  - APP_OSD_DrawWarningBanner
1406
1407Purpose:
1408 // 2010.03.02 foxhunt
1409 // ÇöÀç ¾²ÀÌ´Â °æ°íâµéÀº °°Àº image¿¡ text¸¸ ¹Ù²Ù¾î ´ÙÀ½°ú °°ÀÌ ÀÓ½ÃÀûÀ¸·Î »ç¿ëÇÑ´Ù.
1410 // °¢ popup¿¡ ´ëÇÑ designÀ̳ª Spec¿¡ º¯°æÀÌ ÀÖÀ» °æ¿ì ¼öÁ¤Çϵµ·Ï ÇÏÀÚ.
1411  - mode 0 : Ä«µå°¡ ²ÈÇôÀÖÁö ¾ÊÀ» ¶§ MainMenu - Input Selection¿¡¼­ ¶ç¿ì´Â popup
1412  - mode 1 : ¹°¸®ÀûÀ¸·Î card in/out ÇÒ ¶§ º¸¿©ÁÖ´Â popup
1413  - mode 2 : inband CH map ¾øÀ» ¶§ AutoScan ¼öÇà ¿ä±¸ popup
1414  - mode 3 : OOB SI µ¥ÀÌÅÍ ¼ö½Å»óŸ¦ º¸¿©ÁÖ´Â popup
1415  - mode 4 : OOB CH map ¿Ï¼º ½Ã º¸¿©ÁÖ´Â popup
1416  - mode 5 : Auto power down½Ã standby·ÎÀÇ ÁøÀÔÇϱâ Àü¿¡ º¸¿©ÁÖ´Â popup
1417  - mode 6 : Ä«µå »ðÀÔ ÈÄ application µî·Ï Àü±îÁö host mmi ½ÇÇàÇÒ ¼ö ¾øÀ½À» ¾Ë·ÁÁÖ´Â popup
1418******************************************************************************************/
1419void APP_OSD_DrawWarningBanner(int mode, BOOL bModify)
1420{
1421        char *str1, *str2, *str3;   // alert comment
1422        UINT16 raw_size=0;
1423        char raw_section[10], passed_section[10];
1424       
1425        DMG_SetTempFontSize(22);
1426       
1427        dprint(2, "[%s] Banner mode is %d !!\n", __FUNCTION__, mode);
1428        bWarningBanner = TRUE;
1429       
1430        /* Background color : Dark gray */
1431        if(mode == 3 || mode == 4 || mode == 5 || mode == 6)
1432                DMG_FillRect(0, 0, 720, 480, 0x00000000); // mode 5 : Auto Power down ½Ã¿¡´Â ¹è°æ»ö »ç¿ëÇÏÁö ¸»ÀÚ.
1433        else
1434                DMG_FillRect(0, 0, 720, 480, 0x60000000);
1435
1436#if 0           
1437        /* Warning Icon */
1438        DRAW_IMAGE(WARN_BACK_X, WARN_BACK_Y, MSG_BANNER_BACK); // background
1439#else
1440       
1441        App_OSD_CommonBox1(WARN_BACK_X, WARN_BACK_Y, WARN_BACK_W, WARN_BACK_H, 6, 2, 
1442                        0xcc06295f, COLOR_BG_OUT_BLUE, COLOR_LINE_SKY_BLUE);
1443       
1444#endif
1445        DRAW_IMAGE(WARN_ICON_X, WARN_ICON_Y, MSG_BANNER_WARN); // exclamation mark "!"
1446        if(mode == 0 || mode == 1 || mode == 4 || mode == 5) {
1447                DRAW_IMAGE(WARN_BTN_X, WARN_BTN_Y, MSG_BANNER_BTN2); // "OK" button
1448        }
1449       
1450        /* Warning Message */
1451        switch(mode) {
1452                               
1453                case 2: // in-band CH information staus
1454                        GET_STR(str1, STR_NO_CH1);
1455                        GET_STR(str2, STR_NO_CH2);
1456                        break;
1457                       
1458#if SUPPORT_POD                 
1459                case 3: // OOB CH information staus
1460                        str1 = "OOB Signals Detected. Please wait...";
1461                        str2 = "Sections received : ";
1462                       
1463                        DmcSiScanStatus stat;
1464                        Dmc_ScteSiGetStatus(&stat);
1465                       
1466                        sprintf(raw_section, "%u", stat.raw_section_count);
1467                        raw_size = DMG_GetStrWidth(raw_section);
1468                        break;
1469                       
1470                case 4: // OOB CH information staus
1471                        str1 = "Channel information received";
1472                        break;
1473#endif
1474               
1475                case 5: // auto power off warning message
1476                        GET_STR(str1, STR_AUTO_POWEROFF);
1477                        GET_STR(str2, STR_GOOD_BYE);
1478                        break;
1479                       
1480#if SUPPORT_POD
1481                case 6: // waiting host mmi message
1482                        str1 = "Receiving page from CableCARD...";
1483                        str2 = "";
1484                        break;
1485#endif
1486
1487                case 7: //sdds
1488                        GET_STR(str1, POPUP_SDDS_STR1);
1489                        GET_STR(str2, POPUP_SDDS_STR2);
1490                        break;
1491               
1492                case 8: //autoscan when booting
1493                        GET_STR(str1, POPUP_BOOTING_SCAN_STR1);
1494                        GET_STR(str2, POPUP_BOOTING_SCAN_STR2);
1495                        break;
1496                       
1497                default:
1498                        dprint(2, "Unknown Warning Message !!!\n");
1499                        str1 = ""; str2 = "";
1500                        break;
1501        }
1502       
1503        /* Print Message */
1504        if(mode == 2 || mode == 3 || mode == 6)
1505        { // button not exist : µÎ ÁÙ ÀÌ»óÀ» Âï±â À§ÇØ ³ôÀ̸¦ 20¿¡¼­ 50À¸·Î º¯°æÇÔ.
1506                DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+15, WARN_TEXT_W, 60, str1, 
1507                        EPG_FC_CT, DMG_OPT_A_TP|DMG_OPT_A_CT);
1508                DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+58, WARN_TEXT_W, 60, str2, 
1509                        EPG_FC_CT, DMG_OPT_A_TP|DMG_OPT_A_CT);
1510               
1511                if(bModify)
1512                        DMG_PrintStrEx(WARN_BACK_X+230, WARN_TEXT_Y+58, raw_size+3, 20, raw_section, EPG_FC_CT, DMG_OPT_A_LT);
1513        }
1514        else if(mode==7) {
1515                char str3[30];
1516                APP_SDDS_SHORT_INFO info;
1517               
1518                App_SddsGetInfo(&info);
1519                if(info.state==eSDDS_STATE_INIT) 
1520                        strcpy(str3, "´Ù¿î·Îµå Áغñ Áß");
1521                else if(info.state==eSDDS_STATE_DOWNLOADING) 
1522                        strcpy(str3, "´Ù¿î·Îµå Áß");
1523                else if(info.state==eSDDS_STATE_READY_FOR_FLASHING) 
1524                        strcpy(str3, "¼ÒÇÁÆ®¿þ¾î ÀúÀå Áغñ Áß");
1525                else if(info.state==eSDDS_STATE_FLASHING) 
1526                        sprintf(str3, "¼ÒÇÁÆ®¿þ¾î ÀúÀå Áß(%d)", info.update_progress);
1527                else {
1528                        GET_STR(str1, POPUP_SDDS_STR_COMPLETED);
1529                        GET_STR(str2, POPUP_SDDS_STR_OFFREADY);
1530                        str3[0] = 0; // strcpy(str3, "¼ÒÇÁÆ®¿þ¾î ÀúÀå Á¾·á");
1531                }
1532                DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+5, WARN_TEXT_W, 20, str1, EPG_FC_CT, DMG_OPT_A_CT);
1533                DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+35, WARN_TEXT_W, 20, str2, EPG_FC_CT, DMG_OPT_A_CT);
1534                DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+65, WARN_TEXT_W, 20, str3, EPG_FC_CT, DMG_OPT_A_CT);
1535        }
1536        else if(mode==8) {
1537                char str3[30];
1538                int percent=App_Autoscan_GetProgressPercent();
1539               
1540                if(percent>0) {
1541                        sprintf(str3, "%d %%", percent);
1542                       
1543                        DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+5, WARN_TEXT_W, 20, str1, EPG_FC_CT, DMG_OPT_A_CT);
1544                        DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+35, WARN_TEXT_W, 20, str2, EPG_FC_CT, DMG_OPT_A_CT);
1545                        DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+65, WARN_TEXT_W, 20, str3, EPG_FC_CT, DMG_OPT_A_CT);
1546                }
1547        }
1548        else
1549        { // include button
1550                if(mode == 4) {
1551                        DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+20, WARN_TEXT_W, 20, str1, EPG_FC_CT, DMG_OPT_A_CT);
1552                }
1553                else {
1554                        DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y, WARN_TEXT_W, 20, str1, EPG_FC_CT, DMG_OPT_A_CT);
1555                        DMG_PrintStrEx(WARN_BACK_X, WARN_TEXT_Y+32, WARN_TEXT_W, 20, str2, EPG_FC_CT, DMG_OPT_A_CT);
1556                }
1557                PRINT_STR_EX(WARN_BTN_X, WARN_BTN_Y+6, WARN_BTN_W, 20, STR_OK, EPG_FC_HL, DMG_OPT_A_CT);
1558                        // TO DO foxhunt : font color macro Á¤¸®
1559        }
1560        dprint(2, "\nWarning message is ...\n ===> %s %s\n", str1, str2);
1561       
1562        DMG_RestoreFontSize();
1563}
1564
1565void APP_OSD_EraseWarningBanner()
1566{       // warning banner Àüü¿µ¿ª erase
1567        DMG_EraseRect(WARN_BACK_X, WARN_BACK_Y, WARN_BACK_W, WARN_BACK_H, 0x0);
1568        bWarningBanner = FALSE;
1569}
1570
1571#if COMMENT
1572___dst_logo__() {}
1573#endif
1574
1575
1576void App_DrawDstLogo()
1577{
1578#if 0
1579        //Àüü alpha¸¦ ÁÖ´Â ¹æ½ÄÀ¸·Î ±×¸²À» ±×¸²..
1580        DRAW_IMAGE(0, 0, DST_LOGO);
1581#else //logo À̹ÌÁö º¯°æµÊ->ÅëÂ¥ À̹ÌÁö°¡ ¾Æ´Ï¶ó, ºÎºÐ À̹ÌÁöÀÓ.
1582        DMG_EraseRect(0, 0, 720, 480, 0xffffffff); //¸ðµÎ Èò»ö
1583        DMG_DrawImagePng((720-440)/2, (480-76)/2, DST_LOGO);
1584#endif
1585}
1586
1587
1588void App_EraseDstLogo()
1589{
1590        DMG_EraseRect(0, 0, 720, 480, 0);
1591       
1592}
1593
1594
1595void App_SetLogoOpacity(int alpha)
1596{
1597//      extern DHL_RESULT dhl_set_plane_opacity2(tDHL_PlaneID id, int alpha);
1598
1599//      dhl_set_plane_opacity2(APP_PLANE_DISP, alpha);
1600}
1601
1602
1603#if COMMENT
1604___ea__() {}
1605#endif
1606
1607
1608//Ãʰ£´Ü ¸ðµå·Î EA¸¦ ±¸ÇöÇÑ´Ù.
1609#define EA_DRAW_MOVE_SLICE 15
1610
1611#define MAX_EA_TEXT 512
1612
1613#define EA_BODY_X 0
1614#define EA_BODY_Y 390
1615#define EA_BODY_W 720
1616#define EA_BODY_H 90
1617
1618#define EA_DRAW_X 80
1619#define EA_DRAW_Y 410
1620#define EA_DRAW_W (720-EA_DRAW_X*2)
1621#define EA_DRAW_H 40
1622
1623#define C_EA_BODY CHEDIT_BG_COLOR_5
1624#define C_EA_TEXT 0xFF8CE1FF
1625#define C_EA_TEXT_BODY 0xC02A4879
1626
1627static UINT16 ea_text[MAX_EA_TEXT], *pt_text; //
1628static int ea_draw_pos;
1629static UINT32 last_drawn_ms;
1630
1631void AppO_SetEAText(UINT16 *str)
1632{
1633        //ÇØ´ç strÀ» num_repeat¸¸Å­ ¹Ýº¹Çؼ­ ±×¸².
1634       
1635        DMG_EraseRect(EA_BODY_X, EA_BODY_Y, EA_BODY_W, EA_BODY_H, C_EA_BODY);
1636       
1637        DMG_UStrNCpy(ea_text, str, MAX_EA_TEXT);
1638        pt_text=ea_text;
1639        ea_draw_pos=EA_DRAW_W;
1640}
1641
1642BOOL AppO_EADrawText(BOOL draw_bg)
1643{
1644        if(draw_bg) {
1645                DMG_EraseRect(EA_BODY_X, EA_BODY_Y, EA_BODY_W, EA_BODY_H, C_EA_BODY);   
1646        }
1647       
1648        if(!pt_text) return TRUE;
1649               
1650        last_drawn_ms=DHL_OS_GetMsCount();
1651       
1652        ea_draw_pos-=EA_DRAW_MOVE_SLICE;
1653       
1654        //TRUE¸¦ ¸®ÅÏÇÏ¸é ´Ù ±×·È´Ù´Â ÀǹÌÀÓ.
1655        //½ÇÁ¦ ¿©À¯¸¦ µÎ°í ±×·Á¾ß "..."ÀÌ º¸ÀÌÁö ¾ÊÀ½.
1656       
1657        DMG_EraseRect(EA_DRAW_X, EA_DRAW_Y, EA_DRAW_W, EA_DRAW_H, C_EA_TEXT_BODY);
1658       
1659        DMG_PrintUStrEx(EA_DRAW_X+ea_draw_pos, EA_DRAW_Y, EA_DRAW_W-ea_draw_pos+80, EA_DRAW_H,
1660                pt_text, C_EA_TEXT, DMG_OPT_A_LT);
1661               
1662        //¿ÞÂÊ ¿À¸¥ÂÊÀ» ±×·Á¼­ ¿µ¿ª ¿Ü text°¡ º¸ÀÌÁö ¾Êµµ·Ï ÇÔ.
1663        DMG_EraseRect(0, EA_DRAW_Y, EA_DRAW_X, EA_DRAW_H, C_EA_BODY);
1664        DMG_EraseRect(EA_BODY_W-EA_DRAW_X, EA_DRAW_Y, EA_DRAW_X, EA_DRAW_H, C_EA_BODY);
1665       
1666        while(ea_draw_pos+DMG_GetChWidth(*pt_text)<0) {
1667                ea_draw_pos+=DMG_GetChWidth(*pt_text);
1668                pt_text++; //text¸¦ 1¸¸Å­ Áõ°¡½ÃÅ´.
1669               
1670                if(*pt_text=='\0') { //null ¹®ÀÚ..Á¾·áµÊ.
1671                        pt_text=ea_text;
1672                        ea_draw_pos=EA_DRAW_W;
1673                        return TRUE;
1674                }
1675        }
1676       
1677        return FALSE;
1678}
1679
1680BOOL AppO_CheckEAContinue()
1681{
1682        BOOL bcontinue;
1683        //EAº¸´Ù ´õ priority°¡ ³ôÀº OSD°¡ ¶°¼­ EA°¡ »ç¶óÁø °æ¿ì
1684        //EA¸¦ scrollÀ» óÀ½ºÎÅÍ ´Ù½Ã ½ÃÀÛÇÒÁö, ¾Æ´Ï¸é ÁßÁöµÈ ºÎºÐºÎÅÍ ½ÃÀÛÇÒÁö¸¦ °áÁ¤ÇÔ.
1685        //¸®ÅÏ TRUEÀ̸é óÀ½ºÎÅÍ Àç°³ÇÔ.
1686        if(DHL_OS_GetMsCount()-last_drawn_ms>10000) {
1687                bcontinue=FALSE;
1688                pt_text=ea_text;
1689                ea_draw_pos=EA_DRAW_W;
1690        }
1691        else bcontinue=TRUE;
1692               
1693        return bcontinue;
1694}
1695
1696void AppO_EraseEA()
1697{
1698        DMG_EraseRect(EA_BODY_X, EA_BODY_Y, EA_BODY_W, EA_BODY_H, 0);
1699}
1700
1701
1702void test_ea_scroll()
1703{
1704        UINT16 temp[128];
1705       
1706        DMG_UStrNCpy(temp, DMG_MakeUniStr2("abcdefghijklmnopqrstuvwxyz1234567890ABC"
1707                "DEFGHIJKLMNOPQRSTUVWXYZ"), 128);
1708       
1709        AppO_SetEAText(temp);
1710        DMG_AutoRefresh();
1711       
1712        while(AppO_EADrawText(FALSE)==FALSE){
1713                DMG_AutoRefresh();
1714                DHL_OS_Delay(500);
1715        }
1716        DMG_AutoRefresh();
1717        DHL_OS_Delay(2000);
1718       
1719        AppO_EraseEA();
1720        DMG_AutoRefresh();
1721}
1722       
1723       
1724
1725/* end of file */
Note: See TracBrowser for help on using the repository browser.