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

📄 rposdfunc.c

📁 LCD TV,uVision2 Project, (C) Keil Software
💻 C
📖 第 1 页 / 共 2 页
字号:
            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_)
            {
                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++;
        }
    }
}
//--------------------------------------------------
void COsdFxEnableOsd(void)
{
    //CTimerWaitForEvent(_EVENT_DEN_STOP);
    //pData[0] = 0x81;
    //pData[1] = 0x1f;
    //pData[2] = 0x00;
    //CScalerWrite(0x90, 3, pData, _AUTOINC);

    CTimerWaitForEvent(_EVENT_DEN_STOP);
    CScalerSetBit(_OVERLAY_CTRL_6C, 0xfe, 0x01);
}
//--------------------------------------------------
void COsdFxDisableOsd(void)
{
    //CTimerWaitForEvent(_EVENT_DEN_STOP);
    //pData[0] = 0x81;
    //pData[1] = 0x1f;
    //pData[2] = 0x01;
    //CScalerWrite(0x90, 3, pData, _AUTOINC);
    CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, 0x00);

#if(_AUTO_POWER_DOWN && _TV_CHIP != _TV_NONE)
    bTimerOnScreen = 0;
#endif
}
//--------------------------------------------------
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);
    }
}

//--------------------------------------------------
void COsdFxChangeWindowColor(BYTE ucWindowColor, BYTE *pStyle)
{
    pData[0]    = 0x41;
    pData[1]    = ((*(pStyle)) * 4) + (3);
    CScalerWrite(_OSD_ADDR_MSB_90, 2, pData, _AUTOINC);

    pData[0]    = ((*(pStyle + ((3) + 1) + 1)) & 0xf0) | (ucWindowColor & 0x0f);
    CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
}

//--------------------------------------------------


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);
    }
}

//--------------------------------------------------




void SetRTDPWM(unsigned char PWMId,unsigned char Value)
{
    pData[0]     = PWMId << 6;     //PWM ID
    pData[1]     = 0x01;
    pData[2]     = Value;
    CScalerWrite(_OSD_ADDR_MSB_90,3,pData,_AUTOINC);
}
//---------------------------------------------------------------------------
unsigned char StrLen(unsigned char code *Str)
{
    unsigned char i = 0;
    while(*Str != 0)
    {
        i++;
        Str++;
    }
    return i;
}
//----------------------------------------------------------------------------------------------------
unsigned int ValueInRangeChange(unsigned int ucMin,unsigned int ucMax,unsigned int ucCur,unsigned char ucOption,unsigned char ucLoop)
{
    unsigned int R;
    if(ucOption)
    {
        if(ucCur >= ucMax)
        {
            if(ucLoop == 0)    return ucMax;
            else               return ucMin;
        }
        R = ucCur+1;
    }
    else
    {
        if(ucCur <= ucMin)
        {
            if(ucLoop == 0)    return ucMin;
            else               return ucMax;
        }
        R = ucCur-1;
    }
    return R;
}
//----------------------------------------------------------------------------------------------------
unsigned char ClockGuage(void)
{
      unsigned int iMin;
      unsigned int  iTmp;
      iMin = COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MIN);
      iTmp = (stModeUserData.Clock - iMin) * 100 / (COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MAX) - iMin);
      return (unsigned char)iTmp;
}
//----------------------------------------------------------------------------------------------------
unsigned char HPosGuage(void)
{
      unsigned int ucMin = stModeUserCenterData.CenterHPos - _HPOSITION_BIAS;
      unsigned int iTmp = (stModeUserData.HPosition - ucMin) * 100 / (_HPOSITION_BIAS * 2);
      return (unsigned char)iTmp;
}
//----------------------------------------------------------------------------------------------------
unsigned char VPosGuage(void)
{
      unsigned int ucMin = stModeUserCenterData.CenterVPos - _VPOSITION_BIAS;
      unsigned int iTmp = (stModeUserData.VPosition - ucMin) * 100 / (_VPOSITION_BIAS * 2);
      return (unsigned char)iTmp;
}
//----------------------------------------------------------------------------------------------------
void DoReset()
{
    unsigned char ucTemp0 = stSystemData.InputSource;
    CEepromLoadDefault();    
    CEepromSaveOsdUserData();
    CEepromSaveSystemData();
    
	#if RTD_PWM_BACKLIGHT
	CAdjustBrightness_RTDPWM();
	#else 
	CAdjustBrightness();
	#endif
    CAdjustContrast();
    CAdjustBacklight();
    CAdjustAdcGainOffset();
    CAdjustAdcClock(stModeUserData.Clock);
    CAdjustPhase(stModeUserData.Phase);
    CAdjustHPosition();
    CAdjustVPosition();
    stSystemData.InputSource = ucTemp0; 
}
//----------------------------------------------------------------------------------------------------
void SetOSDDouble(unsigned char ucAttr)
{
     CScalerSendAddr(_OSD_ADDR_MSB_90, _WRITE, _AUTOINC);
     CScalerSendByte(0x40);
     CScalerSendByte(0x03);
     CScalerSendByte(ucAttr);
     CScalerSendWriteStop();
}
//---------------------------------------------
#if(BURNIN_EN)

WORD CheckSum(void)
{
    BYTE code *Ptr;
    WORD checksum_16 = 0;	    
    Ptr    = 0xFC00;
	
    do
    {
	Ptr --;
	checksum_16 += (unsigned char)*Ptr;
	//Ptr --;
    }
    while ((unsigned int)Ptr); 

	//DynamicText = CheckSumHex;
	return checksum_16;
//	printData("checksum_16= %x",checksum_16);

}

void DrawHex(void)		//fenix
{
		if(1)		//fenix
		{
		CheckSumHex = CheckSum();
		PrintfHex(CheckSumHex);
		//CheckSumHex = (CheckSumHex>>4);
		//CheckSumHex = (CheckSumHex&0xff);
		CheckSumHex = (CheckSumHex>>8);
		PrintfHex(CheckSumHex);
		
		//CheckSumHex = ((CheckSumHex>>8)&0xff);
		//	PrintfHex(CheckSumHex);
		//CheckSumHex_tmp = CheckSumHex;	
		}
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
///////
void InitBurnIn()
{     
     CModeSetFreeRun();
     CAdjustBackgroundColor(0x00,0x00,0x00);
     CPowerPanelOn();
}
//---------------------------------------------
void BurnInRun()
{
     static unsigned char ucBurnInColor = 0;
     unsigned char R = 0;
     unsigned char G = 0;
     unsigned char B = 0;
     if(ucBurnInColor & 0x80)
     {
         if(ucBurnInColor & 0x01)     R = 0xff;
         if(ucBurnInColor & 0x02)     G = 0xff;
         if(ucBurnInColor & 0x04)     B = 0xff;
     }
     else
     {
         if(ucBurnInColor & 0x01)     R = 0x7f;
         if(ucBurnInColor & 0x02)     G = 0x7f;
         if(ucBurnInColor & 0x04)     B = 0x7f;
     }
     CAdjustBackgroundColor(R,G,B);
     ucBurnInColor++;
/////////////////////////CHECKSUM

///////////////////////////
}




//---------------------------------------------

#endif   // if(BURNIN_EN)
/*  OSD Window Templet
//BASE ADDRESS + 000 Shadow/Border/Gradient
SB_THICKNESS(1) | SB_HEIGHT(1) ,
SHADOW_COLOR(1) | BORDER_COLOR(2),
R_GRADIENT_POLARITY_DEC |
  G_GRADIENT_POLARITY_INC |
  B_GRADIENT_POLARITY_DEC |
  GRADIENT_LEVEL(1) |
  R_COLOR_GRADIENT_EN(1) |
  G_COLOR_GRADIENT_EN(1) |
  B_COLOR_GRADIENT_EN(1),

//BASE ADDRESS + 001 START POSITION
W_START_POS(10,300),
//BASE ADDRESS + 002 END POSITION
W_END_POS(20,350),

//BASE ADDRESS + 003  Control
RESERVED,
GRADIENT_PER_LEVEL(2) | WINDOW_COLOR(3),

GRADIENT_FUNCTION_EN(1) |
  GRADIENT_DIRECTION_HOR |
  SHADOW_BORDER_EN(1) |
  WINDOW_TYPE(WT_3DBUTTON_TYPE1) |
  WINDOW_ENABLE(1),

*/

#endif        //#if(OSD_TYPE == OSD01)

⌨️ 快捷键说明

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