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

📄 vgaosdfuncs.c

📁 这是T118和T103的通用程序
💻 C
字号:
//---------------------------------------------------------------------------
// Terawins Inc. Company Confidential Strictly Private
//
// $Archive: VGAOSDFuncs.c $
// $Revision: 1.00 $
// $Author: Kevin Hsu $
// $Date: 2006/05/11 $
//
// --------------------------------------------------------------------------
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// --------------------------------------------------------------------------
// Copyright 2002 (c) Terawins Inc.
// This is an unpublished work.
// --------------------------------------------------------------------------
#include <reg51.h>
#include "common.h"	 
#include "System.h"
#include "Resolution.h"
#include "OSDDraw.h"
#include "TwoWire.h"
#include "TW803Reg.h"
#include "Keypad.h"
#include "OSDCtrl.h"
#include "OSDDRAW.h"
#define __GLOBAL_H__
#include "Global.h"
#include "ModeCtrl.h"
#include "OSDTbl.h"
#define _OSDMENU_H_
#include "OSDMenu.h"
#include "VGAOSDFuncs.h"

#ifdef PC_MODE
// ================================================================
//	OSDAutoAdj			Kevin Hsu.	May 11th, 2006
// ================================================================
//	Description: The Auto adjust of scale and position in VGA mode. 
//	Input:       +/- Adj.
//	Output:		 None.
//	---------------------------------------------------------------	 
void OSDAutoAdj()
{
	SrcAnalogProcess();
}


// ================================================================
//	OSDHPosFintun			Kevin Hsu.	May 11th, 2006
// ================================================================
//	Description: The OSD control of horizontal position fine-tune in 
//				 VGA mode. 
//	Input:       +/- Adj.
//	Output:		 None.
//	---------------------------------------------------------------		 
void OSDHPosFintun(uCHAR cAdj)
{
	uWORD wDataTemp;
    cAdj = 0;
	if(VGAState.ADCHBaPorch >= ALL_MENU[m_cOSDMenu]->EEProm[1])	
	{
		if(ALL_MENU[m_cOSDMenu]->EEProm[1]>(MAXHORSHIFT>>1))
		{
			wDataTemp = VGAState.ADCHBaPorch - (ALL_MENU[m_cOSDMenu]->EEProm[1]-(MAXHORSHIFT>>1));
			I2CWriteByte(TW803_P0, HSST_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, HSST_H, (unsigned char)(wDataTemp>>8));
			
			wDataTemp = VGAState.AdjHATV+(ALL_MENU[m_cOSDMenu]->EEProm[1]-(MAXHORSHIFT>>1));
			I2CWriteByte(TW803_P0, HATVC_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, HATVC_H, (unsigned char)(wDataTemp>>8));
		}
		else
		{
			wDataTemp = VGAState.ADCHBaPorch + ((MAXHORSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[1]);
			I2CWriteByte(TW803_P0, HSST_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, HSST_H, (unsigned char)(wDataTemp>>8));
			
			wDataTemp = VGAState.AdjHATV-((MAXHORSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[1]);
			I2CWriteByte(TW803_P0, HATVC_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, HATVC_H, (unsigned char)(wDataTemp>>8));
		}
		//VGAState.fHDispSize = (float)(VGAState.AdjHATV)*(float)(VGAState.HDispSize)/(float)(VGAState.HATV);
		VGAState.fHDispSize = (float)(wDataTemp)*(float)(VGAState.HDispSize)/(float)(VGAState.HATV);
		wDataTemp = (unsigned short)VGAState.fHDispSize;
		I2CWriteByte(TW803_P0, 0xDC, (unsigned char)(wDataTemp&0x00FF));
		I2CWriteByte(TW803_P0, 0xDD, (unsigned char)(wDataTemp>>8));
	}

}

// ================================================================
//	OSDVPosFintun			Kevin Hsu.	May 11th, 2006
// ================================================================
//	Description: The OSD control of vertical position fine-tune in 
//				 VGA mode. 
//	Input:       +/- Adj.
//	Output:		 None.
//	---------------------------------------------------------------

void OSDVPosFintun(uCHAR cAdj)
{
	uWORD wDataTemp;
	cAdj = 0;
	if(VGAState.ADCVBaPorch >= ALL_MENU[m_cOSDMenu]->EEProm[2])
	{
		if(ALL_MENU[m_cOSDMenu]->EEProm[2]>(MAXVERSHIFT>>1))
		{
			wDataTemp = VGAState.ADCVBaPorch - (ALL_MENU[m_cOSDMenu]->EEProm[2]-(MAXVERSHIFT>>1));
			I2CWriteByte(TW803_P0, VSST_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, VSST_H, (unsigned char)(wDataTemp>>8));
			
			wDataTemp = VGAState.AdjVATV+(ALL_MENU[m_cOSDMenu]->EEProm[2]-(MAXVERSHIFT>>1));
			I2CWriteByte(TW803_P0, VATVR_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, VATVR_H, (unsigned char)(wDataTemp>>8));
		}
		else
		{
			wDataTemp = VGAState.ADCVBaPorch + ((MAXVERSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[2]);
			I2CWriteByte(TW803_P0, VSST_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, VSST_H, (unsigned char)(wDataTemp>>8));
			
			wDataTemp = VGAState.AdjVATV-((MAXVERSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[2]);
			I2CWriteByte(TW803_P0, VATVR_L, (unsigned char)(wDataTemp&0x00FF));
			I2CWriteByte(TW803_P0, VATVR_H, (unsigned char)(wDataTemp>>8));
		}
		
	}
	VGAState.fVDispSize = (float)(wDataTemp)*(float)(VGAState.VDispSize)/(float)(VGAState.VATV);
	wDataTemp = (unsigned short)VGAState.fVDispSize;
	I2CWriteByte(TW803_P0, 0xDE, (unsigned char)(wDataTemp&0x00FF));
	I2CWriteByte(TW803_P0, 0xDF, (unsigned char)(wDataTemp>>8));
	VGACalOPTiming();
	I2CWriteByte(TW803_P0, 0xE2, 0x11);			  												  	
}

// ================================================================
//	OSDHScalFintun			Kevin Hsu.	May 11th, 2006
// ================================================================
//	Description: The OSD control of horizontal scale fine-tune in 
//				 VGA mode. 
//	Input:       +/- Adj.
//	Output:		 None.
//	---------------------------------------------------------------

void OSDHScalFintun(uCHAR cAdj)
{
	uWORD wDataTemp;
	cAdj = 0;
	if(ALL_MENU[m_cOSDMenu]->EEProm[3]>(MAXHORSCALE>>1))
	{
		VGAState.HDispSize = H_Size + (ALL_MENU[m_cOSDMenu]->EEProm[3]-(MAXHORSCALE>>1));
		VGAScaling();
		
		if(ALL_MENU[m_cOSDMenu]->EEProm[1]>(MAXHORSHIFT>>1))
		{
			wDataTemp = VGAState.AdjHATV+(ALL_MENU[m_cOSDMenu]->EEProm[1]-(MAXHORSHIFT>>1));
		}
		else
		{			
			wDataTemp = VGAState.AdjHATV-((MAXHORSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[1]);
		}
		VGAState.fHDispSize = (float)(wDataTemp)*(float)(VGAState.HDispSize)/(float)(VGAState.HATV);
		wDataTemp = (unsigned short)VGAState.fHDispSize;
		I2CWriteByte(TW803_P0, 0xDC, (unsigned char)(wDataTemp&0x00FF));
		I2CWriteByte(TW803_P0, 0xDD, (unsigned char)(wDataTemp>>8));
		I2CWriteByte(TW803_P0, 0xE2, 0x11);
	}
	else
	{
		VGAState.HDispSize = H_Size - ((MAXHORSCALE>>1)-ALL_MENU[m_cOSDMenu]->EEProm[3]);
		VGAScaling();				 		
		if(ALL_MENU[m_cOSDMenu]->EEProm[1]>(MAXHORSHIFT>>1))
		{
			wDataTemp = VGAState.AdjHATV+(ALL_MENU[m_cOSDMenu]->EEProm[1]-(MAXHORSHIFT>>1));
		}
		else
		{			
			wDataTemp = VGAState.AdjHATV-((MAXHORSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[1]);
		}
		VGAState.fHDispSize = (float)(wDataTemp)*(float)(VGAState.HDispSize)/(float)(VGAState.HATV);
		wDataTemp = (unsigned short)VGAState.fHDispSize;
		I2CWriteByte(TW803_P0, 0xDC, (unsigned char)(wDataTemp&0x00FF));
		I2CWriteByte(TW803_P0, 0xDD, (unsigned char)(wDataTemp>>8));
		I2CWriteByte(TW803_P0, 0xE2, 0x11);
	}
	

}

// ================================================================
//	OSDVScalFintun			Kevin Hsu.	May 11th, 2006
// ================================================================
//	Description: The OSD control of vertical scale fine-tune in 
//				 VGA mode. 
//	Input:       +/- Adj.
//	Output:		 None.
//	---------------------------------------------------------------

void OSDVScalFintun(uCHAR cAdj)
{	
	uWORD wDataTemp;
	cAdj = 0;
	if(ALL_MENU[m_cOSDMenu]->EEProm[4]>(MAXVERSCALE>>1))
	{
		VGAState.VDispSize = V_Size + (ALL_MENU[m_cOSDMenu]->EEProm[4]-(MAXVERSCALE>>1));
		VGAScaling();
		if(ALL_MENU[m_cOSDMenu]->EEProm[2]>(MAXVERSHIFT>>1))
		{
			wDataTemp = VGAState.AdjVATV+(ALL_MENU[m_cOSDMenu]->EEProm[2]-(MAXVERSHIFT>>1));
		}
		else
		{
			wDataTemp = VGAState.AdjVATV-((MAXVERSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[2]);
		}
		VGAState.fVDispSize = (float)(wDataTemp)*(float)(VGAState.VDispSize)/(float)(VGAState.VATV);
		wDataTemp = (unsigned short)VGAState.fHDispSize;
		I2CWriteByte(TW803_P0, 0xDC, (unsigned char)(wDataTemp&0x00FF));
		I2CWriteByte(TW803_P0, 0xDD, (unsigned char)(wDataTemp>>8));
		VGACalOPTiming();
		I2CWriteByte(TW803_P0, 0xE2, 0x11);

	}
	else
	{
		VGAState.VDispSize = V_Size - ((MAXVERSCALE>>1)-ALL_MENU[m_cOSDMenu]->EEProm[4]);
		VGAScaling();				 		
		if(ALL_MENU[m_cOSDMenu]->EEProm[2]>(MAXVERSHIFT>>1))
		{
			wDataTemp = VGAState.AdjVATV+(ALL_MENU[m_cOSDMenu]->EEProm[2]-(MAXVERSHIFT>>1));
		}
		else
		{
			wDataTemp = VGAState.AdjVATV-((MAXVERSHIFT>>1)-ALL_MENU[m_cOSDMenu]->EEProm[2]);
		}
		VGAState.fVDispSize = (float)(wDataTemp)*(float)(VGAState.VDispSize)/(float)(VGAState.VATV);
		wDataTemp = (unsigned short)VGAState.fHDispSize;
		I2CWriteByte(TW803_P0, 0xDC, (unsigned char)(wDataTemp&0x00FF));
		I2CWriteByte(TW803_P0, 0xDD, (unsigned char)(wDataTemp>>8));
		VGACalOPTiming();
		I2CWriteByte(TW803_P0, 0xE2, 0x11);
	}									

}

// ================================================================
//	OSDVGAValueSet			Kevin Hsu.	May 11th, 2006
// ================================================================
//	Description: Set the Min, Def and Max Value of VGA fine-tune ranage.
//	Input:       None.
//	Output:		 None.
//	---------------------------------------------------------------

void OSDVGAValueSet()
{					   
	//Define Horizontal.
	ALL_MENU[m_cOSDMenu]->EEProm[1] = MAXHORSHIFT>>1;
	ALL_MENU[m_cOSDMenu]->EEProm[2] = MAXVERSHIFT>>1;
	ALL_MENU[m_cOSDMenu]->EEProm[3] = MAXHORSCALE>>1;
	ALL_MENU[m_cOSDMenu]->EEProm[4] = MAXVERSCALE>>1;
}


#endif

⌨️ 快捷键说明

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