📄 vgaosdfuncs.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 + -