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

📄 osdctrl.c

📁 这是T118和T103的通用程序
💻 C
字号:
//---------------------------------------------------------------------------
// Terawins Inc. Company Confidential Strictly Private
//
// $Archive: OSDCtrl.c $
// $Revision: 2.0 $
// $Author: jwang $
// $Date: 2003/08/13 $
//
// --------------------------------------------------------------------------
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// --------------------------------------------------------------------------
// Copyright 2002 (c) Terawins Inc.
// This is an unpublished work.
// --------------------------------------------------------------------------
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "SRC_ctrl.h"
#include "TW803Reg.h"
#include "OSDCtrl.h"
#include "TwoWire.h"
#include "OSDDraw.h"
#include "Keypad.h"
#include "Tuner.h"
#define __GLOBAL_H__
#include "Global.h"
#include "NVRam.h"
#include "OSDTbl.h"
#define _OSDMENU_H_
#include "OSDMenu.h"
#include "intrins.h"
#include "T803OSD.h"
#define __OSD_ESTR__
#include "E_OSDString.H"
#include "timer0.h"

bit idata skipon=0;

void OSDItemAdj(uCHAR cAdj)
{
uCHAR str_index=ALL_MENU[m_cOSDMenu]->Item_Num*EepPublic.cOSDLang;
uCHAR Val=ALL_MENU[m_cOSDMenu]->EEProm[m_cItem];
uCHAR Max=ALL_MENU[m_cOSDMenu]->Par[m_cItem].ucValMAX;
uCHAR Min=ALL_MENU[m_cOSDMenu]->Par[m_cItem].ucValMIN;
uCHAR dev_addr,dev_reg;
//void (*fff)(void);

	if(cAdj==INCREASE)
    {
       if(Val<Max)
		 Val++;
	   else if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_CYCLE)
		Val=Min;

  	}
	if(cAdj==DECREASE)
    {
	   if(Val>Min)
		Val--;
       else if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_CYCLE)
		 Val=Max;

  	}

	if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].Def!=NULL)
	{
		dev_addr=ALL_MENU[m_cOSDMenu]->Par[m_cItem].Def->ucDevVal;
		dev_reg=ALL_MENU[m_cOSDMenu]->Par[m_cItem].Def->ucRegAdr;

		if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].Def->ucDatalen==2)
		{
			I2CWriteByte(dev_addr,dev_reg,Val>>8);
			I2CWriteByte(dev_addr,dev_reg+1,Val&0xFF);
		}
        else
			I2CWriteByte(dev_addr,dev_reg,Val);

	}

	if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_GUAGE)
		OSDDrawGauge(Val,Max,0,ALL_MENU[m_cOSDMenu]->Item_Num+2, COL_GAUGE);

	if(ALL_MENU[m_cOSDMenu]->Par[m_cItem+str_index].cDataAttr&OSD_VALUE)
	{
		OSDCleanLine(NUM_STAT,ALL_MENU[m_cOSDMenu]->Item_Num+2,COL_NORMAL,NUM_STAT+3);
		OSDDrawNum(Val,Max,NUM_STAT,ALL_MENU[m_cOSDMenu]->Item_Num+2,COL_NORMAL,DRAW_BLANK);
	}
//	if((ALL_MENU[m_cOSDMenu]->Par->cDataAttr&OSD_ITEM)&&(((uCHAR *)ALL_MENU[m_cOSDMenu]->Par[m_cItem].Item)!=NULL))
	if((ALL_MENU[m_cOSDMenu]->Par[m_cItem+str_index].cDataAttr&OSD_ITEM)&&(((uCHAR *)ALL_MENU[m_cOSDMenu]->Par[m_cItem].Item)!=NULL))
		OSDShowItem((uCHAR *)ALL_MENU[m_cOSDMenu]->Par[m_cItem].Item[Val], ITEM_STAT, m_cItem);

  	ALL_MENU[m_cOSDMenu]->EEProm[m_cItem]=Val;

	if((ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_FUNC)&&((ALL_MENU[m_cOSDMenu]->Par[m_cItem].func)!=NULL))
	{
		ALL_MENU[m_cOSDMenu]->Par[m_cItem].func(cAdj);
	}

#ifdef NVRAM
   if(!(ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_DISEPOM)){
 		I2CWriteByte(ALL_MENU[m_cOSDMenu]->EEPROM_BLOCK, ALL_MENU[m_cOSDMenu]->EEPROM_OFFSET+ m_cItem,Val);
		twdDelay(NVRDELAY);
   }
#endif

}
#ifdef TV

void AdjTVSkip(void)
{
//////////////////////////////////////////////////
      uCHAR cTmp;

      if(EepTV.cMode){                                      //Cable mode
          cTmp = I2CReadByte(EEPTVCABLE_BLOCK, 2*EepTV.cChannelNum+1);
          twdDelay(NVRDELAY);

         if(cTmp & 0x80){
            I2CWriteByte(EEPTVCABLE_BLOCK, 2*EepTV.cChannelNum+1, (cTmp&0x7F) );
            OSDDrawNum(EepTV.cChannelNum, 0, 19, m_cItem, COL_TITLE, LBLUE_RED|0x03);
         }else{
            I2CWriteByte(EEPTVCABLE_BLOCK, 2*EepTV.cChannelNum+1, (cTmp|0x80) );
//            OSDDrawNum(EepTV.cChannelNum, 0, 19, m_cItem, DBLUE_RED, LBLUE_RED|0x03);
            OSDDrawNum(EepTV.cChannelNum, 0, 19, m_cItem, 0x44, LBLUE_RED|0x03);

         }

      }else{                                              //Air mode
          cTmp = I2CReadByte(EEPTVAIR_BLOCK, 2*EepTV.cChannelNum+1);
          twdDelay(NVRDELAY);

         if(cTmp & 0x80){
            I2CWriteByte(EEPTVAIR_BLOCK, 2*EepTV.cChannelNum+1, (cTmp&0x7F) );
            OSDDrawNum(EepTV.cChannelNum, 0, 19, m_cItem, COL_TITLE, LBLUE_RED|0x03);
         }else{
            I2CWriteByte(EEPTVAIR_BLOCK, 2*EepTV.cChannelNum+1, (cTmp|0x80) );
//            OSDDrawNum(EepTV.cChannelNum, 0, 19, m_cItem, DBLUE_RED, LBLUE_RED|0x03);
            OSDDrawNum(EepTV.cChannelNum, 0, 19, m_cItem, 0x44, LBLUE_RED|0x03);
         }
      }
 }
//////////////////////////////////////////////////
void AdjFavoriteCHL(void)
{
   uCHAR cTemp,m_cTV_Num;

   cTemp=I2CReadByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_ChanelIndex);

      if(cTemp == 0x30){                           // second and third key number.
        m_cTV_Num = I2CReadByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_Oneth);
        m_cTV_Num = 100 + 10*I2CReadByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_Tenth) + m_cTV_Num;

            if(m_cTV_Num < 126){
                I2CWriteByte(EEPGLOBAL_BLOCK, EEPFAV_OFFSET+m_cItem,m_cTV_Num);
                twdDelay(5);
                OSDCleanLine(19,m_cItem,0,32);
                OSDDrawNum(m_cTV_Num, 0, NUM_STAT, m_cItem, BLUE_PURPLE, LBLUE_RED|0x03);
                EepFav.cFav_list[m_cItem-1] = m_cTV_Num;
              }

      }else if(cTemp == 0x10){
        m_cTV_Num = I2CReadByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_Oneth);
        m_cTV_Num = 10*I2CReadByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_Tenth) + m_cTV_Num;
        I2CWriteByte(EEPGLOBAL_BLOCK, EEPFAV_OFFSET+m_cItem,m_cTV_Num);
        twdDelay(5);
        OSDCleanLine(19,m_cItem,0,32);
        OSDDrawNum(m_cTV_Num, 0, NUM_STAT, m_cItem, BLUE_PURPLE, LBLUE_RED|0x03);
        EepFav.cFav_list[m_cItem-1] = m_cTV_Num;

      }

      Timer0Start();
      OSDCleanLine(19,0,0,32);
      I2CWriteByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_ChanelIndex,0x00);
      twdDelay(5);
}

#ifdef PAL // kenny 20060406
void AdjTVSoundSystem(void)
{
	if(EepTV.PAL_Audio_Type==PAL_I)
		EepTV.PAL_Audio_Type=PAL_DK;
	else
		EepTV.PAL_Audio_Type=PAL_I;
//Ruby	OSDDrawSoundSystem();
	I2CWriteByte(0x86, 0x02,EepTV.PAL_Audio_Type);
//	ir_data=0;
}
#endif // kenny 20060406

void AdjTVFineTune(sCHAR sStep)
{
//	uCHAR cTemp;
	uCHAR i;
	uDWORD dTemp;

uCHAR code     iNegative			[]={0x2D,0x20,0x20,EOL};
uCHAR code     iPostive           	[]={0x2B,0x20,0x20,EOL};
uCHAR code     iZero    			[]={0x20,0x20,0x20,EOL};

//uCHAR code iAfc_E			[]={'A','F','C',EOL};

/* ruby
	cTemp = I2CReadByte(EEPVIDEOBLOCK, TV_cChannel);
	twdDelay(NVRDELAY);
	if(EepTV.cMode)
	{
	wTemp=I2CReadByte(EEPVIDEOBLOCK+4, idTVCHANNEL_STAT+(cTemp-1)*2);
	wTemp<<=8;
	twdDelay(NVRDELAY);
	wTemp|=I2CReadByte(EEPVIDEOBLOCK+4, idTVCHANNEL_STAT+(cTemp-1)*2+1);
	}
	else
	{
	wTemp=I2CReadByte(EEPVIDEOBLOCK+2, idTVCHANNEL_STAT+(cTemp-1)*2);
	wTemp<<=8;
	twdDelay(NVRDELAY);
	wTemp|=I2CReadByte(EEPVIDEOBLOCK+2, idTVCHANNEL_STAT+(cTemp-1)*2+1);
	}
rub */
  if(sStep==INCREASE){
     sStep = 1;
  }else if(sStep==DECREASE){
     sStep = -1;
  }else{
     sStep = 0;
  }

//	wTemp=TVEEPGetChFreq(EepTV.cChannelNum); //ruby
//This funciton stay in tunexxx.c , thomas
	dTemp=TVEEPGetChFreq(); //ruby


   I2CWriteByte(EEPTVCABLE_BLOCK,2*EepTV.cChannelNum,(I2CReadByte(EEPTVCABLE_BLOCK,2*EepTV.cChannelNum)+sStep));
   twdDelay(NVRDELAY);

	dTemp += sStep*ADCRatio;   //unit, 10KHZ

   i=I2CReadByte(EEPTVCABLE_BLOCK,2*EepTV.cChannelNum);
   if(i == 0){
       OSDShowLine(iZero,NUM_STAT-1,m_cItem,BLUE_PURPLE, LBLUE_RED|0x03);
       OSDDrawNum(i, 0, NUM_STAT, m_cItem, BLUE_PURPLE, LBLUE_RED|0x03);
   }else if(i < 0x80){
       OSDShowLine(iPostive,NUM_STAT-1,m_cItem,BLUE_PURPLE, LBLUE_RED|0x03);
       OSDDrawNum(i, 0, NUM_STAT, m_cItem, BLUE_PURPLE, LBLUE_RED|0x03);
   }else{
     i = 0xff-i+1;
        OSDShowLine(iNegative,NUM_STAT-1,m_cItem,BLUE_PURPLE, LBLUE_RED|0x03);
        OSDDrawNum(i, 0, NUM_STAT, m_cItem, BLUE_PURPLE, LBLUE_RED|0x03);
   }
   Tuner_WriteFreq(dTemp);

//Ruby	OSDDrawTVFreq(wTemp);

#ifdef PAL
//Ruby	OSDDrawBand(wTemp);
#endif

	//kenny 20060406==============================
//	SetTuner(wTemp);
//	Tuner_WriteFreq(dTemp);
	//kenny 20060406==============================

//	EEPSaveTVChannel(cTemp-1, dTemp);


//	OSDShowTVData();   // mark by Sherman 05'11'14
}


#endif

void AdjGamma(void)
{
   if(EepVideo.cGamma == 1){
   		I2CWriteByte(TW803_P0,IMG_FUN_CTRL,(I2CReadByte(TW803_P0,IMG_FUN_CTRL)& ~0x03)|0x03);   		
/*-------------------------------------------------------------------------
 20060906 ,may have a good style here ,now for testing
-------------------------------------------------------------------------*/		
#if (defined __FUJI_17_DIGITAL__)
   		I2CWriteByte(TW803_P0,IMG_FUN_CTRL,(I2CReadByte(TW803_P0,IMG_FUN_CTRL)& ~0x03));  
#endif
/*-------------------------------------------------------------------------
 20060906   
-------------------------------------------------------------------------*/		
   }else{
   		I2CWriteByte(TW803_P0,IMG_FUN_CTRL,(I2CReadByte(TW803_P0,IMG_FUN_CTRL)& ~0x03));
   }
   		
}

⌨️ 快捷键说明

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