📄 dispinfo.c
字号:
//
#include "Config.h"
#include "typedefs.h"
#include "main.h"
#include "osdbasic.h"
#include "printf.h"
#include "osdmenu.h"
#include "dispinfo.h"
#include "tw88.h"
#include "i2c.h"
#include "etc_eep.h"
#include "audio.h"
#include "measure.h"
#include "pc_eep.h"
#include "RegMap.h"
#include "panel.h"
#ifdef SUPPORT_TV
#include "tuner.h"
#endif
//----------------------------------------------------------------------
//extern CODE BYTE InputSelectionString[][16];
extern CODE struct struct_IdName struct_InputSelection[];
extern CODE struct struct_IdName struct_VInputStd[];
static DATA WORD OSDDisplayedTime; //in ms
static IDATA BYTE DisplayedOSD = 0;
// DATA BYTE DisplayedOSD = 0;
//extern IDATA struct BarInfo BarInfo;
extern bit TVChManual;
extern bit DisplayInputHold;
extern BYTE DummyChannel;
#ifdef SUPPORT_COMPONENT
extern IDATA BYTE ComponentMode;
#endif
extern CODE BYTE Init_Osd_DisplayLogo[];
extern CODE BYTE Init_Osd_DisplayInput[];
#ifdef ADD_ANALOGPANEL
extern CODE BYTE Init_Osd_DisplayLogo_A[];
extern CODE BYTE Init_Osd_DisplayInput_A[];
#endif
#if defined( PAL_TV )
CODE BYTE Init_Osd_BarWindow_pal[];
#endif
extern CODE BYTE Init_Osd_BarWindow[];
extern CODE BYTE Init_Osd_DisplayPCInfo[];
extern CODE BYTE *StrVolume[];
#ifdef PAL_TV
extern bit ChannelEdit_Flag;
extern bit ChannelEdit_on;
#endif
#ifdef TW9908
CODE BYTE TW9908String[]= { " TW9908 "};
CODE BYTE TW9905String[]= { " TW9905 "};
#endif
CODE BYTE TW8806String[]= { " TW88X6 "};
CODE BYTE TechwellString[]= { "Techwell,Inc" };
CODE BYTE COMPONENT_STR[][15] = {
"YPbPr 480i", // 0
"YPbPr 576i", // 1
"YPbPr 480p", // 2
"YPbPr 576p", // 3
"YPbPr 1080i", // 4
"YPbPr 720p", // 5
"YPbPr 720p50",
"YPbPr 1080i50",
};
//================================================================
// Display information
//================================================================
void DisplayLogo(void)
{
BYTE CODE *str;
//ClearOSDInfo();
#ifdef TW9908
if( (ReadDecoder(0) & 0xf8) == 0x28 ) str = TW9905String;
else str = TW9908String;
#else
str = TW8806String;
#endif
InitOSDWindow(Init_Osd_DisplayLogo);
#ifdef ADD_ANALOGPANEL
if(IsAnalogOn())
InitOSDWindow(Init_Osd_DisplayLogo_A);
#endif
ClearDataCnt(LOGO_ADDR, 12*2); // Total 12*2 Char.
DrawAttrCnt(LOGO_ADDR, CH_COLOR_WHITE, 12 );
DrawAttrCnt(LOGO_ADDR+12, CH_COLOR_RED, 12 );
WriteStringToAddr(LOGO_ADDR, str, 12);
WriteStringToAddr(LOGO_ADDR+12*1, TechwellString,12);
ShowOSDWindow(TECHWELLOGO_OSDWIN,TRUE);
}
void ClearLogo(void)
{
ShowOSDWindow(TECHWELLOGO_OSDWIN,FALSE);
#ifdef DEBUG_OSD
dPrintf("\r\n++(ClearLogo)");
#endif
}
void ClearDisplayedOSD( BYTE newd )
{
DisplayedOSD &= (~(newd));
}
void SetDisplayedOSD( BYTE newd )
{
DisplayedOSD |= newd;
}
BYTE GetDisplayedOSD(void)
{
return DisplayedOSD;
}
void ClearOSDInfo(void)
{
BYTE dt;
dt = GetDisplayedOSD();
#ifdef DEBUG_OSD
dPrintf("\r\n++(ClearOSDInfo): DisplayedOSD:%2x",(WORD) GetDisplayedOSD());
#endif
#ifdef SUPPORT_PC
if( dt & PCINFO) ClearPCInfo();
#endif
if( (dt & TVVOL) || ( dt & TVCHN) ) ClearTVInfo();
if( dt & MUTE ) ClearMuteInfo();
if( dt & INPUTINFO ) ClearInput();
if( dt & MENU ) CloseOSDMenu();
}
void DisplayInput(void)
{
BYTE inputs, len1, len2,i, SystemAddr;
#ifdef SUPPORT_COMPONENT
BYTE CODE *Str;
#endif
#ifdef ADD_ANALOGPANEL
if(IsAnalogOn())
SystemAddr=INPUTINFO_ADDR+17;
else
#endif
SystemAddr=INPUTINFO1_ADDR;
if( (DisplayedOSD & INPUTINFO ) && DisplayInputHold ) return;
#ifdef DEBUG_OSD
dPrintf("\r\n++(DisplayInput)");
#endif
ClearOSDInfo();
inputs = GetInputSelection();
#if defined( SUPPORT_PC ) || defined( SUPPORT_DTV )
if( inputs==PC || inputs==DTV )
len2 = strlen( GetPCInputSourceName() );
else
#endif
#ifdef SUPPORT_COMPONENT
if( inputs==COMPONENT ){
Str = COMPONENT_STR[((ReadDecoder(CVFMT)&0x70)>>4)];
len2 = strlen(Str);
}
else
#endif
len2 = strlen( struct_VInputStd[GetVInputStdInx()].Name );
for (i=1; ;i++)
if( struct_InputSelection[i].Id==inputs ) break;
len1 = strlen(struct_InputSelection[i].Name);
InitOSDWindow(Init_Osd_DisplayInput);
#ifdef ADD_ANALOGPANEL
if(IsAnalogOn())
InitOSDWindow(Init_Osd_DisplayInput_A);
#endif
ClearDataCnt(INPUTINFO_ADDR, 51); // Total 42 Char.
DrawAttrCnt(INPUTINFO_ADDR, DEFAULT_COLOR, 51 );
WriteStringToAddr(INPUTINFO_ADDR, struct_InputSelection[i].Name, len1);
#if defined( SUPPORT_PC ) || defined( SUPPORT_DTV )
if( inputs==PC || inputs==DTV )
WriteStringToAddr(SystemAddr, GetPCInputSourceName(), len2);
else
#endif
#ifdef SUPPORT_COMPONENT
if( inputs==COMPONENT ){
//i = IsNoInput();
//Printf("\r\n Display Info==> Component Noinutcheck: %d ", (WORD)i );
if( IsNoInput() == 0 ) WriteStringToAddr(SystemAddr, Str, len2);
}
else
#endif
{
if( IsNoInput() == 0 )
WriteStringToAddr(SystemAddr, struct_VInputStd[GetVInputStdInx()].Name, len2);
}
ShowOSDWindow(INPUTINFO_OSDWIN-1,TRUE);
ShowOSDWindow(INPUTINFO_OSDWIN,TRUE);
ShowOSDWindowAll(1);
DisplayedOSD |= INPUTINFO;
OSDDisplayedTime = GetTime_ms();
}
BYTE ClearInput(void)
{
ShowOSDWindowAll(0);
ShowOSDWindow(INPUTINFO_OSDWIN-1,FALSE);
ShowOSDWindow(INPUTINFO_OSDWIN,FALSE);
DisplayedOSD &= (~(INPUTINFO));
#ifdef DEBUG_OSD
dPrintf("\r\n++(ClearInput)");
#endif
return 1;
// ClearBlending();
}
void DisplayVol(void)
{
BYTE CODE *Str ;
BYTE len;
#ifdef DEBUG_OSD
dPuts("\r\n++(DisplayVol)");
#endif
if(( DisplayedOSD & TVVOL ) == 0 )
{
ClearOSDInfo();
Change_OSDColorLookup();
delay(10);
InitOSDWindow(Init_Osd_BarWindow);
ClearDataCnt(OSDMENU_BARADDR, 50); // Total 25*2 Char.
DrawAttrCnt(OSDMENU_BARADDR, BG_COLOR_CYAN | CH_COLOR_WHITE, 25 );
DrawAttrCnt(OSDMENU_BARADDR+25, BG_COLOR_WHITE | CH_COLOR_CYAN, 25 );
Str = StrVolume[GetOSDLang()];
len=CStrlen(Str);
WriteStringToAddr(OSDMENU_BARADDR, Str, len);
ShowOSDWindow(OSDBARWINDOW,TRUE);
ShowOSDWindowAll(1);
}
DisplayVolumebar(GetAudioVol());
DisplayedOSD |= TVVOL;
OSDDisplayedTime = GetTime_ms();
}
void DisplayMuteInfo(void)
{
BYTE CODE *Str ;
BYTE len;
extern CODE BYTE Init_Osd_DisplayMuteInfo[];
extern CODE BYTE *MuteOnStr[];
ClearOSDInfo();
InitOSDWindow(Init_Osd_DisplayMuteInfo);
Str = MuteOnStr[GetOSDLang()];
len = strlen(Str);
WriteStringToAddr(MUTEINFO_ADDR, Str, len);
DrawAttrCnt(MUTEINFO_ADDR, BACK_COLOR|CH_COLOR_RED, len );
ShowOSDWindow(TVINFO_OSDWIN,TRUE);
ShowOSDWindowAll(1);
DisplayedOSD |= MUTE;
}
void ClearMuteInfo(void)
{
ShowOSDWindow(TVINFO_OSDWIN,FALSE);
DisplayedOSD &= (~(MUTE));
}
BYTE CheckAndClearOSD(void)
{
WORD ctime, stime, diff;
BYTE dt;
BYTE Result=0;
//return 1;
dt = GetDisplayedOSD();
if ( dt & ( MENU | INPUTINFO | TVCHN | TVVOL /*| LOGO*/ ) ) {
if( dt & MENU ) {
stime = GetOSDLastKeyInTime();
diff = 20 * 100; //GetOSDDuration()
}
else {
stime = OSDDisplayedTime;
diff = 2 * 100;
#ifdef SUPPORT_TV
if( TVChManual ) diff = 150; //100
#endif
}
ctime = GetTime_ms();
if( DiffTime_ms( stime, ctime ) >= diff ) {
#ifdef DEBUG_OSD
if( !(dt & MENU) ) {
dPrintf("\r\n(CheckAndClearOSD)DisplayedOSD:0x%x, ", (WORD)dt);
dPrintf("starttime:%d, currtime:%d", stime, ctime);
}
#endif
//if( dt & LOGO ) ClearLogo();
if( !DisplayInputHold )
if( dt & INPUTINFO ) Result = ClearInput();
if( dt & TVVOL ) Result = ClearTVInfo();
if( dt & MENU ) Result = CloseOSDMenu();
#ifdef SUPPORT_TV
ChannelEdit_Flag = 0;
ChannelEdit_on = 0;
if( dt & TVCHN ){
if(TVChManual)
ChangeTVChannel( DummyChannel );
else
Result = ClearTVInfo();
}
#endif
if( Result == 1){
if( DisplayInputHold ) DisplayInput();
else {
if( IsAudioMuteOn() ) DisplayMuteInfo();
}
}
return 1;
}
}
return 0;
}
#if defined( SUPPORT_PC ) || defined (SUPPORT_TV)
void SetWindowStart(WORD x, WORD y)
{
WriteDecoder(TW88_WINSTART_HI, (x>>8) | ((y>>8)<<4));
WriteDecoder(TW88_WINXSTART, (BYTE)x);
WriteDecoder(TW88_WINYSTART, (BYTE)y);
}
#endif
#if defined( SUPPORT_PC ) || defined( SUPPORT_DTV )
void SetWindowWidth(BYTE width)
{
WriteDecoder(TW88_WINWIDTH, width);
}
void DisplayPCInfo(BYTE CODE *ptr)
{
WORD xstart, ystart;
BYTE len;
#ifdef DEBUG_PC
dPrintf("\r\n==== DisplayPCInfo (%s) ====", ptr);
#endif
Clear_bypass(); // HHY 1.52
AutoPHPCalDisable();
SetPHP( GetPHR() + 0x100 ); // for Sharp-NoTicon by RYU-101205 // Set PHP
PanelFreeRun(1); // FreeRun
WriteDecoder(0x06, 0x80); // Soft Reset
ClearOSDInfo();
len = strlen(ptr);
xstart = ( PHR_ - len*PCINFO_ZOOM*FONT_WIDTH ) / 2;
ystart = PVR_ / 3;
InitOSDWindow(Init_Osd_DisplayPCInfo);
SetWindowStart(xstart, ystart);
SetWindowWidth(len);
ClearDataCnt(PCMEASUREINFO_ADDR, len);
DrawAttrCnt(PCMEASUREINFO_ADDR, CH_COLOR_RED,len);
WriteStringToAddr(PCMEASUREINFO_ADDR, (BYTE CODE *)ptr, len);
ShowOSDWindow(PCINFO_OSDWIN,TRUE);
ShowOSDWindowAll(1);
DisplayedOSD |=PCINFO;
}
void ClearPCInfo(void)
{
if( !(DisplayedOSD & PCINFO) ) return; //ljy070803
DisplayedOSD &= (~(PCINFO));
ShowOSDWindow(PCINFO_OSDWIN,FALSE);
dPuts("\r\n== ClearPCInfo ==");
// PanelMute(0); // HHY 1.63
}
extern CODE BYTE AutoAdjustInfo[];
void DisplayAutoAdjust(void)
{
InitOSDWindow(Init_Osd_BarWindow);
ClearDataCnt(OSDMENU_BARADDR, 50); // Total 25*2 Char.
DrawAttrCnt(OSDMENU_BARADDR, BG_COLOR_CYAN | CH_COLOR_WHITE, 50 );
WriteStringToAddr(OSDMENU_BARADDR, AutoAdjustInfo, 25);
ShowOSDWindow(OSDBARWINDOW,TRUE);
ShowOSDWindowAll(1);
}
void ClearAutoAdjust(void)
{
ShowOSDWindow(OSDBARWINDOW,FALSE);
}
#endif // SUPPORT_PC
//==================================================================
// TV Info
//==================================================================
#ifdef SUPPORT_TV
#define TVCHN_WIDTH 3
void DisplayTVChannel(BYTE chn, BYTE Chcolorflag )
{
extern CODE BYTE Init_Osd_DisplayTVChannel[];
BYTE len, str[5];
BYTE Char_Color = CH_COLOR_GREEN;
WORD xstart, ystart;
DisplayedOSD &= ~TVCHN;
ClearOSDInfo();
if ( chn <10 ) len = 1;
else if( chn <100 ) len = 2;
else len = 3;
if( (IsSavedCurChn()==0) && (Chcolorflag)) Char_Color = CH_COLOR_RED; // Not Saved Channel
utoa( (WORD)chn, str, 10);
len = strlen(str);
xstart = PHR_ - len*TVCHN_ZOOM*FONT_WIDTH-10;
ystart = 0;
InitOSDWindow(Init_Osd_DisplayTVChannel);
ClearDataCnt(TVCHINFO_ADDR, TVCHN_WIDTH);
DrawAttrCnt(TVCHINFO_ADDR, BACK_COLOR|Char_Color, TVCHN_WIDTH );
SetWindowStart(xstart, ystart);
WriteStringToAddr(TVCHINFO_ADDR, str, len);
ShowOSDWindow(TVINFO_OSDWIN,TRUE);
ShowOSDWindowAll(1);
DisplayedOSD |= TVCHN;
OSDDisplayedTime = GetTime_ms(); //GetTic();
}
#if defined( PAL_TV )
//012345678901234
CODE BYTE ScanTVInfo1[]= {"Auto Scanning ... "};
CODE BYTE ScanTVInfo2[]= {"Freq: CH: "};
CODE BYTE ScanTVInfo3[]= {"Press MENU button to stop"};
#define SCANTV_CHN_FREQ_POS 30
#define SCANTV_CHN_POS 46
void DisplayScanTV(void)
{
InitOSDWindow(Init_Osd_BarWindow_pal);
DrawAttrCnt(OSDMENU_BARADDR, BG_COLOR_CYAN | CH_COLOR_WHITE, 25 ); // All Line Attr clear by default color.
DrawAttrCnt(OSDMENU_BARADDR+25, BG_COLOR_WHITE | CH_COLOR_CYAN, 25 ); // All Line Attr clear by default color.
DrawAttrCnt(OSDMENU_BARADDR+50, BG_COLOR_CYAN | CH_COLOR_WHITE, 25 ); // All Line Attr clear by default color.
WriteStringToAddr(OSDMENU_BARADDR, ScanTVInfo1, 25); // 25: width
WriteStringToAddr(OSDMENU_BARADDR+25, ScanTVInfo2, 25); // 25: width
WriteStringToAddr(OSDMENU_BARADDR+50, ScanTVInfo3, 25); // 25: width
ShowOSDWindow(OSDBARWINDOW,TRUE);
ShowOSDWindowAll(1);
}
void DisplayChannelFreq(BYTE *ptr)
{
BYTE len;
len = strlen(ptr);
WriteStringToAddr(OSDMENU_BARADDR+SCANTV_CHN_FREQ_POS, ptr, len);
}
#else // PAL_TV else
//012345678901234
CODE BYTE ScanTVInfo1[]= {"Auto Scanning ... "};
CODE BYTE ScanTVInfo2[]= {"Press MENU button to stop"};
#define SCANTV_CHN_POS 21
void DisplayScanTV(void)
{
InitOSDWindow(Init_Osd_BarWindow);
DrawAttrCnt(OSDMENU_BARADDR, BG_COLOR_CYAN | CH_COLOR_WHITE, 25 ); // All Line Attr clear by default color.
DrawAttrCnt(OSDMENU_BARADDR+25, BG_COLOR_WHITE | CH_COLOR_CYAN, 25 ); // All Line Attr clear by default color.
WriteStringToAddr(OSDMENU_BARADDR, ScanTVInfo1, 25); // 25: width
WriteStringToAddr(OSDMENU_BARADDR+25, ScanTVInfo2, 25); // 25: width
ShowOSDWindow(OSDBARWINDOW,TRUE);
ShowOSDWindowAll(1);
SetDisplayedOSD( MENU ); // hans
}
#endif
void DisplayScanTVChannel(BYTE *ptr)
{
BYTE len;
len = strlen(ptr);
WriteStringToAddr(OSDMENU_BARADDR+SCANTV_CHN_POS, ptr, len);
}
#ifdef PAL_TV
void DisplayManualScanTVProg(BYTE flag)
{
CODE BYTE PlusDirection[] = { 0x1c, 0x1c, 0x1c, 0 };
CODE BYTE MinusDirection[] = { 0x1b, 0x1b, 0x1b, 0 };
WriteStringToAddr(OSDMENU_BARADDR+21, (flag==UP? PlusDirection:MinusDirection), 3);
}
#endif
void ClearScanTV(void)
{
ShowOSDWindow(OSDBARWINDOW,FALSE);
}
#endif
BYTE ClearTVInfo(void)
{
if( DisplayedOSD & TVVOL )
{ ShowOSDWindow(OSDBARWINDOW, FALSE);
DisplayedOSD &= (~(TVVOL));
}
else
{
ShowOSDWindow(TVINFO_OSDWIN, FALSE);
DisplayedOSD &= (~(TVCHN));
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -