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

📄 osddisp.c

📁 很难得的最好的rtd3523系列原厂源码LCD驱动开发
💻 C
📖 第 1 页 / 共 2 页
字号:
    	COsdFxHLine(ucRow, ucCol + ucLength+1, LENGTH(3), ((ucNumColor & 0x0f) << 4), _WRITE_BYTE2);
	if(ucValueType == _SHOW_PERCENT)
	{
		usValue = (WORD)(usValue-usMin) * 100 / usRange;		//show 100%
	}
    COsdFxShowNumber2(ucRow, ucCol + ucLength, usValue, _SHOW_3, _OFF);
}
////////////////////////////////////////////////////////////////////////////////////////
void COsdDispIconSelect(void)
{
	//BYTE temp;
	
	COsdFxChange2bitColor(ROW(2), COL(0), WIDTH(_OSD_MAIN_COL), HEIGHT(2), COLOR00(_CP_BLACK), COLOR01(_CP_GRAY), COLOR10(_CP_GRAY), COLOR11(_CP_GRAY));
	COsdFxChange2bitColor(ROW(2), COL(ucOsdState*4-1), WIDTH(3), HEIGHT(2), COLOR00(_CP_BLACK), COLOR01(_CP_WHITE), COLOR10(_CP_RED), COLOR11(_CP_GREEN));
	//x.hu, osd no signal show
	switch(GET_INPUTPORT_TYPE(stSystemData.InputSource))
	{
		case _DSUB_A0_PORT:
			COsdFxCodeWrite((BYTE code *)tVGA_MENU_TABLE[ucOsdState-1][stOsdUserData.Language]);
			COsdFxCodeWrite((BYTE code *)tVGA_ITEM_TABLE[ucOsdState-1][stOsdUserData.Language]);
			if(ucOsdState==4)
				COsdFxChange1bitColor(ROW(5), COL(1), WIDTH(10), HEIGHT(1), FGCOLOR(_CP_GRAY), BGCOLOR(_CP_BLACK));
			else
			      COsdFxChange1bitColor(ROW(5), COL(1), WIDTH(10), HEIGHT(1), FGCOLOR(_CP_WHITE), BGCOLOR(_CP_BLACK));
			break;
#if (_VIDEO_SUPPORT == _ON)
		case _VIDEO_AV_PORT:
		case _VIDEO_AV2_PORT:
			COsdFxCodeWrite((BYTE code *)tAV_MENU_TABLE[ucOsdState-1][stOsdUserData.Language]);
			COsdFxCodeWrite((BYTE code *)tAV_ITEM_TABLE[ucOsdState-1][stOsdUserData.Language]);
			break;
#endif
		default:
			break;
	}



}

void COsdDispItemSelect(void)
{
	COsdDispClearText(ROW(5), COL(1), WIDTH(1), HEIGHT(6));	//clear arrow point.
	
	COsdFxHLine(ROW(ucOsd_Item_Index0+4), COL(1), LENGTH(1), _ARROW_, _WRITE_BYTE1);
}
//////////////////////////////////////////////////////////////////////
void COsdDispItemSelect2(void)
{
	COsdDispClearText(ROW(5), COL(1), WIDTH(1), HEIGHT(6));	//clear arrow point.
	
	COsdFxHLine(ROW(ucOsd_Item_Index0+4), COL(1), LENGTH(1), _ARROW_, _WRITE_BYTE1);
}
///////////////////////////////////////////////////////////
void COsdClearItemSelect(void)
{
	COsdDispClearText(ROW(5), COL(1), WIDTH(1), HEIGHT(6));	//clear arrow point.
}

void COsdShowHFreq(BYTE ucRow, BYTE ucCol, BYTE ucPar)
{
	COsdFxShowNumber(ROW(ucRow), COL(ucCol), stModeInfo.IHFreq/10, ucPar);
}

void COsdShowVFreq(BYTE ucRow, BYTE ucCol, BYTE ucPar)
{
	COsdFxShowNumber(ROW(ucRow), COL(ucCol), stModeInfo.IVFreq/10, ucPar);
}


void COsdDispCurrVGAMode(BYTE ucFG_Color, BYTE ucBG_Color)
{
	COsdFxChange1bitColor(ROW(13), COL(0), WIDTH(25), HEIGHT(1), FGCOLOR(ucFG_Color), BGCOLOR(ucBG_Color));

	//x.hu, update for no signal osd show
	if (stModeInfo.ModeCurr == _MODE_NOSIGNAL || \
		stModeInfo.ModeCurr == _MODE_NOSUPPORT	)
	{
		if (stModeInfo.ModeCurr == _MODE_NOSIGNAL)
			COsdFxLoadText(ROW(13), COL(3), stOsdUserData.Language, tOSD_NOSIGNAL_STR);
		else if (ucModeFound == _MODE_NOSUPPORT)
			COsdFxLoadText(ROW(13), COL(3), stOsdUserData.Language, tOSD_NOSUPPORT_STR);
	}
	else {

		// original code

		//show resoluction
		COsdFxShowNumber(ROW(13), COL(7), stModeInfo.IHWidth, (_ALIGN_RIGHT| _FORCE_SHOW_NUMBER_OFF | _SHOW_4));
		COsdFxHLine(ROW(13), COL(8), LENGTH(1), _MULT_, _WRITE_BYTE1);
		COsdFxShowNumber(ROW(13), COL(9), stModeInfo.IVHeight, (_ALIGN_LEFT| _FORCE_SHOW_NUMBER_OFF | _SHOW_3));
		//show hfreq
		COsdShowHFreq(ROW(13), COL(15), (_ALIGN_RIGHT|_FORCE_SHOW_NUMBER_OFF|_SHOW_2));
		COsdFxHLine(ROW(13), COL(16), LENGTH(1), _K_, _WRITE_BYTE1);
		COsdFxHLine(ROW(13), COL(17), LENGTH(1), _H_, _WRITE_BYTE1);
		COsdFxHLine(ROW(13), COL(18), LENGTH(1), _z_, _WRITE_BYTE1);
		//show vfreq
		COsdShowVFreq(ROW(13), COL(22), (_ALIGN_RIGHT|_FORCE_SHOW_NUMBER_OFF|_SHOW_2));
		COsdFxHLine(ROW(13), COL(23), LENGTH(1), _H_, _WRITE_BYTE1);
		COsdFxHLine(ROW(13), COL(24), LENGTH(1), _z_, _WRITE_BYTE1);
	}

}
#if (_VIDEO_SUPPORT == _ON)
//------------------------------------------
// Description	:	Show AV mode information
// InputValue :	None
// OutputValue :	None
//------------------------------------------
void COsdDispCurrAVMode(BYTE ucFG_Color, BYTE ucBG_Color)
{
	COsdFxChange1bitColor(ROW(13), COL(0), WIDTH(25), HEIGHT(1), FGCOLOR(ucFG_Color), BGCOLOR(ucBG_Color));

	//COsdFxLoadText(ROW(13), COL(6), ucModeFound, tOSD_VIDEOMODE_STR);
	//COsdFxLoadText(ROW(13), COL(18),CHECKVIDEOTYPE(), tOSD_VIDEOTYPE_STR);
	
	//x.hu, update for no signal osd show
	if (ucModeFound>7) {
		if (ucModeFound == _MODE_NOSIGNAL)
			COsdFxLoadText(ROW(13), COL(0), stOsdUserData.Language, tOSD_NOSIGNAL_STR);
		else if (ucModeFound == _MODE_NOSUPPORT)
			COsdFxLoadText(ROW(13), COL(0), stOsdUserData.Language, tOSD_NOSUPPORT_STR);
		else
			COsdFxLoadText(ROW(13), COL(6), 0, tOSD_VIDEOMODE_STR);
	}
	else{
		COsdFxLoadText(ROW(13), COL(6), ucModeFound, tOSD_VIDEOMODE_STR);
		COsdFxLoadText(ROW(13), COL(18),CHECKVIDEOTYPE(), tOSD_VIDEOTYPE_STR);
	}
}
#endif
void COsdDispVGAMenu(void)
{
	BYTE temp;

	//load 2-bit icon
	//CScalerLoadFont(tFONT_ICON, 0xa0, 96, _COMPRESS_FONT);		//load 2-bit icon. Address which below 0xa0 will save 1-bit chars.
	
	//show 2-bit icon
	COsdFxChange2bitColor(ROW(2), COL(0), WIDTH(_OSD_MAIN_COL), HEIGHT(2), COLOR00(_CP_BLACK), COLOR01(_CP_GRAY), COLOR10(_CP_GRAY), COLOR11(_CP_GRAY));
	COsdDispClearIcon(ROW(2), COL(0), WIDTH(_OSD_MAIN_COL), HEIGHT(2));

	COsdDispIconSelect();
	
	for(temp=0; temp<_VGA_MENU_NUM; temp++)
	{
		COsdFxLoadIcon(ROW(2), COL(temp*4+3), tVGA_ICON_TABLE[temp]);
	}
	
	//show mode
	COsdDispCurrVGAMode(FGCOLOR(_CP_WHITE), BGCOLOR(_CP_BLACK));

}

#if (_VIDEO_SUPPORT == _ON)
//------------------------------------------------
// Description	:	Show AV OSD Main Page
// InputValue	:	None
// OutputValue :	None
//------------------------------------------------
void COsdDispAVMenu(void)
{
	BYTE temp;
	
	//show 2-bit icon
	COsdFxChange2bitColor(ROW(2), COL(0), WIDTH(_OSD_MAIN_COL), HEIGHT(2), COLOR00(_CP_BLACK), COLOR01(_CP_GRAY), COLOR10(_CP_GRAY), COLOR11(_CP_GRAY));
	COsdDispClearIcon(ROW(2), COL(0), WIDTH(_OSD_MAIN_COL), HEIGHT(2));

	COsdDispIconSelect();

	for(temp=0; temp<_AV_MENU_NUM; temp++)
	{
		COsdFxLoadIcon(ROW(2), COL(temp*4+3), tAV_ICON_TABLE[temp]);
	}

	//show mode
	COsdDispCurrAVMode(FGCOLOR(_CP_WHITE), BGCOLOR(_CP_BLACK));

	//COsdFxShowNumber2(6, 6, stVideoData.Saturation);		//for debug
	//COsdFxShowNumber2(7, 6, stVideoData.Hue);		//for debug
}
#endif
void COsdDispPage(void)
{
/*
	BYTE ucSource;

	ucSource = GET_INPUTSOURCE_TYPE();
	switch(ucSource)
	{
		case _SOURCE_VGA:
			COsdDispVGAMenu();
			break;
#if (_VIDEO_SUPPORT == _ON)
		case _SOURCE_VIDEO8:
			COsdDispAVMenu();
			break;
#endif
		default:
			break;
	}

	CTimerDelayXms(20);

	COsdFxEnableOsd();

	//SET_KEYREPEATENABLE();
	CLR_KEYREPEATENABLE();
*/

	//x.hu, osd no signal show
	switch(GET_INPUTPORT_TYPE(stSystemData.InputSource))
	{
		case _DSUB_A0_PORT:
			COsdDispVGAMenu();
			break;
#if (_VIDEO_SUPPORT == _ON)
		case _VIDEO_AV_PORT:
		case _VIDEO_AV2_PORT:
			COsdDispAVMenu();
			break;
#endif
		default:
			break;
	}

	CTimerDelayXms(20);

	COsdFxEnableOsd();
	
	CLR_KEYREPEATENABLE();

				//x.hu, add for keep osd show while no signal state
			if (ucCurrState == _SLEEP_STATE){
				//we don't allow osd menu while _SLEEP_STATE
			}
			if (ucCurrState == _NOSIGNAL_STATE || ucCurrState == _NOSUPPORT_STATE) {
				#if (_OSD_NOSIGNAL_OPTION == _TRUE)
				CTimerCancelTimerEvent(CModeNoSignalEvent);
			    CTimerCancelTimerEvent(CModeNoCableEvent);
    			CTimerCancelTimerEvent(CModeNoSupportEvent);
				CTimerCancelTimerEvent(CModePowerSavingEvent);
				#else
				//CTimerCancelTimerEvent(CModeNoSignalEvent);
				CTimerCancelTimerEvent(CModePowerSavingEvent);
				#endif

				// set flag: OSD page is showing while no signal
				SET_OSDPAGE_AT_NOSIGNAL();	
			}


}

void COsdDispSystemTimer(BYTE ucRow, BYTE ucCol, WORD usValue)
{
	COsdFxShowNumber2(ucRow, ucCol, usValue, _SHOW_2, _ON);
}

void COsdDispClearIcon(BYTE ucRow, BYTE ucCol, BYTE ucWidth, BYTE ucHeight)
{
	BYTE temp;

    	for(temp=0;temp<ucHeight;temp++)
    	{
        	COsdFxCalcStartAddress(ucRow+temp, ucCol, 1);		//write byte1. note by zhang_dc
        	CScalerWriteAmount(_OSD_DATA_PORT_92, ucWidth, 0x80, _NON_AUTOINC);
    	}
}

void COsdDispClearText(BYTE ucRow,BYTE ucCol, BYTE ucWidth,BYTE ucHeight)
{
    BYTE temp;

    for(temp=0;temp<ucHeight;temp++)
    {
        COsdFxHLine(ROW(ucRow + temp), COL(ucCol), LENGTH(ucWidth), 0x10, _WRITE_BYTE2);
        COsdFxHLine(ROW(ucRow + temp), COL(ucCol), LENGTH(ucWidth), 0x00, _WRITE_BYTE1);
        COsdFxHLine(ROW(ucRow + temp), COL(ucCol), LENGTH(ucWidth), 0x8c, _WRITE_BYTE0);
    }
}


//----------------------------------------------------------------------------------------------------
// OSD Event Functions
//----------------------------------------------------------------------------------------------------
void COsdDispOsdTimerEvent(void)
{
    	COsdFxDisableOsd();
    	ucOsdState = _MENU_NONE;

	bValueAdj = _FALSE;		//add here for fix key message error!
}

⌨️ 快捷键说明

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