//----------------------------------------------------------------------------------------------------
// ID Code      : Struct.h No.0000
// Update Note  :
//
//----------------------------------------------------------------------------------------------------
#include "Core\Header\Maindef.h"
//--------------------------------------------------
// Struct Type
//--------------------------------------------------
#if _HDMI_REWRITE
typedef struct
{
    UINT16 IHWidth;                   // Input Horizontal Width
    UINT16 IVHeight;                  // Input Vertical Height
    UINT16 IHFreq;                    // Input Horizontal Frequency
    UINT16 IVFreq;                    // Input Vertical Frequency
    UINT8 IHFreqTolerance;           // Input Horizontal Frequency Tolerance
    UINT8 IVFreqTolerance;           // Input Vertical Frequency Tolerance
    UINT16 IHTotal;                   // Input Horizontal Total Length
    UINT16 IVTotal;                   // Input Vertical Total Length
    UINT16 IHStartPos;                // Input Horizontal Start Position
    UINT16 IVStartPos;                // Input Vertical Start Position
}HdmiModeTable;
#endif	//#if _HDMI_REWRITE

typedef struct
{
    UINT8 PolarityFlag;              //
    UINT16 IHWidth;                   // Input Horizontal Width
    UINT16 IVHeight;                  // Input Vertical Height
    UINT16 IHFreq;                    // Input Horizontal Frequency
    UINT16 IVFreq;                    // Input Vertical Frequency
    UINT8 IHFreqTolerance;           // Input Horizontal Frequency Tolerance
    UINT8 IVFreqTolerance;           // Input Vertical Frequency Tolerance
    UINT16 IHTotal;                   // Input Horizontal Total Length
    UINT16 IVTotal;                   // Input Vertical Total Length
    UINT16 IHStartPos;                // Input Horizontal Start Position
    UINT16 IVStartPos;                // Input Vertical Start Position

} ModeTableType;

typedef struct
{
    UINT16 DHTotal;                   // Display Horizontal Total Length
    UINT16 DHWidth;                   // Display Horizontal Width
    UINT16 DVHeight;                  // Display Vertical Height
    UINT16 DVStartPos;                // Display Vertical Start Position

} DisplayTableType;

typedef struct
{
    UINT8 ModeCurr;                  // Input Mode
    UINT8 Polarity;                  // BIT0: H Polarity, Bit1: V Polarity
    UINT16 IHFreq;                    // Input Horizontal Frequency
    UINT16 IVFreq;                    // Input Vertical Frequency
    UINT16 IHTotal;                   // Input Horizontal Total Length
    UINT16 IVTotal;                   // Input Vertical Total Length
    UINT16 IHWidth;                   // Input Horizontal Width
    UINT16 IVHeight;                  // Input Vertical Height
    UINT16 IHStartPos;                // Input Horizontal Start Position
    UINT16 IVStartPos;                // Input Vertical Start Position
    UINT16 IHCount;                   // Input Horizontal Count Numbers
    UINT16 IHSyncPulseCount;          // Input Horizontal Sync Pulse Count Numbers

} ModeInformationType;

typedef struct
{
    UINT8 PanelStyle;                // Panel Style
    UINT8 PanelConfig;               // Panel Configuration

    UINT16 DHStartPos;                // Display Horizontal Start Position
    UINT16 DHWidth;                   // Display Horizontal Width
    UINT16 DHEndPos;                  // Display Horizontal End Position

    UINT16 DHTotal;                   // Display Horizontal Total Clock Number in One Display Line
    UINT16 DHTotalMax;                // Maxinum Display Horizontal Total Clock Number in One Display Line
    UINT16 DHTotalMin;                // Mininum Display Horizontal Total Clock Number in One Display Line

    UINT16 DVStartPos;                // Display Vertical Start Position
    UINT16 DVHeight;                  // Display Vertical Height
    UINT16 DVEndPos;                  // Display Vertical End Position

    UINT16 DVTotal;                   // Display Vertical Total Line Number in One Frame
    UINT16 DVTotalMax;                // Maxinum Display Vertical Total Line Number in One Frame
    UINT16 DVTotalMin;                // Mininum Display Vertical Total Line Number in One Frame

    UINT8 DHSyncWidth;               // Display H Sync Width
    UINT8 DVSyncHeight;              // Display V Sync Height

    UINT16 PixelClock;                // Typical Pixel Clock in MHz
    UINT16 PixelClockMax;             // Maxinum Pixel Clock in MHz
    UINT16 PixelClockMin;             // Mininum Pixel Clock in MHz

} PanelType;

typedef struct
{
    UINT8 FirstAuto;                 // First Auto
    UINT16 HPosition;                 // Horizontal Position
    UINT16 VPosition;                 // Vertical Position
    UINT16 Clock;                     // Clock Adjust
    UINT8 Phase;                     // Phase Adjust

} StructModeUserDataType;

typedef struct
{
    UINT8 ModeNum;                   // Mode Number
    UINT16 IHFreq;                    // Input Horizontal Frequency
    UINT16 IVFreq;                    // Input Vertical Frequency

} StructModeUserFIFODataType;

typedef struct
{
    UINT16 CenterHPos;                // Horizontal Position
    UINT16 CenterVPos;                // Vertical Position
    UINT16 CenterClock;               // Clock Adjust

} StructModeUserCenterDataType;

typedef struct
{
	UINT8 MonitorFlag;	   			// Bit 7: Monitor Power Status
      	                            // Bit 6: dvi vga sw
      	                            // Bit 5: reserved
      	                              // Bit 4: burn on/off
      	                              // Bit 3: factory mode
                                    // Bit 2: Reserved
                                    // Bit 1: Reserved
                                    // Bit 0: Reserved

	UINT8 InputSource;
	UINT8 Sharpness;
		//bit 7~4  Peaking-Coring
		//  		[ 000b: Disable]
		//  		[ 001b: Mode 1	]
		//  		[ 010b: Mode 2	]
		//  		[ 011b: Mode 3	]
		//  		[ 100b: Mode 4	]
		//bit 3~0	[ Sharpness		]
		//  		[ 000b: Disable]
		//  		[ 001b: Mode 1	]
		//  		[ 010b: Mode 2	]
		//  		[ 011b: Mode 3	]
		//  		[ 100b: Mode 4	]

	UINT8 UserFIFOMode;

	UINT8 Gamma;
		// Bit 0: NR[1: On / 0:Off]
		// Bit 1: Reserved
        	//bit 3~2   [ Display Ratio ]
        	//          [ 01b :   4:3       ]
        	//          [ 10b :  16:9       ]
        	//          [ 11b :  Letter Box ]
		//bit 4~6	[ Gamma			]
		//  		[ 000b: Disable	]
		//  		[ 001b: Gamma 1	]
		//  		[ 010b: Gamma 2	]
		//  		[ 011b: Gamma 3	]
		//  		[ 100b: Gamma 4	]
      	 	 // Bit 7: DOS mode select

	UINT8 ucColorSetting;
		// bit 7 [Black Level Expansion	]
		// bit 6 [Auto Image			]
		// bit 5 [Flesh Tone			]
		// bit 4 [Reserved              ][NonLinear Enable		]
		// bit 3~1[DCC Mode			]
		// 		[ 000b: Disable		]
		//  		[ 001b: Mode 1		]
		//  		[ 010b: Mode 2		]
		//  		[ 011b: Mode 3		]
		//  		[ 100b: Mode 4		]
		//        	[101b~111b: Reserved  ]
		// bit 0 [ICM  0: Disable 1: Enable]

	UINT8 ISFilter;
	UINT8 Reserved;
		//bit0: LTI
		//bit1: CTI
		//bit2: Black Extend
		//bit3: DNR
		//bit4: DITHER
		//bit5: Screen Save

} StructSystemDataType;

#define GET_ISFILTER()		(stSystemData.ISFilter&0x07)
#define SET_ISFILTER(x)		(stSystemData.ISFilter = (stSystemData.ISFilter&~0x07) | (x&0x07))

#define GET_PICTMISC_LTI()			((stSystemData.Reserved&_BIT0)?(1):(0))
#define SET_PICTMISC_LTI()			((stSystemData.Reserved|=_BIT0))
#define CLR_PICTMISC_LTI()			(stSystemData.Reserved&=(~_BIT0))
#define GET_PICTMISC_CTI()			((stSystemData.Reserved&_BIT1)?(1):(0))
#define SET_PICTMISC_CTI()			((stSystemData.Reserved|=_BIT1))
#define CLR_PICTMISC_CTI()			(stSystemData.Reserved&=(~_BIT1))
#define GET_PICTMISC_BLK_EXT()		((stSystemData.Reserved&_BIT2)?(1):(0))
#define SET_PICTMISC_BLK_EXT()		((stSystemData.Reserved|=_BIT2))
#define CLR_PICTMISC_BLK_EXT()		(stSystemData.Reserved&=(~_BIT2))
#define GET_PICTMISC_DNR()			((stSystemData.Reserved&_BIT3)?(1):(0))
#define SET_PICTMISC_DNR()			((stSystemData.Reserved|=_BIT3))
#define CLR_PICTMISC_DNR()			(stSystemData.Reserved&=(~_BIT3))
#define GET_PICTMISC_DITHER()		((stSystemData.Reserved&_BIT4)?(1):(0))
#define SET_PICTMISC_DITHER()		((stSystemData.Reserved|=_BIT4))
#define CLR_PICTMISC_DITHER()		(stSystemData.Reserved&=(~_BIT4))
#define GET_SCREEN_SAVE()			((stSystemData.Reserved&_BIT5)?(1):(0))
#define SET_SCREEN_SAVE()			((stSystemData.Reserved|=_BIT5))
#define CLR_SCREEN_SAVE()			(stSystemData.Reserved&=(~_BIT5))

typedef struct
{
	UINT8 ICM_COLOR[10];	  //0~9 use for RGBYC
	//leo 20060613 add black level
	#if(_BLACK_LEVEL ==  _ENABLE)
	UINT8 BlackLevel;
	UINT8 WhiteLevel;
	#else
	UINT8 Reserved[2];
	#endif
//	UINT8 Reserved[6];
}StructICMColor;

#define GET_DCC_MODE()					((stSystemData.ucColorSetting & (_BIT3 | _BIT2 | _BIT1)) >> 1)
#define SET_DCC_MODE(x) 				(stSystemData.ucColorSetting = (stSystemData.ucColorSetting & ~(_BIT3 | _BIT2 | _BIT1)) | (x<<1))

//leo 20060613 add black level
#if(_BLACK_LEVEL ==  _ENABLE)
#define GET_BLACKLEVEL()			(stICMColor.BlackLevel)
#define SET_BLACKLEVEL(x)			(stICMColor.BlackLevel = x)
#define GET_WHITELEVEL()			(stICMColor.WhiteLevel)
#define SET_WHITELEVEL(x)			(stICMColor.WhiteLevel = x)
#endif

#define GET_ICM_on_off()				((stSystemData.ucColorSetting & _BIT0))
#define SET_ICM_on_off() 				(stSystemData.ucColorSetting |=( _BIT0))
#define CLR_ICM_on_off() 				(stSystemData.ucColorSetting &= (~_BIT0))
//Video / TV
#define GET_ICM_HUE_R()				    (stICMColor.ICM_COLOR[0])
#define GET_ICM_HUE_G()				    (stICMColor.ICM_COLOR[1])
#define GET_ICM_HUE_B()				    (stICMColor.ICM_COLOR[2])
#define GET_ICM_HUE_Y()				    (stICMColor.ICM_COLOR[3])
#define GET_ICM_HUE_C()				    (stICMColor.ICM_COLOR[4])
#define GET_ICM_SAT_R()                 (stICMColor.ICM_COLOR[5])
#define GET_ICM_SAT_G()                 (stICMColor.ICM_COLOR[6])
#define GET_ICM_SAT_B()                 (stICMColor.ICM_COLOR[7])
#define GET_ICM_SAT_Y()                 (stICMColor.ICM_COLOR[8])
#define GET_ICM_SAT_C()                 (stICMColor.ICM_COLOR[9])

#define SET_ICM_HUE_R(x)                (stICMColor.ICM_COLOR[0] = (stICMColor.ICM_COLOR[0] & 0x00)|(x))
#define SET_ICM_HUE_G(x)			    (stICMColor.ICM_COLOR[1] = (stICMColor.ICM_COLOR[1] & 0x00)|(x))
#define SET_ICM_HUE_B(x)			    (stICMColor.ICM_COLOR[2] = (stICMColor.ICM_COLOR[2] & 0x00)|(x))
#define SET_ICM_HUE_Y(x)			    (stICMColor.ICM_COLOR[3] = (stICMColor.ICM_COLOR[3] & 0x00)|(x))
#define SET_ICM_HUE_C(x)			    (stICMColor.ICM_COLOR[4] = (stICMColor.ICM_COLOR[4] & 0x00)|(x))
#define SET_ICM_SAT_R(x)			    (stICMColor.ICM_COLOR[5] = (stICMColor.ICM_COLOR[5] & 0x00)|(x))
#define SET_ICM_SAT_G(x)			    (stICMColor.ICM_COLOR[6] = (stICMColor.ICM_COLOR[6] & 0x00)|(x))
#define SET_ICM_SAT_B(x)			    (stICMColor.ICM_COLOR[7] = (stICMColor.ICM_COLOR[7] & 0x00)|(x))
#define SET_ICM_SAT_Y(x)			    (stICMColor.ICM_COLOR[8] = (stICMColor.ICM_COLOR[8] & 0x00)|(x))
#define SET_ICM_SAT_C(x)			    (stICMColor.ICM_COLOR[9] = (stICMColor.ICM_COLOR[9] & 0x00)|(x))

#define GET_ICMCOLOR_RESERVED(x)   		(stICMColor.Reserved[x])
#define SET_ICMCOLOR_RESERVED(x,y)   	(stICMColor.Reserved[x] = y)
#define SET_ICMCOLORDEFAULT_RESERVED(x,y)   	(tEEPROM_ICM_COLOR.Reserved[x] = y)

#define GET_GAMMA() ((stSystemData.Gamma & (_BIT4 | _BIT5 | _BIT6)) >> 4)
#define SET_GAMMA(x) (stSystemData.Gamma = (stSystemData.Gamma & ~(_BIT4 | _BIT5 | _BIT6)) | ((x & (_BIT0 | _BIT1 | _BIT2)) << 4))

#define GET_DISPLAYRATIO() ((stSystemData.Gamma & (_BIT2 | _BIT3)) >> 2)
#define SET_DISPLAYRATIO(x) (stSystemData.Gamma = (stSystemData.Gamma & ~(_BIT2 | _BIT3)) | ((x & (_BIT0 | _BIT1)) << 2))

#define GET_NOISEREDUTION() (stSystemData.Gamma & (_BIT0))
#define SET_NOISEREDUTION(x) (stSystemData.Gamma = (stSystemData.Gamma & ~(_BIT0)) | x)

#if (_SHARPNESS_REWRITE==_OFF)
#define GET_PEAKING_CORING() ((stSystemData.Sharpness & (_BIT7 | _BIT6 | _BIT5 | _BIT4))>>4)
#define SET_PEAKING_CORING(x) (stSystemData.Sharpness = (stSystemData.Sharpness & ~(_BIT7 | _BIT6 | _BIT5 | _BIT4)) | (x << 4))
#endif	//#if _SHARPNESS_REWRITE


#define GET_SHARPNESS() (stSystemData.Sharpness & (_BIT0 | _BIT1 | _BIT2 | _BIT3))
#define SET_SHARPNESS(x) (stSystemData.Sharpness = (stSystemData.Sharpness & ~(_BIT0 | _BIT1 | _BIT2 | _BIT3)) | x)

#define GET_HUE() (stHueSatData.Hue)
#define SET_HUE(x) (stHueSatData.Hue = x);
#define GET_SATURATION() (stHueSatData.Saturation)
#define SET_SATURATION(x) (stHueSatData.Saturation = x)

//#define GET_BRIGHTNESS() (stSystemData.Brightness)
//#define SET_BRIGHTNESS(x) (stSystemData.Brightness = x)
#define GET_MODESELECT_TYPE()	(BIT)(stSystemData.Gamma & _BIT7)
#define SET_MODESELECT_TYPE(x) 	(stSystemData.Gamma =  (stSystemData.Gamma & ~_BIT7) | (x<<7))

//brighty for skyworth
typedef struct
{

    UINT8 OsdHPos;
    UINT8 OsdVPos;
    UINT8 Language;
    UINT8 OsdTimeout;
    UINT8 OsdBlending;
	// bit7: osd double
	// bit2-0: blending level
    UINT8 Filter_type;
#if _TV_BACKGROUND_OPTION_SUPPORT
    UINT8 TvBg;	//bit0: 1=blue, 0=snow
#else
    UINT8 Reserved;
#endif


} StructOsdUserDataType;
#if _ADD_NEW_LANGUAGES       //dong alter 20080816
#define GET_LANGUAGE()	(stOsdUserData.Language & (_BIT0 | _BIT1 | _BIT2 |_BIT3 ))
#define SET_LANGUAGE(x)	(stOsdUserData.Language = ((stOsdUserData.Language & (~(_BIT0 | _BIT1 | _BIT2 |_BIT3))) | x))
#else
#define GET_LANGUAGE()	(stOsdUserData.Language & (_BIT0 | _BIT1 | _BIT2))
#define SET_LANGUAGE(x)	(stOsdUserData.Language = ((stOsdUserData.Language & (~(_BIT0 | _BIT1 | _BIT2))) | x))
#endif
#define GET_OSDTIMEOUT() (stOsdUserData.OsdTimeout)
#define SET_OSDTIMEOUT(x) (stOsdUserData.OsdTimeout = x)
#define SET_OSDUSERHPOS(x) (stOsdUserData.OsdHPos= x)
#define SET_OSDUSERVPOS(x) (stOsdUserData.OsdVPos= x)
#define GET_OSDBLENDING() (stOsdUserData.OsdBlending&0x07)
#define SET_OSDBLENDING(x) (stOsdUserData.OsdBlending = stOsdUserData.OsdBlending&(~(0x07)) | (x&0x07))
//#define GET_PASSWORD(x) (stOsdUserData.OsdPassword[x])
//#define SET_PASSWORD(x,y) (stOsdUserData.OsdPassword[x] = y)
#define GET_FILTER_TYPE() (stOsdUserData.Filter_type)
#define SET_FILTER_TYPE(x) (stOsdUserData.Filter_type = x)

#if (_TV_BACKGROUND_OPTION_SUPPORT)
#define GET_TV_BACKGROUND()	((stOsdUserData.TvBg&_BIT0)?(1):(0))
#define SET_TV_BACKGROUND(x)	(stOsdUserData.TvBg = (stOsdUserData.TvBg&(~_BIT0))|((x&0x01)<<0))
#endif

typedef struct
{
    UINT8 AdcGain[3];
    UINT8 AdcOffset[3];
} StructAdcDataType;

typedef struct
{
    UINT8 YPbPrGain[3];
    UINT8 YPbPrOffset[3];
}StructYPbPrDataType;

typedef struct			// for D-sub and DVI
{
    UINT8 Brightness;
    UINT8 Contrast;

} StructColorProc0DataType;

#if _PICT_EFFECT_SUPPORT
#define GET_MODE_BRIGHTNESS()					(stConBriData.Brightness)
#define SET_MODE_BRIGHTNESS(x)				(stConBriData.Brightness = x)
#define GET_MODE_CONTRAST()				(stConBriData.Contrast)
#define SET_MODE_CONTRAST(x)			(stConBriData.Contrast = x)
#endif

typedef struct
{
	UINT8 ColorTemp[3];
} StructColorProc1DataType;

typedef struct
{
	UINT8 ColorTemp9300Red;
	UINT8 ColorTemp9300Green;
	UINT8 ColorTemp9300Blue;

	UINT8 ColorTemp6500Red;
	UINT8 ColorTemp6500Green;
	UINT8 ColorTemp6500Blue;

	UINT8 ColorTemp5800Red;
	UINT8 ColorTemp5800Green;
	UINT8 ColorTemp5800Blue;

	UINT8 ColorTempUserRed;
	UINT8 ColorTempUserGreen;
	UINT8 ColorTempUserBlue;

} StructColorTempDataType;

//--------------------------------------------------
// TV information Struct
//--------------------------------------------------
typedef struct
{
        UINT8 CurSigMode;
	UINT8 CurChn;
	UINT8 PreChn;
  	UINT8 Reserved;
} StructTvDataType;

//--------------------------------------------------
// TV Channel Status 16 bytes
//--------------------------------------------------
typedef struct
{
	
	//UINT8 ChStatus[15];
	//UINT8 ChStatus[GET_TV_MAX_CH()/8];
	//20081027 ccy 200 chn
	#if _CUSTOMER_TOLIP
	UINT8 ChStatus[32];
	#else
	UINT8 ChStatus[16];
	#endif		//each bit represent enable/disable of that channel
		//for channel add/remove function
		//
		//ChStatus[0] Bit 0: channel 1, 1:enable,0:disable
		//ChStatus[0] Bit 1: channel 2, 1:enable,0:disable
		//..
		//ChStatus[15] Bit 7: channel 128,1:enable,0:disable
}StructTvChStatus;

typedef struct {
	UINT8 Mode;	// General Audio Mode
		//bit 7~1 	 Reserved
		//bit 0	[ Mute on/off ctrl	]
		//		[ 0: Mute off		]
		//		[ 1: Mute On		]
	UINT8 Volume;	// based on Audio Dst (bit 0 of Mode)
	UINT8 Balance;		// Balance value of each output channel
	UINT8 Bass;			// Bass value of each output channel
	UINT8 Treble;		// Treble value of each output channel
	#if (_AUDIO_EFFECT_SUPPORT)
        UINT8 SoundMode;	//type
        #else
	UINT8 Woofer;		// Woofer value for loudspeaker
        #endif
} StructAudioDataType;

#define GET_AUDIO_MUTE() (stAudioData.Mode & _BIT0)
#define SET_AUDIO_MUTE() (stAudioData.Mode |= _BIT0)
#define CLR_AUDIO_MUTE() (stAudioData.Mode &= ~_BIT0)

#define GET_VOLUME() (stAudioData.Volume)
#define SET_VOLUME(x) (stAudioData.Volume = x)
#define GET_BALANCE() (stAudioData.Balance)
#define SET_BALANCE(x) (stAudioData.Balance = x)
#define GET_BASS() (stAudioData.Bass)
#define SET_BASS(x) (stAudioData.Bass = x)
#define GET_TREBLE() (stAudioData.Treble)
#define SET_TREBLE(x) (stAudioData.Treble = x)
//#define GET_WOOFER() (stAudioData.Woofer)
//#define SET_WOOFER(x) (stAudioData.Woofer = x)
#if (_AUDIO_EFFECT_SUPPORT)
#define GET_AUDIO_EFFECT()	(stAudioData.SoundMode&0x07)
#define SET_AUDIO_EFFECT(x)	(stAudioData.SoundMode= stAudioData.SoundMode&(~0x07) |x)
#endif


//--------------------------------------------------
// Timer Struct
//--------------------------------------------------
struct CTimerEventTable
{
    UINT16 Time;
    void (*Event)(void);
};

#if(_SCAN_TYPE==_SEQUENTIAL_SCAN)

typedef struct
{
	UINT8 TvSequentialCurrChn;
	UINT8 TvSequentialLastChn;
}StructTvSequentialDataType;

#endif	//#if(_SCAN_TYPE==_SEQUENTIAL_SCAN)


#if (_PICT_EFFECT_SUPPORT)

typedef struct
{
	UINT8 PictModeVGA;
	UINT8 PictModeDVI;
	UINT8 PictModeVideo8;
	UINT8 PictModeYPBPR;

} StructPictModeType;

#define GET_PICT_EFFECT()		(*((&stPictMode.PictModeVGA)+GET_INPUTSOURCE_TYPE()))
#define SET_PICT_EFFECT(x)	(*((&stPictMode.PictModeVGA)+GET_INPUTSOURCE_TYPE()) = x)

#endif	//#if (_PICT_EFFECT_SUPPORT)


#if (_CT_INDEPENDENT_SUPPORT)
typedef struct
{
	UINT8 ucColorTempModeVga;
	UINT8 ucColorTempModeDvi;
	UINT8 ucColorTempModeV8;
	UINT8 ucColorTempModeYpbpr;
} StructColorTempModeType;

#define GET_COLOR_TEMP_TYPE()		((*((&stColorTempMode.ucColorTempModeVga)+GET_INPUTSOURCE_TYPE())))
#define SET_COLOR_TEMP_TYPE(x)		(*((&stColorTempMode.ucColorTempModeVga)+GET_INPUTSOURCE_TYPE()) = x)
#endif

typedef struct
{
	UINT8 chinfo;
		//bit7-6:		[Reserve		]

		//bit5-3:		tv color mode
		//			[0:AUTO		]
		//			[1:PAL		]
		//			[2:NTSC		]
		//			[3:SECAM	]

		//bit2-0:		tv mode
		//			[0:I		]
		//			[1:DK	]
		//			[2:BG	]
		//			[3:M	]
		//			[4:AUTO		]

	UINT16 pdb;		
		//bit15:		pdb is in use	//for scan update channel mode
		//			[0:	is in use	]
		//			[1:	not in use	]
		
		//bit14-0:	pdb
		//(freq+38.9)/0.05
					
	UINT8 Afc;
		//bit7:	1=afc on, 0=afc off
		//bit6:	afc sign (+/-)
		//		[0 = +		]
		//		[1 = -		]
		//bit5-0: afc value
		
}StructTvPdb;


#define GET_CURR_AUDIO_SYS()		(stTvPdb.chinfo&0x07)
#define SET_CURR_AUDIO_SYS(x)		(stTvPdb.chinfo=((stTvPdb.chinfo&(~0x07)) |(x&0x07)))

#define GET_TV_VIDEO_SYS()				((stTvPdb.chinfo>>3)&0x07)
#define SET_TV_VIDEO_SYS(x)			(stTvPdb.chinfo=((stTvPdb.chinfo&(~(0x07<<3))) |((x&0x07)<<3)))



#if (_TV_AFC_SUPPORT)
#define GET_TV_AFC_ENABLE()		((stTvPdb.Afc&_BIT7)?(1):(0))
#define SET_TV_AFC_ENABLE(x)		(stTvPdb.Afc = stTvPdb.Afc&(~_BIT7)|(x<<7))
#define GET_TV_AFC_SIGN()		((stTvPdb.Afc&_BIT6)?(1):(0))
#define SET_TV_AFC_SIGN(x)		(stTvPdb.Afc = stTvPdb.Afc&(~_BIT6)|(x<<6))
#define GET_TV_AFC_VALUE()		(stTvPdb.Afc&0x3f)
#define SET_TV_AFC_VALUE(x)		(stTvPdb.Afc = stTvPdb.Afc&(~0x3f)|(x&0x3f))
#define SET_TV_AFC_VALUE_INC()	(stTvPdb.Afc = (stTvPdb.Afc+1))
#define SET_TV_AFC_VALUE_DEC()	(stTvPdb.Afc = (stTvPdb.Afc-1))
#endif


#if 0//(_TV_SEL_CH_M4)
typedef struct
{
	UINT8 nNumbers;	
		//for M2: 1.2.3 is valid, 0 or 4 is quit or execute state
		//for m3: 0.1.2 is hyperlink len
	UINT8 Numbers[3];
}
StructTVHyperLinkKeyDataType;

#define CLR_TV_HYPERLINK_DATA()		do {	\
										stTVHyperKeyData.Numbers[0]=0;\
										stTVHyperKeyData.Numbers[1]=0;\
										stTVHyperKeyData.Numbers[2]=0;\
									}while (0)

//#define SET_TV_HYPERLINK_LEN(x)		(stTVHyperKeyData.nNumbers=x)
//#define GET_TV_HYPERLINK_LEN()		(stTVHyperKeyData.nNumbers)
//#define CLR_TV_HYPERLINK_LEN()		(stTVHyperKeyData.nNumbers=0)
//#define SET_TV_HYPERLINK_LEN_INC()	(stTVHyperKeyData.nNumbers=(stTVHyperKeyData.nNumbers+1)%3)

#define GET_TV_HYPERLINK_CHANNEL()	(stTVHyperKeyData.Numbers[0]*100+stTVHyperKeyData.Numbers[1]*10+stTVHyperKeyData.Numbers[2])

#define SET_TV_HYPERLINK_INPUTBIT(x)			(ucTvHyperlinkInputBit=x)
#define GET_TV_HYPERLINK_INPUTBIT()			(ucTvHyperlinkInputBit)
#define CLR_TV_HYPERLINK_INPUTBIT()			(ucTvHyperlinkInputBit=0)
#define SET_TV_HYPERLINK_INPUTBIT_INC()		(ucTvHyperlinkInputBit=ucTvHyperlinkInputBit+1)

#endif
#if 1//(_TV_SEL_CH_M3)
typedef struct
{
	UINT8 nNumbers;	
		//for M2: 1.2.3 is valid, 0 or 4 is quit or execute state
		//for m3: 0.1.2 is hyperlink len
	UINT8 Numbers[3];
}
StructTVHyperLinkKeyDataType;
#define CLR_TV_HYPERLINK_DATA()		do {	\
										stTVHyperKeyData.Numbers[0]=0;\
										stTVHyperKeyData.Numbers[1]=0;\
										stTVHyperKeyData.Numbers[2]=0;\
									}while (0)

#define SET_TV_HYPERLINK_LEN(x)		(stTVHyperKeyData.nNumbers=x)
#if 0//(_ColorStandard_TYPE==_NTSC)
#else
#define GET_TV_HYPERLINK_LEN()		(stTVHyperKeyData.nNumbers)
#endif
#define CLR_TV_HYPERLINK_LEN()		(stTVHyperKeyData.nNumbers=0)

#if 0//(_ColorStandard_TYPE==_NTSC)
#define SET_TV_HYPERLINK_LEN_INC()	do{\
										if (GET_NtscTableType()==_TV_NTSCTABLE_TYPE_AIR)\
										{\
											stTVHyperKeyData.nNumbers=(stTVHyperKeyData.nNumbers+1)%2;\
										}\
										else\
										{\
											stTVHyperKeyData.nNumbers=(stTVHyperKeyData.nNumbers+1)%3;\
										}\
									}while (0)
#else
#define SET_TV_HYPERLINK_LEN_INC()	(stTVHyperKeyData.nNumbers=(stTVHyperKeyData.nNumbers+1)%3)
#endif
//#define GET_TV_HYPERLINK_CHANNEL()	(stTVHyperKeyData.Numbers[0]*100+stTVHyperKeyData.Numbers[1]*10+stTVHyperKeyData.Numbers[2])
#define GET_TV_HYPERLINK_CHANNEL()	((stTVHyperKeyData.Numbers[0]*100+stTVHyperKeyData.Numbers[1]*10+stTVHyperKeyData.Numbers[2])>(GET_TV_MAX_CH()-1)? 1:(stTVHyperKeyData.Numbers[0]*100+stTVHyperKeyData.Numbers[1]*10+stTVHyperKeyData.Numbers[2]))

#define SET_TV_HYPERLINK_INPUTBIT(x)			(ucTvHyperlinkInputBit=x)
#define GET_TV_HYPERLINK_INPUTBIT()			(ucTvHyperlinkInputBit)
#define CLR_TV_HYPERLINK_INPUTBIT()			(ucTvHyperlinkInputBit=0)
#define SET_TV_HYPERLINK_INPUTBIT_INC()		(ucTvHyperlinkInputBit=ucTvHyperlinkInputBit+1)

#endif

#if 1//(_TV_SWAP_SUPPORT)
#if _TV_SWAP_BY_NUMBER
//source
#define CLR_TV_SWAP_SRC_DATA()		do {	\
										stTvSwapSrcKeyData.Numbers[0]=0;\
										stTvSwapSrcKeyData.Numbers[1]=0;\
										stTvSwapSrcKeyData.Numbers[2]=0;\
									}while (0)

#define SET_TV_SWAP_SRC_LEN(x)		(stTvSwapSrcKeyData.nNumbers=x)
#define GET_TV_SWAP_SRC_LEN()		(stTvSwapSrcKeyData.nNumbers)
#define CLR_TV_SWAP_SRC_LEN()		(stTvSwapSrcKeyData.nNumbers=0)

#define GET_TV_SWAP_SRC_CHANNEL()	(stTvSwapSrcKeyData.Numbers[0]*100+stTvSwapSrcKeyData.Numbers[1]*10+stTvSwapSrcKeyData.Numbers[2])

//destinate
#define CLR_TV_SWAP_DEST_DATA()		do {	\
										stTvSwapDestKeyData.Numbers[0]=0;\
										stTvSwapDestKeyData.Numbers[1]=0;\
										stTvSwapDestKeyData.Numbers[2]=0;\
									}while (0)

#define SET_TV_SWAP_DEST_LEN(x)		(stTvSwapDestKeyData.nNumbers=x)
#define GET_TV_SWAP_DEST_LEN()		(stTvSwapDestKeyData.nNumbers)
#define CLR_TV_SWAP_DEST_LEN()		(stTvSwapDestKeyData.nNumbers=0)

#define GET_TV_SWAP_DEST_CHANNEL()	(stTvSwapDestKeyData.Numbers[0]*100+stTvSwapDestKeyData.Numbers[1]*10+stTvSwapDestKeyData.Numbers[2])
#else	//#if _TV_SWAP_BY_NUMBER
//source
#define CLR_TV_SWAP_SRC_DATA()		do {	ucTvSwapSrcKeyData=stTvInfo.CurChn;}while (0)

#define GET_TV_SWAP_SRC_CHANNEL()		(ucTvSwapSrcKeyData)
#define SET_TV_SWAP_SRC_CHANNEL(x)	do{ucTvSwapSrcKeyData=x;}while (0)
#define SET_TV_SWAP_SRC_LEN(x)			do {}while (0)
#define GET_TV_SWAP_SRC_LEN()			(0)
#define CLR_TV_SWAP_SRC_LEN()			do {}while (0)

//destinate
#define CLR_TV_SWAP_DEST_DATA()		do {	ucTvSwapDestKeyData=stTvInfo.CurChn;}while (0)
#define SET_TV_SWAP_DEST_LEN(x)		do {}while (0)
#define GET_TV_SWAP_DEST_LEN()		(0)
#define CLR_TV_SWAP_DEST_LEN()			do {}while (0)

#define GET_TV_SWAP_DEST_CHANNEL()	(ucTvSwapDestKeyData)
#define SET_TV_SWAP_DEST_CHANNEL(x)	do {ucTvSwapDestKeyData=x;}while (0)

#endif	//#if _TV_SWAP_BY_NUMBER
#endif	//#if (_TV_SWAP_SUPPORT)


#if _BACKLIGHT_SUPPORT
//20070324,backlight
typedef struct
{
	UINT8 backlight[1];
} StructBacklightDataType;

//#define GET_BACKLIGHT()			(stBacklightData.backlight[stSystemData.InputSource])
//#define SET_BACKLIGHT(x)		(stBacklightData.backlight[stSystemData.InputSource]=x)
#define GET_BACKLIGHT()			(stBacklightData.backlight[0])
#define SET_BACKLIGHT(x)		(stBacklightData.backlight[0]=x)
#endif

#if _SHARPNESS_REWRITE
typedef struct
{
	UINT8 PeakingCoringVGA;
	UINT8 PeakingCoringDVI;
	UINT8 PeakingCoringVideo8;
	UINT8 PeakingCoringYPBPR;

} StructPeakingCoringType;
#define GET_PEAKING_CORING()		(*((&stPeakingCoringData.PeakingCoringVGA)+GET_INPUTSOURCE_TYPE()))
#define SET_PEAKING_CORING(x)		(*((&stPeakingCoringData.PeakingCoringVGA)+GET_INPUTSOURCE_TYPE()) = x)
#endif	//#if _SHARPNESS_REWRITE

typedef struct		
{
    UINT8 Hue;
    UINT8 Saturation;
} StructHueSaturationDataType;


#if _TIMER_SLEEP_HINT_SUPPORT
typedef struct 
{
	UINT8 ucTimeHourStart;		//time of power on
	UINT8 ucTimeMinStart;
	UINT8 ucTimeHourStop;		//time of power off
	UINT8 ucTimeMinStop;
	UINT8 ucTimeHourSwitch;		//time of channel switch
	UINT8 ucTimeMinSwitch;
	UINT8 ucTimeSwitchCh;		//channel of switch
	UINT8 PowerOnChannel;
}StructTimeDataType;
#endif	//#if _TIMER_SLEEP_HINT_SUPPORT


//--------------------------------------------------
// Extern Global Struct Variables
//--------------------------------------------------
extern StructModeUserDataType       data   stModeUserData;
extern StructModeUserCenterDataType data   stModeUserCenterData;
extern StructSystemDataType         data   stSystemData;
extern StructICMColor               xdata   stICMColor;
extern StructOsdUserDataType        xdata   stOsdUserData;
extern StructAdcDataType            xdata   stAdcData;
extern StructYPbPrDataType          xdata   stYPbPrData;
extern StructColorProc0DataType     data   stConBriData;
extern StructColorProc1DataType     data   stColorTempData;
extern ModeInformationType          data   stModeInfo;
extern DisplayTableType             data   stDisplayInfo;
extern StructTvDataType		    	xdata   stTvInfo;
extern StructTvChStatus		    	xdata   stTvChStatus;
extern StructAudioDataType 	    	xdata   stAudioData;

extern StructHueSaturationDataType        	xdata   stHueSatData;

#if (_PICT_EFFECT_SUPPORT)
extern StructPictModeType			xdata   stPictMode;
#endif
#if (_CT_INDEPENDENT_SUPPORT)
extern StructColorTempModeType	xdata   stColorTempMode;
#endif
#if _TV_NEW_DATA
extern StructTvPdb xdata	stTvPdb;
#endif

extern UINT8 xdata ucTvFinetuneData;

extern BIT bTvInAutoScanProgess;
extern BIT bTvManualScanEndDir;
extern BYTE xdata ucManualScanOver;
extern UINT16 xdata usTvFinetunePdbBase;
#if _TV_PN_MIX
extern BYTE xdata audioTypeUserSelect;
#endif

extern StructTVHyperLinkKeyDataType xdata stTVHyperKeyData;
#if 1//(_TV_SEL_CH_M3)
extern UINT8 xdata ucTvHyperlinkInputBit;
#endif
#if 1//(_TV_SWAP_SUPPORT)
//swap: input by number
//extern StructTVHyperLinkKeyDataType idata stTvSwapSrcKeyData;
//extern StructTVHyperLinkKeyDataType idata stTvSwapDestKeyData;
//swap: input by up/down
extern UINT8 xdata ucTvSwapSrcKeyData;
extern UINT8 xdata ucTvSwapDestKeyData;
extern BIT bTvSwapExecuteDone;
//extern BIT bTvSwapExecuteDoneUpdatePdb;
extern BIT bTvSwapExecuteDoneUpdateRelativeItem;

#endif


#if _BACKLIGHT_SUPPORT
//20070324,backlight
extern StructBacklightDataType		xdata   stBacklightData;
#endif
#if _TIMER_SLEEP_HINT_SUPPORT
extern StructTimeDataType xdata stTimeData;
#if 1//(_TV_POWERONCH_SUPPORT)
#define GET_TVPOWERONCHANNEL()		(stTimeData.PowerOnChannel)
#define SET_TVPOWERONCHANNEL(x) 		(stTimeData.PowerOnChannel = x)
#endif

#endif	//#if _TIMER_SLEEP_HINT_SUPPORT

//20080418, update start...
#if (_TV_SEL_CH_M3)
extern UINT8 xdata TempTvNumbers;
#endif	//#if (_TV_SEL_CH_M3)
//20080418, update end...

#if _PCB_TYPE==_PCB_PT2660_KTC57924G
extern bit bItemSelected;

#define GET_ITEM_SELECTED()		(bItemSelected)
#define SET_ITEM_SELECTED()		(bItemSelected = _TRUE)
#define CLR_ITEM_SELECTED()		(bItemSelected = _FALSE)

#endif	//#if _PCB_TYPE==_PCB_PT2660_KTC57924G
//20080823 ccy add
#if(_PCB_TYPE == _PCB_TEST)

extern UINT8 bFMSwitch;
extern UINT8 bChinfo;
//extern bit      bTvSnowConfig;20081018 ccy cancel
extern bit bForcePanelOff;
#endif

#if _CGT_DELAY_PC_MUTE
extern bit bIsPcAudioActive;
#define GET_PC_AUDIO_ACTIVE()	(bIsPcAudioActive)
#define SET_PC_AUDIO_ACTIVE()	(bIsPcAudioActive=_TRUE)
#define CLR_PC_AUDIO_ACTIVE()	(bIsPcAudioActive=_FALSE)
#endif	//#if _CGT_DELAY_PC_MUTE


//20080213
extern StructPeakingCoringType	xdata   stPeakingCoringData;


#if _TYPEOF_OSD_KONSTA
extern bit bExtAdjustWin;
#define GET_EXT_ADJUST_WIN()	(bExtAdjustWin)
#define SET_EXT_ADJUST_WIN()	(bExtAdjustWin=1)
#define CLR_EXT_ADJUST_WIN()	(bExtAdjustWin=0)
extern bit bVChipMenuChangeStatus;	//if 1, COsdCoreInitMainWindow() don't open osd
#endif

extern UINT8 xdata ucTimeSwitchCh;
#define GET_TIME_SWITCH_CH()	(ucTimeSwitchCh)
#define SET_TIME_SWITCH_CH(x)	(ucTimeSwitchCh=x)

extern UINT8 xdata ucTvBand;
#define GET_TV_BAND()		(ucTvBand)
#define SET_TV_BAND(x)		(ucTvBand=x)

extern UINT16 xdata usAdcClockResult;
extern struct CTimerEventTable idata TimerEvent[_MAX_EVENT_AMOUNT];

#if _HDCP_WR_BY_RS232
#if _SPI_FLASH_EN25F40
extern UINT8 xdata ucHdcpKeyCnt;
#endif
#endif
