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

📄 osdfunc.c

📁 MST720-DEMO程序
💻 C
字号:
/******************************************************************************
 Copyright (c) 2005 MStar Semiconductor, Inc.
 All rights reserved.

 [Module Name]: OSDFunc.c
 [Date]:	04-Feb-2005
 [Comment]:
   OSD functions for Maria(MST7XXX) Chip.
 [Reversion History]:
*******************************************************************************/
#define _OSDFUNC_C_

/********************
* INCLUDE FILES     *
*********************/
#include "Project.h"
#include "Global.h"
#include "TypeDef.h"
#include "debug.h"
#include "Ms_rwreg.h"
#include "Misc.h"
#include "Ms7x_reg.h"
#include "Mst7x.h"
#include "Ms_Func.h"
#include "OSDMenu.h"
#include "OSDFunc.h"
#include "Font.h"
#include "PANEL.h"

/********************
* VARIABLEV DEFINE    *
*********************/
//BYTE g_ucOsdFontColor;

/**********************
* FUNCTION PROTOTYPES *
***********************/
void osdOSDWriteByte(BYTE address, BYTE value)
{
	mstWriteByte(BK0_A1_OSDRA, address);
	mstWriteByte(BK0_A2_OSDRD, value);
  
}

/*BYTE OSD_mStar_ReadOSDByte(BYTE address)
{
	mstWriteByte(BK0_A1_OSDRA, address);
	return mstReadByte(BK0_A2_OSDRD);
}*/

void osdOSDLoadPalette(BYTE *colorPtr, BYTE num)
{
	mstWriteByte(BK0_A1_OSDRA, OSD_28_CLR0R);
	mstWriteData(BK0_A2_OSDRD, colorPtr, num, 0);
}

void osdOSDLoadFont(BYTE addr, BYTE *fontPtr, WORD num)
{
	mstWriteByte(BK0_A3_RAMFA, addr);

	mstWriteData(BK0_A4_RAMFD, fontPtr, num, 0);
	/*mStar_WriteDDRByte(BK0_A3_RAMFA, addr);
	while (num--)
		mStar_WriteDDRByte(BK0_A4_RAMFD, *(fontPtr++));*/
}

void osdOSDClearAll(void)
{
	BYTE ucRetry = 10;
	mstWriteByte(BK0_A0_OSDIOA, CLR_B);
	
	while (ucRetry--)
	{
		miscDelay1ms(3);
		if ((mstReadByte(BK0_A0_OSDIOA)&CLR_B)==0)
			break;
	}
}

void osdOSDEnable(void)
{
	osdOSDWriteByte(OSD_0C_IOSDC1, (((OSD_WIN_VZOOM&0x03)<<6)+((OSD_WIN_HZOOM&0x03)<<4)+MWIN_B));
}

void osdOSDDisable(void)
{
	osdOSDWriteByte(OSD_0C_IOSDC1, 0x00);
	miscDelay1ms(20);
	mstPowerManagement(PM_OSD_TURN_OFF);
	g_ucSystemFlag |= SAVE_SETTING_FLAG;
}


void osdOSDSetFrame(BYTE PositionX, BYTE PositionY, BYTE Width, BYTE Height)
{
	DWORD ulTemp;
	// Set X position
	ulTemp=((DWORD)PositionX*(PANEL_WIDTH-(WORD)Width*12*(OSD_WIN_HZOOM+1)))/100+PANEL_HSTART-48;
	//ulTemp=ulTemp/4;
	osdOSDWriteByte(OSD_02_OHSTA_L, ulTemp&0xFF);
	osdOSDWriteByte(OSD_03_OHSTA_H, ulTemp>>8);
	// Set Y position
	ulTemp=((DWORD)PositionY*(PANEL_HEIGHT-(WORD)Height*18*(OSD_WIN_VZOOM+1)))/100;
	//ulTemp=ulTemp/4;;
	osdOSDWriteByte(OSD_04_OVSTA_L, ulTemp&0xFF);
	osdOSDWriteByte(OSD_05_OVSTA_H, ulTemp>>8);
	
	// Set OSD frame width size
	osdOSDWriteByte(OSD_06_OSDW, Width-1);
	// Set OSD frame height size
	osdOSDWriteByte(OSD_07_OSDH, Height-1);
	// Frame Offset
	//mStar_WriteOSDByte(OSD_12_OCBUFO, Width-1);
	osdOSDWriteByte(OSD_12_OCBUFO, 0x00);
  
}

void osdOSDSetStringColor(BYTE FGC, BYTE BGC)
{
	g_ucOsdFontColor = ((FGC&0x0F)<<4)+(BGC&0x0F);
}

void osdOSDPrintString(BYTE xPos, BYTE yPos, BYTE ucLanguage, BYTE *str, BYTE FGC, BYTE BGC)
{
	WORD uwAddress;
	BYTE ucLoop,x;
	BYTE ucDrawCode=TRUE;

	if (yPos&_BIT7)
		ucDrawCode=FALSE;
	
	yPos&=0x3F;//~(BIT7|BIT6);
	ucLoop = 0;
	uwAddress=(WORD)yPos*OSD_MAINMENU_WIDTH+xPos; // get real address

	osdOSDSetStringColor(FGC, BGC);

	x=0;
	ucLoop=0;

	for (x=0;x<255;x++)
	{
		if(ucLoop==ucLanguage)
			break;
		if(str[x]==0xff)
			ucLoop+=1;
			
	}
	
	mstWriteWord(BK0_A9_DISPAA_H, uwAddress);		// BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
	
	for (ucLoop = x; ucLoop<0xff; ucLoop++)
	{
	    if (str[ucLoop]!=0xff)
		mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
	     else
	         break;
	}
	
	if (ucDrawCode==TRUE)
	{
		mstWriteWord(BK0_A6_DISPCA_H, uwAddress);	// BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
		
		for (ucLoop = x; ucLoop<0xff; ucLoop++)
		{
		    if (str[ucLoop]!=0xff)
		  	mstWriteByte(BK0_A7_DISPCD, str[ucLoop]);
		    else
			break;
		}
		
	}
}

void osdOSDPrintIcon(BYTE xPos, BYTE yPos, BYTE icon, BYTE FGC, BYTE BGC)
{
	WORD uwAddress;

	uwAddress=yPos*OSD_MAINMENU_WIDTH+xPos;

	osdOSDSetStringColor(FGC, BGC);

	mstWriteWord(BK0_A6_DISPCA_H, uwAddress);		// BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
	mstWriteByte(BK0_A7_DISPCD, icon);

	mstWriteWord(BK0_A9_DISPAA_H, uwAddress);		// BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
	mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
	
}

#if 1
void osdOSDPrintValue(BYTE xPos, BYTE yPos, SINT dt, BYTE FGC, BYTE BGC)
{
 	BYTE ucDat;
	WORD  i;
	bit fz;
  
	fz=0;
	
	for(i=100; i>0; i/=10)
	{
		ucDat=(unsigned char)(dt/i);
		if(!fz)
		{
			if(ucDat!=0)
				fz=1;
		}
    
		if(fz)
		{
			dt=dt-ucDat*i;
			ucDat=ucDat+_0;
			osdOSDPrintIcon(xPos++, yPos, ucDat, FGC, BGC);
		}
		else
		{
			osdOSDPrintIcon(xPos++, yPos, __, FGC, BGC);
		}
	}
  
	if(!fz)
		osdOSDPrintIcon((xPos-1), yPos, _0, FGC, BGC);
}

void osdOSDPrintAdjustBar(BYTE xPos, BYTE yPos, BYTE MAX, BYTE val, BYTE FGC, BYTE BGC)
{
	float remainder;
	WORD uwAddress;
	BYTE i;
	WORD kk;
	BYTE  ff[30];

	osdOSDSetStringColor(FGC, BGC);

	uwAddress=yPos*OSD_MAINMENU_WIDTH+xPos;
    
	kk=val;
	ff[18]=kk*9/MAX;
	ff[19]=(kk*9)%MAX;
	//remainder=(float)ff[19]/MAX*7;		// For 7 scale
	remainder=(float)ff[19]/MAX*5;		// for 5 scale

	ff[0]=_GUAGESTART;
	i=1;
	if(ff[18] >= 1)
	{
		for(; i <= ff[18]; i++)
			ff[i]=_GUAGE4_4;
	}

	if(remainder != 0)
	{
		if(remainder >0   && remainder <1.0) ff[i]=_GUAGE0_4; else 
		if(remainder >=1.0 && remainder <2.0) ff[i]=_GUAGE1_4; else
		if(remainder >=2.0 && remainder <3.0) ff[i]=_GUAGE2_4; else
		if(remainder >=3.0 && remainder <4.0) ff[i]=_GUAGE3_4; else
		if(remainder >=4.0 && remainder <5.0) ff[i]=_GUAGE4_4; /*else
		if(remainder >=5.0 && remainder <6.0) ff[i]=0x5A; else	// For 7 scale
		if(remainder >=6.0 && remainder <7.0) ff[i]=0x5B;*/	// For 7 scale
		i++;
	}
       
	while(i<10)
		ff[i++]=_GUAGE0_4;
	ff[10]=_GUAGEEND;

	mstWriteWord(BK0_A9_DISPAA_H, uwAddress);		// BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
	for(i = 0; i<11; i++)
	{
		mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
	}

	mstWriteWord(BK0_A6_DISPCA_H, uwAddress);		// BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
	for(i = 0; i<11; i++)
	{
		mstWriteByte(BK0_A7_DISPCD, ff[i]);
	}
		
}
#endif

void osdOSDSetBlockColor(BYTE xPos, BYTE yPos, BYTE width, BYTE height, BYTE FGC, BYTE BGC)
{
	WORD uwAddress;

	osdOSDSetStringColor(FGC, BGC);

	uwAddress = yPos*OSD_MAINMENU_WIDTH+xPos;

	for (yPos = 0; yPos < height; yPos++)
	{
		mstWriteWord(BK0_A9_DISPAA_H, uwAddress);	// BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
		
		for (xPos = 0; xPos < width; xPos++)
		{
			mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
		}
		
		uwAddress += OSD_MAINMENU_WIDTH;
	}
}

void osdOSDClearBlock(BYTE xPos, BYTE yPos, BYTE width, BYTE height)
{
	WORD uwAddress;
	uwAddress = yPos*OSD_MAINMENU_WIDTH+xPos;
	
	for (yPos = 0; yPos < height; yPos++)
	{
		mstWriteWord(BK0_A6_DISPCA_H, uwAddress);	// BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
		
		for(xPos = 0; xPos < width; xPos++)
		{
			mstWriteByte(BK0_A7_DISPCD, __);
		}
		
		uwAddress += OSD_MAINMENU_WIDTH;
	}

}

void osdSetTransparency(BYTE TransValue)
{
	mstWriteByte(BK0_62_DITHCTL1, 0x41);
	TransValue &= 0x07;
	mstWriteByte(BK0_63_OSD_CTL, ((mstReadByte(BK0_63_OSD_CTL)&0xF8)|TransValue));
}

/*
void OSD_Test(void)
{
	BYTE index;

	mstWriteByte(BK0_A6_DISPCA_H, 0x00);
	mstWriteByte(BK0_A5_DISPCA_L, 0x00);
	for(index=0; index < 100; index++)
		mstWriteByte(BK0_A7_DISPCD, index);

	mstWriteByte(BK0_A9_DISPAA_H, 0x00);
	mstWriteByte(BK0_A8_DISPAA_L, 0x00);
	for(index=0; index < 100; index++)
		mstWriteByte(BK0_AA_DISPAD, 0x25);

}*/

void osdOsdInitial(void)
{
	mstWriteByte(GEN_00_REGBK, REGBANKSCALER);

	
	osdOSDClearAll();
	// disable OSD
	osdOSDWriteByte(OSD_0C_IOSDC1, 0x00);
	// enable double
	osdOSDWriteByte(OSD_01_OSDDBC, 0x5);
	// disable OSD code buffer Base/Offset address
	osdOSDWriteByte(OSD_12_OCBUFO, 0x00);
	// shadow function control
	osdOSDWriteByte(OSD_0E_IOSDC3, ((OSD_WIN_SHADOW_TYPE<<5)+(OSD_WIN_SHADOW_EN<<4)+(OSD_WIN_SHADOW_COLOR&0x0F)));	
	// shadow height and width control
	osdOSDWriteByte(OSD_0F_OSHC, (((OSD_WIN_SHADOW_HEIGHT<<4)&0xF0)+(OSD_WIN_SHADOW_WIDTH&0x0F)));
	// Set OSD window size and position
	osdOSDSetFrame(OSD_WIN_POS_HStart, OSD_WIN_POS_VStart, OSD_MAINMENU_WIDTH, OSD_MAINMENU_HEIGHT);
	
	// Set OSD space function
	osdOSDWriteByte(OSD_08_OHSPA, ((OSD_WIN_SPACE_HStart-1)&0x3F));
	osdOSDWriteByte(OSD_09_OVSPA, ((OSD_WIN_SPACE_VStart-1)&0x1F));
	osdOSDWriteByte(OSD_0A_OSPW, OSD_WIN_SPACE_WIDTH);
	osdOSDWriteByte(OSD_0B_OSPH, OSD_WIN_SPACE_HEIGHT);
	// Set OSD character border
	osdOSDWriteByte(OSD_0D_IOSDC2, ((OSD_CHAR_BODER_TYPE<<5)+(OSD_CHAR_BODER_WIDTH<<4)+(OSD_CHAR_BODER_COLOR&0x0F)));

	// Set OSD palette 16 color
	osdOSDWriteByte(OSD_10_IOSDC4, 0x01);

	mstWriteByte(BK0_A0_OSDIOA, 0x9E);
	// load osd fonts
	osdOSDLoadFont(0, &tOSDFont0, sizeof(tOSDFont0));
	// load osd palette 
	osdOSDLoadPalette(&tOSDColorPalette0, sizeof(tOSDColorPalette0));
    
	//osdOSDDisable();

}



⌨️ 快捷键说明

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