⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osdfunc.c

📁 很难得的最好的rtd3523系列原厂源码LCD驱动开发
💻 C
📖 第 1 页 / 共 3 页
字号:
// Description: Send "ONLY 1" value to frame control area. Add by zhang_dc
// Input: control value
// Output: None
//----------------------------------------------------
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);
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxLoadIcon(BYTE ucRow, BYTE ucCol, BYTE code *pArray)
{
    COsdFxLoadText(ucRow, ucCol, 0, pArray);
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxChange1bitColor(BYTE ucRow, BYTE ucCol, BYTE ucSizeW, BYTE ucSizeH, BYTE ucForegroundColor, BYTE ucBackgroundColor)
{
    BYTE cntY, temp;

    temp = ((ucForegroundColor & 0x0f) << 4) | (ucBackgroundColor & 0x0f);

    for(cntY=0;cntY<ucSizeH;cntY++)
    {
        COsdFxCalcStartAddress(ucRow + cntY, ucCol, _WRITE_BYTE2);

        CScalerWriteAmount(_OSD_DATA_PORT_92, ucSizeW, temp, _NON_AUTOINC);
    }
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxChange2bitColor(BYTE ucRow, BYTE ucCol, BYTE ucSizeW, BYTE ucSizeH, BYTE ucColor0, BYTE ucColor1, BYTE ucColor2, BYTE ucColor3)
{
    BYTE cntY, temp;

    temp = 0xa0 | ((ucColor3 & 0x07) << 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);
    }

}
/*
//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
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);
    }
}
*/
//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxDrawWindow(WORD usXStart, WORD usYStart, WORD usXEnd, WORD usYEnd, BYTE *pStyle)
{
    BYTE cnt0, cnt1;

    cnt0    = CScalerGetBit(_OVERLAY_CTRL_6C, _BIT0);

    pData[0]    = (cnt0 == 0x00) ? 0xc1 : 0xe1;
    pData[1]    = ((*(pStyle)) * 4) + 1;
    CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

    pData[0]    = ((usXStart & 0x03F) << 2);
    pData[1]    = (((usYStart & 0x007) << 5) | ((usXStart & 0x7C0) >> 6));
    pData[2]    = (usYStart >> 3);
    pData[3]    = ((usXEnd & 0x03F) << 2);
    pData[4]    = (((usYEnd & 0x007) << 5) | ((usXEnd & 0x7C0) >> 6));
    pData[5]    = (usYEnd >> 3);
    CScalerWrite(_OSD_DATA_PORT_92, 6, pData, _NON_AUTOINC);

    CTimerDelayXms(40);

    for(cnt1=0;cnt1<2;cnt1++)
    {	
        pData[0]    = 0xc1;
        pData[1]    = ((*(pStyle)) * 4) + (cnt1 * 3);
        CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

        for(cnt0=0;cnt0<3;cnt0++)
            pData[cnt0]   = (*(pStyle + ((cnt1 * 3) + cnt0) + 1));

        CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
    }
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxHLine(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE ucValue, BYTE ucIndicate)
{
    COsdFxCalcStartAddress(ucRow, ucCol, ucIndicate);

    if(ucIndicate == _WRITE_BYTEALL)
        CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength * 3, ucValue, _NON_AUTOINC);
    else
        CScalerWriteAmount(_OSD_DATA_PORT_92, ucLength, ucValue, _NON_AUTOINC);
}
/*
//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxVLine(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE ucValue, BYTE ucIndicate)
{
    BYTE cnt;

    for(cnt=0;cnt<ucLength;cnt++)
    {
        COsdFxCalcStartAddress(ucRow + cnt, ucCol, ucIndicate);

        if(ucIndicate == _WRITE_BYTEALL)
            CScalerWriteAmount(_OSD_DATA_PORT_92, 3, ucValue, _NON_AUTOINC);
        else
            CScalerWriteAmount(_OSD_DATA_PORT_92, 1, ucValue, _NON_AUTOINC);
    }
}
*/
//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxSetPosition(WORD usOsdActWidth, WORD usOsdActHeight, BYTE ucHPos, BYTE ucVPos, BYTE ucPar)
{
    if(ucHPos > _OSD_HPOSITION_RANGE)
        ucHPos = _OSD_HPOSITION_RANGE;

    if(ucVPos > _OSD_VPOSITION_RANGE)
        ucVPos = _OSD_VPOSITION_RANGE;
	usOsdActWidth  = _OSD_HPOSITION_OFFSET + (LWORD)((ucHPos)*((Panel.DHEndPos - Panel.DHStartPos)/4 - usOsdActWidth/4 - 4)) / _OSD_HPOSITION_RANGE;
	usOsdActHeight = _OSD_VPOSITION_OFFSET + (LWORD)((_OSD_VPOSITION_RANGE - ucVPos)*((Panel.DVEndPos - Panel.DVStartPos)/4 - usOsdActHeight/4 - 6)) / _OSD_VPOSITION_RANGE;

    CScalerSetBit(_OSD_SCRAMBLE_93, 0xf8, 0x02);

    pData[0] = CScalerGetBit(_OVERLAY_CTRL_6C, _BIT0);

    pData[0] = (pData[0] == 0x00) ? 0xe0 : 0xc0;
    pData[1] = 0x00;
    CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

    pData[0] = usOsdActHeight >> 1;
    pData[1] = (BYTE)(usOsdActWidth >> 2);
    pData[2] = ((BYTE)(usOsdActWidth & 0x0003) << 6) | ((usOsdActHeight & 0x01) << 5) | ucPar;
    CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
 
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    CTimerWaitForEvent(_EVENT_DEN_STOP);
    CScalerSetBit(_OSD_SCRAMBLE_93, 0xf8, 0x05);
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
WORD COsdFxGetAdcClockRange(BYTE ucPar)
{
    WORD delta;

    if(ucPar == _GET_CLOCKRANGE_MAX)
    {
        CAdjustCheckAdcClockRange(stModeUserCenterData.CenterClock, &delta);

        if(delta > _CLOCK_BIAS)
            return (stModeUserCenterData.CenterClock + _CLOCK_BIAS);
        else
            return (stModeUserCenterData.CenterClock + delta);
    }
    else if(ucPar == _GET_CLOCKRANGE_MIN)
    {
        CAdjustCheckAdcClockRange(stModeUserCenterData.CenterClock, &delta);

        if(delta > _CLOCK_BIAS)
            return (stModeUserCenterData.CenterClock - _CLOCK_BIAS);
        else
            return (stModeUserCenterData.CenterClock - delta);
    }
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
WORD COsdFxGetHPositionRange(BYTE ucPar)
{
    if(ucPar == _GET_HPOSITIONRANGE_MAX)
        return (stModeUserCenterData.CenterHPos + _HPOSITION_BIAS);
    else if(ucPar == _GET_HPOSITIONRANGE_MIN)
        return (stModeUserCenterData.CenterHPos - _HPOSITION_BIAS);
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
WORD COsdFxGetVPositionRange(BYTE ucPar)
{
    if(ucPar == _GET_VPOSITIONRANGE_MAX)
        return (stModeUserCenterData.CenterVPos + _VPOSITION_BIAS);
    else if(ucPar == _GET_VPOSITIONRANGE_MIN)
        return (stModeUserCenterData.CenterVPos - _VPOSITION_BIAS);
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
WORD COsdFxDetOverRange(WORD ucValue, WORD ucMax, WORD ucMin, BYTE ucSymbol)
{
	switch(ucSymbol)
	{
	case _DET_OVERRANGE_MAX:
		if (ucValue >= ucMax)
		{
			return ucMax;
		}
		else
		{	
			#if (_SLIDER_MAX_SHARPNESS > 3 && _VIDEO_TYPE == _VIDEO_5150)
			if (bVideoSharpness)
			{
				ucValue +=_SLIDER_STEP_SHARPNESS;
				if (ucValue%_SLIDER_STEP_SHARPNESS)
				{
					return ucMax;
				}
			}
			else
				ucValue++;

			#else

			ucValue++;

			#endif
			return ucValue;
		}
		break;
	case _DET_OVERRANGE_MIN:
		if (ucValue <= ucMin)
		{
			return ucMin;
		}
		else
		{
			#if (_SLIDER_MAX_SHARPNESS > 3 && _VIDEO_TYPE == _VIDEO_5150)
			if (bVideoSharpness)
			{
				ucValue -=_SLIDER_STEP_SHARPNESS; 
				if (ucValue%_SLIDER_STEP_SHARPNESS) 
				{
					return ucMin;
				}
			}
			else
				ucValue--;

			#else

			ucValue--;

			#endif

			return ucValue;
		}
	}
}

WORD COsdFxDetOverRangeForVdcSharpness(WORD ucValue, WORD ucMax, WORD ucMin, BYTE ucSymbol)
{
	switch(ucSymbol)
	{
	case _DET_OVERRANGE_MAX:
		if (ucValue >= ucMax)
		{
			return ucMax;
		}
		else
		{	
			ucValue +=_SLIDER_STEP_SHARPNESS;
			if (ucValue%_SLIDER_STEP_SHARPNESS)
			{
				return ucMax;
			}

			return ucValue;
		}
		break;
	case _DET_OVERRANGE_MIN:
		if (ucValue <= ucMin)
		{
			return ucMin;
		}
		else
		{
			ucValue -=_SLIDER_STEP_SHARPNESS; 
			if (ucValue%_SLIDER_STEP_SHARPNESS) 
			{
				return ucMin;
			}

			return ucValue;
		}
		break;
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -