?? teletext.c
字號:
//=============================================================================
// Teletext
//=============================================================================
#include "Config.h"
#include "reg.h"
#include "typedefs.h"
#include "I2C.h"
#include "main.h"
#include "debug.h"
#include "printf.h"
#include "TeleText.h"
#include "RegMap.h"
#ifdef SUPPORT_TELETEXT
static IDATA BYTE TTToggle = 0x00; // x0: display on x1: display off
// 0x: full mode 1x: FB mode
static bit f_TeleTextOn = 0; // 0:OFF 1:ON
bit IsTeleTextOn(void)
{
return f_TeleTextOn;
}
//=============================================================================
// Command
//=============================================================================
#if TELETEXTDEVICE == PHILIPS_TTX
void TeleTextHPol(void)
{
BYTE Vdata[4];
Vdata[0] = 0xb3;
Vdata[1] = 0xc1;
Vdata[2] = 0xfd;
Vdata[3] = 0x02;
WriteI2CnLong(TEXTAddress, Vdata, 4);
}
void TeleTextVPol(void)
{
BYTE Vdata[4];
Vdata[0] = 0xb3;
Vdata[1] = 0xc1;
Vdata[2] = 0xfe;
Vdata[3] = 0x01;
WriteI2CnLong(TEXTAddress, Vdata, 4);
}
void TeleTextCancel(void)
{
BYTE Vdata[1];
TTToggle ^= 0x01;
if ( TTToggle & 0x01 ) Vdata[0] = 0x27;
else if( TTToggle & 0x02 ) Vdata[0] = 0x3e;
else Vdata[0] = 0x3f;
WriteI2CnLong(TEXTAddress, Vdata, 1);
#ifdef DEBUG_TELETEXT
dPrintf("\r\nTeletext Cancel: Toggle : %2x",(WORD)TTToggle);
#endif
}
void TeleTextPos(BYTE Hpos, BYTE Vpos)
{
BYTE Vdata[4];
Vdata[0] = 0x48;
Vdata[1] = 0x08;
Vdata[2] = Hpos;
Vdata[3] = Vpos;
WriteI2CnLong(TEXTAddress, Vdata, 4);
}
void TeletextMix(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3e;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextONOFF(void)
{
BYTE Vdata[1];
if( !f_TeleTextOn )
{
f_TeleTextOn = 1;
SEL_MIX = 1;
WriteDecoder(INFORM, ReadDecoder(INFORM) | 0x01 ); // 02: xxxx xxx1 Select RGB1
WriteDecoder(ACNTL, ReadDecoder(ACNTL) & 0xfe ); // 06: xxxx xxx0 normal FB
WriteDecoder(SCbGAIN, ReadDecoder(SCbGAIN) | 0x80 ); // 3d: 1xxx xxxx RGB H Sharpness On
WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) & 0x7f ); // 3d: 0xxx xxxx normal DAC H sync
WriteDecoder(RGBCONTROL, 0x00 ); // 36: 0000 0001 RGB ADC Power On, FB Gain:100%
WriteDecoder(RGBMISC, 0x05 ); // 39: 0000 0101 Select RGB, FB control
TTToggle ^= 0x02;
//if( TTToggle & 0x02 ) Vdata[0] = 0x3e; // mix
//else
Vdata[0] = 0x3f;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
else // TTX OFF
{
f_TeleTextOn = 0;
SEL_MIX = 0;
TTToggle ^= 0x02;
Vdata[0] = 0x03;
WriteI2CnLong(TEXTAddress, Vdata, 1);
switch( GetInputSelection() ) {
case SCART:
case COMPOSITE:
case SVIDEO:
case TV:
WriteDecoder(ACNTL, ReadDecoder(ACNTL) | 0x01 ); // 06: xxxx xxx1 pdwon FB
WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) | 0x80 ); // 3d: 1xxx xxxx pdwon DAC H sync
WriteDecoder(RGBCONTROL, 0xe3 ); // 3f: 0000 0001 main mode
break;
case COMPONENT:
break;
}
}
//#ifdef DEBUG_TELETEXT
Printf("\r\nTeletext ON: Toggle : %2x",(WORD)TTToggle);
//#endif
}
/*void TeleTextOFF(void)
{
BYTE Vdata[1];
f_TeleTextOn = 0;
SEL_MIX = 0;
TTToggle ^= 0x02;
Vdata[0] = 0x03;
WriteI2Cn(TEXTAddress, Vdata, 1);
switch( GetInputSelection() ) {
case COMPOSITE:
case SVIDEO:
case TV:
WriteDecoder(ACNTL, ReadDecoder(ACNTL) | 0x01 ); // 06: xxxx xxx1 pdwon FB
WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) | 0x80 ); // 3d: 1xxx xxxx pdwon DAC H sync
WriteDecoder(RGBCONTROL, 0xe3 ); // 3f: 0000 0001 main mode
break;
case COMPONENT:
break;
case SCART:
break;
}
}
*/
void TeleTextRed(void)
{
BYTE Vdata[1];
Vdata[0] = 0x20;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextGreen(void)
{
BYTE Vdata[1];
Vdata[0] = 0x21;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextYellow(void)
{
BYTE Vdata[1];
Vdata[0] = 0x22;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextCyan(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3d;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextHold(void)
{
BYTE Vdata[1];
Vdata[0] = 0x25;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*
void TeleTextTime(void)
{
BYTE Vdata[1];
Vdata[0] = 0x07;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextSize(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3a;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextIndex(void)
{
BYTE Vdata[1];
Vdata[0] = 0x28;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*
void TeleTextMode(void)
{
BYTE Vdata[1];
Vdata[0] = 0x29;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextPageUp(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3b;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextPageDown(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3c;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
//=============================================================================
//
//=============================================================================
void TeleTextInit(void)
{
BYTE CODE ReData[8] = { 0x00, 0x26, 0x0f, 0x8f, 0x95, 0x0a, 0x00, 0x00 };
TeleTextHPol(); delay(1);
TeleTextVPol(); delay(1);
TeleTextPos(0x05, 0x2a);
WriteI2CnLong(TEXTAddress, ReData, 8);
}
void TeleTextNumber(BYTE num)
{
BYTE buf;
BYTE Vdata[1];
buf = ToNumber(num);
if( buf == 0xff ) return;
if(buf == 0)
Vdata[0] = 0x39;
else
Vdata[0] = (buf | 0x30) - 0x01;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
#else // ET_TTX
void TeleTextCancel(void)
{
BYTE Vdata[1];
/* TTToggle ^= 0x01;
if ( TTToggle & 0x01 ) Vdata[0] = 0x27;
else if( TTToggle & 0x02 ) Vdata[0] = 0x3e;
else Vdata[0] = 0x3f;
*/
Vdata[0] = 0x10;
WriteI2CnLong(TEXTAddress, Vdata, 1);
#ifdef DEBUG_TELETEXT
dPrintf("\r\nTeletext Cancel: Toggle : %2x",(WORD)TTToggle);
#endif
}
void TeletextMix(void)
{
BYTE Vdata[1];
Vdata[0] = 0x73;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextONOFF(void)
{
BYTE Vdata[1];
if( !f_TeleTextOn )
{
f_TeleTextOn = 1;
SEL_MIX = 1;
//
WriteDecoder(INFORM, ReadDecoder(INFORM) | 0x01 ); // 02: xxxx xxx1 Select RGB1
WriteDecoder(ACNTL, ReadDecoder(ACNTL) & 0xfe ); // 06: xxxx xxx0 normal FB
WriteDecoder(SCbGAIN, ReadDecoder(SCbGAIN) | 0x80 ); // 3d: 1xxx xxxx RGB H Sharpness On
WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) & 0x7f ); // 3d: 0xxx xxxx normal DAC H sync
WriteDecoder(RGBCONTROL, 0x00 ); // 36: 0000 0001 RGB ADC Power On, FB Gain:100%
WriteDecoder(RGBMISC, 0x05 ); // 39: 0000 0101 Select RGB, FB control
//
TTToggle ^= 0x02;
//if( TTToggle & 0x02 ) Vdata[0] = 0x3e; // mix
//else
Vdata[0] = 0x71;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
else // TTX OFF
{
f_TeleTextOn = 0;
SEL_MIX = 0;
TTToggle ^= 0x02;
Vdata[0] = 0x70;
WriteI2CnLong(TEXTAddress, Vdata, 1);
switch( GetInputSelection() ) {
case SCART:
case COMPOSITE:
case SVIDEO:
case TV:
WriteDecoder(ACNTL, ReadDecoder(ACNTL) | 0x01 ); // 06: xxxx xxx1 pdwon FB
WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) | 0x80 ); // 3d: 1xxx xxxx pdwon DAC H sync
WriteDecoder(RGBCONTROL, 0xe3 ); // 3f: 0000 0001 main mode
break;
case COMPONENT:
break;
}
}
#ifdef DEBUG_TELETEXT
Printf("\r\nTeletext ON: Toggle : %2x",(WORD)TTToggle);
#endif
}
void TeleTextRed(void)
{
BYTE Vdata[1];
Vdata[0] = 0x38;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextGreen(void)
{
BYTE Vdata[1];
Vdata[0] = 0x39;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextYellow(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3a;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextCyan(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3b;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextHold(void)
{
BYTE Vdata[1];
Vdata[0] = 0x1a;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*void TeleTextTime(void)
{
BYTE Vdata[1];
Vdata[0] = 0x07; // ???
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextSize(void)
{
BYTE Vdata[1];
Vdata[0] = 0x13;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextIndex(void)
{
BYTE Vdata[1];
Vdata[0] = 0x3c;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*
void TeleTextMode(void)
{
BYTE Vdata[1];
Vdata[0] = 0x29; // ???
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextPageUp(void)
{
BYTE Vdata[1];
Vdata[0] = 0x16;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
void TeleTextPageDown(void)
{
BYTE Vdata[1];
Vdata[0] = 0x15;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
//=============================================================================
//
//=============================================================================
void TeleTextInit(void)
{
}
void TeleTextNumber(BYTE num)
{
BYTE buf;
BYTE Vdata[1];
buf = ToNumber(num);
if( buf == 0xff ) return;
Vdata[0] = buf | 0x20;
WriteI2CnLong(TEXTAddress, Vdata, 1);
}
#endif
#endif // SUPPORT_TELETEXT
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -