📄 osd.c
字号:
#include "Config.h"
#include "reg.h"
#include "typedefs.h"
#include "main.h"
#include "tw99.h"
#include "i2c.h"
#include "printf.h"
#include "osd.h"
#define RED 0x08
#define GREEN 0x02
#define BLUE 0x04
static DATA BYTE HEIGHT=0, WIDTH=0;
extern DATA BYTE OneMenuIndex;
extern DATA BYTE TwoMenuIndex;
extern DATA BYTE OldOSDData;
extern DATA BYTE ChipID;
void OSDCmd1(BYTE cmd)
{
WriteI2Cn_(OSDI2CAddress, &cmd, 1);
}
void OSDCmd2(BYTE cmd1, BYTE cmd2)
{
BYTE cmd[2];
cmd[0] = cmd1;
cmd[1] = cmd2;
WriteI2Cn_(OSDI2CAddress, cmd, 2);
}
void OSDPuts( CODE_P char *str )
{
BYTE cmd;
cmd = WIDTH? 0xa5 : 0xa3;
while( *str )
OSDCmd2( cmd, *str++ );
}
void OSDgotoxy(BYTE x, BYTE y)
{
if( HEIGHT ) y |= 0x20;
OSDCmd2( 0xa0, y ); // Row = 2
OSDCmd2( 0xa2, x ); // Col = 5
}
#ifdef KEILC
void OSDPutHex(BYTE HexValue)
{
BYTE i, j, k;
i = HexValue>>4;
j = i > 9 ? i + 'A' - 10 : i + '0';
i = HexValue & 0x0f;
k = i > 9 ? i + 'A' - 10 : i + '0';
// Printf("\r\n Value i = %2x, k = %2x", (WORD)i, (WORD)k);
OSDCmd2( 0xa3, (WORD)j );
OSDCmd2( 0xa3, (WORD)k );
}
#elif defined TASKINGC
void OSDPutHex(BYTE HexValue)
{
BYTE *i, *j, *k;
*i = HexValue>>4;
*j = *i > 9 ? *i + 'A' - 10 : *i + '0';
*k = *j;
*i = HexValue & 0x0f;
*(k+1) = *i > 9 ? *i + 'A' - 10: *i + '0';
OSDCmd2( 0xa3, *k );
OSDCmd2( 0xa3, *(k+1) );
}
#endif // TASKINGC
void OSDMemoryErase(void)
{
// OSDCmd1(0x37);
OSDCmd1( 0x33 ); //
delay(10);
}
void OsdTextInit(void)
{
WriteTW99( 0x02, ReadTW99(0x02)|0x01 );
if(ChipID == TW9908CID){
WriteTW99( 0x36, 0x01 );
WriteTW99( 0x3c, 0xc0 );
WriteTW99( 0x3d, 0x40 );
}else{
WriteTW99( 0x3c, 0x01 );
WriteTW99( 0x42, 0xc0 );
WriteTW99( 0x43, 0x40 );
}
}
void OSDInitial(void)
{
OsdTextInit();
OSDCmd1( 0x33 ); //
delay(10);
}
void MenuTableInitial(void)
{
// MD0 = 1;
MD1 = 1;
MD2 = 1;
MD3 = 1;
MD4 = 1;
MD5 = 1;
// MD6 = 1;
MD7 = 1;
}
void OSDColor(BYTE color)
{
OSDCmd2( 0xa3, color );
}
void OSDFlip(void)
{
OSDCmd1( 0x36 );
}
void OSDClear(void)
{
OSDCmd1( 0x36 );
}
void OSDLogo(void)
{
OSDInitial();
HEIGHT = WIDTH = 1;
OSDgotoxy(4, 4);
OSDColor( RED ); OSDPuts(">>");
OSDColor( GREEN ); OSDPuts("TW9908");
OSDColor( BLUE ); OSDPuts("<<");
HEIGHT = WIDTH = 0;
OSDgotoxy(9, 11);
OSDColor( RED | GREEN | BLUE );
OSDPuts("Techwell,Inc.");
OSDFlip();
}
void MenuTable(BYTE MI)
{
BYTE Color0,Color1,Color2,Color3,Color4,Color5,Color6;
// OSDCmd1( 0x33 ); //
// delay(10);
// OSDInitial();
HEIGHT = WIDTH = 0;
Color0 = Color1 = Color2 = Color3 = Color4 = Color5 = Color6 = (GREEN | BLUE);
switch(MI){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
case 2: Color2 = 0x00; break;
case 3: Color3 = 0x00; break;
case 4: Color4 = 0x00; break;
case 5: Color5 = 0x00; break;
case 6: Color6 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("MENU");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" Video In/Out...");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" Register Set...");
OSDgotoxy(4, 6); OSDColor( RED | Color2 ); OSDPuts(" Scaling...");
OSDgotoxy(4, 7); OSDColor( RED | Color3 ); OSDPuts(" Caption...");
OSDgotoxy(4, 8); OSDColor( RED | Color4 ); OSDPuts(" Reset...");
OSDgotoxy(4, 9); OSDColor( RED | Color5 ); OSDPuts(" Help...");
OSDgotoxy(4, 10); OSDColor( RED | Color6 ); OSDPuts(" Escape");
OSDFlip();
}
void InputTable(BYTE ITMI)
{
BYTE Color0,Color1,Color2,Color3,Color4;
// OSDInitial();
HEIGHT = WIDTH = 0;
Color0 = Color1 = Color2 = Color3 = Color4 = (GREEN | BLUE);
switch(ITMI){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
case 2: Color2 = 0x00; break;
case 3: Color3 = 0x00; break;
case 4: Color4 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Video I/O Type");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" Composite In");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" Super In");
OSDgotoxy(4, 6); OSDColor( RED | Color2 ); OSDPuts(" Component In");
OSDgotoxy(4, 7); OSDColor( RED | Color3 ); OSDPuts(" SCART In");
OSDgotoxy(4, 8); OSDColor( RED | Color4 ); OSDPuts(" Super Out...");
OSDFlip();
}
void RegSetTable(BYTE Value, BYTE DecData)
{
// OSDInitial();
HEIGHT = WIDTH = 0;
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Register Status...");
OSDgotoxy(4, 4); OSDColor( RED | GREEN | BLUE ); OSDPuts(" Index:0x");
OSDPutHex(Value);
OSDPuts(" Value:0x");
OSDPutHex(DecData);
// Printf("\r\nRegister Data:%02x", DecData); // debug
OSDFlip();
}
void ScaleTable(BYTE KindScale)
{
BYTE Color0,Color1,Color2;
// OSDInitial();
HEIGHT = WIDTH = 0;
Color0 = Color1 = Color2 = (GREEN | BLUE);
switch(KindScale){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
case 2: Color2 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Scaling Demo");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" Composite");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" Horizental");
OSDgotoxy(4, 6); OSDColor( RED | Color2 ); OSDPuts(" Vertical");
OSDFlip();
}
void CaptionTable(BYTE CpONOFF)
{
BYTE Color0,Color1;
OSDInitial();
HEIGHT = WIDTH = 0;
Color0 = Color1 = (GREEN | BLUE);
switch(CpONOFF){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Caption Mode");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" OFF");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" ON");
OSDFlip();
}
void InitialTable(BYTE InitialOnOff)
{
BYTE Color0,Color1;
// OSDInitial();
HEIGHT = WIDTH = 0;
Color0 = Color1 = (GREEN | BLUE);
switch(InitialOnOff){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Device Initializing");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" OFF");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" ON");
OSDFlip();
// InitRegisterSet(ChipID);
}
void DisInput(BYTE SelData)
{
// OSDInitial();
HEIGHT = WIDTH = 0;
// WriteTW99( 0x43, 0x40 );
delay(10);
OSDInitial();
OSDgotoxy(0, 1); OSDColor( RED | GREEN | BLUE);
switch(SelData){
case 0: OSDPuts("Composite"); break;
case 1: OSDPuts("Super"); break;
case 2: OSDPuts("Component"); break;
case 3: OSDPuts("SCART"); break;
default: break;
}
OSDFlip();
}
void ComositeInput(void)
{
// OSDInitial();
HEIGHT = WIDTH = 0;
OSDgotoxy(5, 4); OSDColor( RED | GREEN | BLUE); OSDPuts("Composite Input");
OSDgotoxy(5, 5); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x02(I): ->0x41");
OSDgotoxy(5, 6); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x14(I): ->0x5A");
OSDgotoxy(5, 7); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x3c(I): ->0x01");
OSDFlip();
}
void SuperInput(void)
{
// OSDInitial();
HEIGHT = WIDTH = 0;
OSDgotoxy(5, 4); OSDColor( RED | GREEN | BLUE); OSDPuts("Super Input");
OSDgotoxy(5, 5); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x02(I): ->0x55");
OSDgotoxy(5, 6); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x14(I): ->0x5A");
OSDFlip();
}
void ComponentInput(void)
{
// OSDInitial();
HEIGHT = WIDTH = 0;
OSDgotoxy(5, 4); OSDColor( RED | GREEN | BLUE); OSDPuts("Component Input");
OSDgotoxy(5, 5); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x02(I): ->0x6D");
OSDgotoxy(5, 6); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x14(I): ->0x7A");
OSDgotoxy(5, 7); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x3c(I): ->0x01");
OSDgotoxy(5, 8); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x42(I): ->0xC0");
OSDgotoxy(5, 9); OSDColor( RED | GREEN | BLUE); OSDPuts(" 0x88(A) 0x43(I): ->0x40");
OSDFlip();
}
void ScartInput(void)
{
// OSDInitial();
HEIGHT = WIDTH = 0;
OSDgotoxy(5, 4); OSDColor( RED | GREEN | BLUE); OSDPuts("SCART Input");
OSDFlip();
}
void SubRegSet(BYTE RegIndex)
{
HEIGHT = WIDTH = 0;
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Register Setting");
OSDgotoxy(4, 4); OSDColor( RED | GREEN | BLUE ); OSDPuts(" Index:0x");
OSDPutHex(TwoMenuIndex);
OSDgotoxy(4, 5); OSDColor( RED | GREEN | BLUE ); OSDPuts(" Value:0x");
OSDPutHex(OldOSDData);
OSDPuts("->0x");
OSDPutHex(RegIndex);
// Printf("\r\nOldOSDData:%02x RegIndex:%02x",OldOSDData,RegIndex); // debug
OSDFlip();
}
BYTE OSDWakeup(BYTE menulayer)
{
#ifdef OLDKEY
if((P0 & KeyValue) != KeyValue){
#elif defined NEWKEY
if((P2 & KeyValue) != KeyValue){
#endif
if(menulayer == 0){
// WriteTW99( 0x43, 0x40 );
delay(10);
OSDLogo();
}
return 1;
}
}
void DisScale(BYTE DisMenuIndex)
{
HEIGHT = WIDTH = 0;
// OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("C.Scale Setting");
OSDgotoxy(4, 4); OSDColor( RED | GREEN | BLUE ); OSDPuts(" Index:0x");
OSDPutHex(TwoMenuIndex);
OSDgotoxy(4, 5); OSDColor( RED | GREEN | BLUE ); OSDPuts(" Value:0x");
OSDPutHex(OldOSDData);
OSDPuts("->0x");
OSDPutHex(DisMenuIndex);
// Printf("\r\nOldOSDData:%02x DisMenuIndex:%02x",OldOSDData,DisMenuIndex); // debug
OSDFlip();
}
void OSDHelp(void)
{
BYTE Color0;
HEIGHT = WIDTH = 0;
Color0 = (GREEN | BLUE);
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Firmware");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" Rev: ");
OSDPutHex(FWVER/0x100);
OSDPuts(".");
OSDPutHex(FWVER%0x100);
OSDFlip();
}
void KindDevice(BYTE DeviceType) //$11
{
BYTE Color0,Color1,Color2;
HEIGHT = WIDTH = 0;
Color0 = Color1 = Color2 = (GREEN | BLUE);
switch(DeviceType){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
case 2: Color2 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Device Type");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" Decoder");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" Encoder");
OSDgotoxy(4, 6); OSDColor( RED | Color2 ); OSDPuts(" FPGA");
OSDFlip();
}
void SuperOut(BYTE SuperOnOff)
{
BYTE Color0,Color1;
// OSDInitial();
HEIGHT = WIDTH = 0;
Color0 = Color1 = (GREEN | BLUE);
switch(SuperOnOff){
case 0: Color0 = 0x00; break;
case 1: Color1 = 0x00; break;
default: break;
}
OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("Super Control");
OSDgotoxy(4, 4); OSDColor( RED | Color0 ); OSDPuts(" Component Out");
OSDgotoxy(4, 5); OSDColor( RED | Color1 ); OSDPuts(" Super Out");
OSDFlip();
}
void OSDDisplay(BYTE menulayer, BYTE menuindex, BYTE osddata)
{
// Printf("\r\nLayer:%02x, Index:%02x, OldIndex:%2x",menulayer,menuindex,oldmenuindex); // debug
// Printf("\r\nOneMenuIndex:%02x TwoMenuIndex:%02x",OneMenuIndex,TwoMenuIndex);
switch(menulayer){
case 0: OSDLogo(); break;
case 1: MenuTable(menuindex); break;
case 2:
switch(OneMenuIndex){
case 0: InputTable(menuindex); break;
// case 1: RegSetTable(menuindex, osddata); break;
case 1: KindDevice(menuindex); break; //$11
case 2: ScaleTable(menuindex); break;
case 3: CaptionTable(menuindex); break;
case 4: InitialTable(menuindex); break;
case 5: OSDHelp(); break;
case 6: break;
default: break;
}
break;
case 3:
switch(OneMenuIndex){
case 0:
switch(TwoMenuIndex){//oldmenuindex){
case 0: ComositeInput(); break;
case 1: SuperInput(); break;
case 2: ComponentInput(); break;
case 3: ScartInput(); break;
case 4: SuperOut(menuindex); break;
default: break;
}
break;
// case 1: SubRegSet(menuindex); break;
case 1: RegSetTable(menuindex, osddata); break; //$11
case 2:
switch(TwoMenuIndex){
case 0x0e: OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("C.Scale Setting");
DisScale(menuindex); break;
case 0x0f: OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("H.Scale Setting");
DisScale(menuindex); break;
case 0x0d: OSDgotoxy(4, 3); OSDColor( GREEN ); OSDPuts("V.Scale Setting");
DisScale(menuindex); break;
default: break;
}
break;
default: break;
}
break;
case 4:
switch(OneMenuIndex){
case 1: SubRegSet(menuindex); break;
default: break;
}
break;
default: break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -