📄 gmiosdfunc.c
字号:
//---------------------------------------------------------------------------------------------------------------------
void OutputRefrushRate()
{
BYTE ucIVFreq = stModeInfo.IVFreq/10;
pData[0] = (unsigned char)((ucIVFreq / 10) % 10) + '0';
pData[1] = (unsigned char)(ucIVFreq % 10) + '0';
Gotoxy(20,11,BYTE_DISPLAY);
CScalerWrite(_OSD_DATA_PORT_92,2,pData,_NON_AUTOINC);
}
//---------------------------------------------------------------------------------------------------------------------
void OutputHFreqRate()
{
BYTE ucFreq = stModeInfo.IHFreq/10;
pData[0] = (unsigned char)((ucFreq / 10) % 10) + '0';
pData[1] = (unsigned char)(ucFreq % 10) + '0';
Gotoxy(20,11,BYTE_DISPLAY);
CScalerWrite(_OSD_DATA_PORT_92,2,pData,_NON_AUTOINC);
}
*/
//---------------------------------------------------------------------------------------------------------------------
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 + 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);
CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, _BIT0);
}
//--------------------------------------------------
void COsdFxDisableOsd(void)
{
CTimerWaitForEvent(_EVENT_DEN_STOP);
CScalerSetBit(_OVERLAY_CTRL_6C, ~_BIT0, 0x00);
CLR_KEYREPEATENABLE();
ucOsdState = _MI_MENU_NONE;
#if(_VIDEO_TV_SUPPORT)
#if(_SLEEP_FUNC)
bTimerOnScreen = 0;
bOSDOnScreen = 0;
#endif
#endif
SET_CLEAR_OSD_EN();
#if(_VIDEO_TV_SUPPORT)
#if(_SHOW_TV_NO_SIGNAL)
ucSignalOSDState = 0;
#endif
#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);
}
*/
//--------------------------------------------------
// if is 1ibt font use this func load font
void COsdLoad1BitFont(BYTE *pFont,WORD usOffset,BYTE ucFntCount,BYTE *pFntCharWidth)
{
BYTE i;
CScalerLoadHardwareVLCFont(pFont, usOffset);
if(usOffset > 0x100) return;
if(usOffset + ucFntCount > 0x100)
ucFntCount = 0x100 - usOffset;
for(i=0;i<ucFntCount;i++)
{
SetCharWdith(usOffset,*pFntCharWidth);
pFntCharWidth++;
usOffset ++;
}
}
//---------------------------------------------------------------------------
BYTE COsdCtrlGetHPosition(void)
{
unsigned int ucMin = stModeUserCenterData.CenterHPos - _HPOSITION_BIAS;
unsigned int iTmp = (stModeUserData.HPosition - ucMin) * 100 / (_HPOSITION_BIAS * 2);
return (unsigned char)iTmp;
}
//---------------------------------------------------------------------------
/*
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);
}
//---------------------------------------------------------------------------
*/
BYTE COsdCtrlGetVPosition(void)
{
// return 100 - (stModeUserData.VPosition-COsdFxGetVPositionRange(_GET_VPOSITIONRANGE_MIN))*100/(COsdFxGetVPositionRange(_GET_VPOSITIONRANGE_MAX)-COsdFxGetVPositionRange(_GET_VPOSITIONRANGE_MIN));
unsigned int ucMin = stModeUserCenterData.CenterVPos - _VPOSITION_BIAS;
unsigned int iTmp = (stModeUserData.VPosition - ucMin) * 100 / (_VPOSITION_BIAS * 2);
return (unsigned char)iTmp;
}
//---------------------------------------------------------------------------
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);
}
}
//---------------------------------------------------------------------------
BYTE COsdCtrlGetClock(void)
{
WORD iMin;
WORD iTmp;
iMin = COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MIN);
iTmp = (stModeUserData.Clock - iMin) * 100 / (COsdFxGetAdcClockRange(_GET_CLOCKRANGE_MAX) - iMin);
return (BYTE)iTmp;
}
//---------------------------------------------------------------------------
BYTE COsdCtrlGetPhase(void)
{
return ((WORD)stModeUserData.Phase*100/63);
}
//---------------------------------------------------------------------------
BYTE StrLen(BYTE *Str)
{
BYTE i = 0;
while(*Str != 0)
{
i++;
Str++;
}
return i;
}
//----------------------------------------------------------------------------------------------------
BYTE GetNextLanguage(BYTE CurrIndex)
{
BYTE i;
WORD iMask = usLANGUAGE_MASK;
iMask >>= (CurrIndex+1);
for(i=CurrIndex+1;i<16;i++)
{
if(iMask&0x01)
{
return i;
}
iMask >>= 1;
}
//???????????Next Langage
iMask = usLANGUAGE_MASK;
for(i=0;i<CurrIndex;i++)
{
if(iMask&0x01)
{
return i;
}
iMask >>= 1;
}
return CurrIndex;
}
//----------------------------------------------------------------------------------------------------
BYTE GetPrevLanguage(BYTE CurrIndex)
{
char i;
WORD iMask = usLANGUAGE_MASK;
iMask <<= (16 - CurrIndex);
for(i=CurrIndex - 1;i>=0;i--)
{
if(iMask & 0x8000)
{
return i;
}
iMask <<= 1;
}
//???????????Prev Langage
iMask = usLANGUAGE_MASK;
for(i=15;i>=CurrIndex;i--)
{
if(iMask & 0x8000)
{
return i;
}
iMask <<= 1;
}
return CurrIndex;
}
//----------------------------------------------------------------------------------------------------
BYTE CheckLanguage(void)
{
BYTE ucLanguage = GET_LANGUAGE();
WORD iMask = usLANGUAGE_MASK;
iMask >>= ucLanguage;
if(iMask & 0x01)
{
return ucLanguage;
}
else
{
ucLanguage = FirstLanguage();
SET_LANGUAGE(ucLanguage);
return ucLanguage;
}
}
//----------------------------------------------------------------------------------------------------
BYTE FirstLanguage(void)
{
BYTE i;
WORD iMask = usLANGUAGE_MASK;
for(i=0;i<16;i++)
{
if(iMask&0x01)
{
return i;
}
iMask >>= 1;
}
return 255;
}
//---------------------------------------------
//#if(_BURNIN_EN)
void InitBurnIn()
{
CModeSetFreeRun();
CAdjustBackgroundColor(0x00,0x00,0x00);
CPowerPanelOn();
CPowerLightPowerOn();
}
//---------------------------------------------
void BurnInRun()
{
static BYTE ucBurnInDelay = 0;
static BYTE ucBurnInColor = 0;
BYTE R = 0;
BYTE G = 0;
BYTE B = 0;
if(ucBurnInDelay < 200)
{
ucBurnInDelay++;
CTimerDelayXms(10);
return;
}
ucBurnInDelay = 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++;
}
//---------------------------------------------
//#endif // if(BURNIN_EN)
//-----------------------------------------------------------
// ucNumber: 0~65535
// ucUserDefLong: 0 --> 自动计算ucNumber长度,有几位输出几位
// 1~5 --> 输出1~5位,不足用0补
// exp: ucNumber = 12
// ucUserDefLong = 0 Output: 12
// ucUserDefLong = 3 Output: 012
//-----------------------------------------------------------
void CShowNumber1(const WORD ucNumber, BYTE ucUserDefLong)
{
BYTE uctemp[5];
uctemp[4] = (ucNumber / 10000) % 10;
uctemp[3] = (ucNumber / 1000) % 10;
uctemp[2] = (ucNumber / 100) % 10;
uctemp[1] = (ucNumber / 10) % 10;
uctemp[0] = ucNumber % 10;
if (ucUserDefLong)
ucUserDefLong -= 1;
else
{
for(pData[15] = 4; pData[15]>0;pData[15]--)
{
if(uctemp[pData[15]] != 0)
break;
}
ucUserDefLong = pData[15];
}
CScalerSendAddr(_OSD_DATA_PORT_92 , _NON_AUTOINC);
do
{
*(&MCU_SCA_INF_DATA_FFF5) = (uctemp[ucUserDefLong]+'0');
}
while(ucUserDefLong--);
}
//-----------------------------------------------------------
void CDoReset(void)
{
BYTE ucTemp0 = GET_POWERSTATUS();
BYTE ucTemp1 = _GET_INPUT_SOURCE();
BYTE ucTemp2 = GET_LANGUAGE();
BYTE ucTemp3 = GET_DISPLAYMODE();
BYTE ucTemp4 = GET_SCREEN_UD();
BYTE ucTemp5 = GET_SCREEN_LR();
CEepromLoadDefault(0);
if (ucTemp0)
SET_POWERSTATUS();
else
CLR_POWERSTATUS();
_SET_INPUT_SOURCE(ucTemp1);
SET_LANGUAGE(ucTemp2);
SET_DISPLAYMODE(ucTemp3);
SET_SCREEN_UD(ucTemp4);
SET_SCREEN_LR(ucTemp5);
CEepromSaveSystemData();
CEepromSaveOsdUserData();
/*COsdFxDisableOsd();
if (GET_OSD_SIZE())
{
SetOSDDouble(0x03 | OSD_WINDOWCHAR_BLENDING);
#if(_OSD_TYPE == _OSD003)
//OSDPosition(_OSD_DOUBLE_WIDTH(_MAINMENU_WIDTH), _OSD_DOUBLE_HEIGHT(_MAINMENU_HEIGHT), stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x03);
OSDPosition(70,20,35,90,0x03);
#else
OSDPosition(_MAINMENU_WIDTH * 12+680, _MAINMENU_HEIGHT * 18+520, stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x03);
#endif
}
else
{
SetOSDDouble(OSD_WINDOWCHAR_BLENDING);
#if(_OSD_TYPE == _OSD003)
//OSDPosition(_MAINMENU_WIDTH, _MAINMENU_HEIGHT, stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x03);
OSDPosition(70,20,35,90,0x03);
#else
OSDPosition(_MAINMENU_WIDTH * 12, _MAINMENU_HEIGHT * 18, stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x03);
#endif
}
COsdFxEnableOsd();*/
CScalerSetBit(_OVERLAY_CTRL_6C, 0x23, ((stOsdUserData.OsdBlending & 0x07) << 2));
CAdjustBrightness();
CAdjustContrast();
CSetVolume();
if(bSourceVideo())
{
gmi_CAdjustVDCHue(GET_HUE());
CVideoSetSaturation(GET_SATURATION());
}
else
{
CAdjustYpbprhue(GET_HUE());
CAdjustYpbprhue(GET_SATURATION());
if(stSystemData.InputSource == _SOURCE_VGA)
{
CAutoDoAutoConfig();
CAutoDoWhiteBalance();
}
}
}
/* 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),
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -