/*===========================================================
 * Copyright (c)      Realtek Semiconductor Corporation, 2005
 * All rights reserved.
 * ========================================================== */

/*==================== File Description ===================== */
/**
 * @file
 * 	This file is osd engine declaration file for osd related functions.
 *
 * @author 	$Author: hillwang $
 * @date 	$Date: 2006-08-01 11:54:47 +0800 (?Ÿæ?äº? 01 ?«æ? 2006) $
 * @version $Revision: 1142 $
 */

/**
 * @addtogroup osd
 * @{
 */

#ifndef _OSDCORE_H
#define _OSDCORE_H
/*===================== Module Dependency  ================== */
#include "Core\Header\maindef.h"
#include "Core\Header\global.h"

/*========================== Types ========================== */

/*======================== Definitions ====================== */
//--------------------------------------------------
// Definitions of OSD Event Message
//--------------------------------------------------
typedef enum {
	_IDLE_STATE = 0,					// 0
	_BOOT_STATE,
	_NOSIGNAL_MESSAGE_STATE,
	_NOCABLE_STATE,
	_NOSUPPORT_MESSAGE_STATE,
	_SIGNALSOURCE_STATE,				// 5
	_TVCHANNEL_STATE,
	_CHANNELEDIT_STATE,
	_CHANNELINPUT_STATE,
	_CHANNELEDITSTATUS_STATE,
	_VOLIMN_STATE,						// 10
	_MTS_STATE,						
	_MAINMENU_STATE,
	_EXTENDMENU_STATE,
	_AUTOSCANCHANNEL_STATE,
#if(_SCAN_TYPE==_SEQUENTIAL_SCAN)
	_MANUALSCANCHANNEL_STATE,
#endif
	_ENTER_VCHIPDIALOG_STATE,
	_VCHIPDIALOG_STATE,				// 15
	_VCHIPMULTISELECT_STATE,
	_AUTO_DSUB_STATE,
	_VBI_SHOW_STATE,	
	_CHANGE_PASSWORD_STATE,
	_VCHIP_BLOCKED_STATE,				// 20
	_USER_DEFINED_STATE,
	_CHANGE_SOURCE_STATE,
	_SLEEP_MESSAGE_STATE,               //sleep & sound mode & picture mode
	_MUTE_STATE,
//	_CHANNELNUMBER_EDIT_STATE//add by brighty for skyworth
#if( 0)
	_LOGO_STATE,//731501
	_DTV_STATE,
#endif
#if 1//(_PICT_EFFECT_SUPPORT)
	_PICT_EFFECT_STATE,	
#endif
#if _AUDIO_EFFECT_SUPPORT
	_AUDIO_EFFECT_STATE,
#endif
#if _DISP_RATIO_M2_SUPPORT
	_RATIO_MODE_STATE,
#endif
#if _TIMER_SLEEP_HINT_SUPPORT
	_SLEEP_HINT_STATE,
	_SHOW_SLEEP_TIMEOVER_HINT_STATE,
	_SHOW_TIMESTOP_TIMEOVER_HINT_STATE,
#endif

	//short menu state
	_BRIGHTNESS_STATE,
	_CONTRAST_STATE,
	_COLOR_STATE,

}OsdSateType;

#define SET_FIRST_ENTRY_SHOWSOURCE() (ucOsdShowControl |= _BIT0)
#define GET_FIRST_ENTRY_SHOWSOURCE() (ucOsdShowControl & _BIT0)
#define CLR_FIRST_ENTRY_SHOWSOURCE() (ucOsdShowControl &= (~_BIT0))

#define SET_SHOW_IS_NOSIGNAL_STATE() 	(ucOsdShowControl |= _BIT1)
#define GET_SHOW_IS_NOSIGNAL_STATE()	(ucOsdShowControl & _BIT1)
//#define CLR_SHOW_IS_NOSIGNAL_STATE()	(ucOsdShowControl &= (~_BIT1))
#define CLR_SHOW_IS_NOSIGNAL_STATE()	do {\
											if (GET_INPUTSOURCE_TYPE()==_SOURCE_VIDEO8 && ucVideoProcessState==_NOSIGNAL_STATE)\
												ucOsdShowControl &= (~_BIT1);\
											else if (GET_INPUTSOURCE_TYPE()==_SOURCE_VGA&& ucSyncProcessState==_NOSIGNAL_STATE)\
												ucOsdShowControl &= (~_BIT1);\
											else if (GET_INPUTSOURCE_TYPE()==_SOURCE_YPBPR&& ucSyncProcessState==_NOSIGNAL_STATE)\
												ucOsdShowControl &= (~_BIT1);\
											else if (GET_INPUTSOURCE_TYPE()==_SOURCE_DVI&& ucSyncProcessState==_NOSIGNAL_STATE)\
												ucOsdShowControl &= (~_BIT1);\
											else if (ucCurrState==_SLEEP_STATE)\
												ucOsdShowControl &= (~_BIT1);\
										}while(0)
#define SET_TV_SHOWCHANNEL() 			(ucOsdShowControl |= _BIT2)
#define GET_TV_SHOWCHANNEL() 			(ucOsdShowControl & _BIT2)
#define CLR_TV_SHOWCHANNEL() 			(ucOsdShowControl &= (~_BIT2))

#define SET_SHOWINFO() 				(ucOsdShowControl |= _BIT3)
#define GET_SHOWINFO() 				(ucOsdShowControl & _BIT3)
#define CLR_SHOWINFO() 				(ucOsdShowControl &= (~_BIT3))

//show status type
#define	_SHOW_NOSIGNAL		0
#define	_SHOW_NOCABLE		1
#define	_SHOW_NOSUPPORT		2
#define	_SHOW_AUTOADJUST		3
#define	_SHOW_AUTOCOLOR		4
#define	_SHOW_VERSION			5
#define   _SHOW_SUCCESS			6
#define   _SHOW_FAIL			7
#define   _SHOW_SEARCHING		8

#if 1//(_SLEEP_TIMEOVER_HINT_SUPPORT)
#define   _SHOW_SLEEP_TIMEOVER_HINT		9
#endif
#if 1//(_SLEEP_TIMEOVER_HINT_SUPPORT)
#define   _SHOW_TIMESTOP_TIMEOVER_HINT	10
#endif

#define   _SHOW_ICONMOVE		15

/*=====================  Extern Variables =================== */
extern xdata UINT8	ucLayerIndex;

extern xdata UINT8 ucOsdState;
extern xdata UINT8 ucNumberof;
extern xdata UINT8 ucChannelNum;
extern xdata UINT8 ucOsdShowControl;
extern xdata UINT8 ucHour;
extern xdata UINT8 ucMin;
extern xdata UINT8 ucSec;
extern BIT bShowMultiSelectWindowFlag;
extern BIT bNoflashWondowFlag;
extern BIT ucOsdlayerExit;// add by xyw to modified Exit Sub Menu blink 071022 ;
extern BIT ucOsdisAutoMenu ;// modified finish auto ,menu error  by xyw  071022 ; 

//extern xdata UINT8 ucEnterFacMenu;          //lbh add 20090916

#if _TIMER_SLEEP_HINT_SUPPORT
extern bit bTimeSecTicker;
extern bit bTimeoverHintOsdState;	// 1: do not show time over remind osd because some message is showing 
extern bit bTimeoverHintRequest;	// 1: time over request show
extern data UINT8 ucHourSystem;
extern data UINT8 ucMinSystem;
extern data UINT8 ucSecSystem;
extern WORD usTimeStopAndSystemDiffer;
extern bit bTimeStartDone;
extern bit bTimeStopDone;
extern UINT8 xdata ucSleepTimeSecCnt;

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

#if _CUSTOMER_SANSE
extern bit bLedFlash;			//sanse: flash led while sleep and nosignal state

#endif
#if _CHANGE_SOURCE_POWERLIGHT_POWEROFF
extern bit bIsChangeSource;	//sanse: change source status, flag for off back light
#endif

#if(_MEMORY_LOCATION == _FLASH)
extern BIT bBrightnessFlag;
extern BIT bContrastFlag;
extern BIT bSaturationFlag;
extern BIT bHueFlag;
extern BIT bSharpnessFlag;
extern BIT bBassFlag;
extern BIT bTrebleFlag;
extern BIT bBalanceFlag;
extern BIT bOsdTimerFlag;
extern BIT bOsdBlendingFlag;
extern BIT bOsdClockFlag;
extern BIT bHPositionFlag;
extern BIT bVPositionFlag;
extern BIT bClockFlag;
extern BIT bPhaseFlag;
extern BIT bVolumeFlag;
#endif

//#if (_SCAN_TYPE == _SEQUENTIAL_SCAN)
//extern xdata UINT8 ucFirstChannel;
//extern BIT bFirstChannelFlag;
//#endif

#if( _DEBUG_TOOL == _RS232)
extern BIT ucRtd2662IspFlag;
#endif	//#if( _DEBUG_TOOL == _RS232)

#if( 0)	
extern UINT16 waitcount;
extern bit waitflag;
#endif


// Change Source
#if(_Change_SOURCE_Type == Change_SOURCE_Type2 || _Change_SOURCE_Type == Change_SOURCE_Type3)
extern xdata UINT8 ucSourceTemp;
#endif

#if(_PANEL_TYPE == _CPT_CMO_TTL_20)
extern BIT bICMCMDFlag;
#endif

/*======================= Extern Functions ================== */
/**
 * Osd Initialize .
 */
void COsdCoreInitialze(void);
void COsdCoreInitMainWindow(void);
void COsdCoreInitSubWindow(void);
void COsdCoreInitColorAdjustSubWindow(void);
void COsdCoreInitColortempWindow(void);
void COsdCoreInitExtendWindow(void);
void COsdCoreChangePassword(void);
void COsdCoreInitAudioWindow(void);
void COsdCoreInitParentalControlWindow(void);
void COsdFxShowVersion(void);
void COsdResetMenu(void);
void COsdResetSignalMenu();

/**
 * Osd handler.
 */
void COsdHandler(void);
void COsdCoreCloseNoSignalOsd(void);
void COsdChannelEditExit(void);
void COsdCoreSetState(UINT8 state);
void COsdCoreResetLayer();
void COsdFxCodeWrite(BYTE *pArray);
void COsdFxHLine2(UINT8 ucRow, UINT8 ucCol, UINT8 ucLength, UINT8 ucValue, UINT8 ucIndicate);

// TV autoscan
/*#if(_SCAN_TYPE==_TABLE_WEIGHT_SCAN)
void COsdCoreAutoScanShow(UINT8 ch,bit Ch_Exist);
#elif(_SCAN_TYPE==_SEQUENTIAL_SCAN)
	#if (_CUSTOMER_TYPE == _SKYWORTH)    //yf_zhang 2007-5-22 15:12
		void COsdCoreAutoScanShow(UINT16 freq);
	#else	
                  void COsdCoreAutoScanShow(UINT8 ch, UINT16 freq);
	#endif	
extern xdata UINT8 ucFreqInc;
#endif*/

 void COsdFxShowSource(void);

UINT8 COsdCoreGetOsdState(void);
void COsdCoreInitICMWindow(void);

UINT8* COsdCoreGetClockStr(void);

//Factory window 2006.1.12
#if(_FACTORY_MENU_ENABLE)
void COsdCoreInitIFactoyWindow(void);
#endif

void COsdFxShowStatus(BYTE ucType);

void COsdFxShowIconMove(BYTE ucType);
#if(_PCB_TYPE!=_PCB_TEST)
void SET_RAND_MOVE(void);
#endif
void COsdIconMoveDisableResetEnv(void);


#if _POWER_ON_LOGO_SUPPROT==_ON

void COsdDispPowerOnLogoProc(void);
#endif
#ifdef DRAW_SLIDER
 void COsdCoreDrawSlider();
 #endif

#if( SKYWORTH_OSD == _ENABLE)
void COsdCoreShowSourceMessage();
void COsdCoreSourceSelectEventProc(void);
#endif

#if 0//( SKYWORTH_DISPLAYPROTECT== _ENABLE)
void COsdFxSetWinMovingEvent(void);
void COsdFxShowLogo(void);
#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* COsdCoreGetChannelStr(void);
UINT8* COsdCoreGetFrequencyStr(void);
UINT8* COsdCoreGetBandStr(void);
UINT8* COsdCoreGetChannelScanGetStr(void);
void COsdCoreAutoScanRefreshChannelNumber(ItemBracket* pItemBracket);
UINT8* COsdCoreGetTvAudioSysStr(void);
UINT8* COsdCoreGetTvVideoSysStr(void);

void COsdManualScanOverShow(void);		//add 20090914

#if(_OSD_ADD_SLEEP_FUNCTION)

UINT8* COsdCoreGetSleepStr(void);
#endif

UINT8* COsdCoreGetTvChannelAddEraseStr(void);
void COsdCoreTvShowChannel(UINT8 ch);
void COsdCoreTvShowFrequency(UINT16 freq);
void COsdCoreTvShowBand(UINT16 freq);
void COsdManualScanShow(UINT8 ch);
void COsdAutoScanShow(UINT8 ch);
void COsdChangeTVChannelProc(void);
void COsdCoreReturnPrevChannel(void);
#if(_PCB_TYPE!=_PCB_TEST)				//add by lbh 20090916
void COsdCoreChannelEditShowProc(void);
#endif
void COsdCoreChannelEditEventProc(void);
UINT8* COsdCoreGetNumberStr2(UINT16 num);
void CosdCoreShowInfoDrawWin(UINT8 lines);
void COsdCoreShowInfoSetPos(UINT8 map);
void COsdChangeSourceToSpecified(UINT8 src);
UINT8* COsdCoreGetNumberStr3(UINT16 num, UINT8 bits);

#if (_PICT_EFFECT_SUPPORT)
void COsdCorePictEffectChangeProc(void);
static void COsdCorePictEffectProc(void);
#endif

#if (_PICT_EFFECT_SUPPORT)
#if 1//(_PICT_ITEM_UPDATE_PICTEFFECT==1)
static void COsdCoreApplyPictEffect(MenuItem * pMenuItem, bit force);
#endif
#endif
#if 1//(_SLEEP_TIMEOVER_HINT_SUPPORT)
static void COsdFxShowStatusRedrawSleepRemind(bit firstin);
void COsdFxShowStatusRedrawTimeStopRemind(bit firstin);
void COsdCoreSleepHintChangeProc(void);
#endif

#if _CUSTOMER_HPC
void COsdRedrawSignalMenu();
#endif	//#if _CUSTOMER_HPC
#if _TIMER_PAGE_SUPPORT
UINT8* COsdCoreGetTimeCurrentStr(void);
UINT8* COsdCoreGetPowerOffStr(void);
UINT8* COsdCoreGetPowerOnStr(void);
UINT8* COsdCoreGetPowerOnChannelStr(void);
UINT8* COsdCoreGetTimeSwitchStr(void);
UINT8* COsdCoreGetTimeSwitchChannelStr(void);
#endif	//#if _TIMER_PAGE_SUPPORT
#if (_DISP_RATIO_M2_SUPPORT)
#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
void COsdCoreDispRatioChangeProc(void);
static void COsdCoreDispRatioProc(void);
#endif	//#if _PANEL_DISPLAY_RATIO == _PANEL_16_9
#endif

#if (_CUSTOMER_SANSE)
#if (_SHORTMENU_BRI)
static void COsdCoreBrightnessProc(void);
static void COsdCoreBrightnessChangeProc(void);
#endif	//#if (_SHORTMENU_BRI)
#if (_SHORTMENU_CONTRAST)
static void COsdCoreContrastProc(void);
static void COsdCoreContrastChangeProc(void);
#endif	//#if (_SHORTMENU_CONTRAST)
#if (_SHORTMENU_COLOR)
static void COsdCoreColorProc(void);
static void COsdCoreColorChangeProc(void);
#endif	//#if (_SHORTMENU_COLOR)
#endif	//#if (_CUSTOMER_SANSE)

UINT8* COsdCoreGetColorTempStr(void);
UINT8* COsdCoreGetPictEffectStr(void);
void COsdFxLoadBracketText(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucLength, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray);
void COsdFxLoadBracketTextNoBracket(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucLength, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray);
static void COsdCoreMarkTargetLine(unsigned char marktype, unsigned char active, unsigned char ucSubItem, unsigned char rowoffset);
static void COsdCoreDrawPageTitleText(unsigned char *pString);
UINT8* COsdCoreGetSoundEffectStr(void);
UINT8* COsdCoreGetLanguageStr(void);
void COsdCoreInitAdjustWindow(ItemObject * pItemObject, unsigned char type);
bit GET_VIDEO8_HUE_MASK(UINT8 x);
bit GET_PAGE_MASK(void);
bit GET_OSD_HV_MASK(UINT8 port, UINT8 *ucSub, UINT8 *ucMain);
bit GET_VGA_PICTMISC_MASK(UINT8 x);
bit GET_VGA_CHANNEL_MASK(UINT8 x);
bit GET_VGA_COLORTEMP_RGB_MASK(UINT8 port, UINT8 * ucSub, UINT8 * ucMain);

#endif //#ifndef _OSDCORE_H
/**
 *
 * @}
 */

