
/*===========================================================
 * Copyright (c)      Realtek Semiconductor Corporation, 2005
 * All rights reserved.
 * ========================================================== */

/*==================== File Description ===================== */
/**
 * @file
 * 	This file is osd engine implement file for osd related functions.
 *
 * @author 	$Author: hillwang $
 * @date 	$Date: 2006-08-07 16:36:23 +0800 (?Ÿæ?ä¸€, 07 ?«æ? 2006) $
 * @version $Revision: 1155 $
 */

/**
 * @addtogroup osd
 * @{
 */

#define _OSDCORE_C

/*===================== Module dependency  ================== */
#include "Core\Header\Include.h"
//#include "Core\Header\Auto.h"


#if 1//_TYPEOF_OSD_KONSTA
#define GET_CP_ITEM_ACTIVE()		_CP_12//_CP_3 //20081124 ccy modify org to red
#define GET_CP_ITEM_UNACTIVE()		_CP_1


/*======================= Private Types ===================== */
typedef struct {
    MenuItemSet*	pMenuItemSet;
    UINT8	ucMainMenu;
    UINT8	ucSubMenu;
} LayerStack;
/*======================== Definitions ====================== */

UINT8 code  tOsdSoftwareVersionStr[]={  // tommy change   weixg mod 20070515 xdata
    //_F_,_W_,0x00,_V_,_e_,_r_,0x00,_1_, 0x0e, _2_,_END_,
    _V_,_e_,_r_,_COLON_,(_VERSION_CODE&0x0f)+_0_,_DOT_,(_RELEASE_CODE>>4)+_0_,(_RELEASE_CODE&0x0f)+_0_,_END_,		///new add
    _THE_SAME_,
};
/*========================== Variables ====================== */

UINT8 ucPasswordInputNum;
UINT8 FactoryInputPassword[4];

xdata UINT8	ucLayerIndex;
static xdata LayerStack	stLayerStack[_MAXLAYER_NUM];


//xdata UINT8 ucExtendMenuRow;
//xdata UINT8 ucExtendMenuCol;
xdata UINT8	ucOsdState;
static xdata UINT8	CurInputPassword[4];
xdata UINT8 ucOsdShowControl;
//xdata UINT8 tOsdTimeStr[30];
// For Channel Input
xdata UINT8 ucNumberof;
xdata UINT8 ucChannelNum;

BIT ucOsdlayerExit =0;// add by xyw to modified Exit Sub Menu blink 071022 ;
BIT ucOsdisAutoMenu =0;// modified finish auto ,menu error  by xyw  071022 ;

#if(_MEMORY_LOCATION == _FLASH)
BIT bBrightnessFlag = _DISABLE;
BIT bContrastFlag = _DISABLE;
BIT bSaturationFlag = _DISABLE;
BIT bHueFlag = _DISABLE;
BIT bSharpnessFlag = _DISABLE;
BIT bBassFlag = _DISABLE;
BIT bTrebleFlag = _DISABLE;
BIT bBalanceFlag = _DISABLE;
BIT bOsdTimerFlag = _DISABLE;
BIT bOsdBlendingFlag = _DISABLE;
BIT bOsdClockFlag = _DISABLE;
BIT bHPositionFlag = _DISABLE;
BIT bVPositionFlag = _DISABLE;
BIT bClockFlag = _DISABLE;
BIT bPhaseFlag = _DISABLE;
BIT bChannel1Flag = _DISABLE;
BIT bChannel2Flag = _DISABLE;
BIT bVolumeFlag = _DISABLE;
#endif

#if (_SCAN_TYPE == _SEQUENTIAL_SCAN)
xdata UINT8 ucFirstChannel;
xdata UINT8 ucFreqInc;
BIT	bFirstChannelFlag=1;
#endif

#if((_MCU_TYPE == _REALTEK_RTD2662_EMCU) && (_DEBUG_TOOL == _RS232)) //fjyang
BIT ucRtd2662IspFlag=0;
#endif

#if( SKYWORTH_OSD == _ENABLE )
//xdata ItemSelectDialog tSignalSourceSetP_temp;  //tommy liao delete 070531
#endif

// VChip
xdata UINT8 ucPasswordInputNum;

// System Clock
xdata UINT8 ucHour = 0;
xdata UINT8 ucMin = 0;
xdata UINT8 ucSec = 0;
static xdata UINT8 ucClockStr[7];  //  SKYWORTH_CHINESE         tommy liao change ucClockStr[10];

#if _TIMER_SLEEP_HINT_SUPPORT
bit bTimeSecTicker = 0;
bit bTimeoverHintOsdState = 0;	// 1: do not show time over remind osd because some message is showing
bit bTimeoverHintRequest = 0;	// 1: time over request show
data UINT8 ucHourSystem = 0;
data UINT8 ucMinSystem = 0;
data UINT8 ucSecSystem = 0;
WORD usTimeStopAndSystemDiffer=0;
bit bTimeStartDone = 0;
bit bTimeStopDone = 0;
UINT8 xdata ucSleepTimeSecCnt = 60;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

#if _CUSTOMER_SANSE
bit bLedFlash = 0;	//sanse: flash led while sleep and nosignal state

#endif
#if _CHANGE_SOURCE_POWERLIGHT_POWEROFF
bit bIsChangeSource=0;	//sanse: change source status, flag for off back light
#endif
//xdata UINT8 ucEnterFacMenu = 0;			//add lbh 20090916

// Change Source
#if (_Change_SOURCE_Type == Change_SOURCE_Type2 || _Change_SOURCE_Type == Change_SOURCE_Type3)
xdata UINT8 ucSourceTemp;
#endif

BIT bShowMultiSelectWindowFlag=0;
BIT bNoflashWondowFlag=0;
BIT bInputPasswordComplete = _FALSE;

#if(_PANEL_TYPE == _CPT_CMO_TTL_20)
BIT bICMCMDFlag=_FALSE;
#endif

#if _HPC_OTHER_IR_FUCTION_ENABLE
BYTE xdata TVAV_Value=0;	// 0------TV,1-----AV
#endif

unsigned char count=0xC0;

#if _TIMING_INFO_TYPE == _TABLE_TYPE
WORD code Timing_Information[][3] =
{
    640,	350,	70,	//Mode 0:_MODE_640x350_70HZ
    640,	350,	85,	//Mode 1:_MODE_640x350_85HZ
    720,	400,	70,	//Mode 2:_MODE_720x400_70HZ
    640,	400,	85,	//Mode 3:_MODE_640x400_85HZ
    720,	400,	85,	//Mode 4:_MODE_720x400_85HZ
    640,	480,	60,	//Mode 5:_MODE_640x480_60HZ
    640,	480,	66, //Mode 6:_MODE_640x480_66HZ
    640,	480,	72,	//Mode 7:_MODE_640x480_72HZ
    640,	480,	75,	//Mode 8:_MODE_640x480_75HZ
    640,	480,	85,	//Mode 9:_MODE_640x480_85HZ
    800,	600,	56,	//Mode 10:_MODE_800x600_56HZ
    800,	600,	60, //Mode 11:_MODE_800x600_60HZ
    800,	600,	72,	//Mode 12:_MODE_800x600_72HZ
    800,	600,	75,	//Mode 13:_MODE_800x600_75HZ
    800,	600,	85,	//Mode 14:_MODE_800x600_85HZ
    832,	624,	75,	//Mode 15:_MODE_832x624_75HZ
    1024,	768,	60,	//Mode 16:_MODE_1024x768_60HZ
    1024,	768,	70,	//Mode 17:_MODE_1024x768_70HZ
    1024,	768,	75,	//Mode 18:_MODE_1024x768_75HZ
    1024,	768,	85,	//Mode 19:_MODE_1024x768_85HZ
    1024,	800,	73,	//Mode 20:_MODE_1024x800_73HZ
    1024,	800,	85,	//Mode 21:_MODE_1024x800_85HZ
    1152,	864,	60,	//Mode 22:_MODE_1152x864_60HZ
    1152,	864,	70,	//Mode 23:_MODE_1152x864_70HZ
    1152,	864,	75,	//Mode 24:_MODE_1152x864_75HZ
    1152,	864,	85,	//Mode 25:_MODE_1152x864_85HZ
    1152,	870,	75,	//Mode 26:_MODE_1152x870_75HZ
    1152,	900,	66,	//Mode 27:_MODE_1152x900_66HZ
    1152,	900,	76,	//Mode 28:_MODE_1152x900_76HZ
    1280,	720,	60,	//Mode 29:_MODE_1280x720_60HZ
    1280,	720,	75,	//Mode 30:_MODE_1280x720_75HZ
    1280,	768,	60,	//Mode 31:_MODE_1280x768_60HZ
    1280,	768,	70,	//Mode 32:_MODE_1280x768_70HZ
    1280,	768,	75,	//Mode 33:_MODE_1280x768_75HZ
    1280,	960,	60,	//Mode 34:_MODE_1280x960_60HZ
    1280,	960,	75,	//Mode 35:_MODE_1280x960_75HZ
    1280,	960,	85,	//Mode 36:_MODE_1280x960_85HZ
    1280,	1024,	60,	//Mode 37:_MODE_1280x1024_60HZ
    1280,	1024,	70,	//Mode 38:_MODE_1280x1024_70HZ
    1280,	1024,	75,	//Mode 39:_MODE_1280x1024_75HZ
    1280,	1024,	85,	//Mode 40:_MODE_1280x1024_85HZ
    1600,	1200,	60,	//Mode 41:_MODE_1600x1200_60HZ
    1600,	1200,	65,	//Mode 42:_MODE_1600x1200_65HZ
    1600,	1200,	70,	//Mode 43:_MODE_1600x1200_70HZ
    1600,	1200,	75,	//Mode 44:_MODE_1600x1200_75HZ
    1600,	1200,	85,	//Mode 45:_MODE_1600x1200_85HZ
    1680,	1050,	60,	//Mode 46:_MODE_1680x1050_60HZ
    1680,	1050,	75,	//Mode 47:_MODE_1680x1050_75HZ
};
#endif

/*=================== Local Functions Phototype ==============*/
static void CosdCoreShowMainMenuItem(MenuItemSet code *pMenuItemSet);
static void COsdCoreShowSubMenuItem(SubMenuInfo* pSubMenuInfo);
static void COsdMainMenuItemChangeColor(MenuItemSet* pMenuItemSet, UINT8 ucItemNo, BIT bActive);
static void COsdSubMenuItemChangeColor(SubMenuInfo* pSubMenuInfo, UINT8 ucItemNo, BIT bActive);
static void COsdBackMenuProc();
static void COsdCoreIdleEventProc(void);
static void COsdCoreMainMenuEventProc(void);
static void COsdMainMenuDirectionKeyProc(UINT8 message);
static void COsdMenuMoveProc(UINT8 ucMain, UINT8 ucSub, UINT8 bRefresh);

static UINT16 COsdCoreCalItemBnkLength(MenuItemSet* pMenuItemSet, UINT8 ItemOrder);
//static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucRow, UINT8 ucCol, UINT16 usItemWidth, bit bActive);
static void COsdCoreFreshItem(BIT bActive);
static UINT16 COsdCtrlCalcDetRange(UINT16 ucValue, UINT16 ucMax, UINT16 ucMin, UINT8 message, BIT bTurboFlag);
static void COsdFxSliderDirectionProc(ItemSlider * pItemSlider, UINT8 message);
static void COsdFxSlider1DirectionProc(ItemSlider1 * pItemSlider1, UINT8 message);
// For TV Proc
static void COsdCoreTVEventProc(void);

// For source Change Proc
//static void COsdCoreShowSourceEventProc(void);
static void COsdChangeSourceProc(void);
static void COsdFxShowSource(void);
static void COSdCoreShowVGAInfo();
static void COSdCoreShowYPbPrInfo();

// For NoSingal source
static void COsdNoSignalEventProc(void);
//static void COsdFxShowNoSignalSource(void);
//static void COsdFxShowNoCable(void);

// Extend Menu Event Proc
static void COsdCoreExtendMenuEventProc(void);

// Channel Edit Event Proc
static void COsdCoreChannelNumberEditProc(void);
static void COsdCoreChannelNumberEditEventProc(void);

// Audio
static void COsdCoreVolumnChangeProc(void);


static void COsdCoreVolumnProc(void);
static void COsdCoreMuteChangeProc(void);
static void COsdCoreMuteChangeShow(void);
static void COsdCoreSleepProc(void);
static void COsdCoreDisplayRatioProc(void);
static void COsdCoreDispatchMsg(void);

#if(_FACTORY_MENU_ENABLE)
//Factory menu
static void COsdCoreInitFactorySettingWindow(void);
#endif


#if(_Change_SOURCE_Type == Change_SOURCE_Type2)
static void COsdFxChangeSourceShow(void);
#endif

#if (_AUDIO_EFFECT_SUPPORT)
static void COsdCoreAudioEffectProc(void);
#endif

//static void COsdCoreLoadAllTitleIcon(UINT8 ucRow, UINT8 ucCol,UINT8 ForegroundColor,UINT8 ChangePosition,UINT8 IconWidth,UINT8 IconSum);//20070510
static void COsdCoreLoad1BiTIcon(UINT8 ucRow, UINT8 ucCol,  UINT8 ForegroundColor,UINT8 LanguageSelect,UINT8  *pArray);//20070509;
static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucMidRow, UINT8 ucMidCol, UINT16 ucBkLength ,bit bActive);

static CosdCoreShowNoteMessage(UINT8 ucRow, UINT8 ucCol,UINT16 ucSpaceLength,UINT8 ucItemCount,UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucLanguageSelect);
static void COsdCoreBackMenuDrawPage(void);              //dong add 20080818

void COsdCoreAutoScanRefreshChannelNumber(ItemBracket* pItemBracket);

#if _PAL_MASK_HUE
//skip PAL-HUE
static void COsdCoreSkipVideoHue
(	UINT8 *ucTmpSub,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucSubCount
);
#endif//#if _PAL_MASK_HUE
static void COsdCoreSkipPictMisc
(	UINT8 *ucTmpSub,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucSubCount
);
static void COsdCoreSkipVgaChannel
(	UINT8 *ucMain,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucMainCount
);

#if _OSD_2X
//skip osd h/v adjust if 2X
static void COsdCoreSkipOsdHV
(
    UINT8 port,
    UINT8 *ucTmpSub,
    UINT8 *ucTmpMain,
    UINT8 message,
    //UINT8 ucMainCount,
    UINT8 ucSubCount
);
#endif//#if _OSD_2X

#if 1//(_AUDIO_ITEM_UPDATE_AUDIOEFFECT==1 || _PICT_ITEM_UPDATE_PICTEFFECT==1)
#if (_PICT_EFFECT_SUPPORT)
static void COsdCorePictEffectRefreshRelativeItem
(
    ItemBracket1* pItemBracket1
);
#endif
#if (_AUDIO_EFFECT_SUPPORT)
static void COsdCoreAudioEffectRefreshRelativeItem
(
    ItemBracket1* pItemBracket1
);
#endif
static void COsdCoreSliderUpdateModeData
(
    ItemSlider * pItemSlider, UINT8 message
);
#if(_TYPEOF_OSD_KONSTA)
static void COsdCoreSwichLanguageRefreshRelativeItem(void);
#endif
#endif

#if (_PICT_EFFECT_SUPPORT)
////////Pict Effect Mode Data to User Mode////////////////////
static void COsdCoreApplyPictEffect
(
    MenuItem * pMenuItem, bit force
);
#endif
void COsdCoreExtAdjWinReturn(void);
void COsdCoreShowTimePageSegment(UINT8 row, UINT8 col, UINT8 active);
static void COsdFxSlider2DirectionProc(ItemSlider2 * pItemSlider2, UINT8 message);




#define _MID_COL_POSITION 	10//(_MAINMENUWINDOW_HEND/_FONT_WID+ (_TITLEBACKGROUNDWINDOW_HEND-_MAINMENUWINDOW_HEND)/_FONT_WID/2)
/*=========================== Functions ===================== */
/**
 * OsdCore Initialize function.
 * @param None.
 * @return None.
 *
 */
void COsdCoreInitialze(void)
{
    ucLayerIndex = 0;
    stLayerStack[ucLayerIndex].ucMainMenu = 0;
    stLayerStack[ucLayerIndex].ucSubMenu = 0;

    if (GET_FACTORYSTATUS())
        stLayerStack[ucLayerIndex].pMenuItemSet = tMenuFactoryMainMenuSet[0];
    else
    {
        stLayerStack[ucLayerIndex].pMenuItemSet = tMainMenuSet_K[ucMenuSelect];
    }

    COsdCoreSetState(_IDLE_STATE);
}

/**
 * Show mainmenu osd in a column
 * @param pass a pointer of data structure MenuItemSet to specify a layer menu
 * @return None.
 */
static void CosdCoreShowMainMenuIcon(MenuItemSet code *pMenuItemSet)
{
    UINT8 ucCount, cmd_pos,cmd_Vpos;
//	UINT16 xdata space_length;
    MenuItem *	pMenuItem;
    MenuItem *	pTopMenuItem;

    pTopMenuItem = pMenuItemSet->pMenuItem;
    ucCount = 0;
    cmd_pos =_FIRSTER_ICON_START_COL;
    cmd_Vpos=_FIRSTER_ICON_START_ROW;

    pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    COsdFxClearText(_TITLE_U_ROW, 0, 1, _OSD_UMAIN_COL);
    //20080919 ccy modify
#if (_PCB_TEST == _PCB_TYPE)
    usItemStart = _WIN_TITLE_XS-4 + stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;
    //20081008 ccy modify 12->6
#else
    usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
#endif
    COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_3, _CP_0, GET_LANGUAGE(),pMenuItem->pString);

    //draw menu icon
    do {
        pMenuItem = ((MenuItem *[])pTopMenuItem)[ucCount];
        pData[0]=0;
        pData[1]=pMenuItem->ucUnActiveColor;
        pData[2]=0;
        pData[3]=0;
        COsdFxLoadIcon(cmd_Vpos,cmd_pos,0,2,pData,pMenuItem->pIcon);
        //COsdFxChange1bitColor(cmd_Vpos,cmd_pos,2, 12,pMenuItem->ucActiveColor,_CP_BLACK);
        cmd_pos += 6;//20080919 ccy modify
        ucCount++;

    }while (ucCount < pMenuItemSet->ucItemCount);

    //draw page title string
    //usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
    //COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_3, _CP_0, GET_LANGUAGE(),pMenuItem->pString);
    //COsdCoreDrawPageTitleText(pMenuItem->pString);
}

void COsdClearPageContent(void)
{
    UINT8 ucCount;
    if (GET_FACTORYSTATUS())
        for (ucCount=0; ucCount<13; ucCount++)
        {
            COsdFxClearText(_CONTENT_F_ROW+ucCount*1, 0, 1, _OSD_FMAIN_COL);
        }
    else
        for (ucCount=0; ucCount<7; ucCount++)
        {
            COsdFxClearText(_ITEMSTR_START_ROW+ucCount*2, 0, 1, _OSD_UMAIN_COL);
        }
    if (!GET_FACTORYSTATUS())
    {
        COsdFxClearText(_ITEMSTR_START_ROW+5*2-1, 0, 1, _OSD_UMAIN_COL);	//tv manual scan frequency
        COsdFxClearText(_ITEMSTR_START_ROW+6*2-1, 0, 1, _OSD_UMAIN_COL);	//tv finetune frequency
    }
}

#define GET_OSD_TIMEPAGE()		((ucLayerIndex==1)&&(stLayerStack[0].ucMainMenu==3)&&stLayerStack[0].ucSubMenu==1)
/**
 * Show submenu osd in a main menu
 * @param pass a pointer of data structure SubMenuInf to specify all submenu in a main menu
 * @return None.
 */
#define _MAIN_ICON_SPACE			0
#define _CONTENT_START_COL		14
static void COsdCoreShowSubMenuItem(SubMenuInfo* pSubMenuInfo)
{
    UINT8 ucCount/*, ucMidBkLength, ucPreBkCnt*/;
    UINT8 ucSelectLanguage = GET_LANGUAGE();//gary added for factory menu still display english when language is chinese.
    //UINT16 xdata usBkLength;
    ItemObject *	pItemObject;
    MenuItem * pTopMenuItem;
    MenuItem * pMenuItem;
    //UINT8 ItemCount;
    UINT8 ucMaskItem=0;
    UINT8 ucMoveByRow;
    //UINT8 ucPreBkCnt;
    UINT8 ucOffset;

    pTopMenuItem = pSubMenuInfo->pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[pSubMenuInfo->ucMainOrder];
#if _FACTORY_MENU_ENABLE  //dong add 20080922
    if (GET_FACTORYSTATUS())
        ucMoveByRow=1;
    else
#endif
        ucMoveByRow=2;//pMenuItem->ucMoveByRow;

    //ucPreBkCnt = COsdFxCalBlankCmdCount(pMenuItem->usSpaceInSubMenu);

    CTimerWaitForEvent(_EVENT_DEN_STOP);//20070517
#if 0
    if (GET_FACTORYSTATUS())
        COsdFxClearText(_CONTENT_F_ROW, _CONTENT_F_COL, _CONTENT_F_HEIGH, _CONTENT_F_WIDTH);
    else
        COsdFxClearText(_CONTENT_U_ROW, _CONTENT_U_COL, _CONTENT_U_HEIGH, _CONTENT_U_WIDTH);
#else
    COsdClearPageContent();
#endif
#if 1 //dong enable 20080922
    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage=GET_LANGUAGE();
#endif
    for (ucCount = 0; ucCount < pMenuItem->ucItemCount; ucCount++)
    {
        pItemObject = &(pMenuItem->pItemList[ucCount]);
        /*
        		if (GET_FACTORYSTATUS())
        			ucSelectLanguage=0;
        		else
        			ucSelectLanguage=GET_LANGUAGE();

        */
        if (GET_VIDEO8_HUE_MASK(ucCount))
            ucMaskItem = 1;
        //else if (GET_VGA_PICTMISC_MASK(ucCount))
        //ucMaskItem = 1;
        else if (GET_PAGE_MASK())
            ucMaskItem = 1;
        else
            ucMaskItem=0;

        /*
        		if (ucMaskItem == 0)
        		{
        			ucCount+=1;
        			if (GET_OSD_HV_MASK(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucCount,&stLayerStack[ucLayerIndex].ucMainMenu))
        				ucMaskItem = 1;
        			ucCount-=1;
        		}
        */
        //draw item name string
        if (ucMaskItem)
            COsdFxLoadText(pMenuItem->ucStartRow + ucCount*ucMoveByRow, pMenuItem->ucStartCol,0, GET_CP_MASK_ITEM(), 0,ucSelectLanguage, pItemObject->pString);
        else
            COsdFxLoadText(pMenuItem->ucStartRow + ucCount*ucMoveByRow, pMenuItem->ucStartCol,0, GET_CP_ITEM_UNACTIVE(), 0,ucSelectLanguage, pItemObject->pString);
        //if (pItemObject->ucType==_BRACKET_TIMER_TYPE)
        if (GET_OSD_TIMEPAGE())
        {
            ItemBracket1 * pItemBracket1;
            UINT8 *pStringArray;
            ucOffset = _ITEMVAL_START_COL_TIMER;
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pStringArray = pItemBracket1->pGetStringFunction();
            COsdFxLoadText(pMenuItem->ucStartRow + ucCount*ucMoveByRow, ucOffset, 0, GET_CP_ITEM_UNACTIVE(), _CP_BG, 0, pStringArray);
        }
        else
        {
            switch (pItemObject->ucType)
            {
            case _BRACKET_TYPE:
            case _BRACKET1_TYPE:
            case _IMMEDIATE_TYPE:
            case _SLIDER3_TYPE:
            case _MENU_TYPE:
                if (GET_FACTORYSTATUS())
                    ucOffset = 16;
                else
                    ucOffset = _ITEMVAL_START_COL_BRACKET;
                break;
            default:
                if (GET_FACTORYSTATUS())
                    ucOffset = 16;
                else
                    ucOffset = _ITEMVAL_START_COL;
                break;
            }
            COsdCoreUpdateItem(pItemObject, pMenuItem->ucStartRow + ucCount*ucMoveByRow, ucOffset, 0, 0);
        }

    }
}

void COsdManualScanOverShow(void)
{
    COsdFxTvShowFrequencySlider(_ITEMSTR_START_ROW+1+(stLayerStack[ucLayerIndex].ucSubMenu-1)*2, 22, stTvPdb.pdb);
}

/**

 * Change the color of a main menu item
 * @param pMenuItemSet pass a pointer of data structure MenuItemSet to specify a layer menu
 * @param ucItemNo pass a main item to change
  * @param bActive pass the status of the menu item to change
 * @return None.
 */
#if 0
static void COsdMainMenuItemChangeColor(MenuItemSet* pMenuItemSet, UINT8 ucItemNo, BIT bActive)
{
    UINT8 ucColCnt, ucCount, ucForegroundColor;
    //UINT16 xdata usBnkLength;
    MenuItem * pTopMenuItem;
    MenuItem * pMenuItem;

    pTopMenuItem = pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[ucItemNo];

    //usBnkLength = pMenuItem->usSpaceInItem;
    ucColCnt = _FIRSTER_ICON_START_COL;//COsdFxCalBlankCmdCount(usBnkLength);
    for (ucCount = 0; ucCount < ucItemNo; ucCount++) {
        pMenuItem = ((MenuItem *[])pTopMenuItem)[ucCount];
        //usBnkLength = pMenuItem->usItemWidth - (UINT16)COsdFxCalTextWidth(GET_LANGUAGE(), pMenuItem->pString);
        ucColCnt +=pMenuItem->usItemWidth/_FONT_WID;// (COsdFxCalBlankCmdCount(usBnkLength) + COsdFxCalTextCount(GET_LANGUAGE(), pMenuItem->pString));
    }
    pMenuItem = ((MenuItem *[])pTopMenuItem)[ucItemNo];
    if (bActive)
        ucForegroundColor = pMenuItem->ucActiveColor;
    else
        ucForegroundColor = pMenuItem->ucUnActiveColor;

    ucCount = COsdFxCalTextCount(GET_LANGUAGE(), pMenuItem->pIcon)/2;
//	COsdFxChange1bitColor(pMenuItemSet->ucStartRow, ucColCnt, 1, ucCount, ucForegroundColor, _CP_BLACK);
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
    COsdFxChange2bitColor(pMenuItemSet->ucStartRow,ucColCnt,2,ucCount,0,ucForegroundColor,0,0);
#else
    COsdFxChange1bitColor(pMenuItemSet->ucStartRow,ucColCnt ,  2,ucCount, ucForegroundColor, _CP_BLACK);
#endif
}

/**
 * Change the color of a sub menu item
 * @param pSubMenuInfo pass a pointer of data structure SubMenuInfo to specify a main menu item
 * @param ucItemNo pass a sub menu item to change
  * @param bActive pass the status of the menu item to change
 * @return None.
 */
static void COsdSubMenuItemChangeColor(SubMenuInfo* pSubMenuInfo, UINT8 ucItemNo, BIT bActive)
{
    UINT8 ucColCnt, ucFontCnt, ucForegroundColor, ucRowOffset,ucWidth,ucBnkCount;
    UINT8 ucSelectLanguage=GET_LANGUAGE(),/*ucMidCol,*/ucStartCol;//gary added for factory menu still display english when language is chinese.
    UINT16 xdata usBnkLength;
    MenuItem *	pTopMenuItem;
    MenuItem *	pMenuItem;
    ItemObject * pItemObject;
    ItemSlider * pItemSlider;

    pTopMenuItem = pSubMenuInfo->pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[pSubMenuInfo->ucMainOrder];
    if (ucItemNo)
        ucRowOffset = ucItemNo - 1;
    else
        return;
    pItemObject = &(pMenuItem->pItemList[ucRowOffset]);

    if (bActive)
        ucForegroundColor = pItemObject->ucActiveColor;
    else
        ucForegroundColor = pItemObject->ucUnActiveColor;

    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage=GET_LANGUAGE();

    //ucColCnt = COsdFxCalBlankCmdCount(pSubMenuInfo->stItemPosition.usXStart + pMenuItem->usSpaceInSubMenu);
    ucFontCnt = COsdFxCalTextCount(ucSelectLanguage/*GET_LANGUAGE()*/, pItemObject->pString);
    //fjyang20070801
    //COsdFxChange1bitColor(pMenuItem->ucStartRow +( ucRowOffset*2), pMenuItem->ucStartCol, 1, ucFontCnt, ucForegroundColor, _CP_BLACK);  // 3 represent icon + space count
    COsdFxChange1bitColor(pMenuItem->ucStartRow +((ucRowOffset%7)*2), pMenuItem->ucStartCol, 1, ucFontCnt, ucForegroundColor, _CP_BLACK);  // 3 represent icon + space count

    usBnkLength = ucFontCnt * _FONT_WID - COsdFxCalTextWidth(ucSelectLanguage, pItemObject->pString);
    //COsdFxLoadBlankCmd(ucMidRow, usMidColStart-2, ucBkLength);
    ucBnkCount = COsdFxCalBlankCmdCount(usBnkLength);

    ucColCnt =_MAINMENUWINDOW_HEND/_FONT_WID;//(ucFontCnt + 3); // 3 represent icon + space
    ucWidth = (_TITLEBACKGROUNDWINDOW_HEND - _MAINMENUWINDOW_HEND)/_FONT_WID+1;
//20070525 For slider display trace when moved select window in chinese language.
    if (!bActive){
        if ((pItemObject->ucType == _SLIDER_TYPE) || (pItemObject->ucType == _SLIDER1_TYPE)) {
            pItemSlider = (ItemSlider*)pItemObject->pStruct;

            ucStartCol=_MID_COL_POSITION- pItemSlider->ucLength/2+ucBnkCount;

            ucWidth = pItemSlider->ucLength;

            //COsdFxChange2bitColor(pMenuItem->ucStartRow + ((ucRowOffset%7)*2), ucStartCol, 1, ucWidth, _TITLEBACKGROUNDWINDOW_COLOR, _TITLEBACKGROUNDWINDOW_COLOR, _TITLEBACKGROUNDWINDOW_COLOR, _TITLEBACKGROUNDWINDOW_COLOR);

        } if ((pItemObject->ucType == _BRACKET_TYPE) || (pItemObject->ucType == _BRACKET1_TYPE) || (pItemObject->ucType == _BRACKET2_TYPE) || (pItemObject->ucType == _SELECTDIALOG_TYPE) || (pItemObject->ucType == _VCHIPMULTISELECT_TYPE)) {

            //COsdFxChange1bitColor(pMenuItem->ucStartRow + ((ucRowOffset%7)*2), ucColCnt, 1, ucWidth, ucForegroundColor, _CP_BLACK);
        }
    }
}
#endif
static void COsdCoreBackMenuDrawPage(void)
{
    MenuItemSet*	 pMenuItemSet;
    //SubMenuInfo	xdata stSubmenuInfo;
    BYTE data ucMainMenu,ucSubMenu;
    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    ucMainMenu = stLayerStack[ucLayerIndex].ucMainMenu;
    ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;


    //pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    //pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];

    //close current osd
    //CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, 0);

    //redraw osd out line but don't open osd(by "bVChipMenuChangeStatus")
    bVChipMenuChangeStatus = 1;
    COsdCoreInitialze();
    //CLR_EXT_ADJUST_WIN();

    ucPasswordInputNum = 0;	//20070405, clear password counter

    COsdFxMapSetting(_OSD_MAP0);

    //pMenuItem = (stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem;
    //pMenuItem = ((MenuItem *[])pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];

    COsdFxDrawWindow(&tBGWindowStyle);//0
    COsdFxDrawWindow(&tTitleWindowStyle);// 2
    COsdFxDrawWindow(&tNoteWindowStyleA);// 1


    CosdCoreShowMainMenuIcon(stLayerStack[ucLayerIndex].pMenuItemSet);

    COsdFxDrawWindow(&tMainIconSelWindowStyle);

    //stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;

    //stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;

    //COsdCoreShowSubMenuItem(&stSubmenuInfo);

    //konsta color osd
    CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_3,_CP_0,GET_LANGUAGE());
    bVChipMenuChangeStatus = 0;

    //prepair osd page and the target point to the specified item
    stLayerStack[ucLayerIndex].ucMainMenu = ucMainMenu;
    stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
    stLayerStack[ucLayerIndex].pMenuItemSet = pMenuItemSet;
    //show target page and point to specified item
    //COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu, stLayerStack[ucLayerIndex].ucSubMenu, 1);

    //colored line
    //COsdFxHLine(_ITEMSTR_START_ROW+2*(ucSubMenu-1), 0, _OSD_UMAIN_COL, GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
    //restore osd state
    COsdCoreSetState(_MAINMENU_STATE);

    //open osd
    //CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, _BIT0);

}
/**
 * Back to upper layer
 * @param None
 * @return None.
 */
static void COsdBackMenuProc(void)
{
#if _ADD_CHINESE
    BYTE  ucTmpMain=0  ;
#endif
    //BYTE ucCount;
    MenuItemSet * pMenuItemSet;
    MenuItem * pMenuItem;
    UINT8 ucMoveByRow;

    //pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;   //dong disable 20080923
    //pMenuItem = 	((MenuItem *[])pMenuItemSet->pMenuItem)[0];

    if (!GET_FACTORYSTATUS())
    {
        pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
        pMenuItem = 	((MenuItem *[])pMenuItemSet->pMenuItem)[0];  //dong add 20080923
        //COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);	// -1: include arrow
        COsdClearPageContent();
        //COsdFxCloseWindow(4);
        if (ucLayerIndex>=1)
        {
            //COsdFxClearText(5, 2, 8, 24);
            COsdFxClearText(_CONTENT_U_ROW, _CONTENT_U_COL-1, _CONTENT_U_HEIGH, _CONTENT_U_WIDTH);	// -1: include arrow

#if _TIMER_PAGE_SUPPORT
            COsdFxCloseWindow(tTimerPageTimeSegmentHourWindowStyle.ucWindowID);
#endif	//#if _TIMER_PAGE_SUPPORT

            stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
        }
        else
        {
            //COsdFxClearText(1, 2, 5, _ITEMSLIDER_EXTADJ_LEN+3);	// -1: include arrow

//#if _TIMER_PAGE_SUPPORT
            //COsdFxCloseWindow(tExtAdjWindowStyle.ucWindowID);
            //COsdCoreBackMenuDrawPage(pMenuItemSet,pMenuItem);
//#endif	//#if _TIMER_PAGE_SUPPORT

            //if(ucOsdisAutoMenu)// modified finish auto ,menu error  by xyw  071022 ;
            //{
            //stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();// test by xyw 071019
            //	ucOsdisAutoMenu=0;
            //}
        }

    }
    else
    {
        //if(ucOsdisAutoMenu)// modified finish auto ,menu error  by xyw  071022 ;
        //{
        //stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();// test by xyw 071019
        //ucOsdisAutoMenu=0;
        //}
        //else
        stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
    }
    if (GET_FACTORYSTATUS())      //dong add 20080922
    {
        pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
        pMenuItem = 	((MenuItem *[])pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    }
    else
        COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);

    //colored line

    if (GET_FACTORYSTATUS())
        ucMoveByRow = 1;
    else
        ucMoveByRow = 2;

    COsdFxHLine((pMenuItem->ucStartRow)+ucMoveByRow*(stLayerStack[ucLayerIndex].ucSubMenu-1), 0, _OSD_UMAIN_COL, GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
    if (GET_OSD_CHANGE_SOURCE())
        if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8)
            return;

    COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);

}

/**
 * To Initialze top main menu environment to show
 * @param None
 * @return None.
 */
//main menu background window
void COsdCoreInitMainWindow(void)
{
    MenuItem *	pMenuItem;
    SubMenuInfo	xdata stSubmenuInfo;

    //clear flag of extend adjust window
    CLR_EXT_ADJUST_WIN();

    ucPasswordInputNum = 0;	//20070405, clear password counter

    COsdFxMapSetting(_OSD_MAP0);


#if 0//_ADD_CHINESE			//dong disable 20081114
    if (!bVChipMenuChangeStatus)
    {
        COsdDispFirstTimeLoadFont();
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
        COsdLoadfontLoadChineseBankFont(0);
        COsdDispLoadChineseFont(0);
#else
        COsdDispLoadFont1(GET_LANGUAGE());
#endif
    }
#endif

    pMenuItem = (stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem;
    //pMenuItem = ((MenuItem *[])pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];

    COsdFxDrawWindow(&tBGWindowStyle);//0
    COsdFxDrawWindow(&tTitleWindowStyle);// 2
    COsdFxDrawWindow(&tNoteWindowStyleA);// 1


    CosdCoreShowMainMenuIcon(stLayerStack[ucLayerIndex].pMenuItemSet);

    COsdFxDrawWindow(&tMainIconSelWindowStyle);

    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;

    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;

    COsdCoreShowSubMenuItem(&stSubmenuInfo);

    //konsta color osd
    CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_3,_CP_0,GET_LANGUAGE());
    //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL, 1, 2, _CP_3, _CP_0);
    //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10, 1, 2, _CP_3, _CP_0);
    //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10+11, 1, 2, _CP_3, _CP_0);

    COsdFxEnableOsd();


}

/**
 * To Initialze next layer except top main menu environment to show
 * @param None
 * @return None.
 */
void COsdCoreInitSubWindow(void)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    SubMenuInfo	xdata stSubmenuInfo;
    MenuItemSet  * pMenuItemSet;
    MenuItem*	pMenuItem;
    UINT16 xdata usPreBnkLength;

#if(_FACTORY_MENU_ENABLE )
    WindowStyle  stPopdownStyle;

    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage=GET_LANGUAGE();
#endif

    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    pMenuItem = 	((MenuItem *[])pMenuItemSet->pMenuItem)[0];

#if(_FACTORY_MENU_ENABLE )
    if (!GET_FACTORYSTATUS())
        if (pMenuItemSet->ucItemCount > 1)
            CosdCoreShowMainMenuIcon(stLayerStack[ucLayerIndex].pMenuItemSet);
#endif

    COsdFxMapSetting(_OSD_MAP7);

#if(_FACTORY_MENU_ENABLE )//gary added for factory menu
    stPopdownStyle = *pMenuItemSet->pBackGroundWindow;
    stPopdownStyle.stPosition.usXStart = 0;
    stPopdownStyle.stPosition.usXEnd = stPopdownStyle.stPosition.usXStart + pMenuItem->stSize.usWidth;
    //stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight+_ROW_HEIGHT  * 2;
    //stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight * pMenuItem->ucItemCount + _ROW_HEIGHT  * 2 + 10;
    stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight * 11 + _ROW_HEIGHT  * 2 + 10;

    COsdFxDrawWindow(&stPopdownStyle);
    stPopdownStyle = *pMenuItemSet->pForegroundWindow;
    stPopdownStyle.stPosition.usXStart = 0;
    stPopdownStyle.stPosition.usXEnd = stPopdownStyle.stPosition.usXStart + pMenuItem->stSize.usWidth;
    //stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight;
    stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight * pMenuItem->ucItemCount;

    //COsdFxDrawWindow(&stPopdownStyle);
#else
    COsdFxDrawWindow(pMenuItemSet->pBackGroundWindow);
    COsdFxDrawWindow(pMenuItemSet->pForegroundWindow);
#endif

    if (GET_FACTORYSTATUS())
    {
        usPreBnkLength =  0;//pMenuItemSet->pForegroundWindow->stPosition.usXStart/5 - 40 + pMenuItem->usSpaceInSubMenu;
        COsdFxLoadText(_DESCRIBLE_F_ROW, 2, 0, _CP_WHITE, _CP_BLACK, 0, tOsdSoftwareVersionStr);
    }
    else
    {
        usPreBnkLength =  0;//pMenuItemSet->pForegroundWindow->stPosition.usXStart/5 - 40 + pMenuItem->usSpaceInSubMenu;
        COsdFxLoadText(0, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, ucSelectLanguage, pMenuItemSet->pTitleString);//tommy liao change 0---->GET_LANGUAGE()
    }

    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    stSubmenuInfo.stItemPosition = pMenuItemSet->pForegroundWindow->stPosition;
    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
    COsdCoreShowSubMenuItem(&stSubmenuInfo);
//	COsdMenuMoveProc(0, 1, 0);
    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu, stLayerStack[ucLayerIndex].ucSubMenu, 1);
    //COsdFxLoadText(pMenuItem->ucItemCount + 1, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, tOsdKeyDirection_NoteStr);

    if (!GET_FACTORYSTATUS())
    {
        //konsta color osd
        CosdCoreShowNoteMessage(pMenuItem->ucItemCount*2 + 2,0,0,2,_CP_3,_CP_0,ucSelectLanguage);
        //COsdFxChange1bitColor(pMenuItem->ucItemCount*2 + 2, _NOTE_U_COL, 1, 2, _CP_3, _CP_0);
        //COsdFxChange1bitColor(pMenuItem->ucItemCount*2 + 2, _NOTE_U_COL+10, 1, 2, _CP_3, _CP_0);
        //COsdFxChange1bitColor(pMenuItem->ucItemCount*2 + 2, _NOTE_U_COL+10+11, 1, 2, _CP_3, _CP_0);
    }
    // weixg mod 20070515 end

    COsdFxEnableOsd();
}
#if 0//(_CUSTOMER_TYPE == _SKYWORTH)  //yf_zhang 2007-6-7 14:09
void COsdCoreInitChannelEditSub(MenuItemSet code *pMenuItemSet)
{
    UINT8 ucCount, cmd_pos;
    //MenuItem*	pMenuItem;

    cmd_pos =_FIRSTER_ICON_START_COL;
    COsdCoreLoad1BiTIcon(pMenuItemSet->ucStartRow,pMenuItemSet->ucStartCol,_CP_WHITE,GET_LANGUAGE(),pMenuItemSet->pTitleString);
    for (ucCount=0;ucCount<5;ucCount++)
    {
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
        pData[0]=0;
        pData[1]=_CP_WHITE;
        pData[2]=0;
        pData[3]=0;
        COsdFxLoadIcon(pMenuItemSet->ucStartRow,cmd_pos,0,1,pData,tOsdFontMainItemIconStrSet[ucCount]);
#else
        COsdCoreLoad1BiTIcon(pMenuItemSet->ucStartRow,cmd_pos,_CP_WHITE,GET_LANGUAGE(),tOsdFontMainItemIconStrSet[ucCount]);
#endif
        if (ucCount==2)//20070528
        {
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
            COsdFxChange2bitColor(pMenuItemSet->ucStartRow,cmd_pos,2, 4,0,_CP_YELLOW,0,0);
#else
            COsdFxChange1bitColor(pMenuItemSet->ucStartRow,cmd_pos,2, 4,_CP_YELLOW,_CP_BLACK);
#endif
        }
        cmd_pos += _MAINMENU_ITEMWIDTH/_FONT_WID;
    }
    //pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[0];
    //stLayerStack[ucLayerIndex].ucMainMenu = 0;
    //COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,0,0);

}
#endif

//---------------------------------------sva
void COsdCoreInitColortempWindow(void)
{
    MenuItem *	pMenuItem;
    SubMenuInfo	xdata stSubmenuInfo;
    ItemObject *	pItemObject;
    //WindowStyle xdata stSubWindowStyle;


//COsdFxShowNumber(0, 21, stLayerStack[ucLayerIndex].ucMainMenu, 0x23, _CP_WHITE_1);
    pMenuItem = (stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem;
    pMenuItem = ((MenuItem *[])pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[0]);


#if 0//(_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
//clr arrow of content
    if (GET_FACTORYSTATUS())
        COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
    else
    {
        if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
        {
            COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(1-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
            COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(2-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
        }
        else
            COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
    }

#else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

    if (GET_FACTORYSTATUS())
        COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
    else
        COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

#endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

#else	//#if _PCB_TYPE==_PCB_PT2662F1A

    if (GET_FACTORYSTATUS())
        COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
    else
        COsdClearPageContent();

#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    if (pMenuItem->pString ==tOsdSignalSourceStr)//add by xyw 071019
    {
        COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019
    }
#endif

    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;

    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
    COsdCoreShowSubMenuItem(&stSubmenuInfo);

    //rewrite sub page title of Manual Scan Page
    //maybe, this can expand to other pages.
    //DebugPrintf("init sub: ucLayerIndex=%d\n", ucLayerIndex);
    if (pMenuItem->pString == tOsdManualScanStr)
    {
        //COsdCoreLoad1BiTIcon(4,0x0b-2,pMenuItem->ucActiveColor,GET_LANGUAGE(),pMenuItem->pString);
        usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
        COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, pMenuItem->ucActiveColor, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);
#if _ADD_CHINESE
        //CosdCoreShowNoteMessage(13,2,3,3,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
        CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,3,_CP_3,_CP_0,GET_LANGUAGE());//070910 xyw
#endif
    }
    else if (pMenuItem->pString == tOsdAutoScanStr)
    {
        //COsdCoreLoad1BiTIcon(4,0x0b-2,pMenuItem->ucActiveColor,GET_LANGUAGE(),pMenuItem->pString);
        usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
        COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, pMenuItem->ucActiveColor, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);
#if _ADD_CHINESE
        //CosdCoreShowNoteMessage(13,2,3,3,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
        CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,3,_CP_3,_CP_0,GET_LANGUAGE());//070910 xyw
#endif
    }
#if(!_TYPEOF_OSD_KONSTA)
    else if (pMenuItem->pString == tOsdChannelEditSwapStr)
    {
        //COsdCoreLoad1BiTIcon(4,0x0b-2,pMenuItem->ucActiveColor,GET_LANGUAGE(),pMenuItem->pString);
        usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
        COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, pMenuItem->ucActiveColor, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);
    }
#endif
#if 0
//-----------------------------------------

    pItemObject = &(pMenuItem->pItemList[0]);
    //if (GET_FACTORYSTATUS())
    //	COsdCoreUpdateItem(pItemObject,_VALUE_F_ROW,_MID_COL_POSITION,0,1);
    //else
    //	COsdCoreUpdateItem(pItemObject,_VALUE_U_ROW,_MID_COL_POSITION,0,1);

#if _TIMER_PAGE_SUPPORT
    if (pItemObject->ucType == _BRACKET_TIMER_TYPE||pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE ||pItemObject->ucType == _BRACKET1_TYPE )
#else	//#if _TIMER_PAGE_SUPPORT
    if (pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE ||pItemObject->ucType == _BRACKET1_TYPE )
#endif	//#if _TIMER_PAGE_SUPPORT

    {
        if (!GET_FACTORYSTATUS())
        {
            //stSubWindowStyle = *((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow);
            //COsdFxDrawWindow(&stSubWindowStyle);
        }
        //COsdFxClearText(12, 2, 1, 24);
    }
    else
    {
        //COsdFxClearText(12, 2, 1, 24);
        //if (GET_FACTORYSTATUS())
        //	COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
        //else
        //	COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);
    }
    /*
           //if(ucLayerIndex==1)
    	if((ucLayerIndex==1) &&(stLayerStack[ucLayerIndex].ucMainMenu==0))
           {
             stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
             COsdFxHLine(ROW(5+GET_COLOR_TEMP_TYPE()), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw
    	}
    	 else
    	 {
          // stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
          //COsdFxHLine(ROW(5+GET_COLOR_TEMP_TYPE()), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw
            COsdFxHLine(ROW(5), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);
    	 }
    */
#endif
    //color target line
    //if (pItemObject->ucType==_BRACKET_TIMER_TYPE)
    if (!GET_FACTORYSTATUS())
        if (GET_OSD_TIMEPAGE())
        {
            COsdFxHLine(_ITEMSTR_START_ROW+0*2, _ITEMSTR_START_COL, _ITEMVAL_START_COL_TIMER-_ITEMSTR_START_COL,GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
            //COsdFxHLine(_ITEMSTR_START_ROW+0*2, _ITEMVAL_START_COL_TIMER, 7,GET_CP_ITEM_UNACTIVE()<<4, _WRITE_BYTE2);
        }
        else
        {
            COsdFxHLine(_ITEMSTR_START_ROW+0*2, 0, _OSD_UMAIN_COL,_ITEMSLIDER_EXTADJ_COLOR<<4, _WRITE_BYTE2);
        }

}


//-----------------------------------------------



#if 0
void COsdCoreInitColorAdjustSubWindow(void)
{
    //if(COsdCtrlGetColorTemp() == 4)  //delete by xyw 070830
    COsdCoreInitSubWindow();
    //else
    //ucLayerIndex--;
}
#endif
/**
 * To Initialze extend menu environment to show
 * @param None
 * @return None.
 */
#if 0
void COsdCoreInitExtendWindow(void)
{
    UINT8 ucCount, ucCol;
    MenuItem  *pMenuItem;
    ItemObject 	*pItemObject;
    ItemObject 	*pItemObject1;
    ItemSelectStruct  * pItemSelectStruct;
    ItemSelectDialog  *pItemSelectDialog;
    WindowStyle xdata stMoveWindowStyle;
    UINT16 xdata usBnkLength, usPreBnkLength, usSegmentLength;

    pMenuItem = ((MenuItem *[])stLayerStack[ucLayerIndex].pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
    pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;

    COsdFxMapSetting(_OSD_MAP1);
    COsdFxDrawWindow(pItemSelectDialog->pBackGroundWindow);
    COsdFxDrawWindow(pItemSelectDialog->pForegroundWindow);

    usPreBnkLength = pItemSelectDialog->pForegroundWindow->stPosition.usXStart + pMenuItem->usSpaceInSubMenu;
    usSegmentLength = ((12 * 41 - 20) / pItemSelectDialog->ucCol);
    COsdFxLoadText(0, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, pItemSelectDialog->pTitleString);
    COsdFxLoadText(1, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, pItemSelectDialog->pLabelString);

    ucCol = 0;
    for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
        pItemObject = &(pItemSelectDialog->pItemList)[ucCount];
        pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
        if (pItemSelectStruct->ucCol == 0) {
            usBnkLength = usPreBnkLength;
            ucCol = 0;
        } else {
            pItemObject1 = &(pItemSelectDialog->pItemList)[ucCount-1];
            usBnkLength = usSegmentLength - COsdFxCalTextWidth(GET_LANGUAGE(), pItemObject1->pString);
        }
#if _CHINESE_SIMPlIFIED_CHARACTER
        if (ucCount != 0)
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucUnActiveColor, _CP_BLACK,  GET_LANGUAGE(), pItemObject->pString);
        else
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucActiveColor, _CP_BLACK,  GET_LANGUAGE(), pItemObject->pString);
#else
#if( 0)
        if ((ucCount != 0)&&(ucCount <= 8))
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucUnActiveColor, _CP_BLACK,  0, pItemObject->pString);
        else if ((ucCount > 8)&&(GET_INPUTPORT_TYPE(stSystemData.InputSource) ==_VIDEO_TV_PORT ))
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength,_CP_GRAY , _CP_BLACK,  0, pItemObject->pString);
        else if ((ucCount > 8)&&(GET_INPUTPORT_TYPE(stSystemData.InputSource) ==_DTV_PORT ))
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength,pItemObject->ucUnActiveColor , _CP_BLACK,  0, pItemObject->pString);
#else
        if (ucCount != 0)
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucUnActiveColor, _CP_BLACK,  0, pItemObject->pString);
#endif

        else
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucActiveColor, _CP_BLACK,  0, pItemObject->pString);
#endif
        ucCol += (COsdFxCalTextCount(0, pItemObject->pString) + COsdFxCalBlankCmdCount(usBnkLength));
    }

    stMoveWindowStyle = *(pItemSelectDialog->pMoveWindow);
    stMoveWindowStyle.stPosition.usXStart = usPreBnkLength;
    stMoveWindowStyle.stPosition.usXEnd = stMoveWindowStyle.stPosition.usXStart + usSegmentLength - 10 ;
    stMoveWindowStyle.stPosition.usYStart = pItemSelectDialog->pForegroundWindow->stPosition.usYStart + 32 * 2 ;
    stMoveWindowStyle.stPosition.usYEnd = stMoveWindowStyle.stPosition.usYStart + 32;
    COsdFxDrawWindow(&stMoveWindowStyle);

    COsdFxLoadText(pItemSelectDialog->ucRow + 3, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, tOsdKeyDirection_NoteStr);

    COsdFxEnableOsd();
}
#endif
/**
 * Osd handler.
 */
void COsdHandler(void)
{

    if (ucOsdMessage == _NONE_KEY_MESSAGE)
        return;

    //DebugPrintf("\n ucOsdState = %d",ucOsdState);
    //DebugPrintf("\n ucExtendMenuRow = %d",ucExtendMenuRow);
    //DebugPrintf("\n ucExtendMenuCol = %d",ucExtendMenuCol);
    //DebugPrintf("\n ucLayerIndex = %d",ucLayerIndex);
    //DebugPrintf("\n ucMainMenu = %d",stLayerStack[ucLayerIndex].ucMainMenu);
    //DebugPrintf("\n ucSubMenu = %d",stLayerStack[ucLayerIndex].ucSubMenu);
    //DebugPrintf("ucOsdMessage=%d\n",ucOsdMessage);
    //DebugPrintf("ucOsdState=%d\n",ucOsdState);

    if (ucOsdState==_IDLE_STATE)		//alter 20091123
    {
        if (ucOsdMessage==_REPEAT_KEY_MESSAGE)
        {
            return;
        }
    }
    // if "GET_ICON_MOVE_ENABLE()" is true, the font map of chinese is logo font,
    // so we must load chinese again while anything others will be shown.
    if (GET_ICON_MOVE_ENABLE())
    {
        COsdIconMoveDisableResetEnv();
    }

    if ((GET_LIGHTPOWERSTATUS() == _OFF)&&(ucOsdMessage != _EXIT_KEY_MESSAGE))
    {
        //DebugPrintf("\nwakeup osd\n",0);
        if (ucCurrState == _SLEEP_STATE)
        {
            LED_Message(_LED_MSG_GREEN);
            CModeSetFreeRun();
            if (!bForcePanelOff)
                CPowerPanelOn();
            // Enable display timing
            CScalerSetBit(_VDISP_CTRL_28, ~(_BIT5 | _BIT3 | _BIT1 | _BIT0),(_BIT5 | _BIT1 | _BIT0));
        }
        else
        {
            CScalerEnableDisplayOutput();
        }
    }

#if 0//((_MCU_TYPE == _REALTEK_RTD2662_EMCU) && (_DEBUG_TOOL == _RS232)) //fjyang
    if (ucOsdMessage == _RTD2662_ISP_MESSAGE){
        if (ucRtd2662IspFlag == 0){ //ISP
            MCU_PIN_SHARE_CTRL00_FF96 &= 0x07;
            ucRtd2662IspFlag = 1;
        }
        else{ //RS232
            MCU_PIN_SHARE_CTRL00_FF96 |= 0xF8;
            ucRtd2662IspFlag = 0;
            //DebugPrintf("\nEnter RS232 Debug!!! \n", 'i');
        }
        return;
    }
#endif
//add  20090916 for IR transfer  lbh
    if (ucOsdMessage == _INVALID_KEY_MESSAGE)
        return;
//endadd 20090916
#if _TIMER_SLEEP_HINT_SUPPORT
    if (ucOsdMessage ==  _EXIT_KEY_MESSAGE)
        bTimeoverHintOsdState = 0;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT


    if (ucOsdMessage ==  _EXIT_KEY_MESSAGE)
    {
#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        if (GET_ITEM_SELECTED())
        {
            CLR_ITEM_SELECTED();
            COsdFxCloseWindow(5);
        }
#else	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G

        if (bExitEvent)
        {
            bExitEvent = 0;
            //20070407, auto config/color return exit event, cause osd close
            if (ucOsdState!=_USER_DEFINED_STATE)
            {
                ucOsdState = _IDLE_STATE;
                CLR_SHOW_NO_SIGNAL();
            }
        }
#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        //DebugPrintf("\n_EXIT_KEY_MESSAGE, ucOsdState=%d\n",ucOsdState);
        //DebugPrintf("\nucOsdMessage=%d\n",ucOsdMessage);


        switch (ucOsdState)
        {
#if( 0)
        case _LOGO_STATE://731501
            return;//731501
#endif
        case _AUTOSCANCHANNEL_STATE:
            return;
        case _VBI_SHOW_STATE:
            return;
        case _VCHIPMULTISELECT_STATE:
        case _VCHIPDIALOG_STATE:
        case _EXTENDMENU_STATE:
        case _ENTER_VCHIPDIALOG_STATE:
        case _CHANGE_PASSWORD_STATE:
        case _USER_DEFINED_STATE:
            //DebugPrintf("COsdBackMenuProc()=%d\n",ucOsdState);
            COsdBackMenuProc();
            COsdCoreSetState(_MAINMENU_STATE);
            return;
        case _MAINMENU_STATE:
        case _CHANNELEDIT_STATE:  //yf_zhang 2007-6-8 10:14
#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            //sub menu (ucLayerIndex>0): return to main directly
            if ((ucLayerIndex) && (stLayerStack[ucLayerIndex].ucSubMenu != 0))
                stLayerStack[ucLayerIndex].ucSubMenu = 0;

            if (stLayerStack[ucLayerIndex].ucSubMenu != 0)
            {
                {
                    //SubMenuInfo	xdata stSubmenuInfo;
                    //ItemPosition	xdata stMoveSubItemPos;
                    //UINT8 ucMoveByRow;

                    //pMenuItem = ((MenuItem *[])stLayerStack[ucLayerIndex].pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
                    //ucMoveByRow=pMenuItem->ucMoveByRow;

                    //stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
                    //ucMoveByRow=1;//((MenuItem *[])stSubmenuInfo.pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu]->ucMoveByRow;
                    //stMoveSubItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->pForegroundWindow->stPosition;
                    //stMoveSubItemPos.usYStart += (stLayerStack[ucLayerIndex].ucSubMenu-1)*ucMoveByRow*_ROW_HEIGHT;
                    //stMoveSubItemPos.usYEnd += (stLayerStack[ucLayerIndex].ucSubMenu-1)*ucMoveByRow*_ROW_HEIGHT;
                    //stSubmenuInfo.stItemPosition = stMoveSubItemPos;
                    //stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
                    //COsdSubMenuItemChangeColor(&stSubmenuInfo, stLayerStack[ucLayerIndex].ucSubMenu, 0);
                    //premier, add for refresh slider color
                    COsdCoreFreshItem(1);
                }

                stLayerStack[ucLayerIndex].ucSubMenu = 0;

                //COsdFxDisableOsd();
                //stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
                //COsdMainMenuItemChangeColor(stLayerStack[ucLayerIndex].pMenuItemSet, 0, 0);
                COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);

                CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
                //premier, update note line by auto return function
                //COsdFxShowNote();
                return;
            }
#endif
            if (ucLayerIndex > 0) {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                if (ucOsdState==_CHANNELEDIT_STATE) //yf_zhang 2007-6-8 16:16
                    COsdCoreSetState(_MAINMENU_STATE);
                return;
            }
            CLR_SHOW_NO_SIGNAL();
            //CLR_SHOW_NO_SIGNAL(); //tommy delete for don't display when exit menuosd
        default:
            //A: press L/R @ sleep/nosignal, quit short menu, show no signal again
            if (ucOsdState==_VOLIMN_STATE)
                CLR_SHOW_NO_SIGNAL();

            COsdFxDisableOsd();
            //dong add 20081022
            COsdCoreInitialze();
            COsdMessageInitial();
            //20081022
            CTimerCancelTimerEvent(COsdFxExitEvent);
            //ucFactoryFlag=0;
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            //avoid source selection cause volume short bar.
            //20070328, change to slow down Main menu show again
            //if (ucOsdState==_CHANGE_SOURCE_STATE)
            CTimerDelayXms(500);

            //A: call some osd @ no signal shown, quit the osd, show no signal again
            //if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            if (ucSyncProcessState==_NOSIGNAL_STATE ||ucVideoProcessState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            {
                if (!GET_SHOW_IS_NOSIGNAL_STATE())
                {
                    if (GET_LIGHTPOWERSTATUS() == _OFF)
                    {
                        if (!bForcePanelOff)
                            CPowerPanelOn();
                    }

                    //COsdShowNoSignalOrSrc(1);
                    //////////////////////////////////////
                    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)!=_YPBPR_A0_PORT)	//add 20091210
                        if (GET_BURNSTATUS())
                            CTimerReactiveNosignal_Icon_Powersaving(0);
                        else
                        {
                            if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT)
                            {
                                if (GET_TV_BACKGROUND())
                                    CTimerReactiveNosignal_Icon_Powersaving(1);
                            }
                            else
                                CTimerReactiveNosignal_Icon_Powersaving(1);
                        }
                    //20081016 ccy modify for snow
                    /*
                    if((GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT))
                    {
                    //czl disable 080708 for close blue background
                    	if (GET_TV_BACKGROUND() == 0)
                    	{
                    		CScalerPageSelect(_PAGE8);
                    		CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0x4f, 0xB0);
                    		CVideoDisplaySet();
                    		CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT7 |_BIT3 | _BIT1 | _BIT0));
                    		CAdjustBackgroundColor(0,0,0x00);
                    			//czl 080506
                    	//	if(Panel[0].PanelConfig&_BIT3 == 0)
                    	//	CScalerSetBit(_VDISP_CTRL_28, ~( _BIT3), (0));
                    	//else
                    //		CScalerSetBit(_VDISP_CTRL_28, ~( _BIT3), (_BIT3));
                    	}

                    	else
                    	{
                    		CScalerPageSelect(_PAGE8);
                    		CScalerSetBit(_P8_OUTPUT_CTRL_A7, 0x4f, 0x20);
                    		CModeSetFreeRun();
                    			CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT5 | _BIT1 | _BIT0));
                    		CAdjustBackgroundColor(0,0,0xff);
                    	}

                    }
                    else
                    {
                    	CModeSetFreeRun();
                    	//CZL 080417
                    	//CAdjustBackgroundColor(0x00, 0x00, 0xff);
                    	CAdjustBackgroundColor(0x00, 0x00, 0xff);
                    }*/		//disable 20091027



                    //////////////////////////////////////
                    SET_SHOW_IS_NOSIGNAL_STATE();
                }
            }
            //show no support
            if (ucSyncProcessState==_NOSUPPORT_STATE)
            {
                if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_DSUB_A0_PORT||
                        GET_INPUTPORT_TYPE(stSystemData.InputSource)==_DVI_PORT)
                {
                    if (GET_LIGHTPOWERSTATUS() == _OFF)
                    {
                        if (!bForcePanelOff)
                            CPowerPanelOn();
                    }

                    //CModeSetFreeRun();		//disable 20091027

                    CTimerReactiveTimerEvent(SEC(3), CModeNoSupportEvent);
                }
            }

            if (ucOsdState == _CHANNELEDIT_STATE)
                ;//CTimerReactiveTimerEvent(SEC(2), COsdActiveMuteIcon);
#if 0//(_DEMO_MODE_HINT_SUPPORT)
            //20070404
            //else if (GET_DEMO_MODE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
            else if ((bTimeoverHintRequest==0)&&GET_DEMO_MODE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
            {
                CTimerReactiveTimerEvent(SEC(2), COsdActiveDemoHint);
                CTimerCancelTimerEvent(COsdFxExitEvent);
            }
#endif

#if _TIMER_SLEEP_HINT_SUPPORT//if timer page support, review this)
#if _TYPEOF_OSD_KONSTA
            else if ((bTimeoverHintRequest==0)&&GET_AUDIO_MUTE() )
#else
            else if ((bTimeoverHintRequest==0)&&GET_AUDIO_MUTE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
#endif
            {
                CTimerReactiveTimerEvent(SEC(2), COsdActiveMuteIcon);
                CTimerCancelTimerEvent(COsdFxExitEvent);
#if _TYPEOF_OSD_KONSTA
                CTimerCancelTimerEvent(CModeNoSignalEvent);
                CTimerCancelTimerEvent(CModePowerSavingEvent);
                CTimerCancelTimerEvent(CModeNoSignalIconMoveEvent);
                CTimerCancelTimerEvent(CModeNoCableEvent);
                CTimerCancelTimerEvent(CModeNoSupportEvent);
#endif
            }
#endif	//#if (if timer page support, review this)


            COsdCoreSetState(_IDLE_STATE);

#if 0//(if tcl ir type support, review this)
            if (GET_IR_CLEAR_REQ())
            {
                CLR_IR_CLEAR_REQ();
                CIrReset();
                //COsdMessageInitial();
                CTimerDelayXms(400);
            }
#endif	//#if (if tcl ir type support, review this)

            return;
        }

    }
#if  0
    bCcStartFlag = 0;
#endif

    switch (ucOsdState) {
#if( 0)
    case _LOGO_STATE://731501
        break;//731501
#endif
    case _IDLE_STATE:
    case _MUTE_STATE:
    case _SLEEP_MESSAGE_STATE:
        COsdCoreIdleEventProc();
        break;

#if _TIMER_SLEEP_HINT_SUPPORT//(_SLEEP_TIMEOVER_HINT_SUPPORT)
    case _SHOW_SLEEP_TIMEOVER_HINT_STATE:
        COsdFxShowStatusRedrawSleepRemind(0);
        break;
#endif
#if _TIMER_SLEEP_HINT_SUPPORT
    case _SHOW_TIMESTOP_TIMEOVER_HINT_STATE:
        COsdFxShowStatusRedrawTimeStopRemind(0);
        break;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    case _NOSIGNAL_MESSAGE_STATE:
    case _NOCABLE_STATE:
        COsdNoSignalEventProc();
        break;
    case _VOLIMN_STATE:
        COsdCoreVolumnChangeProc();
        break;

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
    case _BRIGHTNESS_STATE:
        COsdCoreBrightnessChangeProc();
        break;
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
    case _CONTRAST_STATE:
        COsdCoreContrastChangeProc();
        break;
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
    case _COLOR_STATE:
        COsdCoreColorChangeProc();
        break;
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)

#if _TIMER_SLEEP_HINT_SUPPORT
    case _SLEEP_HINT_STATE:
        COsdCoreSleepHintChangeProc();
        break;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    case _MAINMENU_STATE:
        COsdCoreMainMenuEventProc();
        break;
    case _EXTENDMENU_STATE:
        COsdCoreExtendMenuEventProc();
        break;
    case _CHANNELEDIT_STATE:
        COsdCoreChannelEditEventProc();
        break;

#if(_Change_SOURCE_Type == Change_SOURCE_Type2 || _Change_SOURCE_Type == Change_SOURCE_Type3)
    case _CHANGE_SOURCE_STATE:
        COsdChangeSourceProc();
        break;
#endif

#if (_PICT_EFFECT_SUPPORT)
    case _PICT_EFFECT_STATE:
        COsdCorePictEffectChangeProc();
        //SET_IR_CLEAR_REQ();
        break;
#endif

#if _AUDIO_EFFECT_SUPPORT
    case _AUDIO_EFFECT_STATE:
        COsdCoreAudioEffectChangeProc();
        break;
#endif

#if _DISP_RATIO_M2_SUPPORT
#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
    case _RATIO_MODE_STATE:
        COsdCoreDispRatioChangeProc();
        //----------------------------add by xyw 080220 at jpe
        if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
        {
            if (ucOsdMessage==_DisplayRatio_KEY_MESSAGE)
            {
                COsdCoreDispRatioProc();
                COsdCoreSetState(_RATIO_MODE_STATE);
                CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
            }

        }
        //-----------------------------------------------------
        break;
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
#endif
    };
}

static void COsdCoreIdleEventProc(void)
{
    //add by lbh 20091016
    ItemObject * pItemObject_Add;
    pItemObject_Add=&tMenuTuneMenuSet_K[0];

#if(SKYWORTH_DISPLAYPROTECT == _ENABLE)
    if ( (ucOsdMessage !=_OK_KEY_MESSAGE)&&(ucOsdMessage != _SHOW_NOSIGNAL_MESSAGE)&&(ucOsdMessage != _EXIT_KEY_MESSAGE)&&
            (ucOsdMessage !=_CC_KEY_MESSAGE)&&(ucOsdMessage != _REPEAT_KEY_MESSAGE))
    {
        //CTimerCancelTimerEvent(COsdFxSetWinMovingEvent);
        COsdFxDisableOsd();
        //COsdDispFirstTimeLoadFont();
    }
#endif
    switch (ucOsdMessage) {
    case _SHOW_BOOT_MESSAGE:
#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
        bTimeoverHintOsdState = 1;
#endif
        COsdDispFirstTimeLoadFont();
        COsdFxShowSource();
        CScalerSetBit(_OVERLAY_CTRL_6C, 0x23, (GET_OSDBLENDING() & 0x07) << 2);
        break;


    case _DISPLAY_KEY_MESSAGE:
        CTimerCancelNosignal_Icon_Powersaving();
        if ((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA)||(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
            COSdCoreShowVGAInfo();
        else
            COsdFxShowSource();

        COsdCoreSetState(_IDLE_STATE);
        CLR_SHOW_NO_SIGNAL();
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;

    case _TV_AUDIO_SYSTEM_KEY_MESSAGE:		//add by lbh 20091016
        COsdCtrlSetTvAudioType(_RIGHT_KEY_MESSAGE);
        COsdFxShowSource();
        break;

    case _RETURN_KEY_MESSAGE:
#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
        bTimeoverHintOsdState = 1;
#endif
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT)
        {
            COsdCoreReturnPrevChannel();
            CLR_SHOW_IS_NOSIGNAL_STATE();
        }
#if 0//(_KEY_UPDOWN_TO_TV_SUPPORT)
        //if current input source is not tv, change to tv immediately while UP/DOWN key is pressed.
        else
        {
            //!!! according to _INPUT_PORT_MAX !!!
            //COsdChangeSourceToSpecified(7);
            for (pData[0]=0; pData[0]<_INPUT_PORT_MAX; pData[0]++)
            {
                if (GET_INPUTPORT_TYPE(pData[0])==_VIDEO_TV_PORT)
                {
                    COsdChangeSourceToSpecified(pData[0]);
                    break;
                }
            }
        }
#endif
        break;

    case _SHOW_NOSIGNAL_MESSAGE:
//#if (SKYWORTH_DISPLAYPROTECT == _ENABLE)  //_ENABLE  _DISABLE
//#else
        COsdFxShowStatus(_SHOW_NOSIGNAL);
//#endif
        break;

    case _SHOW_ICONMOVE_MESSAGE:
        CTimerCancelTimerEvent(COsdFxExitEvent);
        COsdFxShowIconMove(_SHOW_ICONMOVE);
        break;

    case _SHOW_NOCABLE_MESSAGE:
        COsdFxShowStatus(_SHOW_NOCABLE);
        break;

    case _SHOW_NOSUPPORT_MESSAGE:
        COsdFxShowStatus(_SHOW_NOSUPPORT);
        break;

#if _TIMER_SLEEP_HINT_SUPPORT
    case _SHOW_SLEEP_TIMEOVER_HINT_MESSAGE:
        COsdFxShowStatus(_SHOW_SLEEP_TIMEOVER_HINT);
        COsdCoreSetState(_SHOW_SLEEP_TIMEOVER_HINT_STATE);
        break;
    case _SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE:
        COsdFxShowStatus(_SHOW_TIMESTOP_TIMEOVER_HINT);	//hint text share with sleep function
        COsdCoreSetState(_SHOW_TIMESTOP_TIMEOVER_HINT_STATE);
        break;
    case _SHOW_TIMEREMIND_MESSAGE:
        COsdFxShowStatus(_SHOW_TIMEREMIND_MESSAGE);	//hint text share with sleep function
        break;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    case _SHOWINFO_MESSAGE:
        if ((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA)||(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
            COSdCoreShowVGAInfo();
        //review COSdCoreShowYPbPrInfo(), this may not need.
        else if (GET_INPUTSOURCE_TYPE()== _SOURCE_YPBPR)
            COSdCoreShowYPbPrInfo();
        else
            COsdFxShowSource();

        break;
        //add by lbh 20091016
    case _AUTOSEARCH_KEY_MESSAGE:
        if ((GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT))
        {
            //if(!GET_EXT_ADJUST_WIN())
            //     	 SET_EXT_ADJUST_WIN();
            stLayerStack[ucLayerIndex].ucMainMenu=2;
            stLayerStack[ucLayerIndex].ucSubMenu=1;
            CtvScanFirstShowing(0);
            //build adjust window
            COsdFxClearText(0,0,6,30);
            COsdCoreInitAdjustWindow(pItemObject_Add,_SLIDER3_TYPE);
            //COsdCoreSetState(_AUTOSCANCHANNEL_STATE);
            CTimerCancelTimerEvent(COsdFxExitEvent);//dong add 20080813
            CTvAutoScan();
            COsdCoreInitialze();
            return;
        }
        break;

    case _MENU_KEY_MESSAGE:
        stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
        COsdFxEnableOsd();
        COsdCoreSetState(_MAINMENU_STATE);

        CLR_SHOW_IS_NOSIGNAL_STATE();

        CTimerCancelNosignal_Icon_Powersaving();

        break;

#if (_REMOTE_CONTROL == _NEC_TYPE) //fjyang
    case _VOLUME_DEC_MESSAGE:
    case _VOLUME_INC_MESSAGE:
#else
    case _RIGHT_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
#endif
        SET_EXT_ADJUST_WIN();      //dong add 20081006
        COsdCoreVolumnProc();
        COsdCoreSetState(_VOLIMN_STATE);

        CLR_SHOW_IS_NOSIGNAL_STATE();

        break;

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
    case _BRIGHTNESS_KEY_MESSAGE:
        COsdCoreBrightnessProc();
        COsdCoreSetState(_BRIGHTNESS_STATE);
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
    case _CONTRAST_KEY_MESSAGE:
        COsdCoreContrastProc();
        COsdCoreSetState(_CONTRAST_STATE);
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
    case _COLOR_KEY_MESSAGE:
        COsdCoreColorProc();
        COsdCoreSetState(_COLOR_STATE);
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)

    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
        //case _UP_KEY_MESSAGE:
        //case _DOWN_KEY_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
        {
            COsdChangeTVChannelProc();
            CLR_SHOW_IS_NOSIGNAL_STATE();
        }
        //if current input source is not tv, change to tv immediately while UP/DOWN key is pressed.
        else
        {
            //!!! according to _INPUT_PORT_MAX !!!
            //COsdChangeSourceToSpecified(7);
            /*
            for (pData[0]=0; pData[0]<_INPUT_PORT_MAX; pData[0]++)
            {
            	if (GET_INPUTPORT_TYPE(pData[0])==_VIDEO_TV_PORT)
            	{
            		COsdChangeSourceToSpecified(pData[0]);
            		break;
            	}
            }
            */
        }
        //CLR_SHOW_IS_NOSIGNAL_STATE();
        break;

    case _SOURCE_KEY_MESSAGE:

#if(_Change_SOURCE_Type == Change_SOURCE_Type1)
        COsdChangeSourceProc();
#elif(_Change_SOURCE_Type == Change_SOURCE_Type2)
#if(SKYWORTH_OSD == _ENABLE )
        //DebugPrintf("Enter here for change source!!!!", 0);
        COsdCoreShowSourceMessage();
        COsdCoreSetState(_CHANGE_SOURCE_STATE);
#else
        //20080918 ccy modify
        ucSourceTemp = stSystemData.InputSource;
        ucSourceTemp = (ucSourceTemp + 1)% _INPUT_PORT_MAX;


        COsdFxChangeSourceShow();//20080901 ccy modify
        SET_MUTE_PROCESS(_ENABLE);//add 20091126
        CTimerReactiveTimerEvent(SEC(1), COsdChangeSourceEvent);//20080919 dec to 1sec
        COsdCoreSetState(_CHANGE_SOURCE_STATE);
#endif

        CLR_SHOW_IS_NOSIGNAL_STATE();
#elif(_Change_SOURCE_Type == Change_SOURCE_Type3)
        COsdCoreShowSourceMessage();
        COsdCoreSetState(_CHANGE_SOURCE_STATE);
        CTimerReactiveTimerEvent(SEC(2), COsdChangeSourceEvent);
#endif
        break;

    case _ENTER_FACTORY_MODE_MESSAGE:
        CEepromLoadDefault();
        break;

    case _DO_AUTO_CONFIG_MESSAGE:
        if (GET_INPUTSOURCE_TYPE() == _SOURCE_VGA){
            COsdFxShowStatus(_SHOW_AUTOADJUST);
            CAutoDoAutoConfig();
            CAutoDoWhiteBalance();    //dong add 20081108
            COsdFxDisableOsd();
            COsdMessagePush(_SHOWINFO_MESSAGE);// add by xyw 080303 at jpe
        }
        break;



    case _MUTE_KEY_MESSAGE:
#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
        bTimeoverHintOsdState = 1;
#endif
        COsdCoreMuteChangeProc();
        break;

    case _SHOW_MUTE_IDLE_MESSAGE:
        COsdCoreMuteChangeShow();//COsdCoreMuteShowProc();
        CTimerCancelTimerEvent(COsdFxExitEvent);
        break;
//disable by czl 071126
        //  case _DisplayRatio_KEY_MESSAGE:
        //		#if(_DISPLAY_RATIO_ENABLE)
        //              COsdCoreDisplayRatioProc();
        //		#endif
        //    break;

    case _SLEEP_KEY_MESSAGE:
        COsdCoreSleepProc();
#if _TIMER_SLEEP_HINT_SUPPORT
        CLR_SHOW_IS_NOSIGNAL_STATE();
        COsdCoreSetState(_SLEEP_HINT_STATE);
#endif
        break;

#if (_PICT_EFFECT_SUPPORT)
    case _PICT_MODE_KEY_MESSAGE:
        //if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
    {
        COsdCorePictEffectProc();
        COsdCoreSetState(_PICT_EFFECT_STATE);
    }
    break;
#endif
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _PictureMode_KEY_MESSAGE:
        COsdCorePictureModeProc();
        break;
#endif
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
        //if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
    {
        COsdCoreAudioEffectProc();
        COsdCoreSetState(_AUDIO_EFFECT_STATE);
    }
    break;
#endif
#if (_DISP_RATIO_M2_SUPPORT)
#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
    case _DisplayRatio_KEY_MESSAGE:


        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _DSUB_A0_PORT)// mask by xyw 080305
            return;


        if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
        {
            COsdCoreDispRatioProc();
            COsdCoreSetState(_RATIO_MODE_STATE);
        }
        break;
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
#endif
    case _VERSION_KEY_MESSAGE:
        COsdFxShowStatus(_SHOW_VERSION);
        break;


#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE //add by xyw 071105
    case _PC_KEY_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _DSUB_A0_PORT)
        {
            CTimerCancelTimerEvent(COsdNoSignalEvent);
            COsdCoreCloseNoSignalOsd();

            CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
            CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

#if _TYPEOF_INPUT==_TYPEOF_INPUT_6SRC

            COsdCtrlSetSingalSource(5);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_7SRC

            COsdCtrlSetSingalSource(6);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC

            COsdCtrlSetSingalSource(7);//VGA

#endif	//

#else	//
//define other pcb
            program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

            //SET_SOURCESTATUS(stSystemData.InputSource);
        }
        break;
    case _TV_AV_KEY_MESSAGE:

        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
        {
            TVAV_Value=0;
        }

        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_AV_PORT)
        {

            TVAV_Value=1;
        }

        if (TVAV_Value == 0)
        {
            TVAV_Value=1;
            CTimerCancelTimerEvent(COsdNoSignalEvent);
            COsdCoreCloseNoSignalOsd();

            CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
            CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);

//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

            COsdCtrlSetSingalSource(1);//AV

#else	//
//define other pcb
            program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

        }
        else
        {

            TVAV_Value=0;
            CTimerCancelTimerEvent(COsdNoSignalEvent);
            COsdCoreCloseNoSignalOsd();

            CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
            CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);

//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

            COsdCtrlSetSingalSource(0);//TV

#else	//
//define other pcb
            program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

        }


        break;


#endif
#endif	//#if _CUSTOMER_HPC

#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
        //see _INPUT_PORT_MAX
        if (ucOsdMessage == _TV_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _VIDEO_TV_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

                COsdCtrlSetSingalSource(0);//tv

#else	//
//define other pcb
                program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

            }
        }
        else if (ucOsdMessage == _PC_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _DSUB_A0_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

#if _TYPEOF_INPUT==_TYPEOF_INPUT_6SRC

                COsdCtrlSetSingalSource(5);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_7SRC

                COsdCtrlSetSingalSource(6);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC

                COsdCtrlSetSingalSource(7);//VGA

#endif	//

#else	//
//define other pcb
                program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            }
        }
        else if (ucOsdMessage == _AV_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _VIDEO_AV_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

                COsdCtrlSetSingalSource(1);//AV

#else	//
//define other pcb
                program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            }
        }
        else if (ucOsdMessage == _SV_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _VIDEO_SV_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

                COsdCtrlSetSingalSource(2);//sv

#else	//
//define other pcb
                program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            }
        }
        break;
#endif	//#if _CUSTOMER_CGT

    case  _YPBPR_AUTO_COLOR_MESSAGE://gary for ypbpr auto color
        if ((GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR)||(GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8))
        {
            COsdMenuAutoColor();
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            COsdCoreSetState(_IDLE_STATE);
        }
        return;

    case  _PC_AUTO_COLOR:
        if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA && ucSyncProcessState==_ACTIVE_STATE && GET_OSD_NOT_EXIST())
        {
            COsdMenuAutoColor();
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    case  _PC_AUTO_IMAGE:
        if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA && ucSyncProcessState==_ACTIVE_STATE && GET_OSD_NOT_EXIST())
        {
            COsdMenuAutoAdjust();
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            COsdCoreSetState(_IDLE_STATE);
        }
        return;

    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        //20080829 ccy modify
        if (1)// (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)//(ucOsdMessage >= _0_KEY_MESSAGE && ucOsdMessage <= _100_KEY_MESSAGE)
        {
            //SET_IR_CLEAR_REQ();

            if ((GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)){//(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT) {
#if (_TV_SEL_CH_M3)
                CLR_TV_HYPERLINK_DATA();
                CLR_TV_HYPERLINK_INPUTBIT();
                SET_TV_HYPERLINK_LEN_INC();
                SET_TV_HYPERLINK_LEN_INC();
                SET_TV_HYPERLINK_LEN_INC();

#endif
                //CLR_SHOW_IS_NOSIGNAL_STATE();
                CTimerCancelTimerEvent(COsdFxExitEvent);

                CTimerCancelTimerEvent(COsdFxExitEvent);

                if (ucVideoProcessState==_NOSIGNAL_STATE)//add by xyw 080221 at jpe
                    CTimerCancelNosignal_Icon_Powersaving();

                //COsdCoreChannelEditShowProc();
                COsdMessagePush(ucOsdMessage);
                COsdCoreSetState(_CHANNELEDIT_STATE);
                return;
            }
            else
            {
                return;
            }

        }

        return;
    default:
        return;
    };

    //premier, for showing mute icon while idle state
    if (ucOsdState == _MAINMENU_STATE)
        CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
    else  // IDLE state
    {
        bit bCancelExit = 1;
        //20070404
#if _TIMER_SLEEP_HINT_SUPPORT//if timer page support, review this.
        if (bTimeoverHintRequest)
        {
            if (ucOsdMessage==_SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE)
                CTimerCancelTimerEvent(COsdFxExitEvent);
            else
                CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
            return;
        }
#endif
        //20070324
        //if ((ucOsdMessage == _SHOW_MUTE_IDLE_MESSAGE)&&GET_AUDIO_MUTE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
        if ((ucOsdState!= _CHANNELEDIT_STATE)&&(ucOsdMessage == _SHOW_MUTE_IDLE_MESSAGE)&&GET_AUDIO_MUTE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else if (ucOsdMessage == _SHOW_SLEEP_TIMEOVER_HINT_MESSAGE)
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        //20070401
        else if (ucOsdMessage == _SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE)
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else if (ucOsdMessage == _SHOW_NOSUPPORT_MESSAGE)
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else if (GET_ICON_MOVE_ENABLE())
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
#if 0//(_DEMO_MODE_HINT_SUPPORT)
        //20070326
        //else if ((ucOsdMessage==_MUTE_KEY_MESSAGE) && GET_AUDIO_MUTE())
        else if ((ucOsdMessage==_SHOW_DEMO_MODE_HINT_MESSAGE) && GET_DEMO_MODE()&&(ucOsdState!= _CHANNELEDIT_STATE))
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
#endif
        //20070324
        //else if ((ucOsdMessage==_MUTE_KEY_MESSAGE) && GET_AUDIO_MUTE())
        else if ((ucOsdMessage==_MUTE_KEY_MESSAGE) && GET_AUDIO_MUTE()&&(ucOsdState!= _CHANNELEDIT_STATE))
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        //20071017, press MUTE, show mute icon,this will enter _MUTE_STATE;
        else if ((ucOsdMessage==_REPEAT_KEY_MESSAGE) && GET_AUDIO_MUTE()&&(ucOsdState== _MUTE_STATE))
        {
            bCancelExit = 0;
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else
        {
            bCancelExit = 0;
            //CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
        }

        //DebugPrintf("\nbCancelExit=%d\n", bCancelExit);

        //20070406
        if (bCancelExit)
            CTimerCancelTimerEvent(COsdFxExitEvent);
        else
            CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);

    }


#if _TIMER_PAGE_SUPPORT
    if (ucOsdMessage == _SHOW_TIMEREMIND_MESSAGE)
        CTimerCancelTimerEvent(COsdFxExitEvent);
#endif
}

static void COsdCoreMainMenuEventProc(void)
{
    MenuItem * pMenuItem;
    ItemObject * pItemObject;
    MenuItemSet * pMenuItemSet;
#if 1//_CUSTOMER_SVA
    UINT8 factoryPassword[4]={1,8,7,8};
#else
    UINT8 factoryPassword[4]={1,9,9,9};
#endif

    UINT8 ucFlag,ucCnt;

    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);

    //DebugPrintf("\nMainMenuEventProc():%d", ucOsdMessage);
    //DebugPrintf("ucPasswordInputNum: %d,, ", ucPasswordInputNum);
    //DebugPrintf("ucLayerIndex: %d\n, ", ucLayerIndex);

    switch (ucOsdMessage) {
    case _RIGHT_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
    case _OK_KEY_MESSAGE://test by xyw 080214

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    case _ENTER_KEY_MESSAGE:
#endif
        //prevent NEC IR repeat key or number key disable number input
        if (ucOsdMessage==_REPEAT_KEY_MESSAGE&&(\
                                                ucOsdPreMessage==_0_KEY_MESSAGE||\
                                                ucOsdPreMessage==_1_KEY_MESSAGE||\
                                                ucOsdPreMessage==_2_KEY_MESSAGE||\
                                                ucOsdPreMessage==_3_KEY_MESSAGE||\
                                                ucOsdPreMessage==_4_KEY_MESSAGE||\
                                                ucOsdPreMessage==_5_KEY_MESSAGE||\
                                                ucOsdPreMessage==_6_KEY_MESSAGE||\
                                                ucOsdPreMessage==_7_KEY_MESSAGE||\
                                                ucOsdPreMessage==_8_KEY_MESSAGE||\
                                                ucOsdPreMessage==_9_KEY_MESSAGE||\
                                                ucOsdPreMessage==_NONE_KEY_MESSAGE\
                                               )\
           )
        {
            CTimerDelayXms(300);
            ucOsdPreMessage = _NONE_KEY_MESSAGE;
            ucOsdMessage = _NONE_KEY_MESSAGE;
        }
        else
        {
            ucPasswordInputNum = 0;
            COsdMainMenuDirectionKeyProc(ucOsdMessage);
        }
        break;

    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:

        FactoryInputPassword[ucPasswordInputNum] = ucOsdMessage - _0_KEY_MESSAGE;

        //show password buffer
        //DebugPrintf("FactoryInputPassword[%d, ", FactoryInputPassword[0]);
        //DebugPrintf("%d, ", FactoryInputPassword[1]);
        //DebugPrintf("%d, ", FactoryInputPassword[2]);
        //DebugPrintf("%d]\n\n\n", FactoryInputPassword[3]);

        if (ucPasswordInputNum < 3)
        {
            ucPasswordInputNum++;
        }
        else if (ucPasswordInputNum == 3)
        {
            ucFlag = 1;
            for (ucCnt = 0; ucCnt < 4; ucCnt++)
                if (FactoryInputPassword[ucCnt] != factoryPassword[ucCnt])
                    ucFlag = 0;

            if (!GET_FACTORYSTATUS() && ucFlag)
            {
                //if(ucEnterFacMenu)				//add by lbh 20090916
                //ucEnterFacMenu = 0;
                SET_FACTORYSTATUS();
                CEepromSaveSystemData();
                COsdCoreInitialze();
                COsdMessagePush(_MENU_KEY_MESSAGE);
                CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
            }
            ucPasswordInputNum = 0;
        }
        break;

    case _MENU_KEY_MESSAGE:
        //test by xyw 080214
        //case _OK_KEY_MESSAGE:   //yf_zhang added ok_key to enter 2007-5-15 10:20

        ucPasswordInputNum = 0;	//20070405, clear password counter

        //if(ucEnterFacMenu)					//add lbh 20090916
        //ucEnterFacMenu = 0;

        if (ucLayerIndex > 0)
        {
            //dong add for debug exit adjust VGA color temp menu 20080819
            if (GET_EXT_ADJUST_WIN())
            {
                CLR_EXT_ADJUST_WIN();
                COsdFxClearText(1, 2, 5, _ITEMSLIDER_EXTADJ_LEN+3);
                COsdFxCloseWindow(tExtAdjWindowStyle.ucWindowID);
                ucOsdlayerExit=1;
                ucLayerIndex--;
                COsdCoreBackMenuDrawPage();
                ucLayerIndex++;
                COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);
                COsdFxHLine(_ITEMSTR_START_ROW+2*(stLayerStack[ucLayerIndex].ucSubMenu-1), 0, _OSD_UMAIN_COL, GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
                COsdFxEnableOsd();
                CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
            }
            else
                //dong add for debug exit adjust VGA color temp menu 20080819
            {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                if (ucOsdState==_CHANNELEDIT_STATE) //yf_zhang 2007-6-8 16:16
                    COsdCoreSetState(_MAINMENU_STATE);
            }
            return;
        }
        else
        {
            if (GET_EXT_ADJUST_WIN())
            {
                CLR_EXT_ADJUST_WIN();

                COsdCoreExtAdjWinReturn();
            }
            else
            {

                if (stLayerStack[ucLayerIndex].ucSubMenu)
                {
                    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
                    pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
                    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);

                    //uncolored target line
                    COsdCoreMarkTargetLine(pItemObject->ucType, 0, stLayerStack[ucLayerIndex].ucSubMenu, pMenuItem->ucStartRow);

                    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,0,0);
                    return;
                }
                else
                {
                    ucPasswordInputNum = 0;///clear password
                    //20070930, huxj, menu to quit main osd
                    COsdMessagePush(_EXIT_KEY_MESSAGE);
                    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
                }
            }
        }
        break;

#if _TIMER_PAGE_SUPPORT
    case _SHOW_TIMEREMIND_MESSAGE:
#endif	//#if _TIMER_PAGE_SUPPORT

    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _SOURCE_KEY_MESSAGE:
    case _MTS_KEY_MESSAGE:
#if _TYPEOF_OSD_KONSTA
        //case _DISPLAY_KEY_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _VOLUME_INC_MESSAGE:
#endif
        //case _RETURN_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106

#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC
#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
#endif	//#if _CUSTOMER_CGT

        ucPasswordInputNum = 0;	//20070405, clear password counter
        //if(ucEnterFacMenu)				//add lbh 20090916
        //ucEnterFacMenu = 0;

        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);

        COsdCoreInitialze();
        break;

    default:
        return;
    }
}

static void COsdMainMenuDirectionKeyProc(UINT8 message)
{
    UINT8 result=0;
    UINT8	ucTmpMain, ucTmpSub;
    MenuItem * pMenuItem;
    MenuItem * pTopMenuItem;
    MenuItemSet * pMenuItemSet;
    ItemObject *	pItemObject;
    ItemBracket1* pItemBracket1;
    ItemBracket2* pItemBracket2;
    ItemBracket3* pItemBracket3;

    ItemBracket * pItemBracket;
    ItemImmediate* pItemImmediate;

    //UINT8 ucValue;
    //UINT8 * pStringArray;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    WindowStyle stWindowInfo;
#endif

    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    pTopMenuItem = pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);

    ucTmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
    ucTmpSub = stLayerStack[ucLayerIndex].ucSubMenu;
#if _TIMER_PAGE_SUPPORT
    if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
    {
        if (message == _REPEAT_KEY_MESSAGE)
        {
            //DebugPrintf("\nucOsdPreMessage = %d\n", ucOsdPreMessage);
            if (ucOsdPreMessage == _UP_KEY_MESSAGE)
                message = _UP_KEY_MESSAGE;
            else if (ucOsdPreMessage == _DOWN_KEY_MESSAGE)
                message = _DOWN_KEY_MESSAGE;
        }
    }
#endif	//#if _TIMER_PAGE_SUPPORT

    //DebugPrintf("\nDirectionKeyProc():message = %d ",message);
    switch (message)
    {
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    case _ENTER_KEY_MESSAGE:
#endif

#if _TIMER_PAGE_SUPPORT
        if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
        {
            //DebugPrintf("\ntarget u/d...\n", 0);
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            //DebugPrintf("\nucExtendMenu Row/Col=%d, ", ucExtendMenuRow);
            //DebugPrintf("%d\n", ucExtendMenuCol);
            if (ucExtendMenuCol != 0)
            {
                //set power on time
                //DebugPrintf("\nStart:  %d:", stTimeData.ucTimeHourStart );
                //DebugPrintf("%d\n", stTimeData.ucTimeMinStart );
                pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
                pItemBracket1->pHandlerFunction(message);
                COsdCoreFreshItem(1);
#if _NEW_TIME_POWERON_TYPE
                if ((stTimeData.ucTimeHourStart  >ucHourSystem)||((stTimeData.ucTimeHourStart  == ucHourSystem)&&(stTimeData.ucTimeMinStart  > ucMinSystem)))
#else
                if (stTimeData.ucTimeHourStart || stTimeData.ucTimeMinStart)
#endif
                    COsdReckonTimerPowerOnEvent();
                else
                    CTimerCancelTimerEvent(COsdReckonTimerPowerOnEvent);
#if _NEW_TIME_POWEROFF_TYPE
                if ((stTimeData.ucTimeHourStop >ucHourSystem)||((stTimeData.ucTimeHourStop == ucHourSystem)&&(stTimeData.ucTimeMinStop > ucMinSystem)))
#else
                if (stTimeData.ucTimeHourStop || stTimeData.ucTimeMinStop)
#endif
                    COsdReckonTimerPowerOffEvent();
                else
                    CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent);

                if (stTimeData.ucTimeHourSwitch || stTimeData.ucTimeMinSwitch)
                    COsdReckonTimerSwitchChEvent();
                else
                    CTimerCancelTimerEvent(COsdReckonTimerSwitchChEvent);

                return;
            }
        }

#endif	//#if _TIMER_PAGE_SUPPORT

        //Manual Search page don't implement Up/Down
        if (pMenuItem->pString == tOsdManualScanStr)
            return;
        else if (pMenuItem->pString == tOsdAutoScanStr)
            return;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        if ( (ucOsdPreMessage != _UP_KEY_MESSAGE) && (ucOsdPreMessage != _DOWN_KEY_MESSAGE) && (ucOsdPreMessage != _ENTER_KEY_MESSAGE))
            return;

        if (message==_ENTER_KEY_MESSAGE && stLayerStack[ucLayerIndex].ucSubMenu==0)
        {
            //DebugPrintf("\nCOsdMainMenuDirectionKeyProc():message=%d\n", message);
            message = _DOWN_KEY_MESSAGE;
            //DebugPrintf("\nCOsdMainMenuDirectionKeyProc():message=%d\n", message);
        }
        else if (message==_ENTER_KEY_MESSAGE && stLayerStack[ucLayerIndex].ucSubMenu!=0)
        {
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);

            }
            else
            {
                // ENTER sub page directly by menu key for the following type:
                if (pItemObject->ucType == _MENU_TYPE || \
                        pItemObject->ucType == _IMMEDIATE1_TYPE || \
                        pItemObject->ucType == _IMMEDIATE_TYPE)
                {
                    SET_ITEM_SELECTED();
                    COsdMessagePush(_RIGHT_KEY_MESSAGE);
                }
                else
                {
                    SET_ITEM_SELECTED();
                    stWindowInfo = tOsdItem_SelectWindow;
#if _FACTORY_MENU_ENABLE
                    if (GET_FACTORYSTATUS())
                    {
                        stWindowInfo.stPosition->usYStart= (stWindowInfo.stPosition)->usYStart-18*5+ 18*(stLayerStack[ucLayerIndex].ucSubMenu-1);
                        stWindowInfo.stPosition->usYEnd = stWindowInfo.stPosition->usYStart+18;
                    }
                    else
#endif	//#if _FACTORY_MENU_ENABLE
                    {
                        stWindowInfo.stPosition->usYStart= (stWindowInfo.stPosition)->usYStart+ 18*(stLayerStack[ucLayerIndex].ucSubMenu-1);
                        stWindowInfo.stPosition->usYEnd = stWindowInfo.stPosition->usYStart+18;
                    }
                    CTimerWaitForEvent(_EVENT_DEN_STOP);
                    COsdFxDrawWindow(&stWindowInfo);
                }
            }
            return;
        }
#else
        if ( (ucOsdPreMessage != _UP_KEY_MESSAGE) && (ucOsdPreMessage != _DOWN_KEY_MESSAGE))
            return;
#endif

        //if extend adjust window, return
        if (GET_EXT_ADJUST_WIN())
            return;
        if (!GET_FACTORYSTATUS())							//add by lbh 20090927
        {
            if (GET_VGA_COLORTEMP_RGB_MASK(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub,&ucTmpMain))
                return;
        }
        if (message == _UP_KEY_MESSAGE)
        {
            //up point counter

            //uncolored target line
            if (ucTmpSub)
            {
                COsdCoreMarkTargetLine(pItemObject->ucType, 0, ucTmpSub, pMenuItem->ucStartRow);
            }

            //position to previous line
            if (ucTmpSub <=1)
                ucTmpSub = pMenuItem->ucItemCount;
            else
                ucTmpSub -= 1;


#if _OSD_2X
            // if main osd is double size, we should skip the item of OSD H/V adjust
            //Up direction, skip 2 times: H and V
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message,/* pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message,/* pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
#endif

#if _PAL_MASK_HUE
            //PAL hue is in the 0 page of main osd, we skip hue while PAL
            if (ucTmpMain == 0)
            {
                /////////skip PAL-HUE//////////////////////////
                if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
                {
                    COsdCoreSkipVideoHue(&ucTmpSub, /*&ucTmpMain, */message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
                }
            }
#endif
            //PICT misc is in the 3 page of main osd
            //if(ucTmpMain == 3)
            //{
            /////////skip PAL-HUE//////////////////////////
            //if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA)
            //{
            //COsdCoreSkipPictMisc(&ucTmpSub, /*&ucTmpMain, */message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            //}
            //}
            //record current vertical position, for others
            ucExtendMenuRow = ucTmpSub;

            pItemObject = &(pMenuItem->pItemList[ucTmpSub - 1]);
            //colored target line
            if (ucTmpSub)
            {
                COsdCoreMarkTargetLine(pItemObject->ucType, 1, ucTmpSub, pMenuItem->ucStartRow);
            }

        }

        else if (message == _DOWN_KEY_MESSAGE)
        {
            //down point counter

            //uncolored target line
            if (ucTmpSub)
            {
                COsdCoreMarkTargetLine(pItemObject->ucType, 0, ucTmpSub, pMenuItem->ucStartRow);
            }

            //position to next line
            if ((ucTmpSub + 1) > pMenuItem->ucItemCount)
                ucTmpSub = 1;
            else
                ucTmpSub += 1;

#if _OSD_2X
            // if main osd is double size, we should skip the item of OSD H/V adjust
            //Down direction, skip 2 times: H and V
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
#endif

#if _PAL_MASK_HUE
            //PAL hue is in the 0 page os main osd, we skip hue while PAL
            if (ucTmpMain == 0)
            {
                /////////skip PAL-HUE//////////////////////////
                if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
                    COsdCoreSkipVideoHue(&ucTmpSub, /*&ucTmpMain, */message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            }
#endif
            //PICT misc is in the 3 page of main osd
            //if(ucTmpMain == 3)
            //{
            /////////skip PAL-HUE//////////////////////////
            //if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA)
            //{
            //COsdCoreSkipPictMisc(&ucTmpSub, /*&ucTmpMain, */message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            //}
            //}
            //record current vertical position, for others
            ucExtendMenuRow = ucTmpSub;

            pItemObject = &(pMenuItem->pItemList[ucTmpSub - 1]);
            //colored target line
            if (ucTmpSub)
            {
                COsdCoreMarkTargetLine(pItemObject->ucType, 1, ucTmpSub, pMenuItem->ucStartRow);
            }

        }

        break;


    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if ((message == _REPEAT_KEY_MESSAGE) && (ucOsdPreMessage != _RIGHT_KEY_MESSAGE) && (ucOsdPreMessage != _LEFT_KEY_MESSAGE))
            return;

        if (stLayerStack[ucLayerIndex].ucSubMenu == 0)
        {
            //stLayerStack[ucLayerIndex].ucSubMenu == 0: Main Page change

#if (_CUSTOMER_TYPE == _SKYWORTH)  //yf_zhang 2007-6-8 12:54
            if (ucOsdState==_CHANNELEDIT_STATE)
                return;
#endif
            if (message == _LEFT_KEY_MESSAGE)
            {
                ucTmpSub = 0;
                if (ucTmpMain == 0)
                    ucTmpMain = pMenuItemSet ->ucItemCount - 1;
                else
                    ucTmpMain = ucTmpMain - 1;
            }
            else if (message == _RIGHT_KEY_MESSAGE)
            {
                ucTmpSub = 0;
                if ((ucTmpMain + 1) >= pMenuItemSet->ucItemCount)
                    ucTmpMain = 0;
                else
                    ucTmpMain = ucTmpMain + 1;
            }

            COsdCoreSkipVgaChannel(&ucTmpMain, message, pMenuItemSet->ucItemCount);


        }

        //stLayerStack[ucLayerIndex].ucSubMenu != 0: item action for L/R
        else if (pItemObject->ucType == _SLIDER_TYPE || pItemObject->ucType == _SLIDER3_TYPE)
        {
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            //if (!GET_EXT_ADJUST_WIN() && (pItemObject->pString!= tOsdHPositionStr) && (pItemObject->pString!= tOsdVPositionStr))
            if (!GET_EXT_ADJUST_WIN() &&
                    (pItemObject->pString!= tOsdHPositionStr) &&
                    (pItemObject->pString!= tOsdVPositionStr) &&
                    (!GET_FACTORYSTATUS()))   //dong alter 20080923
            {
                SET_EXT_ADJUST_WIN();

                if (pItemObject->ucType == _SLIDER3_TYPE)
                {
                    CtvScanFirstShowing(0);
                    //build adjust window
                    COsdCoreInitAdjustWindow(pItemObject,_SLIDER3_TYPE);
                    CTimerCancelTimerEvent(COsdFxExitEvent);//dong add 20080813
                    CTvAutoScan();
#if(_AUTO_SCAN_EXIT_TYPE == _AUTO_SCAN_EXIT_TYPE2_)
                    CLR_EXT_ADJUST_WIN();
                    COsdCoreExtAdjWinReturn();
#endif
                    return;
                }
                else
                {
                    //build adjust window
                    COsdCoreInitAdjustWindow(pItemObject,_SLIDER_TYPE);
                    if (pItemObject->pString == tOsdAudioVolumnStr)
                    {
                        if (GET_AUDIO_MUTE())
                        {
                            CLR_AUDIO_MUTE();
                            CEepromSaveAudioData();
                        }
                        if (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE)
                            SET_MUTE_PROCESS(_DISABLE);
                    }
                    COsdCoreSliderUpdateModeData((ItemSlider*)pItemObject->pStruct, message);

                }
            }
            else
            {
                COsdFxSliderDirectionProc((ItemSlider*)pItemObject->pStruct, message);
                //dong add for debug osd move menu disp 20080813
                /*if(pItemObject->pString == tOsdHPositionStr)
                	COsdFxChange1bitColor(7, 1, 1, _OSD_UMAIN_COL, _CP_3, _CP_0);
                else if(pItemObject->pString == tOsdVPositionStr)
                	COsdFxChange1bitColor(9, 1, 1, _OSD_UMAIN_COL, _CP_3, _CP_0);*/
                //dong add 20080813
            }

            return;
        }
        else if (pItemObject->ucType == _SLIDER1_TYPE)
        {
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            //DebugPrintf("right for _SLIDER1_TYPE\n", 0);
            //////////////////////////////
            //manual scan sub page
            if (pItemObject->pString == tOsdManualScanStr)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                //DebugPrintf("CTvManualScan\n", 0);
                CTimerCancelTimerEvent(COsdFxExitEvent);
                CTvManualScan(message);
                //COsdFxTvShowFrequencySlider(16, 22, stTvPdb.pdb);   //dong add 20080813

            }
            //////////////////////////////
            //auto scan sub page
            else if (pItemObject->pString == tOsdAutoScanStr)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                CTimerCancelTimerEvent(COsdFxExitEvent);
                CTvAutoScan();
            }

            return;
        }
        else if (pItemObject->ucType == _SLIDER2_TYPE)
        {
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdFxSlider2DirectionProc((ItemSlider2*)pItemObject->pStruct, message);
            //COsdFxTvShowFrequencySlider(_ITEMSTR_START_ROW-1+(stLayerStack[ucLayerIndex].ucSubMenu-1)*2, 22, stTvPdb.pdb);   //dong add 20080813
            COsdFxTvShowFrequencySlider(_ITEMSTR_START_ROW-1+(stLayerStack[ucLayerIndex].ucSubMenu-2)*2, 22, stTvPdb.pdb);   //dong add 20081009
            COsdCoreUpdateItem(pItemObject-1, _ITEMSTR_START_ROW+(stLayerStack[ucLayerIndex].ucSubMenu-2)*2, _ITEMVAL_START_COL, 0, 0);  //dong add 20080813
            return;
        }

#if _TIMER_PAGE_SUPPORT
        else if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
        {
            //DebugPrintf("\ntarget...\n", 0);
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            COsdCoreShowTimePageSegment(ucExtendMenuRow, ucExtendMenuCol, _FALSE);
            //////////////////////////////
            //manual scan sub page
            if (1)//(pItemObject->pString==tOsdPowerOnTimerStr)
            {
                if (ucOsdMessage == _RIGHT_KEY_MESSAGE)
                    ucExtendMenuCol = (ucExtendMenuCol+1)%3;
                else
                    ucExtendMenuCol = (ucExtendMenuCol==0)?(2):(ucExtendMenuCol-1);

                //CosdCoreShowTimePageWin(ucExtendMenuCol);
            }

            COsdCoreShowTimePageSegment(ucExtendMenuRow, ucExtendMenuCol, _TRUE);
            return;
        }

#endif	//#if _TIMER_PAGE_SUPPORT

        else  if (pItemObject->ucType == _BRACKET_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))
                return;

            //DebugPrintf("_BRACKET_TYPE", 0);
            pItemBracket = (ItemBracket*)pItemObject->pStruct;
            (*pItemBracket->pHandlerFunction)();
            COsdCoreFreshItem(1);
            return;
        }
        else if (pItemObject->ucType == _BRACKET1_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pItemBracket1->pHandlerFunction(message);
#if(_TYPEOF_OSD_KONSTA)
            if (pItemObject->pString == tOsdLanguageStr)
            {
                COsdDispLoadFont(GET_LANGUAGE());		//dong add 20081120
                COsdCoreSwichLanguageRefreshRelativeItem();
                COsdFxChange1bitColor(_ITEMSTR_START_ROW, 1, 1, _OSD_UMAIN_COL-2, _CP_12, _CP_0);
            }
            else
                COsdCoreFreshItem(1);
#endif
#if (_PICT_EFFECT_SUPPORT)
            if (pItemBracket1->pHandlerFunction == COsdCtrlSetPictEffect)
                COsdCorePictEffectRefreshRelativeItem(pItemBracket1);
#endif
#if (_AUDIO_EFFECT_SUPPORT)
            if (pItemBracket1->pHandlerFunction == COsdCtrlSetAudioEffect)
                COsdCoreAudioEffectRefreshRelativeItem(pItemBracket1);
#endif
            return;
        }

        else if (pItemObject->ucType == _BRACKET2_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

            pItemBracket2 = (ItemBracket2*)pItemObject->pStruct;
            pItemBracket2->pHandlerFunction(message);
#if _OSD_2X
            if (pItemBracket2->pLableString==tOsdZoomStrSet)
            {
                //UINT8 ucSub;
                //ucSub = stLayerStack[ucLayerIndex].ucSubMenu;
                //stLayerStack[ucLayerIndex].ucSubMenu = _MASK_ITEM_OSD_H;
                //COsdCoreFreshItem(1);
                //stLayerStack[ucLayerIndex].ucSubMenu = _MASK_ITEM_OSD_V;
                //COsdCoreFreshItem(1);
                //stLayerStack[ucLayerIndex].ucSubMenu = ucSub;
                COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu, stLayerStack[ucLayerIndex].ucSubMenu, 1);
            }
            COsdFxEnableOsd();
#endif
            if (pItemBracket2->bActive==1) //yf_zhang 2007-6-4 10:15
                return;
            COsdCoreFreshItem(1);

            return;
        }
        else if (pItemObject->ucType == _BRACKET3_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

            pItemBracket3 = (ItemBracket3*)pItemObject->pStruct;
            pItemBracket3->pHandlerFunction(message);
            COsdCoreFreshItem(1);

            return;
        }

        else if (pItemObject->ucType == _IMMEDIATE_TYPE)
        {

            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);
            }
#endif

            pItemImmediate = (ItemImmediate*)pItemObject->pStruct;

            if (((ItemImmediate*)pItemObject->pStruct)->pHandlerFunction == COsdCtrlReset)
                result = 1;

            (*pItemImmediate->pHandlerFunction)();

            if (ucLayerIndex > 0)
            {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                return;
            }

            if (!result)
            {
                COsdCoreFreshItem(1);
            }
            return;

        }
#if 0
        else if (pItemObject->ucType == _IMMEDIATE1_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

#if _ADD_CHINESE

            if (GET_FACTORYSTATUS())
                COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            else
                COsdFxClearText(_TITLE_U_ROW, _TITLE_U_COL, _TITLE_U_HEIGH, _TITLE_U_WIDTH);

            //COsdCoreLoad1BiTIcon(4,0x0b,_CP_COLOR06,GET_LANGUAGE(),pItemObject->pString);//modified by xyw 070929
            usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pItemObject->pString);
            COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_COLOR06, _CP_BLACK, GET_LANGUAGE(),pItemObject->pString);

#endif

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);
            }
#endif


            pItemImmediate = (ItemImmediate*)pItemObject->pStruct;

            (*pItemImmediate->pHandlerFunction)();

            if (ucLayerIndex > 0)
            {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                if (ucOsdState==_CHANNELEDIT_STATE) //yf_zhang 2007-6-8 16:16
                    COsdCoreSetState(_MAINMENU_STATE);
                return;
            }

            return;


        }
        // weixg mod 20070522
        else if (pItemObject->ucType == _SELECTDIALOG_TYPE || pItemObject->ucType == _CONFIRM_TYPE){
            ItemSelectDialog* pItemSelectDialog;


            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

            pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;
            if ((pItemSelectDialog->ucItemCount == 1))
                ucExtendMenuRow = 1;
            else
                ucExtendMenuRow = 0;
            ucExtendMenuCol = 0;
            pItemSelectDialog->pInitializeFunction();
            COsdCoreSetState(_EXTENDMENU_STATE);
            return;
        }
#endif
        else if (pItemObject->ucType == _MENU_TYPE) {
            //right key to enter sub item page
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;
            if (GET_FACTORYSTATUS())
            {
                if (pItemObject->pString == tOsdIcmStr)
                {
                    if (GET_ICM_on_off()==_OFF)
                        return;
                }
            }

            ucLayerIndex++;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 1;
            stLayerStack[ucLayerIndex].pMenuItemSet = (MenuItemSet*)pItemObject->pStruct;
            stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();

            pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
            pTopMenuItem = pMenuItemSet->pMenuItem;
            pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
            pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
#if 0
//note:
//enter into main menu source page,
//ucType is change to _IMMEDIATE_TYPE from _MENU_TYPE
            //////////////////////////////
            //manual/auto scan sub page
            if (pMenuItem->pString==tOsdManualScanStr ||pMenuItem->pString==tOsdAutoScanStr)
            {
                UINT8 ucShowCh=stTvInfo.CurChn;
                BIT bAutoReady = 0;	//pMenuItem->pString will NOT equal to tOsdAutoScanStr after some step, so set this flag

                if (pMenuItem->pString==tOsdAutoScanStr)
                {
                    ucShowCh = 1;
                    //CtvScanFirstShowing(ucShowCh);	//show channel 1
                    bAutoReady = 1;

                    //-------------add by xyw 070927  ------------------------------------
                    ucTmpSub = 2;	//point to start item, it is invisiuable
                    stLayerStack[ucLayerIndex].ucSubMenu = 2; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

                    stTvPdb.pdb = _VH_LOW_STAR;
                    COsdFxClearText(_VALUE_U_ROW,_VALUE_U_COL,_VALUE_U_HEIGH,_VALUE_U_WIDTH);
                    CtvScanFirstShowing(ucShowCh);	//show channel 1
                    //-------------------------------------------------

                }
                else
                {
                    ucShowCh = stTvInfo.CurChn;

                    //-------------add by xyw 070927 -------------------------
                    ucTmpSub = 2;	//point to start item, it is invisiuable
                    stLayerStack[ucLayerIndex].ucSubMenu = 2; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

                    COsdFxClearText(_VALUE_U_ROW,_VALUE_U_COL,_VALUE_U_HEIGH,_VALUE_U_WIDTH);
                    CtvScanFirstShowing(ucShowCh);	//show channel 1
                    //---------------------------------------
                }
                COsdFxDrawWindow(&tPopdownMenuItemWindowStyle);

                //auto scan, do immediately
                //if (pMenuItem->pString==tOsdAutoScanStr)
                if (bAutoReady)
                {
                    //DebugPrintf("enter manual/auto scan page.... is auto too\n", 0);

                    CTimerCancelTimerEvent(COsdFxExitEvent);
                    CTvAutoScan();
                    return;
                }
                //prevent from doing manual scan just in the page by repeat key
                CTimerDelayXms(500);
                return;
            }
#endif
//////////////////////////////
            if (pItemObject->ucType == _IMMEDIATE1_TYPE)
            {
//////////////////////////////
                //enter language page
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;

                //language sub page
                if (pMenuItem->pString==tOsdLanguageStr)
                {
                    //DebugPrintf("enter language page\n", 0);

                    //language
                    ucExtendMenuCol=0;
                    ucExtendMenuRow = GET_LANGUAGE()+1;
                    ucTmpSub = ucExtendMenuRow;
                    stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucExtendMenuRow-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);

                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);// add by xyw 070929

                    //DebugPrintf("initial ucExtendMenuRow=%d\n", ucExtendMenuRow);

                }
                else
                {
                    stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
                    COsdFxHLine(ROW(_ARROW_U_ROW+GET_COLOR_TEMP_TYPE()), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);//xyw
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929
                }
            }
            else if (pItemObject->ucType == _IMMEDIATE_TYPE)
            {

                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;

                //signal source
                ucExtendMenuCol=0;
                ucExtendMenuRow = stSystemData.InputSource+1;
                ucTmpSub = ucExtendMenuRow;
                stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC
                if (stSystemData.InputSource<5)
                {
                    ucExtendMenuCol=1;
                }
                else
                {
                    ucExtendMenuCol=2;
                }
                ucExtendMenuRow = stSystemData.InputSource+1-(ucExtendMenuCol-1)*5;
                ucTmpSub = ucExtendMenuRow;
                stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
#else	//#if _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC

                ucExtendMenuCol=0;
                ucExtendMenuRow = stSystemData.InputSource+1;
                ucTmpSub = ucExtendMenuRow;
                stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

#endif	//#if _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC
#else	//#if _PCB_TYPE==_PCB_PT2662F1A

                ucExtendMenuCol=0;
                ucExtendMenuRow = stSystemData.InputSource+1;
                ucTmpSub = ucExtendMenuRow;
                stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
                if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
                {
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucExtendMenuRow-1), _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
                }
                else
                {
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucExtendMenuRow-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
                }
#else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

                COsdFxHLine(_ARROW_U_ROW+ucExtendMenuRow-1, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);
                COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929

#endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

#else	//#if _PCB_TYPE==_PCB_PT2662F1A

                COsdFxHLine(_ARROW_U_ROW+ucExtendMenuRow-1, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);
                COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929

#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

            }
            else if (pItemObject->ucType == _BRACKET_TYPE)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))
                    return;

                COsdCoreFreshItem(1);
                return;
            }
            else if (pItemObject->ucType == _BRACKET1_TYPE)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                COsdCoreFreshItem(1);
                return;
            }

#if _TIMER_PAGE_SUPPORT
            else if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                ucExtendMenuCol = 0;	//set time segment position
                ucExtendMenuRow = 1;	//set time item for power on
                return;
            }
#endif	//#if _TIMER_PAGE_SUPPORT

            else
            {
                // stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
                //COsdFxHLine(ROW(5+GET_COLOR_TEMP_TYPE()), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw
                //-----------------------modified by xyw 070929 ------------------------------------------
                if (GET_FACTORYSTATUS())
                {
#if _TYPEOF_OSD_KONSTA//dong add 20080922
                    COsdCoreMarkTargetLine(pItemObject->ucType, 1, stLayerStack[ucLayerIndex].ucSubMenu, pMenuItem->ucStartRow);
#else
                    COsdFxHLine(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_R_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929
#endif
                }
                else
                {
                    COsdFxHLine(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_R_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);
                }
                //-------------------------------------------------------------------------------------------------
            }
            return;

        }

        else if (pItemObject->ucType == _MENU1_TYPE)
        {
            return;
        }

        break;

    default:
        return;
    }

    if ((pMenuItemSet->ucItemCount == 1) &&(ucTmpSub == 0))
    {
        if (message == _UP_KEY_MESSAGE)
            ucTmpSub = pMenuItem->ucItemCount;
        else
            ucTmpSub = 1;
    }

    COsdMenuMoveProc(ucTmpMain, ucTmpSub, 0);

}

static void COsdMenuMoveProc(UINT8 ucMain, UINT8 ucSub, UINT8 bRefresh)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    //UINT8 usBkLength;
    UINT8 ucRowOffset;
    MenuItem *	pMenuItem;
    ItemObject *	pItemObject;
    SubMenuInfo	xdata stSubmenuInfo;
    ItemPosition xdata stMoveMainItemPos;
    ItemPosition xdata stMoveSubItemPos;
    //WindowStyle xdata stSubWindowStyle;
    //UINT8 ItemCount;

    if ((stLayerStack[ucLayerIndex].ucMainMenu == ucMain) && (stLayerStack[ucLayerIndex].ucSubMenu == ucSub) && !bRefresh)
        return;

#if _FACTORY_MENU_ENABLE
    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage = GET_LANGUAGE();
#endif

    pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[ucMain];

    if (((stLayerStack[ucLayerIndex].ucMainMenu != ucMain) || bRefresh) /*&& (stLayerStack[ucLayerIndex].pMenuItemSet->ucItemCount > 1)*/) //dong alter 20080819
    {
        // Make font be black color in first menu item
        //pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
        //get target main page
        stLayerStack[ucLayerIndex].ucMainMenu = ucMain;
        pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];//Ñ¡ÔñÄ³Ò»Ò³

        if ((!GET_FACTORYSTATUS())/*&&(stLayerStack[ucLayerIndex].ucSubMenu == 0)*/)       //dong alter 20080819
        {
            // Move MainMenu Window
            COsdFxCloseWindow(stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->ucWindowID);

            stMoveMainItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->stPosition;
            stMoveMainItemPos.usXStart += stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;//20080919 ccy modify
            stMoveMainItemPos.usXEnd += stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;//20081008 ccy modify 12->6
            CTimerWaitForEvent(_EVENT_DEN_STOP);
            //COsdFxMoveWindow(&tMainMenuItemWindowStyle,&stMoveMainItemPos);
            COsdFxMoveWindow(stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow,&stMoveMainItemPos);
        }

        stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
        stSubmenuInfo.stItemPosition = stMoveSubItemPos;
        stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;


        if ((!GET_FACTORYSTATUS())/*&&(stLayerStack[ucLayerIndex].ucSubMenu == 0)*/)       //dong alter 20080819
        {
            //usItemStart = GET_WIN_TITLE_PREBLANK(ucSelectLanguage, pMenuItem->pString);
            COsdFxClearText(_TITLE_U_ROW, 0, 1, _OSD_UMAIN_COL);   //dong alter 20080902
            //20080904 ccy modify
#if (_PCB_TEST == _PCB_TYPE)
            usItemStart = _WIN_TITLE_XS-4 + stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;
#else
            usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
#endif
            COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_3, _CP_0, GET_LANGUAGE(),pMenuItem->pString);
            //COsdCoreDrawPageTitleText(pMenuItem->pString);
            if (!ucOsdlayerExit)// add by xyw to modified Exit Sub Menu blink 071022 ;
            {
                //CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_3,_CP_0,GET_LANGUAGE());//070910 xyw
                //konsta color osd
                CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_3,_CP_0,GET_LANGUAGE());
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL, 1, 2, _CP_3, _CP_0);
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10, 1, 2, _CP_3, _CP_0);
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10+11, 1, 2, _CP_3, _CP_0);
            }
            //ucOsdlayerExit=0;// add by xyw to modified Exit Sub Menu blink 071022 ;
        }

#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
        if (ucLayerIndex==0)
        {
            if (GET_LANGUAGE()==_CHINESE_S)
                COsdDispLoadChineseFont(ucMain);
        }
#endif
#endif

        COsdCoreShowSubMenuItem(&stSubmenuInfo);

    }

    if ((stLayerStack[ucLayerIndex].ucSubMenu != ucSub) || bRefresh)
    {
        if (stLayerStack[ucLayerIndex].ucSubMenu != 0) //
        {
            stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
            stSubmenuInfo.stItemPosition = stMoveSubItemPos;
            stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
            //COsdSubMenuItemChangeColor(&stSubmenuInfo, stLayerStack[ucLayerIndex].ucSubMenu, 0);

            ucRowOffset = stLayerStack[ucLayerIndex].ucSubMenu - 1;//20070512
            pItemObject = &(pMenuItem->pItemList[ucRowOffset]);//20070512
        }

        //CTimerWaitForEvent(_EVENT_DEN_STOP);

        stLayerStack[ucLayerIndex].ucSubMenu = ucSub;

        if (stLayerStack[ucLayerIndex].ucSubMenu == 0)
        {
            /*
            			//close target line window
            			COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);

            ///////////////////////////////
            #if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
            #if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
            			//clr arrow of content
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            			else
            			{
            				extern void COsdCtrlSetSingalSourceMainMenu(void);
            				if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
            				{
            					//DebugPrintf("\nno select, clr arrow...\n", 0);
            					COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(1-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
            					COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(2-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
            				}
            				else
            					COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
            			}
            			//clr value
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            			else
            				COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);
            			if (!GET_FACTORYSTATUS())
            				//CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
            				CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw

            #else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

            			//clr arrow of content
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            			else
            				COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
            			//clr value
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            			else
            				COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);

            			if (!GET_FACTORYSTATUS())
            				//CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
            				CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
            #endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
            #else	//#if _PCB_TYPE==_PCB_PT2662F1A
            			//clr arrow of content
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            			else
            				COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
            			//clr value
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            			else
            				COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);

            			if (!GET_FACTORYSTATUS())
            				//CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
            				CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
            #endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            ///////////////////////////////
            */
            if (!GET_FACTORYSTATUS())
            {
                //konsta color osd
                CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_3,_CP_0,GET_LANGUAGE());
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL, 1, 2, _CP_3, _CP_0);
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10, 1, 2, _CP_3, _CP_0);
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10+11, 1, 2, _CP_3, _CP_0);
            }
        }
        else
        {
            /*
            			stSubWindowStyle = *((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow);
            			stMoveSubItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->stSubItemMoveWindow->stPosition;

            			CTimerWaitForEvent(_EVENT_DEN_STOP);

            #if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
            #if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
            			//clr arrow of content
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            			else
            			{
            				if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
            				{
            					COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(1-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
            					COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(2-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
            				}
            				else
            					COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
            			}

            			//show target item arrow
            			if (GET_FACTORYSTATUS())
            			{
            				COsdFxHLine(ROW(_ARROW_F_ROW+ucSub-1), _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
            				COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            			}
            			else
            			{
            				if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
            				{
            					COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
            					COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            				}
            				else
            				{
            					COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
            					COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            				}
            			}

            #else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            			else
            				COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

            			//show target item arrow
            			if (GET_FACTORYSTATUS())
            			{
            				COsdFxHLine(ROW(_ARROW_F_ROW+ucSub-1), _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
            				COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            			}
            			else
            			{
            				COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
            				COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            			}

            #endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

            #else	//#if _PCB_TYPE==_PCB_PT2662F1A

            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            			else
            				COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

            			//show target item arrow
            			if (GET_FACTORYSTATUS())
            			{
            				COsdFxHLine(ROW(_ARROW_F_ROW+ucSub-1), _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
            				COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            			}
            			else
            			{
            				COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
            				COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            			}
            #endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            */
            if (!GET_FACTORYSTATUS())
            {
                //CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,1,_CP_3,_CP_0,GET_LANGUAGE());//070910 xyw
                //konsta color osd
                CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,1,_CP_3,_CP_0,GET_LANGUAGE());
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL, 1, 2, _CP_3, _CP_0);
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10, 1, 2, _CP_3, _CP_0);
                //COsdFxChange1bitColor(_NOTE_U_ROW, _NOTE_U_COL+10+11, 1, 2, _CP_3, _CP_0);
            }
            /*
            			stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
            			stSubmenuInfo.stItemPosition = stMoveSubItemPos;
            			stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
            			//COsdSubMenuItemChangeColor(&stSubmenuInfo, stLayerStack[ucLayerIndex].ucSubMenu, 1);
            			pItemObject = &(pMenuItem->pItemList[ucSub-1]);//20070512

            			if(pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE||pItemObject->ucType == _BRACKET1_TYPE )
                               	{
            				if (GET_FACTORYSTATUS())
            					COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);
            				else
            					COsdFxDrawWindow(&stSubWindowStyle);
            			}
            #if _TIMER_PAGE_SUPPORT
            			else if(pItemObject->ucType == _BRACKET_TIMER_TYPE)
                               	{
            				if (GET_FACTORYSTATUS())
            					COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);
            				else
            					COsdFxDrawWindow(&stSubWindowStyle);
            			}
            #endif	//#if _TIMER_PAGE_SUPPORT
            			else
            			{
            				COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);
            			}
            			if (GET_FACTORYSTATUS())
            				COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            			else
            				COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);

            			if (GET_FACTORYSTATUS())
            			{
            				COsdCoreUpdateItem(pItemObject,_VALUE_F_ROW,_MID_COL_POSITION,0,1);//-------------
            			}
            			else
            			{
            				COsdCoreUpdateItem(pItemObject,_VALUE_U_ROW,_MID_COL_POSITION,0,1);//-------------
            			}
            */
            //x.hu20070916
            //update color temp in the page realtime while UP/DOWN
            if (pMenuItem->pString == tOsdColorTempStr)
            {
                SET_COLOR_TEMP_TYPE(ucSub-1);
                CEepromLoadColorTempData();
                CAdjustContrast();
                //czl 080118
                CEepromSaveColorTempModeData();
            }

        }
    }
}

#if 0
void COsdResetMenu()
{
    UINT8 tmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
    UINT8 tmpSub = stLayerStack[ucLayerIndex].ucSubMenu;
    stLayerStack[ucLayerIndex].ucMainMenu = 0;
    stLayerStack[ucLayerIndex].ucSubMenu = 0;
    //COsdFxDisableOsd();
//	DebugPrintf("Reset Menu: Osd Disable %c\n", '!');

    //COsdCoreInitMainWindow();
    //COsdMenuMoveProc(tmpMain, tmpSub, 1);
    //COsdFxEnableOsd();
//	DebugPrintf("Reset Menu: Osd Enable %c\n", '!');
}
#endif

/*
void COsdResetSignalMenu()
{
	UINT8 ucTmpLayerIndex = ucLayerIndex;
	UINT8 ucTmpState = ucOsdState;
	UINT8 tmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
	UINT8 tmpSub = stLayerStack[ucLayerIndex].ucSubMenu;
	UINT8 tmpRootMain = stLayerStack[0].ucMainMenu;
	UINT8 tmpRootSub = stLayerStack[0].ucSubMenu;
	COsdCoreInitialze();
	if(ucTmpLayerIndex == 0){
		COsdCoreInitMainWindow();
		COsdMenuMoveProc(tmpMain, tmpSub, 1);
 		COsdCoreSetState(ucTmpState);
 	} else {
 		ucLayerIndex = ucTmpLayerIndex;
		stLayerStack[0].ucMainMenu = tmpRootMain;
		stLayerStack[0].ucSubMenu = tmpRootSub;
 		COsdCoreSetState(ucTmpState);
		COsdFxDisableOsd();
//		DebugPrintf("Reset Signal Menu: Osd Disable %c\n", '!');
		stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
//		COsdFxEnableOsd();
	}
//	DebugPrintf("Reset Signal Menu: Osd Enable %c\n", '!');

}

*/

#if _CUSTOMER_HPC
void COsdRedrawSignalMenu()
{
    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);
}
#endif	//#if _CUSTOMER_HPC

#if 0
static UINT16 COsdCoreCalItemBnkLength(MenuItemSet* pMenuItemSet, UINT8 ItemOrder)
{
    UINT16 xdata  usBnkLength;
    UINT8 ucCount;
    MenuItem * pMenuItem;

    usBnkLength = pMenuItemSet->usPreBnkLength;
    for (ucCount = 0; ucCount < ItemOrder; ucCount++){
        pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[ucCount];
        usBnkLength += pMenuItem->usItemWidth;
    }
    return usBnkLength;
}
#endif

static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucRow, UINT8 ucCol, UINT16 usItemWidth, bit bActive)
{
    //ItemSlider1* pItemSlider1;
    ItemBracket * pItemBracket;
    ItemBracket1 * pItemBracket1;
    ItemBracket3 * pItemBracket3;
    //ItemSelectDialog * pItemSelectDialog;
    //UINT16 xdata usMidBkLength;
    UINT8 ucValue;
    UINT8 ucForegroundColor;
    UINT8 ucCount;
    UINT8 *pStringArray;
    UINT8 ucTypeOfItemObject;
    ItemSlider xdata stItemSlider;
    ItemSlider1 xdata stItemSlider1;
    ItemSlider2 xdata stItemSlider2;
    //dong add 20081007
    UINT8 ucSelectLanguage;
    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage=GET_LANGUAGE();
    //dong add 20081007
    usItemWidth=usItemWidth;

    ucTypeOfItemObject = pItemObject->ucType;

    if (bActive)
        ucForegroundColor = GET_CP_ITEM_ACTIVE();
    else
        ucForegroundColor = GET_CP_ITEM_UNACTIVE();

    if (GET_PAGE_MASK())
        ucForegroundColor = GET_CP_MASK_ITEM();


    if (pItemObject->ucType == _SLIDER_TYPE)
    {
        //ItemSlider xdata stItemSlider;
        stItemSlider = *((ItemSlider*)pItemObject->pStruct);
        if (GET_EXT_ADJUST_WIN())
            COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, &stItemSlider,bActive);
        else
            COsdFxFullSlider(ucRow, ucCol, 0, &stItemSlider,bActive);
    }
    else if (pItemObject->ucType == _SLIDER1_TYPE)
    {
        //ItemSlider1 xdata stItemSlider1;
        stItemSlider1 = *((ItemSlider1*)pItemObject->pStruct);

        COsdFxFullSlider1(ucRow, ucCol, &stItemSlider1, bActive);
    }
    else if (pItemObject->ucType == _SLIDER2_TYPE)
    {
        //ItemSlider2 xdata stItemSlider2;
        stItemSlider2 = *((ItemSlider2*)pItemObject->pStruct);

        COsdFxFullSlider2(ucRow, ucCol, &stItemSlider2, 0);
    }
    else if (pItemObject->ucType == _SLIDER3_TYPE)
    {
        COsdFxHLine(ucRow, ucCol, 1, ucForegroundColor<<4, _WRITE_BYTE2);
        COsdFxHLine(ucRow, ucCol, 1, _ARROW_R_, _WRITE_BYTE1);
    }
    else if (pItemObject->ucType == _BRACKET_TYPE ||
             pItemObject->ucType == _BRACKET1_TYPE||
             pItemObject->ucType == _BRACKET3_TYPE ||
             pItemObject->ucType == _BRACKET_TIMER_TYPE)
    {
        //usMidBkLength = (usItemWidth - 10 * 16);
        if (pItemObject->ucType == _BRACKET_TYPE)
        {
            pItemBracket = (ItemBracket*)pItemObject->pStruct;
            ucValue = (*pItemBracket->pGetFunction)();
            pStringArray = ((UINT8 *[])pItemBracket->pLableString)[ucValue];
            //caculate total chars of string
            ucCount = COsdFxCalTextCount( (pItemBracket->ucControl&_BIT0)?(/*GET_LANGUAGE()*/ucSelectLanguage):(0), pStringArray);
        }
        else if (pItemObject->ucType == _BRACKET1_TYPE)
        {
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pStringArray = pItemBracket1->pGetStringFunction();
            //caculate total chars of string
            ucCount = COsdFxCalTextCount( (pItemBracket1->ucControl&_BIT0)?(/*GET_LANGUAGE()*/ucSelectLanguage):(0), pStringArray);//ucCount = COsdFxCalTextCount(0, pStringArray);
        }
        else if (pItemObject->ucType == _BRACKET3_TYPE)
        {
            pItemBracket3 = (ItemBracket3*)pItemObject->pStruct;
            pStringArray = pItemBracket3->pGetStringFunction();
            //caculate total chars of string
            ucCount = COsdFxCalTextCount(0, pStringArray);
        }
        else if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
        {
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pStringArray = pItemBracket1->pGetStringFunction();
            //caculate total chars of string
            ucCount = COsdFxCalTextCount(0, pStringArray);
        }

        if (pItemObject->ucType == _BRACKET_TYPE)
        {
            COsdFxLoadBracketText(ucRow, ucCol, 0, ucCount, ucForegroundColor, _CP_BG, (pItemBracket->ucControl&_BIT0)?(/*GET_LANGUAGE()*/ucSelectLanguage):(0), pStringArray);
        }
        else if (pItemObject->ucType == _BRACKET1_TYPE)
        {
            COsdFxLoadBracketText(ucRow, ucCol, 0, ucCount, ucForegroundColor, _CP_BG, /*GET_LANGUAGE()*/(pItemBracket1->ucControl&_BIT0)?(ucSelectLanguage):(0), pStringArray);
        }
        else if (pItemObject->ucType == _BRACKET3_TYPE)
        {
            COsdFxLoadBracketTextNoBracket(ucRow, ucCol, 0, ucCount, ucForegroundColor, _CP_BG, 0, pStringArray);
        }
        else	//if (pItemObject->ucType==_BRACKET_TIMER_TYPE)
            if (GET_OSD_TIMEPAGE())
            {
                ucCol = _ITEMVAL_START_COL_TIMER;
                switch (ucExtendMenuCol)
                {
                case 1:
                    COsdFxHLine(ucRow, ucCol+0+(ucExtendMenuCol-1)*5, 1, *(pStringArray+0), _WRITE_BYTE1);
                    COsdFxHLine(ucRow, ucCol+1+(ucExtendMenuCol-1)*5, 1, *(pStringArray+1), _WRITE_BYTE1);
                    COsdFxHLine(ucRow, ucCol+(ucExtendMenuCol-1)*5, 2, GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
                    break;
                case 2:
                    COsdFxHLine(ucRow, ucCol+0+(ucExtendMenuCol-1)*5, 1, *(pStringArray+5), _WRITE_BYTE1);
                    COsdFxHLine(ucRow, ucCol+1+(ucExtendMenuCol-1)*5, 1, *(pStringArray+6), _WRITE_BYTE1);
                    COsdFxHLine(ucRow, ucCol+(ucExtendMenuCol-1)*5, 2, GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
                    break;
                default:
                    COsdFxHLine(ucRow, ucCol, 7, GET_CP_ITEM_UNACTIVE()<<4, _WRITE_BYTE2);
                    COsdFxLoadBracketTextNoBracket(ucRow, ucCol, 0, ucCount, ucForegroundColor, _CP_BG, 0, pStringArray);
                    break;
                }

            }
    }
    else if (pItemObject->ucType == _MENU_TYPE)
    {
        //if (GET_VGA_PICTMISC_MASK((ucRow-_ITEMSTR_START_ROW)/2))
        //{
        //ucForegroundColor = GET_CP_MASK_ITEM();
        //}

        COsdFxHLine(ucRow, ucCol, 1, ucForegroundColor<<4, _WRITE_BYTE2);
        COsdFxHLine(ucRow, ucCol, 1, _ARROW_R_, _WRITE_BYTE1);
    }
    else if (pItemObject->ucType == _IMMEDIATE_TYPE)
    {
        COsdFxHLine(ucRow, ucCol, 1, ucForegroundColor<<4, _WRITE_BYTE2);
        COsdFxHLine(ucRow, ucCol, 1, _ARROW_R_, _WRITE_BYTE1);
    }
}

#if 0
static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucMidRow, UINT8 ucMidCol, UINT16 ucBkLength ,bit bActive)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    ItemSlider xdata stItemSlider;
    ItemSlider1* pItemSlider1;
    ItemBracket * pItemBracket;
    ItemBracket1 * pItemBracket1;
    ItemBracket2 * pItemBracket2;
    ItemSelectDialog * pItemSelectDialog;
    UINT16 xdata usMidColStart;
    UINT8	ucValue, ucForegroudColor,ucBKCount/*,ucBlank*/;
    UINT8 *pStringArray;
    UINT8 uclanguagecontrol; //add by xyw 070929

    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage = GET_LANGUAGE();

    ucBKCount = 0;

    if (bActive)
        ucForegroudColor = pItemObject->ucActiveColor;
    else
        ucForegroudColor = pItemObject->ucUnActiveColor;


    if ((pItemObject->ucType == _SLIDER_TYPE) || (pItemObject->ucType == _SLIDER1_TYPE))
    {
        if (pItemObject->ucType == _SLIDER_TYPE)
            stItemSlider = *((ItemSlider*)pItemObject->pStruct);
        else
        {
            pItemSlider1 = (ItemSlider1*)pItemObject->pStruct;
            stItemSlider = pItemSlider1->stItemSlider;
        }

        ucValue = (&stItemSlider)->pGetFunction();

        usMidColStart=ucMidCol-(&stItemSlider)->ucLength/2-1;
        if (ucBkLength)
            ucBKCount=COsdFxLoadBlankCmd(ucMidRow, usMidColStart-2, ucBkLength-1);// 1 : Because  show nember excessive one pixel, so decrease one pixel.//20070605

        if (bActive)
        {
            if (pItemObject->ucType == _SLIDER_TYPE)
            {
                COsdDispFullSlider(ucMidRow, COL(4), LENGTH(16),_SHOW_PERCENT,&stItemSlider);
            }
            else
            {
                COsdFxFullSlider1(ucMidRow, usMidColStart+ucBKCount, 0, &stItemSlider, pItemSlider1->pGetMinFunction(), pItemSlider1->pGetMaxFunction(), pItemSlider1->ucMid_value);
            }
        }
        else
            COsdFxShowNumber(ucMidRow, ucMidCol +ucBKCount, ucValue, 0x23, ucForegroudColor);

    }
    else if ((pItemObject->ucType == _IMMEDIATE_TYPE)||(pItemObject->ucType == _MENU_TYPE))
    {
        if (GET_FACTORYSTATUS())
            COsdFxClearText(ucMidRow, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
        else
            COsdFxClearText(ucMidRow, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);
    }

#if _TIMER_PAGE_SUPPORT
    else if ((pItemObject->ucType == _BRACKET_TYPE) ||(pItemObject->ucType == _BRACKET2_TYPE)|| (pItemObject->ucType == _SELECTDIALOG_TYPE) ||(pItemObject->ucType == _BRACKET1_TYPE)||(pItemObject->ucType == _BRACKET_TIMER_TYPE))
#else	//#if _TIMER_PAGE_SUPPORT
    else if ((pItemObject->ucType == _BRACKET_TYPE) ||(pItemObject->ucType == _BRACKET2_TYPE)|| (pItemObject->ucType == _SELECTDIALOG_TYPE) ||(pItemObject->ucType == _BRACKET1_TYPE))
#endif	//#if _TIMER_PAGE_SUPPORT
    {
        if (pItemObject->ucType == _SELECTDIALOG_TYPE)
        {
            pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;
            ucValue = (*pItemSelectDialog->pGetFunction)();
            pItemObject = &(pItemSelectDialog->pItemList[ucValue]);
            pStringArray = pItemObject->pString;
        }
        else if (pItemObject->ucType == _BRACKET_TYPE)
        {
            pItemBracket = (ItemBracket*)pItemObject->pStruct;
            ucValue = (*pItemBracket->pGetFunction)();
            uclanguagecontrol=pItemBracket->ucControl;
            pStringArray = ((UINT8 *[])pItemBracket->pLableString)[ucValue];

            if (!uclanguagecontrol || GET_FACTORYSTATUS())
                ucSelectLanguage = 0;

            usItemStart = GET_WIN_ITEMVAL_PREBLANK(ucSelectLanguage, pStringArray);
            if (bActive)
                COsdFxLoadText(ucMidRow, 0 , usItemStart, _CP_COLOR06, _CP_BLACK, ucSelectLanguage, pStringArray);
            else
                COsdFxLoadText(ucMidRow, 0 , usItemStart, ucForegroudColor, _CP_BLACK, ucSelectLanguage, pStringArray);
            return;
        }
#if _TIMER_PAGE_SUPPORT
        else if (pItemObject->ucType == _BRACKET1_TYPE || pItemObject->ucType == _BRACKET_TIMER_TYPE)
#else	//#if _TIMER_PAGE_SUPPORT
        else if (pItemObject->ucType == _BRACKET1_TYPE)
#endif	//#if _TIMER_PAGE_SUPPORT
        {
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pStringArray = pItemBracket1->pGetStringFunction();
            uclanguagecontrol= pItemBracket1->ucControl;
        }
        else if (pItemObject->ucType == _BRACKET2_TYPE)
        {
            pItemBracket2 = (ItemBracket2*)pItemObject->pStruct;
            ucValue = (*pItemBracket2->pGetFunction)();
            uclanguagecontrol= pItemBracket2->ucControl;
            //DebugPrintf("zhyftest tv finetune bracket2\n",1);
            if (pItemBracket2->bActive==1){
                return;
            }
            pStringArray = ((UINT8 *[])pItemBracket2->pLableString)[ucValue];
        }

        if (!uclanguagecontrol || GET_FACTORYSTATUS())
            ucSelectLanguage = 0;
        //usMidColStart=ucMidCol;
        usItemStart = GET_WIN_ITEMVAL_PREBLANK(ucSelectLanguage, pStringArray);
        //DebugPrintf("\nucSelectLanguage=%d\n", ucSelectLanguage);
        if (bActive)
            //COsdFxLoadText(ucMidRow, usMidColStart, ucBkLength, _CP_COLOR06, _CP_BLACK, 0, pStringArray);
            COsdFxLoadText(ucMidRow, 0 , usItemStart, _CP_COLOR06, _CP_BLACK, ucSelectLanguage, pStringArray);
        else
            //COsdFxLoadText(ucMidRow, usMidColStart , ucBkLength, ucForegroudColor, _CP_BLACK, 0, pStringArray);
            COsdFxLoadText(ucMidRow, 0 , usItemStart, ucForegroudColor, _CP_BLACK, ucSelectLanguage, pStringArray);
    }

}
#endif
static void COsdCoreFreshItem(BIT bActive)
{
    MenuItem * pMenuItem;
    ItemObject *	pItemObject;
    UINT8 ucOffset;
    UINT8 ucMoveByRow;
    pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);

    if (GET_OSD_TIMEPAGE())
        ucOffset = _ITEMVAL_START_COL_TIMER;
    else
    {
        /*if (pItemObject->ucType==_BRACKET_TYPE||pItemObject->ucType==_BRACKET1_TYPE)
        	ucOffset = _ITEMVAL_START_COL_BRACKET;
        else
        	ucOffset = _ITEMVAL_START_COL;*/
        switch (pItemObject->ucType)
        {
        case _BRACKET_TYPE:
        case _BRACKET1_TYPE:
        case _IMMEDIATE_TYPE:
        case _SLIDER3_TYPE:
        case _MENU_TYPE:
            if (GET_FACTORYSTATUS())
                ucOffset = 16;
            else
                ucOffset = _ITEMVAL_START_COL_BRACKET;
            break;
        default:
            if (GET_FACTORYSTATUS())
                ucOffset = 16;
            else
                ucOffset = _ITEMVAL_START_COL;
            break;
        }
    }
    if (GET_FACTORYSTATUS())
        ucMoveByRow = 1;
    else
        ucMoveByRow = 2;
    COsdCoreUpdateItem(pItemObject, pMenuItem->ucStartRow + (stLayerStack[ucLayerIndex].ucSubMenu-1)*ucMoveByRow, ucOffset, 0, bActive);

}

static UINT16 COsdCtrlCalcDetRange(UINT16 ucValue, UINT16 ucMax, UINT16 ucMin, UINT8 message, BIT bTurboFlag)
{
    UINT8 Symbol=0;

    //Symbol:1="+1",2="-1"
    //Symbol:3="+2",4="-2"
    if ((message == _REPEAT_KEY_MESSAGE) && bTurboFlag) {
        if ( (ucOsdPreMessage == _LEFT_KEY_MESSAGE)||(ucOsdPreMessage == _VOLUME_DEC_MESSAGE) ) // weixg 20070523
            Symbol= 4;
        else if ( (ucOsdPreMessage == _RIGHT_KEY_MESSAGE)||(ucOsdPreMessage == _VOLUME_INC_MESSAGE) )
            Symbol= 3;
    } else {
        if (message == _LEFT_KEY_MESSAGE)
            Symbol= 2;
        else	 if (message == _RIGHT_KEY_MESSAGE)
            Symbol= 1;
    }

    switch (Symbol)
    {
    case 1:
        if (ucValue >= ucMax)
            return ucMax;
        else {
            ucValue ++;
            return ucValue;
        }
    case 2:
        if (ucValue <= ucMin)
            return ucMin;
        else {
            ucValue --;
            return ucValue;
        }
    case 3:
        if (ucValue >= ucMax/*-1*/)
            return ucMax;
        else {
            ucValue =ucValue+1/*2*/;
            return ucValue;
        }
    case 4:
        if (ucValue <= ucMin/*+1*/)
            return ucMin;
        else {
            ucValue=ucValue-1/*2*/;
            return ucValue;
        }

    default :
        return ucValue;	// avoid repeat key error,hill
    }
}

static void COsdFxSliderDirectionProc(ItemSlider * pItemSlider, UINT8 message)
{

    UINT16 ucReturnRes, ucCurRes;
    //UINT8 temp;

    //DebugPrintf("\n >>>1 OsdMessage = %d ",message);

    //temp = message;

    ucCurRes = pItemSlider->pGetFunction();

    //	DebugPrintf("\n >>>2 OsdMessage = %d ",message);

    //20071018, "tOsdClockSet->COsdCtrlGetClock()", message=1, I don't know why this happens.
    //message = temp;

    //	DebugPrintf("\n >>>3 OsdMessage = %d ",message);

    //	DebugPrintf("\n Pos=%d", ucCurRes);	//62
    //DebugPrintf("\n max=%d", pItemSlider->ucMax);
    //DebugPrintf("\n min=%d", pItemSlider->ucMin);
    //	DebugPrintf("\n message=%d", message);//25

    ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, pItemSlider->ucMax, pItemSlider->ucMin, message, 1);
    //	DebugPrintf("\n Pos1=%d", ucReturnRes);//63
    // Check it be same between previous and now
    if (ucCurRes == ucReturnRes)
        return;
    //usAdcClockResult = ucReturnRes;
    pItemSlider->pHandlerFunction((UINT8)ucReturnRes);
    //DebugPrintf("\n Pos2=%d", ucReturnRes);
    //ucReturnRes=usAdcClockResult;
    //DebugPrintf("\n Pos3=%d", ucReturnRes);

    //if (GET_EXT_ADJUST_WIN())
    //{

    //COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, pItemSlider);
    //}
    //else
    //{
    COsdCoreFreshItem(1);
    //}

}
static void COsdFxSlider2DirectionProc(ItemSlider2 * pItemSlider2, UINT8 message)
{
    ItemSlider2 xdata stItemSlider2;
    stItemSlider2 = *pItemSlider2;
    //pItemSlider2->pHandlerFunction(message);

    //COsdFxFullSlider2(_ITEMSTR_START_ROW+(stLayerStack[ucLayerIndex].ucSubMenu-1)*2, _ITEMVAL_START_COL, pItemSlider2, 1);
    stItemSlider2.pHandlerFunction(message);
    COsdFxFullSlider2(_ITEMSTR_START_ROW+(stLayerStack[ucLayerIndex].ucSubMenu-1)*2, _ITEMVAL_START_COL, &stItemSlider2, 1);
}

/*
static void COsdFxSlider1DirectionProc(ItemSlider1 * pItemSlider1, UINT8 message)
{
	UINT16	xdata	ucReturnRes, ucCurRes;
	UINT16  xdata usMax, usMin;

	usMax = pItemSlider1->pGetMaxFunction();
	usMin = pItemSlider1->pGetMinFunction();
	ucCurRes = pItemSlider1->stItemSlider.pGetFunction();

	ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, usMax, usMin, message, 1);

	// Check it be same between previous and now
	if(ucCurRes == ucReturnRes)
		return;

	pItemSlider1->stItemSlider.pHandlerFunction(ucReturnRes);

	//ucCurRes = pItemSlider1->stItemSlider.pGetFunction();
	COsdCoreFreshItem(1);
    //pData[0] = 50 + ucVStartBias; //maximum value
    //pData[1] = 50 - stModeInfo.IVStartPos;
}
 */
/*
static void COsdCoreShowSourceEventProc(void)
{
	ucOsdState = _IDLE_STATE;
	COsdCoreIdleEventProc();
}
*/
static void COsdChangeSourceProc(void)
{


#if(_Change_SOURCE_Type == Change_SOURCE_Type1)

    UINT8 ucInputSrc;
    ucInputSrc = stSystemData.InputSource;
    ucInputSrc = (ucInputSrc + 1) % _INPUT_PORT_MAX;

    // If change source, cancel the no-signal event,
    // and if no signal message on screen, close it.
    CTimerCancelTimerEvent(COsdNoSignalEvent);
    COsdCoreCloseNoSignalOsd();

    COsdCtrlSetSingalSource(ucInputSrc);
    COsdCoreInitialze();
    CLR_FIRST_ENTRY_SHOWSOURCE();
    COsdFxShowSource();

#elif(_Change_SOURCE_Type == Change_SOURCE_Type2)

#if(SKYWORTH_OSD== _ENABLE)
    COsdCoreSourceSelectEventProc();
#else
    //20080917 ccy cancel
    return;
    /*
    if(ucOsdMessage != _SOURCE_KEY_MESSAGE)
    return;

    COsdFxDisableOsd();


    ucSourceTemp = (ucSourceTemp + 1) % _INPUT_PORT_MAX;

    //COsdFxChangeSourceShow();

    CTimerCancelTimerEvent(COsdChangeSourceEvent);
    CTimerCancelTimerEvent(COsdFxExitEvent);
    CTimerReactiveTimerEvent(SEC(2), COsdChangeSourceEvent);
    */
#endif

#elif(_Change_SOURCE_Type == Change_SOURCE_Type3)
    COsdCoreSourceSelectEventProc();

#endif
    //DebugPrintf("\n ucSourceTemp  %x",ucSourceTemp);
}

#if((_Change_SOURCE_Type == Change_SOURCE_Type2)&&(SKYWORTH_OSD == _DISABLE ))
static void COsdFxChangeSourceShow(void)
{
    UINT8 index;




    //20080925 ccy modify
#if (_PCB_TYPE == _PCB_TEST)
    COsdFxMapSetting(_OSD_MAP5);
    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);
    index = ucSourceTemp;

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdSignalItemStrSet[index]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, _CP_8, _CP_BLACK, GET_LANGUAGE(),tOsdSignalItemStrSet[index]);

#else
    COsdFxMapSetting(_OSD_MAP2);

    index = ucSourceTemp;
#if(_CHINESE_SIMPlIFIED_CHARACTER == _TRUE)
    COsdFxLoadText(0, 0, (_DISP_WID - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdSignalItemStrSet[index]) * 2)) / 2 - 39, _CP_GREEN, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
#else
    COsdFxLoadText(0, 0, (_DISP_WID - (COsdFxCalTextWidth(0, tOsdSignalItemStrSet[index]) * 2)) / 2 - 39, _CP_GREEN, _CP_BLACK, 0, tOsdSignalItemStrSet[index]);
#endif
#endif
    COsdFxEnableOsd();
}
#endif

/*
void COsdFxChangeWindowColor(BYTE ucWindowColor, BYTE *pStyle)
{
    pData[0]    = 0x41;
    pData[1]    = ((*(pStyle)) * 4) + (3);
    CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

    pData[0]    = ((*(pStyle + ((3) + 1) + 1)) & 0xf0) | (ucWindowColor & 0x0f);
    CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
}
*/

/*
#define ZPAL_I          	0x70
#define ZPAL_M          	0x71
#define ZPAL_N          	0x72
#define ZPAL_60         	0x73
#define ZNTSC          		0x74
#define ZNTSC_443   		0x75
#define ZNTSC_50			0x76
#define ZSECAM          	0x77
*/
code unsigned char tOsdVideoModeStr[]=
{
    _P_,_A_,_L_,_END_,
    _P_,_A_,_L_,_END_,//_P_,_A_,_L_,0x00,_M_,_END_,
    _P_,_A_,_L_,_END_,//_P_,_A_,_L_,0x00,_N_,_END_,
    _P_,_A_,_L_,_END_,//_P_,_A_,_L_,_6_,_0_,_END_,
    _N_,_T_,_S_,_C_,_END_,
    _N_,_T_,_S_,_C_,0x00,_4_,_DOT_,_4_,_3_,_END_,
    _N_,_T_,_S_,_C_,0x00,_5_,_0_,_END_,
    _S_,_E_,_C_,_A_,_M_,_END_,
};
#if(!_TYPEOF_OSD_KONSTA)
code unsigned char tOsdTvForceAutoStr[]=
{
    _A_,_U_,_T_,_O_,_END_,
    _ZI4_L_,_ZI4_R_,0x00,_DONG4_L_,_DONG4_R_,_END_,
};
#endif
#if (1)
/*(_TUNER_TYPE==_JS6H1_111 ||_TUNER_TYPE==_GDC8F1D_QF106L ||\
	_TUNER_TYPE==_GDC8F2E_106L ||\
	_TUNER_TYPE==_ET5C511_TDA9886ST ||\
	_TUNER_TYPE==_ET6T1E_TDA9886ST||_TUNER_TYPE == _GDC8F2D_106L)
*/
UINT8 code tOsdAutoStr1[] =
{
    0x00,0x00,_A_,_U_,_T_,_O_,0x00,0x00,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    0x00,_ZI4_L_,_ZI4_R_,_DONG4_L_,_DONG4_R_,0x00,0x00,_END_,
#else
    0x00,_ZI_1_,0x00,_DONG_,0x00,_END_,
#endif
#endif
};

UINT8 code tOsdBGStr1[]=
{
    _P_,_A_,_L_,_SUBT_,_B_,_G_,0x00,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
UINT8 code tOsdIStr1[]=
{
    0x00,_P_,_A_,_L_,_SUBT_,_I_,0x00,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
UINT8 code tOsdDKStr1[]=
{
    _P_,_A_,_L_,_SUBT_,_D_,_K_,0x00,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
UINT8 code tOsdMStr1[]=
{
    _N_,_T_,_S_,_C_,_SUBT_,_M_,0x00,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
#if 1//_CUSTOMER_JPE
UINT8 code tOsdSecamBGStr1[]=
{
    _S_,_E_,_C_,_A_,_M_,_SUBT_,_B_,_G_,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
UINT8 code tOsdSecamDKStr1[]=
{
    _S_,_E_,_C_,_A_,_M_,_SUBT_,_D_,_K_,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
UINT8 code tOsdSecamLStr1[]=
{
    _S_,_E_,_C_,_A_,_M_,_SUBT_,_L_,0x00,_END_,
#if _LANGUAGE_GERMAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FRENCH
    _THE_SAME_,
#endif
#if _LANGUAGE_SPANISH
    _THE_SAME_,
#endif
#if _LANGUAGE_ITALIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_FLEMISH
    _THE_SAME_,
#endif
#if _LANGUAGE_PORTUGUESE
    _THE_SAME_,
#endif
#if _LANGUAGE_RUSSIAN
    _THE_SAME_,
#endif
#if _LANGUAGE_CHINESE_S
    _THE_SAME_,
#endif
};
#endif
UINT8* code tOsdAudioTypeSet1[]=
{
#if _PCB_TYPE == _PCB_PT2662C1B

    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    //tOsdMStr1,
    tOsdAutoStr1,
#elif (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

#if _CUSTOMER_CGT
    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    tOsdSecamDKStr1,
    tOsdSecamBGStr1,
    //tOsdSecamLStr1,
    tOsdAutoStr1,
#else	//#if _CUSTOMER_CGT
    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    //tOsdMStr1,
    tOsdAutoStr1,
#endif	//#if _CUSTOMER_CGT

#elif (_PCB_TYPE == _PCB_PT2662B1C && _CUSTOMER_CGT==_ON)

#if _TUNER_TYPE==_GDC8F1D_QF106L
    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    tOsdSecamDKStr1,
    tOsdSecamBGStr1,
    //tOsdSecamLStr1,
    tOsdAutoStr1,
#else

    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    tOsdSecamDKStr1,
    tOsdSecamBGStr1,
    tOsdAutoStr1,

#endif

#else
    tOsdAutoStr1,
    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    //tOsdMStr1,


#endif
};
#endif	//#if (_TUNER_TYPE == _JS6H1_111||_TUNER_TYPE == _GDC8F1D_QF106L||_TUNER_TYPE == _GDC8F2E_106L)

void COsdFxShowSource(void)
{

#define index stSystemData.InputSource
    UINT8 xdata lines=1;
    UINT8* ptrSrc;
    UINT8 color;

#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
    bTimeoverHintOsdState = 1;
#endif
    //CLR_SHOW_NO_SIGNAL();
    CLR_SHOW_IS_NOSIGNAL_STATE();         //dong add 20081031
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);

    COsdCoreShowInfoSetPos(_OSD_MAP5);
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019
#endif
    //Display Window

//	CScalerLoadFont(FontTable_SC_MISC, _FONT_CHIPG_ADDR, _FONT_CHIPG_NUM, _COMPRESS_FONT);

    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT)
    {

        ptrSrc = COsdCoreGetNumberStr2(stTvInfo.CurChn);

        usItemStart = GET_WIN_INFO_PREBLANK(0, ptrSrc);
        //
#if _CUSTOMER_CGT
        if (CTvGetChStatus(stTvInfo.CurChn))
        {
            //enable
            //if (GET_TV_AFC_ENABLE())
            color=1;//_CP_LIGHTBLUE;//GET_CP_HINT_NORMAL();	//no skip
            //else
            //	color=GET_CP_HINT_FINETUNE();	//finetune
        }
        else
            //disable
            color=2;//GET_CP_HINT_UNNORMAL();	//skip
        //20070328
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0,ptrSrc);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL, usItemStart, color, _CP_BLACK, 0,ptrSrc);

#else	//#if _CUSTOMER_JPE

        if (CTvGetChStatus(stTvInfo.CurChn))
        {
            //if (GET_TV_AFC_ENABLE())
            color=_CP_LIGHTBLUE;//GET_CP_HINT_NORMAL();	//no skip
            //else
            //	color=GET_CP_HINT_FINETUNE();	//finetune
        }
        else
            color=_CP_LIGHTBLUE;//GET_CP_HINT_UNNORMAL();	//skip

#endif	//#if _CUSTOMER_JPE


        //20070328
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0,ptrSrc);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL, usItemStart, _CP_8, _CP_BLACK, 0,ptrSrc);

#if 1/*(_TUNER_TYPE==_JS6H1_111 ||_TUNER_TYPE==_GDC8F1D_QF106L ||\
	_TUNER_TYPE==_GDC8F2E_106L ||\
	_TUNER_TYPE==_ET5C511_TDA9886ST ||\
	_TUNER_TYPE==_ET6T1E_TDA9886ST	||_TUNER_TYPE == _GDC8F2D_106L)*/
        //20080904 ccy modify
#if (_PCB_TYPE == _PCB_TEST)
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdVideoSysSet[GET_TV_VIDEO_SYS()]);
        COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, _CP_8, _CP_BLACK, GET_LANGUAGE(),tOsdVideoSysSet[GET_TV_VIDEO_SYS()]);
        //20080912 ccy add
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdAudioSysSet[GET_CURR_AUDIO_SYS()]);
        COsdFxLoadText( _INFO_ROW+2,_INFO_COL,usItemStart,_CP_8,_CP_BLACK,GET_LANGUAGE(),tOsdAudioSysSet[GET_CURR_AUDIO_SYS()]);

#else
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdAudioTypeSet1[GET_CURR_AUDIO_SYS()]);

#if _CUSTOMER_CGT
        COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, color, _CP_BLACK, GET_LANGUAGE(),tOsdAudioTypeSet1[GET_CURR_AUDIO_SYS()]);
#else	//#if _CUSTOMER_JPE
//20080904 ccy modify

        COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(),tOsdAudioTypeSet1[GET_CURR_AUDIO_SYS()]);
#endif
#endif	//#if _CUSTOMER_JPE
        lines=2;
#else
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdTvForceAutoStr);
        COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(),tOsdTvForceAutoStr);
        lines=2;
#endif

    }
    else
    {
        //usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdSignalItemStrSet[index]);
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_8, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);

        if (GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)
        {
            if (stModeInfo.ModeCurr<_MAX_YPBPR_MODE && ucSyncProcessState == _ACTIVE_STATE)
            {
                usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdYPbPrTimingStrSet[stModeInfo.ModeCurr]);
                COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, _CP_8, _CP_BLACK, 0, tOsdYPbPrTimingStrSet[stModeInfo.ModeCurr]);
                lines=2;
            }
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8&&ucVideoProcessState==_ACTIVE_STATE)
        {
            usItemStart = GET_WIN_INFO_PREBLANK((ucMode_Curr_2610&0x07), tOsdVideoModeStr);
            COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, _CP_8, _CP_BLACK, (ucMode_Curr_2610&0x07), tOsdVideoModeStr);
            lines=2;
        }
    }
    //20080912 ccy cancel
    //CosdCoreShowInfoDrawWin(lines);

    COsdFxEnableOsd();

#undef index

}



//RTD2528R
static void COSdCoreShowVGAInfo(void)
{
#define index stSystemData.InputSource
//#define _HDMI_IHW_TOLERANCE	150
    UINT8 xdata lines;
    //UINT16 xdata usItemStart;
    UINT8 xdata ucModeStr[10];
    UINT8* ptrSrc;
    UINT8* ptrDes;
    UINT16 IHWidth_Tmp,IVHeight_Tmp;

#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
    bTimeoverHintOsdState = 1;
#endif

    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdCoreShowInfoSetPos(_OSD_MAP5);
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019
#endif
    COsdFxClearText(0, 0, 10, 30);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
    COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_8, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);

    if ((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)) {//|| index == _INPUT_PORT_1){

        //usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdSignalItemStrSet[index]);
        //usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);

        // it means no-cable or no-signal
        if (stModeInfo.IHWidth==0)
        {
            lines = 1;
        }
        else
        {
//add
            if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI){
                if (CHdmiFormatDetect()){	//HDMI only
                    IHWidth_Tmp = stModeInfo.IHWidth;
                    IVHeight_Tmp = stModeInfo.IVHeight;
                    stModeInfo.IHWidth = HDMI_H_Width;
                    stModeInfo.IVHeight = HDMI_V_Height;
                }
            }
#if (_PANEL_TYPE==_AUO_LVDS_22_WXGA ||_PANEL_TYPE==_M220Z1_03_WXGA)
            if (stModeInfo.IVHeight==1202)
                stModeInfo.IVHeight = 1200;
#endif	//#if _PANEL_TYPE==_AUO_LVDS_22_WXGA
            //20070324, tcl test, HDMI show timing error
            if ((GET_INPUTSOURCE_TYPE() ==_SOURCE_DVI)&&(ucModeCnt1<_HDMI_MAX_MODE_NUM)&&(ucModeCnt1!=0)&& (ucSyncProcessState == _ACTIVE_STATE))
            {
                usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdHdmiTimingStrSet[ucModeCnt1]);
                COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_8, 0, tOsdHdmiTimingStrSet[ucModeCnt1]);
                lines=2;
            }
            else
            {
                ptrDes = ucModeStr;

                //20070821, sva: 1360x768 show as 1366x768, modify osd string only
                //ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IHWidth);
                if (0)//(stModeInfo.ModeCurr == _MODE_1360x768_60HZ)
                    ptrSrc = COsdCoreGetNumberStr2(1366);
                else
                    ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IHWidth);

                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }

                *ptrDes++ = _X_;

//20070328, interlace DVI IVHeight double
                //For Digital Interlace Mode Compensation
                /*
                			ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
                			while (*ptrSrc!=_END_)
                			{
                				*ptrDes++ = *ptrSrc++;
                			}
                			*ptrDes++ = _END_;
                */

                /*if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)
                {
                	CScalerPageSelect(_PAGE2);
                	CScalerGetDataPortByte(_P2_HDMI_ADDR_PORT_C9, _P2_HDMI_VCR_50, 1, pData, _NON_AUTOINC);
                	if((pData[0] & 0x40) == 0x40)
                	{
                		ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight*2);
                	}
                	else
                		ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
                }
                else*/
#if 0//_DOS_MODE_DEBUG_SUPPORT
                if (stModeInfo.ModeCurr == _MODE_720x400_70HZ ||stModeInfo.ModeCurr == _MODE_640x400_70HZ)
                    ptrSrc = COsdCoreGetNumberStr2(400);
                else
                    ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
#else
                ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
#endif

                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }
                *ptrDes++ = _END_;
                //20081112 ccy cancel
                /*	ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
                	while (*ptrSrc!=_END_)
                	{
                		*ptrDes++ = *ptrSrc++;
                	}
                	*ptrDes++ = _END_;
                */
                usItemStart = GET_WIN_INFO_PREBLANK(0, ucModeStr);
                //COsdFxLoadText(1, 0, usItemStart, _CP_HintNorm, _CP_BG, 0, ucModeStr);
                COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, _CP_8, _CP_BLACK, 0, ucModeStr);

                ptrDes = ucModeStr;

                if (stModeInfo.IVFreq>590 && stModeInfo.IVFreq <=600)
                    ptrSrc = COsdCoreGetNumberStr2(60);
                //20080822, update, VG859 TIMING-954: VESA640x480@72 (V=72.8) show 73HZ
                else if (stModeInfo.ModeCurr==_MODE_640x480_72HZ)
                    ptrSrc = COsdCoreGetNumberStr2(72);
                else
                    ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVFreq/10);

                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }

                *ptrDes++ = _H_;
                *ptrDes++ = _z_;
                *ptrDes++ = _END_;

                usItemStart = GET_WIN_INFO_PREBLANK(0, ucModeStr);
                //COsdFxLoadText(2, 0, usItemStart, _CP_HintNorm, _CP_BG, 0, ucModeStr);
                COsdFxLoadText(_INFO_ROW+2, _INFO_COL+0, usItemStart, _CP_8, _CP_BLACK, 0, ucModeStr);

                //CLR_FIRST_ENTRY_SHOWSOURCE();

                lines = 3;
            }
        }
    }
    else
    {
        lines = 1;
        //usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdSignalItemStrSet[index]);
    }
//add
    if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)
    {
        if (CHdmiFormatDetect()){	//HDMI only
            stModeInfo.IHWidth = IHWidth_Tmp;
            stModeInfo.IVHeight = IVHeight_Tmp;
        }
    }

    //SET_FIRST_ENTRY_SHOWSOURCE();
    //20080916 ccy cancel
    //CosdCoreShowInfoDrawWin(lines);

    COsdFxEnableOsd();
    if (!bForcePanelOff)
        CPowerPanelOn(); // avoid power on not active panel power

#undef index

}

//SKYWORTH OSD SHOW YPBPR by brighty
static void COSdCoreShowYPbPrInfo(void)
{
    UINT8 ucCol = 0;
    UINT8 ucWid;
    UINT16 Timing;
    UINT8 temp;

    CLR_FIRST_ENTRY_SHOWSOURCE();
    COsdFxDisableOsd();
    COsdFxShowSource();
    // it means no-support or no-signal
    if ((stModeInfo.ModeCurr == _MODE_NOSIGNAL) ||(stModeInfo.ModeCurr == _MODE_NOSUPPORT))
        return;

    switch (stModeInfo.ModeCurr)
    {
    case 0:
        Timing = 576;
        temp = _i_;
        break;
    case 1:
        Timing = 480;
        temp = _i_;
        break;
    case 2:
        Timing = 576;
        temp = _P_;
        break;
    case 3:
        Timing = 480;
        temp = _P_;
        break;
    case 4:
    case 7:
        Timing = 720;
        temp = _P_;
        break;
    case 5:
    case 6:
        Timing = 1080;
        temp = _i_;
        break;
    case 8:
    case 9:
        Timing = 1080;
        temp = _P_;
        break;
    }

    ucWid = 720;
    if (Timing >= 1000)
    {
        ucCol = COsdFxLoadBlankCmd(1, ucCol, 0);//((UINT16)(_DISP_WID - 8 * 10 * (2*1) - 12 * (2*1)) / (2*1)) - 2);
        //COsdFxShowNumber(1, ucCol,  Timing, 0x33, _CP_LIGHTBLUE);//disable by czl 070927
        ucCol += 4;
    }
    else
    {
        ucCol = COsdFxLoadBlankCmd(1, ucCol, 0);//((UINT16)(_DISP_WID - 7 * 10 * (2*1) - 12 * (2*1)) / (2*1)) - 12);
        //COsdFxShowNumber(1, ucCol,  Timing, 0x33, _CP_LIGHTBLUE);//disable by czl 070927
        ucCol += 3;
    }

    //COsdFxChange1bitColor(1, ucCol, 1, 1, _CP_LIGHTBLUE, _CP_BLACK);//disable by czl 070927
    //COsdFxHLine(1, ucCol, 1, temp, _WRITE_BYTE1);//disable by czl 070927

    COsdFxEnableOsd();
    CLR_FIRST_ENTRY_SHOWSOURCE();

    COsdCoreInitialze();  // add avoid change to MainMenu state osd show system page,hill
}

// For No Singal source
static void COsdNoSignalEventProc(void)
{
//	COsdMessageSend(ucOsdMessage);
    COsdCoreDispatchMsg();
}



void COsdCoreCloseNoSignalOsd(void)
{
    // Maybe timer is set the ucOsdMessage as _SHOW_NOSIGNAL_MESSAGE,
    // but not yet show on screen, we should reset the ucOsdMessage.
    if (ucOsdMessage == _SHOW_NOSIGNAL_MESSAGE)
        ucOsdMessage = _NONE_KEY_MESSAGE;

    if (ucOsdState == _NOSIGNAL_MESSAGE_STATE) {
        COsdFxDisableOsd();
        COsdCoreSetState(_IDLE_STATE);
    }

    // clear the no-signal flag of current display
//	CLR_NO_SIGNAL(info->display);
}

static void COsdCoreExtendMenuEventProc(void)
{
    UINT8 ucCount, ucCol, ucTmpRow, ucTmpCol;
    ItemObject  *pItemObject;
    ItemSelectStruct  *pItemSelectStruct;
    MenuItem  *pMenuItem;
    ItemSelectDialog  *pItemSelectDialog;
    ItemPosition	xdata stMovePos;
    UINT16 xdata	usPreBnkLength, usSegmentLength;

    if ((ucOsdMessage != _MENU_KEY_MESSAGE) && (ucOsdMessage != _UP_KEY_MESSAGE) &&
            (ucOsdMessage != _DOWN_KEY_MESSAGE) &&  (ucOsdMessage != _LEFT_KEY_MESSAGE) &&
            (ucOsdMessage != _RIGHT_KEY_MESSAGE))
        return;

    pMenuItem = ((MenuItem *[])stLayerStack[ucLayerIndex].pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
    pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;

    if (ucOsdMessage == _MENU_KEY_MESSAGE) {
        // Add specify value to *(pItemSelectDialog->ucIndex)
        for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
            pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
            pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
            if (pItemSelectStruct->ucRow == ucExtendMenuRow)
                if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                    break;
        }
        //DebugPrintf("message = %x \n", pItemSelectStruct->ucValue);
        pItemSelectDialog->pHandlerFunction(pItemSelectStruct->ucValue);
//		COsdBackMenuProc();
//		ucOsdState = _MAINMENU_STATE;
        if (pItemObject ->ucType == _SELECTITEM_TYPE){
            COsdBackMenuProc();
            COsdCoreSetState(_MAINMENU_STATE);
        }else if (pItemObject ->ucType == _CONFIRM_TYPE){
            if (pItemSelectStruct->ucValue == 0){
                COsdBackMenuProc();
                COsdCoreSetState(_MAINMENU_STATE);
            }else{
                COsdCoreInitialze();
                COsdCoreSetState(_IDLE_STATE);
            }
        }else{
            COsdCoreInitialze();
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    }

    usSegmentLength = ((12 * 41 - 20) / pItemSelectDialog->ucCol);
    usPreBnkLength = pItemSelectDialog->pForegroundWindow->stPosition.usXStart + pMenuItem->usSpaceInSubMenu;
    ucCol = COsdFxCalBlankCmdCount(usPreBnkLength);
    for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
        pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
        pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
        if (pItemSelectStruct->ucRow == ucExtendMenuRow) {
            if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                break;
            else
                ucCol += (COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString) + COsdFxCalBlankCmdCount(usSegmentLength - COsdFxCalTextWidth(GET_LANGUAGE(), pItemObject->pString)));
        }
    }

#if _CHINESE_SIMPlIFIED_CHARACTER
    if (GET_LANGUAGE()==_CHINESE_S)
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString)+1, _CP_WHITE, _CP_BLACK);
    else
#endif
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString), _CP_WHITE, _CP_BLACK);

    switch (ucOsdMessage) {
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
        ucTmpRow = ucExtendMenuRow;
        if (ucOsdMessage == _UP_KEY_MESSAGE) {
            if (ucTmpRow == 0)
                ucTmpRow = pItemSelectDialog->ucRow - 1;

            else
                ucTmpRow -= 1;

        } else {
            if (ucTmpRow + 1 > (pItemSelectDialog->ucRow - 1))
                ucTmpRow = 0;
            else
                ucTmpRow += 1;
        }

        for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
            pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
            pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
            if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                if (pItemSelectStruct->ucRow == ucTmpRow) {
                    ucExtendMenuRow = ucTmpRow;
                    break;
                }
        }
        break;

    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
        ucTmpCol = ucExtendMenuCol;
        if (ucOsdMessage == _LEFT_KEY_MESSAGE) {
            if (ucTmpCol == 0){
                if (ucOsdState == _EXTENDMENU_STATE)
                    ucTmpCol = pItemSelectDialog->ucCol - 1;
            }else
                ucTmpCol -= 1;
        } else {
            if (ucTmpCol + 1 > (pItemSelectDialog->ucCol - 1))
                ucTmpCol = 0;
            else
                ucTmpCol += 1;
        }

        for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
            pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
            pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
            if (pItemSelectStruct->ucRow == ucExtendMenuRow)
                if (pItemSelectStruct->ucCol == ucTmpCol) {
                    ucExtendMenuCol = ucTmpCol;
                    break;
                }
        }
        break;
    default:
//			COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    }

    stMovePos = pItemSelectDialog->pForegroundWindow->stPosition;
    stMovePos.usXStart += ucExtendMenuCol * usSegmentLength + pMenuItem->usSpaceInSubMenu;
    stMovePos.usXEnd = (stMovePos.usXStart + usSegmentLength - 10);
    stMovePos.usYStart += ((ucExtendMenuRow + 2) * 32);
    stMovePos.usYEnd = stMovePos.usYStart + 32;
    //COsdFxCloseWindow(stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->ucWindowID);// modified by xyw 080604
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    //COsdFxMoveWindow(pItemSelectDialog->pMoveWindow->ucWindowID, &stMovePos);
    COsdFxMoveWindow(&tMainMenuItemWindowStyle,&stMovePos);// modified by xyw 080604
    ucCol = COsdFxCalBlankCmdCount(usPreBnkLength);
    for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
        pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
        pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
        if (pItemSelectStruct->ucRow == ucExtendMenuRow) {
            if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                break;
            else
                ucCol += (COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString) + COsdFxCalBlankCmdCount(usSegmentLength - COsdFxCalTextWidth(GET_LANGUAGE(), pItemObject->pString)));
        }
    }
#if _CHINESE_SIMPlIFIED_CHARACTER
    if (GET_LANGUAGE()==_CHINESE_S)
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString)+1, _CP_BLACK, _CP_BLACK);
    else
#endif
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString), _CP_BLACK, _CP_BLACK);

    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
}

void COsdCoreSetState(UINT8 state)
{
    ucOsdState = state;
}

static void COsdCoreVolumnChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;
    ItemSlider * pItemSlider;
    ItemObject * pItemObject;

    //Konsta color osd
    pItemObject = &(tMenuAudioShortMenu.pItemList)[0];
    pItemSlider = (ItemSlider *)pItemObject->pStruct;

    switch (ucOsdMessage)
    {
#if((_REMOTE_CONTROL == _PANASONIC_TYPE)||(_REMOTE_CONTROL == _NEC_TYPE)) //fjyang
    case _VOLUME_DEC_MESSAGE:
    case _VOLUME_INC_MESSAGE:
        if (ucOsdMessage == _VOLUME_DEC_MESSAGE)
            ucOsdMessage = _LEFT_KEY_MESSAGE;
        else if (ucOsdMessage == _VOLUME_INC_MESSAGE)
            ucOsdMessage = _RIGHT_KEY_MESSAGE;
#else
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
#endif
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _VOLIMN_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            //premier gray level osd
            //ucCurRes = (UINT16)tAudioVolumeShortMenuSet.pGetFunction();
            //ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tAudioVolumeShortMenuSet.ucMax, tAudioVolumeShortMenuSet.ucMin, ucOsdMessage, 1);
            //if(ucCurRes == ucReturnRes)
            //	return;
            //tAudioVolumeShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);

            //Konsta color osd
            ucCurRes = pItemSlider->pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, pItemSlider->ucMax, pItemSlider->ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            pItemSlider->pHandlerFunction((UINT8)ucReturnRes);

        }
        break;
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:

        //20071214, x.hu
        //add UP/DOWN while volume slider bar is shown
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:

    case _DISPLAY_KEY_MESSAGE:
    case _MENU_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        CLR_EXT_ADJUST_WIN();     //dong add 20081006
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn

    //preimer gray level osd
    //COsdDispFullSlider(ROW(2), COL(3), LENGTH(15), _SHOW_PERCENT,&tAudioVolumeShortMenuSet);
    //konsta color osd
    COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, pItemSlider,1);

    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
static void COsdCoreBrightnessChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
    case _BRIGHTNESS_KEY_MESSAGE:
        if (ucOsdState == _BRIGHTNESS_STATE) {
            //close it while already in short menu
            CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
            return;
        }
        break;
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _BRIGHTNESS_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(_NULL_, _TRUE);
            /////////////////////////////////////////////////////////
#endif

            ucCurRes = (UINT16)tBrightnessShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tBrightnessShortMenuSet.ucMax, tBrightnessShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tBrightnessShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _VOLUME_INC_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;

    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tBrightnessShortMenuSet);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
static void COsdCoreContrastChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
    case _CONTRAST_KEY_MESSAGE:
        if (ucOsdState == _CONTRAST_STATE) {
            //close it while already in short menu
            CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
            return;
        }
        break;
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _CONTRAST_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(_NULL_, _TRUE);
            /////////////////////////////////////////////////////////
#endif

            ucCurRes = (UINT16)tContrastShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tContrastShortMenuSet.ucMax, tContrastShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tContrastShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _VOLUME_INC_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tContrastShortMenuSet);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
static void COsdCoreColorChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
    case _COLOR_KEY_MESSAGE:
        if (ucOsdState == _COLOR_STATE) {
            //close it while already in short menu
            CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
            return;
        }
        break;
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _COLOR_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(_NULL_, _TRUE);
            /////////////////////////////////////////////////////////
#endif

            ucCurRes = (UINT16)tColorShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tColorShortMenuSet.ucMax, tColorShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tColorShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _VOLUME_INC_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tColorShortMenuSet);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)



static void COsdCoreVolumnProc(void)
{
#if _TYPEOF_OSD_KONSTA

/////////////////
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    ItemSlider * pItemSlider;
    ItemObject * pItemObject;

    COsdFxMapSetting(_OSD_MAP9);

    COsdFxClearText(0, 0, _OSD_ADJ_ROW, _OSD_ADJ_COL);    //add by lbh 090916 for power up osd promblem

    COsdFxDrawWindow(&tExtAdjWindowStyle);

    pItemObject = &(tMenuAudioShortMenu.pItemList)[0];
    pItemSlider = (ItemSlider *)pItemObject->pStruct;

    COsdFxLoadText(_ITEMSLIDER_ITEM_ROW, _ITEMSLIDER_ITEM_COL,0, GET_CP_ITEM_UNACTIVE(), 0,ucSelectLanguage, pItemObject->pString);
    //COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, pItemSlider);
    //if (!GET_FACTORYSTATUS())     //dong disable 20081107
#ifdef VOLUME_BAR_NO_SHOW_EXIT
	if ((pItemObject->pString != tOsdAudioVolumnStr))////jinsuo modify for vol noext show 20100303
#endif	
    {
        //CosdCoreShowNoteMessage(_ITEMSLIDER_EXTADJ_ROW+2,_ITEMSLIDER_EXTADJ_COL,0,4,_CP_1,_CP_0,GET_LANGUAGE());//070910 xyw
        //konsta color osd
        CosdCoreShowNoteMessage(_ITEMSLIDER_EXTADJ_ROW+2,_ITEMSLIDER_EXTADJ_COL,0,4,_CP_3,_CP_0,ucSelectLanguage);
        //COsdFxChange1bitColor(_ITEMSLIDER_EXTADJ_ROW+2, _ITEMSLIDER_EXTADJ_COL, 1, 2, _CP_3, _CP_0);
        //COsdFxChange1bitColor(_ITEMSLIDER_EXTADJ_ROW+2, _ITEMSLIDER_EXTADJ_COL+19, 1, 2, _CP_3, _CP_0);
    }

/////////////////
#if 1		//dong alter 20081125
    COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, pItemSlider,1);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
    COsdFxEnableOsd();
    if (GET_AUDIO_MUTE())
    {
        CLR_AUDIO_MUTE();
        if (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE)
        {
            SET_MUTE_PROCESS(_DISABLE);
        }
        CEepromSaveAudioData();
    }

#else
    COsdCoreVolumnChangeProc();

    COsdFxEnableOsd();

    if (GET_AUDIO_MUTE()&&(ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
    {
        if (GET_AUDIO_MUTE())
        {
            CLR_AUDIO_MUTE();
            SET_MUTE_PROCESS(_DISABLE);
        }
    }
#endif
#else

    WindowStyle volumewindow;  //tommy deleted for decrease xdata space

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();//add by xyw 080219 at jpe

#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(3);	//load volume page font
#endif
#else	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
    COsdLoadfontloadVolumeMuteFont();
#endif	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;		//tommy  add for   cancel compling warning
#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdAudioVolumnStr);
#else	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
    COsdFxLoadIcon(ROW(1), COL(0), 0, 2, _NULL_, tOSD_AUDIO_NORMAL_ICON);
    COsdFxChange4bitLUTColor(1, 0, 3, 2, COLOR00(0));
#endif	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)



    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreVolumnChangeProc();

    COsdFxEnableOsd();

    if (GET_AUDIO_MUTE()&&(ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
    {
        if (GET_AUDIO_MUTE())
        {
            CLR_AUDIO_MUTE();
            SET_MUTE_PROCESS(_DISABLE);
        }
    }

#endif
}


#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
static void COsdCoreBrightnessProc(void)
{
    WindowStyle volumewindow;

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(1);	//load color page font
#endif

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;

    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdBrightnessStr);

    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreBrightnessChangeProc();

    COsdFxEnableOsd();

}
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
static void COsdCoreContrastProc(void)
{
    WindowStyle volumewindow;

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(1);	//load color page font
#endif

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;

    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdContrastStr);

    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreContrastChangeProc();

    COsdFxEnableOsd();

}
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
static void COsdCoreColorProc(void)
{
    WindowStyle volumewindow;

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(1);	//load color page font
#endif

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;

    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdSaturationStr);

    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreColorChangeProc();

    COsdFxEnableOsd();

}
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)


static void COsdCoreMuteChangeShow(void)
{
    COsdFxDisableOsd();
    COsdFxMapSetting(_OSD_MAP5);
    COsdFxClearText(3, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);//add by xyw 080115 at jpe
    COsdCoreShowInfoSetPos(_OSD_MAP5);
#if !_TYPEOF_OSD_KONSTA
    COsdLoadfontloadVolumeMuteFont();
#endif
    if (GET_AUDIO_MUTE())
    {
        COsdCoreSetState(_MUTE_STATE);
        // 4bit ICON
        //COsdFxLoadIcon(ROW(1), COL(0), 0, 2, _NULL_, tOSD_AUDIO_MUTE_ICON);
        // text
        COsdFxLoadText(ROW(1), COL(0), 0, _CP_10, _CP_0, GET_LANGUAGE(), tOSD_AUDIO_MUTE_ICON);
#if _TYPEOF_OSD_KONSTA
        CTimerCancelTimerEvent(CModeNoSignalEvent);
        CTimerCancelTimerEvent(CModePowerSavingEvent);
        CTimerCancelTimerEvent(CModeNoSignalIconMoveEvent);
        CTimerCancelTimerEvent(CModeNoCableEvent);
        CTimerCancelTimerEvent(CModeNoSupportEvent);
#endif
    }
    else
    {
        COsdCoreSetState(_IDLE_STATE);
        // 4bit ICON
        //COsdFxLoadIcon(ROW(1), COL(0), 0, 2, _NULL_, tOSD_AUDIO_NORMAL_ICON);
        // text
        // do nothing

        CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
    }
    // 4bit ICON
    //COsdFxChange4bitLUTColor(1, 0, 3, 2, COLOR00(0));
    // text
    // do nothing

    COsdFxEnableOsd();
}


static void COsdCoreMuteChangeProc(void)
{
    COsdCtrlSetAudioMute();
    COsdCoreMuteChangeShow();
}

//SKYWORTH OSD SHOW SLEEP by brighty
static void COsdCoreSleepProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP5);
    COsdFxMapSetting(_OSD_MAP4);

#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(7);
#endif
#endif
    //COsdCtrlSetSleepMode();
    //usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSleepStr);

    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepStr);
    COsdFxLoadText(_INFO_ROW-1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepStr);

    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);

    //CosdCoreShowInfoDrawWin(3);
    //COsdFxSetWinRefPos((_DISP_WID - 200) / 2, (_DISP_LEN - 100) / 2);//add by xyw 011023
    COsdFxDrawWindow(&tOsdNoSignal_BackgroundWindowStyle);
    COsdFxDrawWindow(&tOsdNoSignal_ForegroundWindowStyle);

    COsdCoreShowInfoSetPos(_OSD_MAP4);

    COsdFxEnableOsd();
}

#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
//picture mode process
void COsdCorePictureModeProc(void)
{
    if (ucOsdMessage == _PictureMode_KEY_MESSAGE)
    {

        COsdCtrlSetPictureMode();
        COsdCorePictureModeShow(1);
    }
    else
    {
        COsdCoreDispatchMsg();
    }
    CTimerReactiveTimerEvent(SEC(5)/*SEC(GET_OSDTIMEOUT())*/, COsdFxExitEvent);
}

//audio mode  prosess
void COsdCoreSoundModeProc(void)
{
    if (ucOsdMessage ==_SoundMode_KEY_MESSAGE)
    {
        COsdCtrlSetSoundMode();
        COsdCorePictureModeShow(0);
    }
    else
    {
        COsdCoreDispatchMsg();
    }
    CTimerReactiveTimerEvent(SEC(5)/*SEC(GET_OSDTIMEOUT())*/, COsdFxExitEvent);

}
#endif

#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
void COsdCorePictureModeShow(UINT8 ModeSelect)
{
    COsdFxDisableOsd();
    COsdFxMapSetting(_OSD_MAP5);

#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(6);
#endif



#if _OSD_DOUBLE_SCALING
    COsdFxSetWinRefPos(_DISP_WID*2/5/2,_DISP_LEN*6/7/2);
#else
#if _DISP_WID == 1280
    COsdFxSetWinRefPos(_DISP_WID*2/5,_DISP_LEN*6/7);
#elif _DISP_WID == 1440
    COsdFxSetWinRefPos(_DISP_WID*2/5-60,_DISP_LEN*6/7);//modified by xyw in 070925
#endif
#endif
    COsdFxDrawWindow(&tOsdDisplay_ModeWindow);

    if (ModeSelect)
    {
        COsdFxLoadText(1, 5, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPictureModeStr);
        COsdFxLoadText(2, 8, 0 , _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPictureModeStrSet[COsdCtrlGetPictureMode()]);

    }else{
        COsdFxLoadText(1, 5, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSoundModeStr);
        COsdFxLoadText(2, 8, 0 , _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSoundModeStrSet[COsdCtrlGetSoundMode()]);
    }

    COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(5)/*SEC(GET_OSDTIMEOUT())*/, COsdFxExitEvent);
}
#endif
/*
static void COsdCoreLoad4BitFont(void)
{
	if(ucLayerIndex == 0) {
		#if(_HARDWARE_LOAD_FONT == _ON)
		CScalerLoadHardwareVLCFont(tIcon_Image_Video,0x118);

		switch(stLayerStack[ucLayerIndex].ucMainMenu) {
			case 0:
				if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//(stSystemData.InputSource == _INPUT_PORT_1))
					CScalerLoadHardwareVLCFont(tIcon_Color_DSub,0x118);
				else if((GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8) && (GET_INPUTPORT_TYPE(stSystemData.InputSource) !=_VIDEO_TV_PORT))//else if((stSystemData.InputSource >= _INPUT_PORT_2) && (stSystemData.InputSource <= _INPUT_PORT_4))
					CScalerLoadHardwareVLCFont(tIcon_Color_Video,0x118);
				else
					CScalerLoadHardwareVLCFont(tIcon_TV_TV,0x118);
				break;
			case 1:
				if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//if(stSystemData.InputSource < _INPUT_PORT_2)
					CScalerLoadHardwareVLCFont(tIcon_Image_DSub,0x118);
				else
					CScalerLoadHardwareVLCFont(tIcon_Image_Video,0x118);
				break;
			case 2:
				CScalerLoadHardwareVLCFont(tIcon_Osd,0x118);
				break;
			case 3:
				if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
					CScalerLoadHardwareVLCFont(tIcon_Function_DSub,0x118);
				else
					CScalerLoadHardwareVLCFont(tIcon_Function_Video,0x118);
				break;
			case 4:
				CScalerLoadHardwareVLCFont(tIcon_Misc,0x118);
				break;
		};
		#else
		CScalerLoadFont(tIcon_Image_Video, 0x118, 48, _COMPRESS_FONT);

		switch(stLayerStack[ucLayerIndex].ucMainMenu) {
			case 0:
				if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//(stSystemData.InputSource == _INPUT_PORT_1))
					CScalerLoadFont(tIcon_Color_DSub, 0x118, 24, _COMPRESS_FONT);
				else if((GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8) && (GET_INPUTPORT_TYPE(stSystemData.InputSource) !=_VIDEO_TV_PORT))//else if((stSystemData.InputSource >= _INPUT_PORT_2) && (stSystemData.InputSource <= _INPUT_PORT_4))

					CScalerLoadFont(tIcon_Color_Video, 0x118, 16, _COMPRESS_FONT);
				else
					CScalerLoadFont(tIcon_TV_TV, 0x118, 40, _COMPRESS_FONT);
				break;
			case 1:
				if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//if(stSystemData.InputSource < _INPUT_PORT_2)
					CScalerLoadFont(tIcon_Image_DSub, 0x118, 48, _COMPRESS_FONT);
				else
					CScalerLoadFont(tIcon_Image_Video, 0x118, 48, _COMPRESS_FONT);
				break;
			case 2:
				CScalerLoadFont(tIcon_Osd, 0x118, 32, _COMPRESS_FONT);
				break;
			case 3:
				if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
					CScalerLoadFont(tIcon_Function_DSub, 0x118, 16, _COMPRESS_FONT);
				else
					CScalerLoadFont(tIcon_Function_Video, 0x118, 32, _COMPRESS_FONT);
				break;
			case 4:
				CScalerLoadFont(tIcon_Misc, 0x118, 24, _COMPRESS_FONT);
				break;
		};
		#endif
	}
}
*/


void COsdCoreInitICMWindow(void)
{
//	DebugPrintf("icm on_off: %x\n", GET_ICM_on_off());
    if (GET_ICM_on_off()){
#if(_PANEL_TYPE == _CPT_CMO_TTL_20)
        bICMCMDFlag = _TRUE;
        COsdCoreInitSubWindow();
        bICMCMDFlag = _FALSE;
#else
        COsdCoreInitSubWindow();
#endif
    }else
        ucLayerIndex--;
}

static void COsdCoreDispatchMsg(void)
{
    switch (ucOsdMessage) {
    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _SOURCE_KEY_MESSAGE:
    case _MTS_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _RETURN_KEY_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _VOLUME_INC_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106
#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC

    case _UP_KEY_MESSAGE://add by xyw 080303
    case _DOWN_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:

#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
#endif	//#if _CUSTOMER_CGT
        /*
        		case _0_KEY_MESSAGE:
        		case _1_KEY_MESSAGE:
        		case _2_KEY_MESSAGE:
        		case _3_KEY_MESSAGE:
        		case _4_KEY_MESSAGE:
        		case _5_KEY_MESSAGE:
        		case _6_KEY_MESSAGE:
        		case _7_KEY_MESSAGE:
        		case _8_KEY_MESSAGE:
        		case _9_KEY_MESSAGE:
        		case _100_KEY_MESSAGE://add by brighty for skyworth tv*/
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        break;
    default:
        return;
        //	COsdCoreSetState(_IDLE_STATE);
    };
    CLR_DONT_ENABLE_OSD_WHEN_CHANGE_SRC();
}

UINT8* COsdCoreGetClockStr(void)
{

#if(1)
    // 24 hour
#if 1  //tommy change for decrease xdata_space
    ucClockStr[2] = ucHour;

    if (ucHour >= 24) {
        ucClockStr[2] = 0;
    }

    if (ucClockStr[2] == 0){
        ucClockStr[0] = _0_;
        ucClockStr[1] = _0_;
    }else if (ucClockStr[2] <= 9){
        ucClockStr[0] = _0_;
        ucClockStr[1] = _0_ + ucClockStr[2];
    }else if (ucClockStr[2] <= 19){
        ucClockStr[0] = _1_;
        ucClockStr[1] = _0_  + (ucClockStr[2] - 10);
    }else{
        ucClockStr[0] = _2_;
        ucClockStr[1] = _0_  + (ucClockStr[2] -20);
    }

    ucClockStr[2] = 0x1a;		// :


    ucClockStr[6] = ucMin / 10;

    if (ucClockStr[6] == 0)
        ucClockStr[3] = _0_;
    else
        ucClockStr[3] = _0_ + ucClockStr[6];

    ucClockStr[4] = _0_ + (ucMin % 10);

    ucClockStr[5] = _END_;
    ucClockStr[6] = _THE_SAME_;
#else
    ucClockStr[3] = ucHour;
    ucClockStr[0] =0x00;
    ucClockStr[6] = 0x00;
    ucClockStr[7] = 0x00;


    if (ucHour >= 24) {
        ucClockStr[3] = 0;
    }

    if (ucClockStr[3] == 0){
        ucClockStr[1] = _0_;
        ucClockStr[2] = _0_;
    }else if (ucClockStr[3] <= 9){
        ucClockStr[1] = _0_;
        ucClockStr[2] = _0_ + ucClockStr[3];
    }else if (ucClockStr[3] <= 19){
        ucClockStr[1] = _1_;
        ucClockStr[2] = _0_  + (ucClockStr[3] - 10);
    }else{
        ucClockStr[1] = _2_;
        ucClockStr[2] = _0_  + (ucClockStr[3] -20);
    }

    ucClockStr[3] = 0x1a;		// :


    ucClockStr[8] = ucMin / 10;

    if (ucClockStr[8] == 0)
        ucClockStr[4] = _0_;
    else
        ucClockStr[4] = _0_ + ucClockStr[8];

    ucClockStr[5] = _0_ + (ucMin % 10);

    ucClockStr[8] = _END_;
#endif

    return ucClockStr;


#else

    // 12 hour (AM / PM)
    ucClockStr[5] = ucHour;
    if (ucHour >= 12) {
        ucClockStr[0] = _P_;
        if (ucHour > 12)
            ucClockStr[5] = ucHour - 12;
    } else {
        ucClockStr[0] = _A_;
    }

    ucClockStr[1] = _M_;
    ucClockStr[2] = 0x00;

    if (ucClockStr[5] <= 9) {
        ucClockStr[3] = _0_; 	//0x00;
        ucClockStr[4] = _0_ + ucClockStr[5];
    } else  {
        ucClockStr[3] = _1_;
        ucClockStr[4] = _0_  + (ucClockStr[5] - 10);
    }

    ucClockStr[5] = 0x1a;


    ucClockStr[8] = ucMin / 10;

    if (ucClockStr[8] == 0)
        ucClockStr[6] = _0_;	//0x00;
    else
        ucClockStr[6] = _0_ + ucClockStr[8];

    ucClockStr[7] = _0_ + (ucMin % 10);

    ucClockStr[8] = _END_;

#if 1   ////+  SKYWORTH_CHINESE       tommy liao add 070524
    ucClockStr[9] = _THE_SAME_;
    //tommy delete the below
    /*
    ucClockStr[10] = _THE_SAME_;
    ucClockStr[11] = _THE_SAME_;
    ucClockStr[12] = _THE_SAME_;
    */
#endif

    return ucClockStr;

#endif

}

//gary added factory menu==============================================
#if(_FACTORY_MENU_ENABLE)
void COsdCoreInitIFactoyWindow(void)
{
    COsdCoreInitSubWindow();
}
#endif

void COsdFxShowStatus(BYTE ucType)
{
#if _TIMER_SLEEP_HINT_SUPPORT
    if (ucType != _SHOW_SLEEP_TIMEOVER_HINT && ucType != _SHOW_TIMESTOP_TIMEOVER_HINT)
        bTimeoverHintOsdState = 1;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT
#if _TYPEOF_OSD_KONSTA
    if (ucType == _SHOW_AUTOADJUST ||ucType == _SHOW_AUTOCOLOR)
        COsdFxMapSetting(_OSD_MAPA);
    else if (ucType == _SHOW_SLEEP_TIMEOVER_HINT ||ucType == _SHOW_TIMESTOP_TIMEOVER_HINT)
        COsdFxMapSetting(_OSD_MAPB);
    else
#endif
        COsdFxMapSetting(_OSD_MAP4);

#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    switch (ucType)
    {
    case _SHOW_NOSIGNAL:
    case _SHOW_NOCABLE:
    case _SHOW_NOSUPPORT:
        COsdLoadfontLoadChineseBankFont(8);
        break;
    case _SHOW_SEARCHING:
        COsdLoadfontLoadChineseBankFont(2);
        break;
    default :
        COsdLoadfontLoadChineseBankFont(1);
        break;
    }
#endif
#endif//	#if _ADD_CHINESE


    if (ucType == _SHOW_SLEEP_TIMEOVER_HINT)
    {
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
        COsdLoadfontLoadChineseBankFont(7);// add by xyw 071023
#endif
        COsdFxShowStatusRedrawSleepRemind(1);
    }
    else if (ucType == _SHOW_TIMESTOP_TIMEOVER_HINT)
    {
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
        COsdLoadfontLoadChineseBankFont(7);// add by xyw 071023
#endif
        COsdFxShowStatusRedrawTimeStopRemind(1);
    }
#if _TIMER_PAGE_SUPPORT
    else if (ucType == _SHOW_TIMEREMIND_MESSAGE)
    {
        usItemStart = GET_WIN_NOSIGNAL_PREBLANK(0, tOsdTimerPageRemindStr);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, tOsdTimerPageRemindStr);
    }
#endif
    else
    {
#if _TYPEOF_OSD_KONSTA
        if (ucType == _SHOW_AUTOADJUST ||ucType == _SHOW_AUTOCOLOR)
            usItemStart = GET_WIN_AUTOADJUST_PREBLANK(GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
        else
#endif
            usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
#if _CUSTOMER_HPC
        COsdFxLoadText(_INFO_ROW-1, _INFO_COL, usItemStart, _CP_COLOR06, _CP_BLACK, GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
#else
        COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
#endif
    }
#if _TYPEOF_OSD_KONSTA
    if (ucType == _SHOW_AUTOADJUST ||ucType == _SHOW_AUTOCOLOR)
        COsdFxDrawWindow(&tOsdAutoAdjust_BackgroundWindow);
    else if (ucType == _SHOW_SLEEP_TIMEOVER_HINT ||ucType == _SHOW_TIMESTOP_TIMEOVER_HINT)
        COsdFxDrawWindow(&tOsdSleep_BackgroundWindow);
    else
#endif
        COsdFxDrawWindow(&tOsdNoSignal_BackgroundWindowStyle);
    //COsdFxDrawWindow(&tOsdNoSignal_ForegroundWindowStyle);
#if _TYPEOF_OSD_KONSTA
    if (ucType == _SHOW_AUTOADJUST ||ucType == _SHOW_AUTOCOLOR)
        COsdCoreShowInfoSetPos(_OSD_MAPA);
    else if (ucType == _SHOW_SLEEP_TIMEOVER_HINT ||ucType == _SHOW_TIMESTOP_TIMEOVER_HINT)
        COsdCoreShowInfoSetPos(_OSD_MAPB);
    else
#endif
        COsdCoreShowInfoSetPos(_OSD_MAP4);

    CLR_FIRST_ENTRY_SHOWSOURCE();

    COsdFxEnableOsd();

}

#if _POWER_ON_LOGO_SUPPROT==_ON

#if 1
void COsdDispPowerOnLogoProc(void)
{
#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE
//20080826 ccy modify
#if(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_OSTAR)
    COsdColorPalette(Palette_logo_OSTAR);
#else

    COsdColorPalette(Palette_logo);
#endif
    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
    CAdjustBackgroundColor(0xff, 0xff, 0xff);
//20080826 ccy modify
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_OSTAR)
    //CAdjustBackgroundColor(250, 206, 159);
    CAdjustBackgroundColor(191, 202, 230);

#endif
    //CScalerLoadHardwareVLCFont(tLOGO_AIFA, 0x00);
    COsdLoadFontLoadLogoFont();

    COsdFxMapSetting(_OSD_MAP8);
    COsdFxClearText(0, 0, 6, 46);//add by xyw 080219
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    COsdFxLoadText(ROW(0), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA3);
    COsdFxLoadText(ROW(4), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA4);
    COsdFxLoadText(ROW(5), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA5);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)

    COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
    //COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
    //COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
    /*
    COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
    COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
    COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
    */
//20080826 ccy modify
#elif (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_OSTAR)
    COsdFxLoadText(ROW(0), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA3);
    COsdFxLoadText(ROW(4), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA4);
    COsdFxLoadText(ROW(5), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA5);

    COsdFxHLine(ROW(0), COL(0), 46, 2<<4, _WRITE_BYTE2);
    COsdFxHLine(ROW(1), COL(0), 46, 2<<4, _WRITE_BYTE2);
    COsdFxHLine(ROW(2), COL(0), 46, 2<<4, _WRITE_BYTE2);
    COsdFxHLine(ROW(3), COL(0), 46, 2<<4, _WRITE_BYTE2);
    COsdFxHLine(ROW(4), COL(0), 46, 3<<4, _WRITE_BYTE2);
    COsdFxHLine(ROW(5), COL(0), 46, 3<<4, _WRITE_BYTE2);

#endif
    COsdCoreShowInfoSetPos(_OSD_MAP8);

    CPowerPanelOn();
    COsdFxEnableOsd();//modified by xyw 080219

    //CTimerDelayXms(3000);

    //LED_Message(_LED_MSG_GREEN);
    //CTimerDelayXms(400);//modified by xyw 080219
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);


#endif	//#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
    CAdjustBackgroundColor(0, 0, 0);
#endif

    COsdColorPalette(Palette_7_4bit);

    //COsdDispFirstTimeLoadFont();		//dong disable 20081114

//20080826ccy modify
#if (_PCB_TYPE == _PCB_TEST)
#if _ADD_CHINESE
    //if (!bVChipMenuChangeStatus)
    {
        COsdDispFirstTimeLoadFont();
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
        COsdLoadfontLoadChineseBankFont(0);
        COsdDispLoadChineseFont(0);
#else
        COsdDispLoadFont1(GET_LANGUAGE());

#endif
    }
#endif
#endif


    CTimerDelayXms(20);
}

#else
void COsdDispPowerOnLogoProc(void)
{
#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdColorPalette(Palette_logo);
    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
CAdjustBackgroundColor(0xff, 0xff, 0xff);
#endif
    CScalerLoadHardwareVLCFont(tLOGO_AIFA, 0x00);
    COsdLoadFontLoadLogoFont();

    COsdFxMapSetting(_OSD_MAP8);

#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    COsdFxLoadText(ROW(0), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA3);
    COsdFxLoadText(ROW(4), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA4);
    COsdFxLoadText(ROW(5), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA5);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)

COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
//COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
//COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
/*
COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
*/
#endif
    COsdCoreShowInfoSetPos(_OSD_MAP8);

    COsdFxEnableOsd();

    CPowerPanelOn();

    CTimerDelayXms(3000);

#endif	//#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
CAdjustBackgroundColor(0, 0, 0);
#endif

    COsdColorPalette(Palette_7_4bit);

    COsdDispFirstTimeLoadFont();

    CTimerDelayXms(20);
}
#endif

#endif

static CosdCoreShowNoteMessage(UINT8 ucRow, UINT8 ucCol,UINT16 ucSpaceLength,UINT8 ucItemCount,UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucLanguageSelect)
{
    ucSpaceLength=ucSpaceLength;
    COsdFxLoadText(ucRow, ucCol, 0x00, ucForegroundColor, ucBackgroundColor, ucLanguageSelect, tOsdFontNoteMessageSet[ucItemCount]);
}
#ifdef DRAW_SLIDER//  jinsuo add 20100420
void COsdCoreDrawSlider()
{
    static  BYTE  ucCount;

    if (GET_INPUTSOURCE_TYPE() != _SOURCE_YPBPR || ucCount >= 11)
    {
        ucCount = 0;
        return;
    }
    if (ucCount)
    {
        COsdFxLoadText(1, ucCount, 0, _CP_RED, _CP_BLACK, GET_LANGUAGE(),
                       tOsdYPbPrLoadStrSet[1]);
        ucCount ++;
        return;
    }
    CTimerCancelTimerEvent(COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

//        COsdFxSetWinRefPos(333, 360);
    COsdFxSetWinRefPos((_DISP_WID-_WIN_LOADSTR_WIDTH*2)/2, (_DISP_LEN-
                       _WIN_LOADSTR_LEN)/2);
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&tOsdSignalSource_BackgroundWindow1);

    COsdFxLoadText(0, 0, 0, _CP_COLOR07, _CP_BLACK, GET_LANGUAGE(),
                   tOsdYPbPrLoadStrSet[0]);



    COsdFxEnableOsd();

    CPowerPanelOn();
    CTimerDelayXms(80);
    CPowerLightPowerOn();


    for (ucCount = 0; ucCount < 11; ucCount++)
    {
        COsdFxLoadText(1, ucCount, 0, _CP_RED, _CP_BLACK, GET_LANGUAGE(),
                       tOsdYPbPrLoadStrSet[1]);
        CTimerDelayXms(200);
    }

}
#endif

#if( SKYWORTH_OSD == _ENABLE)								//add by lbh 20090916

void COsdCoreShowSourceMessage()
{
#if _Change_SOURCE_Type==Change_SOURCE_Type3

    UINT8 ucCount;
    UINT8  sourcetemp_sel;
    WindowStyle stSelectedWn;

    CTimerCancelTimerEvent(COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdCoreShowInfoSetPos(_OSD_MAP5);
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(9);
#endif
    CosdCoreShowInfoDrawWin(_INPUT_PORT_MAX);

    sourcetemp_sel = stSystemData.InputSource;
    ucSourceTemp = sourcetemp_sel; //reset for change source display

    for (ucCount = 0; ucCount < _INPUT_PORT_MAX; ucCount++)// tSignalSourceSetP_temp.ucItemCount
    {
        //method: pre-arrow
        //COsdFxLoadText(ucCount+1, 2, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[ucCount]);
        //method: item window
        COsdFxLoadText(ucCount+1, 1, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[ucCount]);
    }

    //set arrow that point to new source
    //COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_R_, _WRITE_BYTE1);

    //Move Select Window
    stSelectedWn = tOsdSignalSource_MoveWindow;
    stSelectedWn.stPosition.usXEnd = tOsdSignalSource_BackgroundWindow.stPosition.usXStart+3*12+2*COsdFxCalTextWidth(GET_LANGUAGE(), tOsdSignalItemStrSet[ucSourceTemp]);
    stSelectedWn.stPosition.usYStart = tOsdSignalSource_BackgroundWindow.stPosition.usYStart+ucSourceTemp*(18*2)+18;
    stSelectedWn.stPosition.usYEnd = stSelectedWn.stPosition.usYStart + (18*2);

    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&stSelectedWn);
    //clear unused line to prevent garbage
    COsdFxClearText(_INPUT_PORT_MAX+1, 0, _OSD_SOURCENOTE_ROW-(_INPUT_PORT_MAX+1), _OSD_SOURCENOTE_COL);

    CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
    COsdFxEnableOsd();

#else

    UINT8 ucCount;
    UINT8  sourcetemp_sel;

    ucCount = 0;

    CTimerCancelTimerEvent(COsdFxExitEvent);//

    //COsdFxDisableOsd();
    COsdFxMapSetting(_OSD_MAP5);	//_OSD_MAP6

    COsdCoreShowInfoSetPos(_OSD_MAP5);
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(9);
#endif

    CosdCoreShowInfoDrawWin(_INPUT_PORT_MAX);

    sourcetemp_sel = stSystemData.InputSource;
    ucSourceTemp = sourcetemp_sel; //reset for change source display

    for (ucCount = 0; ucCount < _INPUT_PORT_MAX; ucCount++)// tSignalSourceSetP_temp.ucItemCount
    {
        COsdFxLoadText(ucCount+1, 2, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[ucCount]);//modified by xyw 071019
    }

    COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_R_, _WRITE_BYTE1);//xyw

    COsdFxClearText(_INPUT_PORT_MAX+1, 0, _OSD_SOURCENOTE_ROW-(_INPUT_PORT_MAX+1), _OSD_SOURCENOTE_COL);

    CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
    COsdFxEnableOsd();
#endif


}
void COsdCoreSourceSelectEventProc(void)
{
#if(_Change_SOURCE_Type == Change_SOURCE_Type3)
    WindowStyle  stSelectedWn ;
    switch (ucOsdMessage)
    {
    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
    case _MENU_KEY_MESSAGE:
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106
#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC
#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
#endif	//#if _CUSTOMER_CGT
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        CTimerCancelTimerEvent(COsdChangeSourceEvent);
        return;
        break;
    default:
        break;
    }

    if ((ucOsdMessage != _SOURCE_KEY_MESSAGE)&&(ucOsdMessage != _RIGHT_KEY_MESSAGE) &&(ucOsdMessage != _LEFT_KEY_MESSAGE))
        return;

    CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);

    if ((ucOsdMessage == _RIGHT_KEY_MESSAGE ) ||  (ucOsdMessage == _LEFT_KEY_MESSAGE))
    {
        if (ucSourceTemp !=stSystemData.InputSource)
        {
            COsdChangeSourceEvent();
        }
        else
        {
            COsdFxDisableOsd();
            COsdFxExitEvent();
        }
        CTimerCancelTimerEvent(COsdChangeSourceEvent);
    }
    else if (ucOsdMessage == _SOURCE_KEY_MESSAGE)
    {
        if (ucSourceTemp + 1 > (_INPUT_PORT_MAX - 1))
            ucSourceTemp = 0;
        else
            ucSourceTemp += 1;
        CTimerReactiveTimerEvent(SEC(2), COsdChangeSourceEvent);
    }

    //clr arrow that point to current source
    //COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), 0x00, _WRITE_BYTE1);

    //set arrow that point to new source
    //COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_R_, _WRITE_BYTE1);//xyw

    //Move Select Window
    stSelectedWn = tOsdSignalSource_MoveWindow;
    stSelectedWn.stPosition.usXEnd = tOsdSignalSource_BackgroundWindow.stPosition.usXStart+3*12+2*COsdFxCalTextWidth(GET_LANGUAGE(), tOsdSignalItemStrSet[ucSourceTemp]);
    stSelectedWn.stPosition.usYStart = tOsdSignalSource_BackgroundWindow.stPosition.usYStart+ucSourceTemp*(18*2)+18;
    stSelectedWn.stPosition.usYEnd = stSelectedWn.stPosition.usYStart + (18*2);

    COsdFxCloseWindow(stSelectedWn.ucWindowID);
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&stSelectedWn);

#else	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G

    WindowStyle  stSelectedWn ;

    stSelectedWn = tOsdSignalSource_MoveWindow;

    switch (ucOsdMessage)
    {
    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
#if _PCB_TYPE!=_PCB_PT2660_KTC57924G
    case _MENU_KEY_MESSAGE:
#endif
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106
#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
        break;
    default:
        break;
    }

    if ((ucOsdMessage != _UP_KEY_MESSAGE) &&(ucOsdMessage != _SOURCE_KEY_MESSAGE)&&
            (ucOsdMessage != _DOWN_KEY_MESSAGE) &&(ucOsdMessage != _RIGHT_KEY_MESSAGE))
        return;

    CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);//tommyliao --add reset time out



    if ( (ucOsdMessage == _RIGHT_KEY_MESSAGE ) )
    {
        if (ucSourceTemp !=stSystemData.InputSource) //ucTmpRow
        {
            COsdChangeSourceEvent();

        }
        else
        {
            COsdFxDisableOsd();
            COsdFxExitEvent();
        }
        return;
    }
    else if (ucOsdMessage == _SOURCE_KEY_MESSAGE)
    {
        COsdFxDisableOsd();
        COsdFxExitEvent();
        return;
    }

    //COsdFxChange1bitColor(ucSourceTemp, 0, 1, 10, _CP_WHITE, _CP_BLACK);
    //clr arrow that point to current source
    COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), 0x00, _WRITE_BYTE1);

    if (ucOsdMessage == _UP_KEY_MESSAGE)
    {
        if (ucSourceTemp == 0)
            ucSourceTemp = _INPUT_PORT_MAX - 1;
        else
            ucSourceTemp -= 1;
    }
    else if (ucOsdMessage == _DOWN_KEY_MESSAGE)
    {
        if (ucSourceTemp + 1 > (_INPUT_PORT_MAX - 1))
            ucSourceTemp = 0;
        else
            ucSourceTemp += 1;
    }

    //COsdFxChange1bitColor(ucSourceTemp, 0, 1, 10, _CP_BLUE, _CP_BLACK);
    //set arrow that point to new source
    COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_R_, _WRITE_BYTE1);//xyw

    //Move Select Window
    //stSelectedWn.stPosition.usYStart = tOsdSignalSource_BackgroundWindow.stPosition.usYStart+ucSourceTemp*32+7; //ucTmpRow
    //stSelectedWn.stPosition.usYEnd = stSelectedWn.stPosition.usYStart + 32; //23 * 2

    //COsdFxCloseWindow(stSelectedWn.ucWindowID);//gary for source menu select bar shake
    //CTimerWaitForEvent(_EVENT_DEN_STOP);  //tommy liao add for prevent osd shake
    //COsdFxDrawWindow(&stSelectedWn);


#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G
}
#endif

//return : address of str (end with _END_)
//input:	num:0-999, "0" ahead if flag=0, else "-" ahead

UINT8* COsdCoreGetNumberStr(UINT16 num, BIT flag)
{
    UINT8 ucNumberStr[4];
    UINT8 preChar;

    preChar = (flag) ? (_MINUS_) : (_0_);

    if (num>999)
        num%=1000;

#if 0//(_TV_SEL_CH_M3)
    if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num > 0){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = preChar;
        ucNumberStr[3] = _END_;
    }

#elif (_TV_SEL_CH_M2)
    if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num > 0){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = preChar;
        ucNumberStr[3] = _END_;
    }

#else
    if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = 0x00;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
        //ucNumberStr[0] = _0_+num/10;
        //ucNumberStr[1] = _0_+num-((num/10)*10);
        //ucNumberStr[2] = _END_;
    }
    else{
        ucNumberStr[0] = 0x00;
        ucNumberStr[1] = 0x00;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
        //ucNumberStr[0] = _0_+num;
        //ucNumberStr[1] = _END_;
    }
#endif

    return ucNumberStr;

}

UINT8* COsdCoreGetChannelStr(void)
{
    return COsdCoreGetNumberStr(stTvInfo.CurChn, 0);

}
/*
UINT8* COsdCoreGetFrequencyStr(void)
{
	UINT8 str[10];

	str[0] = _5_;
	str[1] = _5_;
	str[2] = _M_;
	str[3] = _H_;
	str[4] = _z_;
	str[5] = _END_;
	return str;

}
*/
UINT8* COsdCoreGetBandStr(void)
{
    switch (GET_TV_BAND())
    {
        //case _VHFL_BAND:
        //	return tOsdTvBandStrSet[0];
        //	break;
    case _VHFH_BAND:
        return tOsdTvBandStrSet[1];
        break;
    case _UHF_BAND:
        return tOsdTvBandStrSet[2];
        break;
    default:
        return tOsdTvBandStrSet[0];
        break;
    }
}

UINT8* COsdCoreGetTvAudioSysStr(void)
{
    //return tOsdAudioTypeSet[GET_CURR_AUDIO_SYS()];
    return tOsdAudioSysSet[GET_CURR_AUDIO_SYS()];
}

UINT8* COsdCoreGetTvVideoSysStr(void)
{

    return tOsdVideoSysSet[GET_TV_VIDEO_SYS()];

}

UINT8* COsdCoreGetTvChannelAddEraseStr(void)
{
    if (CTvGetChStatus(stTvInfo.CurChn))
        return tOsdChannelAddEreaseStrSet[1];
    else
        return tOsdChannelAddEreaseStrSet[0];
}

#if _TUNER_TYPE!=_TUNER_NONE

#define _TV_SRCH_CONTENT_COL		20
/*
void COsdCoreTvShowChannel(UINT8 ch)
{
	//show channel at end of Item: Current Channel
	COsdFxShowNumber(ROW(4+1), COL(_TV_SRCH_CONTENT_COL),  ch, 0x33, _CP_COLOR06);//modified by xyw 070929
}
*/
#if 0
void COsdCoreTvShowFrequency(UINT16 freq)
{
    DWORD temp2;

    //show frequency at end of Item: Frequency
    //freq: (pdb-_IF_FREQ_FACROR)*0.05 = (pdb-_IF_FREQ_FACROR)/20
    //czl 071205
    if ((((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR)<100)
        COsdFxClearText(ROW(4+3), COL(_TV_SRCH_CONTENT_COL-4), 1, 1);
    COsdFxShowNumber(ROW(4+3), COL(_TV_SRCH_CONTENT_COL-2),  ((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR, 0x32, _CP_COLOR06/*_CP_COLOR00*/);//modified by xyw 070929

    temp2=(((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*5;
    COsdFxShowNumber(ROW(4+3), COL(_TV_SRCH_CONTENT_COL),  temp2, 0x33, _CP_COLOR06/*_CP_COLOR00*/);//modified by xyw 070929
    COsdFxHLine(ROW(4+3), COL(_TV_SRCH_CONTENT_COL-1), LENGTH(1), _DOT_, _WRITE_BYTE1);
    COsdFxChange1bitColor(ROW(4+3),COL(_TV_SRCH_CONTENT_COL-1),HEIGHT(1), 1, _CP_COLOR06/*_CP_COLOR00*/, _CP_BLACK);
#if 0
    {
        UINT8 usRes;
        BYTE BITS_L,BITS_H;
        COsdFxHLine(ROW(4+3), COL(_TV_SRCH_CONTENT_COL+3), 1, _DOT_, _WRITE_BYTE1);

        usRes = ( (((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*(100/4))/(_STEP_FACTOR/4);
        usRes%=100;
        if (usRes>=10)
        {
            BITS_H = usRes/10;
            BITS_L = usRes%10;
        }
        else
        {
            BITS_H = 0;
            BITS_L = usRes;
        }
        BITS_L = BITS_L+_0_;
        BITS_H = BITS_H+_0_;
        COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+1, 1, BITS_H, _WRITE_BYTE1);
        COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+2, 1, BITS_L, _WRITE_BYTE1);

        COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+3, 3, _CP_COLOR06/*_CP_COLOR05*/<<4, _WRITE_BYTE2);
    }
#else
    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 1, _M_, _WRITE_BYTE1);
    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+4, 1, _H_, _WRITE_BYTE1);
    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+5, 1, _z_, _WRITE_BYTE1);
    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 3, _CP_COLOR06/*_CP_COLOR00*/<<4, _WRITE_BYTE2);//modified by xyw 070929
#endif


    /*
    	//show frequency at end of Item: Frequency
    	//freq: (pdb-_IF_FREQ_FACROR)*0.05 = (pdb-_IF_FREQ_FACROR)/20
    	//czl 071205
    	if((((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR)<100)
    		COsdFxClearText(ROW(4+3), COL(_TV_SRCH_CONTENT_COL+2), 1, 1);
    	COsdFxShowNumber(ROW(4+3), COL(_TV_SRCH_CONTENT_COL),  ((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR, 0x33, _CP_COLOR06);//modified by xyw 070929

    #if 0
    {
    	UINT8 usRes;
    	BYTE BITS_L,BITS_H;
    	COsdFxHLine(ROW(4+3), COL(_TV_SRCH_CONTENT_COL+3), 1, _DOT_, _WRITE_BYTE1);

    	usRes = ( (((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*(100/4))/(_STEP_FACTOR/4);
    	usRes%=100;
    	if (usRes>=10)
    	{
    		BITS_H = usRes/10;
    		BITS_L = usRes%10;
    	}
    	else
    	{
    		BITS_H = 0;
    		BITS_L = usRes;
    	}
    	BITS_L = BITS_L+_0_;
    	BITS_H = BITS_H+_0_;
    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+1, 1, BITS_H, _WRITE_BYTE1);
    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+2, 1, BITS_L, _WRITE_BYTE1);

    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+3, 3, _CP_COLOR05<<4, _WRITE_BYTE2);
    }
    #else
    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 1, _M_, _WRITE_BYTE1);
    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+4, 1, _H_, _WRITE_BYTE1);
    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+5, 1, _z_, _WRITE_BYTE1);
    	COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 3, _CP_COLOR06<<4, _WRITE_BYTE2);//modified by xyw 070929
    #endif
    */
}
void COsdCoreTvShowBand(UINT16 freq)
{
    UINT8 pBandStr[5];

    //55Mhz show as UHF, why??
    //pData[8] = (freq<_VH_HIGH_STAR) ?_VHFL_BAND : ((freq < _UHF_STAR) ?_VHFH_BAND : _UHF_BAND);
    if (freq<_VH_HIGH_STAR)
        pData[8]=_VHFL_BAND;

    else if (freq<_UHF_STAR)
        pData[8]=_VHFH_BAND;

    else if (freq<_UHF_END)
        pData[8]=_UHF_BAND;

    else
        pData[8]=_VHFL_BAND;

    if (pData[8] == _VHFL_BAND)
    {
        pBandStr[0] = _V_;
        pBandStr[1] = _H_;
        pBandStr[2] = _F_;
        pBandStr[3] = _MINUS_;
        pBandStr[4] = _L_;
    }
    else if (pData[8] == _VHFH_BAND)
    {
        pBandStr[0] = _V_;
        pBandStr[1] = _H_;
        pBandStr[2] = _F_;
        pBandStr[3] = _MINUS_;
        pBandStr[4] = _H_;
    }
    else if (pData[8] == _UHF_BAND)
    {
        pBandStr[0] = _U_;
        pBandStr[1] = _H_;
        pBandStr[2] = _F_;
        pBandStr[3] = 0x00;
        pBandStr[4] = 0x00;
    }

    //show band info at end of Item: band
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+0), LENGTH(5), ((_CP_COLOR06& 0x0f) << 4) &0xf0, _WRITE_BYTE2);//modified by xyw 070929
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+0), LENGTH(1), pBandStr[0], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+1), LENGTH(1), pBandStr[1], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+2), LENGTH(1), pBandStr[2], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+3), LENGTH(1), pBandStr[3], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+4), LENGTH(1), pBandStr[4], _WRITE_BYTE1);
}
#endif

void COsdManualScanShow(UINT8 ch)
{
    //MenuItem * pMenuItem;
    //ItemObject * pItemObject;
    //ItemSlider1 xdata stItemSlider1;
    UINT8 ucSubMenu;

    //extern void COsdCoreTvShowFrequencySlider1(UINT8 row, UINT8 col, UINT16 freq);

    ch = ch;
    //pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    //pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
    //COsdCoreTvShowChannel(ch);
    //COsdCoreTvShowFrequency(stTvPdb.pdb);
    //COsdCoreTvShowFrequencySlider1(pMenuItem->ucStartRow+2*(stLayerStack[ucLayerIndex].ucSubMenu - 1) -1, _ITEMVAL_START_COL+_ITEMSLIDER_LEN-3-6, stTvPdb.pdb);
    //COsdCoreTvShowBand(stTvPdb.pdb);
    //show manual srch slider bar at Line 12
    //COsdCoreFreshItem(1);


    //stItemSlider1 = *((ItemSlider1*)pItemObject->pStruct);

    //COsdFxFullSlider1(pMenuItem->ucStartRow+2*(stLayerStack[ucLayerIndex].ucSubMenu - 1), _ITEMVAL_START_COL, &stItemSlider1, 1);

    ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;

    stLayerStack[ucLayerIndex].ucSubMenu = 6;
    COsdCoreFreshItem(1);
    //stLayerStack[ucLayerIndex].ucSubMenu = 7;
    //COsdCoreFreshItem(1);

    stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
}

void COsdAutoScanShow(UINT8 ch)
{
    MenuItemSet * pMenuItemSet;
    MenuItem * pMenuItem;
    ItemObject * pItemObject;
    ItemSlider xdata stItemSlider;

    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    pMenuItem = 	((MenuItem *[])pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu-1]);

    stItemSlider = *((ItemSlider*)pItemObject->pStruct);

    //ch
    COsdFxShowNumber(_ITEMSLIDER_EXTADJ_ROW-1, _ITEMSLIDER_EXTADJ_COL+_ITEMSLIDER_EXTADJ_LEN, ch, 0x23, _CP_3);
    //slider
    COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, 0, &stItemSlider,1);
    //frequency
    COsdFxTvShowFrequencySlider(_ITEMSLIDER_EXTADJ_ROW+1, _ITEMSLIDER_EXTADJ_COL+5, stTvPdb.pdb);
    //band
    COsdFxLoadText(_ITEMSLIDER_EXTADJ_ROW+1, _ITEMSLIDER_EXTADJ_COL+_ITEMSLIDER_EXTADJ_LEN-3, 0, _CP_3, _CP_0, GET_LANGUAGE(), COsdCoreGetBandStr());

}

#endif	//#if _TUNER_TYPE!=_TUNER_NONE


BYTE CTvSelectChannelGetTargetChannel(BYTE op)
{
    BYTE	chn;
    BIT result = 0;

    chn = stTvInfo.CurChn;

    switch (op)
    {
    case _TV_PREV_CHANNEL:

        //range: 2-GET_TV_MAX_CH()
        if (chn<=_FIRST_CHANNEL)
            chn = GET_TV_MAX_CH()-1;
        else
            chn -= 1;

        while (chn != stTvInfo.CurChn)
        {
            if (stTvChStatus.ChStatus[chn>>3] &(_BIT0<<(chn%8)))
            {
                result = 1;
                break;
            }
            if (chn<=_FIRST_CHANNEL)
                chn = GET_TV_MAX_CH()-1;
            else
                chn = chn-1;
        }
        // No any other valid channel is found, return to current channel
        if (result == 0)
            chn = stTvInfo.CurChn;

        //if current channel is also invalid, we return the first channel.
        if (!CTvGetChStatus(chn))
#if 1//(_TV_CH0_UNSAVE)
            chn = 1;
#else
            chn = _FIRST_CHANNEL;
#endif

        break;

    case _TV_NEXT_CHANNEL:

        //range: _FIRST_CHANNEL~GET_TV_MAX_CH()

        chn = ((chn+1)==GET_TV_MAX_CH())?_FIRST_CHANNEL:(chn+1);//chn = (chn+1)%GET_TV_MAX_CH();      //dong alter 20080910

        while (chn != stTvInfo.CurChn)
        {
            if (stTvChStatus.ChStatus[chn>>3] &(_BIT0<<(chn%8)))
            {
                result = 1;
                break;
            }
            chn = ((chn+1)==GET_TV_MAX_CH())?_FIRST_CHANNEL:(chn+1);//chn = (chn+1)%GET_TV_MAX_CH();      //dong alter 20080910
        }
        // No any other valid channel is found, return to current channel
        if (result == 0)
            chn = stTvInfo.CurChn;

        //if current channel is also invalid, we return the first channel.
        if (!CTvGetChStatus(chn))
#if 1//(_TV_CH0_UNSAVE)
            chn = 1;
#else
            chn = _FIRST_CHANNEL;
#endif


        break;

    case _TV_LAST_CHANNEL:

        chn = stTvInfo.PreChn;

        break;

    case _TV_CURR_CHANNEL:

        chn = stTvInfo.CurChn;

        break;
    }

    return chn;
}

void COsdChangeTVChannelProc(void)
{
    BYTE ch;
   // BYTE MUTE_SW;
	
    CPowerLightPowerOff();
#if DINISHI_CHANGESOURCE_DVD_TV_MUTE
//	SET_MUTE_PROCESS(1);//JINSUO ADD 20100710
      //      MUTE_SW= stAudioData.Volume;
	CTimerDelayXms(100);
		CAudioChipWrVolumeGradual(stAudioData.Volume, 1);	
					CTimerDelayXms(200);
					SET_MUTE_PROCESS(1);
#endif	
    // CTimerReactiveTimerEvent(SEC(0.1), CKeyScanReadyTimerEvent);
#if _USE_MISC_KEY_STATE
    //SET_POWER_ON_STATE() ;
    MCU_IR_STATUS_FF89	&= ~_BIT0;//|_BIT1;//enable IR
#endif

    COsdFxDisableOsd();
    if (/*ucOsdMessage == _UP_KEY_MESSAGE ||*/ ucOsdMessage == _CHANNEL_INC_MESSAGE)
        ch = CTvSelectChannelGetTargetChannel(_TV_NEXT_CHANNEL);
    else if (/*ucOsdMessage == _DOWN_KEY_MESSAGE ||*/ ucOsdMessage == _CHANNEL_DEC_MESSAGE)
        ch = CTvSelectChannelGetTargetChannel(_TV_PREV_CHANNEL);

    stTvInfo.PreChn=stTvInfo.CurChn;
    stTvInfo.CurChn = ch;
    CEepromSaveTvData();

    CTvTunerChangeChannel();
#if _USE_MISC_KEY_STATE
    MCU_IR_STATUS_FF89		|=_BIT0;//|_BIT1;//enable IR
#endif

    //CPowerLightPowerOn();
    //COsdFxShowSource();
}

void COsdCoreReturnPrevChannel(void)
{
    BYTE ch;
    COsdFxDisableOsd();

    ch = stTvInfo.CurChn;
    stTvInfo.CurChn = stTvInfo.PreChn;
    stTvInfo.PreChn = ch;
    CEepromSaveTvData();

    CTvTunerChangeChannel();
    COsdFxShowSource();
}

#if 1//_TV_SEL_CH_M3
#if 1//(_TV_SEL_CH_M3)

//return : address of str (end with _END_)
//input:	num:0-999, digital according to hyperlink len

UINT8* COsdCoreGetNumberStrOfTvHyper(UINT16 num, UINT8 total)
{
    UINT8 ucNumberStr[4];
    UINT8 preChar;

    total = total;

    preChar = _MINUS_;

    if (num>999)
        num%=1000;

#if (_TV_SEL_CH_M3)
    if (num>=100)
    {
        //ucNumberStr[0] = _0_+num/100;
        //ucNumberStr[1] = _0_+(num%100)/10;
        //ucNumberStr[2] = _0_+num-((num/10)*10);
        //ucNumberStr[3] = _END_;
        //switch (GET_TV_HYPERLINK_INPUTBIT())
        //{
        //	case 3:
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
        //		break;
        //}
    }
    else if (num>=10){
        //ucNumberStr[0] = preChar;
        //ucNumberStr[1] = _0_+num/10;
        //ucNumberStr[2] = _0_+num-((num/10)*10);
        //ucNumberStr[3] = _END_;
        switch (GET_TV_HYPERLINK_INPUTBIT())
        {
        case 2:
            if (GET_TV_HYPERLINK_LEN()==1)
            {
                ucNumberStr[0] = _0_+num/10;
                ucNumberStr[1] = _0_+num-((num/10)*10);
                ucNumberStr[2] = _END_;
            }
            else
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_+num/10;
                ucNumberStr[2] = _0_+num-((num/10)*10);
                ucNumberStr[3] = _END_;
            }
            break;
            /*
            case 3:
            if (GET_TV_HYPERLINK_LEN()==3)
            {
            	ucNumberStr[0] = _0_;
            	ucNumberStr[1] = _0_+num/10;
            	ucNumberStr[2] = _0_+num-((num/10)*10);
            	ucNumberStr[3] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==2)
            {
            	//ucNumberStr[0] = _0_;
            	ucNumberStr[0] = _0_+num/10;
            	ucNumberStr[1] = _0_+num-((num/10)*10);
            	ucNumberStr[2] = _END_;
            }
            break;
            */
        }
    }
    else if (num > 0){
        //ucNumberStr[0] = preChar;
        //ucNumberStr[1] = preChar;
        //ucNumberStr[2] = _0_+num;
        //ucNumberStr[3] = _END_;
        switch (GET_TV_HYPERLINK_INPUTBIT())
        {
        case 1:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = preChar;
                ucNumberStr[2] = _0_+num;
                ucNumberStr[3] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
                //ucNumberStr[0] = preChar;
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_+num;
                ucNumberStr[2] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==1)
            	{
            	//ucNumberStr[0] = preChar;
            	//ucNumberStr[1] = preChar;
            	ucNumberStr[0] = _0_+num;
            	ucNumberStr[1] = _END_;
            	}
            	*/
            break;
        case 2:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_;
                ucNumberStr[2] = _0_+num;
                ucNumberStr[3] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==2)
            	{
            	//ucNumberStr[0] = preChar;
            	ucNumberStr[0] = _0_;
            	ucNumberStr[1] = _0_+num;
            	ucNumberStr[2] = _END_;
            	}
            else if (GET_TV_HYPERLINK_LEN()==1)
            	{
            	//ucNumberStr[0] = preChar;
            	//ucNumberStr[1] = _0_;
            	ucNumberStr[0] = _0_+num;
            	ucNumberStr[1] = _END_;
            	}
            	*/
            break;
            /*
            case 3:
            //execute, Not show
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_;
            ucNumberStr[2] = _0_+num;
            ucNumberStr[3] = _END_;
            break;
            */
        }
    }
    else{
        //ucNumberStr[0] = preChar;
        //ucNumberStr[1] = preChar;
        //ucNumberStr[2] = preChar;
        //ucNumberStr[3] = _END_;
        switch (GET_TV_HYPERLINK_INPUTBIT())
        {
        case 1:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = preChar;
                ucNumberStr[2] = _0_;
                ucNumberStr[3] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
                //ucNumberStr[0] = preChar;
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_;
                ucNumberStr[2] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
            	//ucNumberStr[0] = preChar;
            	//ucNumberStr[1] = preChar;
            	ucNumberStr[0] = _0_;
            	ucNumberStr[1] = _END_;
            }
            */
            break;
        case 2:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_;
                ucNumberStr[2] = _0_;
                ucNumberStr[3] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==2)
            {
            	//ucNumberStr[0] = preChar;
            	ucNumberStr[0] = _0_;
            	ucNumberStr[1] = _0_;
            	ucNumberStr[2] = _END_;
            }
            */
            break;
            /*
            case 3:
            //execute, Not show
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_;
            ucNumberStr[2] = _0_;
            ucNumberStr[3] = _END_;
            break;
            */
        }
    }

#endif

#if _TV_SEL_CH_M2
    preChar = 0x00;

    if (num>999)
        num%=1000;

    if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num > 0){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_;
        ucNumberStr[3] = _END_;
    }
    /*
    	if (total>=2)
    	{
    	}
    	else if (total==1)
    	{
    		ucNumberStr[0] = 0x00;
    	}
    	else
    	{
    		ucNumberStr[0] = 0x00;
    		ucNumberStr[1] = 0x00;
    	}
    */
#endif	//#if _TV_SEL_CH_M2

    return ucNumberStr;

}

#endif

//return : address of str (end with _END_)
//input:	num:0-9999, "0" is not ahead

UINT8* COsdCoreGetNumberStr2(UINT16 num)
{
    UINT8 ucNumberStr[5];

    if (num>9999)
        num%=10000;

    if (num>=1000){
        ucNumberStr[0] = _0_+num/1000;
        num = num%1000;

        ucNumberStr[1] = _0_+num/100;
        ucNumberStr[2] = _0_+(num%100)/10;
        ucNumberStr[3] = _0_+num-((num/10)*10);
        ucNumberStr[4] = _END_;
    }
    else if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = _0_+num/10;
        ucNumberStr[1] = _0_+num-((num/10)*10);
        ucNumberStr[2] = _END_;
    }
    else{
        ucNumberStr[0] = _0_+num;
        ucNumberStr[1] = _END_;
    }

    return ucNumberStr;

}

// item : 0 for minus, 1 for channel
void COsdCoreShowTVHyperlinkItem(bit item)
{
    UINT8 tHyperlinkStr[4];
    UINT8 *ptr;
    //UINT16 xdata usItemStart;

    //Display Window


#if 0
    tHyperlinkStr[0] = 0x00;
    tHyperlinkStr[1] = 0x00;
    tHyperlinkStr[2] = 0x00;
    tHyperlinkStr[3] = _END_;

    usItemStart = 0;//GET_WIN_INFO_PREBLANK(0,tHyperlinkStr);
    //COsdFxLoadText(0, 0, usItemStart, _CP_WHITE/*GET_CP_HINT_NORMAL()*/, _CP_BLACK, 0,tHyperlinkStr);
    COsdFxLoadText(1, 0, usItemStart, _CP_WHITE/*GET_CP_HINT_NORMAL()*/, _CP_BLACK, 0,tHyperlinkStr);
#endif
    if (item)
        ptr = COsdCoreGetNumberStrOfTvHyper(GET_TV_HYPERLINK_CHANNEL(),GET_TV_HYPERLINK_LEN());
    else
    {
        switch (GET_TV_HYPERLINK_LEN())
        {
        case 1:
            tHyperlinkStr[0] = _MINUS_;
            tHyperlinkStr[1] = _MINUS_;
            tHyperlinkStr[2] = _END_;
            break;
        case 2:
            tHyperlinkStr[0] = _MINUS_;
            tHyperlinkStr[1] = _MINUS_;
            tHyperlinkStr[2] = _MINUS_;
            tHyperlinkStr[3] = _END_;
            break;
        case 0:
        default:
            tHyperlinkStr[0] = _MINUS_;
            tHyperlinkStr[1] = _END_;
            break;
        }
        ptr = tHyperlinkStr;
    }

    COsdFxDisableOsd();
    CTimerCancelTimerEvent(COsdFxExitEvent);
    CTimerActiveTimerEvent(SEC(3), COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdCoreShowInfoSetPos(_OSD_MAP5);

    //COsdFxDrawWindow(&tOsdSignalSource_BackgroundWindow);
//20080904 ccy modify
    COsdFxClearText(_INFO_ROW+0,_INFO_COL+0,10,30);
    usItemStart = GET_WIN_INFO_PREBLANK(0,ptr);
    COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_8/*GET_CP_HINT_NORMAL()*/, _CP_BLACK, 0,ptr);
    //20080919 ccy cancel show window
    //CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();

}
#if (_TV_SEL_CH_M3)
/*void COsdTvHyperAddHyperlinkLen(void)
{
	stTVHyperKeyData.nNumbers= (stTVHyperKeyData.nNumbers+1)%3;
}
*/
void COsdTvHyperAddNum(UINT8 num)
{
    stTVHyperKeyData.Numbers[0] = stTVHyperKeyData.Numbers[1];
    stTVHyperKeyData.Numbers[1] = stTVHyperKeyData.Numbers[2];
    stTVHyperKeyData.Numbers[2] = num;

    //20080418
#if (_TV_SEL_CH_M3)
    TempTvNumbers = GET_TV_HYPERLINK_CHANNEL();
#endif	//#if (_TV_SEL_CH_M3)
}
#endif

#endif

#if (_TV_SEL_CH_M2)
void COsdTvHyperAddNum(UINT8 num)
{
    stTVHyperKeyData.Numbers[0] = stTVHyperKeyData.Numbers[1];
    stTVHyperKeyData.Numbers[1] = stTVHyperKeyData.Numbers[2];
    stTVHyperKeyData.Numbers[2] = num;

    stTVHyperKeyData.nNumbers= (stTVHyperKeyData.nNumbers+1)%4;
}
#endif

#if(_PCB_TYPE!=_PCB_TEST)				//add by lbh 20090916

void COsdCoreChannelEditShowProc(void)
{
#if (_TV_SEL_CH_M3)
    CLR_TV_HYPERLINK_DATA();
    CLR_TV_HYPERLINK_INPUTBIT();
    if (ucOsdMessage==_100_KEY_MESSAGE)
    {
        //	SET_TV_HYPERLINK_LEN_INC();
        COsdCoreShowTVHyperlinkItem(0);
        CTimerCancelTimerEvent(COsdChannelEditExit);
        CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
    }
    else if (ucOsdMessage>=_0_KEY_MESSAGE&&ucOsdMessage<=_9_KEY_MESSAGE)
    {
//		COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
//		SET_TV_HYPERLINK_INPUTBIT_INC();
        if (GET_TV_HYPERLINK_LEN()==0)
        {

            CTimerCancelTimerEvent(COsdChannelEditExit);
            COsdChannelEditExit();
            //CTimerCancelTimerEvent(COsdFxExitEvent);
            CTimerReactiveTimerEvent(SEC(2),COsdFxExitEvent);
        }
        else
        {
            //COsdShowTvChannelHyperlinkNumber(GET_TV_HYPERLINK_CHANNEL());
            //20080902 ccy cancel
            //COsdCoreShowTVHyperlinkItem(1);
            CTimerCancelTimerEvent(COsdChannelEditExit);
            CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        }
    }
#elif (_TV_SEL_CH_M2)
    //CTimerCancelTimerEvent(CModeNoSignalEvent);//add by xyw 080221 at jpe
    //first number, initial
    CLR_TV_HYPERLINK_DATA();
    CLR_TV_HYPERLINK_INPUTBIT();

    COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
    SET_TV_HYPERLINK_INPUTBIT_INC();

    COsdCoreShowTVHyperlinkItem(1);
    CTimerCancelTimerEvent(COsdChannelEditExit);
    CTimerActiveTimerEvent(SEC(2), COsdChannelEditExit);
#else
    if (ucOsdMessage == _100_KEY_MESSAGE) {
        ucNumberof = 2;
        ucChannelNum = 1;
    }
    else if (ucOsdMessage >= _0_KEY_MESSAGE && ucOsdMessage <= _9_KEY_MESSAGE) {
        ucChannelNum = ucOsdMessage - _0_KEY_MESSAGE;
        ucNumberof = 1;
    }

    COsdCoreShowTVChannel(ucChannelNum, 0);
    CTimerReactiveTimerEvent(SEC(_TIMER_TV_CHANNEL_EDIT_WAIT), COsdChannelEditExit);
#endif
}

#endif
#if  (_TV_SEL_CH_M3)
void COsdCoreChannelEditEventProc(void)
{
    switch (ucOsdMessage) {
    case _100_KEY_MESSAGE :
        //CLR_SHOW_IS_NOSIGNAL_STATE();
        SET_TV_HYPERLINK_LEN_INC();
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_INPUTBIT();
        COsdCoreShowTVHyperlinkItem(0);
        CTimerCancelTimerEvent(COsdChannelEditExit);
        CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        return;

        break;

    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
        //CLR_SHOW_IS_NOSIGNAL_STATE();
        COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
        SET_TV_HYPERLINK_INPUTBIT_INC();

        if (GET_TV_HYPERLINK_INPUTBIT() >= GET_TV_HYPERLINK_LEN()+1)
        {
            CTimerCancelTimerEvent(COsdChannelEditExit);
            COsdChannelEditExit();
            CTimerReactiveTimerEvent(SEC(2),COsdFxExitEvent);
        }
        else
        {
            COsdCoreShowTVHyperlinkItem(1);
            CTimerCancelTimerEvent(COsdChannelEditExit);
            CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        }
        return;
        break;
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _CHANNEL_EDIT_MESSAGE:
    case _MENU_KEY_MESSAGE:

#if 0//(_AUDIO_EFFECT_SUPPORT)
    case _SOUND_MODE_KEY_MESSAGE:
#endif

#if 0//(_PICT_EFFECT_SUPPORT)
    case _PICT_MODE_KEY_MESSAGE:
#endif
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_INPUTBIT();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        //if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
        //	SET_SHOW_IS_NOSIGNAL_STATE();

        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _REPEAT_KEY_MESSAGE:
        return;
    default:
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_INPUTBIT();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        //if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
        //	SET_SHOW_IS_NOSIGNAL_STATE();
        COsdCoreDispatchMsg();
        return;
    }

}
#else
static void COsdCoreChannelEditEventProc(void)
{
#if (_TV_SEL_CH_M2)
    //premier, update

    //always press 0 key, we show "0" only
    if (GET_TV_HYPERLINK_CHANNEL()==0)
    {
        SET_TV_HYPERLINK_INPUTBIT(0);
    }

    switch (ucOsdMessage) {
        //case _100_KEY_MESSAGE :
        //	ucChannelNum = 1;
        //	ucNumberof = 2;
        //	break;
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
        CLR_SHOW_IS_NOSIGNAL_STATE();

        COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
        SET_TV_HYPERLINK_INPUTBIT_INC();
        break;
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _CHANNEL_EDIT_MESSAGE:
    case _MENU_KEY_MESSAGE:
#if 0//(_PAL_ONLY==0)
    case _MTS_KEY_MESSAGE:
#endif
#if 0//(_AUDIO_EFFECT_SUPPORT)
        //case _SEFFECT_KEY_MESSAGE:
    case _SOUND_MODE_KEY_MESSAGE:
#endif
#if 0//(_PICT_EFFECT_SUPPORT)
    case _PICT_MODE_KEY_MESSAGE:
#endif
#if 0//(_COLORTEMP_EFFECT_SUPPORT)
    case _COLORTEMP_KEY_MESSAGE:
#endif
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_LEN();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            SET_SHOW_IS_NOSIGNAL_STATE();

        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _REPEAT_KEY_MESSAGE:
        return;
    default:
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_LEN();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            SET_SHOW_IS_NOSIGNAL_STATE();
        COsdCoreDispatchMsg();
        return;
    }

    if (GET_TV_HYPERLINK_INPUTBIT()>=3 || GET_TV_HYPERLINK_INPUTBIT()==0)
    {
        CTimerCancelTimerEvent(COsdFxExitEvent);
        COsdChannelEditExit();
        CTimerCancelTimerEvent(COsdChannelEditExit);
    }
    else
    {
        //COsdCoreShowTVHyperlinkItem(1);
        CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        CTimerCancelTimerEvent(COsdFxExitEvent);
    }

#else
//premier, update
//UINT8 temp = COsdFxLoadBlankCmd(1, 0, (_DISP_WID - 4 * 10 * 2) / 2 - 24);
UINT8 temp = COsdFxLoadBlankCmd(1, 0, (_WINDOW_INFO_WIDTH- 4 * 10 * 2) / 2 - 24);

switch (ucOsdMessage) {
case _100_KEY_MESSAGE :
    ucChannelNum = 1;
    ucNumberof = 2;
    break;
case _0_KEY_MESSAGE:
case _1_KEY_MESSAGE:
case _2_KEY_MESSAGE:
case _3_KEY_MESSAGE:
case _4_KEY_MESSAGE:
case _5_KEY_MESSAGE:
case _6_KEY_MESSAGE:
case _7_KEY_MESSAGE:
case _8_KEY_MESSAGE:
case _9_KEY_MESSAGE:
    if (ucNumberof) {
        ucNumberof--;
        ucChannelNum = ucChannelNum * 10 + (ucOsdMessage - _0_KEY_MESSAGE);
    } else {
        ucChannelNum = ucOsdMessage - _0_KEY_MESSAGE;
        ucNumberof = 1;
    }
    break;
case _UP_KEY_MESSAGE:
case _DOWN_KEY_MESSAGE:
case _LEFT_KEY_MESSAGE:
case _RIGHT_KEY_MESSAGE:
case _CHANNEL_EDIT_MESSAGE:
case _MENU_KEY_MESSAGE:
#if (_AUDIO_EFFECT_SUPPORT)
case _SOUND_MODE_KEY_MESSAGE:
#endif
#if (_PICT_EFFECT_SUPPORT)
case _PICT_MODE_KEY_MESSAGE:
#endif
#if (_COLORTEMP_EFFECT_SUPPORT)
case _COLORTEMP_KEY_MESSAGE:
#endif

#if _USE_SYSTEM_KEY_FUNCTION  //add by xyw 080303 at jpe
case _SHOW_SYSTEM_KEY_MESSAGE:
#endif


    CTimerCancelTimerEvent(COsdChannelEditExit);
    COsdMessagePush(ucOsdMessage);
    COsdCoreSetState(_IDLE_STATE);
    return;
case _REPEAT_KEY_MESSAGE:
    return;
default:
    CTimerCancelTimerEvent(COsdChannelEditExit);
    COsdCoreDispatchMsg();
    return;
}

//COsdFxClearText(1, temp, 1, 5);		// clean text
//COsdFxShowNumber(1, temp, ucChannelNum, 0x23, _CP_HintNorm);

COsdShowTvChannelNumber(ucChannelNum);

if (ucNumberof){
    CTimerReactiveTimerEvent(SEC(_TIMER_TV_CHANNEL_EDIT_WAIT), COsdChannelEditExit);
    CTimerCancelTimerEvent(COsdFxExitEvent);
}else {
    CTimerCancelTimerEvent(COsdFxExitEvent);
    COsdChannelEditExit();
    CTimerCancelTimerEvent(COsdChannelEditExit);
}
#endif
}
#endif

void CosdCoreShowInfoDrawWin(UINT8 lines)
{
    WindowStyle stWindowInfo;
    //stWindowInfo = tDispInfo_BackgroundWindow;
    //stWindowInfo = *tDispInfo_BackgroundWindowAray[GET_OSDSKIN()];

    stWindowInfo = tOsdSignalSource_BackgroundWindow;

#if 0//_OSD_HINT_1X
    stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*(lines+1)+24+8;
#else
    stWindowInfo.stPosition.usYEnd = (stWindowInfo.stPosition).usYStart+ 18*2*(lines+1)/*+24*/;
#endif
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&stWindowInfo);
    /*
    	stWindowInfo = tDispInfo_ForegroundWindow1;
    #if _OSD_HINT_1X
    	stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*(lines+1)+24 -12*2+8;// 12*2 is 2xwingap
    #else
    	stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*2*(lines+1)+24 -12*2;// 12*2 is 2xwingap
    #endif
    	CTimerWaitForEvent(_EVENT_DEN_STOP);
    	COsdFxDrawWindow(&stWindowInfo);
    */
#if 0//(_WIN_INFO_BLEND)
    //info win translucent
    //CScalerSetBit(_OVERLAY_CTRL_6C, 0x23, ((3 & 0x07) << 2));
#endif
}

void COsdCoreShowInfoSetPos(UINT8 map)
{
    switch (map)
    {
    case _OSD_MAP5:
        COsdFxSetWinRefPos(_OSD_H_INFO_DELAY, _OSD_V_INFO_DELAY);
        break;
    case _OSD_MAP4:
        COsdFxSetWinRefPos((_DISP_WID-_WIN_NOSIGNAL_WIDTH*2)/2, (_DISP_LEN-_WIN_NOSIGNAL_LEN*2)/2);//COsdFxSetWinRefPos(_OSD_H_NOSIGNAL_DELAY, _OSD_V_NOSIGNAL_DELAY);
        break;
    case _OSD_MAP3:
        COsdFxSetWinRefPos(_OSD_H_SHORTMENU_DELAY,_OSD_V_SHORTMENU_DELAY);
        break;
#if _POWER_ON_LOGO_SUPPROT==_ON
    case _OSD_MAP8:
        COsdFxSetWinRefPos(_OSD_POWERON_LOGO_H_DELAY, _OSD_POWERON_LOGO_V_DELAY);
        break;
#endif
#if _TYPEOF_OSD_KONSTA
    case _OSD_MAPA:
        COsdFxSetWinRefPos((_DISP_WID-_WIN_AUTOADJUST_WIDTH*2)/2, (_DISP_LEN-_WIN_AUTOADJUST_LEN*2)/2);
        break;
    case _OSD_MAPB:
        COsdFxSetWinRefPos((_DISP_WID-_WIN_SLEEPREMIND_WIDTH*2)/2, (_DISP_LEN-_WIN_SLEEPREMIND_LEN*2)/2);
        break;
#endif
    }
}

void COsdChangeSourceToSpecified(UINT8 src)
{
    // If change source, cancel the no-signal event,
    // and if no signal message on screen, close it.
    CTimerCancelTimerEvent(COsdNoSignalEvent);
    COsdCoreCloseNoSignalOsd();

    COsdCtrlSetSingalSource(src);
    COsdCoreInitialze();
    CLR_FIRST_ENTRY_SHOWSOURCE();
    //COsdFxShowSource();
}


#if _TV_SWAP_BY_NUMBER
//return : address of str (end with _END_)
//input:	num:0-999, "0" ahead if flag=0, else "-" ahead

UINT8* COsdCoreGetNumberStr3(UINT16 num, UINT8 bits)
{
//#define _SHARP_	(_MINUS_-10)	//#
//#define _SHARP_	(_MINUS_)	//-
#define _SHARP_	(_0_)	//-
    UINT8 ucNumberStr[4];

    if (num>999)
        num%=1000;

    if (bits >=3){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (bits >=2){
        ucNumberStr[0] = _SHARP_;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (bits >=1){
        ucNumberStr[0] = _SHARP_;
        ucNumberStr[1] = _SHARP_;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = _SHARP_;
        ucNumberStr[1] = _SHARP_;
        ucNumberStr[2] = _SHARP_;
        ucNumberStr[3] = _END_;
    }

    return ucNumberStr;

}
#endif//#if _TV_SWAP_BY_NUMBER


#if _PAL_MASK_HUE

//skip PAL-HUE
static void COsdCoreSkipVideoHue
(	UINT8 *ucTmpSub,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucSubCount
)
{
    if (GET_VIDEO8_HUE_MASK(*ucTmpSub-1))
    {
        if (message==_UP_KEY_MESSAGE)
        {
            if (*ucTmpSub <=1)
                *ucTmpSub = ucSubCount;
            else
                *ucTmpSub -= 1;
        }
        else
        {
            if ((*ucTmpSub + 1) > ucSubCount)
                *ucTmpSub = 1;
            else
                *ucTmpSub += 1;
        }
    }
}

#endif//#if _PAL_MASK_HUE
//skip PICT_MISC
static void COsdCoreSkipPictMisc
(	UINT8 *ucTmpSub,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucSubCount
)
{
    if (GET_VGA_PICTMISC_MASK(*ucTmpSub-1))
    {
        if (message==_UP_KEY_MESSAGE)
        {
            if (*ucTmpSub <=1)
                *ucTmpSub = ucSubCount;
            else
                *ucTmpSub -= 1;
        }
        else
        {
            if ((*ucTmpSub + 1) > ucSubCount)
                *ucTmpSub = 1;
            else
                *ucTmpSub += 1;
        }
    }
}
//skip channel for VGA
static void COsdCoreSkipVgaChannel
(	UINT8 *ucMain,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucMainCount
)
{
    if (GET_VGA_CHANNEL_MASK(*ucMain))
    {
        if (message==_LEFT_KEY_MESSAGE)
        {
            if (*ucMain <=1)
                *ucMain = ucMainCount;
            else
                *ucMain -= 1;
        }
        else if (message==_RIGHT_KEY_MESSAGE)
        {
            if ((*ucMain + 1) > ucMainCount)
                *ucMain = 1;
            else
                *ucMain += 1;
        }
    }
}
#if _OSD_2X
bit GET_OSD_HV_MASK(UINT8 port, UINT8 *ucSub, UINT8 *ucMain)
{
    UINT8 osdpage;

    //mask item function only with double osd
    if (GET_OSDSIZEDOUBLE()==1)
        return _FALSE;

    //is target item?
    if (!(*ucSub == _MASK_ITEM_OSD_H||*ucSub == _MASK_ITEM_OSD_V))
        return _FALSE;

    //osd page has different number with different port
    switch (port)
    {
//see _INPUT_PORT_MAX!!!
    case _DSUB_A0_PORT:
    case _VIDEO_TV_PORT:
    case _YPBPR_A0_PORT:
        osdpage = 4;
        break;
#if _HDMI_SUPPORT
    case _HDMI_PORT:
    case _HDMI_PORT2:
#endif
    case _VIDEO_AV_PORT:
    case _VIDEO_SV_PORT:
        osdpage = 4;
        break;
    default:
        return _FALSE;
        break;
    }
    if (*ucMain != osdpage)
        return _FALSE;

    //success to return
    return _TRUE;
}
bit GET_VGA_COLORTEMP_RGB_MASK(UINT8 port, UINT8 *ucSub, UINT8 *ucMain)
{
    // color temp only for VGA
    if (port !=_DSUB_A0_PORT)
        return _FALSE;

    if (ucLayerIndex!=1)
        return _FALSE;
    if (stLayerStack[ucLayerIndex].pMenuItemSet->pTitleString != tOsdColorTempStr)     //dong add 20081009
        return _FALSE;
    //is target item?
    if (*ucSub != _MASK_ITEM_CT)
        return _FALSE;

    if (*ucMain != 0)
        return _FALSE;

    if (GET_COLOR_TEMP_TYPE()==_CT_USER)
        return _FALSE;

    //success to return
    return _TRUE;
}

//skip osd h/v adjust if 2X
static void COsdCoreSkipOsdHV
(
    UINT8 port,
    UINT8 *ucTmpSub,
    UINT8 *ucTmpMain,
    UINT8 message,
    //UINT8 ucMainCount,
    UINT8 ucSubCount
)
{
    if (!GET_OSD_HV_MASK(port,ucTmpSub,ucTmpMain))
        return;

    if (message==_UP_KEY_MESSAGE)
    {
        if (*ucTmpSub <=1)
            *ucTmpSub = ucSubCount;
        else
            *ucTmpSub -= 1;
    }
    else
    {
        if ((*ucTmpSub + 1) > ucSubCount)
            *ucTmpSub = 1;
        else
            *ucTmpSub += 1;
    }
}

#endif//#if _PAL_MASK_HUE

#if _AUDIO_EFFECT_SUPPORT
void COsdCoreAudioEffectChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
        if (ucOsdState == _AUDIO_EFFECT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetAudioEffect();
        }
        break;
#endif
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);
    //COsdFxLoadText(0, 0, (_WINDOW_INFO_WIDTH - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]) * 2))  / 2 - 36, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
}

static void COsdCoreAudioEffectProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP2);
    COsdFxMapSetting(_OSD_MAP5);


#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(6);// add by xyw 070929
#endif
#endif

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);

    COsdCoreAudioEffectChangeProc();

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();
}

#endif
#if (_PICT_EFFECT_SUPPORT)

void COsdCorePictEffectChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _PICT_MODE_KEY_MESSAGE:
        if (ucOsdState == _PICT_EFFECT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetPictEffect();
        }
        break;

    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxLoadText(0, 0, (_WINDOW_INFO_WIDTH - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]) * 2))  / 2 - 36, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
}

static void COsdCorePictEffectProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP2);
    COsdFxMapSetting(_OSD_MAP5);


#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(6);// add by xyw 070929
#endif
#endif

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);

    COsdCorePictEffectChangeProc();

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();
}

#endif

#if (_PICT_EFFECT_SUPPORT)
#if 0//(_PICT_ITEM_UPDATE_PICTEFFECT==1)
////////Pict Effect Mode Data to User Mode////////////////////
static void COsdCoreApplyPictEffect(MenuItem * pMenuItem, bit force)
{
    extern MenuItem code tMenuAudioSetting1, tMenuColorVga,tMenuColorDvi,tMenuColorYPbPr,tMenuColorVideo,tMenuColorTv;

    BYTE result = 0;
    BYTE temp;
    //czl 071205
    BYTE result1=0;
    if (GET_PICT_EFFECT()!=_PICT_EFFECT_USER)
    {
        if (force)
            result = 1;
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VGA && pMenuItem == &tMenuColorVga)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI && pMenuItem == &tMenuColorDvi)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR && pMenuItem == &tMenuColorYPbPr)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8 &&pMenuItem == &tMenuColorVideo)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8 &&pMenuItem == &tMenuColorTv)
        {
            result = 1;
        }
        if (result)
        {
            //brightness/contrast
            SET_MODE_BRIGHTNESS(COsdCtrlGetBrightness());
            SET_MODE_CONTRAST(COsdCtrlGetContrast());
            CEepromSaveBriConData();

            //saturation
            temp = COsdCtrlGetSaturation();
            SET_SATURATION(temp);
            CEepromSaveHueSatData();

            //hue
            temp = COsdCtrlGetHue();
            SET_HUE(temp);
            CEepromSaveHueSatData();

            //sharpness
            /*
            if (GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR || GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
            {
            	temp = COsdCtrlGetSharpness();
            	if(GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)
            		SET_PEAKING_CORING(temp);
            	else
            		SET_PEAKING_CORING(temp);
            	//CEepromSaveSystemData();
            }
            */
            //backlight
#if 0//_BACKLIGHT_SUPPORT
            temp = COsdCtrlGetBacklight();
            SET_BACKLIGHT(temp);
#endif
            SET_PICT_EFFECT(_PICT_EFFECT_USER);

            //save pic mode video/ypbpr data
            CEepromSaveSystemData();
            //20070324, save bright/contrast
            CEepromSaveBriConData();
            //20070324, backlight
            //CEepromSaveBacklightData();
#if 1//(_PICT_EFFECT_INDEPEND_SUPPORT)
            CEepromSavePictModeData();
#else
            CEepromSaveSystemData();
#endif
        }
    }
#if _AUDIO_EFFECT_SUPPORT

    if (pMenuItem==&tMenuAudioSetting1)
        result1=1;

    if (result1)
    {
        SET_AUDIO_EFFECT(_AUDIO_EFFECT_USER);

        SET_TREBLE(COsdCtrlGetAudioTreble());
        SET_BASS(COsdCtrlGetAudioBass());

        CPt2314WrBass();
        CPt2314WrTreble();
        CEepromSaveAudioData();
    }
#endif
}
#endif
#endif

void COsdFxShowIconMove(BYTE ucType)
{
    ucType=ucType;

    //use no signal hint window
    COsdFxShowStatus(_SHOW_NOSIGNAL);
    SET_RAND_INIT();
}

#if 1//(_SLEEP_TIMEOVER_HINT_SUPPORT)
static void COsdFxShowStatusRedrawSleepRemind(bit firstin)
{
    UINT8 ucTemp[12+7];

    if (!firstin)
        if (ucOsdMessage != _SHOW_SLEEP_TIMEOVER_HINT_REMINDTIME_MESSAGE)
        {
            //press sleep key to disable current countdown state
            if (ucOsdMessage == _SLEEP_KEY_MESSAGE)
            {
                ucSleepType = 0;
                ucSleepTimeMin = 0;
                ucSleepTimeSecCnt= 0;
                CTimerCancelTimerEvent(COsdReckonTimeEvent);
            }

            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
            COsdCoreInitialze();
            return;
        }
#if _TYPEOF_OSD_KONSTA
    ucTemp[2]=(ucSleepTimeMin)?(ucSleepTimeMin-1):(0);
    ucTemp[0] = _0_+ucTemp[8]/10;
    ucTemp[1] = _0_+ucTemp[8]%10;
    ucTemp[2] =_COLON_;
    ucTemp[3] = _0_+ucSleepTimeSec/10;
    ucTemp[4] = _0_+ucSleepTimeSec%10;
    ucTemp[5] =_END_;
    COsdFxLoadText(_INFO_ROW, _INFO_COL+1, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSleepTimeoverHintStr);
    COsdFxLoadText(_INFO_ROW, _INFO_COL+7, 0, _CP_WHITE, _CP_BLACK, 0, ucTemp);
    usItemStart = GET_WIN_SLEEPREMIND_PREBLANK(GET_LANGUAGE(), tOsdSleepTimeoverCancelHintStr);
    COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSleepTimeoverCancelHintStr);
#else
    //modified by xyw 011023
    if (GET_LANGUAGE()==1)
    {
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
        ucTemp[0] = _SHUI4_L_;
        ucTemp[1] =_SHUI4_R_;
        ucTemp[2] =0x00;
        ucTemp[3] =_MIAN2_L_;
        ucTemp[4] =_MIAN2_R_;
        ucTemp[5] =0x00;
#else
    ucTemp[0] = _SHUI_2_;
    ucTemp[1] = 0x00;
    ucTemp[2] =0x00;
    ucTemp[3] =_MIAN_;
    ucTemp[4] = 0x00;
    ucTemp[5] =0x00;
#endif
        ucTemp[8]=(ucSleepTimeMin)?(ucSleepTimeMin-1):(0);

        ucTemp[6] = _0_+ucTemp[8]/10;
        ucTemp[7] = _0_+ucTemp[8]%10;
        ucTemp[8] =_COLON_;
        ucTemp[9] = _0_+ucSleepTimeSec/10;
        ucTemp[10] = _0_+ucSleepTimeSec%10;
        ucTemp[11] =_END_;

    }
    else
    {
        ucTemp[0] = _S_;
        ucTemp[1] =_l_;
        ucTemp[2] =_e_;
        ucTemp[3] =_e_;
        ucTemp[4] =_p_;
        ucTemp[5] =0x00;

        ucTemp[8]=(ucSleepTimeMin)?(ucSleepTimeMin-1):(0);

        ucTemp[6] = _0_+ucTemp[8]/10;
        ucTemp[7] = _0_+ucTemp[8]%10;
        ucTemp[8] =_COLON_;
        ucTemp[9] = _0_+ucSleepTimeSec/10;
        ucTemp[10] = _0_+ucSleepTimeSec%10;
        ucTemp[11] =_END_;
    }

#if 0//_OSD_HINT_1X
    COsdFxLoadText(1, 0, (_DISP_WID - COsdFxCalTextWidth(0, ucTemp)) /2, GET_CP_NOSIGTEXT(), _CP_BG, 0, ucTemp);
#else
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(0, ucTemp);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, 0, ucTemp);
#endif
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepTimeoverCancelHintStr);
    COsdFxLoadText(_INFO_ROW+2, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSleepTimeoverCancelHintStr);
#endif
}
#endif
//20070401
void COsdFxShowStatusRedrawTimeStopRemind(bit firstin)
{
    UINT8 ucTemp[12+7];
    UINT8 differ;

    if (!firstin)
        if (ucOsdMessage != _SHOW_TIMESTOP_TIMEOVER_HINT_REMINDTIME_MESSAGE)
        {
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
            COsdCoreInitialze();
            return;
        }
#if _TYPEOF_OSD_KONSTA
#if _NEW_TIME_POWEROFF_TYPE
    if ((stTimeData.ucTimeMinStop-ucMinSystem)>=1)
        differ = (stTimeData.ucTimeMinStop-ucMinSystem)-1;
    else
        differ=0;
#else
    differ = stTimeData.ucTimeMinStop-1;
#endif
    ucTemp[0] = _0_+differ/10;
    ucTemp[1] = _0_+differ%10;
    ucTemp[2] =_COLON_;
#if _NEW_TIME_POWEROFF_TYPE
    differ=59-ucSecSystem;
#else
    differ=59-ucTimerPowerOffMinTickCnt;
#endif
    ucTemp[3] = _0_+differ/10;
    ucTemp[4] = _0_+differ%10;
    ucTemp[5] =_END_;
    COsdFxLoadText(_INFO_ROW, _INFO_COL+1, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPowerOffHintStr);
    COsdFxLoadText(_INFO_ROW, _INFO_COL+11, 0, _CP_WHITE, _CP_BLACK, 0, ucTemp);

#ifndef DERUN_REMOTE
    usItemStart = GET_WIN_SLEEPREMIND_PREBLANK(GET_LANGUAGE(), tOsdPowerOffTimeoverCancelHintStr);
    COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPowerOffTimeoverCancelHintStr);
#endif

#else
    if (GET_LANGUAGE()==1)
    {
        ucTemp[0] = _P_;
        ucTemp[1] =_o_;
        ucTemp[2] =_w_;
        ucTemp[3] =_e_;
        ucTemp[4] =_r_;
        ucTemp[5] =0x00;
        ucTemp[6] =_O_;
        ucTemp[7] =_f_;
        ucTemp[8] =_f_;
        ucTemp[9] =0x00;

        differ = stTimeData.ucTimeMinStop-1;
        ucTemp[10] = _0_+differ/10;
        ucTemp[11] = _0_+differ%10;
        ucTemp[12] =_COLON_;
        differ=59-ucTimerPowerOffMinTickCnt;
        ucTemp[13] = _0_+differ/10;
        ucTemp[14] = _0_+differ%10;
        ucTemp[15] =_END_;
    }
    else
    {
        ucTemp[0] = _P_;
        ucTemp[1] =_o_;
        ucTemp[2] =_w_;
        ucTemp[3] =_e_;
        ucTemp[4] =_r_;
        ucTemp[5] =0x00;
        ucTemp[6] =_O_;
        ucTemp[7] =_f_;
        ucTemp[8] =_f_;
        ucTemp[9] =0x00;

        differ = stTimeData.ucTimeMinStop-1;
        ucTemp[10] = _0_+differ/10;
        ucTemp[11] = _0_+differ%10;
        ucTemp[12] =_COLON_;
        differ=59-ucTimerPowerOffMinTickCnt;
        ucTemp[13] = _0_+differ/10;
        ucTemp[14] = _0_+differ%10;
        ucTemp[15] =_END_;
    }


#if 0//_OSD_HINT_1X
    COsdFxLoadText(1, 0, (_DISP_WID - COsdFxCalTextWidth(0, ucTemp) ) /2, GET_CP_NOSIGTEXT(), _CP_BG, 0, ucTemp);
#else
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(0, ucTemp);
    COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, ucTemp);
    //COsdFxLoadText(_INFO_ROW, _INFO_COL, 0, _CP_MENU_SLIDER, _CP_BG, 0, ucTemp);
#endif
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdPowerOffTimeoverCancelHintStr);
    COsdFxLoadText(_INFO_ROW+2, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPowerOffTimeoverCancelHintStr);
#endif
}

void COsdCoreSleepHintChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _MENU_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _SLEEP_KEY_MESSAGE:
        if (ucOsdState == _SLEEP_HINT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetSleepMode();
            //DebugPrintf("\nucSleepType:%d\n", ucSleepType);
        }
        break;

    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    //usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    //COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);

    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
}

#if _TIMER_PAGE_SUPPORT
#define _TIME_CURRENT		1
#define _TIME_POWEROFF		2
#define _TIME_POWERON		3
#define _TIME_SWITCHCH		4
UINT8* COsdCoreGetTimerStr(unsigned char type)
{
    UINT8 str[8];
    unsigned char *pTargetHour;
    unsigned char *pTargetMin;

    if (type == _TIME_CURRENT)	//current time
    {
        pTargetHour = &ucHourSystem;
        pTargetMin = &ucMinSystem;
    }
    else if (type == _TIME_POWEROFF)	//power off timer
    {
        pTargetHour = &stTimeData.ucTimeHourStop;
        pTargetMin = &stTimeData.ucTimeMinStop;
    }
    else if (type == _TIME_POWERON)	//power on timer
    {
        pTargetHour = &stTimeData.ucTimeHourStart;
        pTargetMin = &stTimeData.ucTimeMinStart;
    }
    else if (type == _TIME_SWITCHCH)	//switch channel
    {
        pTargetHour = &stTimeData.ucTimeHourSwitch;
        pTargetMin = &stTimeData.ucTimeMinSwitch;
    }
    else
    {
        str[0] = _END_;
        return str;
    }

    str[0] = _0_+*pTargetHour/10;
    str[1] = _0_+*pTargetHour%10;

    str[2] = 0x00;
    str[3] = _COLON_;
    str[4] = 0x00;

    str[5] = _0_+*pTargetMin/10;
    str[6] = _0_+*pTargetMin%10;
    str[7] = _END_;

    return str;

}
UINT8* COsdCoreGetTimeCurrentStr(void)
{
    return COsdCoreGetTimerStr(_TIME_CURRENT);
}
UINT8* COsdCoreGetPowerOffStr(void)
{
    return COsdCoreGetTimerStr(_TIME_POWEROFF);
}
UINT8* COsdCoreGetPowerOnStr(void)
{
    return COsdCoreGetTimerStr(_TIME_POWERON);
}
UINT8* COsdCoreGetPowerOnChannelStr(void)
{
    return COsdCoreGetNumberStr(stTimeData.PowerOnChannel, 0);
}
UINT8* COsdCoreGetTimeSwitchStr(void)
{
    return COsdCoreGetTimerStr(_TIME_SWITCHCH);
}
UINT8* COsdCoreGetTimeSwitchChannelStr(void)
{
    return COsdCoreGetNumberStr(GET_TIME_SWITCH_CH(), 0);
}

/*
UINT8* COsdCoreGetRemindStr(void)
{
	return COsdCoreGetTimerStr(3);
}
*/
//pos:	0--close
//		1--hour
//		2--min
/*
void CosdCoreShowTimePageWin(unsigned char pos)
{
	WindowStyle stTimerItemPosWin;

	if (!pos)
	{
		COsdFxCloseWindow(tTimerPageTimeSegmentHourWindowStyle.ucWindowID);

		if (!GET_FACTORYSTATUS())
	          CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,1,_CP_WHITE,_CP_BLACK,GET_LANGUAGE()); //add by xyw 080214
		return;
	}

	pos %= 3;

	stTimerItemPosWin = tTimerPageTimeSegmentHourWindowStyle;

	stTimerItemPosWin.stPosition->usXStart += (pos-1)*3*12;
	stTimerItemPosWin.stPosition->usXEnd += (pos-1)*3*12;
	CTimerWaitForEvent(_EVENT_DEN_STOP);
	COsdFxDrawWindow(&stTimerItemPosWin);

	if (!GET_FACTORYSTATUS())
	   CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,2,_CP_WHITE,_CP_BLACK,GET_LANGUAGE()); //add by xyw 080214
}
*/
void COsdCoreShowTimePageSegment(UINT8 row, UINT8 col, UINT8 active)
{
    if (!col)
    {
        COsdFxHLine(_ITEMSTR_START_ROW+(row-1)*2, _ITEMSTR_START_COL, _ITEMVAL_START_COL-_ITEMSTR_START_COL, ((active)?(GET_CP_ITEM_ACTIVE()):(GET_CP_ITEM_UNACTIVE()))<<4, _WRITE_BYTE2);
    }
    else
    {
        COsdFxHLine(_ITEMSTR_START_ROW+(row-1)*2, _ITEMVAL_START_COL_TIMER+(col-1)*5, 2, ((active)?(GET_CP_ITEM_ACTIVE()):(GET_CP_ITEM_UNACTIVE()))<<4, _WRITE_BYTE2);
    }
}
#endif	//#if _TIMER_PAGE_SUPPORT
#if (_DISP_RATIO_M2_SUPPORT)

#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
void COsdCoreDispRatioChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _MENU_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _DisplayRatio_KEY_MESSAGE:
        if (ucOsdState == _RATIO_MODE_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            //COsdCtrlSetPictEffect();
            COsdCtrlSetDispRatioM2();
        }
        break;
#if 0 //_AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
        if (ucOsdState == _AUDIO_EFFECT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetAudioEffect();
        }
        break;
#endif
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);
    //COsdFxLoadText(0, 0, (_WINDOW_INFO_WIDTH - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]) * 2))  / 2 - 36, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxEnableOsd();
    //CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
    CTimerCancelTimerEvent(COsdFxExitEvent);//modified by xyw 080115 at jpe
    COsdCoreSetState(_IDLE_STATE);//modified by xyw 080115 at jpe

    //if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
    //{
    //COsdCoreDispRatioProc();
    //COsdCoreSetState(_RATIO_MODE_STATE);
    //}

    //COsdDispFirstTimeLoadFont();//modified by xyw 080130 at jpe
}

static void COsdCoreDispRatioProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP2);
    COsdFxMapSetting(_OSD_MAP5);


#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
    COsdLoadfontLoadChineseBankFont(6);// add by xyw 070929
#endif
#endif

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);

    COsdCoreDispRatioChangeProc();

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();
}
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9

#endif

UINT8* COsdCoreGetColorTempStr(void)
{
    return tOsdColorTempStrSet[GET_COLOR_TEMP_TYPE()];
}

UINT8* COsdCoreGetPictEffectStr(void)
{
    return tOsdPictEffectStrSet[GET_PICT_EFFECT()];
}
#if _AUDIO_EFFECT_SUPPORT
UINT8* COsdCoreGetSoundEffectStr(void)
{
    return tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()];
}
#endif
UINT8* COsdCoreGetLanguageStr(void)
{
    return &tOsdLanguageStrSet[0];
}


void COsdFxLoadBracketText(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucLength, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray)
{
    UINT8 offset;

    ucBKLength=ucBKLength;

    COsdFxClearText(ucRow, ucCol+1, 1, _ITEMBRACKET_LEN-2);
    //draw left bracket
    COsdFxLoadText(ucRow, ucCol, 0, ucForegroundColor, ucBackgroundColor, 0, tOsdBracketSet[0]);

    if (ucLength <= _ITEMBRACKET_LEN-2)
    {
        offset = (_ITEMBRACKET_LEN-2-ucLength)/2;
    }

    //draw string
    COsdFxLoadText(ucRow, ucCol+1+offset, 0, ucForegroundColor, ucBackgroundColor, ucSelect, pArray);

    //draw right bracket
    COsdFxLoadText(ucRow, ucCol+1+(_ITEMBRACKET_LEN-2), 0, ucForegroundColor, ucBackgroundColor, 0, tOsdBracketSet[1]);
}

void COsdFxLoadBracketTextNoBracket(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucLength, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray)
{
    ucBKLength=ucBKLength;
    ucLength=ucLength;
    COsdFxLoadText(ucRow, ucCol, 0, ucForegroundColor, ucBackgroundColor, ucSelect, pArray);
}

//active:		0--> cancel; 1-->add
static void COsdCoreMarkTargetLine(unsigned char marktype, unsigned char active, unsigned char ucSubItem, unsigned char rowoffset)
{
    UINT8 ucMoveByRow;
    if (GET_FACTORYSTATUS())
        ucMoveByRow=1;
    else
        ucMoveByRow=2;//pMenuItem->ucMoveByRow;

    switch (marktype)
    {
    case _BRACKET_TIMER_TYPE:
        COsdFxChange1bitColor(rowoffset + (ucSubItem-1)*ucMoveByRow, _ITEMSTR_START_COL, 1, _ITEMVAL_START_COL_TIMER-_ITEMSTR_START_COL, (active)?(_CP_12):(_CP_1), _CP_0);//20081124 modify to red
        //COsdFxChange1bitColor(rowoffset + (ucSubItem-1)*ucMoveByRow, _ITEMVAL_START_COL_TIMER, 1, _OSD_UMAIN_COL-_ITEMVAL_START_COL_TIMER, _CP_1, _CP_0);
        break;
    default:
        if (GET_FACTORYSTATUS())
            COsdFxChange1bitColor(rowoffset + (ucSubItem-1)*ucMoveByRow, 0, 1, _OSD_FMAIN_COL, (active)?(_CP_12):(_CP_1), _CP_0);
        else
            COsdFxChange1bitColor(rowoffset + (ucSubItem-1)*ucMoveByRow, 0, 1, _OSD_UMAIN_COL, (active)?(_CP_12):(_CP_1), _CP_0);//20081124 ccy modify to red
        break;
    }
}
/*
static void COsdCoreDrawPageTitleText(unsigned char *pString)
{
	//clear line text
	COsdFxClearText(_TITLE_U_ROW, 0, 1, _OSD_UMAIN_COL);
	//draw page title string
	usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pString);
	COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_3, _CP_0, GET_LANGUAGE(),pString);
}
*/

/**
 * To Initialze adjust window
 * @param None
 * @return None.
 */

void COsdCoreInitAdjustWindow(ItemObject * pItemObject, unsigned char type)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    //ItemSlider * pItemSlider;
    ItemSlider xdata stItemSlider;

    //COsdFxDisableOsd();

    COsdFxMapSetting(_OSD_MAP9);

    COsdFxDrawWindow(&tExtAdjWindowStyle);

    switch (type)
    {
    case _SLIDER_TYPE:
        stItemSlider = *((ItemSlider*)(pItemObject->pStruct));
//pItemSlider = (ItemSlider * )pItemObject->pStruct;
        COsdFxLoadText(_ITEMSLIDER_ITEM_ROW, _ITEMSLIDER_ITEM_COL,0, GET_CP_ITEM_UNACTIVE(), 0,ucSelectLanguage, pItemObject->pString);
        COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, &stItemSlider,1);//COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, _ITEMSLIDER_EXTADJ_LEN, pItemSlider);
#ifdef VOLUME_BAR_NO_SHOW_EXIT
		if ((!GET_FACTORYSTATUS())&&(pItemObject->pString != tOsdAudioVolumnStr)) //jinsuo modify for vol noext show 20100303
#else		
        if (!GET_FACTORYSTATUS())
#endif			
        {
            //CosdCoreShowNoteMessage(_ITEMSLIDER_EXTADJ_ROW+2,_ITEMSLIDER_EXTADJ_COL,0,4,_CP_1,_CP_0,GET_LANGUAGE());
            //konsta color osd
            CosdCoreShowNoteMessage(_ITEMSLIDER_EXTADJ_ROW+2,_ITEMSLIDER_EXTADJ_COL,0,4,_CP_3,_CP_0,GET_LANGUAGE());
            //COsdFxChange1bitColor(_ITEMSLIDER_EXTADJ_ROW+2, _ITEMSLIDER_EXTADJ_COL, 1, 2, _CP_3, _CP_0);
            //COsdFxChange1bitColor(_ITEMSLIDER_EXTADJ_ROW+2, _ITEMSLIDER_EXTADJ_COL+19, 1, 2, _CP_3, _CP_0);
        }
        break;
    case _SLIDER3_TYPE:
        stItemSlider = *((ItemSlider*)(pItemObject->pStruct));//pItemSlider = (ItemSlider * )pItemObject->pStruct;
        COsdFxLoadText(_ITEMSLIDER_ITEM_ROW, _ITEMSLIDER_ITEM_COL,0, GET_CP_ITEM_UNACTIVE(), 0,ucSelectLanguage, pItemObject->pString);
        COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, 0, &stItemSlider,1);//COsdFxFullSlider(_ITEMSLIDER_EXTADJ_ROW, _ITEMSLIDER_EXTADJ_COL, 0, pItemSlider);
        break;
    }

    COsdFxEnableOsd();
}


void COsdCoreExtAdjWinReturn(void)
{
    //MenuItem * pMenuItem;
    //MenuItemSet * pMenuItemSet;
    //BYTE data ucMainMenu,ucSubMenu;
    ItemPosition xdata stMoveMainItemPos;

    //ucMainMenu = stLayerStack[ucLayerIndex].ucMainMenu;
    //ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;


    //pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    //pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];

    //close current osd
    CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, 0);

    //redraw osd out line but don't open osd(by "bVChipMenuChangeStatus")
    /*bVChipMenuChangeStatus = 1;
    COsdCoreInitialze();
    COsdCoreInitMainWindow();
    bVChipMenuChangeStatus = 0;*/
    //dong alter for debug back move menu to sel right icon 20080920
    CLR_EXT_ADJUST_WIN();
    ucPasswordInputNum = 0;
    COsdFxMapSetting(_OSD_MAP0);
    COsdFxDrawWindow(&tBGWindowStyle);//0
    COsdFxDrawWindow(&tTitleWindowStyle);// 2
    COsdFxDrawWindow(&tNoteWindowStyleA);// 1
    CosdCoreShowMainMenuIcon(stLayerStack[ucLayerIndex].pMenuItemSet);
    stMoveMainItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->stPosition;
    stMoveMainItemPos.usXStart += stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;//20080901
    stMoveMainItemPos.usXEnd += stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxMoveWindow(stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow,&stMoveMainItemPos);
    //dong alter for debug back move menu to sel right icon 20080920

    //prepair osd page and the target point to the specified item
    //stLayerStack[ucLayerIndex].ucMainMenu = ucMainMenu;
    //stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;

    //show target page and point to specified item
    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu, stLayerStack[ucLayerIndex].ucSubMenu, 1);


    //colored line
    COsdFxHLine(_ITEMSTR_START_ROW+2*(/*ucSubMenu*/stLayerStack[ucLayerIndex].ucSubMenu-1), 0, _OSD_UMAIN_COL, GET_CP_ITEM_ACTIVE()<<4, _WRITE_BYTE2);
    //restore osd state
    COsdCoreSetState(_MAINMENU_STATE);

    //open osd
    CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, _BIT0);

}


#if (_PICT_EFFECT_SUPPORT)
static void COsdCorePictEffectRefreshRelativeItem(ItemBracket1* pItemBracket1)
{
    UINT8 ucSubMenu;
    UINT8 items=0;
    UINT8 i;
    UINT8 itemsAtLine[6];

    if (pItemBracket1->pHandlerFunction != COsdCtrlSetPictEffect)
        return;

    if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
    {
        items = 5;
        itemsAtLine[0] = 1;	//point to contrast of video color menu
        itemsAtLine[1] = 2;	//point to brightness of video color menu
        itemsAtLine[2] = 3;	//point to hue of video color menu
        itemsAtLine[3] = 4;	//point to saturation of video color menu
        itemsAtLine[4] = 5;	//point to sharpness of video color menu
    }

    if (items)
    {
        ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;
        for (i=0; i<items; i++)
        {
            stLayerStack[ucLayerIndex].ucSubMenu = itemsAtLine[i];
            COsdCoreFreshItem(0);
        }

        stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
    }
}
#endif
#if (_AUDIO_EFFECT_SUPPORT)
static void COsdCoreAudioEffectRefreshRelativeItem(ItemBracket1* pItemBracket1)
{
    UINT8 ucSubMenu;

    if (pItemBracket1->pHandlerFunction == COsdCtrlSetAudioEffect)
    {
        ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;

        stLayerStack[ucLayerIndex].ucSubMenu = 1;	//point to audio base
        COsdCoreFreshItem(0);
        stLayerStack[ucLayerIndex].ucSubMenu = 2;	//point to audio treble
        COsdCoreFreshItem(0);
        //stLayerStack[ucLayerIndex].ucSubMenu = 3;	//point to audio balance
        //COsdCoreFreshItem(0);

        stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
    }
}
#endif
#if(_TYPEOF_OSD_KONSTA)
static void COsdCoreSwichLanguageRefreshRelativeItem(void)
{
    MenuItem *	pMenuItem;
    SubMenuInfo	xdata stSubmenuInfo;
    MenuItem *	pTopMenuItem;
    MenuItemSet * pMenuItemSet;

    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    pTopMenuItem = pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    //COsdFxClearText(_TITLE_U_ROW, 0, 1, _OSD_UMAIN_COL);
    //20080904 ccy modify
#if (_PCB_TEST == _PCB_TYPE)
    usItemStart = _WIN_TITLE_XS-4 + stLayerStack[ucLayerIndex].ucMainMenu*6*_FONT_WID;
#else
    usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
#endif
    COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_3, _CP_0, GET_LANGUAGE(),pMenuItem->pString);

    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;

    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;

    COsdCoreShowSubMenuItem(&stSubmenuInfo);

    CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_3,_CP_0,GET_LANGUAGE());

}
#endif
#if 1//(_AUDIO_ITEM_UPDATE_AUDIOEFFECT==1 || _PICT_ITEM_UPDATE_PICTEFFECT==1)
static void COsdCoreSliderUpdateModeData(ItemSlider * pItemSlider, UINT8 message)
{
//20080823 modify
#if 0//_AUDIO_ITEM_UPDATE_AUDIOEFFECT
    UINT8 base,treble;
    bit audioresult = 0;
#endif
#if 1//_PICT_ITEM_UPDATE_PICTEFFECT
    UINT8 bright,contrast,saturation,hue,sharpness;
    bit videoresult = 0;
    UINT8 pictEffectAtLine;	//point to pict effect
#endif

    message=message;
//20080823 ccy modify
#if 0//_AUDIO_ITEM_UPDATE_AUDIOEFFECT
    if (pItemSlider->pGetFunction == COsdCtrlGetAudioBass||pItemSlider->pGetFunction == COsdCtrlGetAudioTreble)
    {
        //get current mode audio effect data
        base = COsdCtrlGetAudioBass();
        treble= COsdCtrlGetAudioTreble();
        //change to user mode
        SET_AUDIO_EFFECT(_AUDIO_EFFECT_USER);

        SET_BASS(base);
        SET_TREBLE(treble);
        CEepromSaveAudioData();

        audioresult  = 1;
    }
#endif

#if 1//_PICT_ITEM_UPDATE_PICTEFFECT
    if (GET_PICT_EFFECT() != _PICT_EFFECT_USER/*isPictEffectNotUser==1*/)
    {
        //isPictEffectNotUser = 0;
        if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA || GET_INPUTSOURCE_TYPE()==_SOURCE_DVI/*|| GET_INPUTSOURCE_TYPE()==_SOURCE_HDMI*/)
        {
            if (pItemSlider->pGetFunction == COsdCtrlGetBrightness||
                    pItemSlider->pGetFunction == COsdCtrlGetContrast)
            {
                bright = COsdCtrlGetBrightness();
                contrast = COsdCtrlGetContrast();

                SET_PICT_EFFECT(_PICT_EFFECT_USER);
                SET_MODE_BRIGHTNESS(bright);
                SET_MODE_CONTRAST(contrast);
                CEepromSaveBriConData();

                videoresult = 1;
            }
        }
        else if (0)//(GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR)
        {
            if (pItemSlider->pGetFunction == COsdCtrlGetBrightness||
                    pItemSlider->pGetFunction == COsdCtrlGetContrast ||
                    pItemSlider->pGetFunction == COsdCtrlGetSaturation||
                    pItemSlider->pGetFunction == COsdCtrlGetSharpness )
            {
                bright = COsdCtrlGetBrightness();
                contrast = COsdCtrlGetContrast();
                saturation = COsdCtrlGetSaturation();
                sharpness = COsdCtrlGetSharpness();

                SET_PICT_EFFECT(_PICT_EFFECT_USER);
                SET_MODE_BRIGHTNESS(bright);
                SET_MODE_CONTRAST(contrast);
                //SET_YPbPrSaturation(saturation);
                SET_PEAKING_CORING(sharpness);

                CEepromSaveBriConData();
                CEepromSaveSystemData();

                videoresult = 1;
                pictEffectAtLine = 6;
            }
        }
        else if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
        {

            if (pItemSlider->pGetFunction == COsdCtrlGetBrightness||
                    pItemSlider->pGetFunction == COsdCtrlGetContrast ||
                    pItemSlider->pGetFunction == COsdCtrlGetSaturation||
                    pItemSlider->pGetFunction == COsdCtrlGetHue||
                    pItemSlider->pGetFunction == COsdCtrlGetSharpness )
            {
                bright = COsdCtrlGetBrightness();
                contrast = COsdCtrlGetContrast();
                saturation = COsdCtrlGetSaturation();
                hue = COsdCtrlGetHue();
                sharpness = COsdCtrlGetSharpness();

                SET_MODE_BRIGHTNESS(bright);
                SET_MODE_CONTRAST(contrast);
                SET_SATURATION(saturation);
                SET_HUE(hue);
                SET_PEAKING_CORING(sharpness);

                SET_PICT_EFFECT(_PICT_EFFECT_USER);
                CEepromSaveBriConData();
                CEepromSaveSystemData();

                //videoresult = 1;
                pictEffectAtLine = 7;
            }
        }

        if (videoresult)
            CEepromSavePictModeData();
    }
#endif

#if 0//_AUDIO_ITEM_UPDATE_AUDIOEFFECT
    if (audioresult)
    {
        ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;
        stLayerStack[ucLayerIndex].ucSubMenu = 4;	//point to audio mode
        COsdCoreFreshItem(0);
        stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
    }
#endif
#if 0//_PICT_ITEM_UPDATE_PICTEFFECT
    if (videoresult)
    {
        ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;
        stLayerStack[ucLayerIndex].ucSubMenu = pictEffectAtLine;	//point to pict mode
        COsdCoreFreshItem(0);
        stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
    }
#endif

}
#endif	//#if (_AUDIO_ITEM_UPDATE_AUDIOEFFECT==1 || _PICT_ITEM_UPDATE_PICTEFFECT==1)
#if _PAL_MASK_HUE
bit GET_VIDEO8_HUE_MASK(UINT8 x)
{
    if ((x == _MASK_ITEM_HUE-1)&&\
            (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8) &&\
            (GET_INPUTPORT_TYPE(stSystemData.InputSource)!=_VIDEO_TV_PORT)&&\
            (stLayerStack[ucLayerIndex].ucMainMenu==0) &&\
            (!GET_FACTORYSTATUS()) &&\
            (ucLayerIndex==0) 	&&\
            ((ucAV_Mode_Curr==50)||(ucMode_Curr_2610==ZPAL_60||ucMode_Curr_2610==ZPAL_M)) )
    {
        return _TRUE;
    }

    return _FALSE;
}
#endif
bit GET_VGA_PICTMISC_MASK(UINT8 x)
{
    if ((x == _MASK_ITEM_VGA_PICTMISC-1)&&\
            (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA) &&\
            (stLayerStack[ucLayerIndex].ucMainMenu==3) &&\
            (!GET_FACTORYSTATUS()) &&\
            (ucLayerIndex==0))
    {
        return _TRUE;
    }

    return _FALSE;
}
bit GET_VGA_CHANNEL_MASK(UINT8 x)				//change _VIDEO_SV_PORT to  _YPBPR_A0_PORT  by lbh 090916
{
//20080919 ccy add  av and sv cancel display tv setting
    if ((x == _MASK_ITEM_VGA_PG_CHANNEL-1)&&\
            (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA||\
             GET_INPUTPORT_TYPE(stSystemData.InputSource)== _VIDEO_AV_PORT||\
             GET_INPUTPORT_TYPE(stSystemData.InputSource)== _VIDEO_SV_PORT||\
             GET_INPUTPORT_TYPE(stSystemData.InputSource)== _YPBPR_A0_PORT) &&\
            (!GET_FACTORYSTATUS()) &&\
            (ucLayerIndex==0))
    {
        return _TRUE;
    }

    return _FALSE;
}

bit GET_PAGE_MASK(void)
{
    if ((GET_INPUTPORT_TYPE(stSystemData.InputSource)!=_VIDEO_TV_PORT) &&\
            (stLayerStack[ucLayerIndex].ucMainMenu==2) && \
            (ucLayerIndex==0) )
    {
        return _TRUE;
    }

    return _FALSE;
}


void CtvScanFirstShowing(BYTE ch)
{
#if 0
    //show scan bar first
    bTvInAutoScanProgess = _TRUE;
    //stTvPdb.pdb = _VH_LOW_STAR;
    SET_TV_AFC_ENABLE(1);	//enable
    SET_TV_AFC_SIGN(0);		//+
    SET_TV_AFC_VALUE(0);	//value
    //draw chn number
    //bTvScanFirstShowSlider=_TRUE;
    //bTvScanFirstShowChannel = _TRUE;
    //COsdAutoScanShow(ch,1);
    COsdManualScanShow(ch);

    ucTvFinetuneData = 50;

#endif
    //show scan bar first
    ch = ch;
    bTvInAutoScanProgess = _TRUE;
    stTvPdb.pdb = _VH_LOW_STAR;
    SET_TV_AFC_ENABLE(1);	//enable
    SET_TV_AFC_SIGN(0);		//+
    SET_TV_AFC_VALUE(0);	//value
    //COsdManualScanShow(ch);

    ucTvFinetuneData = 50;



}

#else	//#if _TYPEOF_OSD_KONSTA
/*======================= Private Types ===================== */
typedef struct {
    MenuItemSet*	pMenuItemSet;
    UINT8	ucMainMenu;
    UINT8	ucSubMenu;
} LayerStack;
/*======================== Definitions ====================== */

UINT8 code  tOsdSoftwareVersionStr[]={  // tommy change   weixg mod 20070515 xdata
    //_F_,_W_,0x00,_V_,_e_,_r_,0x00,_1_, 0x0e, _2_,_END_,
    _V_,_e_,_r_,_COLON_,(_VERSION_CODE&0x0f)+_0_,_DOT_,(_RELEASE_CODE>>4)+_0_,(_RELEASE_CODE&0x0f)+_0_,_END_,		///new add
    _THE_SAME_,
};
/*========================== Variables ====================== */

UINT8 ucPasswordInputNum;
UINT8 FactoryInputPassword[4];

xdata UINT8	ucLayerIndex;
static xdata LayerStack	stLayerStack[_MAXLAYER_NUM];


//xdata UINT8 ucExtendMenuRow;
//xdata UINT8 ucExtendMenuCol;
xdata UINT8	ucOsdState;
static xdata UINT8	CurInputPassword[4];
xdata UINT8 ucOsdShowControl;
//xdata UINT8 tOsdTimeStr[30];
// For Channel Input
xdata UINT8 ucNumberof;
xdata UINT8 ucChannelNum;

BIT ucOsdlayerExit =0;// add by xyw to modified Exit Sub Menu blink 071022 ;
BIT ucOsdisAutoMenu =0;// modified finish auto ,menu error  by xyw  071022 ;

#if(_MEMORY_LOCATION == _FLASH)
BIT bBrightnessFlag = _DISABLE;
BIT bContrastFlag = _DISABLE;
BIT bSaturationFlag = _DISABLE;
BIT bHueFlag = _DISABLE;
BIT bSharpnessFlag = _DISABLE;
BIT bBassFlag = _DISABLE;
BIT bTrebleFlag = _DISABLE;
BIT bBalanceFlag = _DISABLE;
BIT bOsdTimerFlag = _DISABLE;
BIT bOsdBlendingFlag = _DISABLE;
BIT bOsdClockFlag = _DISABLE;
BIT bHPositionFlag = _DISABLE;
BIT bVPositionFlag = _DISABLE;
BIT bClockFlag = _DISABLE;
BIT bPhaseFlag = _DISABLE;
BIT bChannel1Flag = _DISABLE;
BIT bChannel2Flag = _DISABLE;
BIT bVolumeFlag = _DISABLE;
#endif

#if (_SCAN_TYPE == _SEQUENTIAL_SCAN)
xdata UINT8 ucFirstChannel;
xdata UINT8 ucFreqInc;
BIT	bFirstChannelFlag=1;
#endif

#if((_MCU_TYPE == _REALTEK_RTD2662_EMCU) && (_DEBUG_TOOL == _RS232)) //fjyang
BIT ucRtd2662IspFlag=0;
#endif

#if( SKYWORTH_OSD == _ENABLE )
//xdata ItemSelectDialog tSignalSourceSetP_temp;  //tommy liao delete 070531
#endif

// VChip
xdata UINT8 ucPasswordInputNum;

// System Clock
xdata UINT8 ucHour = 0;
xdata UINT8 ucMin = 0;
xdata UINT8 ucSec = 0;
static xdata UINT8 ucClockStr[7];  //  SKYWORTH_CHINESE         tommy liao change ucClockStr[10];

#if _TIMER_SLEEP_HINT_SUPPORT
bit bTimeSecTicker = 0;
bit bTimeoverHintOsdState = 0;	// 1: do not show time over remind osd because some message is showing
bit bTimeoverHintRequest = 0;	// 1: time over request show
data UINT8 ucHourSystem = 0;
data UINT8 ucMinSystem = 0;
data UINT8 ucSecSystem = 0;
WORD usTimeStopAndSystemDiffer=0;
bit bTimeStartDone = 0;
bit bTimeStopDone = 0;
UINT8 xdata ucSleepTimeSecCnt = 60;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

#if _CUSTOMER_SANSE
bit bLedFlash = 0;	//sanse: flash led while sleep and nosignal state
bit bIsChangeSource=0;	//sanse: change source status, flag for off back light
#endif


// Change Source
#if(_Change_SOURCE_Type == Change_SOURCE_Type2)
xdata UINT8 ucSourceTemp;
#endif

BIT bShowMultiSelectWindowFlag=0;
BIT bNoflashWondowFlag=0;
BIT bInputPasswordComplete = _FALSE;

#if(_PANEL_TYPE == _CPT_CMO_TTL_20)
BIT bICMCMDFlag=_FALSE;
#endif

#if _HPC_OTHER_IR_FUCTION_ENABLE
BYTE xdata TVAV_Value=0;	// 0------TV,1-----AV
#endif

unsigned char count=0xC0;

#if _TIMING_INFO_TYPE == _TABLE_TYPE
WORD code Timing_Information[][3] =
{
    640,	350,	70,	//Mode 0:_MODE_640x350_70HZ
    640,	350,	85,	//Mode 1:_MODE_640x350_85HZ
    720,	400,	70,	//Mode 2:_MODE_720x400_70HZ
    640,	400,	85,	//Mode 3:_MODE_640x400_85HZ
    720,	400,	85,	//Mode 4:_MODE_720x400_85HZ
    640,	480,	60,	//Mode 5:_MODE_640x480_60HZ
    640,	480,	66, //Mode 6:_MODE_640x480_66HZ
    640,	480,	72,	//Mode 7:_MODE_640x480_72HZ
    640,	480,	75,	//Mode 8:_MODE_640x480_75HZ
    640,	480,	85,	//Mode 9:_MODE_640x480_85HZ
    800,	600,	56,	//Mode 10:_MODE_800x600_56HZ
    800,	600,	60, //Mode 11:_MODE_800x600_60HZ
    800,	600,	72,	//Mode 12:_MODE_800x600_72HZ
    800,	600,	75,	//Mode 13:_MODE_800x600_75HZ
    800,	600,	85,	//Mode 14:_MODE_800x600_85HZ
    832,	624,	75,	//Mode 15:_MODE_832x624_75HZ
    1024,	768,	60,	//Mode 16:_MODE_1024x768_60HZ
    1024,	768,	70,	//Mode 17:_MODE_1024x768_70HZ
    1024,	768,	75,	//Mode 18:_MODE_1024x768_75HZ
    1024,	768,	85,	//Mode 19:_MODE_1024x768_85HZ
    1024,	800,	73,	//Mode 20:_MODE_1024x800_73HZ
    1024,	800,	85,	//Mode 21:_MODE_1024x800_85HZ
    1152,	864,	60,	//Mode 22:_MODE_1152x864_60HZ
    1152,	864,	70,	//Mode 23:_MODE_1152x864_70HZ
    1152,	864,	75,	//Mode 24:_MODE_1152x864_75HZ
    1152,	864,	85,	//Mode 25:_MODE_1152x864_85HZ
    1152,	870,	75,	//Mode 26:_MODE_1152x870_75HZ
    1152,	900,	66,	//Mode 27:_MODE_1152x900_66HZ
    1152,	900,	76,	//Mode 28:_MODE_1152x900_76HZ
    1280,	720,	60,	//Mode 29:_MODE_1280x720_60HZ
    1280,	720,	75,	//Mode 30:_MODE_1280x720_75HZ
    1280,	768,	60,	//Mode 31:_MODE_1280x768_60HZ
    1280,	768,	70,	//Mode 32:_MODE_1280x768_70HZ
    1280,	768,	75,	//Mode 33:_MODE_1280x768_75HZ
    1280,	960,	60,	//Mode 34:_MODE_1280x960_60HZ
    1280,	960,	75,	//Mode 35:_MODE_1280x960_75HZ
    1280,	960,	85,	//Mode 36:_MODE_1280x960_85HZ
    1280,	1024,	60,	//Mode 37:_MODE_1280x1024_60HZ
    1280,	1024,	70,	//Mode 38:_MODE_1280x1024_70HZ
    1280,	1024,	75,	//Mode 39:_MODE_1280x1024_75HZ
    1280,	1024,	85,	//Mode 40:_MODE_1280x1024_85HZ
    1600,	1200,	60,	//Mode 41:_MODE_1600x1200_60HZ
    1600,	1200,	65,	//Mode 42:_MODE_1600x1200_65HZ
    1600,	1200,	70,	//Mode 43:_MODE_1600x1200_70HZ
    1600,	1200,	75,	//Mode 44:_MODE_1600x1200_75HZ
    1600,	1200,	85,	//Mode 45:_MODE_1600x1200_85HZ
    1680,	1050,	60,	//Mode 46:_MODE_1680x1050_60HZ
    1680,	1050,	75,	//Mode 47:_MODE_1680x1050_75HZ
};
#endif

/*=================== Local Functions Phototype ==============*/
static void CosdCoreShowMainMenuItem(MenuItemSet code *pMenuItemSet);
static void COsdCoreShowSubMenuItem(SubMenuInfo* pSubMenuInfo);
static void COsdMainMenuItemChangeColor(MenuItemSet* pMenuItemSet, UINT8 ucItemNo, BIT bActive);
static void COsdSubMenuItemChangeColor(SubMenuInfo* pSubMenuInfo, UINT8 ucItemNo, BIT bActive);
static void COsdBackMenuProc();
static void COsdCoreIdleEventProc(void);
static void COsdCoreMainMenuEventProc(void);
static void COsdMainMenuDirectionKeyProc(UINT8 message);
static void COsdMenuMoveProc(UINT8 ucMain, UINT8 ucSub, UINT8 bRefresh);

static UINT16 COsdCoreCalItemBnkLength(MenuItemSet* pMenuItemSet, UINT8 ItemOrder);
//static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucRow, UINT8 ucCol, UINT16 usItemWidth, bit bActive);
static void COsdCoreFreshItem(BIT bActive);
static UINT16 COsdCtrlCalcDetRange(UINT16 ucValue, UINT16 ucMax, UINT16 ucMin, UINT8 message, BIT bTurboFlag);
static void COsdFxSliderDirectionProc(ItemSlider * pItemSlider, UINT8 message);
static void COsdFxSlider1DirectionProc(ItemSlider1 * pItemSlider1, UINT8 message);
// For TV Proc
static void COsdCoreTVEventProc(void);

// For source Change Proc
//static void COsdCoreShowSourceEventProc(void);
static void COsdChangeSourceProc(void);
static void COsdFxShowSource(void);
static void COSdCoreShowVGAInfo();
static void COSdCoreShowYPbPrInfo();

// For NoSingal source
static void COsdNoSignalEventProc(void);
//static void COsdFxShowNoSignalSource(void);
//static void COsdFxShowNoCable(void);

// Extend Menu Event Proc
static void COsdCoreExtendMenuEventProc(void);

// Channel Edit Event Proc
static void COsdCoreChannelNumberEditProc(void);
static void COsdCoreChannelNumberEditEventProc(void);

// Audio
static void COsdCoreVolumnChangeProc(void);


static void COsdCoreVolumnProc(void);
static void COsdCoreMuteChangeProc(void);
static void COsdCoreMuteChangeShow(void);
static void COsdCoreSleepProc(void);
static void COsdCoreDisplayRatioProc(void);
static void COsdCoreDispatchMsg(void);

#if(_FACTORY_MENU_ENABLE)
//Factory menu
static void COsdCoreInitFactorySettingWindow(void);
#endif


#if(_Change_SOURCE_Type == Change_SOURCE_Type2)
static void COsdFxChangeSourceShow(void);
#endif

#if (_AUDIO_EFFECT_SUPPORT)
static void COsdCoreAudioEffectProc(void);
#endif

//static void COsdCoreLoadAllTitleIcon(UINT8 ucRow, UINT8 ucCol,UINT8 ForegroundColor,UINT8 ChangePosition,UINT8 IconWidth,UINT8 IconSum);//20070510
static void COsdCoreLoad1BiTIcon(UINT8 ucRow, UINT8 ucCol,  UINT8 ForegroundColor,UINT8 LanguageSelect,UINT8  *pArray);//20070509;
static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucMidRow, UINT8 ucMidCol, UINT16 ucBkLength ,bit bActive);

static CosdCoreShowNoteMessage(UINT8 ucRow, UINT8 ucCol,UINT16 ucSpaceLength,UINT8 ucItemCount,UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucLanguageSelect);

#if 0//_PICT_EFFECT_SUPPORT
static void COsdCorePictModeRefreshRelativeItem(ItemBracket* pItemBracket);
static void COsdCoreBriConRefreshRelativeItem(ItemSlider* pItemSlider);
#endif

void COsdCoreAutoScanRefreshChannelNumber(ItemBracket* pItemBracket);

#if _PAL_MASK_HUE
//skip PAL-HUE
static void COsdCoreSkipVideoHue
(	UINT8 *ucTmpSub,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucSubCount
);
#endif//#if _PAL_MASK_HUE
#if _OSD_2X
//skip osd h/v adjust if 2X
static void COsdCoreSkipOsdHV
(
    UINT8 port,
    UINT8 *ucTmpSub,
    UINT8 *ucTmpMain,
    UINT8 message,
    //UINT8 ucMainCount,
    UINT8 ucSubCount
);
#endif//#if _OSD_2X

#if 1//(_AUDIO_ITEM_UPDATE_AUDIOEFFECT==1 || _PICT_ITEM_UPDATE_PICTEFFECT==1)
#if (_PICT_EFFECT_SUPPORT)
static void COsdCorePictEffectRefreshRelativeItem
(
    ItemBracket* pItemBracket
);
#endif
#if 0//(_AUDIO_EFFECT_SUPPORT)
static void COsdCoreSoundEffectRefreshRelativeItem
(
    ItemBracket* pItemBracket
);
#endif
static void COsdCoreSliderUpdateModeData
(
    ItemSlider * pItemSlider, UINT8 message
);
#endif

#if (_PICT_EFFECT_SUPPORT)
////////Pict Effect Mode Data to User Mode////////////////////
static void COsdCoreApplyPictEffect
(
    MenuItem * pMenuItem, bit force
);
#endif

#define _MID_COL_POSITION 	10//(_MAINMENUWINDOW_HEND/_FONT_WID+ (_TITLEBACKGROUNDWINDOW_HEND-_MAINMENUWINDOW_HEND)/_FONT_WID/2)
/*=========================== Functions ===================== */
/**
* OsdCore Initialize function.
* @param None.
* @return None.
*
*/
void COsdCoreInitialze(void)
{
    ucLayerIndex = 0;
    stLayerStack[ucLayerIndex].ucMainMenu = 0;
    stLayerStack[ucLayerIndex].ucSubMenu = 0;

    if (GET_FACTORYSTATUS())
        stLayerStack[ucLayerIndex].pMenuItemSet = tMenuFactoryMainMenuSet[0];
    else
    {
        stLayerStack[ucLayerIndex].pMenuItemSet = tMainMenuSet[ucMenuSelect];
    }

    COsdCoreSetState(_IDLE_STATE);
}

/**
* Show mainmenu osd in a column
* @param pass a pointer of data structure MenuItemSet to specify a layer menu
* @return None.
*/
static void CosdCoreShowMainMenuItem(MenuItemSet code *pMenuItemSet)
{
    UINT8 ucCount, cmd_pos,cmd_Vpos;
//	UINT16 xdata space_length;
    MenuItem *	pMenuItem;
    MenuItem *	pTopMenuItem;

    pTopMenuItem = pMenuItemSet->pMenuItem;
    ucCount = 0;
    cmd_pos =pMenuItemSet->ucStartCol;
    cmd_Vpos=_FIRSTER_ICON_START_ROW;

    pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];

    //COsdCoreLoad1BiTIcon(4,0x0b,_CP_COLOR06,GET_LANGUAGE(),pMenuItem->pString);//modified by xyw 070929
    usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
    COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_COLOR06, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);

    //CosdCoreShowMainMenuIcon();
    //return;


    do {
        pMenuItem = ((MenuItem *[])pTopMenuItem)[ucCount];
        //pMenuItem->ucStartRow
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
        pData[0]=0;
        pData[1]=pMenuItem->ucUnActiveColor;
        pData[2]=0;
        pData[3]=0;
        COsdFxLoadIcon(cmd_Vpos,cmd_pos,0,1,pData,pMenuItem->pIcon);
#else
COsdCoreLoad1BiTIcon(cmd_Vpos,cmd_pos,pMenuItem->ucUnActiveColor,GET_LANGUAGE(),pMenuItem->pIcon);
#endif
        //if(ucCount==stLayerStack[ucLayerIndex].ucMainMenu)//20070528
        //{
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
        //COsdFxChange2bitColor(cmd_Vpos,cmd_pos,2, 3,0,pMenuItem->ucActiveColor,0,0);

        COsdFxChange4bitLUTColor(cmd_Vpos, cmd_pos, 3, 2, COLOR00(0));//xyw
#else
COsdFxChange1bitColor(cmd_Vpos,cmd_pos,2, 12,pMenuItem->ucActiveColor,_CP_BLACK);
#endif
        //}

        cmd_pos += 4;//(COsdFxCalTextCount(GET_LANGUAGE(),  pMenuItem->pString) + COsdFxCalBlankCmdCount(space_length));
        ucCount++;

    }while (ucCount < pMenuItemSet->ucItemCount);






    /*
    UINT8 ucCount, cmd_pos;
    //	UINT16 xdata space_length;
    MenuItem *	pMenuItem;
    MenuItem *	pTopMenuItem;

    pTopMenuItem = pMenuItemSet->pMenuItem;
    ucCount = 0;
    cmd_pos =_FIRSTER_ICON_START_COL;//pMenuItemSet->ucStartCol;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    //space_length = pMenuItem->usSpaceInItem;
    COsdCoreLoad1BiTIcon(pMenuItemSet->ucStartRow,pMenuItemSet->ucStartCol,_CP_WHITE,GET_LANGUAGE(),pMenuItem->pString);

    do {
    pMenuItem = ((MenuItem *[])pTopMenuItem)[ucCount];
    //pMenuItem->ucStartRow
		#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
    pData[0]=0;
    pData[1]=pMenuItem->ucUnActiveColor;
    pData[2]=0;
    pData[3]=0;
    COsdFxLoadIcon(pMenuItemSet->ucStartRow,cmd_pos,0,1,pData,pMenuItem->pIcon);
		#else
COsdCoreLoad1BiTIcon(pMenuItemSet->ucStartRow,cmd_pos,pMenuItem->ucUnActiveColor,GET_LANGUAGE(),pMenuItem->pIcon);
		#endif
    if(ucCount==stLayerStack[ucLayerIndex].ucMainMenu)//20070528
    {
			#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
    COsdFxChange2bitColor(pMenuItemSet->ucStartRow,cmd_pos,2, 3,0,pMenuItem->ucActiveColor,0,0);
			#else
COsdFxChange1bitColor(pMenuItemSet->ucStartRow,cmd_pos,2, 12,pMenuItem->ucActiveColor,_CP_BLACK);
			#endif
    }
    //COsdFxLoadText(pMenuItemSet->ucStartRow, cmd_pos, space_length, pMenuItem->ucUnActiveColor, _CP_BLACK, GET_LANGUAGE(), pMenuItem->pString);
    cmd_pos += pMenuItem->usItemWidth/_FONT_WID;//(COsdFxCalTextCount(GET_LANGUAGE(),  pMenuItem->pString) + COsdFxCalBlankCmdCount(space_length));
    //space_length = pMenuItem->usItemWidth - COsdFxCalTextWidth(GET_LANGUAGE(), pMenuItem->pString);
    ucCount++;
    }while(ucCount < pMenuItemSet->ucItemCount);

    */
}

/**
* Show submenu osd in a main menu
* @param pass a pointer of data structure SubMenuInf to specify all submenu in a main menu
* @return None.
*/
static void COsdCoreShowSubMenuItem(SubMenuInfo* pSubMenuInfo)
{
    UINT8 ucCount/*, ucMidBkLength, ucPreBkCnt*/;
    UINT8 ucSelectLanguage = GET_LANGUAGE();//gary added for factory menu still display english when language is chinese.
    //UINT16 xdata usBkLength;
    ItemObject *	pItemObject;
    MenuItem * pTopMenuItem;
    MenuItem * pMenuItem;
    UINT8 ItemCount;
    UINT8 ucMaskItem;

    pTopMenuItem = pSubMenuInfo->pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[pSubMenuInfo->ucMainOrder];

    CTimerWaitForEvent(_EVENT_DEN_STOP);//20070517

    ItemCount = pMenuItem->ucItemCount;

    if (GET_FACTORYSTATUS())
        COsdFxClearText(_CONTENT_F_ROW, _CONTENT_F_COL, _CONTENT_F_HEIGH, _CONTENT_F_WIDTH);
    else
        COsdFxClearText(_CONTENT_U_ROW, _CONTENT_U_COL, _CONTENT_U_HEIGH, _CONTENT_U_WIDTH);

    for (ucCount = 0; ucCount < ItemCount; ucCount++)
    {
        pItemObject = &(pMenuItem->pItemList[ucCount]);

        if (GET_FACTORYSTATUS())
            ucSelectLanguage=0;
        else
            ucSelectLanguage=GET_LANGUAGE();

        if (GET_VIDEO8_HUE_MASK(ucCount)/* ||GET_VGA_CTUSER_MASK(ucCount)*/)
            ucMaskItem = 1;
        else
            ucMaskItem=0;
        if (ucMaskItem == 0)
        {
            ucCount+=1;
            if (GET_OSD_HV_MASK(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucCount,&stLayerStack[ucLayerIndex].ucMainMenu))
                ucMaskItem = 1;
            ucCount-=1;
        }

        if (ucMaskItem)
            COsdFxLoadText((pMenuItem->ucStartRow + (ucCount)), pMenuItem->ucStartCol,0, GET_CP_MASK_ITEM(), _CP_BLACK,ucSelectLanguage, pItemObject->pString);
        else
            COsdFxLoadText((pMenuItem->ucStartRow + (ucCount)), pMenuItem->ucStartCol,0, _CP_COLOR06, _CP_BLACK,ucSelectLanguage, pItemObject->pString);//modified by xyw 070929

    }
}

/**

* Change the color of a main menu item
* @param pMenuItemSet pass a pointer of data structure MenuItemSet to specify a layer menu
* @param ucItemNo pass a main item to change
* @param bActive pass the status of the menu item to change
* @return None.
*/
#if 0
static void COsdMainMenuItemChangeColor(MenuItemSet* pMenuItemSet, UINT8 ucItemNo, BIT bActive)
{
    UINT8 ucColCnt, ucCount, ucForegroundColor;
    //UINT16 xdata usBnkLength;
    MenuItem * pTopMenuItem;
    MenuItem * pMenuItem;

    pTopMenuItem = pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[ucItemNo];

    //usBnkLength = pMenuItem->usSpaceInItem;
    ucColCnt = _FIRSTER_ICON_START_COL;//COsdFxCalBlankCmdCount(usBnkLength);
    for (ucCount = 0; ucCount < ucItemNo; ucCount++) {
        pMenuItem = ((MenuItem *[])pTopMenuItem)[ucCount];
        //usBnkLength = pMenuItem->usItemWidth - (UINT16)COsdFxCalTextWidth(GET_LANGUAGE(), pMenuItem->pString);
        ucColCnt +=pMenuItem->usItemWidth/_FONT_WID;// (COsdFxCalBlankCmdCount(usBnkLength) + COsdFxCalTextCount(GET_LANGUAGE(), pMenuItem->pString));
    }
    pMenuItem = ((MenuItem *[])pTopMenuItem)[ucItemNo];
    if (bActive)
        ucForegroundColor = pMenuItem->ucActiveColor;
    else
        ucForegroundColor = pMenuItem->ucUnActiveColor;

    ucCount = COsdFxCalTextCount(GET_LANGUAGE(), pMenuItem->pIcon)/2;
//	COsdFxChange1bitColor(pMenuItemSet->ucStartRow, ucColCnt, 1, ucCount, ucForegroundColor, _CP_BLACK);
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
    COsdFxChange2bitColor(pMenuItemSet->ucStartRow,ucColCnt,2,ucCount,0,ucForegroundColor,0,0);
#else
COsdFxChange1bitColor(pMenuItemSet->ucStartRow,ucColCnt ,  2,ucCount, ucForegroundColor, _CP_BLACK);
#endif
}

/**
* Change the color of a sub menu item
* @param pSubMenuInfo pass a pointer of data structure SubMenuInfo to specify a main menu item
* @param ucItemNo pass a sub menu item to change
* @param bActive pass the status of the menu item to change
* @return None.
*/
static void COsdSubMenuItemChangeColor(SubMenuInfo* pSubMenuInfo, UINT8 ucItemNo, BIT bActive)
{
    UINT8 ucColCnt, ucFontCnt, ucForegroundColor, ucRowOffset,ucWidth,ucBnkCount;
    UINT8 ucSelectLanguage=GET_LANGUAGE(),/*ucMidCol,*/ucStartCol;//gary added for factory menu still display english when language is chinese.
    UINT16 xdata usBnkLength;
    MenuItem *	pTopMenuItem;
    MenuItem *	pMenuItem;
    ItemObject * pItemObject;
    ItemSlider * pItemSlider;

    pTopMenuItem = pSubMenuInfo->pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[pSubMenuInfo->ucMainOrder];
    if (ucItemNo)
        ucRowOffset = ucItemNo - 1;
    else
        return;
    pItemObject = &(pMenuItem->pItemList[ucRowOffset]);

    if (bActive)
        ucForegroundColor = pItemObject->ucActiveColor;
    else
        ucForegroundColor = pItemObject->ucUnActiveColor;

    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage=GET_LANGUAGE();

    //ucColCnt = COsdFxCalBlankCmdCount(pSubMenuInfo->stItemPosition.usXStart + pMenuItem->usSpaceInSubMenu);
    ucFontCnt = COsdFxCalTextCount(ucSelectLanguage/*GET_LANGUAGE()*/, pItemObject->pString);
    //fjyang20070801
    //COsdFxChange1bitColor(pMenuItem->ucStartRow +( ucRowOffset*2), pMenuItem->ucStartCol, 1, ucFontCnt, ucForegroundColor, _CP_BLACK);  // 3 represent icon + space count
    COsdFxChange1bitColor(pMenuItem->ucStartRow +((ucRowOffset%7)*2), pMenuItem->ucStartCol, 1, ucFontCnt, ucForegroundColor, _CP_BLACK);  // 3 represent icon + space count

    usBnkLength = ucFontCnt * _FONT_WID - COsdFxCalTextWidth(ucSelectLanguage, pItemObject->pString);
    //COsdFxLoadBlankCmd(ucMidRow, usMidColStart-2, ucBkLength);
    ucBnkCount = COsdFxCalBlankCmdCount(usBnkLength);

    ucColCnt =_MAINMENUWINDOW_HEND/_FONT_WID;//(ucFontCnt + 3); // 3 represent icon + space
    ucWidth = (_TITLEBACKGROUNDWINDOW_HEND - _MAINMENUWINDOW_HEND)/_FONT_WID+1;
//20070525 For slider display trace when moved select window in chinese language.
    if (!bActive){
        if ((pItemObject->ucType == _SLIDER_TYPE) || (pItemObject->ucType == _SLIDER1_TYPE)) {
            pItemSlider = (ItemSlider*)pItemObject->pStruct;

            ucStartCol=_MID_COL_POSITION- pItemSlider->ucLength/2+ucBnkCount;

            ucWidth = pItemSlider->ucLength;

            //COsdFxChange2bitColor(pMenuItem->ucStartRow + ((ucRowOffset%7)*2), ucStartCol, 1, ucWidth, _TITLEBACKGROUNDWINDOW_COLOR, _TITLEBACKGROUNDWINDOW_COLOR, _TITLEBACKGROUNDWINDOW_COLOR, _TITLEBACKGROUNDWINDOW_COLOR);

        } if ((pItemObject->ucType == _BRACKET_TYPE) || (pItemObject->ucType == _BRACKET1_TYPE) || (pItemObject->ucType == _BRACKET2_TYPE) || (pItemObject->ucType == _SELECTDIALOG_TYPE) || (pItemObject->ucType == _VCHIPMULTISELECT_TYPE)) {

            //COsdFxChange1bitColor(pMenuItem->ucStartRow + ((ucRowOffset%7)*2), ucColCnt, 1, ucWidth, ucForegroundColor, _CP_BLACK);
        }
    }
}
#endif
/**
* Back to upper layer
* @param None
* @return None.
*/
static void COsdBackMenuProc(void)
{
#if _ADD_CHINESE
    BYTE  ucTmpMain=0  ;
#endif

    if (!GET_FACTORYSTATUS())
    {
        COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);	// -1: include arrow
        COsdFxCloseWindow(4);
        if (ucLayerIndex>=1)
        {
            //COsdFxClearText(5, 2, 8, 24);
            COsdFxClearText(_CONTENT_U_ROW, _CONTENT_U_COL-1, _CONTENT_U_HEIGH, _CONTENT_U_WIDTH);	// -1: include arrow

#if _TIMER_PAGE_SUPPORT
            COsdFxCloseWindow(tTimerPageTimeSegmentHourWindowStyle.ucWindowID);
#endif	//#if _TIMER_PAGE_SUPPORT

            stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
        }
        else
        {
            //COsdFxClearText(4, 2, 9, 24);
            COsdFxClearText(_TITLE_U_ROW, _TITLE_U_COL-1, 9, 24);	// -1: include arrow

#if _TIMER_PAGE_SUPPORT
            COsdFxCloseWindow(tTimerPageTimeSegmentHourWindowStyle.ucWindowID);
#endif	//#if _TIMER_PAGE_SUPPORT

            if (ucOsdisAutoMenu)// modified finish auto ,menu error  by xyw  071022 ;
            {
                stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();// test by xyw 071019
                ucOsdisAutoMenu=0;
            }
        }

    }
    else
    {
        //if(ucOsdisAutoMenu)// modified finish auto ,menu error  by xyw  071022 ;
        //{
        //stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();// test by xyw 071019
        //ucOsdisAutoMenu=0;
        //}
        //else
        stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();


    }

    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);

    if (GET_OSD_CHANGE_SOURCE())
        if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8)
            return;

    COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);

}

/**
* To Initialze top main menu environment to show
* @param None
* @return None.
*/

void COsdCoreInitMainWindow(void)
{
    MenuItem *	pMenuItem;
    SubMenuInfo	xdata stSubmenuInfo;

    ucPasswordInputNum = 0;	//20070405, clear password counter

    COsdFxMapSetting(_OSD_MAP0);


#if _ADD_CHINESE
    COsdDispFirstTimeLoadFont();
    COsdLoadfontLoadChineseBankFont(0);
    COsdDispLoadChineseFont(0);

#endif

    pMenuItem = (stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem;
    //pMenuItem = ((MenuItem *[])pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];

    COsdFxDrawWindow(&tTitleBackgroundWindowStyle);//0
    COsdFxDrawWindow(&tTitleLeftWindowStyle);// 2
    COsdFxDrawWindow(&tTitleRightWindowStyle);// 1


    //CosdCoreShowNoteMessage(13,2,0,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
    CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,0,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw

    CosdCoreShowMainMenuItem(stLayerStack[ucLayerIndex].pMenuItemSet);// 4 bit Icon xyw

    COsdFxDrawWindow(&tMainMenuItemWindowStyle);

    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;

    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
    COsdCoreShowSubMenuItem(&stSubmenuInfo);

    COsdFxLoadText(1, 1, 0, _CP_WHITE, _CP_BLACK, 0, tOsdSignalItemStrSet[stSystemData.InputSource]);//modified by xyw

    COsdFxEnableOsd();


}

/**
* To Initialze next layer except top main menu environment to show
* @param None
* @return None.
*/
void COsdCoreInitSubWindow(void)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    SubMenuInfo	xdata stSubmenuInfo;
    MenuItemSet  * pMenuItemSet;
    MenuItem*	pMenuItem;
    UINT16 xdata usPreBnkLength;

#if(_FACTORY_MENU_ENABLE )
    WindowStyle  stPopdownStyle;

    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage=GET_LANGUAGE();
#endif

    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    pMenuItem = 	((MenuItem *[])pMenuItemSet->pMenuItem)[0];

#if(_FACTORY_MENU_ENABLE )
    if (!GET_FACTORYSTATUS())
        if (pMenuItemSet->ucItemCount > 1)
            CosdCoreShowMainMenuItem(stLayerStack[ucLayerIndex].pMenuItemSet);
#endif

    COsdFxMapSetting(_OSD_MAP7);

#if(_FACTORY_MENU_ENABLE )//gary added for factory menu
    stPopdownStyle = *pMenuItemSet->pBackGroundWindow;
    stPopdownStyle.stPosition.usXStart = 0;
    stPopdownStyle.stPosition.usXEnd = stPopdownStyle.stPosition.usXStart + pMenuItem->stSize.usWidth;
    //stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight+_ROW_HEIGHT  * 2;
    //stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight * pMenuItem->ucItemCount + _ROW_HEIGHT  * 2 + 10;
    stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight * 11 + _ROW_HEIGHT  * 2 + 10;

    COsdFxDrawWindow(&stPopdownStyle);
    stPopdownStyle = *pMenuItemSet->pForegroundWindow;
    stPopdownStyle.stPosition.usXStart = 0;
    stPopdownStyle.stPosition.usXEnd = stPopdownStyle.stPosition.usXStart + pMenuItem->stSize.usWidth;
    //stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight;
    stPopdownStyle.stPosition.usYEnd = stPopdownStyle.stPosition.usYStart + pMenuItem->stSize.usHeight * pMenuItem->ucItemCount;

    //COsdFxDrawWindow(&stPopdownStyle);
#else
COsdFxDrawWindow(pMenuItemSet->pBackGroundWindow);
COsdFxDrawWindow(pMenuItemSet->pForegroundWindow);
#endif

    if (GET_FACTORYSTATUS())
    {
        usPreBnkLength =  0;//pMenuItemSet->pForegroundWindow->stPosition.usXStart/5 - 40 + pMenuItem->usSpaceInSubMenu;
        COsdFxLoadText(_DESCRIBLE_F_ROW, 2, 0, _CP_WHITE, _CP_BLACK, 0, tOsdSoftwareVersionStr);
    }
    else
    {
        usPreBnkLength =  0;//pMenuItemSet->pForegroundWindow->stPosition.usXStart/5 - 40 + pMenuItem->usSpaceInSubMenu;
        COsdFxLoadText(0, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, ucSelectLanguage, pMenuItemSet->pTitleString);//tommy liao change 0---->GET_LANGUAGE()
    }

    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    stSubmenuInfo.stItemPosition = pMenuItemSet->pForegroundWindow->stPosition;
    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
    COsdCoreShowSubMenuItem(&stSubmenuInfo);
//	COsdMenuMoveProc(0, 1, 0);
    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu, stLayerStack[ucLayerIndex].ucSubMenu, 1);
    //COsdFxLoadText(pMenuItem->ucItemCount + 1, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, tOsdKeyDirection_NoteStr);

    if (!GET_FACTORYSTATUS())
        CosdCoreShowNoteMessage(pMenuItem->ucItemCount*2 + 2,0,3,2,_CP_WHITE,_CP_BLACK,ucSelectLanguage); //tommy liao change

    // weixg mod 20070515 end

    COsdFxEnableOsd();
}
#if 0//(_CUSTOMER_TYPE == _SKYWORTH)  //yf_zhang 2007-6-7 14:09
void COsdCoreInitChannelEditSub(MenuItemSet code *pMenuItemSet)
{
    UINT8 ucCount, cmd_pos;
    //MenuItem*	pMenuItem;

    cmd_pos =_FIRSTER_ICON_START_COL;
    COsdCoreLoad1BiTIcon(pMenuItemSet->ucStartRow,pMenuItemSet->ucStartCol,_CP_WHITE,GET_LANGUAGE(),pMenuItemSet->pTitleString);
    for (ucCount=0;ucCount<5;ucCount++)
    {
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
        pData[0]=0;
        pData[1]=_CP_WHITE;
        pData[2]=0;
        pData[3]=0;
        COsdFxLoadIcon(pMenuItemSet->ucStartRow,cmd_pos,0,1,pData,tOsdFontMainItemIconStrSet[ucCount]);
#else
COsdCoreLoad1BiTIcon(pMenuItemSet->ucStartRow,cmd_pos,_CP_WHITE,GET_LANGUAGE(),tOsdFontMainItemIconStrSet[ucCount]);
#endif
        if (ucCount==2)//20070528
        {
#if (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
            COsdFxChange2bitColor(pMenuItemSet->ucStartRow,cmd_pos,2, 4,0,_CP_YELLOW,0,0);
#else
COsdFxChange1bitColor(pMenuItemSet->ucStartRow,cmd_pos,2, 4,_CP_YELLOW,_CP_BLACK);
#endif
        }
        cmd_pos += _MAINMENU_ITEMWIDTH/_FONT_WID;
    }
    //pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[0];
    //stLayerStack[ucLayerIndex].ucMainMenu = 0;
    //COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,0,0);

}
#endif

//---------------------------------------sva
void COsdCoreInitColortempWindow(void)
{
    MenuItem *	pMenuItem;
    SubMenuInfo	xdata stSubmenuInfo;
    ItemObject *	pItemObject;//20070512
    WindowStyle xdata stSubWindowStyle;

//COsdFxShowNumber(0, 21, stLayerStack[ucLayerIndex].ucMainMenu, 0x23, _CP_WHITE_1);
    pMenuItem = (stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem;
    pMenuItem = ((MenuItem *[])pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];


#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
//clr arrow of content
    if (GET_FACTORYSTATUS())
        COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
    else
    {
        if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
        {
            COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(1-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
            COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(2-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
        }
        else
            COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
    }

#else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

if (GET_FACTORYSTATUS())
    COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
else
    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

#endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

#else	//#if _PCB_TYPE==_PCB_PT2662F1A

if (GET_FACTORYSTATUS())
    COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
else
    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

#endif	//#if _PCB_TYPE==_PCB_PT2662F1A


    if (pMenuItem->pString ==tOsdSignalSourceStr)//add by xyw 071019
    {
        COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019
    }


    stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;

    stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
    COsdCoreShowSubMenuItem(&stSubmenuInfo);

    //rewrite sub page title of Manual Scan Page
    //maybe, this can expand to other pages.
    //DebugPrintf("init sub: ucLayerIndex=%d\n", ucLayerIndex);
    if (pMenuItem->pString == tOsdManualScanStr)
    {
        //COsdCoreLoad1BiTIcon(4,0x0b-2,pMenuItem->ucActiveColor,GET_LANGUAGE(),pMenuItem->pString);
        usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
        COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, pMenuItem->ucActiveColor, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);
#if _ADD_CHINESE
        //CosdCoreShowNoteMessage(13,2,3,3,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
        CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,3,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
#endif
    }
    else if (pMenuItem->pString == tOsdAutoScanStr)
    {
        //COsdCoreLoad1BiTIcon(4,0x0b-2,pMenuItem->ucActiveColor,GET_LANGUAGE(),pMenuItem->pString);
        usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
        COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, pMenuItem->ucActiveColor, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);
#if _ADD_CHINESE
        //CosdCoreShowNoteMessage(13,2,3,3,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
        CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,3,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
#endif
    }
    else if (pMenuItem->pString == tOsdChannelEditSwapStr)
    {
        //COsdCoreLoad1BiTIcon(4,0x0b-2,pMenuItem->ucActiveColor,GET_LANGUAGE(),pMenuItem->pString);
        usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pMenuItem->pString);
        COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, pMenuItem->ucActiveColor, _CP_BLACK, GET_LANGUAGE(),pMenuItem->pString);
    }
//-----------------------------------------

    pItemObject = &(pMenuItem->pItemList[0]);
    if (GET_FACTORYSTATUS())
        COsdCoreUpdateItem(pItemObject,_VALUE_F_ROW,_MID_COL_POSITION,0,1);
    else
        COsdCoreUpdateItem(pItemObject,_VALUE_U_ROW,_MID_COL_POSITION,0,1);

    //if(pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE)//||pItemObject->ucType == _BRACKET1_TYPE )
    //modified by xyw 070927
#if _TIMER_PAGE_SUPPORT
    if (pItemObject->ucType == _BRACKET_TIMER_TYPE||pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE ||pItemObject->ucType == _BRACKET1_TYPE )
#else	//#if _TIMER_PAGE_SUPPORT
if (pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE ||pItemObject->ucType == _BRACKET1_TYPE )
#endif	//#if _TIMER_PAGE_SUPPORT

    {
        if (!GET_FACTORYSTATUS())
        {
            stSubWindowStyle = *((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow);
            COsdFxDrawWindow(&stSubWindowStyle);
        }
        //COsdFxClearText(12, 2, 1, 24);
    }
    else
    {
        //COsdFxClearText(12, 2, 1, 24);
        if (GET_FACTORYSTATUS())
            COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
        else
            COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);
    }
    /*
    //if(ucLayerIndex==1)
    if((ucLayerIndex==1) &&(stLayerStack[ucLayerIndex].ucMainMenu==0))
    {
    stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
    COsdFxHLine(ROW(5+GET_COLOR_TEMP_TYPE()), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw
    }
    else
    {
    // stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
    //COsdFxHLine(ROW(5+GET_COLOR_TEMP_TYPE()), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw
    COsdFxHLine(ROW(5), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);
    }
    */

}


//-----------------------------------------------



#if 0
void COsdCoreInitColorAdjustSubWindow(void)
{
    //if(COsdCtrlGetColorTemp() == 4)  //delete by xyw 070830
    COsdCoreInitSubWindow();
    //else
    //ucLayerIndex--;
}
#endif
/**
* To Initialze extend menu environment to show
* @param None
* @return None.
*/
#if 0
void COsdCoreInitExtendWindow(void)
{
    UINT8 ucCount, ucCol;
    MenuItem  *pMenuItem;
    ItemObject 	*pItemObject;
    ItemObject 	*pItemObject1;
    ItemSelectStruct  * pItemSelectStruct;
    ItemSelectDialog  *pItemSelectDialog;
    WindowStyle xdata stMoveWindowStyle;
    UINT16 xdata usBnkLength, usPreBnkLength, usSegmentLength;

    pMenuItem = ((MenuItem *[])stLayerStack[ucLayerIndex].pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
    pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;

    COsdFxMapSetting(_OSD_MAP1);
    COsdFxDrawWindow(pItemSelectDialog->pBackGroundWindow);
    COsdFxDrawWindow(pItemSelectDialog->pForegroundWindow);

    usPreBnkLength = pItemSelectDialog->pForegroundWindow->stPosition.usXStart + pMenuItem->usSpaceInSubMenu;
    usSegmentLength = ((12 * 41 - 20) / pItemSelectDialog->ucCol);
    COsdFxLoadText(0, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, pItemSelectDialog->pTitleString);
    COsdFxLoadText(1, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, pItemSelectDialog->pLabelString);

    ucCol = 0;
    for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
        pItemObject = &(pItemSelectDialog->pItemList)[ucCount];
        pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
        if (pItemSelectStruct->ucCol == 0) {
            usBnkLength = usPreBnkLength;
            ucCol = 0;
        } else {
            pItemObject1 = &(pItemSelectDialog->pItemList)[ucCount-1];
            usBnkLength = usSegmentLength - COsdFxCalTextWidth(GET_LANGUAGE(), pItemObject1->pString);
        }
#if _CHINESE_SIMPlIFIED_CHARACTER
        if (ucCount != 0)
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucUnActiveColor, _CP_BLACK,  GET_LANGUAGE(), pItemObject->pString);
        else
            COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucActiveColor, _CP_BLACK,  GET_LANGUAGE(), pItemObject->pString);
#else
#if( 0)
if ((ucCount != 0)&&(ucCount <= 8))
    COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucUnActiveColor, _CP_BLACK,  0, pItemObject->pString);
else if ((ucCount > 8)&&(GET_INPUTPORT_TYPE(stSystemData.InputSource) ==_VIDEO_TV_PORT ))
    COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength,_CP_GRAY , _CP_BLACK,  0, pItemObject->pString);
else if ((ucCount > 8)&&(GET_INPUTPORT_TYPE(stSystemData.InputSource) ==_DTV_PORT ))
    COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength,pItemObject->ucUnActiveColor , _CP_BLACK,  0, pItemObject->pString);
#else
if (ucCount != 0)
    COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucUnActiveColor, _CP_BLACK,  0, pItemObject->pString);
#endif

else
    COsdFxLoadText(pItemSelectStruct->ucRow + 3, ucCol, usBnkLength, pItemObject->ucActiveColor, _CP_BLACK,  0, pItemObject->pString);
#endif
        ucCol += (COsdFxCalTextCount(0, pItemObject->pString) + COsdFxCalBlankCmdCount(usBnkLength));
    }

    stMoveWindowStyle = *(pItemSelectDialog->pMoveWindow);
    stMoveWindowStyle.stPosition.usXStart = usPreBnkLength;
    stMoveWindowStyle.stPosition.usXEnd = stMoveWindowStyle.stPosition.usXStart + usSegmentLength - 10 ;
    stMoveWindowStyle.stPosition.usYStart = pItemSelectDialog->pForegroundWindow->stPosition.usYStart + 32 * 2 ;
    stMoveWindowStyle.stPosition.usYEnd = stMoveWindowStyle.stPosition.usYStart + 32;
    COsdFxDrawWindow(&stMoveWindowStyle);

    COsdFxLoadText(pItemSelectDialog->ucRow + 3, 0, usPreBnkLength, _CP_WHITE, _CP_BLACK, 0, tOsdKeyDirection_NoteStr);

    COsdFxEnableOsd();
}
#endif
/**
* Osd handler.
*/
void COsdHandler(void)
{

    if (ucOsdMessage == _NONE_KEY_MESSAGE)
        return;

    DebugPrintf("\n ucOsdState = %d",ucOsdState);
    //DebugPrintf("\n ucExtendMenuRow = %d",ucExtendMenuRow);
    //DebugPrintf("\n ucExtendMenuCol = %d",ucExtendMenuCol);
    DebugPrintf("\n ucLayerIndex = %d",ucLayerIndex);
    DebugPrintf("\n ucMainMenu = %d",stLayerStack[ucLayerIndex].ucMainMenu);
    DebugPrintf("\n ucSubMenu = %d",stLayerStack[ucLayerIndex].ucSubMenu);
    DebugPrintf("ucOsdMessage=%d\n",ucOsdMessage);
    //DebugPrintf("ucOsdState=%d\n",ucOsdState);


    // if "GET_ICON_MOVE_ENABLE()" is true, the font map of chinese is logo font,
    // so we must load chinese again while anything others will be shown.
    if (GET_ICON_MOVE_ENABLE())
    {
        COsdIconMoveDisableResetEnv();
    }

    if ((GET_LIGHTPOWERSTATUS() == _OFF)&&(ucOsdMessage != _EXIT_KEY_MESSAGE))
    {
        //DebugPrintf("\nwakeup osd\n",0);
        if (ucCurrState == _SLEEP_STATE)
        {
            LED_Message(_LED_MSG_GREEN);
            CModeSetFreeRun();
            CPowerPanelOn();
            // Enable display timing
            CScalerSetBit(_VDISP_CTRL_28, ~(_BIT5 | _BIT3 | _BIT1 | _BIT0),(_BIT5 | _BIT1 | _BIT0));
        }
        else
        {
            CScalerEnableDisplayOutput();
        }
    }

#if 0//((_MCU_TYPE == _REALTEK_RTD2662_EMCU) && (_DEBUG_TOOL == _RS232)) //fjyang
    if (ucOsdMessage == _RTD2662_ISP_MESSAGE){
        if (ucRtd2662IspFlag == 0){ //ISP
            MCU_PIN_SHARE_CTRL00_FF96 &= 0x07;
            ucRtd2662IspFlag = 1;
        }
        else{ //RS232
            MCU_PIN_SHARE_CTRL00_FF96 |= 0xF8;
            ucRtd2662IspFlag = 0;
            //DebugPrintf("\nEnter RS232 Debug!!! \n", 'i');
        }
        return;
    }
#endif

#if _TIMER_SLEEP_HINT_SUPPORT
    if (ucOsdMessage ==  _EXIT_KEY_MESSAGE)
        bTimeoverHintOsdState = 0;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT


    if (ucOsdMessage ==  _EXIT_KEY_MESSAGE)
    {
#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        if (GET_ITEM_SELECTED())
        {
            CLR_ITEM_SELECTED();
            COsdFxCloseWindow(5);
        }
#else	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G

if (bExitEvent)
{
    bExitEvent = 0;
    //20070407, auto config/color return exit event, cause osd close
    if (ucOsdState!=_USER_DEFINED_STATE)
    {
        ucOsdState = _IDLE_STATE;
        CLR_SHOW_NO_SIGNAL();
    }
}
#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        DebugPrintf("\n_EXIT_KEY_MESSAGE, ucOsdState=%d\n",ucOsdState);
        //DebugPrintf("\nucOsdMessage=%d\n",ucOsdMessage);


        switch (ucOsdState)
        {
#if( 0)
        case _LOGO_STATE://731501
            return;//731501
#endif
        case _AUTOSCANCHANNEL_STATE:
            return;
        case _VBI_SHOW_STATE:
            return;
        case _VCHIPMULTISELECT_STATE:
        case _VCHIPDIALOG_STATE:
        case _EXTENDMENU_STATE:
        case _ENTER_VCHIPDIALOG_STATE:
        case _CHANGE_PASSWORD_STATE:
        case _USER_DEFINED_STATE:
            DebugPrintf("COsdBackMenuProc()=%d\n",ucOsdState);
            COsdBackMenuProc();
            COsdCoreSetState(_MAINMENU_STATE);
            return;
        case _MAINMENU_STATE:
        case _CHANNELEDIT_STATE:  //yf_zhang 2007-6-8 10:14
#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            //sub menu (ucLayerIndex>0): return to main directly
            if ((ucLayerIndex) && (stLayerStack[ucLayerIndex].ucSubMenu != 0))
                stLayerStack[ucLayerIndex].ucSubMenu = 0;

            if (stLayerStack[ucLayerIndex].ucSubMenu != 0)
            {
                {
                    //SubMenuInfo	xdata stSubmenuInfo;
                    //ItemPosition	xdata stMoveSubItemPos;
                    //UINT8 ucMoveByRow;

                    //pMenuItem = ((MenuItem *[])stLayerStack[ucLayerIndex].pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
                    //ucMoveByRow=pMenuItem->ucMoveByRow;

                    //stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
                    //ucMoveByRow=1;//((MenuItem *[])stSubmenuInfo.pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu]->ucMoveByRow;
                    //stMoveSubItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->pForegroundWindow->stPosition;
                    //stMoveSubItemPos.usYStart += (stLayerStack[ucLayerIndex].ucSubMenu-1)*ucMoveByRow*_ROW_HEIGHT;
                    //stMoveSubItemPos.usYEnd += (stLayerStack[ucLayerIndex].ucSubMenu-1)*ucMoveByRow*_ROW_HEIGHT;
                    //stSubmenuInfo.stItemPosition = stMoveSubItemPos;
                    //stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
                    //COsdSubMenuItemChangeColor(&stSubmenuInfo, stLayerStack[ucLayerIndex].ucSubMenu, 0);
                    //premier, add for refresh slider color
                    COsdCoreFreshItem(1);
                }

                stLayerStack[ucLayerIndex].ucSubMenu = 0;

                //COsdFxDisableOsd();
                //stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
                //COsdMainMenuItemChangeColor(stLayerStack[ucLayerIndex].pMenuItemSet, 0, 0);
                COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);

                CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
                //premier, update note line by auto return function
                //COsdFxShowNote();
                return;
            }
#endif
            if (ucLayerIndex > 0) {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                if (ucOsdState==_CHANNELEDIT_STATE) //yf_zhang 2007-6-8 16:16
                    COsdCoreSetState(_MAINMENU_STATE);
                return;
            }
            CLR_SHOW_NO_SIGNAL();
            //CLR_SHOW_NO_SIGNAL(); //tommy delete for don't display when exit menuosd
        default:
            //A: press L/R @ sleep/nosignal, quit short menu, show no signal again
            if (ucOsdState==_VOLIMN_STATE)
                CLR_SHOW_NO_SIGNAL();

            COsdFxDisableOsd();
            CTimerCancelTimerEvent(COsdFxExitEvent);
            //ucFactoryFlag=0;
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            //avoid source selection cause volume short bar.
            //20070328, change to slow down Main menu show again
            //if (ucOsdState==_CHANGE_SOURCE_STATE)
            CTimerDelayXms(500);

            //A: call some osd @ no signal shown, quit the osd, show no signal again
            //if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            if (ucSyncProcessState==_NOSIGNAL_STATE ||ucVideoProcessState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            {
                if (!GET_SHOW_IS_NOSIGNAL_STATE())
                {
                    if (GET_LIGHTPOWERSTATUS() == _OFF)
                    {
                        CPowerPanelOn();
                    }

                    //COsdShowNoSignalOrSrc(1);
                    //////////////////////////////////////
                    if (	GET_BURNSTATUS())
                        CTimerReactiveNosignal_Icon_Powersaving(0);
                    else
                        CTimerReactiveNosignal_Icon_Powersaving(1);

                    if ((GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT))
                    {
#if _TV_BACKGROUND_OPTION_SUPPORT
                        if  (GET_TV_BACKGROUND()==0)
#else
if  (0)//(GET_TV_BACKGROUND()==0)
#endif
                        {
                            //CVideoDisplaySet();
                            CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT7 | _BIT1 | _BIT0));
                        }
                        else
                        {
                            CModeSetFreeRun();
                            CScalerSetBit(_VDISP_CTRL_28, ~(_BIT7 | _BIT5 | _BIT3 | _BIT1 | _BIT0), (_BIT5 | _BIT1 | _BIT0));
                            CAdjustBackgroundColor(0,0,0x80);
                        }
                    }
                    else
                    {
                        CModeSetFreeRun();
                        CAdjustBackgroundColor(0x00, 0x00, 0x00);
                    }

                    //////////////////////////////////////
                    SET_SHOW_IS_NOSIGNAL_STATE();
                }
            }
            //show no support
            if (ucSyncProcessState==_NOSUPPORT_STATE)
            {
                if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_DSUB_A0_PORT||
                        GET_INPUTPORT_TYPE(stSystemData.InputSource)==_DVI_PORT)
                {
                    if (GET_LIGHTPOWERSTATUS() == _OFF)
                    {
                        CPowerPanelOn();
                    }

                    CModeSetFreeRun();

                    CTimerReactiveTimerEvent(SEC(3), CModeNoSupportEvent);
                }
            }

            if (ucOsdState == _CHANNELEDIT_STATE)
                ;//CTimerReactiveTimerEvent(SEC(2), COsdActiveMuteIcon);
#if 0//(_DEMO_MODE_HINT_SUPPORT)
            //20070404
            //else if (GET_DEMO_MODE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
            else if ((bTimeoverHintRequest==0)&&GET_DEMO_MODE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
            {
                CTimerReactiveTimerEvent(SEC(2), COsdActiveDemoHint);
                CTimerCancelTimerEvent(COsdFxExitEvent);
            }
#endif

#if _TIMER_SLEEP_HINT_SUPPORT//if timer page support, review this)
            else if ((bTimeoverHintRequest==0)&&GET_AUDIO_MUTE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
            {
                CTimerReactiveTimerEvent(SEC(2), COsdActiveMuteIcon);
                CTimerCancelTimerEvent(COsdFxExitEvent);
            }
#endif	//#if (if timer page support, review this)


            COsdCoreSetState(_IDLE_STATE);

#if 0//(if tcl ir type support, review this)
            if (GET_IR_CLEAR_REQ())
            {
                CLR_IR_CLEAR_REQ();
                CIrReset();
                //COsdMessageInitial();
                CTimerDelayXms(400);
            }
#endif	//#if (if tcl ir type support, review this)

            return;
        }

    }
#if  0
    bCcStartFlag = 0;
#endif

    switch (ucOsdState) {
#if( 0)
    case _LOGO_STATE://731501
        break;//731501
#endif
    case _IDLE_STATE:
    case _MUTE_STATE:
    case _SLEEP_MESSAGE_STATE:
        COsdCoreIdleEventProc();
        break;

#if _TIMER_SLEEP_HINT_SUPPORT//(_SLEEP_TIMEOVER_HINT_SUPPORT)
    case _SHOW_SLEEP_TIMEOVER_HINT_STATE:
        COsdFxShowStatusRedrawSleepRemind(0);
        break;
#endif
#if _TIMER_SLEEP_HINT_SUPPORT
    case _SHOW_TIMESTOP_TIMEOVER_HINT_STATE:
        COsdFxShowStatusRedrawTimeStopRemind(0);
        break;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    case _NOSIGNAL_MESSAGE_STATE:
    case _NOCABLE_STATE:
        COsdNoSignalEventProc();
        break;
    case _VOLIMN_STATE:
        COsdCoreVolumnChangeProc();
        break;

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
    case _BRIGHTNESS_STATE:
        COsdCoreBrightnessChangeProc();
        break;
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
    case _CONTRAST_STATE:
        COsdCoreContrastChangeProc();
        break;
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
    case _COLOR_STATE:
        COsdCoreColorChangeProc();
        break;
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)

#if _TIMER_SLEEP_HINT_SUPPORT
    case _SLEEP_HINT_STATE:
        COsdCoreSleepHintChangeProc();
        break;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    case _MAINMENU_STATE:
        COsdCoreMainMenuEventProc();
        break;
    case _EXTENDMENU_STATE:
        COsdCoreExtendMenuEventProc();
        break;
    case _CHANNELEDIT_STATE:
        COsdCoreChannelEditEventProc();
        break;

#if(_Change_SOURCE_Type == Change_SOURCE_Type2)
    case _CHANGE_SOURCE_STATE:
        COsdChangeSourceProc();
        break;
#endif

#if (_PICT_EFFECT_SUPPORT)
    case _PICT_EFFECT_STATE:
        COsdCorePictEffectChangeProc();
        //SET_IR_CLEAR_REQ();
        break;
#endif

#if _AUDIO_EFFECT_SUPPORT
    case _AUDIO_EFFECT_STATE:
        COsdCoreAudioEffectChangeProc();
        break;
#endif

#if _DISP_RATIO_M2_SUPPORT
#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
    case _RATIO_MODE_STATE:
        COsdCoreDispRatioChangeProc();
        //----------------------------add by xyw 080220 at jpe
        if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
        {
            if (ucOsdMessage==_DisplayRatio_KEY_MESSAGE)
            {
                COsdCoreDispRatioProc();
                COsdCoreSetState(_RATIO_MODE_STATE);
                CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
            }

        }
        //-----------------------------------------------------
        break;
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
#endif
    };
}

static void COsdCoreIdleEventProc(void)
{

#if(SKYWORTH_DISPLAYPROTECT == _ENABLE)
    if ( (ucOsdMessage !=_OK_KEY_MESSAGE)&&(ucOsdMessage != _SHOW_NOSIGNAL_MESSAGE)&&(ucOsdMessage != _EXIT_KEY_MESSAGE)&&
            (ucOsdMessage !=_CC_KEY_MESSAGE)&&(ucOsdMessage != _REPEAT_KEY_MESSAGE))
    {
        //CTimerCancelTimerEvent(COsdFxSetWinMovingEvent);
        COsdFxDisableOsd();
        //COsdDispFirstTimeLoadFont();
    }
#endif
    switch (ucOsdMessage) {
    case _SHOW_BOOT_MESSAGE:
#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
        bTimeoverHintOsdState = 1;
#endif
        COsdDispFirstTimeLoadFont();
        COsdFxShowSource();
        CScalerSetBit(_OVERLAY_CTRL_6C, 0x23, (GET_OSDBLENDING() & 0x07) << 2);
        break;


    case _DISPLAY_KEY_MESSAGE:
        CTimerCancelNosignal_Icon_Powersaving();
        if ((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA)||(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
            COSdCoreShowVGAInfo();
        else
            COsdFxShowSource();

        COsdCoreSetState(_IDLE_STATE);
        CLR_SHOW_NO_SIGNAL();
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;

    case _RETURN_KEY_MESSAGE:
#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
        bTimeoverHintOsdState = 1;
#endif
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT)
        {
            COsdCoreReturnPrevChannel();
            CLR_SHOW_IS_NOSIGNAL_STATE();
        }
#if 0//(_KEY_UPDOWN_TO_TV_SUPPORT)
        //if current input source is not tv, change to tv immediately while UP/DOWN key is pressed.
        else
        {
            //!!! according to _INPUT_PORT_MAX !!!
            //COsdChangeSourceToSpecified(7);
            for (pData[0]=0; pData[0]<_INPUT_PORT_MAX; pData[0]++)
            {
                if (GET_INPUTPORT_TYPE(pData[0])==_VIDEO_TV_PORT)
                {
                    COsdChangeSourceToSpecified(pData[0]);
                    break;
                }
            }
        }
#endif
        break;

    case _SHOW_NOSIGNAL_MESSAGE:
//#if (SKYWORTH_DISPLAYPROTECT == _ENABLE)  //_ENABLE  _DISABLE
//#else
        COsdFxShowStatus(_SHOW_NOSIGNAL);
//#endif
        break;

    case _SHOW_ICONMOVE_MESSAGE:
        CTimerCancelTimerEvent(COsdFxExitEvent);
        COsdFxShowIconMove(_SHOW_ICONMOVE);
        break;

    case _SHOW_NOCABLE_MESSAGE:
        COsdFxShowStatus(_SHOW_NOCABLE);
        break;

    case _SHOW_NOSUPPORT_MESSAGE:
        COsdFxShowStatus(_SHOW_NOSUPPORT);
        break;

#if _TIMER_SLEEP_HINT_SUPPORT
    case _SHOW_SLEEP_TIMEOVER_HINT_MESSAGE:
        COsdFxShowStatus(_SHOW_SLEEP_TIMEOVER_HINT);
        COsdCoreSetState(_SHOW_SLEEP_TIMEOVER_HINT_STATE);
        break;
    case _SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE:
        COsdFxShowStatus(_SHOW_TIMESTOP_TIMEOVER_HINT);	//hint text share with sleep function
        COsdCoreSetState(_SHOW_TIMESTOP_TIMEOVER_HINT_STATE);
        break;
    case _SHOW_TIMEREMIND_MESSAGE:
        COsdFxShowStatus(_SHOW_TIMEREMIND_MESSAGE);	//hint text share with sleep function
        break;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    case _SHOWINFO_MESSAGE:
        if ((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA)||(GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
            COSdCoreShowVGAInfo();
        //review COSdCoreShowYPbPrInfo(), this may not need.
        else if (GET_INPUTSOURCE_TYPE()== _SOURCE_YPBPR)
            COSdCoreShowYPbPrInfo();
        else
            COsdFxShowSource();

        break;

    case _MENU_KEY_MESSAGE:
        stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
        if (GET_LANGUAGE() == _CHINESE_S){
#if(_HARDWARE_LOAD_FONT == _ON)
#if (_C_FONT_CHS_TYPE == _C_1FONT_CHS)
            //CScalerLoadHardwareVLCFont(tICOM_CHI_COLORVIDEO,0x88);  //tommy add for load osdtitle 070525
#elif (_C_FONT_CHS_TYPE == _C_2FONT_CHS)
//CScalerLoadHardwareVLCFont(tICOM_CHI_COLORVIDEO,0xe8);
#endif
            //CScalerLoadHardwareVLCFont(tFONT_CHI_P1, 0xd0);//0xe0 // SKYWORTH_CHINESE tommy change070524
#else
//CScalerLoadFont(tFONT_CHI_P1, 0xE0, 0x20, _COMPRESS_FONT);
#endif
        }//20070525 for advanced item display error
        COsdFxEnableOsd();
        COsdCoreSetState(_MAINMENU_STATE);

        CLR_SHOW_IS_NOSIGNAL_STATE();

        CTimerCancelNosignal_Icon_Powersaving();

        break;

#if (_REMOTE_CONTROL == _NEC_TYPE) //fjyang
    case _VOLUME_DEC_MESSAGE:
    case _VOLUME_INC_MESSAGE:
#else
case _RIGHT_KEY_MESSAGE:
case _LEFT_KEY_MESSAGE:
#endif
        COsdCoreVolumnProc();
        COsdCoreSetState(_VOLIMN_STATE);

        CLR_SHOW_IS_NOSIGNAL_STATE();

        break;

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
    case _BRIGHTNESS_KEY_MESSAGE:
        COsdCoreBrightnessProc();
        COsdCoreSetState(_BRIGHTNESS_STATE);
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
    case _CONTRAST_KEY_MESSAGE:
        COsdCoreContrastProc();
        COsdCoreSetState(_CONTRAST_STATE);
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
    case _COLOR_KEY_MESSAGE:
        COsdCoreColorProc();
        COsdCoreSetState(_COLOR_STATE);
        CLR_SHOW_IS_NOSIGNAL_STATE();
        break;
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)

    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
        {
            COsdChangeTVChannelProc();
            CLR_SHOW_IS_NOSIGNAL_STATE();
        }
        //if current input source is not tv, change to tv immediately while UP/DOWN key is pressed.
        else
        {
            //!!! according to _INPUT_PORT_MAX !!!
            //COsdChangeSourceToSpecified(7);
            /*
            for (pData[0]=0; pData[0]<_INPUT_PORT_MAX; pData[0]++)
            {
            if (GET_INPUTPORT_TYPE(pData[0])==_VIDEO_TV_PORT)
            {
            COsdChangeSourceToSpecified(pData[0]);
            break;
            }
            }
            */
        }
        //CLR_SHOW_IS_NOSIGNAL_STATE();
        break;

    case _SOURCE_KEY_MESSAGE:

#if(_Change_SOURCE_Type == Change_SOURCE_Type1)
        COsdChangeSourceProc();
#elif(_Change_SOURCE_Type == Change_SOURCE_Type2)
#if(SKYWORTH_OSD == _ENABLE )
//DebugPrintf("Enter here for change source!!!!", 0);
COsdCoreShowSourceMessage();
COsdCoreSetState(_CHANGE_SOURCE_STATE);
#else
ucSourceTemp = stSystemData.InputSource;
ucSourceTemp++;

if (ucSourceTemp == _INPUT_PORT_MAX)
    ucSourceTemp = 0;

COsdFxChangeSourceShow();
CTimerReactiveTimerEvent(SEC(2), COsdChangeSourceEvent);
COsdCoreSetState(_CHANGE_SOURCE_STATE);
#endif

CLR_SHOW_IS_NOSIGNAL_STATE();

#endif
        break;

    case _ENTER_FACTORY_MODE_MESSAGE:
        CEepromLoadDefault();
        break;

    case _DO_AUTO_CONFIG_MESSAGE:
        if (GET_INPUTSOURCE_TYPE() == _SOURCE_VGA){
            COsdFxShowStatus(_SHOW_AUTOADJUST);
            CAutoDoAutoConfig();
            COsdFxDisableOsd();
            COsdMessagePush(_SHOWINFO_MESSAGE);// add by xyw 080303 at jpe
        }
        break;



    case _MUTE_KEY_MESSAGE:
#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
        bTimeoverHintOsdState = 1;
#endif
        COsdCoreMuteChangeProc();
        break;

    case _SHOW_MUTE_IDLE_MESSAGE:
        COsdCoreMuteChangeShow();//COsdCoreMuteShowProc();
        CTimerCancelTimerEvent(COsdFxExitEvent);
        break;
//disable by czl 071126
        //  case _DisplayRatio_KEY_MESSAGE:
        //		#if(_DISPLAY_RATIO_ENABLE)
        //              COsdCoreDisplayRatioProc();
        //		#endif
        //    break;

    case _SLEEP_KEY_MESSAGE:
        COsdCoreSleepProc();
#if _TIMER_SLEEP_HINT_SUPPORT
        CLR_SHOW_IS_NOSIGNAL_STATE();
        COsdCoreSetState(_SLEEP_HINT_STATE);
#endif
        break;

#if (_PICT_EFFECT_SUPPORT)
    case _PICT_MODE_KEY_MESSAGE:
        //if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
    {
        COsdCorePictEffectProc();
        COsdCoreSetState(_PICT_EFFECT_STATE);
    }
    break;
#endif
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _PictureMode_KEY_MESSAGE:
        COsdCorePictureModeProc();
        break;
#endif
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
        //if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
    {
        COsdCoreAudioEffectProc();
        COsdCoreSetState(_AUDIO_EFFECT_STATE);
    }
    break;
#endif
#if (_DISP_RATIO_M2_SUPPORT)
#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
    case _DisplayRatio_KEY_MESSAGE:


        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _DSUB_A0_PORT)// mask by xyw 080305
            return;


        if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
        {
            COsdCoreDispRatioProc();
            COsdCoreSetState(_RATIO_MODE_STATE);
        }
        break;
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
#endif
    case _VERSION_KEY_MESSAGE:
        COsdFxShowStatus(_SHOW_VERSION);
        break;


#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE //add by xyw 071105
    case _PC_KEY_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _DSUB_A0_PORT)
        {
            CTimerCancelTimerEvent(COsdNoSignalEvent);
            COsdCoreCloseNoSignalOsd();

            CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
            CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

#if _TYPEOF_INPUT==_TYPEOF_INPUT_6SRC

            COsdCtrlSetSingalSource(5);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_7SRC

COsdCtrlSetSingalSource(6);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC

COsdCtrlSetSingalSource(7);//VGA

#endif	//

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

            //SET_SOURCESTATUS(stSystemData.InputSource);
        }
        break;
    case _TV_AV_KEY_MESSAGE:

        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
        {
            TVAV_Value=0;
        }

        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_AV_PORT)
        {

            TVAV_Value=1;
        }

        if (TVAV_Value == 0)
        {
            TVAV_Value=1;
            CTimerCancelTimerEvent(COsdNoSignalEvent);
            COsdCoreCloseNoSignalOsd();

            CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
            CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);

//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

            COsdCtrlSetSingalSource(1);//AV

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

        }
        else
        {

            TVAV_Value=0;
            CTimerCancelTimerEvent(COsdNoSignalEvent);
            COsdCoreCloseNoSignalOsd();

            CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
            CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);

//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

            COsdCtrlSetSingalSource(0);//TV

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

        }


        break;


#endif
#endif	//#if _CUSTOMER_HPC

#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
        //see _INPUT_PORT_MAX
        if (ucOsdMessage == _TV_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _VIDEO_TV_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

                COsdCtrlSetSingalSource(0);//tv

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

            }
        }
        else if (ucOsdMessage == _PC_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _DSUB_A0_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

#if _TYPEOF_INPUT==_TYPEOF_INPUT_6SRC

                COsdCtrlSetSingalSource(5);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_7SRC

COsdCtrlSetSingalSource(6);//VGA

#elif _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC

COsdCtrlSetSingalSource(7);//VGA

#endif	//

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            }
        }
        else if (ucOsdMessage == _AV_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _VIDEO_AV_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

                COsdCtrlSetSingalSource(1);//AV

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            }
        }
        else if (ucOsdMessage == _SV_KEY_MESSAGE)
        {
            if (GET_INPUTPORT_TYPE(stSystemData.InputSource) != _VIDEO_SV_PORT)
            {
                CTimerCancelTimerEvent(COsdNoSignalEvent);
                COsdCoreCloseNoSignalOsd();
                CAdjustBackgroundColor(0x00, 0x00, 0x00); // enable background color to black
                CScalerSetBit(_VDISP_CTRL_28, 0xff, 0x20);
//according to _INPUT_PORT_MAX
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

                COsdCtrlSetSingalSource(2);//sv

#else	//
//define other pcb
program error!
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
            }
        }
        break;
#endif	//#if _CUSTOMER_CGT

    case  _YPBPR_AUTO_COLOR_MESSAGE://gary for ypbpr auto color
        if ((GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR)||(GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8))
        {
            COsdMenuAutoColor();
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            COsdCoreSetState(_IDLE_STATE);
        }
        return;

    case  _PC_AUTO_COLOR:
        if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA && ucSyncProcessState==_ACTIVE_STATE && GET_OSD_NOT_EXIST())
        {
            COsdMenuAutoColor();
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    case  _PC_AUTO_IMAGE:
        if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA && ucSyncProcessState==_ACTIVE_STATE && GET_OSD_NOT_EXIST())
        {
            COsdMenuAutoAdjust();
            ucLayerIndex = 0;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 0;
            COsdCoreSetState(_IDLE_STATE);
        }
        return;

    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        if (1)//(ucOsdMessage >= _0_KEY_MESSAGE && ucOsdMessage <= _100_KEY_MESSAGE)
        {
            //SET_IR_CLEAR_REQ();

            if (1){//(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT) {
#if (_TV_SEL_CH_M3)
                CLR_TV_HYPERLINK_DATA();
                CLR_TV_HYPERLINK_INPUTBIT();

#endif
                CLR_SHOW_IS_NOSIGNAL_STATE();
                CTimerCancelTimerEvent(COsdFxExitEvent);

                CTimerCancelTimerEvent(COsdFxExitEvent);

                if (ucVideoProcessState==_NOSIGNAL_STATE)//add by xyw 080221 at jpe
                    CTimerCancelNosignal_Icon_Powersaving();

                COsdCoreChannelEditShowProc();
                COsdCoreSetState(_CHANNELEDIT_STATE);
                return;
            }
        }

        return;
    default:
        return;
    };

    //premier, for showing mute icon while idle state
    if (ucOsdState == _MAINMENU_STATE)
        CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
    else  // IDLE state
    {
        bit bCancelExit = 1;
        //20070404
#if _TIMER_SLEEP_HINT_SUPPORT//if timer page support, review this.
        if (bTimeoverHintRequest)
        {
            if (ucOsdMessage==_SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE)
                CTimerCancelTimerEvent(COsdFxExitEvent);
            else
                CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
            return;
        }
#endif
        //20070324
        //if ((ucOsdMessage == _SHOW_MUTE_IDLE_MESSAGE)&&GET_AUDIO_MUTE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
        if ((ucOsdState!= _CHANNELEDIT_STATE)&&(ucOsdMessage == _SHOW_MUTE_IDLE_MESSAGE)&&GET_AUDIO_MUTE() && (ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else if (ucOsdMessage == _SHOW_SLEEP_TIMEOVER_HINT_MESSAGE)
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        //20070401
        else if (ucOsdMessage == _SHOW_TIMESTOP_TIMEOVER_HINT_MESSAGE)
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else if (ucOsdMessage == _SHOW_NOSUPPORT_MESSAGE)
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else if (GET_ICON_MOVE_ENABLE())
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
#if 0//(_DEMO_MODE_HINT_SUPPORT)
        //20070326
        //else if ((ucOsdMessage==_MUTE_KEY_MESSAGE) && GET_AUDIO_MUTE())
        else if ((ucOsdMessage==_SHOW_DEMO_MODE_HINT_MESSAGE) && GET_DEMO_MODE()&&(ucOsdState!= _CHANNELEDIT_STATE))
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
#endif
        //20070324
        //else if ((ucOsdMessage==_MUTE_KEY_MESSAGE) && GET_AUDIO_MUTE())
        else if ((ucOsdMessage==_MUTE_KEY_MESSAGE) && GET_AUDIO_MUTE()&&(ucOsdState!= _CHANNELEDIT_STATE))
        {
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        //20071017, press MUTE, show mute icon,this will enter _MUTE_STATE;
        else if ((ucOsdMessage==_REPEAT_KEY_MESSAGE) && GET_AUDIO_MUTE()&&(ucOsdState== _MUTE_STATE))
        {
            bCancelExit = 0;
            //CTimerCancelTimerEvent(COsdFxExitEvent);
        }
        else
        {
            bCancelExit = 0;
            //CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
        }

        //DebugPrintf("\nbCancelExit=%d\n", bCancelExit);

        //20070406
        if (bCancelExit)
            CTimerCancelTimerEvent(COsdFxExitEvent);
        else
            CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);

    }


#if _TIMER_PAGE_SUPPORT
    if (ucOsdMessage == _SHOW_TIMEREMIND_MESSAGE)
        CTimerCancelTimerEvent(COsdFxExitEvent);
#endif
}

static void COsdCoreMainMenuEventProc(void)
{
    MenuItem * pMenuItem;
    ItemObject * pItemObject;
    MenuItemSet * pMenuItemSet;
#if _CUSTOMER_SVA
    UINT8 factoryPassword[4]={1,8,7,8};
#else
UINT8 factoryPassword[4]={1,9,9,9};
#endif

    UINT8 ucFlag,ucCnt;

    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);

    //DebugPrintf("\nMainMenuEventProc():%d", ucOsdMessage);
    //DebugPrintf("ucPasswordInputNum: %d,, ", ucPasswordInputNum);
    //DebugPrintf("ucLayerIndex: %d\n, ", ucLayerIndex);

    switch (ucOsdMessage) {
    case _RIGHT_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
    case _OK_KEY_MESSAGE://test by xyw 080214

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    case _ENTER_KEY_MESSAGE:
#endif
        //prevent NEC IR repeat key or number key disable number input
        if (ucOsdMessage==_REPEAT_KEY_MESSAGE&&(\
                                                ucOsdPreMessage==_0_KEY_MESSAGE||\
                                                ucOsdPreMessage==_1_KEY_MESSAGE||\
                                                ucOsdPreMessage==_2_KEY_MESSAGE||\
                                                ucOsdPreMessage==_3_KEY_MESSAGE||\
                                                ucOsdPreMessage==_4_KEY_MESSAGE||\
                                                ucOsdPreMessage==_5_KEY_MESSAGE||\
                                                ucOsdPreMessage==_6_KEY_MESSAGE||\
                                                ucOsdPreMessage==_7_KEY_MESSAGE||\
                                                ucOsdPreMessage==_8_KEY_MESSAGE||\
                                                ucOsdPreMessage==_9_KEY_MESSAGE||\
                                                ucOsdPreMessage==_NONE_KEY_MESSAGE\
                                               )\
           )
        {
            CTimerDelayXms(300);
            ucOsdPreMessage = _NONE_KEY_MESSAGE;
            ucOsdMessage = _NONE_KEY_MESSAGE;
        }
        else
        {
            ucPasswordInputNum = 0;
            COsdMainMenuDirectionKeyProc(ucOsdMessage);
        }
        break;

    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:

        FactoryInputPassword[ucPasswordInputNum] = ucOsdMessage - _0_KEY_MESSAGE;

        //show password buffer
        //DebugPrintf("FactoryInputPassword[%d, ", FactoryInputPassword[0]);
        //DebugPrintf("%d, ", FactoryInputPassword[1]);
        //DebugPrintf("%d, ", FactoryInputPassword[2]);
        //DebugPrintf("%d]\n\n\n", FactoryInputPassword[3]);

        if (ucPasswordInputNum < 3)
        {
            ucPasswordInputNum++;
        }
        else if (ucPasswordInputNum == 3)
        {
            ucFlag = 1;
            for (ucCnt = 0; ucCnt < 4; ucCnt++)
                if (FactoryInputPassword[ucCnt] != factoryPassword[ucCnt])
                    ucFlag = 0;

            if (!GET_FACTORYSTATUS() && ucFlag)
            {
                SET_FACTORYSTATUS();
                CEepromSaveSystemData();
                COsdCoreInitialze();
                COsdMessagePush(_MENU_KEY_MESSAGE);
                CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
            }
            ucPasswordInputNum = 0;
        }
        break;

    case _MENU_KEY_MESSAGE:
        //test by xyw 080214
        //case _OK_KEY_MESSAGE:   //yf_zhang added ok_key to enter 2007-5-15 10:20

        ucPasswordInputNum = 0;	//20070405, clear password counter

        if (ucLayerIndex > 0)
        {
            ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
            ucLayerIndex--;
            COsdBackMenuProc();
            if (ucOsdState==_CHANNELEDIT_STATE) //yf_zhang 2007-6-8 16:16
                COsdCoreSetState(_MAINMENU_STATE);
            return;
        }
        else
        {
            //DebugPrintf("channel edit state", 0);
            if (stLayerStack[ucLayerIndex].ucSubMenu)
            {
                pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
                //				pMenuItem = pMenuItemSet->pMenuItem;
                //				pMenuItem = ((MenuItem *[])pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
                pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
                pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);

                COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,0,0);
                return;
            }
            else
            {
                ucPasswordInputNum = 0;///clear password
                //20070930, huxj, menu to quit main osd
                COsdMessagePush(_EXIT_KEY_MESSAGE);
                CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
                /*----------------add by xyw 080115-----------
                //MENU KEY to exit factory mode While CLOSE OSD
                if (GET_FACTORYSTATUS())
                {
                //save factory status
                CLR_FACTORYSTATUS();
                CEepromSaveSystemData();
                COsdFxDisableOsd();
                COsdMessageInitial();
                COsdCoreInitialze();
                return;
                }
                --------------------------------------------*/
            }
        }
        break;

#if _TIMER_PAGE_SUPPORT
    case _SHOW_TIMEREMIND_MESSAGE:
#endif	//#if _TIMER_PAGE_SUPPORT

    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _SOURCE_KEY_MESSAGE:
    case _MTS_KEY_MESSAGE:
        //case _DISPLAY_KEY_MESSAGE:
        //case _RETURN_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106

#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC
#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
#endif	//#if _CUSTOMER_CGT


        ucPasswordInputNum = 0;	//20070405, clear password counter

        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);

        COsdCoreInitialze();
        break;

    default:
        return;
    }
}

static void COsdMainMenuDirectionKeyProc(UINT8 message)
{
    //UINT8 result=0;
    UINT8	ucTmpMain, ucTmpSub;
    MenuItem * pMenuItem;
    MenuItem * pTopMenuItem;
    MenuItemSet * pMenuItemSet;
    ItemObject *	pItemObject;
    ItemBracket1* pItemBracket1;
    ItemBracket2* pItemBracket2;

    ItemBracket * pItemBracket;
    ItemImmediate* pItemImmediate;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    WindowStyle stWindowInfo;
#endif

    pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
    pTopMenuItem = pMenuItemSet->pMenuItem;
    pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);

    ucTmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
    ucTmpSub = stLayerStack[ucLayerIndex].ucSubMenu;
#if _TIMER_PAGE_SUPPORT
    if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
    {
        if (message == _REPEAT_KEY_MESSAGE)
        {
            //DebugPrintf("\nucOsdPreMessage = %d\n", ucOsdPreMessage);
            if (ucOsdPreMessage == _UP_KEY_MESSAGE)
                message = _UP_KEY_MESSAGE;
            else if (ucOsdPreMessage == _DOWN_KEY_MESSAGE)
                message = _DOWN_KEY_MESSAGE;
        }
    }
#endif	//#if _TIMER_PAGE_SUPPORT

    //DebugPrintf("\nDirectionKeyProc():message = %d ",message);
    switch (message)
    {
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    case _ENTER_KEY_MESSAGE:
#endif

#if _TIMER_PAGE_SUPPORT
        if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
        {
            //DebugPrintf("\ntarget u/d...\n", 0);
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            //DebugPrintf("\nucExtendMenu Row/Col=%d, ", ucExtendMenuRow);
            //DebugPrintf("%d\n", ucExtendMenuCol);
            if (ucExtendMenuCol != 0)
            {
                //set power on time
                //DebugPrintf("\nStart:  %d:", stTimeData.ucTimeHourStart );
                //DebugPrintf("%d\n", stTimeData.ucTimeMinStart );
                pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
                pItemBracket1->pHandlerFunction(message);
                COsdCoreFreshItem(1);

                if (stTimeData.ucTimeHourStart || stTimeData.ucTimeMinStart)
                    COsdReckonTimerPowerOnEvent();
                else
                    CTimerCancelTimerEvent(COsdReckonTimerPowerOnEvent);
                if (stTimeData.ucTimeMinStop || stTimeData.ucTimeMinStop)
                    COsdReckonTimerPowerOffEvent();
                else
                    CTimerCancelTimerEvent(COsdReckonTimerPowerOffEvent);

                if (stTimeData.ucTimeMinRemind || stTimeData.ucTimeMinRemind)
                    COsdReckonTimerRemindEvent();
                else
                    CTimerCancelTimerEvent(COsdReckonTimerRemindEvent);


                //COsdFxHLine(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                //COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);
                return;
            }
        }

#endif	//#if _TIMER_PAGE_SUPPORT

        //Manual Search page don't implement Up/Down
        if (pMenuItem->pString == tOsdManualScanStr)
            return;
        else if (pMenuItem->pString == tOsdAutoScanStr)
            return;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        if ( (ucOsdPreMessage != _UP_KEY_MESSAGE) && (ucOsdPreMessage != _DOWN_KEY_MESSAGE) && (ucOsdPreMessage != _ENTER_KEY_MESSAGE))
            return;

        if (message==_ENTER_KEY_MESSAGE && stLayerStack[ucLayerIndex].ucSubMenu==0)
        {
            DebugPrintf("\nCOsdMainMenuDirectionKeyProc():message=%d\n", message);
            message = _DOWN_KEY_MESSAGE;
            DebugPrintf("\nCOsdMainMenuDirectionKeyProc():message=%d\n", message);
        }
        else if (message==_ENTER_KEY_MESSAGE && stLayerStack[ucLayerIndex].ucSubMenu!=0)
        {
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);

            }
            else
            {
                // ENTER sub page directly by menu key for the following type:
                if (pItemObject->ucType == _MENU_TYPE || \
                        pItemObject->ucType == _IMMEDIATE1_TYPE || \
                        pItemObject->ucType == _IMMEDIATE_TYPE)
                {
                    SET_ITEM_SELECTED();
                    COsdMessagePush(_RIGHT_KEY_MESSAGE);
                }
                else
                {
                    SET_ITEM_SELECTED();
                    stWindowInfo = tOsdItem_SelectWindow;
#if _FACTORY_MENU_ENABLE
                    if (GET_FACTORYSTATUS())
                    {
                        stWindowInfo.stPosition->usYStart= (stWindowInfo.stPosition)->usYStart-18*5+ 18*(stLayerStack[ucLayerIndex].ucSubMenu-1);
                        stWindowInfo.stPosition->usYEnd = stWindowInfo.stPosition->usYStart+18;
                    }
                    else
#endif	//#if _FACTORY_MENU_ENABLE
                    {
                        stWindowInfo.stPosition->usYStart= (stWindowInfo.stPosition)->usYStart+ 18*(stLayerStack[ucLayerIndex].ucSubMenu-1);
                        stWindowInfo.stPosition->usYEnd = stWindowInfo.stPosition->usYStart+18;
                    }
                    CTimerWaitForEvent(_EVENT_DEN_STOP);
                    COsdFxDrawWindow(&stWindowInfo);
                }
            }
            return;
        }
#else
if ( (ucOsdPreMessage != _UP_KEY_MESSAGE) && (ucOsdPreMessage != _DOWN_KEY_MESSAGE))
    return;
#endif
        if (message == _UP_KEY_MESSAGE)
        {
            //up point counter
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
            if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
            {
                //up point counter
                if (ucTmpSub <=1)
                {
                    if (ucExtendMenuCol == 1)	//current is first colum
                    {
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
                        ucExtendMenuRow=3;
#else
ucExtendMenuRow=4;
#endif

                        ucExtendMenuCol=2;
                        ucTmpSub = ucExtendMenuRow;
                    }
                    else						//current is 2nd colum
                    {
                        ucExtendMenuRow=5;
                        ucExtendMenuCol=1;
                        ucTmpSub = ucExtendMenuRow;
                    }
                }
                else
                    ucTmpSub -= 1;
            }
            else
            {
                //up point counter
                if (ucTmpSub <=1)
                    ucTmpSub = pMenuItem->ucItemCount;
                else
                    ucTmpSub -= 1;
            }
#else	//#if _PCB_TYPE==_PCB_PT2662F1A


//up point counter
if (ucTmpSub <=1)
    ucTmpSub = pMenuItem->ucItemCount;
else
    ucTmpSub -= 1;
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A


#if _OSD_2X
            // if main osd is double size, we should skip the item of OSD H/V adjust
            //Up direction, skip 2 times: H and V
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message,/* pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message,/* pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
#endif

#if _PAL_MASK_HUE
            //PAL hue is in the 0 page os main osd, we skip hue while PAL
            if (ucTmpMain == 0)
            {
                /////////skip PAL-HUE//////////////////////////
                if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
                {
                    COsdCoreSkipVideoHue(&ucTmpSub, /*&ucTmpMain, */message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
                }
            }
#endif
            //record current vertical position, for others
            ucExtendMenuRow = ucTmpSub;

        }

        else if (message == _DOWN_KEY_MESSAGE)
        {
            //down point counter
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
            if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
            {
                //up point counter
                if ((ucTmpSub + 1) > pMenuItem->ucItemCount && ucExtendMenuCol==1)
                {
                    if (ucExtendMenuCol == 1)	//current is first colum
                    {
                        ucExtendMenuRow=1;
                        ucExtendMenuCol=2;
                        ucTmpSub = ucExtendMenuRow;
                    }
                    else						//current is 2nd colum
                    {
                        ucExtendMenuRow=1;
                        ucExtendMenuCol=1;
                        ucTmpSub = ucExtendMenuRow;
                    }
                }
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
                else if ((ucTmpSub + 3) > pMenuItem->ucItemCount && ucExtendMenuCol==2)//
#else
else if ((ucTmpSub + 2) > pMenuItem->ucItemCount && ucExtendMenuCol==2)//
#endif
                {
                    if (ucExtendMenuCol == 1)	//current is first colum
                    {
                        ucExtendMenuRow=1;
                        ucExtendMenuCol=2;
                        ucTmpSub = ucExtendMenuRow;
                    }
                    else						//current is 2nd colum
                    {
                        ucExtendMenuRow=1;
                        ucExtendMenuCol=1;
                        ucTmpSub = ucExtendMenuRow;
                    }
                }
                else
                    ucTmpSub += 1;
            }
            else
            {
                if ((ucTmpSub + 1) > pMenuItem->ucItemCount)
                    ucTmpSub = 1;
                else
                    ucTmpSub += 1;
            }
#else	//#if _PCB_TYPE==_PCB_PT2662F1A

if ((ucTmpSub + 1) > pMenuItem->ucItemCount)
    ucTmpSub = 1;
else
    ucTmpSub += 1;

#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

#if _OSD_2X
            // if main osd is double size, we should skip the item of OSD H/V adjust
            //Down direction, skip 2 times: H and V
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            COsdCoreSkipOsdHV(GET_INPUTPORT_TYPE(stSystemData.InputSource),&ucTmpSub, &ucTmpMain, message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
#endif

#if _PAL_MASK_HUE
            //PAL hue is in the 0 page os main osd, we skip hue while PAL
            if (ucTmpMain == 0)
            {
                /////////skip PAL-HUE//////////////////////////
                if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
                    COsdCoreSkipVideoHue(&ucTmpSub, /*&ucTmpMain, */message, /*pMenuItemSet ->ucItemCount, */pMenuItem->ucItemCount);
            }
#endif
            //record current vertical position, for others
            ucExtendMenuRow = ucTmpSub;

        }

        break;


    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if ((message == _REPEAT_KEY_MESSAGE) && (ucOsdPreMessage != _RIGHT_KEY_MESSAGE) && (ucOsdPreMessage != _LEFT_KEY_MESSAGE))
            return;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
        if (stLayerStack[ucLayerIndex].ucSubMenu != 0)
        {
            if (!GET_ITEM_SELECTED())
            {
                if (message == _LEFT_KEY_MESSAGE)
                    COsdMessagePush(_UP_KEY_MESSAGE);
                else if (message == _RIGHT_KEY_MESSAGE)
                    COsdMessagePush(_DOWN_KEY_MESSAGE);

                return;
            }
        }
#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G


        if (stLayerStack[ucLayerIndex].ucSubMenu == 0)
        {
            //stLayerStack[ucLayerIndex].ucSubMenu == 0: Main Page change

#if (_CUSTOMER_TYPE == _SKYWORTH)  //yf_zhang 2007-6-8 12:54
            if (ucOsdState==_CHANNELEDIT_STATE)
                return;
#endif
            if (message == _LEFT_KEY_MESSAGE)
            {
                ucTmpSub = 0;
                if (ucTmpMain == 0)
                    ucTmpMain = pMenuItemSet ->ucItemCount - 1;
                else
                    ucTmpMain = ucTmpMain - 1;
            }
            else if (message == _RIGHT_KEY_MESSAGE)
            {
                ucTmpSub = 0;
                if ((ucTmpMain + 1) >= pMenuItemSet->ucItemCount)
                    ucTmpMain = 0;
                else
                    ucTmpMain = ucTmpMain + 1;
            }
        }

        //stLayerStack[ucLayerIndex].ucSubMenu != 0: item action for L/R
        else if ((pItemObject->ucType == _SLIDER_TYPE) || (pItemObject->ucType == _SLIDER1_TYPE))
        {
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            //////////////////////////////
            //manual scan sub page
            if (pMenuItem->pString==tOsdManualScanStr)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                CTimerCancelTimerEvent(COsdFxExitEvent);
                CTvManualScan(message);
                return;
            }
            //////////////////////////////
            //auto scan sub page
            else if (pMenuItem->pString==tOsdAutoScanStr)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                CTimerCancelTimerEvent(COsdFxExitEvent);
                CTvAutoScan();
                return;
            }
            //////////////////////////////

            if (pItemObject->ucType == _SLIDER_TYPE)
                COsdFxSliderDirectionProc((ItemSlider*)pItemObject->pStruct, message);
            else
                COsdFxSlider1DirectionProc((ItemSlider1*)pItemObject->pStruct, message);

            ////////Audio Effect Mode Data to User Mode////////////////////
            //COsdCoreApplyAudioEffect(((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu]);

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu], _FALSE);
            /////////////////////////////////////////////////////////
#endif
//////////////////////////////
#if 0//(_PICT_EFFECT_SUPPORT)
            if (((ItemSlider*)pItemObject->pStruct)->pHandlerFunction ==  COsdCtrlSetRgbBrightness ||((ItemSlider*)pItemObject->pStruct)->pHandlerFunction == COsdCtrlSetRgbContrast)
                COsdCoreBriConRefreshRelativeItem((ItemSlider*)pItemObject->pStruct);
#endif
#if 0//(_SOUND_EFFECT_SUPPORT)
            if (((ItemSlider*)pItemObject->pStruct)->pHandlerFunction ==  COsdCtrlSetAudioVolume)
                COsdCoreVolumeRefreshRelativeItem((ItemSlider*)pItemObject->pStruct);
#endif
//////////////////////////////

            return;
        }

#if _TIMER_PAGE_SUPPORT
        else if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
        {
            //DebugPrintf("\ntarget...\n", 0);
            if (( ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

            //////////////////////////////
            //manual scan sub page
            if (1)//(pItemObject->pString==tOsdPowerOnTimerStr)
            {
                if (ucOsdMessage == _RIGHT_KEY_MESSAGE)
                    ucExtendMenuCol = (ucExtendMenuCol+1)%3;
                else
                    ucExtendMenuCol = (ucExtendMenuCol==0)?(2):(ucExtendMenuCol-1);

                CosdCoreShowTimePageWin(ucExtendMenuCol);
            }

            return;
        }

#endif	//#if _TIMER_PAGE_SUPPORT

        else  if (pItemObject->ucType == _BRACKET_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))
                return;

            //DebugPrintf("_BRACKET_TYPE", 0);
            pItemBracket = (ItemBracket*)pItemObject->pStruct;
            (*pItemBracket->pHandlerFunction)();
            COsdCoreFreshItem(1);
#if 0//(_PICT_EFFECT_SUPPORT)
            if (pItemBracket->pHandlerFunction == COsdCtrlSetPictEffect)
                COsdCorePictModeRefreshRelativeItem(pItemBracket);
#endif
            return;
        }
        else if (pItemObject->ucType == _IMMEDIATE_TYPE)
        {
            UINT8 result=0;

            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);
            }
#endif

            pItemImmediate = (ItemImmediate*)pItemObject->pStruct;

            if (((ItemImmediate*)pItemObject->pStruct)->pHandlerFunction == COsdCtrlReset)
                result = 1;

            (*pItemImmediate->pHandlerFunction)();

            if (ucLayerIndex > 0)
            {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                return;
            }

            if (!result)
            {
                COsdCoreFreshItem(1);
            }
            return;

        }
        else if (pItemObject->ucType == _IMMEDIATE1_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

#if _ADD_CHINESE

            if (GET_FACTORYSTATUS())
                COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            else
                COsdFxClearText(_TITLE_U_ROW, _TITLE_U_COL, _TITLE_U_HEIGH, _TITLE_U_WIDTH);

            //COsdCoreLoad1BiTIcon(4,0x0b,_CP_COLOR06,GET_LANGUAGE(),pItemObject->pString);//modified by xyw 070929
            usItemStart = GET_WIN_TITLE_PREBLANK(GET_LANGUAGE(), pItemObject->pString);
            COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_COLOR06, _CP_BLACK, GET_LANGUAGE(),pItemObject->pString);

#endif

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);
            }
#endif


            pItemImmediate = (ItemImmediate*)pItemObject->pStruct;

            (*pItemImmediate->pHandlerFunction)();

            if (ucLayerIndex > 0)
            {
                ucOsdlayerExit=1;// add by xyw to modified Exit Sub Menu blink 071022 ;
                ucLayerIndex--;
                COsdBackMenuProc();
                if (ucOsdState==_CHANNELEDIT_STATE) //yf_zhang 2007-6-8 16:16
                    COsdCoreSetState(_MAINMENU_STATE);
                return;
            }

            return;


        }
        // weixg mod 20070522
        else if (pItemObject->ucType == _SELECTDIALOG_TYPE || pItemObject->ucType == _CONFIRM_TYPE){
            ItemSelectDialog* pItemSelectDialog;


            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

            pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;
            if ((pItemSelectDialog->ucItemCount == 1))
                ucExtendMenuRow = 1;
            else
                ucExtendMenuRow = 0;
            ucExtendMenuCol = 0;
            pItemSelectDialog->pInitializeFunction();
            COsdCoreSetState(_EXTENDMENU_STATE);
            return;
        }
        else if (pItemObject->ucType == _MENU_TYPE) {
            //right key to enter sub item page
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;
            if (GET_FACTORYSTATUS())
            {
                if (pItemObject->pString == tOsdIcmStr)
                {
                    if (GET_ICM_on_off()==_OFF)
                        return;
                }
            }

            ucLayerIndex++;
            stLayerStack[ucLayerIndex].ucMainMenu = 0;
            stLayerStack[ucLayerIndex].ucSubMenu = 1;
            stLayerStack[ucLayerIndex].pMenuItemSet = (MenuItemSet*)pItemObject->pStruct;
            stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();

            pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
            pTopMenuItem = pMenuItemSet->pMenuItem;
            pMenuItem = ((MenuItem *[])pTopMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
            pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
            if (GET_ITEM_SELECTED())
            {
                CLR_ITEM_SELECTED();
                COsdFxCloseWindow(5);
            }
#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G

//note:
//enter into main menu source page,
//ucType is change to _IMMEDIATE_TYPE from _MENU_TYPE
            //////////////////////////////
            //manual/auto scan sub page
            if (pMenuItem->pString==tOsdManualScanStr ||pMenuItem->pString==tOsdAutoScanStr)
            {
                UINT8 ucShowCh=stTvInfo.CurChn;
                BIT bAutoReady = 0;	//pMenuItem->pString will NOT equal to tOsdAutoScanStr after some step, so set this flag

                if (pMenuItem->pString==tOsdAutoScanStr)
                {
                    ucShowCh = 1;
                    //CtvScanFirstShowing(ucShowCh);	//show channel 1
                    bAutoReady = 1;

                    //-------------add by xyw 070927  ------------------------------------
                    ucTmpSub = 2;	//point to start item, it is invisiuable
                    stLayerStack[ucLayerIndex].ucSubMenu = 2; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

                    stTvPdb.pdb = _VH_LOW_STAR;
                    COsdFxClearText(_VALUE_U_ROW,_VALUE_U_COL,_VALUE_U_HEIGH,_VALUE_U_WIDTH);
                    CtvScanFirstShowing(ucShowCh);	//show channel 1
                    //-------------------------------------------------

                }
                else
                {
                    ucShowCh = stTvInfo.CurChn;

                    //-------------add by xyw 070927 -------------------------
                    ucTmpSub = 2;	//point to start item, it is invisiuable
                    stLayerStack[ucLayerIndex].ucSubMenu = 2; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

                    COsdFxClearText(_VALUE_U_ROW,_VALUE_U_COL,_VALUE_U_HEIGH,_VALUE_U_WIDTH);
                    CtvScanFirstShowing(ucShowCh);	//show channel 1
                    //---------------------------------------
                }

                //--------------delete by xyw  070927 -----------------------
                //ucTmpSub = 2;	//point to start item, it is invisiuable
                //stLayerStack[ucLayerIndex].ucSubMenu = 2; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
                //------------------------------------
                //CtvScanFirstShowing(ucShowCh);	//show channel 1

                //for test, show arrow point to item 2
                //COsdFxHLine(ROW(4+ucTmpSub), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);

                //show current channel at end of item: current channel
                //COsdCoreTvShowChannel(ucShowCh);
                //show current channel's frequency at end of item: Frequency
                //COsdCoreTvShowFrequency(stTvPdb.pdb);
                //show current channel's band at end of item: Band
                //COsdCoreTvShowBand(stTvPdb.pdb);

                //show manual srch slider bar at Line 12
                //COsdCoreFreshItem(1);

                //draw slider bg window
                //COsdFxDrawWindow(&tMainMenuItemWindowStyle);
                //modified by xyw 070927
                COsdFxDrawWindow(&tPopdownMenuItemWindowStyle);

                //auto scan, do immediately
                //if (pMenuItem->pString==tOsdAutoScanStr)
                if (bAutoReady)
                {
                    //DebugPrintf("enter manual/auto scan page.... is auto too\n", 0);

                    CTimerCancelTimerEvent(COsdFxExitEvent);
                    CTvAutoScan();
                    return;
                }
                //prevent from doing manual scan just in the page by repeat key
                CTimerDelayXms(500);
                return;
            }
//////////////////////////////
            if (pItemObject->ucType == _IMMEDIATE1_TYPE)
            {
//////////////////////////////
                //enter language page
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;

                //language sub page
                if (pMenuItem->pString==tOsdLanguageStr)
                {
                    //DebugPrintf("enter language page\n", 0);

                    //language
                    ucExtendMenuCol=0;
                    ucExtendMenuRow = GET_LANGUAGE()+1;
                    ucTmpSub = ucExtendMenuRow;
                    stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucExtendMenuRow-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);

                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);// add by xyw 070929

                    //DebugPrintf("initial ucExtendMenuRow=%d\n", ucExtendMenuRow);

                }
                else
                {
                    stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
                    COsdFxHLine(ROW(_ARROW_U_ROW+GET_COLOR_TEMP_TYPE()), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);//xyw
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929
                }
            }
            else if (pItemObject->ucType == _IMMEDIATE_TYPE)
            {

                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;

                //signal source
                ucExtendMenuCol=0;
                ucExtendMenuRow = stSystemData.InputSource+1;
                ucTmpSub = ucExtendMenuRow;
                stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC
                if (stSystemData.InputSource<5)
                {
                    ucExtendMenuCol=1;
                }
                else
                {
                    ucExtendMenuCol=2;
                }
                ucExtendMenuRow = stSystemData.InputSource+1-(ucExtendMenuCol-1)*5;
                ucTmpSub = ucExtendMenuRow;
                stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
#else	//#if _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC

ucExtendMenuCol=0;
ucExtendMenuRow = stSystemData.InputSource+1;
ucTmpSub = ucExtendMenuRow;
stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu

#endif	//#if _TYPEOF_INPUT==_TYPEOF_INPUT_8SRC
#else	//#if _PCB_TYPE==_PCB_PT2662F1A

ucExtendMenuCol=0;
ucExtendMenuRow = stSystemData.InputSource+1;
ucTmpSub = ucExtendMenuRow;
stLayerStack[ucLayerIndex].ucSubMenu = ucExtendMenuRow; //next turn, ucTmpSub is assigned to stLayerStack[ucLayerIndex].ucSubMenu
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
                if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
                {
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucExtendMenuRow-1), _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
                }
                else
                {
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucExtendMenuRow-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
                }
#else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

COsdFxHLine(_ARROW_U_ROW+ucExtendMenuRow-1, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929

#endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

#else	//#if _PCB_TYPE==_PCB_PT2662F1A

COsdFxHLine(_ARROW_U_ROW+ucExtendMenuRow-1, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929

#endif	//#if _PCB_TYPE==_PCB_PT2662F1A

            }

            else if (pItemObject->ucType == _BRACKET1_TYPE)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;

                pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
                pItemBracket1->pHandlerFunction(message);
                //!!! only execute once while enter the page
                //pHandlerFunction() will add SRC_CHANNEL by 1
                //so, do initialize these after pHandlerFunction()
                SET_TV_SWAP_SRC_CHANNEL(stTvInfo.CurChn);
                SET_TV_SWAP_DEST_CHANNEL(stTvInfo.CurChn);
                //-------------------------------------------
                // add by xyw 070927
                ucTmpSub=1;
                COsdCoreFreshItem(1);
                COsdFxHLine(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929
                //-------------------------------------------
                //COsdMenuMoveProc(ucTmpMain, ucTmpSub, 1);// delete by xyw 070927
                return;
            }

#if _TIMER_PAGE_SUPPORT
            else if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
            {
                if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                    return;
                ucExtendMenuCol = 0;	//set time segment position
                ucExtendMenuRow = 1;	//set time item for power on
                pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
                pItemBracket1->pHandlerFunction(message);
                COsdCoreFreshItem(1);
                COsdFxHLine(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);
                return;
            }
#endif	//#if _TIMER_PAGE_SUPPORT

            else
            {
                // stLayerStack[ucLayerIndex].ucSubMenu=GET_COLOR_TEMP_TYPE()+1;
                //COsdFxHLine(ROW(5+GET_COLOR_TEMP_TYPE()), COL(2), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw
                //-----------------------modified by xyw 070929 ------------------------------------------
                if (GET_FACTORYSTATUS())
                {
                    COsdFxHLine(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR06, _CP_BLACK);//add by xyw 070929
                }
                else
                {
                    COsdFxHLine(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR06, _CP_BLACK);
                }
                //-------------------------------------------------------------------------------------------------
            }
            return;

        }

        else if (pItemObject->ucType == _MENU1_TYPE)
        {
            return;
        }

        else if (pItemObject->ucType == _BRACKET1_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pItemBracket1->pHandlerFunction(message);
            COsdCoreFreshItem(1);
            return;
        }

        else if (pItemObject->ucType == _BRACKET2_TYPE)
        {
            if ((ucOsdMessage  == _REPEAT_KEY_MESSAGE))//x.hu20070916
                return;

            pItemBracket2 = (ItemBracket2*)pItemObject->pStruct;
            pItemBracket2->pHandlerFunction(message);
#if _OSD_2X
            if (pItemBracket2->pLableString==tOsdZoomStrSet)
            {
                //UINT8 ucSub;
                //ucSub = stLayerStack[ucLayerIndex].ucSubMenu;
                //stLayerStack[ucLayerIndex].ucSubMenu = _MASK_ITEM_OSD_H;
                //COsdCoreFreshItem(1);
                //stLayerStack[ucLayerIndex].ucSubMenu = _MASK_ITEM_OSD_V;
                //COsdCoreFreshItem(1);
                //stLayerStack[ucLayerIndex].ucSubMenu = ucSub;
                COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu, stLayerStack[ucLayerIndex].ucSubMenu, 1);
            }
            COsdFxEnableOsd();
#endif
            if (pItemBracket2->bActive==1) //yf_zhang 2007-6-4 10:15
                return;
            COsdCoreFreshItem(1);

            return;
        }

        break;

    default:
        return;
    }

    if ((pMenuItemSet->ucItemCount == 1) &&(ucTmpSub == 0))
    {
        if (message == _UP_KEY_MESSAGE)
            ucTmpSub = pMenuItem->ucItemCount;
        else
            ucTmpSub = 1;
    }

#if 0//_ADD_CHINESE
    if (ucLayerIndex==0)
        COsdDispLoadChineseFont(ucTmpMain);
#endif

    COsdMenuMoveProc(ucTmpMain, ucTmpSub, 0);

}

static void COsdMenuMoveProc(UINT8 ucMain, UINT8 ucSub, UINT8 bRefresh)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    UINT8 usBkLength,ucRowOffset;
    MenuItem *	pMenuItem;
    ItemObject *	pItemObject;
    SubMenuInfo	xdata stSubmenuInfo;
    ItemPosition xdata stMoveMainItemPos;
    ItemPosition xdata stMoveSubItemPos;
    WindowStyle xdata stSubWindowStyle;
    UINT8 ItemCount;

    if ((stLayerStack[ucLayerIndex].ucMainMenu == ucMain) && (stLayerStack[ucLayerIndex].ucSubMenu == ucSub) && !bRefresh)
        return;

#if _FACTORY_MENU_ENABLE
    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage = GET_LANGUAGE();
#endif

    pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[ucMain];

    if (((stLayerStack[ucLayerIndex].ucMainMenu != ucMain) || bRefresh) && (stLayerStack[ucLayerIndex].pMenuItemSet->ucItemCount > 1))
    {
        // Make font be black color in first menu item
        //pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
        //get target main page
        stLayerStack[ucLayerIndex].ucMainMenu = ucMain;
        pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];//Ñ¡ÔñÄ³Ò»Ò³

        if (!GET_FACTORYSTATUS())
        {
            // Move MainMenu Window
            COsdFxCloseWindow(stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->ucWindowID);// modified by xyw 080604

            stMoveMainItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->stPosition;
            stMoveMainItemPos.usXStart += stLayerStack[ucLayerIndex].ucMainMenu*4*_FONT_WID;
            stMoveMainItemPos.usXEnd += stLayerStack[ucLayerIndex].ucMainMenu*4*_FONT_WID;
            CTimerWaitForEvent(_EVENT_DEN_STOP);
            COsdFxMoveWindow(&tMainMenuItemWindowStyle,&stMoveMainItemPos);// modified by xyw 080604
        }

        stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
        stSubmenuInfo.stItemPosition = stMoveSubItemPos;
        stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;


        if (!GET_FACTORYSTATUS())
        {
            //COsdCoreLoad1BiTIcon(4,stLayerStack[ucLayerIndex].pMenuItemSet->ucStartCol,_CP_WHITE,ucSelectLanguage,pMenuItem->pString);//ÔØÈëÃ¿Ò³²Ëµ¥µÄ±êÊ¶
            //COsdCoreLoad1BiTIcon(4,0x0b,_CP_COLOR06,ucSelectLanguage,pMenuItem->pString);//ÔØÈëÃ¿Ò³²Ëµ¥µÄ±êÊ¶//modified by xyw 070929
            usItemStart = GET_WIN_TITLE_PREBLANK(ucSelectLanguage, pMenuItem->pString);
            COsdFxLoadText(_TITLE_U_ROW, 0, usItemStart, _CP_COLOR06, _CP_BLACK, ucSelectLanguage,pMenuItem->pString);
            if (!ucOsdlayerExit)// add by xyw to modified Exit Sub Menu blink 071022 ;
                //CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
                CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
            ucOsdlayerExit=0;// add by xyw to modified Exit Sub Menu blink 071022 ;
        }

#if _ADD_CHINESE
        if (ucLayerIndex==0)
        {
            if (GET_LANGUAGE()==_CHINESE_S)
                COsdDispLoadChineseFont(ucMain);
        }
#endif

        COsdCoreShowSubMenuItem(&stSubmenuInfo);

    }

    if ((stLayerStack[ucLayerIndex].ucSubMenu != ucSub) || bRefresh)
    {

        //fjyang20070801
        /*if((!ucFactoryFlag)&&(pMenuItem->ucItemCount > 7)&&
        (((stLayerStack[ucLayerIndex].ucSubMenu == 0)&&(ucSub == pMenuItem->ucItemCount))
        || ((stLayerStack[ucLayerIndex].ucSubMenu == pMenuItem->ucItemCount)&&(ucSub == 0))
        || (((stLayerStack[ucLayerIndex].ucSubMenu%7) == 0)&&(((ucSub-1)%7) == 0)&&(ucSub!=1))
        || ((((stLayerStack[ucLayerIndex].ucSubMenu-1)%7) == 0)&&((ucSub%7) == 0))&&(ucSub!=0)))
        */
        if (0)
        {
            if (stLayerStack[ucLayerIndex].ucSubMenu == 0)
            {
                //ucRowOffset = pMenuItem->ucItemCount - ((pMenuItem->ucItemCount)%7);
                ItemCount = pMenuItem->ucItemCount;
            }
            else if (stLayerStack[ucLayerIndex].ucSubMenu == pMenuItem->ucItemCount)
            {
                //ucRowOffset = 0;
                ItemCount = 7;
            }
            else if (stLayerStack[ucLayerIndex].ucSubMenu < ucSub)
            {
                //ucRowOffset = stLayerStack[ucLayerIndex].ucSubMenu;
                ItemCount = pMenuItem->ucItemCount;
                if ((pMenuItem->ucItemCount-stLayerStack[ucLayerIndex].ucSubMenu)  > 7)
                    ItemCount = stLayerStack[ucLayerIndex].ucSubMenu + 7;
            }
            else if (stLayerStack[ucLayerIndex].ucSubMenu > ucSub)
            {
                //ucRowOffset = stLayerStack[ucLayerIndex].ucSubMenu-1-7;
                ItemCount = stLayerStack[ucLayerIndex].ucSubMenu-1;
            }
            //COsdFxClearText(pMenuItem->ucStartRow, 0, 9, _OSD_UMAIN_COL);
            if (GET_FACTORYSTATUS())
                COsdFxClearText(_CONTENT_F_ROW, _CONTENT_F_COL, _CONTENT_F_HEIGH, _CONTENT_F_WIDTH);
            else
                COsdFxClearText(_CONTENT_U_ROW, _CONTENT_U_COL, _CONTENT_U_HEIGH, _CONTENT_U_WIDTH);

            for (ucRowOffset; ucRowOffset < ItemCount; ucRowOffset++)
            {
                pItemObject = &(pMenuItem->pItemList[ucRowOffset]);
                COsdFxLoadText((pMenuItem->ucStartRow + ((ucRowOffset%7)*2)), pMenuItem->ucStartCol,0, pItemObject->ucUnActiveColor, _CP_BLACK,ucSelectLanguage, pItemObject->pString);
                COsdCoreUpdateItem(pItemObject,(pMenuItem->ucStartRow + ((ucRowOffset%7)*2)),_MID_COL_POSITION,usBkLength,0);
            }
        }
        else if (stLayerStack[ucLayerIndex].ucSubMenu != 0) //
        {
            stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
            stSubmenuInfo.stItemPosition = stMoveSubItemPos;
            stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
            //COsdSubMenuItemChangeColor(&stSubmenuInfo, stLayerStack[ucLayerIndex].ucSubMenu, 0);

            ucRowOffset = stLayerStack[ucLayerIndex].ucSubMenu - 1;//20070512
            pItemObject = &(pMenuItem->pItemList[ucRowOffset]);//20070512
        }

        CTimerWaitForEvent(_EVENT_DEN_STOP);

        stLayerStack[ucLayerIndex].ucSubMenu = ucSub;

        if (stLayerStack[ucLayerIndex].ucSubMenu == 0)
        {
            COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);

///////////////////////////////
#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
            //clr arrow of content
            if (GET_FACTORYSTATUS())
                COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            else
            {
                extern void COsdCtrlSetSingalSourceMainMenu(void);
                if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
                {
                    //DebugPrintf("\nno select, clr arrow...\n", 0);
                    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(1-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
                    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(2-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
                }
                else
                    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
            }
            //clr value
            if (GET_FACTORYSTATUS())
                COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            else
                COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);
            if (!GET_FACTORYSTATUS())
                //CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
                CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw

#else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

//clr arrow of content
if (GET_FACTORYSTATUS())
    COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
else
    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
//clr value
if (GET_FACTORYSTATUS())
    COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
else
    COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);

if (!GET_FACTORYSTATUS())
    //CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
    CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
#endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
#else	//#if _PCB_TYPE==_PCB_PT2662F1A
//clr arrow of content
if (GET_FACTORYSTATUS())
    COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
else
    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
//clr value
if (GET_FACTORYSTATUS())
    COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
else
    COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);

if (!GET_FACTORYSTATUS())
    //CosdCoreShowNoteMessage(13,2,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
    CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,0,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A
///////////////////////////////

        }
        else
        {
            stSubWindowStyle = *((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow);
            stMoveSubItemPos = stLayerStack[ucLayerIndex].pMenuItemSet->stSubItemMoveWindow->stPosition;

            CTimerWaitForEvent(_EVENT_DEN_STOP);

#if (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)
#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC
            //clr arrow of content
            if (GET_FACTORYSTATUS())
                COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
            else
            {
                if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
                {
                    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(1-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
                    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL+(2-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, _ARROW_U_WIDTH);
                }
                else
                    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);
            }

            //show target item arrow
            if (GET_FACTORYSTATUS())
            {
                COsdFxHLine(ROW(_ARROW_F_ROW+ucSub-1), _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
                COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
            }
            else
            {
                if (pItemObject->pStruct == COsdCtrlSetSingalSourceMainMenu)
                {
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL+(ucExtendMenuCol-1)*_SRC_COL_WIDTH, _ARROW_SRC_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
                }
                else
                {
                    COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
                    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
                }
            }

#else	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

if (GET_FACTORYSTATUS())
    COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
else
    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

//show target item arrow
if (GET_FACTORYSTATUS())
{
    COsdFxHLine(ROW(_ARROW_F_ROW+ucSub-1), _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
    COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
}
else
{
    COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
}

#endif	//#if _TYPEOF_INPUT == _TYPEOF_INPUT_8SRC

#else	//#if _PCB_TYPE==_PCB_PT2662F1A

if (GET_FACTORYSTATUS())
    COsdFxClearText(_ARROW_F_ROW, _ARROW_F_COL, _ARROW_F_HEIGH, _ARROW_F_WIDTH);
else
    COsdFxClearText(_ARROW_U_ROW, _ARROW_U_COL, _ARROW_U_HEIGH, _ARROW_U_WIDTH);

//show target item arrow
if (GET_FACTORYSTATUS())
{
    COsdFxHLine(ROW(_ARROW_F_ROW+ucSub-1), _ARROW_F_COL, _ARROW_F_WIDTH, _ARROW_, _WRITE_BYTE1);
    COsdFxChange1bitColor(_ARROW_F_ROW, _ARROW_F_COL, _CONTENT_F_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
}
else
{
    COsdFxHLine(ROW(_ARROW_U_ROW+ucSub-1), _ARROW_U_COL, _ARROW_U_WIDTH, _ARROW_, _WRITE_BYTE1);
    COsdFxChange1bitColor(_ARROW_U_ROW, _ARROW_U_COL, _CONTENT_U_HEIGH, 1, _CP_COLOR00, _CP_BLACK);
}
#endif	//#if _PCB_TYPE==_PCB_PT2662F1A


            if (!GET_FACTORYSTATUS())
                //CosdCoreShowNoteMessage(13,2,3,1,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw
                CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,1,_CP_WHITE,_CP_BLACK,GET_LANGUAGE());//070910 xyw

            stSubmenuInfo.pMenuItemSet = stLayerStack[ucLayerIndex].pMenuItemSet;
            stSubmenuInfo.stItemPosition = stMoveSubItemPos;
            stSubmenuInfo.ucMainOrder = stLayerStack[ucLayerIndex].ucMainMenu;
            //COsdSubMenuItemChangeColor(&stSubmenuInfo, stLayerStack[ucLayerIndex].ucSubMenu, 1);
            pItemObject = &(pMenuItem->pItemList[ucSub-1]);//20070512

            if (pItemObject->ucType == _SLIDER_TYPE ||pItemObject->ucType == _BRACKET_TYPE||pItemObject->ucType == _BRACKET2_TYPE||pItemObject->ucType == _BRACKET1_TYPE )
            {
                if (GET_FACTORYSTATUS())
                    COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);
                else
                    COsdFxDrawWindow(&stSubWindowStyle);
            }
#if _TIMER_PAGE_SUPPORT
            else if (pItemObject->ucType == _BRACKET_TIMER_TYPE)
            {
                if (GET_FACTORYSTATUS())
                    COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);
                else
                    COsdFxDrawWindow(&stSubWindowStyle);
            }
#endif	//#if _TIMER_PAGE_SUPPORT
            else
            {
                COsdFxCloseWindow((stLayerStack[ucLayerIndex].pMenuItemSet)->stSubItemMoveWindow->ucWindowID);
            }
            if (GET_FACTORYSTATUS())
                COsdFxClearText(_VALUE_F_ROW, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
            else
                COsdFxClearText(_VALUE_U_ROW, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);

            if (GET_FACTORYSTATUS())
            {
                COsdCoreUpdateItem(pItemObject,_VALUE_F_ROW,_MID_COL_POSITION,0,1);//-------------
            }
            else
            {
                COsdCoreUpdateItem(pItemObject,_VALUE_U_ROW,_MID_COL_POSITION,0,1);//-------------
            }

            //x.hu20070916
            //update color temp in the page realtime while UP/DOWN
            if (pMenuItem->pString == tOsdColorTempStr)
            {
                SET_COLOR_TEMP_TYPE(ucSub-1);
                CEepromLoadColorTempData();
                CAdjustContrast();
                //czl 080118
                CEepromSaveColorTempModeData();
            }

        }
    }
}

void COsdResetMenu()
{
    UINT8 tmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
    UINT8 tmpSub = stLayerStack[ucLayerIndex].ucSubMenu;
    stLayerStack[ucLayerIndex].ucMainMenu = 0;
    stLayerStack[ucLayerIndex].ucSubMenu = 0;
    //COsdFxDisableOsd();
//	DebugPrintf("Reset Menu: Osd Disable %c\n", '!');

    //COsdCoreInitMainWindow();
    //COsdMenuMoveProc(tmpMain, tmpSub, 1);
    //COsdFxEnableOsd();
//	DebugPrintf("Reset Menu: Osd Enable %c\n", '!');
}


/*
void COsdResetSignalMenu()
{
UINT8 ucTmpLayerIndex = ucLayerIndex;
UINT8 ucTmpState = ucOsdState;
UINT8 tmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
UINT8 tmpSub = stLayerStack[ucLayerIndex].ucSubMenu;
UINT8 tmpRootMain = stLayerStack[0].ucMainMenu;
UINT8 tmpRootSub = stLayerStack[0].ucSubMenu;
COsdCoreInitialze();
if(ucTmpLayerIndex == 0){
COsdCoreInitMainWindow();
COsdMenuMoveProc(tmpMain, tmpSub, 1);
COsdCoreSetState(ucTmpState);
} else {
ucLayerIndex = ucTmpLayerIndex;
stLayerStack[0].ucMainMenu = tmpRootMain;
stLayerStack[0].ucSubMenu = tmpRootSub;
COsdCoreSetState(ucTmpState);
COsdFxDisableOsd();
//		DebugPrintf("Reset Signal Menu: Osd Disable %c\n", '!');
stLayerStack[ucLayerIndex].pMenuItemSet->pInitializeFunction();
//		COsdFxEnableOsd();
}
//	DebugPrintf("Reset Signal Menu: Osd Enable %c\n", '!');

}

*/

#if _CUSTOMER_HPC
void COsdRedrawSignalMenu()
{
    COsdMenuMoveProc(stLayerStack[ucLayerIndex].ucMainMenu,  stLayerStack[ucLayerIndex].ucSubMenu, 1);
}
#endif	//#if _CUSTOMER_HPC

#if 0
static UINT16 COsdCoreCalItemBnkLength(MenuItemSet* pMenuItemSet, UINT8 ItemOrder)
{
    UINT16 xdata  usBnkLength;
    UINT8 ucCount;
    MenuItem * pMenuItem;

    usBnkLength = pMenuItemSet->usPreBnkLength;
    for (ucCount = 0; ucCount < ItemOrder; ucCount++){
        pMenuItem = ((MenuItem *[])pMenuItemSet->pMenuItem)[ucCount];
        usBnkLength += pMenuItem->usItemWidth;
    }
    return usBnkLength;
}
#endif

static void COsdCoreUpdateItem(ItemObject* pItemObject, UINT8 ucMidRow, UINT8 ucMidCol, UINT16 ucBkLength ,bit bActive)
{
    UINT8 ucSelectLanguage = GET_LANGUAGE();
    ItemSlider xdata stItemSlider;
    ItemSlider1* pItemSlider1;
    ItemBracket * pItemBracket;
    ItemBracket1 * pItemBracket1;
    ItemBracket2 * pItemBracket2;
    ItemSelectDialog * pItemSelectDialog;
    UINT16 xdata usMidColStart;
    UINT8	ucValue, ucForegroudColor,ucBKCount/*,ucBlank*/;
    UINT8 *pStringArray;
    UINT8 uclanguagecontrol; //add by xyw 070929

    if (GET_FACTORYSTATUS())
        ucSelectLanguage=0;
    else
        ucSelectLanguage = GET_LANGUAGE();

    ucBKCount = 0;

    if (bActive)
        ucForegroudColor = pItemObject->ucActiveColor;
    else
        ucForegroudColor = pItemObject->ucUnActiveColor;


    if ((pItemObject->ucType == _SLIDER_TYPE) || (pItemObject->ucType == _SLIDER1_TYPE))
    {
        if (pItemObject->ucType == _SLIDER_TYPE)
            stItemSlider = *((ItemSlider*)pItemObject->pStruct);
        else
        {
            pItemSlider1 = (ItemSlider1*)pItemObject->pStruct;
            stItemSlider = pItemSlider1->stItemSlider;
        }

        ucValue = (&stItemSlider)->pGetFunction();

        usMidColStart=ucMidCol-(&stItemSlider)->ucLength/2-1;
        if (ucBkLength)
            ucBKCount=COsdFxLoadBlankCmd(ucMidRow, usMidColStart-2, ucBkLength-1);// 1 : Because  show nember excessive one pixel, so decrease one pixel.//20070605

        if (bActive)
        {
            if (pItemObject->ucType == _SLIDER_TYPE)
            {
                COsdDispFullSlider(ucMidRow, COL(4), LENGTH(16),_SHOW_PERCENT,&stItemSlider);
            }
            else
            {
                COsdFxFullSlider1(ucMidRow, usMidColStart+ucBKCount, 0, &stItemSlider, pItemSlider1->pGetMinFunction(), pItemSlider1->pGetMaxFunction(), pItemSlider1->ucMid_value);
            }
        }
        else
            COsdFxShowNumber(ucMidRow, ucMidCol +ucBKCount, ucValue, 0x23, ucForegroudColor);

    }
    else if ((pItemObject->ucType == _IMMEDIATE_TYPE)||(pItemObject->ucType == _MENU_TYPE))
    {
        if (GET_FACTORYSTATUS())
            COsdFxClearText(ucMidRow, _VALUE_F_COL, _VALUE_F_HEIGH, _VALUE_F_WIDTH);
        else
            COsdFxClearText(ucMidRow, _VALUE_U_COL, _VALUE_U_HEIGH, _VALUE_U_WIDTH);
    }

#if _TIMER_PAGE_SUPPORT
    else if ((pItemObject->ucType == _BRACKET_TYPE) ||(pItemObject->ucType == _BRACKET2_TYPE)|| (pItemObject->ucType == _SELECTDIALOG_TYPE) ||(pItemObject->ucType == _BRACKET1_TYPE)||(pItemObject->ucType == _BRACKET_TIMER_TYPE))
#else	//#if _TIMER_PAGE_SUPPORT
else if ((pItemObject->ucType == _BRACKET_TYPE) ||(pItemObject->ucType == _BRACKET2_TYPE)|| (pItemObject->ucType == _SELECTDIALOG_TYPE) ||(pItemObject->ucType == _BRACKET1_TYPE))
#endif	//#if _TIMER_PAGE_SUPPORT
    {
        if (pItemObject->ucType == _SELECTDIALOG_TYPE)
        {
            pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;
            ucValue = (*pItemSelectDialog->pGetFunction)();
            pItemObject = &(pItemSelectDialog->pItemList[ucValue]);
            pStringArray = pItemObject->pString;
        }
        else if (pItemObject->ucType == _BRACKET_TYPE)
        {
            pItemBracket = (ItemBracket*)pItemObject->pStruct;
            ucValue = (*pItemBracket->pGetFunction)();
            uclanguagecontrol=pItemBracket->ucControl;
            pStringArray = ((UINT8 *[])pItemBracket->pLableString)[ucValue];

            if (!uclanguagecontrol || GET_FACTORYSTATUS())
                ucSelectLanguage = 0;

            usItemStart = GET_WIN_ITEMVAL_PREBLANK(ucSelectLanguage, pStringArray);
            if (bActive)
                COsdFxLoadText(ucMidRow, 0 , usItemStart, _CP_COLOR06, _CP_BLACK, ucSelectLanguage, pStringArray);
            else
                COsdFxLoadText(ucMidRow, 0 , usItemStart, ucForegroudColor, _CP_BLACK, ucSelectLanguage, pStringArray);
            return;
        }
#if _TIMER_PAGE_SUPPORT
        else if (pItemObject->ucType == _BRACKET1_TYPE || pItemObject->ucType == _BRACKET_TIMER_TYPE)
#else	//#if _TIMER_PAGE_SUPPORT
else if (pItemObject->ucType == _BRACKET1_TYPE)
#endif	//#if _TIMER_PAGE_SUPPORT
        {
            pItemBracket1 = (ItemBracket1*)pItemObject->pStruct;
            pStringArray = pItemBracket1->pGetStringFunction();
            uclanguagecontrol= pItemBracket1->ucControl;
        }
        else if (pItemObject->ucType == _BRACKET2_TYPE)
        {
            pItemBracket2 = (ItemBracket2*)pItemObject->pStruct;
            ucValue = (*pItemBracket2->pGetFunction)();
            uclanguagecontrol= pItemBracket2->ucControl;
            //DebugPrintf("zhyftest tv finetune bracket2\n",1);
            if (pItemBracket2->bActive==1){
                return;
            }
            pStringArray = ((UINT8 *[])pItemBracket2->pLableString)[ucValue];
        }

        if (!uclanguagecontrol || GET_FACTORYSTATUS())
            ucSelectLanguage = 0;
        //usMidColStart=ucMidCol;
        usItemStart = GET_WIN_ITEMVAL_PREBLANK(ucSelectLanguage, pStringArray);
        //DebugPrintf("\nucSelectLanguage=%d\n", ucSelectLanguage);
        if (bActive)
            //COsdFxLoadText(ucMidRow, usMidColStart, ucBkLength, _CP_COLOR06, _CP_BLACK, 0, pStringArray);
            COsdFxLoadText(ucMidRow, 0 , usItemStart, _CP_COLOR06, _CP_BLACK, ucSelectLanguage, pStringArray);
        else
            //COsdFxLoadText(ucMidRow, usMidColStart , ucBkLength, ucForegroudColor, _CP_BLACK, 0, pStringArray);
            COsdFxLoadText(ucMidRow, 0 , usItemStart, ucForegroudColor, _CP_BLACK, ucSelectLanguage, pStringArray);
    }

}

static void COsdCoreFreshItem(BIT bActive)
{
    MenuItem * pMenuItem;
    ItemObject *	pItemObject;
    //UINT8 ucRow/* ucOffset, ucPreBkCnt,ucMidBkLength*/;
    //UINT8 ucSelectLanguage=GET_LANGUAGE();
    //UINT16 xdata usBnkLength;

    pMenuItem = ((MenuItem *[])(stLayerStack[ucLayerIndex].pMenuItemSet)->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
    //ucRow = pMenuItem->ucStartRow + stLayerStack[ucLayerIndex].ucSubMenu - 1;

    //usBnkLength = COsdCoreCalItemBnkLength(stLayerStack[ucLayerIndex].pMenuItemSet, stLayerStack[ucLayerIndex].ucMainMenu) + pMenuItem->usSpaceInSubMenu;
    //if((usBnkLength + pMenuItem->stSize.usWidth) > _MAINMENUWINDOW_HEND)
    //	usBnkLength = _MAINMENUWINDOW_HEND - pMenuItem->stSize.usWidth;

    //if (GET_FACTORY_MODE_STEP()==_FACTORY_MODE_STEP_ON)
    //	ucSelectLanguage=0;
    //else
    //	ucSelectLanguage=GET_LANGUAGE();

    //ucRow = pMenuItem->ucStartRow + (stLayerStack[ucLayerIndex].ucSubMenu-1);

    //usBnkLength=0;//COsdFxCalTextCount(ucSelectLanguage, pItemObject->pString)*_FONT_WID-COsdFxCalTextWidth(ucSelectLanguage, pItemObject->pString);//20070511

    //clr value
    if (GET_FACTORYSTATUS())
        COsdFxClearText(_VALUE_F_ROW,_VALUE_F_COL,_VALUE_F_HEIGH,_VALUE_F_WIDTH);
    //else//disable by czl 071012
    //COsdFxClearText(_VALUE_U_ROW,_VALUE_U_COL,_VALUE_U_HEIGH,_VALUE_U_WIDTH);
    //set value
    if (GET_FACTORYSTATUS())
        COsdCoreUpdateItem(pItemObject,_VALUE_F_ROW,_MID_COL_POSITION,0,bActive);
    else
        COsdCoreUpdateItem(pItemObject,_VALUE_U_ROW,_MID_COL_POSITION,0,bActive);


}

static UINT16 COsdCtrlCalcDetRange(UINT16 ucValue, UINT16 ucMax, UINT16 ucMin, UINT8 message, BIT bTurboFlag)
{
    UINT8 Symbol=0;

    //Symbol:1="+1",2="-1"
    //Symbol:3="+2",4="-2"
    if ((message == _REPEAT_KEY_MESSAGE) && bTurboFlag) {
        if ( (ucOsdPreMessage == _LEFT_KEY_MESSAGE)||
                (ucOsdPreMessage == _VOLUME_DEC_MESSAGE) ) // weixg 20070523
            Symbol= 4;
        else if ( (ucOsdPreMessage == _RIGHT_KEY_MESSAGE)||
                  (ucOsdPreMessage == _VOLUME_INC_MESSAGE) )
            Symbol= 3;
    } else {
        if (message == _LEFT_KEY_MESSAGE)
            Symbol= 2;
        else	 if (message == _RIGHT_KEY_MESSAGE)
            Symbol= 1;
    }

    switch (Symbol)
    {
    case 1:
        if (ucValue >= ucMax)
            return ucMax;
        else {
            ucValue ++;
            return ucValue;
        }
    case 2:
        if (ucValue <= ucMin)
            return ucMin;
        else {
            ucValue --;
            return ucValue;
        }
    case 3:
        if (ucValue >= ucMax/*-1*/)
            return ucMax;
        else {
            ucValue =ucValue+1/*2*/;
            return ucValue;
        }
    case 4:
        if (ucValue <= ucMin/*+1*/)
            return ucMin;
        else {
            ucValue=ucValue-1/*2*/;
            return ucValue;
        }

    default :
        return ucValue;	// avoid repeat key error,hill
    }
}

static void COsdFxSliderDirectionProc(ItemSlider * pItemSlider, UINT8 message)
{
#if 1
    UINT16	xdata	ucReturnRes, ucCurRes;
    UINT8 temp;
    //DebugPrintf("\n >>>1 OsdMessage = %d ",message);

    temp = message;

    ucCurRes = pItemSlider->pGetFunction();

    //DebugPrintf("\n >>>2 OsdMessage = %d ",message);

    //20071018, "tOsdClockSet->COsdCtrlGetClock()", message=1, I don't know why this happens.
    message = temp;

    //DebugPrintf("\n >>>3 OsdMessage = %d ",message);

    //DebugPrintf("\n Pos=%d", ucCurRes);
    //DebugPrintf("\n max=%d", pItemSlider->ucMax);
    //DebugPrintf("\n min=%d", pItemSlider->ucMin);
    //DebugPrintf("\n message=%d", message);
    ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, pItemSlider->ucMax, pItemSlider->ucMin, message, 1);

    //DebugPrintf("\n Pos1=%d", ucReturnRes);
    // Check it be same between previous and now
    if (ucCurRes == ucReturnRes)
        return;

    pItemSlider->pHandlerFunction(ucReturnRes);


    COsdCoreFreshItem(1);
#else
UINT16	xdata	ucReturnRes, ucCurRes;
//DebugPrintf("\n OsdMessage = %x ",message);
//DebugPrintf("\n OsdMessage = %x ",pItemSlider);
ucCurRes = pItemSlider->pGetFunction();

//DebugPrintf("\n Pos=0x%x", ucCurRes);
ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, pItemSlider->ucMax, pItemSlider->ucMin, message, 1);

//premier, refresh mute OSD display for audio menu
//Notes:
// check before "ucReturnRes" since slider bar position may not change;
// check "GET_AUDIO_MUTE()" ensure only check this while mute flag is set
if (GET_AUDIO_MUTE())
{
    void * ptr;
    UINT8 ucSubMenu;

    ptr = pItemSlider->pHandlerFunction;
    //if (	(ptr==COsdCtrlSetAudioVolume) || (ptr==COsdCtrlSetAudioBass) ||
    //	(ptr==COsdCtrlSetAudioTreble) || (ptr==COsdCtrlSetAudioBalance))
    if (ptr==COsdCtrlSetAudioVolume)
    {
        ucSubMenu = stLayerStack[ucLayerIndex].ucSubMenu;
        stLayerStack[ucLayerIndex].ucSubMenu = 2;	//point to mute line
        if (message==_RIGHT_KEY_MESSAGE)
        {
            if (GET_AUDIO_MUTE())
            {
                CLR_AUDIO_MUTE();
                SET_MUTE_PROCESS(_DISABLE);
            }
        }
        CAudioSetVolume(COsdCtrlGetAudioVolume());

        COsdCoreFreshItem(0);

        stLayerStack[ucLayerIndex].ucSubMenu = ucSubMenu;
    }
}

if (ucCurRes == ucReturnRes)
    return;

pItemSlider->pHandlerFunction(ucReturnRes);

COsdCoreFreshItem(1);
#endif
}

static void COsdFxSlider1DirectionProc(ItemSlider1 * pItemSlider1, UINT8 message)
{
    UINT16	xdata	ucReturnRes, ucCurRes;
    UINT16  xdata usMax, usMin;

    usMax = pItemSlider1->pGetMaxFunction();
    usMin = pItemSlider1->pGetMinFunction();
    ucCurRes = pItemSlider1->stItemSlider.pGetFunction();

    ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, usMax, usMin, message, 1);

    // Check it be same between previous and now
    if (ucCurRes == ucReturnRes)
        return;

    pItemSlider1->stItemSlider.pHandlerFunction(ucReturnRes);

    //ucCurRes = pItemSlider1->stItemSlider.pGetFunction();
    COsdCoreFreshItem(1);
    //pData[0] = 50 + ucVStartBias; //maximum value
    //pData[1] = 50 - stModeInfo.IVStartPos;
}

/*
static void COsdCoreShowSourceEventProc(void)
{
ucOsdState = _IDLE_STATE;
COsdCoreIdleEventProc();
}
*/
static void COsdChangeSourceProc(void)
{

#if(_Change_SOURCE_Type == Change_SOURCE_Type1)

    UINT8 ucInputSrc;
    ucInputSrc = stSystemData.InputSource;
    ucInputSrc = (ucInputSrc + 1) % _INPUT_PORT_MAX;

    // If change source, cancel the no-signal event,
    // and if no signal message on screen, close it.
    CTimerCancelTimerEvent(COsdNoSignalEvent);
    COsdCoreCloseNoSignalOsd();

    COsdCtrlSetSingalSource(ucInputSrc);
    COsdCoreInitialze();
    CLR_FIRST_ENTRY_SHOWSOURCE();
    COsdFxShowSource();

#elif(_Change_SOURCE_Type == Change_SOURCE_Type2)

#if(SKYWORTH_OSD== _ENABLE)
COsdCoreSourceSelectEventProc();
#else
if (ucOsdMessage != _SOURCE_KEY_MESSAGE)
    return;

COsdFxDisableOsd();


ucSourceTemp = (ucSourceTemp + 1) % _INPUT_PORT_MAX;

COsdFxChangeSourceShow();

CTimerCancelTimerEvent(COsdChangeSourceEvent);
CTimerCancelTimerEvent(COsdFxExitEvent);
CTimerReactiveTimerEvent(SEC(2), COsdChangeSourceEvent);
#endif

#endif
    //DebugPrintf("\n ucSourceTemp  %x",ucSourceTemp);
}

#if((_Change_SOURCE_Type == Change_SOURCE_Type2)&&(SKYWORTH_OSD == _DISABLE ))
static void COsdFxChangeSourceShow(void)
{
    UINT8 index;

    COsdFxMapSetting(_OSD_MAP2);

    index = ucSourceTemp;

#if(_CHINESE_SIMPlIFIED_CHARACTER == _TRUE)
    COsdFxLoadText(0, 0, (_DISP_WID - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdSignalItemStrSet[index]) * 2)) / 2 - 39, _CP_GREEN, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
#else
COsdFxLoadText(0, 0, (_DISP_WID - (COsdFxCalTextWidth(0, tOsdSignalItemStrSet[index]) * 2)) / 2 - 39, _CP_GREEN, _CP_BLACK, 0, tOsdSignalItemStrSet[index]);
#endif

    COsdFxEnableOsd();
}
#endif

/*
void COsdFxChangeWindowColor(BYTE ucWindowColor, BYTE *pStyle)
{
pData[0]    = 0x41;
pData[1]    = ((*(pStyle)) * 4) + (3);
CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

pData[0]    = ((*(pStyle + ((3) + 1) + 1)) & 0xf0) | (ucWindowColor & 0x0f);
CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
}
*/

/*
#define ZPAL_I          	0x70
#define ZPAL_M          	0x71
#define ZPAL_N          	0x72
#define ZPAL_60         	0x73
#define ZNTSC          		0x74
#define ZNTSC_443   		0x75
#define ZNTSC_50			0x76
#define ZSECAM          	0x77
*/
code unsigned char tOsdVideoModeStr[]=
{
    _P_,_A_,_L_,_END_,
    _P_,_A_,_L_,_END_,//_P_,_A_,_L_,0x00,_M_,_END_,
    _P_,_A_,_L_,_END_,//_P_,_A_,_L_,0x00,_N_,_END_,
    _P_,_A_,_L_,_END_,//_P_,_A_,_L_,_6_,_0_,_END_,
    _N_,_T_,_S_,_C_,_END_,
    _N_,_T_,_S_,_C_,0x00,_4_,_DOT_,_4_,_3_,_END_,
    _N_,_T_,_S_,_C_,0x00,_5_,_0_,_END_,
    _S_,_E_,_C_,_A_,_M_,_END_,
};

code unsigned char tOsdTvForceAutoStr[]=
{
    _A_,_U_,_T_,_O_,_END_,
    _ZI4_L_,_ZI4_R_,0x00,_DONG4_L_,_DONG4_R_,_END_,
};

#if (_TUNER_TYPE==_JS6H1_111 ||_TUNER_TYPE==_GDC8F1D_QF106L ||\
	_TUNER_TYPE==_GDC8F2E_106L ||\
	_TUNER_TYPE==_ET5C511_TDA9886ST ||\
	_TUNER_TYPE==_ET6T1E_TDA9886ST||_TUNER_TYPE == _GDC8F2D_106L	)

UINT8 code tOsdAutoStr1[] =
{
    0x00,0x00,_A_,_U_,_T_,_O_,0x00,0x00,_END_,
    0x00,_ZI4_L_,_ZI4_R_,_DONG4_L_,_DONG4_R_,0x00,0x00,_END_,
};

UINT8 code tOsdBGStr1[]=
{
    _P_,_A_,_L_,_SUBT_,_B_,_G_,0x00,_END_,
    _THE_SAME_,
};
UINT8 code tOsdIStr1[]=
{
    0x00,_P_,_A_,_L_,_SUBT_,_I_,0x00,_END_,
    _THE_SAME_,
};
UINT8 code tOsdDKStr1[]=
{
    _P_,_A_,_L_,_SUBT_,_D_,_K_,0x00,_END_,
    _THE_SAME_,
};
UINT8 code tOsdMStr1[]=
{
    _N_,_T_,_S_,_C_,_SUBT_,_M_,0x00,_END_,
    _THE_SAME_,
};
#if 1//_CUSTOMER_JPE
UINT8 code tOsdSecamBGStr1[]=
{
    _S_,_E_,_C_,_A_,_M_,_SUBT_,_B_,_G_,_END_,
    _THE_SAME_,
};
UINT8 code tOsdSecamDKStr1[]=
{
    _S_,_E_,_C_,_A_,_M_,_SUBT_,_D_,_K_,_END_,
    _THE_SAME_,
};
UINT8 code tOsdSecamLStr1[]=
{
    _S_,_E_,_C_,_A_,_M_,_SUBT_,_L_,0x00,_END_,
    _THE_SAME_,
};
#endif
UINT8* code tOsdAudioTypeSet1[]=
{
#if _PCB_TYPE == _PCB_PT2662C1B

    tOsdDKStr1,
    tOsdIStr1,
    tOsdBGStr1,
    //tOsdMStr1,
    tOsdAutoStr1,
#elif (_PCB_TYPE==_PCB_PT2662F1A ||_PCB_TYPE==_PCB_PT2662F1C)

#if _CUSTOMER_CGT
tOsdDKStr1,
tOsdIStr1,
tOsdBGStr1,
tOsdSecamDKStr1,
tOsdSecamBGStr1,
//tOsdSecamLStr1,
tOsdAutoStr1,
#else	//#if _CUSTOMER_CGT
tOsdDKStr1,
tOsdIStr1,
tOsdBGStr1,
//tOsdMStr1,
tOsdAutoStr1,
#endif	//#if _CUSTOMER_CGT

#elif (_PCB_TYPE == _PCB_PT2662B1C && _CUSTOMER_CGT==_ON)

#if _TUNER_TYPE==_GDC8F1D_QF106L
tOsdDKStr1,
tOsdIStr1,
tOsdBGStr1,
tOsdSecamDKStr1,
tOsdSecamBGStr1,
//tOsdSecamLStr1,
tOsdAutoStr1,
#else
tOsdDKStr1,
tOsdIStr1,
tOsdBGStr1,
tOsdSecamDKStr1,
tOsdSecamBGStr1,
tOsdAutoStr1,
#endif

#else
tOsdIStr1,
tOsdDKStr1,
tOsdBGStr1,
//tOsdMStr1,
tOsdAutoStr1,
#endif
};
#endif	//#if (_TUNER_TYPE == _JS6H1_111||_TUNER_TYPE == _GDC8F1D_QF106L||_TUNER_TYPE == _GDC8F2E_106L)

void COsdFxShowSource(void)
{
#define index stSystemData.InputSource
    UINT8 xdata lines=1;
    UINT8* ptrSrc;
    UINT8 color;

#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
    bTimeoverHintOsdState = 1;
#endif
    //CLR_SHOW_NO_SIGNAL();
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);

    COsdCoreShowInfoSetPos(_OSD_MAP5);
    COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019
    //Display Window

//	CScalerLoadFont(FontTable_SC_MISC, _FONT_CHIPG_ADDR, _FONT_CHIPG_NUM, _COMPRESS_FONT);

    if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_VIDEO_TV_PORT)
    {

        ptrSrc = COsdCoreGetNumberStr2(stTvInfo.CurChn);

        usItemStart = GET_WIN_INFO_PREBLANK(0, ptrSrc);
        //
#if _CUSTOMER_CGT
        if (CTvGetChStatus(stTvInfo.CurChn))
        {
            //enable
            //if (GET_TV_AFC_ENABLE())
            color=1;//_CP_LIGHTBLUE;//GET_CP_HINT_NORMAL();	//no skip
            //else
            //	color=GET_CP_HINT_FINETUNE();	//finetune
        }
        else
            //disable
            color=2;//GET_CP_HINT_UNNORMAL();	//skip
        //20070328
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0,ptrSrc);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL, usItemStart, color, _CP_BLACK, 0,ptrSrc);

#else	//#if _CUSTOMER_JPE

if (CTvGetChStatus(stTvInfo.CurChn))
{
    //if (GET_TV_AFC_ENABLE())
    color=_CP_LIGHTBLUE;//GET_CP_HINT_NORMAL();	//no skip
    //else
    //	color=GET_CP_HINT_FINETUNE();	//finetune
}
else
    color=_CP_LIGHTBLUE;//GET_CP_HINT_UNNORMAL();	//skip

#endif	//#if _CUSTOMER_JPE


        //20070328
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0,ptrSrc);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, 0,ptrSrc);

#if (_TUNER_TYPE==_JS6H1_111 ||_TUNER_TYPE==_GDC8F1D_QF106L ||\
	_TUNER_TYPE==_GDC8F2E_106L ||\
	_TUNER_TYPE==_ET5C511_TDA9886ST ||\
	_TUNER_TYPE==_ET6T1E_TDA9886ST	||_TUNER_TYPE == _GDC8F2D_106L)
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdAudioTypeSet1[GET_CURR_AUDIO_SYS()]);
#if _CUSTOMER_CGT
        COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, color, _CP_BLACK, GET_LANGUAGE(),tOsdAudioTypeSet1[GET_CURR_AUDIO_SYS()]);
#else	//#if _CUSTOMER_JPE
COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(),tOsdAudioTypeSet1[GET_CURR_AUDIO_SYS()]);
#endif	//#if _CUSTOMER_JPE
        lines=2;
#else
usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(),tOsdTvForceAutoStr);
COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(),tOsdTvForceAutoStr);
lines=2;
#endif

    }
    else
    {
        //usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdSignalItemStrSet[index]);
        usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);

        if (GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)
        {
            if (stModeInfo.ModeCurr<_MAX_YPBPR_MODE && ucSyncProcessState == _ACTIVE_STATE)
            {
                usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdYPbPrTimingStrSet[stModeInfo.ModeCurr]);
                COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, tOsdYPbPrTimingStrSet[stModeInfo.ModeCurr]);
                lines=2;
            }
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8&&ucVideoProcessState==_ACTIVE_STATE)
        {
            usItemStart = GET_WIN_INFO_PREBLANK((ucMode_Curr_2610&0x07), tOsdVideoModeStr);
            COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, (ucMode_Curr_2610&0x07), tOsdVideoModeStr);
            lines=2;
        }
    }
    CosdCoreShowInfoDrawWin(lines);

    COsdFxEnableOsd();

#undef index
}


//RTD2528R
static void COSdCoreShowVGAInfo(void)
{
#define index stSystemData.InputSource
//#define _HDMI_IHW_TOLERANCE	150
    UINT8 xdata lines;
    //UINT16 xdata usItemStart;
    UINT8 xdata ucModeStr[10];
    UINT8* ptrSrc;
    UINT8* ptrDes;
    UINT16 IHWidth_Tmp,IVHeight_Tmp;

#if _TIMER_SLEEP_HINT_SUPPORT//(_TIMER_PAGE_SUPPORT)
    bTimeoverHintOsdState = 1;
#endif

    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdCoreShowInfoSetPos(_OSD_MAP5);

    COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019
    COsdFxClearText(0, 0, 10, 30);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
    COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);

    if ((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)) {//|| index == _INPUT_PORT_1){

        //usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdSignalItemStrSet[index]);
        //usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSignalItemStrSet[index]);

        // it means no-cable or no-signal
        if (stModeInfo.IHWidth==0)
        {
            lines = 1;
        }
        else
        {
//add
            if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI){
                if (CHdmiFormatDetect()){	//HDMI only
                    IHWidth_Tmp = stModeInfo.IHWidth;
                    IVHeight_Tmp = stModeInfo.IVHeight;
                    stModeInfo.IHWidth = HDMI_H_Width;
                    stModeInfo.IVHeight = HDMI_V_Height;
                }
            }
#if (_PANEL_TYPE==_AUO_LVDS_22_WXGA ||_PANEL_TYPE==_M220Z1_03_WXGA)
            if (stModeInfo.IVHeight==1202)
                stModeInfo.IVHeight = 1200;
#endif	//#if _PANEL_TYPE==_AUO_LVDS_22_WXGA
            //20070324, tcl test, HDMI show timing error
            if ((GET_INPUTSOURCE_TYPE() ==_SOURCE_DVI)&&(ucModeCnt1<_HDMI_MAX_MODE_NUM)&&(ucModeCnt1!=0)&& (ucSyncProcessState == _ACTIVE_STATE))
            {
                usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdHdmiTimingStrSet[ucModeCnt1]);
                COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdHdmiTimingStrSet[ucModeCnt1]);
                lines=2;
            }
            else
            {
                ptrDes = ucModeStr;

                //20070821, sva: 1360x768 show as 1366x768, modify osd string only
                //ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IHWidth);
                if (0)//(stModeInfo.ModeCurr == _MODE_1360x768_60HZ)
                    ptrSrc = COsdCoreGetNumberStr2(1366);
                else
                    ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IHWidth);

                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }

                *ptrDes++ = _X_;

//20070328, interlace DVI IVHeight double
                //For Digital Interlace Mode Compensation
                /*
                ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
                while (*ptrSrc!=_END_)
                {
                *ptrDes++ = *ptrSrc++;
                }
                *ptrDes++ = _END_;
                */

                /*if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)
                {
                CScalerPageSelect(_PAGE2);
                CScalerGetDataPortByte(_P2_HDMI_ADDR_PORT_C9, _P2_HDMI_VCR_50, 1, pData, _NON_AUTOINC);
                if((pData[0] & 0x40) == 0x40)
                {
                ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight*2);
                }
                else
                ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
                }
                else*/
#if 0//_DOS_MODE_DEBUG_SUPPORT
                if (stModeInfo.ModeCurr == _MODE_720x400_70HZ ||stModeInfo.ModeCurr == _MODE_640x400_70HZ)
                    ptrSrc = COsdCoreGetNumberStr2(400);
                else
                    ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
#else
ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
#endif

                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }
                *ptrDes++ = _END_;
                ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVHeight);
                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }
                *ptrDes++ = _END_;

                usItemStart = GET_WIN_INFO_PREBLANK(0, ucModeStr);
                //COsdFxLoadText(1, 0, usItemStart, _CP_HintNorm, _CP_BG, 0, ucModeStr);
                COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, ucModeStr);

                ptrDes = ucModeStr;
                //20070327
                //if (stModeInfo.IVFreq>590 && stModeInfo.IVFreq <=600)
                //	ptrSrc = COsdCoreGetNumberStr2(60);
                //else
                ptrSrc = COsdCoreGetNumberStr2(stModeInfo.IVFreq/10);

                while (*ptrSrc!=_END_)
                {
                    *ptrDes++ = *ptrSrc++;
                }

                *ptrDes++ = _H_;
                *ptrDes++ = _z_;
                *ptrDes++ = _END_;

                usItemStart = GET_WIN_INFO_PREBLANK(0, ucModeStr);
                //COsdFxLoadText(2, 0, usItemStart, _CP_HintNorm, _CP_BG, 0, ucModeStr);
                COsdFxLoadText(_INFO_ROW+2, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, ucModeStr);

                //CLR_FIRST_ENTRY_SHOWSOURCE();

                lines = 3;
            }
        }
    }
    else
    {
        lines = 1;
        //usItemStart = GET_WIN_INFO_PREBLANK(0, tOsdSignalItemStrSet[index]);
        //COsdFxLoadText(0, 0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, 0, tOsdSignalItemStrSet[index]);
    }
//add
    if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI)
    {
        if (CHdmiFormatDetect()){	//HDMI only
            stModeInfo.IHWidth = IHWidth_Tmp;
            stModeInfo.IVHeight = IVHeight_Tmp;
        }
    }

    //SET_FIRST_ENTRY_SHOWSOURCE();

    CosdCoreShowInfoDrawWin(lines);

    COsdFxEnableOsd();

    CPowerPanelOn(); // avoid power on not active panel power

#undef index

}

//SKYWORTH OSD SHOW YPBPR by brighty
static void COSdCoreShowYPbPrInfo(void)
{
    UINT8 ucCol = 0;
    UINT8 ucWid;
    UINT16 Timing;
    UINT8 temp;

    CLR_FIRST_ENTRY_SHOWSOURCE();
    COsdFxDisableOsd();
    COsdFxShowSource();
    // it means no-support or no-signal
    if ((stModeInfo.ModeCurr == _MODE_NOSIGNAL) ||(stModeInfo.ModeCurr == _MODE_NOSUPPORT))
        return;

    switch (stModeInfo.ModeCurr)
    {
    case 0:
        Timing = 576;
        temp = _i_;
        break;
    case 1:
        Timing = 480;
        temp = _i_;
        break;
    case 2:
        Timing = 576;
        temp = _P_;
        break;
    case 3:
        Timing = 480;
        temp = _P_;
        break;
    case 4:
    case 7:
        Timing = 720;
        temp = _P_;
        break;
    case 5:
    case 6:
        Timing = 1080;
        temp = _i_;
        break;
    case 8:
    case 9:
        Timing = 1080;
        temp = _P_;
        break;
    }

    ucWid = 720;
    if (Timing >= 1000)
    {
        ucCol = COsdFxLoadBlankCmd(1, ucCol, 0);//((UINT16)(_DISP_WID - 8 * 10 * (2*1) - 12 * (2*1)) / (2*1)) - 2);
        //COsdFxShowNumber(1, ucCol,  Timing, 0x33, _CP_LIGHTBLUE);//disable by czl 070927
        ucCol += 4;
    }
    else
    {
        ucCol = COsdFxLoadBlankCmd(1, ucCol, 0);//((UINT16)(_DISP_WID - 7 * 10 * (2*1) - 12 * (2*1)) / (2*1)) - 12);
        //COsdFxShowNumber(1, ucCol,  Timing, 0x33, _CP_LIGHTBLUE);//disable by czl 070927
        ucCol += 3;
    }

    //COsdFxChange1bitColor(1, ucCol, 1, 1, _CP_LIGHTBLUE, _CP_BLACK);//disable by czl 070927
    //COsdFxHLine(1, ucCol, 1, temp, _WRITE_BYTE1);//disable by czl 070927

    COsdFxEnableOsd();
    CLR_FIRST_ENTRY_SHOWSOURCE();

    COsdCoreInitialze();  // add avoid change to MainMenu state osd show system page,hill
}

// For No Singal source
static void COsdNoSignalEventProc(void)
{
//	COsdMessageSend(ucOsdMessage);
    COsdCoreDispatchMsg();
}



void COsdCoreCloseNoSignalOsd(void)
{
    // Maybe timer is set the ucOsdMessage as _SHOW_NOSIGNAL_MESSAGE,
    // but not yet show on screen, we should reset the ucOsdMessage.
    if (ucOsdMessage == _SHOW_NOSIGNAL_MESSAGE)
        ucOsdMessage = _NONE_KEY_MESSAGE;

    if (ucOsdState == _NOSIGNAL_MESSAGE_STATE) {
        COsdFxDisableOsd();
        COsdCoreSetState(_IDLE_STATE);
    }

    // clear the no-signal flag of current display
//	CLR_NO_SIGNAL(info->display);
}

static void COsdCoreExtendMenuEventProc(void)
{
    UINT8 ucCount, ucCol, ucTmpRow, ucTmpCol;
    ItemObject  *pItemObject;
    ItemSelectStruct  *pItemSelectStruct;
    MenuItem  *pMenuItem;
    ItemSelectDialog  *pItemSelectDialog;
    ItemPosition	xdata stMovePos;
    UINT16 xdata	usPreBnkLength, usSegmentLength;

    if ((ucOsdMessage != _MENU_KEY_MESSAGE) && (ucOsdMessage != _UP_KEY_MESSAGE) &&
            (ucOsdMessage != _DOWN_KEY_MESSAGE) &&  (ucOsdMessage != _LEFT_KEY_MESSAGE) &&
            (ucOsdMessage != _RIGHT_KEY_MESSAGE))
        return;

    pMenuItem = ((MenuItem *[])stLayerStack[ucLayerIndex].pMenuItemSet->pMenuItem)[stLayerStack[ucLayerIndex].ucMainMenu];
    pItemObject = &(pMenuItem->pItemList[stLayerStack[ucLayerIndex].ucSubMenu - 1]);
    pItemSelectDialog = (ItemSelectDialog*)pItemObject->pStruct;

    if (ucOsdMessage == _MENU_KEY_MESSAGE) {
        // Add specify value to *(pItemSelectDialog->ucIndex)
        for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
            pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
            pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
            if (pItemSelectStruct->ucRow == ucExtendMenuRow)
                if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                    break;
        }
        //DebugPrintf("message = %x \n", pItemSelectStruct->ucValue);
        pItemSelectDialog->pHandlerFunction(pItemSelectStruct->ucValue);
//		COsdBackMenuProc();
//		ucOsdState = _MAINMENU_STATE;
        if (pItemObject ->ucType == _SELECTITEM_TYPE){
            COsdBackMenuProc();
            COsdCoreSetState(_MAINMENU_STATE);
        }else if (pItemObject ->ucType == _CONFIRM_TYPE){
            if (pItemSelectStruct->ucValue == 0){
                COsdBackMenuProc();
                COsdCoreSetState(_MAINMENU_STATE);
            }else{
                COsdCoreInitialze();
                COsdCoreSetState(_IDLE_STATE);
            }
        }else{
            COsdCoreInitialze();
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    }

    usSegmentLength = ((12 * 41 - 20) / pItemSelectDialog->ucCol);
    usPreBnkLength = pItemSelectDialog->pForegroundWindow->stPosition.usXStart + pMenuItem->usSpaceInSubMenu;
    ucCol = COsdFxCalBlankCmdCount(usPreBnkLength);
    for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
        pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
        pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
        if (pItemSelectStruct->ucRow == ucExtendMenuRow) {
            if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                break;
            else
                ucCol += (COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString) + COsdFxCalBlankCmdCount(usSegmentLength - COsdFxCalTextWidth(GET_LANGUAGE(), pItemObject->pString)));
        }
    }

#if _CHINESE_SIMPlIFIED_CHARACTER
    if (GET_LANGUAGE()==_CHINESE_S)
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString)+1, _CP_WHITE, _CP_BLACK);
    else
#endif
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString), _CP_WHITE, _CP_BLACK);

    switch (ucOsdMessage) {
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
        ucTmpRow = ucExtendMenuRow;
        if (ucOsdMessage == _UP_KEY_MESSAGE) {
            if (ucTmpRow == 0)
                ucTmpRow = pItemSelectDialog->ucRow - 1;

            else
                ucTmpRow -= 1;

        } else {
            if (ucTmpRow + 1 > (pItemSelectDialog->ucRow - 1))
                ucTmpRow = 0;
            else
                ucTmpRow += 1;
        }

        for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
            pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
            pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
            if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                if (pItemSelectStruct->ucRow == ucTmpRow) {
                    ucExtendMenuRow = ucTmpRow;
                    break;
                }
        }
        break;

    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
        ucTmpCol = ucExtendMenuCol;
        if (ucOsdMessage == _LEFT_KEY_MESSAGE) {
            if (ucTmpCol == 0){
                if (ucOsdState == _EXTENDMENU_STATE)
                    ucTmpCol = pItemSelectDialog->ucCol - 1;
            }else
                ucTmpCol -= 1;
        } else {
            if (ucTmpCol + 1 > (pItemSelectDialog->ucCol - 1))
                ucTmpCol = 0;
            else
                ucTmpCol += 1;
        }

        for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
            pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
            pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
            if (pItemSelectStruct->ucRow == ucExtendMenuRow)
                if (pItemSelectStruct->ucCol == ucTmpCol) {
                    ucExtendMenuCol = ucTmpCol;
                    break;
                }
        }
        break;
    default:
//			COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    }

    stMovePos = pItemSelectDialog->pForegroundWindow->stPosition;
    stMovePos.usXStart += ucExtendMenuCol * usSegmentLength + pMenuItem->usSpaceInSubMenu;
    stMovePos.usXEnd = (stMovePos.usXStart + usSegmentLength - 10);
    stMovePos.usYStart += ((ucExtendMenuRow + 2) * 32);
    stMovePos.usYEnd = stMovePos.usYStart + 32;
    //COsdFxCloseWindow(stLayerStack[ucLayerIndex].pMenuItemSet->stMainMenuMoveWindow->ucWindowID);// modified by xyw 080604
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    //COsdFxMoveWindow(pItemSelectDialog->pMoveWindow->ucWindowID, &stMovePos);
    COsdFxMoveWindow(&tMainMenuItemWindowStyle,&stMovePos);// modified by xyw 080604
    ucCol = COsdFxCalBlankCmdCount(usPreBnkLength);
    for (ucCount = 0; ucCount < pItemSelectDialog->ucItemCount; ucCount++) {
        pItemObject = &(pItemSelectDialog->pItemList[ucCount]);
        pItemSelectStruct = (ItemSelectStruct*)pItemObject->pStruct;
        if (pItemSelectStruct->ucRow == ucExtendMenuRow) {
            if (pItemSelectStruct->ucCol == ucExtendMenuCol)
                break;
            else
                ucCol += (COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString) + COsdFxCalBlankCmdCount(usSegmentLength - COsdFxCalTextWidth(GET_LANGUAGE(), pItemObject->pString)));
        }
    }
#if _CHINESE_SIMPlIFIED_CHARACTER
    if (GET_LANGUAGE()==_CHINESE_S)
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString)+1, _CP_BLACK, _CP_BLACK);
    else
#endif
        COsdFxChange1bitColor(ucExtendMenuRow + 3, ucCol, 1, COsdFxCalTextCount(GET_LANGUAGE(), pItemObject->pString), _CP_BLACK, _CP_BLACK);

    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdFxExitEvent);
}

void COsdCoreSetState(UINT8 state)
{
    ucOsdState = state;
}

static void COsdCoreVolumnChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
#if((_REMOTE_CONTROL == _PANASONIC_TYPE)||(_REMOTE_CONTROL == _NEC_TYPE)) //fjyang
    case _VOLUME_DEC_MESSAGE:
    case _VOLUME_INC_MESSAGE:
        if (ucOsdMessage == _VOLUME_DEC_MESSAGE)
            ucOsdMessage = _LEFT_KEY_MESSAGE;
        else if (ucOsdMessage == _VOLUME_INC_MESSAGE)
            ucOsdMessage = _RIGHT_KEY_MESSAGE;
#else
case _LEFT_KEY_MESSAGE:
case _RIGHT_KEY_MESSAGE:
#endif
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _VOLIMN_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            ucCurRes = (UINT16)tAudioVolumeShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tAudioVolumeShortMenuSet.ucMax, tAudioVolumeShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tAudioVolumeShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:

        //20071214, x.hu
        //add UP/DOWN while volume slider bar is shown
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:

    case _DISPLAY_KEY_MESSAGE:
    case _MENU_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    //COsdFxFullSlider(2, 1, 0, &tAudioVolumeSet);
    //COsdDispFullSlider(ROW(2), COL(3), LENGTH(15), stAudioData.Volume, 100-0, 0,_CP_WHITE, _CP_WHITE, _SHOW_PERCENT);
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tAudioVolumeShortMenuSet);
    //COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);
    //COsdFxSetWinRefPos((_DISP_WID-tAudioVolumeSet.ucLength*_FONT_WID*2)/2+_HSTART_POS-5,_DISP_LEN-_DISP_LEN/6+_VSTART_POS);
    //COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
static void COsdCoreBrightnessChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
    case _BRIGHTNESS_KEY_MESSAGE:
        if (ucOsdState == _BRIGHTNESS_STATE) {
            //close it while already in short menu
            CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
            return;
        }
        break;
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _BRIGHTNESS_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(_NULL_, _TRUE);
            /////////////////////////////////////////////////////////
#endif

            ucCurRes = (UINT16)tBrightnessShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tBrightnessShortMenuSet.ucMax, tBrightnessShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tBrightnessShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _VOLUME_INC_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;

    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tBrightnessShortMenuSet);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
static void COsdCoreContrastChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
    case _CONTRAST_KEY_MESSAGE:
        if (ucOsdState == _CONTRAST_STATE) {
            //close it while already in short menu
            CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
            return;
        }
        break;
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _CONTRAST_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(_NULL_, _TRUE);
            /////////////////////////////////////////////////////////
#endif

            ucCurRes = (UINT16)tContrastShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tContrastShortMenuSet.ucMax, tContrastShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tContrastShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _VOLUME_INC_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tContrastShortMenuSet);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
static void COsdCoreColorChangeProc(void)
{
    UINT16	ucCurRes,ucReturnRes;

    switch (ucOsdMessage)
    {
    case _COLOR_KEY_MESSAGE:
        if (ucOsdState == _COLOR_STATE) {
            //close it while already in short menu
            CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
            return;
        }
        break;
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _REPEAT_KEY_MESSAGE:
        if (ucOsdState == _COLOR_STATE) {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;

#if (_PICT_EFFECT_SUPPORT)
            ////////Pict Effect Mode Data to User Mode////////////////////
            COsdCoreApplyPictEffect(_NULL_, _TRUE);
            /////////////////////////////////////////////////////////
#endif

            ucCurRes = (UINT16)tColorShortMenuSet.pGetFunction();
            ucReturnRes = COsdCtrlCalcDetRange(ucCurRes, tColorShortMenuSet.ucMax, tColorShortMenuSet.ucMin, ucOsdMessage, 1);
            if (ucCurRes == ucReturnRes)
                return;
            tColorShortMenuSet.pHandlerFunction((UINT8)ucReturnRes);
        }
        break;
    case _VOLUME_INC_MESSAGE:
    case _VOLUME_DEC_MESSAGE:
    case _CHANNEL_DEC_MESSAGE:
    case _CHANNEL_INC_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _CHANNEL_EDIT_MESSAGE:
        if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT){
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
        }
        return;
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };
    // Show Volumn
    COsdDispFullSlider(ROW(2), COL(3), LENGTH(15),_SHOW_PERCENT,&tColorShortMenuSet);
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);

}
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)



static void COsdCoreVolumnProc(void)
{
    WindowStyle volumewindow;  //tommy deleted for decrease xdata space

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();//add by xyw 080219 at jpe

#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(3);	//load volume page font
#endif
#else	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
//CScalerLoadHardwareVLCFont(tFONT_4BIT_OTHER_ICON, _ICON_COMMON_CHAR_ADDR);
COsdLoadfontloadVolumeMuteFont();
#endif	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;		//tommy  add for   cancel compling warning
#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdAudioVolumnStr);
#else	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)
COsdFxLoadIcon(ROW(1), COL(0), 0, 2, _NULL_, tOSD_AUDIO_NORMAL_ICON);
COsdFxChange4bitLUTColor(1, 0, 3, 2, COLOR00(0));
#endif	//#endif	//#if (_CUSTOMER_SANSE && _SHORTMENU_BRI)



    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreVolumnChangeProc();

    COsdFxEnableOsd();

    if (GET_AUDIO_MUTE()&&(ucSyncProcessState==_ACTIVE_STATE||ucVideoProcessState==_ACTIVE_STATE))
    {
        if (GET_AUDIO_MUTE())
        {
            CLR_AUDIO_MUTE();
            SET_MUTE_PROCESS(_DISABLE);
        }
    }
}


#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
static void COsdCoreBrightnessProc(void)
{
    WindowStyle volumewindow;

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(1);	//load color page font
#endif

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;

    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdBrightnessStr);

    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreBrightnessChangeProc();

    COsdFxEnableOsd();

}
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
static void COsdCoreContrastProc(void)
{
    WindowStyle volumewindow;

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(1);	//load color page font
#endif

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;

    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdContrastStr);

    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreContrastChangeProc();

    COsdFxEnableOsd();

}
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
static void COsdCoreColorProc(void)
{
    WindowStyle volumewindow;

    COsdFxDisableOsd();
    COsdDispFirstTimeLoadFont();
#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(1);	//load color page font
#endif

    COsdFxMapSetting(_OSD_MAP3);
    volumewindow = tOsdVolume_BottomWindow;

    COsdFxLoadText(1, 4, 0, 1, 0, GET_LANGUAGE(), tOsdSaturationStr);

    COsdFxChange1bitColor(2, 3, 2, 20, _CP_WHITE, _CP_BLACK);

    COsdCoreShowInfoSetPos(_OSD_MAP3);

    COsdFxDrawWindow(&tOsdVolume_BottomWindow);

    COsdCoreColorChangeProc();

    COsdFxEnableOsd();

}
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)


static void COsdCoreMuteChangeShow(void)
{
    COsdFxDisableOsd();
    COsdFxMapSetting(_OSD_MAP5);
    COsdFxClearText(3, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);//add by xyw 080115 at jpe
    COsdCoreShowInfoSetPos(_OSD_MAP5);
    //CScalerLoadHardwareVLCFont(tFONT_4BIT_OTHER_ICON, _ICON_COMMON_CHAR_ADDR);
    COsdLoadfontloadVolumeMuteFont();

    if (GET_AUDIO_MUTE())
    {
        COsdCoreSetState(_MUTE_STATE);
        COsdFxLoadIcon(ROW(1), COL(0), 0, 2, _NULL_, tOSD_AUDIO_MUTE_ICON);
    }
    else
    {
        COsdCoreSetState(_IDLE_STATE);
        COsdFxLoadIcon(ROW(1), COL(0), 0, 2, _NULL_, tOSD_AUDIO_NORMAL_ICON);
        CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
    }
    COsdFxChange4bitLUTColor(1, 0, 3, 2, COLOR00(0));
    COsdFxEnableOsd();
}


static void COsdCoreMuteChangeProc(void)
{
    COsdCtrlSetAudioMute();
    COsdCoreMuteChangeShow();
}

//SKYWORTH OSD SHOW SLEEP by brighty
static void COsdCoreSleepProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP5);
    COsdFxMapSetting(_OSD_MAP4);

#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(7);
#endif
    //COsdCtrlSetSleepMode();
    //usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSleepStr);
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepStr);
    COsdFxLoadText(_INFO_ROW-1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepStr);
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);

    //CosdCoreShowInfoDrawWin(3);
    //COsdFxSetWinRefPos((_DISP_WID - 200) / 2, (_DISP_LEN - 100) / 2);//add by xyw 011023
    COsdFxDrawWindow(&tOsdNoSignal_BackgroundWindowStyle);
    COsdFxDrawWindow(&tOsdNoSignal_ForegroundWindowStyle);

    COsdCoreShowInfoSetPos(_OSD_MAP4);

    COsdFxEnableOsd();
}

#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
//picture mode process
void COsdCorePictureModeProc(void)
{
    if (ucOsdMessage == _PictureMode_KEY_MESSAGE)
    {

        COsdCtrlSetPictureMode();
        COsdCorePictureModeShow(1);
    }
    else
    {
        COsdCoreDispatchMsg();
    }
    CTimerReactiveTimerEvent(SEC(5)/*SEC(GET_OSDTIMEOUT())*/, COsdFxExitEvent);
}

//audio mode  prosess
void COsdCoreSoundModeProc(void)
{
    if (ucOsdMessage ==_SoundMode_KEY_MESSAGE)
    {
        COsdCtrlSetSoundMode();
        COsdCorePictureModeShow(0);
    }
    else
    {
        COsdCoreDispatchMsg();
    }
    CTimerReactiveTimerEvent(SEC(5)/*SEC(GET_OSDTIMEOUT())*/, COsdFxExitEvent);

}
#endif

#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
void COsdCorePictureModeShow(UINT8 ModeSelect)
{
    COsdFxDisableOsd();
    COsdFxMapSetting(_OSD_MAP5);

#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(6);
#endif



#if _OSD_DOUBLE_SCALING
    COsdFxSetWinRefPos(_DISP_WID*2/5/2,_DISP_LEN*6/7/2);
#else
#if _DISP_WID == 1280
COsdFxSetWinRefPos(_DISP_WID*2/5,_DISP_LEN*6/7);
#elif _DISP_WID == 1440
COsdFxSetWinRefPos(_DISP_WID*2/5-60,_DISP_LEN*6/7);//modified by xyw in 070925
#endif
#endif
    COsdFxDrawWindow(&tOsdDisplay_ModeWindow);

    if (ModeSelect)
    {
        COsdFxLoadText(1, 5, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPictureModeStr);
        COsdFxLoadText(2, 8, 0 , _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPictureModeStrSet[COsdCtrlGetPictureMode()]);

    }else{
        COsdFxLoadText(1, 5, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSoundModeStr);
        COsdFxLoadText(2, 8, 0 , _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSoundModeStrSet[COsdCtrlGetSoundMode()]);
    }

    COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(5)/*SEC(GET_OSDTIMEOUT())*/, COsdFxExitEvent);
}
#endif
/*
static void COsdCoreLoad4BitFont(void)
{
if(ucLayerIndex == 0) {
		#if(_HARDWARE_LOAD_FONT == _ON)
CScalerLoadHardwareVLCFont(tIcon_Image_Video,0x118);

switch(stLayerStack[ucLayerIndex].ucMainMenu) {
case 0:
if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//(stSystemData.InputSource == _INPUT_PORT_1))
CScalerLoadHardwareVLCFont(tIcon_Color_DSub,0x118);
else if((GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8) && (GET_INPUTPORT_TYPE(stSystemData.InputSource) !=_VIDEO_TV_PORT))//else if((stSystemData.InputSource >= _INPUT_PORT_2) && (stSystemData.InputSource <= _INPUT_PORT_4))
CScalerLoadHardwareVLCFont(tIcon_Color_Video,0x118);
else
CScalerLoadHardwareVLCFont(tIcon_TV_TV,0x118);
break;
case 1:
if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//if(stSystemData.InputSource < _INPUT_PORT_2)
CScalerLoadHardwareVLCFont(tIcon_Image_DSub,0x118);
else
CScalerLoadHardwareVLCFont(tIcon_Image_Video,0x118);
break;
case 2:
CScalerLoadHardwareVLCFont(tIcon_Osd,0x118);
break;
case 3:
if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
CScalerLoadHardwareVLCFont(tIcon_Function_DSub,0x118);
else
CScalerLoadHardwareVLCFont(tIcon_Function_Video,0x118);
break;
case 4:
CScalerLoadHardwareVLCFont(tIcon_Misc,0x118);
break;
};
		#else
CScalerLoadFont(tIcon_Image_Video, 0x118, 48, _COMPRESS_FONT);

switch(stLayerStack[ucLayerIndex].ucMainMenu) {
case 0:
    if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//(stSystemData.InputSource == _INPUT_PORT_1))
        CScalerLoadFont(tIcon_Color_DSub, 0x118, 24, _COMPRESS_FONT);
    else if((GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8) && (GET_INPUTPORT_TYPE(stSystemData.InputSource) !=_VIDEO_TV_PORT))//else if((stSystemData.InputSource >= _INPUT_PORT_2) && (stSystemData.InputSource <= _INPUT_PORT_4))

        CScalerLoadFont(tIcon_Color_Video, 0x118, 16, _COMPRESS_FONT);
    else
        CScalerLoadFont(tIcon_TV_TV, 0x118, 40, _COMPRESS_FONT);
    break;
case 1:
    if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))//if(stSystemData.InputSource < _INPUT_PORT_2)
        CScalerLoadFont(tIcon_Image_DSub, 0x118, 48, _COMPRESS_FONT);
    else
        CScalerLoadFont(tIcon_Image_Video, 0x118, 48, _COMPRESS_FONT);
    break;
case 2:
    CScalerLoadFont(tIcon_Osd, 0x118, 32, _COMPRESS_FONT);
    break;
case 3:
    if((GET_INPUTSOURCE_TYPE() == _SOURCE_VGA) || (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI))
        CScalerLoadFont(tIcon_Function_DSub, 0x118, 16, _COMPRESS_FONT);
    else
        CScalerLoadFont(tIcon_Function_Video, 0x118, 32, _COMPRESS_FONT);
    break;
case 4:
    CScalerLoadFont(tIcon_Misc, 0x118, 24, _COMPRESS_FONT);
    break;
};
		#endif
}
}
*/


void COsdCoreInitICMWindow(void)
{
//	DebugPrintf("icm on_off: %x\n", GET_ICM_on_off());
    if (GET_ICM_on_off()){
#if(_PANEL_TYPE == _CPT_CMO_TTL_20)
        bICMCMDFlag = _TRUE;
        COsdCoreInitSubWindow();
        bICMCMDFlag = _FALSE;
#else
COsdCoreInitSubWindow();
#endif
    }else
        ucLayerIndex--;
}

static void COsdCoreDispatchMsg(void)
{
    switch (ucOsdMessage) {
    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _SOURCE_KEY_MESSAGE:
    case _MTS_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
    case _RETURN_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106
#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC

    case _UP_KEY_MESSAGE://add by xyw 080303
    case _DOWN_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:

#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
#endif	//#if _CUSTOMER_CGT

        /*	case _0_KEY_MESSAGE:
        case _1_KEY_MESSAGE:
        case _2_KEY_MESSAGE:
        case _3_KEY_MESSAGE:
        case _4_KEY_MESSAGE:
        case _5_KEY_MESSAGE:
        case _6_KEY_MESSAGE:
        case _7_KEY_MESSAGE:
        case _8_KEY_MESSAGE:
        case _9_KEY_MESSAGE:
        case _100_KEY_MESSAGE://add by brighty for skyworth tv*/
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        break;
    default:
        return;
        //	COsdCoreSetState(_IDLE_STATE);
    };
    CLR_DONT_ENABLE_OSD_WHEN_CHANGE_SRC();
}

UINT8* COsdCoreGetClockStr(void)
{

#if(1)
    // 24 hour
#if 1  //tommy change for decrease xdata_space
    ucClockStr[2] = ucHour;

    if (ucHour >= 24) {
        ucClockStr[2] = 0;
    }

    if (ucClockStr[2] == 0){
        ucClockStr[0] = _0_;
        ucClockStr[1] = _0_;
    }else if (ucClockStr[2] <= 9){
        ucClockStr[0] = _0_;
        ucClockStr[1] = _0_ + ucClockStr[2];
    }else if (ucClockStr[2] <= 19){
        ucClockStr[0] = _1_;
        ucClockStr[1] = _0_  + (ucClockStr[2] - 10);
    }else{
        ucClockStr[0] = _2_;
        ucClockStr[1] = _0_  + (ucClockStr[2] -20);
    }

    ucClockStr[2] = 0x1a;		// :


    ucClockStr[6] = ucMin / 10;

    if (ucClockStr[6] == 0)
        ucClockStr[3] = _0_;
    else
        ucClockStr[3] = _0_ + ucClockStr[6];

    ucClockStr[4] = _0_ + (ucMin % 10);

    ucClockStr[5] = _END_;
    ucClockStr[6] = _THE_SAME_;
#else
ucClockStr[3] = ucHour;
ucClockStr[0] =0x00;
ucClockStr[6] = 0x00;
ucClockStr[7] = 0x00;


if (ucHour >= 24) {
    ucClockStr[3] = 0;
}

if (ucClockStr[3] == 0){
    ucClockStr[1] = _0_;
    ucClockStr[2] = _0_;
}else if (ucClockStr[3] <= 9){
    ucClockStr[1] = _0_;
    ucClockStr[2] = _0_ + ucClockStr[3];
}else if (ucClockStr[3] <= 19){
    ucClockStr[1] = _1_;
    ucClockStr[2] = _0_  + (ucClockStr[3] - 10);
}else{
    ucClockStr[1] = _2_;
    ucClockStr[2] = _0_  + (ucClockStr[3] -20);
}

ucClockStr[3] = 0x1a;		// :


ucClockStr[8] = ucMin / 10;

if (ucClockStr[8] == 0)
    ucClockStr[4] = _0_;
else
    ucClockStr[4] = _0_ + ucClockStr[8];

ucClockStr[5] = _0_ + (ucMin % 10);

ucClockStr[8] = _END_;
#endif

    return ucClockStr;


#else

// 12 hour (AM / PM)
ucClockStr[5] = ucHour;
if (ucHour >= 12) {
    ucClockStr[0] = _P_;
    if (ucHour > 12)
        ucClockStr[5] = ucHour - 12;
} else {
    ucClockStr[0] = _A_;
}

ucClockStr[1] = _M_;
ucClockStr[2] = 0x00;

if (ucClockStr[5] <= 9) {
    ucClockStr[3] = _0_; 	//0x00;
    ucClockStr[4] = _0_ + ucClockStr[5];
} else  {
    ucClockStr[3] = _1_;
    ucClockStr[4] = _0_  + (ucClockStr[5] - 10);
}

ucClockStr[5] = 0x1a;


ucClockStr[8] = ucMin / 10;

if (ucClockStr[8] == 0)
    ucClockStr[6] = _0_;	//0x00;
else
    ucClockStr[6] = _0_ + ucClockStr[8];

ucClockStr[7] = _0_ + (ucMin % 10);

ucClockStr[8] = _END_;

#if 1   ////+  SKYWORTH_CHINESE       tommy liao add 070524
ucClockStr[9] = _THE_SAME_;
//tommy delete the below
/*
ucClockStr[10] = _THE_SAME_;
ucClockStr[11] = _THE_SAME_;
ucClockStr[12] = _THE_SAME_;
*/
#endif

return ucClockStr;

#endif

}

//gary added factory menu==============================================
#if(_FACTORY_MENU_ENABLE)
void COsdCoreInitIFactoyWindow(void)
{
    COsdCoreInitSubWindow();
}
#endif

void COsdFxShowStatus(BYTE ucType)
{
#if _TIMER_SLEEP_HINT_SUPPORT
    if (ucType != _SHOW_SLEEP_TIMEOVER_HINT && ucType != _SHOW_TIMESTOP_TIMEOVER_HINT)
        bTimeoverHintOsdState = 1;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

    COsdFxMapSetting(_OSD_MAP4);

#if _ADD_CHINESE

    switch (ucType)
    {
    case _SHOW_NOSIGNAL:
    case _SHOW_NOCABLE:
    case _SHOW_NOSUPPORT:
        COsdLoadfontLoadChineseBankFont(8);
        break;
    case _SHOW_SEARCHING:
        COsdLoadfontLoadChineseBankFont(2);
        break;
    default :
        COsdLoadfontLoadChineseBankFont(1);
        break;
    }

#endif//	#if _ADD_CHINESE


    if (ucType == _SHOW_SLEEP_TIMEOVER_HINT)
    {
        COsdLoadfontLoadChineseBankFont(7);// add by xyw 071023
        COsdFxShowStatusRedrawSleepRemind(1);
    }
    else if (ucType == _SHOW_TIMESTOP_TIMEOVER_HINT)
    {
        COsdLoadfontLoadChineseBankFont(7);// add by xyw 071023
        COsdFxShowStatusRedrawTimeStopRemind(1);
    }
#if _TIMER_PAGE_SUPPORT
    else if (ucType == _SHOW_TIMEREMIND_MESSAGE)
    {
        usItemStart = GET_WIN_NOSIGNAL_PREBLANK(0, tOsdTimerPageRemindStr);
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, tOsdTimerPageRemindStr);
    }
#endif
    else
    {
        usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
#if _CUSTOMER_HPC
        COsdFxLoadText(_INFO_ROW+0, _INFO_COL, usItemStart, _CP_COLOR06, _CP_BLACK, GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
#else
COsdFxLoadText(_INFO_ROW+0, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdShowStatusStrSet[ucType]);
#endif
    }

    COsdFxDrawWindow(&tOsdNoSignal_BackgroundWindowStyle);
    COsdFxDrawWindow(&tOsdNoSignal_ForegroundWindowStyle);

    COsdCoreShowInfoSetPos(_OSD_MAP4);

    CLR_FIRST_ENTRY_SHOWSOURCE();

    COsdFxEnableOsd();

}

#if _POWER_ON_LOGO_SUPPROT==_ON

#if 1
void COsdDispPowerOnLogoProc(void)
{
#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdColorPalette(Palette_logo);
    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
CAdjustBackgroundColor(0xff, 0xff, 0xff);
#endif
    //CScalerLoadHardwareVLCFont(tLOGO_AIFA, 0x00);
    COsdLoadFontLoadLogoFont();

    COsdFxMapSetting(_OSD_MAP8);
    COsdFxClearText(0, 0, 6, 46);//add by xyw 080219
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    COsdFxLoadText(ROW(0), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA3);
    COsdFxLoadText(ROW(4), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA4);
    COsdFxLoadText(ROW(5), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA5);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)

COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
//COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
//COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
/*
COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
*/
#endif
    COsdCoreShowInfoSetPos(_OSD_MAP8);

    CPowerPanelOn();
    COsdFxEnableOsd();//modified by xyw 080219

    //CTimerDelayXms(3000);

    //LED_Message(_LED_MSG_GREEN);
    //CTimerDelayXms(400);//modified by xyw 080219
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_RED);
    CTimerDelayXms(400);
    LED_Message(_LED_MSG_GREEN);


#endif	//#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
CAdjustBackgroundColor(0, 0, 0);
#endif

    COsdColorPalette(Palette_7_4bit);

    COsdDispFirstTimeLoadFont();

    CTimerDelayXms(20);
}

#else
void COsdDispPowerOnLogoProc(void)
{
#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdColorPalette(Palette_logo);
    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
CAdjustBackgroundColor(0xff, 0xff, 0xff);
#endif
    CScalerLoadHardwareVLCFont(tLOGO_AIFA, 0x00);
    COsdLoadFontLoadLogoFont();

    COsdFxMapSetting(_OSD_MAP8);

#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    COsdFxLoadText(ROW(0), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA0);
    COsdFxLoadText(ROW(1), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA1);
    COsdFxLoadText(ROW(2), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA2);
    COsdFxLoadText(ROW(3), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA3);
    COsdFxLoadText(ROW(4), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA4);
    COsdFxLoadText(ROW(5), COL(0), 0,_CP_RED,_CP_BLACK,0, tOSD_POWER_LOGO_AIFA5);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)

COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
//COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
//COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
/*
COsdFxLoadText(ROW(0), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA0);
COsdFxLoadText(ROW(1), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA1);
COsdFxLoadText(ROW(2), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA2);
COsdFxLoadText(ROW(3), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA3);
COsdFxLoadText(ROW(4), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA4);
COsdFxLoadText(ROW(5), COL(0), 0,_CP_BLACK,_CP_RED,0, tOSD_POWER_LOGO_AIFA5);
*/
#endif
    COsdCoreShowInfoSetPos(_OSD_MAP8);

    COsdFxEnableOsd();

    CPowerPanelOn();

    CTimerDelayXms(3000);

#endif	//#if _POWER_ON_LOGO_TYPE != _POWER_ON_LOGO_NONE

    COsdFxDisableOsd();
#if (_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_AIFA)
    CAdjustBackgroundColor(0, 0, 0);
#elif(_POWER_ON_LOGO_TYPE ==_POWER_ON_LOGO_JPE)
CAdjustBackgroundColor(0, 0, 0);
#endif

    COsdColorPalette(Palette_7_4bit);

    COsdDispFirstTimeLoadFont();

    CTimerDelayXms(20);
}
#endif

#endif

static CosdCoreShowNoteMessage(UINT8 ucRow, UINT8 ucCol,UINT16 ucSpaceLength,UINT8 ucItemCount,UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucLanguageSelect)
{
    ucSpaceLength=ucSpaceLength;
    COsdFxLoadText(ucRow, ucCol, 0x00, ucForegroundColor, ucBackgroundColor, ucLanguageSelect, tOsdFontNoteMessageSet[ucItemCount]);
}

void COsdCoreShowSourceMessage()
{
    UINT8 ucCount;
    UINT16 usPreBnkLength=12;
    UINT8  sourcetemp_sel;

    ucCount = 0;

    CTimerCancelTimerEvent(COsdFxExitEvent);//

    //COsdFxDisableOsd();
    COsdFxMapSetting(_OSD_MAP5);	//_OSD_MAP6

    COsdCoreShowInfoSetPos(_OSD_MAP5);
    COsdLoadfontLoadChineseBankFont(9);// add by xyw 071019

    CosdCoreShowInfoDrawWin(_INPUT_PORT_MAX);

    sourcetemp_sel = stSystemData.InputSource;
    ucSourceTemp = sourcetemp_sel; //reset for change source display

    //COsdFxClearText(ucCount,0,1,20);
    for (ucCount = 0; ucCount < _INPUT_PORT_MAX; ucCount++)// tSignalSourceSetP_temp.ucItemCount
    {
        //COsdFxLoadText(ucCount+1, 2, 0, _CP_WHITE, _CP_BLACK, 0, tOsdSignalItemStrSet[ucCount]);
        COsdFxLoadText(ucCount+1, 2, 0, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSignalItemStrSet[ucCount]);//modified by xyw 071019
    }

    COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw

    COsdFxClearText(_INPUT_PORT_MAX+1, 0, _OSD_SOURCENOTE_ROW-(_INPUT_PORT_MAX+1), _OSD_SOURCENOTE_COL);

    CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);
    COsdFxEnableOsd();

}

void COsdCoreSourceSelectEventProc(void)
{
#if _PCB_TYPE==_PCB_PT2660_KTC57924G
    WindowStyle  stSelectedWn ;

    stSelectedWn = tOsdSignalSource_MoveWindow;

    switch (ucOsdMessage)
    {
    case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
    case _DisplayRatio_KEY_MESSAGE:
#endif
    case _MUTE_KEY_MESSAGE:
    case _DISPLAY_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
    case _SoundMode_KEY_MESSAGE:
    case _PictureMode_KEY_MESSAGE:
#endif
    case _MENU_KEY_MESSAGE:
    case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
#endif
    case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106
#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
    case _PC_KEY_MESSAGE ://add by xyw 071106
    case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC
#if _CUSTOMER_CGT
    case _TV_KEY_MESSAGE:
    case _PC_KEY_MESSAGE:
    case _AV_KEY_MESSAGE:
    case _SV_KEY_MESSAGE:
#endif	//#if _CUSTOMER_CGT
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
    case _100_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
        break;
    default:
        break;
    }

    if ((ucOsdMessage != _UP_KEY_MESSAGE) &&(ucOsdMessage != _SOURCE_KEY_MESSAGE)&&
            (ucOsdMessage != _DOWN_KEY_MESSAGE) &&(ucOsdMessage != _RIGHT_KEY_MESSAGE) &&
            (ucOsdMessage != _LEFT_KEY_MESSAGE) &&(ucOsdMessage != _ENTER_KEY_MESSAGE))
        return;

    CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);//tommyliao --add reset time out


    if (ucOsdMessage == _RIGHT_KEY_MESSAGE)
        ucOsdMessage = _DOWN_KEY_MESSAGE;
    else if (ucOsdMessage == _LEFT_KEY_MESSAGE)
        ucOsdMessage = _UP_KEY_MESSAGE;

    if ( (ucOsdMessage == _RIGHT_KEY_MESSAGE ) ||  (ucOsdMessage == _ENTER_KEY_MESSAGE ) )
    {
        if (ucSourceTemp !=stSystemData.InputSource) //ucTmpRow
        {
            COsdChangeSourceEvent();

        }
        else
        {
            COsdFxDisableOsd();
            COsdFxExitEvent();
        }
        return;
    }
    else if (ucOsdMessage == _SOURCE_KEY_MESSAGE)
    {
        COsdFxDisableOsd();
        COsdFxExitEvent();
        return;
    }

    //COsdFxChange1bitColor(ucSourceTemp, 0, 1, 10, _CP_WHITE, _CP_BLACK);
    //clr arrow that point to current source
    COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), 0x00, _WRITE_BYTE1);

    if (ucOsdMessage == _UP_KEY_MESSAGE)
    {
        if (ucSourceTemp == 0)
            ucSourceTemp = _INPUT_PORT_MAX - 1;
        else
            ucSourceTemp -= 1;
    }
    else if (ucOsdMessage == _DOWN_KEY_MESSAGE)
    {
        if (ucSourceTemp + 1 > (_INPUT_PORT_MAX - 1))
            ucSourceTemp = 0;
        else
            ucSourceTemp += 1;
    }

    //COsdFxChange1bitColor(ucSourceTemp, 0, 1, 10, _CP_BLUE, _CP_BLACK);
    //set arrow that point to new source
    COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw

    //Move Select Window
    //stSelectedWn.stPosition.usYStart = tOsdSignalSource_BackgroundWindow.stPosition.usYStart+ucSourceTemp*32+7; //ucTmpRow
    //stSelectedWn.stPosition.usYEnd = stSelectedWn.stPosition.usYStart + 32; //23 * 2

    //COsdFxCloseWindow(stSelectedWn.ucWindowID);//gary for source menu select bar shake
    //CTimerWaitForEvent(_EVENT_DEN_STOP);  //tommy liao add for prevent osd shake
    //COsdFxDrawWindow(&stSelectedWn);

#else	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G

WindowStyle  stSelectedWn ;

stSelectedWn = tOsdSignalSource_MoveWindow;

switch (ucOsdMessage)
{
case _SLEEP_KEY_MESSAGE:
#if(_DISPLAY_RATIO_ENABLE)
case _DisplayRatio_KEY_MESSAGE:
#endif
case _MUTE_KEY_MESSAGE:
case _DISPLAY_KEY_MESSAGE:
#if 0//(_REMOTE_CONTROLLER==_TYPE_PREMIER)
case _SoundMode_KEY_MESSAGE:
case _PictureMode_KEY_MESSAGE:
#endif
#if _PCB_TYPE!=_PCB_PT2660_KTC57924G
case _MENU_KEY_MESSAGE:
#endif
case _PICT_MODE_KEY_MESSAGE: //add by xyw 071106
#if _AUDIO_EFFECT_SUPPORT
case _SOUND_MODE_KEY_MESSAGE:
#endif
case _DO_AUTO_CONFIG_MESSAGE ://add by xyw 071106
#if _CUSTOMER_HPC
#if _HPC_OTHER_IR_FUCTION_ENABLE
case _PC_KEY_MESSAGE ://add by xyw 071106
case _TV_AV_KEY_MESSAGE ://add by xyw 071106
#endif
#endif	//#if _CUSTOMER_HPC
case _0_KEY_MESSAGE:
case _1_KEY_MESSAGE:
case _2_KEY_MESSAGE:
case _3_KEY_MESSAGE:
case _4_KEY_MESSAGE:
case _5_KEY_MESSAGE:
case _6_KEY_MESSAGE:
case _7_KEY_MESSAGE:
case _8_KEY_MESSAGE:
case _9_KEY_MESSAGE:
case _100_KEY_MESSAGE:
    COsdMessagePush(ucOsdMessage);
    COsdCoreSetState(_IDLE_STATE);
    return;
    break;
default:
    break;
}

if ((ucOsdMessage != _UP_KEY_MESSAGE) &&(ucOsdMessage != _SOURCE_KEY_MESSAGE)&&
        (ucOsdMessage != _DOWN_KEY_MESSAGE) &&(ucOsdMessage != _RIGHT_KEY_MESSAGE))
    return;

CTimerReactiveTimerEvent(SEC(5), COsdFxExitEvent);//tommyliao --add reset time out



if ( (ucOsdMessage == _RIGHT_KEY_MESSAGE ) )
{
    if (ucSourceTemp !=stSystemData.InputSource) //ucTmpRow
    {
        COsdChangeSourceEvent();

    }
    else
    {
        COsdFxDisableOsd();
        COsdFxExitEvent();
    }
    return;
}
else if (ucOsdMessage == _SOURCE_KEY_MESSAGE)
{
    COsdFxDisableOsd();
    COsdFxExitEvent();
    return;
}

//COsdFxChange1bitColor(ucSourceTemp, 0, 1, 10, _CP_WHITE, _CP_BLACK);
//clr arrow that point to current source
COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), 0x00, _WRITE_BYTE1);

if (ucOsdMessage == _UP_KEY_MESSAGE)
{
    if (ucSourceTemp == 0)
        ucSourceTemp = _INPUT_PORT_MAX - 1;
    else
        ucSourceTemp -= 1;
}
else if (ucOsdMessage == _DOWN_KEY_MESSAGE)
{
    if (ucSourceTemp + 1 > (_INPUT_PORT_MAX - 1))
        ucSourceTemp = 0;
    else
        ucSourceTemp += 1;
}

//COsdFxChange1bitColor(ucSourceTemp, 0, 1, 10, _CP_BLUE, _CP_BLACK);
//set arrow that point to new source
COsdFxHLine(ROW(ucSourceTemp+1), COL(1), LENGTH(1), _ARROW_, _WRITE_BYTE1);//xyw

//Move Select Window
//stSelectedWn.stPosition.usYStart = tOsdSignalSource_BackgroundWindow.stPosition.usYStart+ucSourceTemp*32+7; //ucTmpRow
//stSelectedWn.stPosition.usYEnd = stSelectedWn.stPosition.usYStart + 32; //23 * 2

//COsdFxCloseWindow(stSelectedWn.ucWindowID);//gary for source menu select bar shake
//CTimerWaitForEvent(_EVENT_DEN_STOP);  //tommy liao add for prevent osd shake
//COsdFxDrawWindow(&stSelectedWn);


#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G
}


//return : address of str (end with _END_)
//input:	num:0-999, "0" ahead if flag=0, else "-" ahead

UINT8* COsdCoreGetNumberStr(UINT16 num, BIT flag)
{
    UINT8 ucNumberStr[4];
    UINT8 preChar;

    preChar = (flag) ? (_MINUS_) : (_0_);

    if (num>999)
        num%=1000;

#if 0//(_TV_SEL_CH_M3)
    if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num > 0){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = preChar;
        ucNumberStr[3] = _END_;
    }

#elif (_TV_SEL_CH_M2)
if (num>=100){
    ucNumberStr[0] = _0_+num/100;
    ucNumberStr[1] = _0_+(num%100)/10;
    ucNumberStr[2] = _0_+num-((num/10)*10);
    ucNumberStr[3] = _END_;
}
else if (num>=10){
    ucNumberStr[0] = preChar;
    ucNumberStr[1] = _0_+num/10;
    ucNumberStr[2] = _0_+num-((num/10)*10);
    ucNumberStr[3] = _END_;
}
else if (num > 0){
    ucNumberStr[0] = preChar;
    ucNumberStr[1] = preChar;
    ucNumberStr[2] = _0_+num;
    ucNumberStr[3] = _END_;
}
else{
    ucNumberStr[0] = preChar;
    ucNumberStr[1] = preChar;
    ucNumberStr[2] = preChar;
    ucNumberStr[3] = _END_;
}

#else
if (num>=100){
    ucNumberStr[0] = _0_+num/100;
    ucNumberStr[1] = _0_+(num%100)/10;
    ucNumberStr[2] = _0_+num-((num/10)*10);
    ucNumberStr[3] = _END_;
}
else if (num>=10){
    ucNumberStr[0] = 0x00;
    ucNumberStr[1] = _0_+num/10;
    ucNumberStr[2] = _0_+num-((num/10)*10);
    ucNumberStr[3] = _END_;
    //ucNumberStr[0] = _0_+num/10;
    //ucNumberStr[1] = _0_+num-((num/10)*10);
    //ucNumberStr[2] = _END_;
}
else{
    ucNumberStr[0] = 0x00;
    ucNumberStr[1] = 0x00;
    ucNumberStr[2] = _0_+num;
    ucNumberStr[3] = _END_;
    //ucNumberStr[0] = _0_+num;
    //ucNumberStr[1] = _END_;
}
#endif

    return ucNumberStr;

}

UINT8* COsdCoreGetChannelStr(void)
{
    return COsdCoreGetNumberStr(stTvInfo.CurChn, 0);

}

UINT8* COsdCoreGetFrequencyStr(void)
{
    UINT8 str[10];

    str[0] = _5_;
    str[1] = _5_;
    str[2] = _M_;
    str[3] = _H_;
    str[4] = _z_;
    str[5] = _END_;
    return str;

}
UINT8* COsdCoreGetBandStr(void)
{
    UINT8 str[10];

    str[0] = _T_;
    str[1] = _E_;
    str[2] = _S_;
    str[3] = _T_;
    str[4] = 0x00;
    str[5] = _END_;
    return str;

}

UINT8* COsdCoreGetTvAudioSysStr(void)
{
    return tOsdAudioTypeSet[GET_CURR_AUDIO_SYS()];
}

UINT8* COsdCoreGetTvChannelAddEraseStr(void)
{
    if (CTvGetChStatus(stTvInfo.CurChn))
        return tOsdChannelAddEreaseStrSet[1];
    else
        return tOsdChannelAddEreaseStrSet[0];
}

#if _TUNER_TYPE!=_TUNER_NONE

#define _TV_SRCH_CONTENT_COL		20
void COsdCoreTvShowChannel(UINT8 ch)
{
    //show channel at end of Item: Current Channel
    COsdFxShowNumber(ROW(4+1), COL(_TV_SRCH_CONTENT_COL),  ch, 0x33, _CP_COLOR06);//modified by xyw 070929
}
void COsdCoreTvShowFrequency(UINT16 freq)
{
    DWORD temp2;

    //show frequency at end of Item: Frequency
    //freq: (pdb-_IF_FREQ_FACROR)*0.05 = (pdb-_IF_FREQ_FACROR)/20
    //czl 071205
    if ((((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR)<100)
        COsdFxClearText(ROW(4+3), COL(_TV_SRCH_CONTENT_COL-4), 1, 1);
    COsdFxShowNumber(ROW(4+3), COL(_TV_SRCH_CONTENT_COL-2),  ((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR, 0x32, _CP_COLOR06/*_CP_COLOR00*/);//modified by xyw 070929

    temp2=(((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*5;
    COsdFxShowNumber(ROW(4+3), COL(_TV_SRCH_CONTENT_COL),  temp2, 0x33, _CP_COLOR06/*_CP_COLOR00*/);//modified by xyw 070929
    COsdFxHLine(ROW(4+3), COL(_TV_SRCH_CONTENT_COL-1), LENGTH(1), _DOT_, _WRITE_BYTE1);
    COsdFxChange1bitColor(ROW(4+3),COL(_TV_SRCH_CONTENT_COL-1),HEIGHT(1), 1, _CP_COLOR06/*_CP_COLOR00*/, _CP_BLACK);
#if 0
    {
        UINT8 usRes;
        BYTE BITS_L,BITS_H;
        COsdFxHLine(ROW(4+3), COL(_TV_SRCH_CONTENT_COL+3), 1, _DOT_, _WRITE_BYTE1);

        usRes = ( (((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*(100/4))/(_STEP_FACTOR/4);
        usRes%=100;
        if (usRes>=10)
        {
            BITS_H = usRes/10;
            BITS_L = usRes%10;
        }
        else
        {
            BITS_H = 0;
            BITS_L = usRes;
        }
        BITS_L = BITS_L+_0_;
        BITS_H = BITS_H+_0_;
        COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+1, 1, BITS_H, _WRITE_BYTE1);
        COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+2, 1, BITS_L, _WRITE_BYTE1);

        COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+3, 3, _CP_COLOR06/*_CP_COLOR05*/<<4, _WRITE_BYTE2);
    }
#else
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 1, _M_, _WRITE_BYTE1);
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+4, 1, _H_, _WRITE_BYTE1);
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+5, 1, _z_, _WRITE_BYTE1);
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 3, _CP_COLOR06/*_CP_COLOR00*/<<4, _WRITE_BYTE2);//modified by xyw 070929
#endif


    /*
    //show frequency at end of Item: Frequency
    //freq: (pdb-_IF_FREQ_FACROR)*0.05 = (pdb-_IF_FREQ_FACROR)/20
    //czl 071205
    if((((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR)<100)
    COsdFxClearText(ROW(4+3), COL(_TV_SRCH_CONTENT_COL+2), 1, 1);
    COsdFxShowNumber(ROW(4+3), COL(_TV_SRCH_CONTENT_COL),  ((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR, 0x33, _CP_COLOR06);//modified by xyw 070929

#if 0
    {
    UINT8 usRes;
    BYTE BITS_L,BITS_H;
    COsdFxHLine(ROW(4+3), COL(_TV_SRCH_CONTENT_COL+3), 1, _DOT_, _WRITE_BYTE1);

    usRes = ( (((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*(100/4))/(_STEP_FACTOR/4);
    usRes%=100;
    if (usRes>=10)
    {
    BITS_H = usRes/10;
    BITS_L = usRes%10;
    }
    else
    {
    BITS_H = 0;
    BITS_L = usRes;
    }
    BITS_L = BITS_L+_0_;
    BITS_H = BITS_H+_0_;
    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+1, 1, BITS_H, _WRITE_BYTE1);
    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+2, 1, BITS_L, _WRITE_BYTE1);

    COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3+3, 3, _CP_COLOR05<<4, _WRITE_BYTE2);
    }
#else
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 1, _M_, _WRITE_BYTE1);
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+4, 1, _H_, _WRITE_BYTE1);
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+5, 1, _z_, _WRITE_BYTE1);
COsdFxHLine(ROW(4+3), _TV_SRCH_CONTENT_COL+3, 3, _CP_COLOR06<<4, _WRITE_BYTE2);//modified by xyw 070929
#endif
    */
}

void COsdCoreTvShowBand(UINT16 freq)
{
    UINT8 pBandStr[5];

    //55Mhz show as UHF, why??
    //pData[8] = (freq<_VH_HIGH_STAR) ?_VHFL_BAND : ((freq < _UHF_STAR) ?_VHFH_BAND : _UHF_BAND);
    if (freq<_VH_HIGH_STAR)
        pData[8]=_VHFL_BAND;

    else if (freq<_UHF_STAR)
        pData[8]=_VHFH_BAND;

    else if (freq<_UHF_END)
        pData[8]=_UHF_BAND;

    else
        pData[8]=_VHFL_BAND;

    if (pData[8] == _VHFL_BAND)
    {
        pBandStr[0] = _V_;
        pBandStr[1] = _H_;
        pBandStr[2] = _F_;
        pBandStr[3] = _MINUS_;
        pBandStr[4] = _L_;
    }
    else if (pData[8] == _VHFH_BAND)
    {
        pBandStr[0] = _V_;
        pBandStr[1] = _H_;
        pBandStr[2] = _F_;
        pBandStr[3] = _MINUS_;
        pBandStr[4] = _H_;
    }
    else if (pData[8] == _UHF_BAND)
    {
        pBandStr[0] = _U_;
        pBandStr[1] = _H_;
        pBandStr[2] = _F_;
        pBandStr[3] = 0x00;
        pBandStr[4] = 0x00;
    }

    //show band info at end of Item: band
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+0), LENGTH(5), ((_CP_COLOR06& 0x0f) << 4) &0xf0, _WRITE_BYTE2);//modified by xyw 070929
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+0), LENGTH(1), pBandStr[0], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+1), LENGTH(1), pBandStr[1], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+2), LENGTH(1), pBandStr[2], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+3), LENGTH(1), pBandStr[3], _WRITE_BYTE1);
    COsdFxHLine(ROW(4+5), COL(_TV_SRCH_CONTENT_COL+4), LENGTH(1), pBandStr[4], _WRITE_BYTE1);
}

void COsdManualScanShow(UINT8 ch)
{
    COsdCoreTvShowChannel(ch);
    COsdCoreTvShowFrequency(stTvPdb.pdb);
    COsdCoreTvShowBand(stTvPdb.pdb);
    //show manual srch slider bar at Line 12
    COsdCoreFreshItem(1);
}

#endif	//#if _TUNER_TYPE!=_TUNER_NONE


BYTE CTvSelectChannelGetTargetChannel(BYTE op)
{
    BYTE	chn;
    BIT result = 0;

    chn = stTvInfo.CurChn;

    switch (op)
    {
    case _TV_PREV_CHANNEL:

        //range: 2-GET_TV_MAX_CH()
        if (chn<=_FIRST_CHANNEL)
            chn = GET_TV_MAX_CH()-1;
        else
            chn -= 1;

        while (chn != stTvInfo.CurChn)
        {
            if (stTvChStatus.ChStatus[chn>>3] &(_BIT0<<(chn%8)))
            {
                result = 1;
                break;
            }
            if (chn<=_FIRST_CHANNEL)
                chn = GET_TV_MAX_CH()-1;
            else
                chn = chn-1;
        }
        // No any other valid channel is found, return to current channel
        if (result == 0)
            chn = stTvInfo.CurChn;

        //if current channel is also invalid, we return the first channel.
        if (!CTvGetChStatus(chn))
#if 1//(_TV_CH0_UNSAVE)
            chn = 1;
#else
chn = _FIRST_CHANNEL;
#endif
        break;

    case _TV_NEXT_CHANNEL:

        //range: _FIRST_CHANNEL~GET_TV_MAX_CH()

        chn = (chn+1)%GET_TV_MAX_CH();

        while (chn != stTvInfo.CurChn)
        {
            if (stTvChStatus.ChStatus[chn>>3] &(_BIT0<<(chn%8)))
            {
                result = 1;
                break;
            }
            chn = (chn+1)%GET_TV_MAX_CH();
        }
        // No any other valid channel is found, return to current channel
        if (result == 0)
            chn = stTvInfo.CurChn;

        //if current channel is also invalid, we return the first channel.
        if (!CTvGetChStatus(chn))
#if 1//(_TV_CH0_UNSAVE)
            chn = 1;
#else
chn = _FIRST_CHANNEL;
#endif

        break;

    case _TV_LAST_CHANNEL:

        chn = stTvInfo.PreChn;

        break;

    case _TV_CURR_CHANNEL:

        chn = stTvInfo.CurChn;

        break;
    }

    return chn;
}

void COsdChangeTVChannelProc(void)
{
    BYTE ch;


#if _USE_MISC_KEY_STATE
    //SET_POWER_ON_STATE() ;
    MCU_IR_STATUS_FF89	&= ~_BIT0;//|_BIT1;//enable IR
#endif

    COsdFxDisableOsd();
    if (ucOsdMessage == _UP_KEY_MESSAGE || ucOsdMessage == _CHANNEL_INC_MESSAGE)
        ch = CTvSelectChannelGetTargetChannel(_TV_NEXT_CHANNEL);
    else if (ucOsdMessage == _DOWN_KEY_MESSAGE || ucOsdMessage == _CHANNEL_DEC_MESSAGE)
        ch = CTvSelectChannelGetTargetChannel(_TV_PREV_CHANNEL);

    stTvInfo.PreChn=stTvInfo.CurChn;
    stTvInfo.CurChn = ch;
    CEepromSaveTvData();

    CTvTunerChangeChannel();
#if _USE_MISC_KEY_STATE
    MCU_IR_STATUS_FF89		|=_BIT0;//|_BIT1;//enable IR
#endif
    COsdFxShowSource();
}

void COsdCoreReturnPrevChannel(void)
{
    BYTE ch;
    COsdFxDisableOsd();

    ch = stTvInfo.CurChn;
    stTvInfo.CurChn = stTvInfo.PreChn;
    stTvInfo.PreChn = ch;
    CEepromSaveTvData();

    CTvTunerChangeChannel();
    COsdFxShowSource();
}

#if 1//_TV_SEL_CH_M3
#if 1//(_TV_SEL_CH_M3)

//return : address of str (end with _END_)
//input:	num:0-999, digital according to hyperlink len

UINT8* COsdCoreGetNumberStrOfTvHyper(UINT16 num, UINT8 total)
{
    UINT8 ucNumberStr[4];
    UINT8 preChar;

    total = total;

    preChar = _MINUS_;

    if (num>999)
        num%=1000;

#if (_TV_SEL_CH_M3)
    if (num>=100)
    {
        //ucNumberStr[0] = _0_+num/100;
        //ucNumberStr[1] = _0_+(num%100)/10;
        //ucNumberStr[2] = _0_+num-((num/10)*10);
        //ucNumberStr[3] = _END_;
        //switch (GET_TV_HYPERLINK_INPUTBIT())
        //{
        //	case 3:
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
        //		break;
        //}
    }
    else if (num>=10){
        //ucNumberStr[0] = preChar;
        //ucNumberStr[1] = _0_+num/10;
        //ucNumberStr[2] = _0_+num-((num/10)*10);
        //ucNumberStr[3] = _END_;
        switch (GET_TV_HYPERLINK_INPUTBIT())
        {
        case 2:
            if (GET_TV_HYPERLINK_LEN()==1)
            {
                ucNumberStr[0] = _0_+num/10;
                ucNumberStr[1] = _0_+num-((num/10)*10);
                ucNumberStr[2] = _END_;
            }
            else
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_+num/10;
                ucNumberStr[2] = _0_+num-((num/10)*10);
                ucNumberStr[3] = _END_;
            }
            break;
            /*
            case 3:
            if (GET_TV_HYPERLINK_LEN()==3)
            {
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_+num/10;
            ucNumberStr[2] = _0_+num-((num/10)*10);
            ucNumberStr[3] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==2)
            {
            //ucNumberStr[0] = _0_;
            ucNumberStr[0] = _0_+num/10;
            ucNumberStr[1] = _0_+num-((num/10)*10);
            ucNumberStr[2] = _END_;
            }
            break;
            */
        }
    }
    else if (num > 0){
        //ucNumberStr[0] = preChar;
        //ucNumberStr[1] = preChar;
        //ucNumberStr[2] = _0_+num;
        //ucNumberStr[3] = _END_;
        switch (GET_TV_HYPERLINK_INPUTBIT())
        {
        case 1:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = preChar;
                ucNumberStr[2] = _0_+num;
                ucNumberStr[3] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
                //ucNumberStr[0] = preChar;
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_+num;
                ucNumberStr[2] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
            //ucNumberStr[0] = preChar;
            //ucNumberStr[1] = preChar;
            ucNumberStr[0] = _0_+num;
            ucNumberStr[1] = _END_;
            }
            */
            break;
        case 2:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_;
                ucNumberStr[2] = _0_+num;
                ucNumberStr[3] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==2)
            {
            //ucNumberStr[0] = preChar;
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_+num;
            ucNumberStr[2] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
            //ucNumberStr[0] = preChar;
            //ucNumberStr[1] = _0_;
            ucNumberStr[0] = _0_+num;
            ucNumberStr[1] = _END_;
            }
            */
            break;
            /*
            case 3:
            //execute, Not show
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_;
            ucNumberStr[2] = _0_+num;
            ucNumberStr[3] = _END_;
            break;
            */
        }
    }
    else{
        //ucNumberStr[0] = preChar;
        //ucNumberStr[1] = preChar;
        //ucNumberStr[2] = preChar;
        //ucNumberStr[3] = _END_;
        switch (GET_TV_HYPERLINK_INPUTBIT())
        {
        case 1:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = preChar;
                ucNumberStr[2] = _0_;
                ucNumberStr[3] = _END_;
            }
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
                //ucNumberStr[0] = preChar;
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_;
                ucNumberStr[2] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==1)
            {
            //ucNumberStr[0] = preChar;
            //ucNumberStr[1] = preChar;
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _END_;
            }
            */
            break;
        case 2:
            if (GET_TV_HYPERLINK_LEN()==2)
            {
                ucNumberStr[0] = preChar;
                ucNumberStr[1] = _0_;
                ucNumberStr[2] = _0_;
                ucNumberStr[3] = _END_;
            }
            /*
            else if (GET_TV_HYPERLINK_LEN()==2)
            {
            //ucNumberStr[0] = preChar;
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_;
            ucNumberStr[2] = _END_;
            }
            */
            break;
            /*
            case 3:
            //execute, Not show
            ucNumberStr[0] = _0_;
            ucNumberStr[1] = _0_;
            ucNumberStr[2] = _0_;
            ucNumberStr[3] = _END_;
            break;
            */
        }
    }

#endif

#if _TV_SEL_CH_M2
    preChar = 0x00;

    if (num>999)
        num%=1000;

    if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num > 0){
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = preChar;
        ucNumberStr[1] = preChar;
        ucNumberStr[2] = _0_;
        ucNumberStr[3] = _END_;
    }
    /*
    if (total>=2)
    {
    }
    else if (total==1)
    {
    ucNumberStr[0] = 0x00;
    }
    else
    {
    ucNumberStr[0] = 0x00;
    ucNumberStr[1] = 0x00;
    }
    */
#endif	//#if _TV_SEL_CH_M2

    return ucNumberStr;

}

#endif

//return : address of str (end with _END_)
//input:	num:0-9999, "0" is not ahead

UINT8* COsdCoreGetNumberStr2(UINT16 num)
{
    UINT8 ucNumberStr[5];

    if (num>9999)
        num%=10000;

    if (num>=1000){
        ucNumberStr[0] = _0_+num/1000;
        num = num%1000;

        ucNumberStr[1] = _0_+num/100;
        ucNumberStr[2] = _0_+(num%100)/10;
        ucNumberStr[3] = _0_+num-((num/10)*10);
        ucNumberStr[4] = _END_;
    }
    else if (num>=100){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (num>=10){
        ucNumberStr[0] = _0_+num/10;
        ucNumberStr[1] = _0_+num-((num/10)*10);
        ucNumberStr[2] = _END_;
    }
    else{
        ucNumberStr[0] = _0_+num;
        ucNumberStr[1] = _END_;
    }

    return ucNumberStr;

}

// item : 0 for minus, 1 for channel
void COsdCoreShowTVHyperlinkItem(bit item)
{
    UINT8 tHyperlinkStr[4];
    UINT8 *ptr;
    //UINT16 xdata usItemStart;

    //Display Window


#if 0
    tHyperlinkStr[0] = 0x00;
    tHyperlinkStr[1] = 0x00;
    tHyperlinkStr[2] = 0x00;
    tHyperlinkStr[3] = _END_;

    usItemStart = 0;//GET_WIN_INFO_PREBLANK(0,tHyperlinkStr);
    //COsdFxLoadText(0, 0, usItemStart, _CP_WHITE/*GET_CP_HINT_NORMAL()*/, _CP_BLACK, 0,tHyperlinkStr);
    COsdFxLoadText(1, 0, usItemStart, _CP_WHITE/*GET_CP_HINT_NORMAL()*/, _CP_BLACK, 0,tHyperlinkStr);
#endif
    if (item)
        ptr = COsdCoreGetNumberStrOfTvHyper(GET_TV_HYPERLINK_CHANNEL(),GET_TV_HYPERLINK_LEN());
    else
    {
        switch (GET_TV_HYPERLINK_LEN())
        {
        case 1:
            tHyperlinkStr[0] = _MINUS_;
            tHyperlinkStr[1] = _MINUS_;
            tHyperlinkStr[2] = _END_;
            break;
        case 2:
            tHyperlinkStr[0] = _MINUS_;
            tHyperlinkStr[1] = _MINUS_;
            tHyperlinkStr[2] = _MINUS_;
            tHyperlinkStr[3] = _END_;
            break;
        case 0:
        default:
            tHyperlinkStr[0] = _MINUS_;
            tHyperlinkStr[1] = _END_;
            break;
        }
        ptr = tHyperlinkStr;
    }

    COsdFxDisableOsd();
    CTimerCancelTimerEvent(COsdFxExitEvent);
    CTimerActiveTimerEvent(SEC(3), COsdFxExitEvent);

    COsdFxMapSetting(_OSD_MAP5);

    COsdCoreShowInfoSetPos(_OSD_MAP5);

    //COsdFxDrawWindow(&tOsdSignalSource_BackgroundWindow);

    COsdFxClearText(_INFO_ROW+0,_INFO_COL+0,1,20);
    usItemStart = GET_WIN_INFO_PREBLANK(0,ptr);
    COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE/*GET_CP_HINT_NORMAL()*/, _CP_BLACK, 0,ptr);

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();

}
#if (_TV_SEL_CH_M3)
/*void COsdTvHyperAddHyperlinkLen(void)
{
stTVHyperKeyData.nNumbers= (stTVHyperKeyData.nNumbers+1)%3;
}
*/
void COsdTvHyperAddNum(UINT8 num)
{
    stTVHyperKeyData.Numbers[0] = stTVHyperKeyData.Numbers[1];
    stTVHyperKeyData.Numbers[1] = stTVHyperKeyData.Numbers[2];
    stTVHyperKeyData.Numbers[2] = num;

    //20080418
#if (_TV_SEL_CH_M3)
    TempTvNumbers = GET_TV_HYPERLINK_CHANNEL();
#endif	//#if (_TV_SEL_CH_M3)
}
#endif

#endif

#if (_TV_SEL_CH_M2)
void COsdTvHyperAddNum(UINT8 num)
{
    stTVHyperKeyData.Numbers[0] = stTVHyperKeyData.Numbers[1];
    stTVHyperKeyData.Numbers[1] = stTVHyperKeyData.Numbers[2];
    stTVHyperKeyData.Numbers[2] = num;

    stTVHyperKeyData.nNumbers= (stTVHyperKeyData.nNumbers+1)%4;
}
#endif

void COsdCoreChannelEditShowProc(void)
{
#if (_TV_SEL_CH_M3)
    CLR_TV_HYPERLINK_DATA();
    CLR_TV_HYPERLINK_INPUTBIT();
    if (ucOsdMessage==_100_KEY_MESSAGE)
    {
        SET_TV_HYPERLINK_LEN_INC();
        COsdCoreShowTVHyperlinkItem(0);
        CTimerCancelTimerEvent(COsdChannelEditExit);
        CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
    }
    else if (ucOsdMessage>=_0_KEY_MESSAGE&&ucOsdMessage<=_9_KEY_MESSAGE)
    {
        COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
        SET_TV_HYPERLINK_INPUTBIT_INC();
        if (GET_TV_HYPERLINK_LEN()==0)
        {
            CTimerCancelTimerEvent(COsdChannelEditExit);
            COsdChannelEditExit();
            //CTimerCancelTimerEvent(COsdFxExitEvent);
            CTimerReactiveTimerEvent(SEC(2),COsdFxExitEvent);
        }
        else
        {
            //COsdShowTvChannelHyperlinkNumber(GET_TV_HYPERLINK_CHANNEL());
            COsdCoreShowTVHyperlinkItem(1);
            CTimerCancelTimerEvent(COsdChannelEditExit);
            CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        }
    }
#elif (_TV_SEL_CH_M2)
//CTimerCancelTimerEvent(CModeNoSignalEvent);//add by xyw 080221 at jpe
//first number, initial
CLR_TV_HYPERLINK_DATA();
CLR_TV_HYPERLINK_INPUTBIT();

COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
SET_TV_HYPERLINK_INPUTBIT_INC();

COsdCoreShowTVHyperlinkItem(1);
CTimerCancelTimerEvent(COsdChannelEditExit);
CTimerActiveTimerEvent(SEC(2), COsdChannelEditExit);
#else
if (ucOsdMessage == _100_KEY_MESSAGE) {
    ucNumberof = 2;
    ucChannelNum = 1;
}
else if (ucOsdMessage >= _0_KEY_MESSAGE && ucOsdMessage <= _9_KEY_MESSAGE) {
    ucChannelNum = ucOsdMessage - _0_KEY_MESSAGE;
    ucNumberof = 1;
}

COsdCoreShowTVChannel(ucChannelNum, 0);
CTimerReactiveTimerEvent(SEC(_TIMER_TV_CHANNEL_EDIT_WAIT), COsdChannelEditExit);
#endif
}


#if  (_TV_SEL_CH_M3)
void COsdCoreChannelEditEventProc(void)
{
    switch (ucOsdMessage) {
    case _100_KEY_MESSAGE :
        //CLR_SHOW_IS_NOSIGNAL_STATE();
        SET_TV_HYPERLINK_LEN_INC();
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_INPUTBIT();
        COsdCoreShowTVHyperlinkItem(0);
        CTimerCancelTimerEvent(COsdChannelEditExit);
        CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        return;

        break;

    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
        //CLR_SHOW_IS_NOSIGNAL_STATE();
        COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
        SET_TV_HYPERLINK_INPUTBIT_INC();

        if (GET_TV_HYPERLINK_INPUTBIT() >= GET_TV_HYPERLINK_LEN()+1)
        {
            CTimerCancelTimerEvent(COsdChannelEditExit);
            COsdChannelEditExit();
            CTimerReactiveTimerEvent(SEC(2),COsdFxExitEvent);
        }
        else
        {
            COsdCoreShowTVHyperlinkItem(1);
            CTimerCancelTimerEvent(COsdChannelEditExit);
            CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        }
        return;
        break;
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _CHANNEL_EDIT_MESSAGE:
    case _MENU_KEY_MESSAGE:

#if 0//(_AUDIO_EFFECT_SUPPORT)
    case _SOUND_MODE_KEY_MESSAGE:
#endif

#if 0//(_PICT_EFFECT_SUPPORT)
    case _PICT_MODE_KEY_MESSAGE:
#endif
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_INPUTBIT();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        //if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
        //	SET_SHOW_IS_NOSIGNAL_STATE();

        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _REPEAT_KEY_MESSAGE:
        return;
    default:
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_INPUTBIT();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        //if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
        //	SET_SHOW_IS_NOSIGNAL_STATE();
        COsdCoreDispatchMsg();
        return;
    }

}
#else
static void COsdCoreChannelEditEventProc(void)
{
#if (_TV_SEL_CH_M2)
    //premier, update

    //always press 0 key, we show "0" only
    if (GET_TV_HYPERLINK_CHANNEL()==0)
    {
        SET_TV_HYPERLINK_INPUTBIT(0);
    }

    switch (ucOsdMessage) {
        //case _100_KEY_MESSAGE :
        //	ucChannelNum = 1;
        //	ucNumberof = 2;
        //	break;
    case _0_KEY_MESSAGE:
    case _1_KEY_MESSAGE:
    case _2_KEY_MESSAGE:
    case _3_KEY_MESSAGE:
    case _4_KEY_MESSAGE:
    case _5_KEY_MESSAGE:
    case _6_KEY_MESSAGE:
    case _7_KEY_MESSAGE:
    case _8_KEY_MESSAGE:
    case _9_KEY_MESSAGE:
        CLR_SHOW_IS_NOSIGNAL_STATE();

        COsdTvHyperAddNum(ucOsdMessage - _0_KEY_MESSAGE);
        SET_TV_HYPERLINK_INPUTBIT_INC();
        break;
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _CHANNEL_EDIT_MESSAGE:
    case _MENU_KEY_MESSAGE:
#if 0//(_PAL_ONLY==0)
    case _MTS_KEY_MESSAGE:
#endif
#if 0//(_AUDIO_EFFECT_SUPPORT)
        //case _SEFFECT_KEY_MESSAGE:
    case _SOUND_MODE_KEY_MESSAGE:
#endif
#if 0//(_PICT_EFFECT_SUPPORT)
    case _PICT_MODE_KEY_MESSAGE:
#endif
#if 0//(_COLORTEMP_EFFECT_SUPPORT)
    case _COLORTEMP_KEY_MESSAGE:
#endif
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_LEN();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            SET_SHOW_IS_NOSIGNAL_STATE();

        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _REPEAT_KEY_MESSAGE:
        return;
    default:
        CLR_TV_HYPERLINK_DATA();
        CLR_TV_HYPERLINK_LEN();

        CTimerCancelTimerEvent(COsdChannelEditExit);
        if (ucCurrState==_NOSIGNAL_STATE || ucCurrState==_SLEEP_STATE)
            SET_SHOW_IS_NOSIGNAL_STATE();
        COsdCoreDispatchMsg();
        return;
    }

    if (GET_TV_HYPERLINK_INPUTBIT()>=3 || GET_TV_HYPERLINK_INPUTBIT()==0)
    {
        CTimerCancelTimerEvent(COsdFxExitEvent);
        COsdChannelEditExit();
        CTimerCancelTimerEvent(COsdChannelEditExit);
    }
    else
    {
        COsdCoreShowTVHyperlinkItem(1);
        CTimerReactiveTimerEvent(SEC(2), COsdChannelEditExit);
        CTimerCancelTimerEvent(COsdFxExitEvent);
    }

#else
//premier, update
//UINT8 temp = COsdFxLoadBlankCmd(1, 0, (_DISP_WID - 4 * 10 * 2) / 2 - 24);
UINT8 temp = COsdFxLoadBlankCmd(1, 0, (_WINDOW_INFO_WIDTH- 4 * 10 * 2) / 2 - 24);

switch (ucOsdMessage) {
case _100_KEY_MESSAGE :
    ucChannelNum = 1;
    ucNumberof = 2;
    break;
case _0_KEY_MESSAGE:
case _1_KEY_MESSAGE:
case _2_KEY_MESSAGE:
case _3_KEY_MESSAGE:
case _4_KEY_MESSAGE:
case _5_KEY_MESSAGE:
case _6_KEY_MESSAGE:
case _7_KEY_MESSAGE:
case _8_KEY_MESSAGE:
case _9_KEY_MESSAGE:
    if (ucNumberof) {
        ucNumberof--;
        ucChannelNum = ucChannelNum * 10 + (ucOsdMessage - _0_KEY_MESSAGE);
    } else {
        ucChannelNum = ucOsdMessage - _0_KEY_MESSAGE;
        ucNumberof = 1;
    }
    break;
case _UP_KEY_MESSAGE:
case _DOWN_KEY_MESSAGE:
case _LEFT_KEY_MESSAGE:
case _RIGHT_KEY_MESSAGE:
case _CHANNEL_EDIT_MESSAGE:
case _MENU_KEY_MESSAGE:
#if (_AUDIO_EFFECT_SUPPORT)
case _SOUND_MODE_KEY_MESSAGE:
#endif
#if (_PICT_EFFECT_SUPPORT)
case _PICT_MODE_KEY_MESSAGE:
#endif
#if (_COLORTEMP_EFFECT_SUPPORT)
case _COLORTEMP_KEY_MESSAGE:
#endif

#if _USE_SYSTEM_KEY_FUNCTION  //add by xyw 080303 at jpe
case _SHOW_SYSTEM_KEY_MESSAGE:
#endif


    CTimerCancelTimerEvent(COsdChannelEditExit);
    COsdMessagePush(ucOsdMessage);
    COsdCoreSetState(_IDLE_STATE);
    return;
case _REPEAT_KEY_MESSAGE:
    return;
default:
    CTimerCancelTimerEvent(COsdChannelEditExit);
    COsdCoreDispatchMsg();
    return;
}

//COsdFxClearText(1, temp, 1, 5);		// clean text
//COsdFxShowNumber(1, temp, ucChannelNum, 0x23, _CP_HintNorm);

COsdShowTvChannelNumber(ucChannelNum);

if (ucNumberof){
    CTimerReactiveTimerEvent(SEC(_TIMER_TV_CHANNEL_EDIT_WAIT), COsdChannelEditExit);
    CTimerCancelTimerEvent(COsdFxExitEvent);
}else {
    CTimerCancelTimerEvent(COsdFxExitEvent);
    COsdChannelEditExit();
    CTimerCancelTimerEvent(COsdChannelEditExit);
}
#endif
}
#endif

void CosdCoreShowInfoDrawWin(UINT8 lines)
{
    WindowStyle stWindowInfo;
    //stWindowInfo = tDispInfo_BackgroundWindow;
    //stWindowInfo = *tDispInfo_BackgroundWindowAray[GET_OSDSKIN()];

    stWindowInfo = tOsdSignalSource_BackgroundWindow;

#if 0//_OSD_HINT_1X
    stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*(lines+1)+24+8;
#else
stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*2*(lines+1)/*+24*/;
#endif
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&stWindowInfo);
    /*
    stWindowInfo = tDispInfo_ForegroundWindow1;
#if _OSD_HINT_1X
    stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*(lines+1)+24 -12*2+8;// 12*2 is 2xwingap
#else
stWindowInfo.stPosition->usYEnd = (stWindowInfo.stPosition)->usYStart+ 18*2*(lines+1)+24 -12*2;// 12*2 is 2xwingap
#endif
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&stWindowInfo);
    */
#if 0//(_WIN_INFO_BLEND)
    //info win translucent
    //CScalerSetBit(_OVERLAY_CTRL_6C, 0x23, ((3 & 0x07) << 2));
#endif
}

void COsdCoreShowInfoSetPos(UINT8 map)
{
    switch (map)
    {
    case _OSD_MAP5:
        COsdFxSetWinRefPos(_OSD_H_INFO_DELAY, _OSD_V_INFO_DELAY);
        break;
    case _OSD_MAP4:
        COsdFxSetWinRefPos(_OSD_H_NOSIGNAL_DELAY, _OSD_V_NOSIGNAL_DELAY);
        break;
    case _OSD_MAP3:
        COsdFxSetWinRefPos(_OSD_H_SHORTMENU_DELAY,_OSD_V_SHORTMENU_DELAY);
        break;
#if _POWER_ON_LOGO_SUPPROT==_ON
    case _OSD_MAP8:
        COsdFxSetWinRefPos(_OSD_POWERON_LOGO_H_DELAY, _OSD_POWERON_LOGO_V_DELAY);
        break;
#endif
    }
}

void COsdChangeSourceToSpecified(UINT8 src)
{
    // If change source, cancel the no-signal event,
    // and if no signal message on screen, close it.
    CTimerCancelTimerEvent(COsdNoSignalEvent);
    COsdCoreCloseNoSignalOsd();

    COsdCtrlSetSingalSource(src);
    COsdCoreInitialze();
    CLR_FIRST_ENTRY_SHOWSOURCE();
    //COsdFxShowSource();
}


#if _TV_SWAP_BY_NUMBER
//return : address of str (end with _END_)
//input:	num:0-999, "0" ahead if flag=0, else "-" ahead

UINT8* COsdCoreGetNumberStr3(UINT16 num, UINT8 bits)
{
//#define _SHARP_	(_MINUS_-10)	//#
//#define _SHARP_	(_MINUS_)	//-
#define _SHARP_	(_0_)	//-
    UINT8 ucNumberStr[4];

    if (num>999)
        num%=1000;

    if (bits >=3){
        ucNumberStr[0] = _0_+num/100;
        ucNumberStr[1] = _0_+(num%100)/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (bits >=2){
        ucNumberStr[0] = _SHARP_;
        ucNumberStr[1] = _0_+num/10;
        ucNumberStr[2] = _0_+num-((num/10)*10);
        ucNumberStr[3] = _END_;
    }
    else if (bits >=1){
        ucNumberStr[0] = _SHARP_;
        ucNumberStr[1] = _SHARP_;
        ucNumberStr[2] = _0_+num;
        ucNumberStr[3] = _END_;
    }
    else{
        ucNumberStr[0] = _SHARP_;
        ucNumberStr[1] = _SHARP_;
        ucNumberStr[2] = _SHARP_;
        ucNumberStr[3] = _END_;
    }

    return ucNumberStr;

}
#endif//#if _TV_SWAP_BY_NUMBER


#if _PAL_MASK_HUE

//skip PAL-HUE
static void COsdCoreSkipVideoHue
(	UINT8 *ucTmpSub,
  //UINT8 *ucTmpMain,
  UINT8 message,
  //UINT8 ucMainCount,
  UINT8 ucSubCount
)
{
    if (GET_VIDEO8_HUE_MASK(*ucTmpSub-1))
    {
        if (message==_UP_KEY_MESSAGE)
        {
            if (*ucTmpSub <=1)
                *ucTmpSub = ucSubCount;
            else
                *ucTmpSub -= 1;
        }
        else
        {
            if ((*ucTmpSub + 1) > ucSubCount)
                *ucTmpSub = 1;
            else
                *ucTmpSub += 1;
        }
    }
}

#endif//#if _PAL_MASK_HUE
#if _OSD_2X
bit GET_OSD_HV_MASK(UINT8 port, UINT8 *ucSub, UINT8 *ucMain)
{
    UINT8 osdpage;

    //mask item function only with double osd
    if (GET_OSDSIZEDOUBLE()==0)
        return _FALSE;

    //is target item?
    if (!(*ucSub == _MASK_ITEM_OSD_H||*ucSub == _MASK_ITEM_OSD_V))
        return _FALSE;

    //osd page has different number with different port
    switch (port)
    {
//see _INPUT_PORT_MAX!!!
    case _DSUB_A0_PORT:
    case _VIDEO_TV_PORT:
    case _YPBPR_A0_PORT:
        osdpage = 3;
        break;
#if _HDMI_SUPPORT
    case _HDMI_PORT:
    case _HDMI_PORT2:
#endif
    case _VIDEO_AV_PORT:
    case _VIDEO_SV_PORT:
        osdpage = 2;
        break;
    default:
        return _FALSE;
        break;
    }
    if (*ucMain != osdpage)
        return _FALSE;

    //success to return
    return _TRUE;
}

//skip osd h/v adjust if 2X
static void COsdCoreSkipOsdHV
(
    UINT8 port,
    UINT8 *ucTmpSub,
    UINT8 *ucTmpMain,
    UINT8 message,
    //UINT8 ucMainCount,
    UINT8 ucSubCount
)
{
    if (!GET_OSD_HV_MASK(port,ucTmpSub,ucTmpMain))
        return;

    if (message==_UP_KEY_MESSAGE)
    {
        if (*ucTmpSub <=1)
            *ucTmpSub = ucSubCount;
        else
            *ucTmpSub -= 1;
    }
    else
    {
        if ((*ucTmpSub + 1) > ucSubCount)
            *ucTmpSub = 1;
        else
            *ucTmpSub += 1;
    }
}

#endif//#if _PAL_MASK_HUE

#if _AUDIO_EFFECT_SUPPORT
void COsdCoreAudioEffectChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

#if _AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
        if (ucOsdState == _AUDIO_EFFECT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetAudioEffect();
        }
        break;
#endif
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);
    //COsdFxLoadText(0, 0, (_WINDOW_INFO_WIDTH - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]) * 2))  / 2 - 36, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
}

static void COsdCoreAudioEffectProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP2);
    COsdFxMapSetting(_OSD_MAP5);


#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(6);// add by xyw 070929
#endif

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSoundEffectStrSet[GET_AUDIO_EFFECT()]);

    COsdCoreAudioEffectChangeProc();

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();
}

#endif
#if (_PICT_EFFECT_SUPPORT)

void COsdCorePictEffectChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _MENU_KEY_MESSAGE:
        CTimerReactiveTimerEvent(SEC(0.01), COsdFxExitEvent);
        return;
        break;

    case _PICT_MODE_KEY_MESSAGE:
        if (ucOsdState == _PICT_EFFECT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetPictEffect();
        }
        break;

    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxLoadText(0, 0, (_WINDOW_INFO_WIDTH - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]) * 2))  / 2 - 36, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxEnableOsd();
    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
}

static void COsdCorePictEffectProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP2);
    COsdFxMapSetting(_OSD_MAP5);


#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(6);// add by xyw 070929
#endif

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);

    COsdCorePictEffectChangeProc();

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();
}

#endif

#if (_PICT_EFFECT_SUPPORT)
#if 1//(_PICT_ITEM_UPDATE_PICTEFFECT==1)
////////Pict Effect Mode Data to User Mode////////////////////
static void COsdCoreApplyPictEffect(MenuItem * pMenuItem, bit force)
{
    extern MenuItem code tMenuAudioSetting1, tMenuColorVga,tMenuColorDvi,tMenuColorYPbPr,tMenuColorVideo,tMenuColorTv;

    BYTE result = 0;
    BYTE temp;
    //czl 071205
    BYTE result1=0;
    if (GET_PICT_EFFECT()!=_PICT_EFFECT_USER)
    {
        if (force)
            result = 1;
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VGA && pMenuItem == &tMenuColorVga)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_DVI && pMenuItem == &tMenuColorDvi)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR && pMenuItem == &tMenuColorYPbPr)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8 &&pMenuItem == &tMenuColorVideo)
        {
            result = 1;
        }
        else if (GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8 &&pMenuItem == &tMenuColorTv)
        {
            result = 1;
        }
        if (result)
        {
            //brightness/contrast
            SET_MODE_BRIGHTNESS(COsdCtrlGetBrightness());
            SET_MODE_CONTRAST(COsdCtrlGetContrast());
            CEepromSaveBriConData();

            //saturation
            temp = COsdCtrlGetSaturation();
            SET_SATURATION(temp);
            CEepromSaveHueSatData();

            //hue
            temp = COsdCtrlGetHue();
            SET_HUE(temp);
            CEepromSaveHueSatData();

            //sharpness
            /*
            if (GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR || GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8)
            {
            temp = COsdCtrlGetSharpness();
            if(GET_INPUTSOURCE_TYPE() == _SOURCE_YPBPR)
            SET_PEAKING_CORING(temp);
            else
            SET_PEAKING_CORING(temp);
            //CEepromSaveSystemData();
            }
            */
            //backlight
#if 0//_BACKLIGHT_SUPPORT
            temp = COsdCtrlGetBacklight();
            SET_BACKLIGHT(temp);
#endif
            SET_PICT_EFFECT(_PICT_EFFECT_USER);

            //save pic mode video/ypbpr data
            CEepromSaveSystemData();
            //20070324, save bright/contrast
            CEepromSaveBriConData();
            //20070324, backlight
            //CEepromSaveBacklightData();
#if 1//(_PICT_EFFECT_INDEPEND_SUPPORT)
            CEepromSavePictModeData();
#else
CEepromSaveSystemData();
#endif
        }
    }
#if _AUDIO_EFFECT_SUPPORT

    if (pMenuItem==&tMenuAudioSetting1)
        result1=1;

    if (result1)
    {
        SET_AUDIO_EFFECT(_AUDIO_EFFECT_USER);

        SET_TREBLE(COsdCtrlGetAudioTreble());
        SET_BASS(COsdCtrlGetAudioBass());

        CPt2314WrBass();
        CPt2314WrTreble();
        CEepromSaveAudioData();
    }
#endif
}
#endif
#endif

void COsdFxShowIconMove(BYTE ucType)
{
    ucType=ucType;

    //use no signal hint window
    COsdFxShowStatus(_SHOW_NOSIGNAL);
    SET_RAND_INIT();
}

#if 1//(_SLEEP_TIMEOVER_HINT_SUPPORT)
static void COsdFxShowStatusRedrawSleepRemind(bit firstin)
{
    UINT8 ucTemp[12+7];

    if (!firstin)
        if (ucOsdMessage != _SHOW_SLEEP_TIMEOVER_HINT_REMINDTIME_MESSAGE)
        {
            //press sleep key to disable current countdown state
            if (ucOsdMessage == _SLEEP_KEY_MESSAGE)
            {
                ucSleepType = 0;
                ucSleepTimeMin = 0;
                ucSleepTimeSecCnt= 0;
                CTimerCancelTimerEvent(COsdReckonTimeEvent);
            }

            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
            COsdCoreInitialze();
            return;
        }
    //modified by xyw 011023
    if (GET_LANGUAGE()==1)
    {
        ucTemp[0] = _SHUI4_L_;
        ucTemp[1] =_SHUI4_R_;
        ucTemp[2] =0x00;
        ucTemp[3] =_MIAN2_L_;
        ucTemp[4] =_MIAN2_R_;
        ucTemp[5] =0x00;

        ucTemp[8]=(ucSleepTimeMin)?(ucSleepTimeMin-1):(0);

        ucTemp[6] = _0_+ucTemp[8]/10;
        ucTemp[7] = _0_+ucTemp[8]%10;
        ucTemp[8] =_COLON_;
        ucTemp[9] = _0_+ucSleepTimeSec/10;
        ucTemp[10] = _0_+ucSleepTimeSec%10;
        ucTemp[11] =_END_;

    }
    else
    {
        ucTemp[0] = _S_;
        ucTemp[1] =_l_;
        ucTemp[2] =_e_;
        ucTemp[3] =_e_;
        ucTemp[4] =_p_;
        ucTemp[5] =0x00;

        ucTemp[8]=(ucSleepTimeMin)?(ucSleepTimeMin-1):(0);

        ucTemp[6] = _0_+ucTemp[8]/10;
        ucTemp[7] = _0_+ucTemp[8]%10;
        ucTemp[8] =_COLON_;
        ucTemp[9] = _0_+ucSleepTimeSec/10;
        ucTemp[10] = _0_+ucSleepTimeSec%10;
        ucTemp[11] =_END_;
    }

#if 0//_OSD_HINT_1X
    COsdFxLoadText(1, 0, (_DISP_WID - COsdFxCalTextWidth(0, ucTemp)) /2, GET_CP_NOSIGTEXT(), _CP_BG, 0, ucTemp);
#else
usItemStart = GET_WIN_NOSIGNAL_PREBLANK(0, ucTemp);
COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, 0, ucTemp);
#endif
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepTimeoverCancelHintStr);
    COsdFxLoadText(_INFO_ROW+2, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdSleepTimeoverCancelHintStr);

}
#endif
//20070401
void COsdFxShowStatusRedrawTimeStopRemind(bit firstin)
{
    UINT8 ucTemp[12+7];
    UINT8 differ;

    if (!firstin)
        if (ucOsdMessage != _SHOW_TIMESTOP_TIMEOVER_HINT_REMINDTIME_MESSAGE)
        {
            COsdMessagePush(ucOsdMessage);
            COsdCoreSetState(_IDLE_STATE);
            COsdCoreInitialze();
            return;
        }

    if (GET_LANGUAGE()==1)
    {
        ucTemp[0] = _P_;
        ucTemp[1] =_o_;
        ucTemp[2] =_w_;
        ucTemp[3] =_e_;
        ucTemp[4] =_r_;
        ucTemp[5] =0x00;
        ucTemp[6] =_O_;
        ucTemp[7] =_f_;
        ucTemp[8] =_f_;
        ucTemp[9] =0x00;

        differ = stTimeData.ucTimeMinStop-1;
        ucTemp[10] = _0_+differ/10;
        ucTemp[11] = _0_+differ%10;
        ucTemp[12] =_COLON_;
        differ=59-ucTimerPowerOffMinTickCnt;
        ucTemp[13] = _0_+differ/10;
        ucTemp[14] = _0_+differ%10;
        ucTemp[15] =_END_;
    }
    else
    {
        ucTemp[0] = _P_;
        ucTemp[1] =_o_;
        ucTemp[2] =_w_;
        ucTemp[3] =_e_;
        ucTemp[4] =_r_;
        ucTemp[5] =0x00;
        ucTemp[6] =_O_;
        ucTemp[7] =_f_;
        ucTemp[8] =_f_;
        ucTemp[9] =0x00;

        differ = stTimeData.ucTimeMinStop-1;
        ucTemp[10] = _0_+differ/10;
        ucTemp[11] = _0_+differ%10;
        ucTemp[12] =_COLON_;
        differ=59-ucTimerPowerOffMinTickCnt;
        ucTemp[13] = _0_+differ/10;
        ucTemp[14] = _0_+differ%10;
        ucTemp[15] =_END_;
    }


#if 0//_OSD_HINT_1X
    COsdFxLoadText(1, 0, (_DISP_WID - COsdFxCalTextWidth(0, ucTemp) ) /2, GET_CP_NOSIGTEXT(), _CP_BG, 0, ucTemp);
#else
usItemStart = GET_WIN_NOSIGNAL_PREBLANK(0, ucTemp);
COsdFxLoadText(_INFO_ROW+0, _INFO_COL+0, usItemStart, _CP_WHITE, _CP_BLACK, 0, ucTemp);
//COsdFxLoadText(_INFO_ROW, _INFO_COL, 0, _CP_MENU_SLIDER, _CP_BG, 0, ucTemp);
#endif
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdPowerOffTimeoverCancelHintStr);
    COsdFxLoadText(_INFO_ROW+2, _INFO_COL, usItemStart, _CP_WHITE, _CP_BLACK, GET_LANGUAGE(), tOsdPowerOffTimeoverCancelHintStr);

}

void COsdCoreSleepHintChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _MENU_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _SLEEP_KEY_MESSAGE:
        if (ucOsdState == _SLEEP_HINT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetSleepMode();
            //DebugPrintf("\nucSleepType:%d\n", ucSleepType);
        }
        break;

    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    //usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    //COsdFxLoadText(_INFO_ROW+1, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    usItemStart = GET_WIN_NOSIGNAL_PREBLANK(GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);
    COsdFxLoadText(_INFO_ROW+1, _INFO_COL+0, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdSleepOptionStrSet[COsdCtrlGetSleepMode()]);

    CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
}

#if _TIMER_PAGE_SUPPORT
UINT8* COsdCoreGetTimerStr(unsigned char type)
{
    UINT8 str[6];
    unsigned char *pTargetHour;
    unsigned char *pTargetMin;

    if (type == 1)	//power on timer
    {
        pTargetHour = &stTimeData.ucTimeHourStart;
        pTargetMin = &stTimeData.ucTimeMinStart;
    }
    else if (type == 2)	//power off timer
    {
        pTargetHour = &stTimeData.ucTimeHourStop;
        pTargetMin = &stTimeData.ucTimeMinStop;
    }
    else if (type == 3)	//power off timer
    {
        pTargetHour = &stTimeData.ucTimeHourRemind;
        pTargetMin = &stTimeData.ucTimeMinRemind;
    }

    str[0] = _0_+*pTargetHour/10;
    str[1] = _0_+*pTargetHour%10;
    str[2] = _COLON_;
    str[3] = _0_+*pTargetMin/10;
    str[4] = _0_+*pTargetMin%10;
    str[5] = _END_;

    return str;

}
UINT8* COsdCoreGetPowerOnStr(void)
{
    return COsdCoreGetTimerStr(1);
}
UINT8* COsdCoreGetPowerOffStr(void)
{
    return COsdCoreGetTimerStr(2);
}

UINT8* COsdCoreGetRemindStr(void)
{
    return COsdCoreGetTimerStr(3);
}

//pos:	0--close
//		1--hour
//		2--min
void CosdCoreShowTimePageWin(unsigned char pos)
{
    WindowStyle stTimerItemPosWin;

    if (!pos)
    {
        COsdFxCloseWindow(tTimerPageTimeSegmentHourWindowStyle.ucWindowID);

        if (!GET_FACTORYSTATUS())
            CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,1,_CP_WHITE,_CP_BLACK,GET_LANGUAGE()); //add by xyw 080214
        return;
    }

    pos %= 3;

    stTimerItemPosWin = tTimerPageTimeSegmentHourWindowStyle;

    stTimerItemPosWin.stPosition->usXStart += (pos-1)*3*12;
    stTimerItemPosWin.stPosition->usXEnd += (pos-1)*3*12;
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    COsdFxDrawWindow(&stTimerItemPosWin);

    if (!GET_FACTORYSTATUS())
        CosdCoreShowNoteMessage(_NOTE_U_ROW,_NOTE_U_COL,3,2,_CP_WHITE,_CP_BLACK,GET_LANGUAGE()); //add by xyw 080214
}

#endif	//#if _TIMER_PAGE_SUPPORT
#if (_DISP_RATIO_M2_SUPPORT)

#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
void COsdCoreDispRatioChangeProc(void)
{
    //UINT16 xdata usItemStart;

    switch (ucOsdMessage)
    {
    case _LEFT_KEY_MESSAGE:
    case _RIGHT_KEY_MESSAGE:
    case _UP_KEY_MESSAGE:
    case _DOWN_KEY_MESSAGE:
    case _MENU_KEY_MESSAGE:
    case _OK_KEY_MESSAGE:
        COsdMessagePush(ucOsdMessage);
        COsdCoreSetState(_IDLE_STATE);
        return;
    case _DisplayRatio_KEY_MESSAGE:
        if (ucOsdState == _RATIO_MODE_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            //COsdCtrlSetPictEffect();
            COsdCtrlSetDispRatioM2();
        }
        break;
#if 0 //_AUDIO_EFFECT_SUPPORT
    case _SOUND_MODE_KEY_MESSAGE:
        if (ucOsdState == _AUDIO_EFFECT_STATE)
        {
            if ((ucOsdMessage == _REPEAT_KEY_MESSAGE)&&(ucRepeatKeyCount < 3))
                return;
            COsdCtrlSetAudioEffect();
        }
        break;
#endif
    default:
        //COsdMessageSend(ucOsdMessage);
        COsdCoreDispatchMsg();
        return;
    };

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);
    //COsdFxLoadText(0, 0, (_WINDOW_INFO_WIDTH - (COsdFxCalTextWidth(GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]) * 2))  / 2 - 36, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    //COsdFxEnableOsd();
    //CTimerReactiveTimerEvent(SEC(3), COsdFxExitEvent);
    CTimerCancelTimerEvent(COsdFxExitEvent);//modified by xyw 080115 at jpe
    COsdCoreSetState(_IDLE_STATE);//modified by xyw 080115 at jpe

    //if (ucVideoProcessState==_ACTIVE_STATE || ucSyncProcessState==_ACTIVE_STATE)
    //{
    //COsdCoreDispRatioProc();
    //COsdCoreSetState(_RATIO_MODE_STATE);
    //}

    //COsdDispFirstTimeLoadFont();//modified by xyw 080130 at jpe
}

static void COsdCoreDispRatioProc(void)
{
    COsdFxDisableOsd();
    //COsdFxMapSetting(_OSD_MAP2);
    COsdFxMapSetting(_OSD_MAP5);


#if _ADD_CHINESE
    COsdLoadfontLoadChineseBankFont(6);// add by xyw 070929
#endif

    COsdFxClearText(0, 0, _OSD_SOURCENOTE_ROW, _OSD_SOURCENOTE_COL);
    COsdCoreShowInfoSetPos(_OSD_MAP5);

    usItemStart = GET_WIN_INFO_PREBLANK(GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);
    //COsdFxLoadText(0, 0, usItemStart, _CP_HintUnNorm, _CP_BG, GET_LANGUAGE(), tOsdPictEffectStrSet[GET_PICT_EFFECT()]);
    COsdFxLoadText(_INFO_ROW, _INFO_COL, usItemStart, GET_CP_HINT_NORMAL(), _CP_BG, GET_LANGUAGE(), tOsdDispRatioStrSetM2[GET_DISPLAYRATIO()]);

    COsdCoreDispRatioChangeProc();

    CosdCoreShowInfoDrawWin(1);

    COsdFxEnableOsd();
}
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9

#endif

#if _CUSTOMER_CGT
#if _PICT_EFFECT_ONMENU_SUPPORT
UINT8* COsdCoreGetPictEffectStr(void)
{
    return tOsdPictEffectStrSet[GET_PICT_EFFECT()];
}
#endif	//#if _PICT_EFFECT_ONMENU_SUPPORT
#endif	//#if _CUSTOMER_CGT




#endif	//#if _TYPEOF_OSD_KONSTA


