/*===========================================================
 * Copyright (c)      Realtek Semiconductor Corporation, 2005
 * All rights reserved.
 * ========================================================== */

/*==================== File Description ===================== */
/**
 * @file
 * 	This file is osd implement for osd related functions.
 *
 * @author 	$Author: hillwang $
 * @date 	$Date: 2006-08-07 16:36:23 +0800 (?Ÿæ?ä¸€, 07 ?«æ? 2006) $
 * @version $Revision: 1155 $
 */

/**
 * @addtogroup osd
 * @{
 */

#define _OSDFUNCTION_C
/*===================== Module dependency  ================== */
#include "Core\Header\Include.h"

/*======================= Private Types ===================== */
static UINT8 xdata ucOsdTypeFlag = 0x00;
/*======================== Definitions ====================== */
/*
#define  _OSD_VERTICAL_DELAY 0x04
#if(_PANEL_TYPE ==  _LC171W03)
#define  _OSD_HORIZONTAL_DELAY 0x52
#elif (_PANEL_TYPE == _CMO_M190A1_19)
#define  _OSD_HORIZONTAL_DELAY 0xA4
#elif (_PANEL_TYPE ==_CMO_V270B1_27)
#define  _OSD_HORIZONTAL_DELAY 0x52
#else
#define  _OSD_HORIZONTAL_DELAY 0x22
#endif
*/
/*
#define _HSTART_POS		(Panel[ucPanelSelect].DHStartPos&0xff)
#define _VSTART_POS		(Panel[ucPanelSelect].DVStartPos&0xff)
#define  _OSD_VERTICAL_DELAY 	((_DISP_LEN-_TITLEBACKGROUNDWINDOW_LEN)/2 + _VSTART_POS-5)
#define  _OSD_HORIZONTAL_DELAY 	((_DISP_WID  -_TITLEBACKGROUNDWINDOW_WID)/2 + _HSTART_POS-5)
*/
/*========================== Variables ====================== */

/*=================== Local Functions Phototype ==============*/
void	COsdFxCodeWrite(UINT8 *array);

/*=========================== Functions ===================== */
void COsdFxCodeWrite(BYTE *pArray)
{
	BYTE cnt, temp;

	CScalerWrite(_OSD_ADDR_MSB_90, 2, pArray, _AUTOINC);
	pArray += 2;

	cnt = 0;

	while(_TRUE) {
		if(*pArray == _EXT_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			cnt = 0;

			if(*(pArray + 1) > 3)
				return;

			temp = _EXT_ + *(pArray + 1);

			if(*(pArray + 2) == _REPEAT_) {
				CScalerWriteAmount(_OSD_DATA_PORT_92, *(pArray + 3), temp, _NON_AUTOINC);
				pArray += 4;
			}
			else {
				CScalerWrite(_OSD_DATA_PORT_92, 1, &temp, _NON_AUTOINC);
				pArray += 2;
			}
		}
		else if(*pArray == _REPEAT_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);

			CScalerWriteAmount(_OSD_DATA_PORT_92, *(pArray + 1) - 1, *(pArray - 1), _NON_AUTOINC);

			pArray += 2;
			cnt = 0;
		}
		else if(*pArray == _NEXT_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			pArray++;
			cnt = 0;

			if(*(pArray) != _END_) {
				CScalerWrite(_OSD_ADDR_MSB_90, 2, pArray, _AUTOINC);
				pArray += 2;
			}
			else {
				break;
			}
		}
		else if(*(pArray) == _END_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			break;
		}
		else {
			pArray++;
			cnt++;
      	}
	}
}

//Indicate:select
//	_WRITE_BYTE0
//	_WRITE_BYTE1
//	_WRITE_BYTE2
//	_WRITE_BYTEALL
void COsdFxHLine(UINT8 ucRow, UINT8 ucCol, UINT8 ucLength, UINT8 ucValue, UINT8 ucIndicate)
{
	COsdFxCalcStartAddress(ucRow, ucCol, ucIndicate);
	if(ucIndicate == 3)
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength * 3, ucValue, _NON_AUTOINC);
	else
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength, ucValue, _NON_AUTOINC);
}

void COsdColorPalette(BYTE *pColorPaletteArray)
{
	CScalerSetByte(_OVERLAY_LUT_ADDR_6E, 0x80);
	CScalerWrite(_COLOR_LUT_PORT_6F, 48, pColorPaletteArray, _NON_AUTOINC);
	CScalerSetByte(_OVERLAY_LUT_ADDR_6E, 0x00);
}

void COsdInitialize(void)
{
	ucMenuSelect = COsdFxCalcMenuSelSource();
	COsdCoreInitialze();
}

void COsdFxSetMap(void)
{
    CScalerSetByte(_OSD_ADDR_MSB_90, 0x10 | (((tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1) & 0x0f00) >> 8));
    CScalerSetByte(_OSD_ADDR_LSB_91, (BYTE)(tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1));
    CScalerWriteAmount(_OSD_DATA_PORT_92, tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] * tOSD_OSDMAP_INF2[0][1], 0x8c, _NON_AUTOINC);

    CScalerSetByte(_OSD_ADDR_MSB_90, 0x50 | (((tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1) & 0x0f00) >> 8));
    CScalerSetByte(_OSD_ADDR_LSB_91, (BYTE)(tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1));
    CScalerWriteAmount(_OSD_DATA_PORT_92, tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] * tOSD_OSDMAP_INF2[0][1], 0x00, _NON_AUTOINC);

    CScalerSetByte(_OSD_ADDR_MSB_90, 0x90 | (((tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1) & 0x0f00) >> 8));
    CScalerSetByte(_OSD_ADDR_LSB_91, (BYTE)(tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1));
    CScalerWriteAmount(_OSD_DATA_PORT_92, tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] * tOSD_OSDMAP_INF2[0][1], ((_CP_WHITE<<4)|_CP_BLACK), _NON_AUTOINC);

}

void COsdFxMapSetting(UINT8 ucOsdmaptype)
{
	COsdFxDisableOsd();
	// Close all window
	COsdFxCloseAllWindow();
	switch(ucOsdmaptype) {
		case _OSD_MAP0:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand0);
			ucOsdTypeFlag = _OSD_MAP0;
			   pData[2] = 0x08;
			break;
		case _OSD_MAP1:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand1);
			ucOsdTypeFlag = _OSD_MAP1;
			pData[2] = 0x08;
			break;
		case _OSD_MAP2:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand2);
			ucOsdTypeFlag = _OSD_MAP2;
			pData[2] = 0x08;
			break;
		case _OSD_MAP3:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand3);
			ucOsdTypeFlag = _OSD_MAP3;
			pData[2] = 0x08;
			break;
		case _OSD_MAP4:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand4);
			ucOsdTypeFlag = _OSD_MAP4;
			pData[2] = 0x00;//20080918 ccy test
			break;
		case _OSD_MAP5:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand5);
			ucOsdTypeFlag = _OSD_MAP5;
			pData[2] = 0x08;
			break;
		case _OSD_MAP6:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand6);
			ucOsdTypeFlag = _OSD_MAP6;
			pData[2] = 0x08;  //0x0b tommy change ,don't need double scaling osd
			break;
		case _OSD_MAP7:
			//COsdFxSetOsdFrameCtrlCommand();
			COsdFxCodeWrite(tOsdRowCommand7);
			ucOsdTypeFlag = _OSD_MAP7;
			pData[2] = 0x08;
			break;

#if _POWER_ON_LOGO_SUPPROT==_ON
		case _OSD_MAP8:
			COsdFxCodeWrite(tOsdRowCommand8);
			ucOsdTypeFlag = _OSD_MAP8;
			pData[2] = 0x08;
			break;
#endif	

		case _OSD_MAP9:
			COsdFxCodeWrite(tOsdRowCommand9);
			ucOsdTypeFlag = _OSD_MAP9;
			pData[2] = 0x08;
			break;
	#if _TYPEOF_OSD_KONSTA
		case _OSD_MAPA:
			COsdFxCodeWrite(tOsdRowCommandA);
			ucOsdTypeFlag = _OSD_MAPA;
			pData[2] = 0x00;
			break;
		case _OSD_MAPB:
			COsdFxCodeWrite(tOsdRowCommandB);
			ucOsdTypeFlag = _OSD_MAPB;
			pData[2] = 0x00;
			break;
	#endif
		default:
			pData[0] = 0x40;
			pData[1] = 0x03;
			pData[2] = 0x00;
			CScalerWrite(_OSD_ADDR_MSB_90, 3, pData, _AUTOINC);
			return;
	};
	pData[0] = 0x40;
	pData[1] = 0x03;
	pData[2] = (pData[2] & (~(_BIT2|_BIT3))) |(1<<2);// 1: window blend only
	CScalerWrite(_OSD_ADDR_MSB_90, 3, pData, _AUTOINC);

	if (ucOsdTypeFlag==_OSD_MAP0)//main osd menu
	{
		if(GET_OSDSIZEDOUBLE())
			COsdFxSetOsdSizeDouble(1);
		else
			COsdFxSetOsdSizeDouble(2);
	}
	else if (ucOsdTypeFlag==_OSD_MAP7)//factory osd menu
	{
		COsdFxSetWinRefPos(0, 0);
	}
	//20080901 ccy add
	else if (ucOsdTypeFlag == _OSD_MAP9)
	{
		//COsdFxSetWinRefPos(60,((_DISP_LEN - 12*18)/2+100)/2);
		COsdFxSetWinRefPos(_OSD_ADJ_H_DELAY,_OSD_ADJ_V_DELAY);
	}
	else
	{
		COsdFxSetWinRefPos(_OSD_HORIZONTAL_DELAY, _OSD_VERTICAL_DELAY);//20080901 ccy modify
	}
	//COsdDispFirstTimeLoadFont();
	//Clear all
       COsdFxSetOsdFrameCtrlCommand();

	COsdFxSetMap();

}

//-------------------------------
//	OSD font map
//	0x00~0x5F		GLOBAL FONT
//	0x60~0xAF		WESTEUR FONT
//	0xB0~0xCF           CHI_COMMON FONT
//	0xD0~0xDF           Note FONT
//	0xE0~0xF0		CHI_Page FONT
//	0x100~0x117		Slider FONT
//	0x118~			ICON

/*
void COsdDispFirstTimeLoadFont(void)
{
	CScalerLoadHardwareVLCFont(tFONT_GLOBAL, 0x00);
	CScalerLoadHardwareVLCFont(tFONT_OTHER_ICON, _OTHER_FONT_ADDRESS);
	CScalerLoadHardwareVLCFont(tFONT_ICON_COMMON, _ICON_COMMON_CHAR_ADDR);
}
*/
#if _ADD_CHINESE
#if(_CHINESE_FONT_TYPE == _CH_FONT_2X1)
void COsdDispLoadChineseFont(UINT8 ucTmpMain)
{
	BYTE idata ucBank = 0;
	//BYTE ucTmpMain=0;
	
	//ucTmpMain = stLayerStack[ucLayerIndex].ucMainMenu;
	
	switch(GET_INPUTSOURCE_TYPE())
	{
		case _SOURCE_VIDEO8:
			if(GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_TV_PORT)
			{
				switch(ucTmpMain)
				{
					case 0:
						ucBank = 1;
						break;

					case 1:
						ucBank = 2;
						break;

					case 2:
						ucBank = 3;
						break;

					case 3:
						ucBank = 4;
						break;

					case 4:
						ucBank = 5;
						break;

					//#if(_TV_CHANNEL_SWAP_SUPPORT == _TRUE)
					//case _TV_ITEM_CHANNEL_SWAP:
						//ucBank = 10;
						//break;
					//#endif

					default:
						break;
				}
			}
			else
			{
				switch(ucTmpMain)
				{
					case 0:
						ucBank = 1;
						break;

					case 1:
						ucBank = 3;
						break;

					case 2:
						ucBank = 4;
						break;

					case 3:
						ucBank = 5;
						break;

					default:
						break;
				}
			}
			break;

		case _SOURCE_VGA:
		//case _SOURCE_DVI:
			switch(ucTmpMain)
			{
				case 0:
					ucBank = 1;
					break;

				case 1:
					ucBank = 2;//ucBank = 9;
					break;

				case 2:
					ucBank = 3;
					break;

				case 3:
					ucBank = 4;
					break;

				case 4:
					ucBank = 5;
					break;

				default:
					break;
			}
			break;

		case _SOURCE_YPBPR:
			// modified by xyw 071025
                    switch(ucTmpMain)
			{
				case 0:
					ucBank = 1;
					break;

				case 1:
					ucBank = 9;
					break;

				case 2:
					ucBank = 3;
					break;

				case 3:
					ucBank = 4;
					break;

				case 4:
					ucBank = 5;
					break;

				default:
					break;
			}
			break;

		case _SOURCE_DVI:
			switch(ucTmpMain)
			{
				case 0:
					ucBank = 1;
					break;

				case 1:
					ucBank = 3;
					break;

				case 2:
					ucBank = 4;
					break;

				case 3:
					ucBank = 5;
					break;

				default:
					break;
			}
			break;

		default:
			break;
	}
	COsdLoadfontLoadChineseBankFont(ucBank);
} 
#endif
#endif





/*
void COsdLoadFont(UINT8 code *pArray, UINT16 usStart, UINT16 usLength)
{
	usStart = usStart * 9;
	usStarst += _FONTTABLE_STARTADDRESS;
	COsdLoadAbsAddrFont(pArray, usStart, usLength);
}
*/
// Enable/Disable OSD function
void COsdFxEnableOsd(void)
{
	//if (!bVChipMenuChangeStatus)		//dong disable 20081114
	{
		CTimerWaitForEvent(_EVENT_DEN_STOP);
		CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, _BIT0);
	}
	if(ucCurrState == _SLEEP_STATE)
		CTimerCancelTimerEvent(CModePowerSavingEvent);
}


void COsdFxDisableOsd(void)
{
	CTimerWaitForEvent(_EVENT_DEN_STOP);
	CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, 0x00);
//	COsdCoreInitialze();
//	DebugPrintf("Osd Disable %c\n", '!');
	if(ucCurrState == _SLEEP_STATE)
		CTimerReactiveTimerEvent(SEC(_TIMER_POWERSAVING_OSD_DISPEAR), CModePowerSavingEvent);//6 tommy modify
//		CPowerPanelOff();

}

void COsdFxSetOsdFrameCtrlCommand(void)
{
	pData[0] = 0xc0;
	pData[1] = 0x04;
	CScalerWrite(0x90, 2, pData, _AUTOINC);
	pData[0] = ((tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1) & 0x00ff);	//font select base address. note by zhang_dc
	pData[1] = (((tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1) & 0x0f00) >> 4) | (_OSD_FONT_START_POSITION & 0x000f);
	pData[2] = (_OSD_FONT_START_POSITION & 0x0ff0) >> 4;
	CScalerWrite(0x92, 3, pData, _NON_AUTOINC);
}

void COsdFxDrawWindow(WindowStyle * pStyle)
{
	pData[0] = 0x05;
	pData[1] = _AUTOINC;
	pData[2] = _OSD_ADDR_MSB_90;
	pData[3] = 0xC1;
	pData[4] = (pStyle->ucWindowID * 4);
	pData[5] =  0;
//	CRtdWrite();
	CScalerCodeW(pData);

	pData[0] = 15;
	pData[1] = _NON_AUTOINC;
	pData[2] = _OSD_DATA_PORT_92;
	pData[3] = pStyle->ucCtrlRegAddr0[0];
	pData[4] = pStyle->ucCtrlRegAddr0[1];
	pData[5] = pStyle->ucCtrlRegAddr0[2];
	pData[6] = ((pStyle->stPosition.usXStart & 0x03F) << 2);
	pData[7] = (((pStyle->stPosition.usYStart & 0x007) << 5) | ((pStyle->stPosition.usXStart & 0x7C0) >> 6));
	pData[8] = (pStyle->stPosition.usYStart >> 3);
	pData[9] = ((pStyle->stPosition.usXEnd & 0x03F) << 2);
	pData[10] = (((pStyle->stPosition.usYEnd & 0x007) << 5) | ((pStyle->stPosition.usXEnd & 0x7C0) >> 6));
	pData[11] = (pStyle->stPosition.usYEnd >> 3);
	pData[12] = pStyle->ucCtrlRegAddr2[0];
	pData[13] = pStyle->ucCtrlRegAddr2[1];
	pData[14] = pStyle->ucCtrlRegAddr2[2];
	pData[15] = 0;
	CScalerCodeW(pData);
}

void COsdFxCloseWindow(UINT8 ucWinNumber)
{
	pData[0] = 0x81;
	pData[1] = (UINT8)(ucWinNumber * 4 + 3);
	pData[2] = 0x00;
	CScalerWrite(_OSD_ADDR_MSB_90, 3, pData, _AUTOINC);
}

void COsdFxCloseAllWindow(void)
{
	UINT8 cnt;

	for(cnt = 0; cnt < 8; cnt++) {
		pData[0] = 0x81;
		pData[1] = (UINT8)(cnt * 4 + 3);
		pData[2] = 0x00;
		CScalerWrite(_OSD_ADDR_MSB_90, 3, pData, _AUTOINC);
	}
}
/*
void COsdFxMoveWindow(UINT8 ucWinNumber, ItemPosition* stPos)
{
	pData[0] = 0x05;
	pData[1] = _AUTOINC;
	pData[2] = _OSD_ADDR_MSB_90;
	pData[3] = 0xC1;
	pData[4] = (ucWinNumber * 4) + 1;
	pData[5] = 0;
	CScalerCodeW(pData);

	pData[0] = 9;
	pData[1] = _NON_AUTOINC;
	pData[2] = _OSD_DATA_PORT_92;
	pData[3] = ((stPos->usXStart & 0x03F) << 2);
	pData[4] = (((stPos->usYStart & 0x007) << 5) | ((stPos->usXStart & 0x7C0) >> 6));
	pData[5] = (stPos->usYStart >> 3);
	pData[6] = ((stPos->usXEnd & 0x03F) << 2);
	pData[7] = (((stPos->usYEnd & 0x007) << 5) | ((stPos->usXEnd & 0x7C0) >> 6));
	pData[8] = (stPos->usYEnd >> 3);
	pData[9] = 0;
	CScalerCodeW(pData);
}
*/
void COsdFxMoveWindow(WindowStyle * pStyle,ItemPosition* stPos)//modified by xyw 080604
{
	pData[0] = 0x05;
	pData[1] = _AUTOINC;
	pData[2] = _OSD_ADDR_MSB_90;
	pData[3] = 0xC1;
	pData[4] = (pStyle->ucWindowID * 4);
	pData[5] =  0;
//	CRtdWrite();
	CScalerCodeW(pData);

	pData[0] = 15;
	pData[1] = _NON_AUTOINC;
	pData[2] = _OSD_DATA_PORT_92;
	pData[3] = pStyle->ucCtrlRegAddr0[0];
	pData[4] = pStyle->ucCtrlRegAddr0[1];
	pData[5] = pStyle->ucCtrlRegAddr0[2];
	pData[6] = ((stPos->usXStart & 0x03F) << 2);
	pData[7] = (((stPos->usYStart & 0x007) << 5) | ((stPos->usXStart & 0x7C0) >> 6));
	pData[8] = (stPos->usYStart >> 3);
	pData[9] = ((stPos->usXEnd & 0x03F) << 2);
	pData[10] = (((stPos->usYEnd & 0x007) << 5) | ((stPos->usXEnd & 0x7C0) >> 6));
	pData[11] = (stPos->usYEnd >> 3);
	pData[12] = pStyle->ucCtrlRegAddr2[0];
	pData[13] = pStyle->ucCtrlRegAddr2[1];
	pData[14] = pStyle->ucCtrlRegAddr2[2];
	pData[15] = 0;
	CScalerCodeW(pData);


}

void COsdFxSetWinRefPos(UINT16 uiXPos, UINT16 uiYPos)
{
	UINT16 xdata usOsdActHeight, usOsdActWidth;

	uiXPos+=_HSTART_POS;
	uiYPos+=_VSTART_POS;

	usOsdActHeight = uiYPos / 4;
	usOsdActWidth = uiXPos /4;

	CScalerSetBit(_OSD_SCRAMBLE_93, 0xf8, 0x02);

	pData[0] = 0xc0;//(pData[0] == 0x00) ? 0xc0 : 0xe0;
	pData[1] = 0x00;
	CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

	pData[0] = usOsdActHeight >> 1;
	pData[1] = (UINT8) (usOsdActWidth >> 2);
	pData[2] = ((UINT8) (usOsdActWidth & 0x0003) << 6) |	((usOsdActHeight & 0x01) << 5) | 0x01;
	CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);

	CTimerWaitForEvent(_EVENT_DEN_STOP);
	CTimerWaitForEvent(_EVENT_DEN_STOP);
//	CScalerSetBit(_OSD_SCRAMBLE_93, 0xf8, 0x05);
}

void COsdFxLoadText(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray)
{
	UINT8 temp, ucBKCount = 0;
	UINT8* pPreArray;
	if(ucBKLength)
		ucBKCount = COsdFxLoadBlankCmd(ucRow, ucCol, ucBKLength);

	temp = 0;
	pPreArray = pArray;
	while (_TRUE) {
		if (*pArray == _END_) {
			if (temp == ucSelect) {
				pArray = pPreArray;
				break;
			}
			else {
				temp++;
				if(*(pArray + 1)  != _THE_SAME_)
					pPreArray = pArray + 1;
			}
		}
		else if (*pArray ==_THE_SAME_) {
			if (temp == ucSelect) {
				pArray = pPreArray;
				break;
			} else {
				temp++;
				if(*(pArray + 1)  != _THE_SAME_)
					pPreArray = pArray + 1;
			}
		}

		pArray++;
	}

	COsdFxCalcStartAddress(ucRow, ucCol + ucBKCount, 0x03);

	while(*pArray != _END_) {

		temp = *pArray;
		pArray++;
				pData[0] = (8<<4|_FONT_WID);//tOSD_CHARWIDTH_TABLE[cnt][1];
				pData[1] = temp;
				pData[2] = ((ucForegroundColor & 0x0f) << 4) | (ucBackgroundColor & 0x0f);
				CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
	}
}

#if 0
void COsdFxLoadTextNonCode(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray)
{
	UINT8 cnt, temp, ucBKCount = 0;
	UINT8* pPreArray;
	if(ucBKLength)
		ucBKCount = COsdFxLoadBlankCmd(ucRow, ucCol, ucBKLength);

	temp = 0;
	pPreArray = pArray;
	while (_TRUE) {
		if (*pArray == _END_) {
			if (temp == ucSelect) {
				pArray = pPreArray;
				break;
			} else {
				temp++;
				pPreArray = pArray + 1;
			}
		}
		pArray++;
	}

	COsdFxCalcStartAddress(ucRow, ucCol + ucBKCount, 0x03);

	while(*pArray != _END_) {

		temp = *pArray;
		pArray++;

		cnt = 0;
		while(_TRUE) {
			if(( temp == tOSD_CHARWIDTH_TABLE[cnt][0]) && (tOSD_CHARWIDTH_TABLE[cnt][1] != _END_)) {
				pData[0] = tOSD_CHARWIDTH_TABLE[cnt][1];
				pData[1] = temp;
				pData[2] = ((ucForegroundColor & 0x0f) << 4) | (ucBackgroundColor & 0x0f);
				CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
				break;
			} else {
				if((tOSD_CHARWIDTH_TABLE[cnt][0] == _END_) && (tOSD_CHARWIDTH_TABLE[cnt][1] == _END_)) {
					pData[0] = 0x8c;
					pData[1] = temp;
					pData[2] = ((ucForegroundColor & 0x0f) << 4) | (ucBackgroundColor & 0x0f);
					CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
					break;
				}
			}
			cnt++;
		}
	}
}
#endif
#if 0
void COsdFxLoadIcon(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 *pArray)
{
	UINT8 cnt, temp,ucBKCount = 0;

	if(ucBKLength)
		ucBKCount = COsdFxLoadBlankCmd(ucRow, ucCol, ucBKLength);

	cnt = 0;
	COsdFxCalcStartAddress(ucRow, ucCol + ucBKCount, _WRITE_BYTE1);

	while(_TRUE) {
		if(*pArray == _EXT_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			cnt = 0;

			if(*(pArray + 1) > 3)
				return;

			temp = _EXT_ + *(pArray + 1);

			if(*(pArray + 2) == _REPEAT_) {
				CScalerWriteAmount(_OSD_DATA_PORT_92, *(pArray + 3), temp, _NON_AUTOINC);
				pArray += 4;
			} else {
				CScalerWrite(_OSD_DATA_PORT_92, 1, &temp, _NON_AUTOINC);
				pArray += 2;
			}
		} else if(*pArray == _REPEAT_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			CScalerWriteAmount(_OSD_DATA_PORT_92, *(pArray + 1) - 1, *(pArray - 1), _NON_AUTOINC);

			pArray += 2;
			cnt = 0;
		} else if(*pArray == _NEXT_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			pArray++;
			cnt = 0;

			if(*(pArray + 1) != _END_)
				COsdFxCalcStartAddress(ucRow + 1, ucCol + ucBKCount, 1);
			else
				break;

		} else if(*(pArray) == _END_) {
			CScalerWrite(_OSD_DATA_PORT_92, cnt, pArray - cnt, _NON_AUTOINC);
			break;
		} else {
			pArray++;
			cnt++;
		}
	}
}
#endif

// ucType : 0 ->  1bit, 1 - > 2bit, 2 -> 4bit
// pColor : Specify color list array
//
//
void COsdFxLoadIcon(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucType, UINT8 *pColor, UINT8 *pArray)
{
	UINT8 ucBKCount = 0, ucCnt;

	if(ucType == 1) {// For 2bit
		if(pColor != _NULL_) {
			pData[3] = 0xa0 | ((*(pColor) & 0x08) << 3) | ((*(pColor + 1) & 0x08) << 1) | ((*(pColor + 3) & 0x07) << 1) | ((*(pColor) & 0x04) >> 2);
			pData[5] = ((*(pColor) & 0x03) << 6) | ((*(pColor + 2) & 0x07) << 3) | (*(pColor  + 1) & 0x07);
		} else {
			pData[3] = 0xa6;
			pData[5] = 0x11;
		}
	}
	else if(ucType == 2) {// For 4bit
		pData[3] = 0x90;
		pData[5] = 0x00;
	}
	else { // For 1bit
		pData[3] = 0x8c;
		if(pColor != _NULL_)
			pData[5] = (*(pColor) & 0x0f) | ((*(pColor + 1) & 0x0f) << 4);
		else
			pData[5] = 0x10;
	}

	//if(ucBKLength)
	//	ucBKCount = COsdFxLoadBlankCmd(ucRow, ucCol, ucBKLength);

	COsdFxCalcStartAddress(ucRow, ucCol + ucBKCount, _WRITE_BYTEALL);
	while(*pArray != _END_) {

		pData[4] = *(pArray);
		switch (*(pArray)) {
			case _EXT_:
				break;
			case _REPEAT_:
				pArray++;
				for(ucCnt = 1; ucCnt < *pArray; ucCnt++)
					CScalerWrite(_OSD_DATA_PORT_92, 3, &(pData[3]), _NON_AUTOINC);
				pArray++;
				break;
			case _NEXT_:
				pArray++;
				if(*pArray != _END_) {
					ucRow++;
					ucBKCount = 0;
					if(ucBKLength)
						ucBKCount = COsdFxLoadBlankCmd(ucRow, ucCol, ucBKLength);

					COsdFxCalcStartAddress(ucRow, ucCol + ucBKCount, _WRITE_BYTEALL);
				}
				break;
			default:
				CScalerWrite(_OSD_DATA_PORT_92, 3, &(pData[3]), _NON_AUTOINC);
				pArray++;
		}
	}
}

UINT8 COsdFxLoadBlankCmd(UINT8 ucRow, UINT8 ucCol, UINT16 ucLength)
{
	UINT8 cnt, quotient;
	UINT16 xdata remainder;
	UINT8  ucCount;

	if(ucLength <  4)
		if(ucLength)
			ucLength = 4;
		else
			return 0;

	ucCount = COsdFxCalBlankCmdCount(ucLength);
	remainder = ucLength;
	quotient = 0;
	while(remainder >= ucCount) {
		remainder -= ucCount;
		quotient++;
	}

	COsdFxCalcStartAddress(ucRow, ucCol, 0x03);

	for(cnt = 0; cnt < ucCount; cnt++) {
		pData[0] = 0x00;
		if(quotient + remainder > 255) {
			pData[1] = 255;
			remainder = quotient + remainder - 255;
		}
		else {
			pData[1] = quotient + remainder;
			remainder = 0;
		}
		pData[2] = 0x00;
		CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
	}

	return ucCount;
}

void COsdFxClearText(UINT8 ucRow, UINT8 ucCol, UINT8 ucHeight, UINT8 ucWidth)
{
	UINT8 temp;

	for (temp = 0 ; temp < ucHeight ; temp++) {
		COsdFxHLine(ucRow + temp, ucCol, ucWidth, 0x8c, _WRITE_BYTE0);
		COsdFxHLine(ucRow + temp, ucCol, ucWidth, 0x00, _WRITE_BYTE1);		
		COsdFxHLine(ucRow + temp, ucCol, ucWidth, 0x00, _WRITE_BYTE2);
	}
}

void COsdFxChange1bitColor(UINT8 ucRow, UINT8 ucCol, UINT8 ucSizeH, UINT8 ucSizeW, UINT8 ucForegroundColor, UINT8 ucBackgroundColor)
{
	UINT8 ucCnt, temp;

	temp = ((ucForegroundColor & 0x0f) << 4) | (ucBackgroundColor & 0x0f);
	for(ucCnt = 0; ucCnt < ucSizeH; ucCnt++) {
		COsdFxCalcStartAddress(ucRow + ucCnt, ucCol, _WRITE_BYTE2);
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
	}
}
#if 0
void COsdFxChange2bitColor(UINT8 ucRow, UINT8 ucCol, UINT8 ucSizeH, UINT8 ucSizeW, UINT8 ucColor0, UINT8 ucColor1, UINT8 ucColor2, UINT8 ucColor3)
{
	UINT8 cntY, temp;

	temp = 0xa0 | ((ucColor3 & 0x0f) << 1) | ((ucColor0 & 0x04) >> 2);
	for(cntY = 0; cntY < ucSizeH; cntY++) {
		COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTE0);
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
	}
	temp = ((ucColor0 & 0x03) << 6) | ((ucColor2 & 0x07) << 3) | (ucColor1 & 0x07);
	for(cntY = 0; cntY < ucSizeH; cntY++) {
		COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTE2);
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
	}
}
#endif


/*
void COsdFxChange4bitColor(UINT8 ucRow, UINT8 ucCol, UINT8 ucSizeH, UINT8 ucSizeW)
{


	UINT8 cntY, cntx;
	pData[0] = 0x90;
	pData[1] = 0x00;
	pData[2] = 0x00;
	for(cntY = 0; cntY < ucSizeH; cntY++) {
		COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTEALL);
		/CScalerSendAddr(_OSD_DATA_PORT_92, _WRITE, _NON_AUTOINC);
		//CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
		for(cntx = 0; cntx < ucSizeW; cntx++) {
	            CScalerSendByte(pData[0]);
	            CScalerSendByte(pData[1]);
	            CScalerSendByte(pData[2]);
		}
		CScalerSendWriteStop();
	}


	
}
*/
#if(!_TYPEOF_OSD_KONSTA)
void COsdFxChange4bitLUTColor(BYTE ucRow, BYTE ucCol, BYTE ucSizeW, BYTE ucSizeH, BYTE ucColor0)
{
    BYTE ucCntY, ucTemp;

    ucTemp = 0x90 | (ucColor0 & 0x0f);

    for(ucCntY=0;ucCntY<ucSizeH;ucCntY++)
    {
        COsdFxCalcStartAddress(ucRow + ucCntY, ucCol, _WRITE_BYTE0);

        CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, ucTemp, _NON_AUTOINC);
    }

    ucTemp = 0x00;

    for(ucCntY=0;ucCntY<ucSizeH;ucCntY++)
    {
        COsdFxCalcStartAddress(ucRow + ucCntY, ucCol, _WRITE_BYTE2);

        CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, ucTemp, _NON_AUTOINC);
    }
}

#endif

// Calculate
void COsdFxCalcStartAddress(UINT8 ucRow, UINT8 ucCol, UINT8 ucIndicate)
{
	WORD startaddress;
	BYTE idata temp;

	startaddress = tOSD_OSDMAP_INF2[ucOsdTypeFlag][0] + 1;

	for(temp=0;temp<ucRow;temp++)
	{
		startaddress += tOSD_OSDMAP_INF2[ucOsdTypeFlag][1];
	}

    	CScalerSetByte(_OSD_ADDR_MSB_90, (BYTE)(((startaddress + ucCol)  & 0x0fff) >> 8 ) | (((ucIndicate << 2) + 1) << 4));
    	CScalerSetByte(_OSD_ADDR_LSB_91, (BYTE)((startaddress + ucCol) & 0x00ff));
}

UINT8 COsdFxCalBlankCmdCount(UINT16 ucBKLength)
{
	UINT16 xdata remainder;
	UINT8 ucBKCount = 0;

	if(ucBKLength > 4) {
		remainder = ucBKLength;
		ucBKCount = 1;
		while(remainder > 255) {
			remainder -= 255;
			ucBKCount++;
		}

		return ucBKCount;
	}
	else if(ucBKLength)
		return 1;
	else
		return 0;
}

UINT8 COsdFxCalTextCount(UINT8 ucSelect, UINT8 *pArray)
{
	UINT8 cnt, temp;
	UINT8 prevcnt = 0;

	cnt = 0;
	temp = 0;
	while (_TRUE) {
		if (*pArray == _END_) {
			if (temp == ucSelect) {
				return cnt;
			}
			else {
				prevcnt = cnt;
				cnt = 0;
				temp++;
			}
		}
		else if (*pArray ==_THE_SAME_) {
			if (temp == ucSelect) {
				return prevcnt;
			} else {
				cnt = 0;
				temp++;
			}
		}
		else
			cnt++;

		pArray++;
	}
}

UINT16 COsdFxCalTextWidth(UINT8 ucSelect, UINT8 *pArray)
{
	UINT8 temp = 0;
	UINT16 xdata length = 0;
	UINT16 prevlength = 0;

	while (_TRUE) {
		if (*pArray == _END_) {
			if (temp == ucSelect) {
				return length;
			}
			else {
				prevlength = length;
				length = 0;
				temp++;
			}
		}
		else if (*pArray ==_THE_SAME_) {
			if (temp == ucSelect)   {
				return prevlength;
			} else {
				length = 0;
				temp++;
			}
		}
		else
			length += COsdFxFontWidthLength(*pArray);
		pArray++;
	}
}

#if 0
UINT16 COsdFxCalTextWidthNonCode(UINT8 ucSelect, UINT8 /*code*/ *pArray)
{
	UINT8 temp = 0;
	UINT16 xdata length = 0;
	UINT16 prevlength = 0;

	while (_TRUE) {
		if (*pArray == _END_) {
			if (temp == ucSelect) {
				return length;
			} else {
				prevlength = length;
				length = 0;
				temp++;
			}
		} else
			length += COsdFxFontWidthLength(*pArray);
		pArray++;
	}
}
#endif

UINT8 COsdFxFontWidthLength(UINT8 ucFont)
{

	UINT8 cnt = 0;

	while(tOSD_CHARWIDTH_TABLE[cnt][0] != _END_) {
		if(tOSD_CHARWIDTH_TABLE[cnt][0] == ucFont)
			return 0x0f & (8<<4|_FONT_WID);//tOSD_CHARWIDTH_TABLE[cnt][1];
		cnt++;
	}
	return 12;
}





//-------------------------SVA-------------------------


/*
void COsdFxHLine2(UINT8 ucRow, UINT8 ucCol, UINT8 ucLength, UINT8 ucValue, UINT8 ucIndicate)
{
	COsdFxCalcStartAddress(ucRow, ucCol, ucIndicate);

	if(ucIndicate == 3)
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength * 3, ucValue, _NON_AUTOINC);
	else
		CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength, ucValue, _NON_AUTOINC);
}
*/
//--------------------------------------------------



//20070513
#if _TYPEOF_OSD_KONSTA==0

UINT8 code tOsdSliderColor[] =
{
	_TITLEBACKGROUNDWINDOW_COLOR,_CP_BLACK, _CP_YELLOW,_CP_BLACK
};
void COsdFx2bitSlider(UINT8 ucRow, UINT8 ucCol, UINT8 ucLength, UINT8 ucValue, UINT8 ucMax, UINT8 ucMin)
{
	UINT8 idata temp, i;
	COsdColorPalette(Palette_7_4bit);
	//CScalerLoadFont(tFONT_SLIDERBAR, 0x100, 0x0C, _COMPRESS_FONT);
	SET_FIRST_LOADFONT();
	//20070514
	///COsdFxSetWinRefPos(Panel[_PANEL_TYPE].DHStartPos+(_DISP_WID-12*_SLIDERWIN_WID)/2, _SLIDER_WIDOW_MAP_VSTART);
	///COsdFxDrawWindow(&tOsdAudioMenu_BackgroundWindow);
	///COsdFxDrawWindow(&tOsdAudioMenu_ForegroundWindow);

	pData[0] = 0xa0 | ((*(tOsdSliderColor) & 0x08) << 3) | ((*(tOsdSliderColor + 1) & 0x08) << 1) |((*(tOsdSliderColor) & 0x04) >> 2);
	///pData[0] = 0xa0|((tOsdSliderColor[3]&0x07)<<1)|((tOsdSliderColor[0]&0x04)>>2);
	pData[2] = ((*(tOsdSliderColor) & 0x03) << 6) | ((*(tOsdSliderColor + 2) & 0x07) << 3) | (*(tOsdSliderColor  + 1) & 0x07);
	///pData[2] =((tOsdSliderColor[0]&0x03)<<6)|((tOsdSliderColor[2]&0x07)<<3)|(tOsdSliderColor[1]&0x07);
	// left bar
	COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTEALL);

	pData[1] = _barL;
	if (ucValue == ucMin)
		pData[2] =((tOsdSliderColor[0]&0x03)<<6)|((tOsdSliderColor[1]&0x07)<<3)|(tOsdSliderColor[1]&0x07);
	CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);

	// right bar
	pData[2] = ((*(tOsdSliderColor) & 0x03) << 6) | ((*(tOsdSliderColor + 1) & 0x07) << 3) | (*(tOsdSliderColor  + 1) & 0x07);
	COsdFxCalcStartAddress(ucRow, ucCol+ucLength-1, _WRITE_BYTEALL);
	pData[1] = _barR;
	if (ucValue == ucMax)
		pData[2] = ((*(tOsdSliderColor) & 0x03) << 6) | ((*(tOsdSliderColor + 2) & 0x07) << 3) | (*(tOsdSliderColor  + 1) & 0x07);
		///pData[2] =((tOsdSliderColor[0]&0x03)<<6)|((tOsdSliderColor[2]&0x07)<<3)|(tOsdSliderColor[1]&0x07);
	CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);

	// 
	pData[2] = ((*(tOsdSliderColor) & 0x03) << 6) | ((*(tOsdSliderColor + 2) & 0x07) << 3) | (*(tOsdSliderColor  + 1) & 0x07);
	COsdFxCalcStartAddress(ucRow, ucCol+1, _WRITE_BYTEALL);
	temp = ((WORD)((ucValue-ucMin)* (ucLength - 2))) / (ucMax -ucMin);//20070525 for Slider displayer error when value equal to min
	//DebugPrintf("\n temp == %x",temp);
	//DebugPrintf("\n ucLength == %x",ucLength);

	for(i=0; i<ucLength-2; i++)
	{
		if( (i==temp)&&(ucValue != ucMin))
			pData[1] = _bar0 +  ((((WORD)((ucValue-ucMin) * (ucLength - 2))) * 3) / ((ucMax -ucMin)) % 3);//20070525 for Slider displayer error when value equal to min
		else if (i < temp)
		{
			pData[1] = _bar3;
			pData[2] = ((*(tOsdSliderColor) & 0x03) << 6) | ((*(tOsdSliderColor + 2) & 0x07) << 3) | (*(tOsdSliderColor  + 1) & 0x07);
			///pData[2] =((tOsdSliderColor[0]&0x03)<<6)|((tOsdSliderColor[2]&0x07)<<3)|(tOsdSliderColor[1]&0x07);
			
		}
		else
		{
			pData[1] = _bar3;
			pData[2] = ((*(tOsdSliderColor) & 0x03) << 6) | ((*(tOsdSliderColor + 1) & 0x07) << 3) | (*(tOsdSliderColor  + 1) & 0x07);
			///pData[2] =((tOsdSliderColor[0]&0x03)<<6)|((tOsdSliderColor[1]&0x07)<<3)|(tOsdSliderColor[1]&0x07);
			//DebugPrintf("\n pData[2] == %x",pData[2]);
		}
		CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
	}

}

#endif
// ¥\¯à¡G¨Ì·Ó ucPar ³]©w±N¼Æ¦rÅã¥Ü¦b OSD ¤W
// ¿é¤J¡G1. ucRow, ucCol --> ©Ò©w®y¼Ð¦ì¸m
//		 2. ucValue --> ±ýÅã¥Üªº¼Æ¦r
//		 3. ucPar --> Show_Number ¥\¯à³]©w
// ¿é¥X¡G¦^¶ÇÁ`¦@Åã¥Ü¤F¦h¤Ö¦ì
void COsdFxShowNumber(UINT8 ucRow, UINT8 ucCol, UINT32 ucValue, UINT8 ucPar, UINT8 ucColor)
{
	// ucPar
	// bit 0 (Align left or right)	[ 0: Align left		1:	Align right			]
	// bit 1 (Assign show number)	[ 0: Disable 		1:	Enable (±j¨îÅã¥Ü)	]
	// bit 2 (Assign show %)		[ 0: Disable 		1:	Enable Åã¥Ü¤p¼Æ2¦ì	]
	// bit 4 ~ 6 (Show numbers)		[ 000: Åã¥Ü 1 ¦ì¡A¥H¦¹Ãþ±À					]
	UINT8 temp[6], index, i;

	if(ucValue > 99999)
		return;
	//disable czl 071012
	//COsdFxClearText(ucRow, ucCol, 1, (ucPar & (_BIT4 |_BIT5|_BIT6)) >> 4);
	if(ucValue == 0 && !(ucPar&0x04)) {
		COsdFxHLine(ucRow, ucCol, 1, _0_, _WRITE_BYTE1);
		COsdFxChange1bitColor(ucRow, ucCol, 1, 1, ucColor, _CP_BLACK);
		return;
	}

	for(i = 0; i < 6; i++) {
		if((i == 2) && (ucPar&0x04))
			temp[i] = 0x0E;
		else {
			temp[i] = _0_ + (ucValue%10);
			ucValue /= 10;
		}
		if(ucValue == 0) {
			if((ucPar & 0x04) == 0)
				break;
			else if(i > 2)
				break;
		}
	}
	index = i;

//	if((BIT)(ucPar & 0x01))		// Align Right
//		COsdFxHLine(ucRow, ucCol, ((ucPar & 0x70)>> 4)+1, 0x00, _WRITE_BYTE1);
//	else
//		COsdFxHLine(ucRow, ucCol - ((UINT8)(ucPar & 0x70) >> 4) + 1, (ucPar & 0x70) >> 4, 0x00, _WRITE_BYTE1);

	for(i = 0; i <= index; i++) {
		if((BIT)(ucPar & 0x01)) {		// Align Right
			COsdFxHLine(ucRow, ucCol+ i, 1, temp[index-i], _WRITE_BYTE1);			
			COsdFxChange1bitColor(ucRow, ucCol+i, 1, 1, ucColor, _CP_BLACK);
		}
		else {
			COsdFxHLine(ucRow, ucCol-index+i, 1, temp[index-i], _WRITE_BYTE1);			
			COsdFxChange1bitColor(ucRow, ucCol-index+i, 1, 1, ucColor, _CP_BLACK);
		}
	}
}

#if _TYPEOF_OSD_KONSTA==0
void COsdFxFullSlider1(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, ItemSlider* pItemSlider, UINT8 ucMin, UINT8 ucMax, UINT8 ucMid)
{
	UINT8 ucBKCount;
	UINT8 usSliderMid;
	UINT16 xdata usRes;

	if(ucBKLength)
		ucBKCount = COsdFxLoadBlankCmd(ucRow, ucCol, ucBKLength);

	if(pItemSlider->pGetFunction == _NULL_) {
		COsdFxShowNumber(ucRow, ucCol + ucBKCount, 0, 0x23, pItemSlider->ucNumColor);
		//COsdFxSlider(ucRow, ucCol + ucBKCount + 3, pItemSlider->ucLength - 3, 0, pItemSlider->ucMax, pItemSlider->ucMin, pItemSlider->ucColor);
		COsdFx2bitSlider(ucRow, ucCol + ucBKCount + 3, pItemSlider->ucLength - 3, 0, pItemSlider->ucMax, pItemSlider->ucMin);
	}
	else {
		usSliderMid = (pItemSlider->ucMax - pItemSlider->ucMin) / 2;
		if(pItemSlider->pGetFunction() <= ucMid)
			usRes =  (((WORD)((pItemSlider->pGetFunction() - ucMin) * (usSliderMid - pItemSlider->ucMin)) / (ucMid - ucMin)) + pItemSlider->ucMin);
		else
			usRes = (((WORD)((pItemSlider->pGetFunction() - ucMid) * (pItemSlider->ucMax - usSliderMid)) / (ucMax - ucMid)) + usSliderMid);

		//DebugPrintf("usRes = %x\n", usRes);
		COsdFxClearText(ucRow, ucCol + ucBKCount, 1, 3);
		COsdFxShowNumber(ucRow, ucCol + ucBKCount, usRes, 0x23, pItemSlider->ucNumColor);
		//COsdFxSlider(ucRow, ucCol + ucBKCount + 3, pItemSlider->ucLength - 3, usRes, pItemSlider->ucMax, pItemSlider->ucMin, pItemSlider->ucColor);
		COsdFx2bitSlider(ucRow, ucCol + ucBKCount + 3, pItemSlider->ucLength - 3, usRes, pItemSlider->ucMax, pItemSlider->ucMin);
	}
}
#endif
//---------------------SVA----------------------------------------------
#if 1  //dong enable 20080923
void COsdFxShowNumber2(BYTE ucRow, BYTE ucCol, WORD usValue, BYTE ucPar, BYTE ucZeroOn)
{
	//BYTE temp0, temp1, temp2;
	BYTE temp[4];
	BYTE i;

	if(ucPar > _SHOW_4)
	{
		return;
	}
	
	temp[3] = usValue /1000;			//x1000
	temp[2] = (usValue /100) % 10;		//x100
	temp[1] = (usValue / 10) % 10;		//x10
	temp[0] = usValue % 10;			//x1

	temp[0] = temp[0] + _0_;
	if(ucZeroOn == _OFF)
	{
		temp[1] = (temp[1] ||temp[2]) ? temp[1]+_0_ : 0x00;
		temp[2] = (temp[2] ||temp[3]) ? temp[2]+_0_ : 0x00;
		temp[3] = (temp[3]) ? temp[3]+_0_ : 0x00;
	}
	else
	{
		temp[1] += _0_;
		temp[2] += _0_;
		temp[3] += _0_;
	}
	
	switch(ucPar)
	{
		case _SHOW_1:
			i = 1;
			pData[0] = temp[0];	// x1
			break;

		case _SHOW_2:
			i = 2;
			pData[0] = temp[1];	// x10
			pData[1] = temp[0];	// x1
			break;

		case _SHOW_3:
			i = 3;
			pData[0] = temp[2];	// x100
			pData[1] = temp[1];	// x10
			pData[2] = temp[0];	// x1
			break;

		case _SHOW_4:
			i = 4;
			pData[0] = temp[3];	// x1000
			pData[1] = temp[2];	// x100
			pData[2] = temp[1];	// x10
			pData[3] = temp[0];	// x1
			break;
	}

	COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
	
    	CScalerWrite(_OSD_DATA_PORT_92, LENGTH(i), pData, _NON_AUTOINC);
}
#endif
/*
void COsdFxSlider(BYTE ucRow, BYTE ucCol, BYTE ucLength, WORD usValue, WORD usMax, WORD usMin)
{
    	register BYTE cnt;
	register BYTE i;
	register BYTE temp;

    	usValue  = usValue - usMin;
    	pData[0] = _L_BAR;
    	pData[ucLength - 1] = _R_BAR;

    	cnt =((WORD)(usValue * (ucLength - 2))) / (usMax - usMin);

    	if(cnt < (ucLength - 2))
    	{
		temp = (((((WORD)(usValue * (ucLength - 2))) * _SLIDER_RESOLUTION) / (usMax - usMin)) % _SLIDER_RESOLUTION);
		switch(temp)
		{
			case 0:
				if(cnt != 0)
				{
					pData[cnt] = _8_BAR;//,0xB9;
					pData[cnt+1] = _EMPTY_BAR;
				}
				else
				{
					pData[0] = _L_BAR;
					pData[1] = _5_BAR;//0xB6;
				}
				break;
				
			case 1:
				if(cnt != 0)
				{
					pData[cnt] = _1_BAR;//0xB2;
					pData[cnt+1] = _2_BAR;//0xB3;
				}
				else
				{
					pData[0] = _L_BAR;
					pData[1] = _5_BAR;//0xB6;
				}
				break;

			case 2:
				if(cnt != 0)
				{
					pData[cnt] = _3_BAR;//0xB4;
					pData[cnt+1] = _4_BAR;//0xB5;
				}
				else
				{
					pData[0] = _L_BAR;
					pData[1] = _6_BAR;//0xB7;
				}
				break;

			case 3:
				if(cnt != 0)
				{
					pData[cnt] = _EMPTY_BAR;
					pData[cnt+1] = _5_BAR;//0xB6;
				}
				else
				{
					pData[0] = _L_BAR;
					pData[1] = _7_BAR;//0xB8;
				}
				break;

			case 4:
				if(cnt != 0)
				{
					pData[cnt] = _EMPTY_BAR;
					pData[cnt+1] = _6_BAR;//0xB7;
				}
				else
				{
					pData[0] = _L_BAR;
					pData[1] = _8_BAR;//0xB9;
				}
				break;

			case 5:
				if(cnt != 0)
				{
					pData[cnt] = _EMPTY_BAR;
					pData[cnt+1] = _7_BAR;//0xB8;
				}
				else
				{
					pData[0] = _L_BAR;
					pData[1] = _8_BAR;//0xB9;
				}
				break;
		}
		
	}
	

	for(i=1; i<(ucLength-1); i++)
	{
		if((i == cnt+1) || (i == cnt))
		{
			continue;
		}
		else
		{
			pData[i] = _EMPTY_BAR;
		}
	}

	if(cnt == (ucLength-2))
	{
		pData[cnt] = _8_BAR;//0xB9;
	}
		
    	COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
    	CScalerWrite(_OSD_DATA_PORT_92, ucLength, pData, _NON_AUTOINC);
}
*/


void COsdFxSlider(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE ucValue, BYTE usMax, BYTE usMin)
{

#define _SLIDER_RESOLUTION_JVJ               	(7)
#define _SLIDER_START_ADDRESS_JVJ        	(_OTHER_FONT_ADDRESS)
#define _L_BAR_JVJ                           		(_OTHER_FONT_ADDRESS)
#define _0_BAR_JVJ                           		(0x00 + _SLIDER_START_ADDRESS_JVJ +1)      // Empty Icon
#define _1_BAR_JVJ                           		(0x01 + _SLIDER_START_ADDRESS_JVJ +1)
#define _2_BAR_JVJ                           		(0x02 + _SLIDER_START_ADDRESS_JVJ +1)
#define _3_BAR_JVJ                           		(0x03 + _SLIDER_START_ADDRESS_JVJ +1)
#define _4_BAR_JVJ                           		(0x04 + _SLIDER_START_ADDRESS_JVJ +1)
#define _5_BAR_JVJ                           		(0x05 + _SLIDER_START_ADDRESS_JVJ +1)
#define _6_BAR_JVJ                           		(0x06 + _SLIDER_START_ADDRESS_JVJ +1)      // Full Icon
#define _R_BAR_JVJ                           		(_OTHER_FONT_ADDRESS+10)

	UINT16 value;
	UINT16 cnt;

	value  = ucValue - usMin;
	pData[0] = _L_BAR_JVJ ;

	for(cnt=1;cnt<(ucLength - 1);cnt++)
		pData[cnt] = _0_BAR_JVJ ;

	pData[ucLength - 1] = _R_BAR_JVJ ;

	//cnt =((WORD)(value * (ucLength - 2))) / (usMax - usMin);
	cnt = value * (ucLength - 2);
	cnt = cnt /(usMax - usMin);

//    if(cnt < (ucLength - 2))
//		pData[cnt + 1] = (_0_BAR_JVJ ) + (((((WORD)(value * (ucLength - 2))) * _SLIDER_RESOLUTION_JVJ ) / (usMax - usMin)) % _SLIDER_RESOLUTION_JVJ );
	if (cnt < (ucLength-2))
	{
		value =value* (ucLength - 2);
		value = value * _SLIDER_RESOLUTION_JVJ;
		value = value/(usMax - usMin);
		value = value % _SLIDER_RESOLUTION_JVJ;
		value = value+_0_BAR_JVJ;
		pData[cnt + 1] = value;
	}
	
	for(;cnt>0;cnt--)
        pData[cnt] = _0_BAR_JVJ  + _SLIDER_RESOLUTION_JVJ  - 1;

	COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
	CScalerWrite(_OSD_DATA_PORT_92, ucLength, pData, _NON_AUTOINC);

}

/*
void COsdDispFullSlider(BYTE ucRow, BYTE ucCol, BYTE ucLength, bit ucValueType,ItemSlider* pItemSlider)
{
       UINT16 xdata usRes;

       usRes = pItemSlider->pGetFunction();
       ucValueType=0;
	//COsdFxHLine2(ucRow, ucCol, ucLength, ((_OSD_BAR_FG_COLOR & 0x0f) << 4), _WRITE_BYTE2);
	COsdFxHLine2(ucRow, ucCol, ucLength, ((pItemSlider->ucColor& 0x0f) << 4), _WRITE_BYTE2);
    	COsdFxHLine2(ucRow, ucCol, LENGTH(1), _SUBT_, _WRITE_BYTE1);
    	COsdFxHLine2(ucRow, ucCol + ucLength - 1, LENGTH(1), _PLUS_, _WRITE_BYTE1);
    	COsdFxSlider(ucRow, ucCol + 1, ucLength - 2, usRes, pItemSlider->ucMax, pItemSlider->ucMin);
    	//COsdFxHLine2(ucRow, ucCol + ucLength+1, LENGTH(3), ((_OSD_BAR_FG_COLOR & 0x0f) << 4), _WRITE_BYTE2);
    	COsdFxHLine2(ucRow, ucCol + ucLength+1, LENGTH(3), ((pItemSlider->ucNumColor& 0x0f) << 4), _WRITE_BYTE2);
	//if(ucValueType == _SHOW_PERCENT)
	//{
		//usValue = (WORD)(usValue-usMin) * 100 / usRange;		//show 100%
		//if(usValue > 100)
		//{
			//usValue = 100;
		//}
	//}
    	COsdFxShowNumber2(ucRow, ucCol + ucLength+1, usRes, _SHOW_3, _OFF);
}
*/


//-----------------------sva
//Add by zhang_dc
void COsdFxPWMCtlCommand(BYTE ucAddr, BYTE ucByte, BYTE ucValue)		
{
	if(ucByte == _WRITE_BYTEALL)
		return;
	
	pData[0] = 0x00 | ((ucByte&0x03)<<6);
    	pData[1] = ucAddr;
    	CScalerWrite(_OSD_ADDR_MSB_90, LENGTH(2), pData, _AUTOINC);

	pData[0] = ucValue;
	CScalerWrite(_OSD_DATA_PORT_92, LENGTH(1), pData, _NON_AUTOINC);
}

void COsdFxSetOsdSizeDouble(BYTE ucSize)
{
	#if 1
	if(_OSD_ZOOM_X2 == ucSize)
	{
		COsdFxPWMCtlCommand(3, _WRITE_BYTE1, 0x07);
		//20080901 ccy modify
		CScalerSetOsdPosition(WIDTH(_OSD_UMAIN_DH_END*2), HEIGHT(_OSD_UMAIN_DV_END*2), stOsdUserData.OsdHPos>>2, ((stOsdUserData.OsdVPos)), 0x01);

	//	CScalerSetOsdPosition(WIDTH(_OSD_UMAIN_DH_END*2), HEIGHT(_OSD_UMAIN_DV_END*2), _OSD_HPOSITION_RANGE>>2, ((_OSD_VPOSITION_RANGE>>1)+(_OSD_VPOSITION_RANGE>>2)), 0x01);
	}
	else if(_OSD_ZOOM_X1 == ucSize)
	{
		COsdFxPWMCtlCommand(3, _WRITE_BYTE1, 0x04);
		CScalerSetOsdPosition(WIDTH(_OSD_UMAIN_DH_END), HEIGHT(_OSD_UMAIN_DV_END), stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x01);
	}
	#else
	ucSize = 0;

	COsdFxPWMCtlCommand(ADDRESS(3), _WRITE_BYTE1, 0x04);
	//CScalerSetOsdPosition(WIDTH(_OSD_UMAIN_DH_END), HEIGHT(_OSD_UMAIN_DV_END), stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x01);
	CScalerSetOsdPosition(WIDTH(_OSD_UMAIN_DH_END), HEIGHT(_OSD_UMAIN_DV_END), 0, (_OSD_VPOSITION_RANGE), 0x01);
	#endif
}

//-----------------------------------------------------------


//-------------------------------------------------------------------

/*
void COsdFxLoadBracketText(UINT8 ucRow, UINT8 ucCol, UINT16 ucBKLength, UINT8 ucType, UINT8 ucForegroundColor, UINT8 ucBackgroundColor, UINT8 ucSelect, UINT8 *pArray)
{
//	UINT8 bkCount = COsdFxCalBlankCmdCount(ucBKLength);
//	UINT16 xdata bklength;


	
	

	UINT8 bkCount = COsdFxCalBlankCmdCount(ucBKLength);
	UINT16 xdata bklength;
	
	bklength=COsdFxCalTextCount(ucSelect, pArray);
	if(ucType!=_BRACKET1_TYPE)
		COsdFxClearText(ucRow, ucCol+bkCount-5, 1, bklength+15);
	
	COsdFxLoadText(ucRow, ucCol-2, ucBKLength, ucForegroundColor, ucBackgroundColor, 0, tOsdArrow_L);

	bklength = COsdFxCalTextCount(ucSelect, pArray)*_FONT_WID - COsdFxCalTextWidth(ucSelect, pArray);		
	COsdFxLoadText(ucRow, ucCol +  bkCount, 0, ucForegroundColor, ucBackgroundColor, ucSelect, pArray);
	COsdFxLoadText(ucRow, ucCol + COsdFxCalTextCount(ucSelect, pArray)  +bkCount +1 , 0, ucForegroundColor, ucBackgroundColor, 0, tOsdArrow_R);

}
*/
#if _TYPEOF_OSD_KONSTA
//sliderlen: 0-->invalid, else specified slider length
void COsdFxFullSlider(UINT8 ucRow, UINT8 ucCol, UINT8 sliderlen, ItemSlider* pItemSlider, bit active)
{
	//UINT8 ucBKCount;
	UINT8 ucRes;
	UINT8 ucNumColor, ucSliderColor;
	BYTE len,max,min;

	//len = (sliderlen==_ITEMSLIDER_EXTADJ_LEN)?(_ITEMSLIDER_EXTADJ_LEN):(pItemSlider->ucLength);
	if (sliderlen==_ITEMSLIDER_EXTADJ_LEN)
		len = _ITEMSLIDER_EXTADJ_LEN;
	else
		len = pItemSlider->ucLength;
	
	max = pItemSlider->ucMax;
	min = pItemSlider->ucMin;

#if _TYPEOF_OSD_KONSTA
	if(GET_FACTORYSTATUS())
	{
		if(active && (pItemSlider->pGetFunction() != COsdCtrlGetAudioVolume()))     //dong alter 20081107
			ucNumColor = _ITEMSLIDER_EXTADJ_COLOR;
		else
			ucNumColor = pItemSlider->ucNumColor;
	}
	else
		ucNumColor = (GET_EXT_ADJUST_WIN())?(_ITEMSLIDER_EXTADJ_NUMCOLOR):(pItemSlider->ucNumColor);
	if(GET_EXT_ADJUST_WIN())
		ucSliderColor = _ITEMSLIDER_EXTADJ_COLOR;
	else
		if(active)
			ucSliderColor = _ITEMSLIDER_EXTADJ_COLOR;
		else
			ucSliderColor = pItemSlider->ucColor;
#else
	ucSliderColor = (GET_EXT_ADJUST_WIN())?(_ITEMSLIDER_EXTADJ_COLOR):(pItemSlider->ucColor);
#endif	
	if (!GET_EXT_ADJUST_WIN() && GET_VIDEO8_HUE_MASK((ucRow-_ITEMSTR_START_ROW)/2))
	{
		ucSliderColor = GET_CP_MASK_ITEM();
	}

	if (GET_PAGE_MASK())
	{
		ucNumColor = GET_CP_MASK_ITEM();
		ucSliderColor = GET_CP_MASK_ITEM();
	}
	COsdFxHLine(ucRow, ucCol, len, ucSliderColor<<4, _WRITE_BYTE2);
	if(pItemSlider->pGetFunction == _NULL_)
	{
		;//COsdFxSlider(ucRow, ucCol, len, 0, pItemSlider->ucMax, pItemSlider->ucMin);
	}
	else {
		ucRes = pItemSlider->pGetFunction();
//DebugPrintf("****usRes=%d****\n", usRes);
	   if((pItemSlider->ucType==1)&&(GET_FACTORYSTATUS()))//add by lbh 20090927
	   {
		if (ucRes>255)
			ucRes = 255;
	   }
	   else										//add by lbh 20090927
	   {
		if (ucRes>100)
			ucRes = 100;
	   }
		if (sliderlen==_ITEMSLIDER_EXTADJ_LEN)	//means need should number
		{
			COsdFxClearText(ucRow, ucCol + sliderlen+1, 1, 3);
			/*
			if (pItemSlider->pGetFunction == COsdCtrlGetAudioBalance)
			{
				COsdFxChange1bitColor(ucRow, ucCol + sliderlen, 1, 1, ucNumColor, _CP_BG);
				if (usRes <50)
				{
					COsdFxHLine(ucRow, ucCol + sliderlen, 1, _MINUS_, _WRITE_BYTE1);
					COsdFxShowNumber(ucRow, ucCol + sliderlen+1, 50-usRes, 0x23, ucNumColor);
				}
				else
				{ 
					COsdFxHLine(ucRow, ucCol + sliderlen, 1, (usRes==50)?(0x00):(_PLUS_), _WRITE_BYTE1);
					COsdFxShowNumber(ucRow, ucCol + sliderlen+1, usRes-50, 0x23, ucNumColor);
				}
			}
			else
			*/
			COsdFxShowNumber(ucRow, ucCol + len+1, ucRes, 0x23, ucNumColor);
		}
		//COsdFxSlider(ucRow, ucCol + ucBKCount + 3, pItemSlider->ucLength - 3, usRes, pItemSlider->ucMax, pItemSlider->ucMin);
		//COsdFxSlider(ucRow, ucCol + ucBKCount, pItemSlider->ucLength, usRes, pItemSlider->ucMax, pItemSlider->ucMin);
		COsdFxSlider(ucRow, ucCol, len, ucRes, max, min);
		if(GET_FACTORYSTATUS() && (pItemSlider->pGetFunction() != COsdCtrlGetAudioVolume()))       //dong alter 20081107
		{
			COsdFxShowNumber2(ucRow, ucCol + len, ucRes, _SHOW_3, _OFF);
			COsdFxChange1bitColor(ucRow, ucCol + len, 1, 3, ucNumColor, _CP_0);
		}
	}
}

void COsdFxTvShowFrequencySlider(UINT8 row, UINT8 col, UINT16 freq)
{
	DWORD temp2;
	UINT8 color;

	if (GET_PAGE_MASK())
		color = GET_CP_MASK_ITEM();
	else
		color = _CP_1;

	//show frequency at end of Item: Frequency
	//freq: (pdb-_IF_FREQ_FACROR)*0.05 = (pdb-_IF_FREQ_FACROR)/20
	if((((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR)<100)
		COsdFxClearText(row, col-4, 1, 1);
	COsdFxShowNumber(row,col-2,  ((freq&0x7fff)-_IF_FREQ_FACTOR)/_STEP_FACTOR, 0x32, color);
	temp2=(((freq&0x7fff)-_IF_FREQ_FACTOR)%_STEP_FACTOR)*5;

	COsdFxShowNumber(row, col,  temp2, 0x33, color);
	COsdFxHLine(row, col-1, 1, _DOT_, _WRITE_BYTE1);
	COsdFxChange1bitColor(row,col-1,1, 1, color, _CP_0);
#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, col+3, 1, _M_, _WRITE_BYTE1);
		COsdFxHLine(row, col+4, 1, _H_, _WRITE_BYTE1);
		COsdFxHLine(row, col+5, 1, _z_, _WRITE_BYTE1);
		COsdFxHLine(row, col+3, 3, color<<4, _WRITE_BYTE2);
#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 COsdFxFullSlider1(UINT8 ucRow, UINT8 ucCol, ItemSlider1* pItemSlider1, UINT8 active)
{
	//UINT8 ucBKCount;
	UINT16 xdata usRes;

	UINT8 color;

	if (GET_PAGE_MASK())
		color = GET_CP_MASK_ITEM();
	else
	{
		if (active)
			color = _CP_12;//20081124 ccy modify to red
		else
			color = pItemSlider1->ucColor;
	}

	COsdFxHLine(ucRow, ucCol, pItemSlider1->ucLength, color<<4, _WRITE_BYTE2);
	
	usRes = pItemSlider1->pGetFunction();

	COsdFxTvShowFrequencySlider(ucRow-1, ucCol+_ITEMSLIDER_LEN-6, stTvPdb.pdb);
	COsdFxSlider(ucRow, ucCol, pItemSlider1->ucLength, usRes, pItemSlider1->ucMax, pItemSlider1->ucMin);

	//finetune slider
	//COsdFxSlider(ucRow+2, ucCol, pItemSlider1->ucLength, ucTvFinetuneData, 255, 0);
	COsdFxSlider(ucRow+2, ucCol, pItemSlider1->ucLength, stTvPdb.pdb&0x00ff, 255, 0);
	
}

void COsdFxFullSlider2(UINT8 ucRow, UINT8 ucCol, ItemSlider2* pItemSlider2, UINT8 active)
{
	UINT16 xdata usRes;
	UINT8 color;
	
	if (GET_PAGE_MASK())
		color = GET_CP_MASK_ITEM();
	else
	{
		if (active)
			color = _CP_12; //20081124 ccy modify to red
		else
			color = pItemSlider2->ucColor;
	}

	COsdFxHLine(ucRow, ucCol, pItemSlider2->ucLength, color<<4, _WRITE_BYTE2);
	
	COsdFxTvShowFrequencySlider(ucRow-1, ucCol+_ITEMSLIDER_LEN-6, stTvPdb.pdb);

	usRes = pItemSlider2->pGetFunction();
	COsdFxSlider(ucRow, ucCol, pItemSlider2->ucLength, usRes, pItemSlider2->ucMax, pItemSlider2->ucMin);
}

#endif


/**
 *
 * @}
 */

