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

📄 nvram.c

📁 这是T118和T103的通用程序
💻 C
字号:
#include <reg51.h>

#include "TW803Reg.h"
#include "system.h"
#include "NVRam.h"
#include "TwoWire.h"
#include "KeyPad.h"
#include "T803_Util.h"
#define __GLOBAL_H__
#include "Global.h"
#include "Src_ctrl.h"
#include "OSDTbl.h"
#define _OSDMENU_H_
#include "OSDMenu.h"

#ifdef NVRAM
EEPVERSION   idata	EepVersion;
EEPTV        idata  EepTV;
//EEPFACTORY   idata  EepFactory;
EEPPUBLIC    idata	EepPublic;
EEPPRIVATE   idata	EepPrivate;
EEPVIDEO     idata  EepVideo;
EEPFAV       idata  EepFav;

//uCHAR y;
void EEPLoadPubData(void)
#ifdef lucy_edition
{
	if(!(ReadPort()&kyMENU))
	{
  		InitEEPRom();
		OSDResetVideoData();
		while(!(ReadPort()&kyMENU))	{};
	}
	else
	{
		if(I2CReadByte(0xA0, 0x00) != '1' || I2CReadByte(0xA0, 0x01)!= '1' || I2CReadByte(0xA0, 0x02)!= '1' )
		{
			InitEEPRom();
			OSDResetVideoData();
			EEPSaveVideoData();//
		}
		else
			I2CReadBytes(EEPVIDEOBLOCK, 0x04, (uCHAR *)&EepVideo, EEPVIDEOSIZE);
	}
#ifdef TV
	I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX , 0x00);		//lucy for tuner
	if(I2CReadByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX)&0x01)
	{
		m_bAir_Cable=1;
	}
	else
	{
		m_bAir_Cable=0;
	}
#endif
	OSDSetVideoValues();
	EEPSaveVideoData();
}
#else
{
	if(!(ReadPort()&kyMENU)) //Factory mode
	{
  		InitEEPRom();
		while(!(ReadPort()&kyMENU))	{};
	}
	else
	{
		if(I2CReadByte(EEPGLOBAL_BLOCK, 0x00) != '1' || I2CReadByte(EEPGLOBAL_BLOCK, 0x01)!= '1' || I2CReadByte(EEPGLOBAL_BLOCK, 0x02)!= '1' )
			InitEEPRom();
		else
      		OSDLoadALLData();

    }
//	EepPublic.cOSDLang=0;
}
#endif

void InitEEPRom(void)
{
    uCHAR y;

 	I2CWriteByte(EEPGLOBAL_BLOCK, 0x00, '1');
  	twdDelay(NVRDELAY);
	I2CWriteByte(EEPGLOBAL_BLOCK, 0x01, '1');
	twdDelay(NVRDELAY);
	I2CWriteByte(EEPGLOBAL_BLOCK, 0x02, '1');
	twdDelay(NVRDELAY);

//////////////////Reset OSD Data////////////////////////////////////////////
	for(y=0;y<idNULLMENU;y++)
		OSDResetData(y);
//////////////////////////////////////////////////////////////

//////////////////SaveOSD Data////////////////////////////////////////////
	for(y=0;y<idNULLMENU;y++)
		OSDSaveData(y);
//////////////////////////////////////////////////////////////
	OSDSetALLData();


}

void OSDResetData(uCHAR Menu_ID)
{
    uCHAR y;

    uCHAR item_num=ALL_MENU[Menu_ID]->Item_Num;
	for(y=0;y<item_num;y++)
		ALL_MENU[Menu_ID]->EEProm[y]=ALL_MENU[Menu_ID]->Par[y].ucValDef;
}

void OSDSaveData(uCHAR Menu_ID)
{
    uCHAR y;

    uCHAR item_num=ALL_MENU[Menu_ID]->Item_Num;
    uCHAR block_addr=ALL_MENU[Menu_ID]->EEPROM_BLOCK;
    uCHAR block_offset=ALL_MENU[Menu_ID]->EEPROM_OFFSET;
    uCHAR Val;
	for(y=0;y<item_num;y++)
    {
        Val=ALL_MENU[Menu_ID]->EEProm[y];
 		I2CWriteByte(block_addr, block_offset+ y,Val);
		twdDelay(NVRDELAY);

    }
}

void OSDReadData(uCHAR Menu_ID)
{
#ifdef TV
    uCHAR i;
#endif
   	uCHAR item_num=ALL_MENU[Menu_ID]->Item_Num;
   	uCHAR block_addr=ALL_MENU[Menu_ID]->EEPROM_BLOCK;
   	uCHAR block_offset=ALL_MENU[Menu_ID]->EEPROM_OFFSET;

	I2CReadBytes(block_addr , block_offset, (uCHAR *)ALL_MENU[Menu_ID]->EEProm, item_num);

//thomas
    if ( Menu_ID == idPUBMENU){
        if(EepPublic.cOSDLang > eEND-1){
            I2CWriteByte(EEPGLOBAL_BLOCK, EEPPUBLIC_OFFSET+0,0);
            EepPublic.cOSDLang = 0;
        }
    }

//Thomas, favorite channel
#ifdef TV
    if ( Menu_ID == idTVMENU){                          // Load EEProm data about TV favorite channel
 //   	I2CReadBytes(block_addr , EEPFAV_OFFSET,   (uCHAR *)EepFav.cFav_cFavoriteChanel, 1);
 //   	I2CReadBytes(block_addr , EEPFAV_OFFSET+1, (uCHAR *)EepFav.cFav_list, FAVORITE_NO);

        for(i=0;i<FAVORITE_NO;i++){
            if(EepFav.cFav_list[i] > 125){
                EepFav.cFav_list[i] = 0;
                I2CWriteByte(EEPGLOBAL_BLOCK, EEPFAV_OFFSET+1+i,0);
                twdDelay(NVRDELAY);
            }
        }

        if (EepTV.cGroup){    //favorite mode,
            if (EepFav.cFav_cFavoriteChanel > FAVORITE_NO)
                EepFav.cFav_cFavoriteChanel = 0;
            if (EepFav.cFav_list[EepFav.cFav_cFavoriteChanel])
                EepTV.cChannelNum = EepFav.cFav_list[EepFav.cFav_cFavoriteChanel];
        }

    }
#endif


}

void OSDLoadALLData(void)
{
    uCHAR y;

	for(y=0;y<idNULLMENU;y++)
		OSDReadData(y);

	OSDSetALLData();
}

void OSDSetALLData(void)
{
    uCHAR y;

	for(y=0;y<idNULLMENU;y++)
		OSDSetValues(y);
}

void OSDSetValues(uCHAR Menu_ID)
{
	uCHAR item_num=ALL_MENU[Menu_ID]->Item_Num;
	uCHAR Val,dev_addr,dev_reg;
    uCHAR y;

	for(y=0;y<item_num;y++)
    {
		if(ALL_MENU[Menu_ID]->Par[y].Def!=NULL)
		{

			Val=ALL_MENU[Menu_ID]->EEProm[y];

			dev_addr=ALL_MENU[Menu_ID]->Par[y].Def->ucDevVal;
			dev_reg=ALL_MENU[Menu_ID]->Par[y].Def->ucRegAdr;

			if(ALL_MENU[Menu_ID]->Par[y].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);
		}
	}

}


#ifdef TV

void EEPSaveTVChannel(uCHAR cTVNum, sCHAR wTVFreq)
{

	if(EepTV.cMode)
		I2CWriteByte(EEPTVCABLE_BLOCK, cTVNum, wTVFreq);
	else
		I2CWriteByte(EEPTVAIR_BLOCK, cTVNum, wTVFreq);


	twdDelay(NVRDELAY);
}


#endif
#endif

⌨️ 快捷键说明

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