/*=========================================================== * 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> 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 ©Ò©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 /** * * @} */