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