www.pudn.com > Bit1611_demo_code.rar > DISPATCH.C


/* ********************************************************************** 
 
         Copyright (c) 2002-2006 Beyond Innovation Technology Co., Ltd 
 
        All rights are reserved. Reproduction in whole or in parts is 
    prohibited without the prior written consent of the copyright owner. 
   ---------------------------------------------------------------------- 
 
    Module: DISPATCH.C 
 
    Purpose: Implementation of DISPATCH module. 
 
    Version: 0.02                                   07:25PM  2005/05/13 
 
    Compiler: Keil 8051 C Compiler v8.01 
 
    Reference: 
 
   ---------------------------------------------------------------------- 
    Modification: 
 
    R0.01 07:25PM  2005/05/13 Jeffrey Chang 
    Reason: 
        1. Original. 
    Solution: 
 
   ********************************************************************** */ 
 
#define _DISPATCH_C_ 
 
/* ------------------------------------ 
    Header Files 
   ------------------------------------ */ 
#include "bitek.h" 
#include "common.h" 
#include "dispatch.h" 
#include "eeprom.h" 
#include "i2c.h" 
#include "key.h" 
#include "led.h" 
#include "mcu.h" 
#include "menu.h" 
#include "osd.h" 
#include "platform.h" 
#include "por.h" 
#include "timer.h" 
#include "vp.h" 
#include "yuv.h" 
 
 
#if (AUDIO_CFG != AUDIO_00_NONE) 
    #include "audio.h" 
#endif 
 
#if (IR_CFG != IR_00_UNUSE) 
    #include "ir.h" 
#endif 
 
#if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_5)  ||  \ 
    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_6) 
    #include "tuner.h" 
#endif 
 
/* ------------------------------------ 
    Macro Definitions 
   ------------------------------------ */ 
 
 
/* ------------------------------------ 
    Type Definitions 
   ------------------------------------ */ 
 
 
/* ------------------------------------ 
    Variables Definitions 
   ------------------------------------ */ 
static UB8 bIdx; 
static UB8 bKey; 
 
#if (DISPATCH_BURNINGO) 
static UB8 bBurnIn = 0; 
#endif 
 
#if (DISPATCH_DISPLAYMODE) 
 
    #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_1)      ||  \ 
        (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_2)      ||  \ 
        (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_5)      ||  \ 
        (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_6)      ||  \ 
        (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_7) 
 
        static UB8 CODE * CODE apbDISPLAY_MODE[ DISPLAY_MODE_SIZE ] = 
        { 
           //123456 
            "16:9-1", 
            "16:9-2", 
            "4:3", 
        }; 
 
    #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3)    ||  \ 
          (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_4) 
    // Nothing ! 
 
    #else 
 
        static UB8 CODE * CODE apbDISPLAY_MODE[ DISPLAY_MODE_SIZE ] = 
        { 
           //123456 
            "Linear", 
            "Bypass", 
        }; 
 
    #endif 
 
#endif 
 
 
#if (DISPATCH_TCON_MODE) 
static UB8 CODE * CODE apbTCON_MODE[ TCON_MODE_SIZE ] = 
{ 
    "RU", 
    "LU", 
    "LD", 
    "RD", 
}; 
#endif 
 
 
 
/* ------------------------------------ 
    Function Prototypes 
   ------------------------------------ */ 
 
 
#if (DISPATCH_BURNINGO) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BurnInGo -  
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BurnInGo (void) 
{ 
    if (wTIMER_BurnInTick < 5) 
    { 
        wTIMER_BurnInTick = 505;         // 500 x 6ms = 3 sec. 
 
        // Video Processor Test Pattern 
        BITEK_TxByte(VP_MAD, VP_03D_TESTPAT_G,   0xFF); 
        BITEK_TxByte(VP_MAD, VP_03E_TESTPAT_B,   (bBurnIn << 4) | 0x8F); 
 
        // To enable Free-Run Mode 
        BITEK_TxByte(VP_MAD, 
                     VP_040_TESTPAT_ATTR, 
                     BITEK_RxByte(VP_MAD, VP_040_TESTPAT_ATTR) | VP_MASK_FREERUN_EN); 
 
        OSD_ShowValue(OSD_SUBMENU, 
                      OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                      OSD_Y_VALUE, 
                      bBurnIn, 
                      OSD_W_VALUE                         ); 
 
        bBurnIn++; 
        bBurnIn &= 0x07; 
    } 
} /* DISPATCH_BurnInGo */ 
#endif 
 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_Go - 
    Purpose: To execute DISPATCH. 
    Passed: None. 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_Go (void) 
{ 
    // OSD Auto OFF ! 
    wMENU_Tick = MENU_AUTO_OFF_TIME; 
 
 
    switch (bSystemState) 
    { 
        case SYSTEM_POWER_OFF: 
            switch (bKey = KEY_BufferOut()) 
            { 
                case KEY_POWER: 
                case KEY_IR_POWER: 
                    if (fKeyReleased) 
                        POR_PowerOn(); 
                    break; 
 
                default: 
                    break; 
            } // switch 
            break; 
 
 
        case SYSTEM_POWER_ON: 
            switch (bKey = KEY_BufferOut()) 
            { 
                case KEY_STILL_POWER: 
                case KEY_IR_POWER: 
                    if (fKeyReleased) 
                        POR_PowerOff(); 
                    break; 
 
                case KEY_RELEASE_MENU: 
                case KEY_IR_MENU: 
                    // To vanish Main/Message Menu 
                    MENU_EnableMenu(MENU_MAINMENU, ON); 
                    MENU_EnableMenu(MENU_MESSAGE, OFF); 
 
                    bSystemState = SYSTEM_MAIN_MENU; 
                    break; 
 
 
                case KEY_RELEASE_SELECT: 
                case KEY_IR_SELECT: 
                    tsEYD.bYUV_ID = (tsEYD.bYUV_ID + 1) % MAX_YUV_NO; 
 
                    // To setup Video Source and try next one ! 
                    YUV_SetSourceMode(tsEYD.bYUV_ID); 
 
                    // To enable BLANK COLOR 
                    //VP_BlankColor(ON); 
 
                    // To Backup YUV ID 
                    EEPROM_TxBurst(EYD_ADDR_YUV_ID, 
                                   sizeof(tsEYD.bYUV_ID), 
                                   (UB8 *)&tsEYD.bYUV_ID    ); 
 
                    OSD_ShowMsg(OSD_MESSAGE, 
                                OSD_X_SOURCE, 
                                OSD_Y_SOURCE, 
                                apbYUV_Source[ tsEYD.bYUV_ID ]); 
                    OSD_EnableWindow(OSD_MESSAGE, ON); 
 
 
                    bLastSB = YUV_SB_BITEK; 
                    bLastCS = YUV_CS_NONE; 
                    break; 
 
                #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_1)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_2)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_7) 
 
                case KEY_UP: 
                case KEY_IR_UP: 
                    bMenuLastItem       = bMenuCurrentItem - bMenuBaseItem + MENU_HUE; 
                    bMenuBaseItem       = MENU_HUE; 
                    bMenuCurrentItem    = MENU_DISPLAY_MODE; 
 
                    MENU_ShowMainMenuItem(bMenuBaseItem); 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_DisplayModeMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                case KEY_DOWN: 
                case KEY_IR_DOWN: 
                    bMenuLastItem       = bMenuCurrentItem - bMenuBaseItem + MENU_SATURATION; 
                    bMenuBaseItem       = MENU_SATURATION; 
                    bMenuCurrentItem    = MENU_SHARPNESS; 
 
                    MENU_ShowMainMenuItem(bMenuBaseItem); 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_SharpnessMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3)    ||  \ 
                      (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_4) 
 
                case KEY_UP: 
                case KEY_IR_UP: 
                case KEY_DOWN: 
                case KEY_IR_DOWN: 
                    bMenuLastItem       = bMenuCurrentItem - bMenuBaseItem + MENU_SATURATION; 
                    bMenuBaseItem       = MENU_SATURATION; 
                    bMenuCurrentItem    = MENU_SHARPNESS; 
 
                    MENU_ShowMainMenuItem(bMenuBaseItem); 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_SharpnessMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_5) 
 
                case KEY_UP: 
                case KEY_IR_UP: 
                    tsEYD.bChannel++; 
                    if (tsEYD.bChannel > TUNER_CHANNEL_MAX) 
                        tsEYD.bChannel = TUNER_CHANNEL_MIN; 
 
                    TUNER_Tuning(TUNER_VideoFreq(tsEYD.bChannel)); 
 
                    // Show Channel 
                    OSD_ShowValue(OSD_MESSAGE, 
                                  OSD_WINDOW1_WIDTH - OSD_W_VALUE, 
                                  OSD_Y_VALUE, 
                                  tsEYD.bChannel, 
                                  OSD_W_VALUE                           ); 
                    MENU_EnableMenu(OSD_MESSAGE, ON); 
 
                    break; 
 
                case KEY_DOWN: 
                case KEY_IR_DOWN: 
                    tsEYD.bChannel--; 
                    if (tsEYD.bChannel < TUNER_CHANNEL_MIN) 
                        tsEYD.bChannel = TUNER_CHANNEL_MAX; 
 
                    TUNER_Tuning(TUNER_VideoFreq(tsEYD.bChannel)); 
 
                    // Show Channel 
                    OSD_ShowValue(OSD_MESSAGE, 
                                  OSD_WINDOW1_WIDTH - OSD_W_VALUE, 
                                  OSD_Y_VALUE, 
                                  tsEYD.bChannel, 
                                  OSD_W_VALUE                           ); 
                    MENU_EnableMenu(OSD_MESSAGE, ON); 
                    break; 
 
                #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_6) 
 
                case KEY_UP: 
                case KEY_IR_UP: 
                case KEY_DOWN: 
                case KEY_IR_DOWN: 
                    bMenuLastItem       = bMenuCurrentItem - bMenuBaseItem + MENU_HUE; 
                    bMenuBaseItem       = MENU_HUE; 
                    bMenuCurrentItem    = MENU_VOLUME; 
 
                    MENU_ShowMainMenuItem(bMenuBaseItem); 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_VolumeMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_8) 
 
                case KEY_UP: 
                case KEY_IR_UP: 
                    bMenuLastItem       = bMenuCurrentItem - bMenuBaseItem + MENU_BRIGHTNESS; 
                    bMenuBaseItem       = MENU_BRIGHTNESS; 
                    bMenuCurrentItem    = MENU_BRIGHTNESS; 
 
                    MENU_ShowMainMenuItem(bMenuBaseItem); 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_BrightnessMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                case KEY_DOWN: 
                case KEY_IR_DOWN: 
                    bMenuLastItem       = bMenuCurrentItem - bMenuBaseItem + MENU_CONTRAST; 
                    bMenuBaseItem       = MENU_CONTRAST; 
                    bMenuCurrentItem    = MENU_CONTRAST; 
 
                    MENU_ShowMainMenuItem(bMenuBaseItem); 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_ContrastMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                #else 
 
                case KEY_DOWN: 
                case KEY_UP: 
                case KEY_IR_DOWN: 
                case KEY_IR_UP: 
                    bMenuLastItem     = bMenuCurrentItem; 
                    bMenuCurrentItem  = MENU_BRIGHTNESS; 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    DISPATCH_BrightnessMenu(); 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                #endif 
 
                case KEY_UP_DOWN: 
                    bSystemState = SYSTEM_RESET_MENU; 
                    break; 
 
                default: 
                    break; 
            } // switch 
            break; 
 
 
        case SYSTEM_MAIN_MENU: 
            switch (bKey = KEY_BufferOut()) 
            { 
                case KEY_STILL_POWER: 
                case KEY_IR_POWER: 
                    if (fKeyReleased) 
                        POR_PowerOff(); 
                    break; 
 
                case KEY_RELEASE_MENU: 
                case KEY_IR_MENU: 
                    // To vanish Main/Message Menu 
                    MENU_EnableMenu(MENU_MAINMENU, OFF); 
                    MENU_EnableMenu(MENU_MESSAGE, OFF); 
 
                    bSystemState = SYSTEM_POWER_ON; 
                    break; 
 
                #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_1)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_2)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_4)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_5)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_6)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_7)      ||  \ 
                    (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_8) 
 
                case KEY_DOWN: 
                case KEY_IR_DOWN: 
                    bMenuLastItem = bMenuCurrentItem; 
 
                    bMenuCurrentItem++; 
 
                    if (bMenuCurrentItem == MAINMEMU_SIZE) 
                    { 
                        bMenuLastItem       = OSD_MAINMENU_HEIGHT - 1; 
                        bMenuBaseItem       = 0; 
                        bMenuCurrentItem    = 0; 
 
                        MENU_ShowMainMenuItem(bMenuBaseItem); 
                        MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
 
                    } 
                    else if (bMenuCurrentItem == (bMenuBaseItem + OSD_MAINMENU_HEIGHT)) 
                    { 
                        bMenuBaseItem++; 
 
                        MENU_ShowMainMenuItem(bMenuBaseItem); 
                    } 
                    else 
                    { 
                        MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
                    } 
                    break; 
 
                case KEY_UP: 
                case KEY_IR_UP: 
                    bMenuLastItem = bMenuCurrentItem; 
 
                    if (bMenuCurrentItem) 
                    { 
                        bMenuCurrentItem--; 
 
                        if (bMenuCurrentItem < bMenuBaseItem) 
                        { 
                            bMenuBaseItem--; 
 
                            MENU_ShowMainMenuItem(bMenuBaseItem); 
                        } 
                        else 
                        { 
                            MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
                        } 
                    } 
                    else 
                    { 
                        bMenuLastItem    = MAINMEMU_SIZE - OSD_WINDOW2_HEIGHT; 
                        bMenuBaseItem    = MAINMEMU_SIZE - OSD_WINDOW2_HEIGHT; 
                        bMenuCurrentItem = MAINMEMU_SIZE - 1; 
 
                        MENU_ShowMainMenuItem(bMenuBaseItem); 
                        MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
                    } 
                    break; 
 
                #else 
 
                case KEY_DOWN: 
                case KEY_UP: 
                case KEY_IR_DOWN: 
                case KEY_IR_UP: 
                    bMenuLastItem = bMenuCurrentItem; 
 
                    if ((bKey == KEY_DOWN)      || 
                        (bKey == KEY_IR_DOWN)       ) 
                        bMenuCurrentItem = (bMenuCurrentItem + 1) 
                                           % OSD_MAINMENU_HEIGHT; 
                    else 
                        bMenuCurrentItem = (bMenuCurrentItem + OSD_MAINMENU_HEIGHT - 1) 
                                           % OSD_MAINMENU_HEIGHT; 
 
                    MENU_UpdateMainMenuCursor(bMenuBaseItem, bMenuLastItem, bMenuCurrentItem); 
                    break; 
 
                #endif 
 
 
                case KEY_RELEASE_SELECT: 
                case KEY_IR_SELECT: 
                    // To vanish Main Menu 
                    MENU_EnableMenu(MENU_MAINMENU, OFF); 
 
                    // To clear Sub Menu 
                    MENU_ClearMenu(MENU_SUBMENU); 
 
                    switch (bMenuCurrentItem) 
                    { 
                        case MENU_BRIGHTNESS:           // Brightness 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_BrightnessMenu(); 
                            break; 
 
                        case MENU_CONTRAST:             // Contrast 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_ContrastMenu(); 
                            break; 
 
 
                        #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_1)      ||  \ 
                            (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_2)      ||  \ 
                            (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_5) 
 
                        case MENU_SATURATION:           // Color 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SaturationMenu(); 
                            break; 
 
                        case MENU_HUE:                  // Tint 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_HueMenu(); 
                            break; 
 
                        case MENU_DISPLAY_MODE: 
                            DISPATCH_DisplayModeMenu(); 
                            break; 
 
                        case MENU_SHARPNESS: 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SharpnessMenu(); 
                            break; 
 
                        case MENU_IMAGE_FILTER: 
                            DISPATCH_ImageFilterMenu(); 
                            break; 
 
                        case MENU_TCON_MODE: 
                            DISPATCH_TCON_ModeMenu(); 
                            break; 
 
                        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3)    ||  \ 
                              (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_4) 
 
                        case MENU_SATURATION:           // Color 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SaturationMenu(); 
                            break; 
 
                        case MENU_HUE:                  // Tint 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_HueMenu(); 
                            break; 
 
                        case MENU_SHARPNESS: 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SharpnessMenu(); 
                            break; 
 
                        case MENU_IMAGE_FILTER: 
                            DISPATCH_ImageFilterMenu(); 
                            break; 
 
                        case MENU_TCON_MODE: 
                            DISPATCH_TCON_ModeMenu(); 
                            break; 
 
                        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_6) 
 
                        case MENU_SATURATION:           // Color 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SaturationMenu(); 
                            break; 
 
                        case MENU_HUE:                  // Tint 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_HueMenu(); 
                            break; 
 
                        case MENU_SHARPNESS: 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SharpnessMenu(); 
                            break; 
 
                        case MENU_IMAGE_FILTER: 
                            DISPATCH_ImageFilterMenu(); 
                            break; 
 
                        case MENU_VOLUME: 
                            DISPATCH_VolumeMenu(); 
                            break; 
 
                        case MENU_TCON_MODE: 
                            DISPATCH_TCON_ModeMenu(); 
                            break; 
 
                        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_7) 
 
                        case MENU_SATURATION:           // Color 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SaturationMenu(); 
                            break; 
 
                        case MENU_HUE:                  // Tint 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_HueMenu(); 
                            break; 
 
                        case MENU_DISPLAY_MODE: 
                            DISPATCH_DisplayModeMenu(); 
                            break; 
 
                        case MENU_SHARPNESS: 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SharpnessMenu(); 
                            break; 
 
                        case MENU_IMAGE_FILTER: 
                            DISPATCH_ImageFilterMenu(); 
                            break; 
 
                        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_8) 
 
                        case MENU_SATURATION:           // Color 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_SaturationMenu(); 
                            break; 
 
                        case MENU_HUE:                  // Tint 
                            if (tsEYD.bYUV_ID == YUV_ID_YCBCR) 
                            { 
                                // To show Main Menu 
                                MENU_EnableMenu(MENU_MAINMENU, ON); 
                                return; 
                            } 
 
                            DISPATCH_HueMenu(); 
                            break; 
 
                        case MENU_IMAGE_FILTER: 
                            DISPATCH_ImageFilterMenu(); 
                            break; 
 
                        case MENU_TCON_MODE: 
                            DISPATCH_TCON_ModeMenu(); 
                            break; 
 
                        #endif 
 
                        default: 
                            break; 
                    } // switch 
 
                    // To show Sub Menu 
                    MENU_EnableMenu(MENU_SUBMENU, ON); 
                    break; 
 
                case KEY_UP_DOWN: 
                    bSystemState = SYSTEM_RESET_MENU; 
                    break; 
 
                default: 
                    break; 
            } // switch KEY_BufferOut() 
            break; 
 
 
        #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_1)      ||  \ 
            (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_2)      ||  \ 
            (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_5) 
 
        case SYSTEM_BRIGHTNESS_MENU: 
            DISPATCH_BrightnessGo(); 
            break; 
 
        case SYSTEM_CONTRAST_MENU: 
            DISPATCH_ContrastGo(); 
            break; 
 
        case SYSTEM_SATURATION_MENU: 
            DISPATCH_SaturationGo(); 
            break; 
 
        case SYSTEM_HUE_MENU: 
            DISPATCH_HueGo(); 
            break; 
 
        case SYSTEM_DISPLAY_MODE_MENU: 
            DISPATCH_DisplayModeGo(); 
            break; 
 
        case SYSTEM_SHARPNESS_MENU: 
            DISPATCH_SharpnessGo(); 
            break; 
 
        case SYSTEM_IMAGE_FILTER_MENU: 
            DISPATCH_ImageFilterGo(); 
            break; 
 
        case SYSTEM_TCON_MODE_MENU: 
            DISPATCH_TCON_ModeGo(); 
            break; 
 
        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3)    ||  \ 
              (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_4) 
 
        case SYSTEM_BRIGHTNESS_MENU: 
            DISPATCH_BrightnessGo(); 
            break; 
 
        case SYSTEM_CONTRAST_MENU: 
            DISPATCH_ContrastGo(); 
            break; 
 
        case SYSTEM_SATURATION_MENU: 
            DISPATCH_SaturationGo(); 
            break; 
 
        case SYSTEM_HUE_MENU: 
            DISPATCH_HueGo(); 
            break; 
 
        case SYSTEM_SHARPNESS_MENU: 
            DISPATCH_SharpnessGo(); 
            break; 
 
        case SYSTEM_IMAGE_FILTER_MENU: 
            DISPATCH_ImageFilterGo(); 
            break; 
 
        case SYSTEM_TCON_MODE_MENU: 
            DISPATCH_TCON_ModeGo(); 
            break; 
 
        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_6) 
 
        case SYSTEM_BRIGHTNESS_MENU: 
            DISPATCH_BrightnessGo(); 
            break; 
 
        case SYSTEM_CONTRAST_MENU: 
            DISPATCH_ContrastGo(); 
            break; 
 
        case SYSTEM_SATURATION_MENU: 
            DISPATCH_SaturationGo(); 
            break; 
 
        case SYSTEM_HUE_MENU: 
            DISPATCH_HueGo(); 
            break; 
 
        case SYSTEM_SHARPNESS_MENU: 
            DISPATCH_SharpnessGo(); 
            break; 
 
        case SYSTEM_IMAGE_FILTER_MENU: 
            DISPATCH_ImageFilterGo(); 
            break; 
 
        case SYSTEM_VOLUME_MENU: 
            DISPATCH_VolumeGo(); 
            break; 
 
        case SYSTEM_TCON_MODE_MENU: 
            DISPATCH_TCON_ModeGo(); 
            break; 
 
        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_7) 
 
        case SYSTEM_BRIGHTNESS_MENU: 
            DISPATCH_BrightnessGo(); 
            break; 
 
        case SYSTEM_CONTRAST_MENU: 
            DISPATCH_ContrastGo(); 
            break; 
 
        case SYSTEM_SATURATION_MENU: 
            DISPATCH_SaturationGo(); 
            break; 
 
        case SYSTEM_HUE_MENU: 
            DISPATCH_HueGo(); 
            break; 
 
        case SYSTEM_DISPLAY_MODE_MENU: 
            DISPATCH_DisplayModeGo(); 
            break; 
 
        case SYSTEM_SHARPNESS_MENU: 
            DISPATCH_SharpnessGo(); 
            break; 
 
        case SYSTEM_IMAGE_FILTER_MENU: 
            DISPATCH_ImageFilterGo(); 
            break; 
 
        #elif (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_8) 
 
        case SYSTEM_BRIGHTNESS_MENU: 
            DISPATCH_BrightnessGo(); 
            break; 
 
        case SYSTEM_CONTRAST_MENU: 
            DISPATCH_ContrastGo(); 
            break; 
 
        case SYSTEM_SATURATION_MENU: 
            DISPATCH_SaturationGo(); 
            break; 
 
        case SYSTEM_HUE_MENU: 
            DISPATCH_HueGo(); 
            break; 
 
        case SYSTEM_IMAGE_FILTER_MENU: 
            DISPATCH_ImageFilterGo(); 
            break; 
 
        case SYSTEM_TCON_MODE_MENU: 
            DISPATCH_TCON_ModeGo(); 
            break; 
 
        #endif 
 
        case SYSTEM_RESET_MENU: 
            DISPATCH_VersionMenu(); 
 
            // To reset system ! 
            DISPATCH_ResetMenu(); 
 
            // To turn off backlight ! 
            MCU_BL_OFF; 
 
            POR_PowerOn(); 
            break; 
 
 
        case SYSTEM_BURN_IN_MENU: 
            DISPATCH_BurnInGo(); 
            break; 
 
        default: 
            break; 
    } /* switch */ 
} /* DISPATCH_Go */ 
 
 
 
#if (DISPATCH_BLACKLEVEL) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BlacklevelGo - 
    Purpose: To adjust Blacklevel of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BlacklevelGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)       ) 
            { 
                if (tsEGD.bBlackLevel > BLACKLEVEL_MIN) 
                    tsEGD.bBlackLevel  -= BLACKLEVEL_STEP; 
            } 
            else 
            { 
                if (tsEGD.bBlackLevel  < BLACKLEVEL_MAX) 
                    tsEGD.bBlackLevel  += BLACKLEVEL_STEP; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EGD_ADDR_BLACKLEVEL, 
                           sizeof(tsEGD.bBlackLevel), 
                           (UB8 *)&tsEGD.bBlackLevel     ); 
 
 
            bIdx = (tsEGD.bBlackLevel  - BLACKLEVEL_MIN) / BLACKLEVEL_STEP; 
 
 
            // To adjust VP 
            VP_SetBlackLevel(tsEGD.bBlackLevel ); 
 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Progress Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               BLACKLEVEL_OSD_MIN, 
                               BLACKLEVEL_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG        ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_BlacklevelGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BlackLevelMenu - 
    Purpose: To show Blacklevel Menu. 
    Passed: None. 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BlackLevelMenu (void) 
{ 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    bIdx = (tsEGD.bBlackLevel - BLACKLEVEL_MIN) / BLACKLEVEL_STEP; 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Progress Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       BLACKLEVEL_OSD_MIN, 
                       BLACKLEVEL_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG        ); 
 
    bSystemState = SYSTEM_BRIGHTNESS_MENU; 
} /* DISPATCH_BlackLevelMenu */ 
#endif // DISPATCH_BLACKLEVEL 
 
 
 
#if (PROJECT == DMO04012502)        ||  \ 
    (PROJECT == DMO04015200)        ||  \ 
    (PROJECT == DMO04081001)        ||  \ 
    (PROJECT == DMO04085200)        ||  \ 
    (PROJECT == DMO04092500)        ||  \ 
    (PROJECT == DMO04102500)        ||  \ 
    (PROJECT == DMO06015600) 
 
#if (DISPATCH_BRIGHTNESS) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BrightnessGo - DMO04015200/DMO04081001 
    Purpose: To adjust VP BRIGHTNESS. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BrightnessGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)       ) 
            { 
                if (tsEGD.bBrightness > BRIGHTNESS_MIN) 
                    tsEGD.bBrightness -= BRIGHTNESS_STEP; 
            } 
            else 
            { 
                if (tsEGD.bBrightness < BRIGHTNESS_MAX) 
                    tsEGD.bBrightness += BRIGHTNESS_STEP; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EGD_ADDR_BRIGHTNESS, 
                           sizeof(tsEGD.bBrightness), 
                           (UB8 *)&tsEGD.bBrightness    ); 
 
            bIdx = (tsEGD.bBrightness - BRIGHTNESS_MIN) / BRIGHTNESS_STEP; 
 
 
            // To adjust VP 
            VP_SetBrightness(tsEGD.bBrightness); 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Progress Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               BRIGHTNESS_OSD_MIN, 
                               BRIGHTNESS_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG        ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_BrightnessGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BrightnessMenu - DMO04081001/ 
    Purpose: To show VP BRIGHTNESS Menu. 
    Passed: None. 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BrightnessMenu (void) 
{ 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON, OSD_Y_ICON, OSD_1B_BRIGHTNESS); 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // VP ! 
    bIdx = (tsEGD.bBrightness - BRIGHTNESS_MIN) / BRIGHTNESS_STEP; 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Progress Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       BRIGHTNESS_OSD_MIN, 
                       BRIGHTNESS_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG        ); 
 
    bSystemState = SYSTEM_BRIGHTNESS_MENU; 
} /* DISPATCH_BrightnessMenu */ 
#endif // DISPATCH_BRIGHTNESS 
 
#else 
 
#if (DISPATCH_BRIGHTNESS) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BrightnessGo - 
    Purpose: To adjust VD BRIGHTNESS. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BrightnessGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)       ) 
            { 
                if (tsEYD.bBrightness > BRIGHTNESS_MIN) 
                    tsEYD.bBrightness -= BRIGHTNESS_STEP; 
            } 
            else 
            { 
                if (tsEYD.bBrightness < BRIGHTNESS_MAX) 
                    tsEYD.bBrightness += BRIGHTNESS_STEP; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EYD_ADDR_BRIGHTNESS, 
                           sizeof(tsEYD.bBrightness), 
                           (UB8 *)&tsEYD.bBrightness    ); 
 
            bIdx = (tsEYD.bBrightness - BRIGHTNESS_MIN) / BRIGHTNESS_STEP; 
 
 
            // To adjust VD 
            YUV_SetBrightness(tsEYD.bBrightness); 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Progress Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               BRIGHTNESS_OSD_MIN, 
                               BRIGHTNESS_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG        ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_BrightnessGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_BrightnessMenu - 
    Purpose: To show VD BRIGHTNESS Menu. 
    Passed: None. 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_BrightnessMenu (void) 
{ 
    #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3) 
    // Nothing 
    #elif (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON, OSD_Y_ICON, OSD_1B_BRIGHTNESS); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_CC_BRIGHTNESS_L); 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON+1, OSD_Y_ICON, OSD_CD_BRIGHTNESS_R); 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // VD ! 
    bIdx = (tsEYD.bBrightness - BRIGHTNESS_MIN) / BRIGHTNESS_STEP; 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Progress Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       BRIGHTNESS_OSD_MIN, 
                       BRIGHTNESS_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG        ); 
 
    bSystemState = SYSTEM_BRIGHTNESS_MENU; 
} /* DISPATCH_BrightnessMenu */ 
#endif // DISPATCH_BRIGHTNESS 
#endif 
 
 
 
#if (PROJECT == DMO04012502)        ||  \ 
    (PROJECT == DMO04015200)        ||  \ 
    (PROJECT == DMO04081001)        ||  \ 
    (PROJECT == DMO04085200)        ||  \ 
    (PROJECT == DMO04092500)        ||  \ 
    (PROJECT == DMO04102500)        ||  \ 
    (PROJECT == DMO06015600) 
 
#if (DISPATCH_CONTRAST) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ContrastGo - DMO04015200/DMO04081001// 
    Purpose: To adjust VP CONTRAST. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ContrastGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEGD.bContrast > CONTRAST_MIN) 
                    tsEGD.bContrast -= CONTRAST_STEP; 
            } 
            else 
            { 
                if (tsEGD.bContrast < CONTRAST_MAX) 
                    tsEGD.bContrast += CONTRAST_STEP; 
            } 
 
 
            // To backup 
            EEPROM_TxBurst(EGD_ADDR_CONTRAST, 
                           sizeof(tsEGD.bContrast), 
                           (UB8 *)&tsEGD.bContrast  ); 
 
 
            bIdx = (tsEGD.bContrast - CONTRAST_MIN) / CONTRAST_STEP; 
 
            // To adjust VP 
            VP_SetContrast(tsEGD.bContrast); 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               CONTRAST_OSD_MIN, 
                               CONTRAST_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            #if (YUV_GO_POOLING) 
            fYUV_Go_Pooling = ! fYUV_Go_Pooling; 
 
            if (fYUV_Go_Pooling) 
                OSD_ShowChar(OSD_SUBMENU, 0, 0, ' '); 
            else 
                OSD_ShowChar(OSD_SUBMENU, 0, 0, 'X'); 
            #else 
            bSystemState = SYSTEM_RESET_MENU; 
            #endif 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_ContrastGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ContrastMenu - DMO04081001/ 
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ContrastMenu (void) 
{ 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_17_CONTRAST); 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // VP ! 
    bIdx = (tsEGD.bContrast - CONTRAST_MIN) / CONTRAST_STEP; 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       CONTRAST_OSD_MIN, 
                       CONTRAST_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    bSystemState = SYSTEM_CONTRAST_MENU; 
 
    #if (YUV_GO_POOLING) 
    if (fYUV_Go_Pooling) 
        OSD_ShowChar(OSD_SUBMENU, 0, 0, ' '); 
    else 
        OSD_ShowChar(OSD_SUBMENU, 0, 0, 'X'); 
    #endif 
} /* DISPATCH_ContrastMenu */ 
#endif  // DISPATCH_CONTRAST 
 
#else 
 
#if (DISPATCH_CONTRAST) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ContrastGo - 
    Purpose: To adjust VD CONTRAST. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ContrastGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEYD.bContrast > CONTRAST_MIN) 
                    tsEYD.bContrast -= CONTRAST_STEP; 
            } 
            else 
            { 
                if (tsEYD.bContrast < CONTRAST_MAX) 
                    tsEYD.bContrast += CONTRAST_STEP; 
            } 
 
 
            // To backup 
            EEPROM_TxBurst(EYD_ADDR_CONTRAST, 
                           sizeof(tsEYD.bContrast), 
                           (UB8 *)&tsEYD.bContrast  ); 
 
 
            bIdx = (tsEYD.bContrast - CONTRAST_MIN) / CONTRAST_STEP; 
 
            // To adjust VD 
            YUV_SetContrast(tsEYD.bContrast); 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               CONTRAST_OSD_MIN, 
                               CONTRAST_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            #if (YUV_GO_POOLING) 
            fYUV_Go_Pooling = ! fYUV_Go_Pooling; 
 
            if (fYUV_Go_Pooling) 
                OSD_ShowChar(OSD_SUBMENU, 0, 0, ' '); 
            else 
                OSD_ShowChar(OSD_SUBMENU, 0, 0, 'X'); 
            #else 
            bSystemState = SYSTEM_RESET_MENU; 
            #endif 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_ContrastGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ContrastMenu - 
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ContrastMenu (void) 
{ 
    #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3) 
    // Nothing 
    #elif (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_17_CONTRAST); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_D0_CONTRAST_L); 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON+1, OSD_Y_ICON, OSD_D1_CONTRAST_R); 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // VD ! 
    bIdx = (tsEYD.bContrast - CONTRAST_MIN) / CONTRAST_STEP; 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       CONTRAST_OSD_MIN, 
                       CONTRAST_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    bSystemState = SYSTEM_CONTRAST_MENU; 
 
    #if (YUV_GO_POOLING) 
    if (fYUV_Go_Pooling) 
        OSD_ShowChar(OSD_SUBMENU, 0, 0, ' '); 
    else 
        OSD_ShowChar(OSD_SUBMENU, 0, 0, 'X'); 
    #endif 
} /* DISPATCH_ContrastMenu */ 
#endif  // DISPATCH_CONTRAST 
#endif 
 
 
#if (DISPATCH_DISPLAYMODE) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_DisplayModeGo - 
    Purpose: To adjust DISPLAY MODE of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_DisplayModeGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            OSD_ShowChar(OSD_SUBMENU, 
                         OSD_X_DISPLAY + OSD_X_DISPLAY_STEP * tsEGD.bDisplay_Mode, 
                         OSD_Y_DISPLAY, 
                         OSD_ICON_CHECK_OFF); 
 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                tsEGD.bDisplay_Mode = (tsEGD.bDisplay_Mode + DISPLAY_MODE_SIZE - 1) % 
                                      DISPLAY_MODE_SIZE; 
            } 
            else 
            { 
                tsEGD.bDisplay_Mode = (tsEGD.bDisplay_Mode + 1) % 
                                      DISPLAY_MODE_SIZE; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EGD_ADDR_DISPLAY_MODE, 
                           sizeof(tsEGD.bDisplay_Mode), 
                           (UB8 *)&tsEGD.bDisplay_Mode  ); 
 
            // To adjust VP 
            VP_DisplayMode(tsEGD.bDisplay_Mode); 
 
            OSD_ShowChar(OSD_SUBMENU, 
                         OSD_X_DISPLAY + OSD_X_DISPLAY_STEP * tsEGD.bDisplay_Mode, 
                         OSD_Y_DISPLAY, 
                         OSD_ICON_CHECK_ON); 
            break; 
 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_DisplayModeGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_DisplayModeMenu - 
    Purpose: To adjust DISPLAY MODE of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_DisplayModeMenu (void) 
{ 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON_USER               ); 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_7B_DISPLAY_MODE); 
 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // Show Display Mode 
    for (bIdx = 0; bIdx < DISPLAY_MODE_SIZE; bIdx++) 
    { 
        OSD_ShowChar(OSD_SUBMENU, 
                     OSD_X_DISPLAY + OSD_X_DISPLAY_STEP * bIdx, 
                     OSD_Y_DISPLAY, 
                     OSD_ICON_CHECK_OFF); 
 
        OSD_ShowMsg(OSD_SUBMENU, 
                    OSD_X_DISPLAY + OSD_X_DISPLAY_STEP * bIdx + 1, 
                    OSD_Y_DISPLAY, 
                    apbDISPLAY_MODE[ bIdx ]); 
    } 
 
    OSD_ShowChar(OSD_SUBMENU, 
                 OSD_X_DISPLAY + OSD_X_DISPLAY_STEP * tsEGD.bDisplay_Mode, 
                 OSD_Y_DISPLAY, 
                 OSD_ICON_CHECK_ON); 
 
    bSystemState = SYSTEM_DISPLAY_MODE_MENU; 
} /* DISPATCH_DisplayModeMenu */ 
#endif 
 
 
#if (DISPATCH_HUE) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_HueGo - 
    Purpose: To adjust HUE of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_HueGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)       ) 
            { 
                if (tsEYD.bHue > HUE_MIN) 
                    tsEYD.bHue -= HUE_STEP; 
                else 
                    tsEYD.bHue = HUE_MAX; 
            } 
            else 
            { 
                if (tsEYD.bHue < HUE_MAX) 
                    tsEYD.bHue += HUE_STEP; 
                else 
                    tsEYD.bHue = HUE_MIN; 
            } 
 
            EEPROM_TxBurst(EYD_ADDR_HUE, 
                           sizeof(tsEYD.bHue), 
                           (UB8 *)&tsEYD.bHue   ); 
 
 
            bIdx = (tsEYD.bHue - HUE_MIN) / HUE_STEP; 
 
            // Set the new HUE phase (degree) 
            YUV_SetHue(tsEYD.bHue); 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Track Bar 
            OSD_DspTrackBar(OSD_SUBMENU, 
                            OSD_X_BAR, 
                            OSD_Y_BAR, 
                            HUE_OSD_MIN, 
                            HUE_OSD_MAX, 
                            bIdx, 
                            OSD_BAR_WIDTH   ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            // To clear Sub Menu 
            MENU_ClearMenu(MENU_SUBMENU); 
 
            // To disable BLANK COLOR  ! 
            VP_BlankColor(OFF); 
 
            bSystemState = SYSTEM_BURN_IN_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_HueGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_HueMenu - 
    Purpose: To adjust HUE of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_HueMenu (void) 
{ 
    #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3) 
    // Nothing 
    #elif (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_19_HUE); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Nothing 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
 
    bIdx = (tsEYD.bHue - HUE_MIN) / HUE_STEP; 
 
    // To show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Track Bar 
    OSD_DspTrackBar(OSD_SUBMENU, 
                    OSD_X_BAR, 
                    OSD_Y_BAR, 
                    HUE_OSD_MIN, 
                    HUE_OSD_MAX, 
                    bIdx, 
                    OSD_BAR_WIDTH   ); 
 
    bSystemState = SYSTEM_HUE_MENU; 
} /* DISPATCH_HueMenu */ 
#endif  // DISPATCH_HUE 
 
 
#if (DISPATCH_IMAGEFILTER) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ImageFilterGo - 
    Purpose: To adjust Image Filter of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ImageFilterGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEGD.bImage_Filter > IMAGE_FILTER_MIN) 
                    tsEGD.bImage_Filter -= IMAGE_FILTER_STEP; 
            } 
            else 
            { 
                if (tsEGD.bImage_Filter < IMAGE_FILTER_MAX) 
                    tsEGD.bImage_Filter += IMAGE_FILTER_STEP; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EGD_ADDR_IMAGE_FILTER, 
                           sizeof(tsEGD.bImage_Filter), 
                           (UB8 *)&tsEGD.bImage_Filter  ); 
 
            // To adjust VP 
            VP_SetImageFilter(tsEGD.bImage_Filter); 
 
            // Show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          tsEGD.bImage_Filter, 
                          OSD_W_VALUE                           ); 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               IMAGE_FILTER_OSD_MIN, 
                               IMAGE_FILTER_OSD_MAX, 
                               tsEGD.bImage_Filter, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
            break; 
 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_ImageFilterGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ImageFilterMenu - 
    Purpose: To adjust IMAGE FILTER of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ImageFilterMenu (void) 
{ 
    #if (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON_USER               ); 
 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_7D_IMAGE_FILTER); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Nothing 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  tsEGD.bImage_Filter, 
                  OSD_W_VALUE                           ); 
 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       IMAGE_FILTER_OSD_MIN, 
                       IMAGE_FILTER_OSD_MAX, 
                       tsEGD.bImage_Filter, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    bSystemState = SYSTEM_IMAGE_FILTER_MENU; 
} /* DISPATCH_ImageFilterMenu */ 
#endif 
 
 
#if (DISPATCH_RESET) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_ResetMenu - 
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_ResetMenu (void) 
{ 
    // To enable BLANK COLOR 
    VP_BlankColor(ON); 
 
    OSD_ShowMsg(OSD_MESSAGE, 
                OSD_X_RESET, 
                OSD_Y_RESET, 
                abRESET     ); 
 
    // To show Sub Menu 
    MENU_EnableMenu(MENU_MESSAGE, ON); 
 
    TIMER_DelayMS(MENU_AUTO_OFF_3SEC); 
 
    // To reset EEPROM content ! 
    EEPROM_Default(); 
 
    // To keep original Video Source ! 
    EEPROM_TxBurst(EYD_ADDR_YUV_ID, 
                   sizeof(tsEYD.bYUV_ID), 
                   (UB8 *)&tsEYD.bYUV_ID    ); 
 
    // To read EYD ! 
    EEPROM_RxBurst(EYD_ADDR, 
                   sizeof(tEYD), 
                   (UB8 *)&tsEYD    ); 
 
    // To read EGD ! 
    EEPROM_RxBurst(EGD_ADDR, 
                   sizeof(tEGD), 
                   (UB8 *)&tsEGD    ); 
 
} /* DISPATCH_ResetMenu */ 
#endif // PROJECT 
 
 
#if (DISPATCH_SHARPNESS) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_SharpnessGo - 
    Purpose: To adjust SHARPNESS of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_SharpnessGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if (bColorStd == YUV_CS_SECAM) 
                return; 
 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEYD.bSharpness > SHARPNESS_MIN) 
                    tsEYD.bSharpness -= SHARPNESS_STEP; 
            } 
            else 
            { 
                if (tsEYD.bSharpness < SHARPNESS_MAX) 
                    tsEYD.bSharpness += SHARPNESS_STEP; 
            } 
 
 
 
            // To backup 
            EEPROM_TxBurst(EYD_ADDR_SHARPNESS, 
                           sizeof(tsEYD.bSharpness), 
                           (UB8 *)&tsEYD.bSharpness     ); 
 
            // To adjust VD 
            YUV_SetSharpness(tsEYD.bSharpness); 
 
            // Show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          tsEYD.bSharpness, 
                          OSD_W_VALUE                         ); 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               SHARPNESS_OSD_MIN, 
                               SHARPNESS_OSD_MAX, 
                               tsEYD.bSharpness, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
            break; 
 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_SharpnessGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_SharpnessMenu - 
    Purpose: To adjust SHARPNESS of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_SharpnessMenu (void) 
{ 
    #if (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON_USER               ); 
 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_7E_SHARPNESS); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Nothing 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  tsEYD.bSharpness, 
                  OSD_W_VALUE                 ); 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       SHARPNESS_OSD_MIN, 
                       SHARPNESS_OSD_MAX, 
                       tsEYD.bSharpness, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    bSystemState = SYSTEM_SHARPNESS_MENU; 
} /* DISPATCH_SharpnessMenu */ 
#endif 
 
 
#if (DISPATCH_SATURATION) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_SaturationGo - 
    Purpose: To adjust SATURATION of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_SaturationGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEYD.bSaturation > SATURATION_MIN) 
                    tsEYD.bSaturation -= SATURATION_STEP; 
            } 
            else 
            { 
                if (tsEYD.bSaturation < SATURATION_MAX) 
                    tsEYD.bSaturation += SATURATION_STEP; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EYD_ADDR_SATURATION, 
                           sizeof(tsEYD.bSaturation), 
                           (UB8 *)&tsEYD.bSaturation    ); 
 
 
            // To adjust VD 
            YUV_SetSaturation(tsEYD.bSaturation); 
 
            // tsEYD.bSaturation = OSD.bSaturation * 8 
            bIdx = (tsEYD.bSaturation - SATURATION_MIN) / SATURATION_STEP; 
 
            // To show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                           ); 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               SATURATION_OSD_MIN, 
                               SATURATION_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_SaturationGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_SaturationMenu - 
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_SaturationMenu (void) 
{ 
    #if (MENU_STYLE_CFG == MENU_STYLE_SCROLLING_3) 
    // Nothing 
    #elif (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
 
    // Show Icon 
    OSD_ShowChar(OSD_SUBMENU, OSD_X_ICON,   OSD_Y_ICON, OSD_18_SATURATION); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Nothing 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    bIdx = (tsEYD.bSaturation - SATURATION_MIN) / SATURATION_STEP; 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                           ); 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       SATURATION_OSD_MIN, 
                       SATURATION_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    bSystemState = SYSTEM_SATURATION_MENU; 
} /* DISPATCH_SaturationMenu */ 
#endif  // DISPATCH_SATURATION 
 
 
#if (DISPATCH_TCON_MODE) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_TCON_ModeGo - 
    Purpose: To adjust TCON MODE of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_TCON_ModeGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            OSD_ShowChar(OSD_SUBMENU, 
                         OSD_X_TCON + OSD_X_TCON_STEP * tsEGD.bTCON_Mode, 
                         OSD_Y_TCON, 
                         OSD_ICON_CHECK_OFF); 
 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                tsEGD.bTCON_Mode = (tsEGD.bTCON_Mode + TCON_MODE_SIZE - 1) % TCON_MODE_SIZE; 
            } 
            else 
            { 
                tsEGD.bTCON_Mode = (tsEGD.bTCON_Mode + 1) % TCON_MODE_SIZE; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EGD_ADDR_TCON_MODE, 
                           sizeof(tsEGD.bTCON_Mode), 
                           (UB8 *)&tsEGD.bTCON_Mode  ); 
 
            // To adjust VP 
            VP_SetTCON_Mode(tsEGD.bTCON_Mode); 
 
            OSD_ShowChar(OSD_SUBMENU, 
                         OSD_X_TCON + OSD_X_TCON_STEP * tsEGD.bTCON_Mode, 
                         OSD_Y_TCON, 
                         OSD_ICON_CHECK_ON); 
            break; 
 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_TCON_ModeGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_TCON_ModeMenu - 
    Purpose: To adjust TCON MODE of VP. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_TCON_ModeMenu (void) 
{ 
    #if (OSD_CFG == OSD_BIT1611B) 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
    #elif (OSD_CFG == OSD_MTV121) 
    // Nothing 
    #endif 
 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    // Show TCON Mode 
    for (bIdx = 0; bIdx < TCON_MODE_SIZE; bIdx++) 
    { 
        OSD_ShowChar(OSD_SUBMENU, 
                     OSD_X_TCON + OSD_X_TCON_STEP * bIdx, 
                     OSD_Y_TCON, 
                     OSD_ICON_CHECK_OFF); 
 
        OSD_ShowMsg(OSD_SUBMENU, 
                    OSD_X_TCON + OSD_X_TCON_STEP * bIdx + 1, 
                    OSD_Y_TCON, 
                    apbTCON_MODE[ bIdx ]); 
    } 
 
    OSD_ShowChar(OSD_SUBMENU, 
                 OSD_X_TCON + OSD_X_TCON_STEP * tsEGD.bTCON_Mode, 
                 OSD_Y_TCON, 
                 OSD_ICON_CHECK_ON); 
 
    bSystemState = SYSTEM_TCON_MODE_MENU; 
} /* DISPATCH_TCON_ModeMenu */ 
#endif  // DISPATCH_TCON_MODE 
 
 
 
#if (DISPATCH_SKIN_TONE) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_Skin_ToneGo -  
    Purpose: To adjust Skin Tone of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_Skin_ToneGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEYD.bSkin_Tone > SKIN_TONE_MIN) 
                    tsEYD.bSkin_Tone -= SKIN_TONE_STEP; 
            } 
            else 
            { 
                if (tsEYD.bSkin_Tone < SKIN_TONE_MAX) 
                    tsEYD.bSkin_Tone += SKIN_TONE_STEP; 
            } 
 
            // To backup 
            EEPROM_TxBurst(EYD_ADDR_SKIN_TONE, 
                           sizeof(tsEYD.bSkin_Tone), 
                           (UB8 *)&tsEYD.bSkin_Tone     ); 
 
            // To adjust VD 
            YUV_SetSkinTone(tsEYD.bSkin_Tone); 
 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               SKIN_TONE_OSD_MIN, 
                               SKIN_TONE_OSD_MAX, 
                               tsEYD.bSkin_Tone, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
 
            // Show Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          tsEYD.bSkin_Tone, 
                          OSD_W_VALUE                         ); 
 
            break; 
 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_Skin_ToneGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_Skin_ToneMenu - 
    Purpose: To adjust Skin Tone of VD. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_Skin_ToneMenu (void) 
{ 
    // ICON of Window 3 
    OSD_FillCharAttr(OSD_WINDOW3_BASE + OSD_X_ICON, 
                     1, 
                     OSD3_COLOR_ICON                ); 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       SKIN_TONE_OSD_MIN, 
                       SKIN_TONE_OSD_MAX, 
                       tsEYD.bSkin_Tone, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    // Show Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  tsEYD.bSkin_Tone, 
                  OSD_W_VALUE                           ); 
 
    // To show Sub Menu 
    MENU_EnableMenu(MENU_SUBMENU, ON); 
 
    bSystemState = SYSTEM_SKIN_TONE_MENU; 
} /* DISPATCH_Skin_ToneMenu */ 
#endif 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_Init - 
    Purpose: 
    Passed: None. 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_Init (void) 
{ 
    bSystemState = SYSTEM_POWER_OFF; 
} /* DISPATCH_Init */ 
 
 
#if (DISPATCH_VERSION) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_VersionMenu - 
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_VersionMenu (void) 
{ 
    // To clear Sub Menu 
    MENU_ClearMenu(MENU_SUBMENU); 
 
 
    #if (OSD_CFG == OSD_BIT1611B) 
    // BiTEK user font for LOGO 
    OSD_FillCharCodeAttr(OSD_WINDOW3_BASE + OSD_X_LOGO, 
                         1, 
                         OSD_7F_BITEK, 
                         OSD3_COLOR_USER                ); 
    #endif 
 
    // Show Copyright ! 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_COPYRIGHT, 
                OSD_Y_COPYRIGHT, 
                CODE_COPYRIGHT  ); 
 
    // Show Date/Version ! 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_DATE_VERSION, 
                OSD_Y_DATE_VERSION, 
                CODE_DATE_VERSION   ); 
 
    // To show Sub Menu 
    MENU_EnableMenu(MENU_SUBMENU, ON); 
 
    TIMER_DelayMS(MENU_AUTO_OFF_3SEC); 
 
 
    #if (OSD_CFG == OSD_BIT1611B) 
    // BiTEK user font for LOGO disappear ! 
    OSD_FillCharCodeAttr(OSD_WINDOW3_BASE + OSD_X_LOGO, 
                         1, 
                         ' ', 
                         OSD3_COLOR_HILIGHT             ); 
    #endif 
 
 
    // OSD Auto OFF ! 
    wMENU_Tick = MENU_AUTO_OFF_TIME; 
} /* DISPATCH_VersionMenu */ 
#endif 
 
 
#if (DISPATCH_VOLUME) 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_VolumeGo - 
    Purpose: To adjust Audio Volume. 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_VolumeGo (void) 
{ 
    switch (bKey = KEY_BufferOut()) 
    { 
        case KEY_STILL_POWER: 
        case KEY_IR_POWER: 
            POR_PowerOff(); 
            break; 
 
        case KEY_UP: 
        case KEY_DOWN: 
        case KEY_IR_UP: 
        case KEY_IR_DOWN: 
            if ((bKey == KEY_DOWN)      || 
                (bKey == KEY_IR_DOWN)      ) 
            { 
                if (tsEGD.wVolume > VOLUME_MIN) 
                    tsEGD.wVolume -= VOLUME_STEP; 
            } 
            else 
            { 
                if (tsEGD.wVolume < VOLUME_MAX) 
                    tsEGD.wVolume += VOLUME_STEP; 
            } 
 
            // Backup Value 
            EEPROM_TxBurst(EGD_ADDR_VOLUME, 
                           sizeof(tsEGD.wVolume), 
                           (UB8 *)&tsEGD.wVolume    ); 
 
            // Adjust Audio Volume 
            AUDIO_SetVolume(tsEGD.wVolume); 
 
            bIdx = (tsEGD.wVolume - VOLUME_MIN) / VOLUME_STEP; 
 
 
            // Show OSD Value 
            OSD_ShowValue(OSD_SUBMENU, 
                          OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                          OSD_Y_VALUE, 
                          bIdx, 
                          OSD_W_VALUE                         ); 
 
            // To display Bar 
            OSD_DspProgressBar(OSD_SUBMENU, 
                               OSD_X_BAR, 
                               OSD_Y_BAR, 
                               VOLUME_OSD_MIN, 
                               VOLUME_OSD_MAX, 
                               bIdx, 
                               OSD_BAR_WIDTH, 
                               OSD_STYLE_CFG                ); 
            break; 
 
        case KEY_RELEASE_MENU: 
        case KEY_IR_MENU: 
        case KEY_RELEASE_SELECT: 
        case KEY_IR_SELECT: 
            MENU_EnableMenu(MENU_SUBMENU, OFF); 
            MENU_EnableMenu(MENU_MAINMENU, ON); 
            bSystemState = SYSTEM_MAIN_MENU; 
            break; 
 
        case KEY_UP_DOWN: 
            bSystemState = SYSTEM_RESET_MENU; 
            break; 
 
        default: 
            break; 
    } // switch KEY_BufferOut() 
} /* DISPATCH_VolumeGo */ 
 
 
/* ------------------------------------------------------------------- 
    Name: DISPATCH_VolumeMenu - 
    Purpose: 
    Passed: 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
void DISPATCH_VolumeMenu (void) 
{ 
    // Show Title 
    OSD_ShowMsg(OSD_SUBMENU, 
                OSD_X_TITLE, 
                OSD_Y_TITLE, 
                apbMainMenu[ bMenuCurrentItem ]); 
 
    bIdx = (tsEGD.wVolume - VOLUME_MIN) / VOLUME_STEP; 
 
    // Show OSD Value 
    OSD_ShowValue(OSD_SUBMENU, 
                  OSD_SUBMENU_WIDTH - OSD_W_VALUE - 1, 
                  OSD_Y_VALUE, 
                  bIdx, 
                  OSD_W_VALUE                         ); 
 
 
    // To display Bar 
    OSD_DspProgressBar(OSD_SUBMENU, 
                       OSD_X_BAR, 
                       OSD_Y_BAR, 
                       VOLUME_OSD_MIN, 
                       VOLUME_OSD_MAX, 
                       bIdx, 
                       OSD_BAR_WIDTH, 
                       OSD_STYLE_CFG                ); 
 
    bSystemState = SYSTEM_VOLUME_MENU; 
} /* DISPATCH_VolumeMenu */ 
#endif 
 
 
 
/* ------------------------------------------------------------------- 
    Name:  - 
    Purpose: . 
    Passed: None. 
    Returns: None. 
    Notes: 
   ------------------------------------------------------------------- */ 
 
 
/* ********************************************************************** 
 
    Description: 
 
   ********************************************************************** */ 
 
 
/* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */