📄 tft.c
字号:
//for tft control for portable
#include "winav.h"
// Micky2.80p, declare malloc.h into platform.h
#include "hal.h"
#include "servo.h"
#include "input.h"
#include "chips.h"
#ifdef _WINDVD
#include "setup.h"
#include "navigate.h"
#include "cell.h"
#include "dvdinfo.h" // ** TCH0.27;
#endif // _WINDVD
#include "cc.h"
#include "isr.h"
#include "osd.h"
#include "linear.h"
#include "thumb.h"
#include "sysdebug.h" //CoCo.sd
#include "cdinfo.h"
#include "utl.h"
// Micky1.21, CodeReview
// to be removed next time
///BIT __btFreeze;
// LLY.274, rename all MP3 relative info. because module name has changed !!
#ifndef NO_MP3
// MP3DISC
#include "fmanager.h" // "mp3.h"
//DVD016-1BIT __btMP3Disc=FALSE;
#endif
#include "tft.h"
#ifndef TFT_OSD_CONTROLED_BY_VX1818
WORD code aNDBright[] = {1, CHAR_N_Bri};
WORD code aNDContrast[] = {1, CHAR_N_Contr};
WORD code aNDColor[] = {1, CHAR_N_Color};
WORD code aNDReset[] = {1, CHAR_N_Reset};
#endif
#define TFT_H_START_GAP 8
#define TFT_V_START_GAP 8
#define TFT_MENU_TOP_H_START 152
#define TFT_MENU_TOP_V_START 180
#define TFT_BAR_WIDTH 172
#define TFT_BAR_HEIGHT 16
#define TFT_BAR_SLIDE_WIDTH 8
#define TFT_BAR_V_GAP 40
#define TFT_BAR_START_H_POS TFT_MENU_TOP_H_START+TFT_H_START_GAP+32+TFT_H_START_GAP
#define TFT_BAR_START_V_POS TFT_MENU_TOP_V_START+TFT_V_START_GAP+(32-TFT_BAR_HEIGHT)/2
//#define TFT_MENU_TOP_V_START 100
#define TFT_MENU_BOT_H_END TFT_MENU_TOP_H_START+TFT_H_START_GAP*3+32*2+TFT_BAR_WIDTH
#define TFT_MENU_BOT_V_END TFT_MENU_TOP_V_START+TFT_V_START_GAP*2+TFT_BAR_V_GAP*4
#define TFT_RESET_H_POS TFT_MENU_TOP_H_START+32*5
#define TFT_RESET_V_POS TFT_MENU_TOP_V_START+TFT_BAR_V_GAP*3+TFT_V_START_GAP
#define TFT_TOTAL_LEVELS 16 // 0~15
#define TFT_BAR_SLIDE_GAP ((TFT_BAR_WIDTH-4-TFT_BAR_SLIDE_WIDTH)/TFT_TOTAL_LEVELS)
#define VX1818_ID 0xD8
BYTE __bTftSize;
BYTE __bTftRevise;
BYTE __bTftSetupMode;
BYTE __bTftBright;
BYTE __bTftColor;
BYTE __bTftContrast;
BYTE __bTftTemp1,__bTftTemp2;
DWORD __dwTftCountTime;
BYTE __bTftTvTypePrev=0xff;
BYTE __bTftLowBatt=FALSE;
DWORD __dwTtfLowBattTime=0;
BYTE __bTftLowBattSleep=FALSE;
#define TFT_HIGHLIGHT 0x10 // 1 : highlight 0: blink
#define TFT_FOREGROUND 0x08 // 1: foregroudn 0: background
#define TFT_BATTERY 0x04 // 1: batter low, blink the battery info 0: don't show battery info
BYTE bTFT_Status; // for gloabal use varablei
DWORD __dwDelayCount;
// if use TFT Driver's OSD
#define OSD_CMD_ADDRESS 0x50
#define OSD_CMD_DATA 0x51
#define OSD_ALPHA_ENABLE 0x52
#define OSD_BLACK_RATE 0x53
#define OSD_TITLE_CHAR_LEN 0x54
#define OSD_TITLE_HL_START 0x55
#define OSD_TITLE_HL_END 0x56
#define OSD_TTTLE_BLINK_START 0x57
#define OSD_TTTLE_BLINK_END 0x58
#define OSD_TITLE_HOR_INI_POS 0x59
#define OSD_TITLE_VER_INI_POS 0x5a
#define OSD_TITLE_BG_FG_COLOR 0x5b
#define OSD_TITLE_HL_COLOR 0x5c
#define OSD_CONTENT_HOR_LEN 0x5d
#define OSD_CONTENT_VER_LEN 0x5e
#define OSD_CONTENT_CMD_START_ADDR 0x5f
#define OSD_CONTENT_HOR_INI_POS 0x60
#define OSD_CONTENT_VER_INI_POS 0x61
#define OSD_CONTENT_HL_VER_START_POS 0x62
#define OSD_CONTENT_HL_VER_END_POS 0x63
#define OSD_CONTENT_HL_HOR_START_POS 0x64
#define OSD_CONTENT_HL_HOR_END_POS 0x65
#define OSD_CONTENT_BLINK_VER_START 0x66
#define OSD_CONTENT_BLINK_VER_STOP 0x67
#define OSD_CONTENT_BLINK_HOR_START 0x68
#define OSD_CONTENT_BLINK_HOR_STOP 0x69
#define OSD_CONTENT_BG_FG_COLOR 0x6a
#define OSD_CONTENT_HL_BG_FG_COLOR 0x6b
#define OSD_BOTTOM_HOR_LENGHT 0x6c
#define OSD_BOTTOM_CMD_START_ADDR 0x6d
#define OSD_BOTTOM_HOR_INI_POS 0x6e
#define OSD_BOTTOM_VER_INI_POS 0x6f
#define OSD_BOTTOM_HL_START 0x70
#define OSD_BOTTOM_HL_STOP 0x71
#define OSD_BOTTOM_BLINK_START 0x72
#define OSD_BOTTOM_BLINK_STOP 0x73
#define OSD_BOTTOM_BG_FG_COLOR 0x74
#define OSD_BOTTOM_HL_BG_FG_COLOR 0x75
//#define osd38 0x76
//#define osd39 0x77
//#define osd40 0x78
//#define osd41 0x79
#define OSD_WRITE_DES_INITIAL_ADDR 0xfd // bit 6 5 4 destination bit 1 0 initial address[ 9:8]
#define OSD_INITIAL_ADDR 0xfe // initial address [7:0]
#define OSD_WRITE_DATA 0xff // the data to be writed
#define OSD_DEST_NONE 0
#define OSD_DEST_COMMAND_MEM 1
#define OSD_DEST_FONT_MEM 2
#define BLOCK_TITLE 1
#define BLOCK_CONTENT 2
#define BLOCK_BOTTOM 3
// color defnition
#define BLACK 0x00
#define BLUE 0x01
#define GREEN 0x02
#define CYAN 0x03
#define RED 0x04
#define FUCHSIA 0x05
#define YELLOW 0x06
#define WHITE 0x07
#define TRANSPORT 0x08
#define ROYALBLUE 0x09
#define MEDIUMAQUAMARINE 0x0a
#define LIGHTGREEN 0x0b
#define ORANGE 0x0c
#define HOTPINK 0x0d
#define SILVER 0x0e
#define GRAY 0x0f
// font code = the total font number + each font index
#define USING_SYMBOL
#ifdef USING_SYMBOL
BYTE code aBright[] = {2,0x69,0x6a};
BYTE code aContrast[] = {2,0x6b,0x6c};
BYTE code aColor[] = {2,0x6d,0x6e};
BYTE code aReset[] = {5,0x1b,0x0e,0x1c,0x0e,0x1d};
BYTE code aBattery[] = {4,0x58,0x59,0x59,0x6c};
BYTE code aAv[] = {2,0x0a,0x1f};// for coby 0629
#else // use text info
BYTE code aBright[] = {10,0x0b,0x1b,0x12,0x10,0x11,0x1d,0x17,0x0e,0x1c,0x1c};
BYTE code aContrast[] = {8,0x0c,0x18,0x17,0x1d,0x1b,0x0a,0x1c,0x1d};
BYTE code aColor[] = {5,0x0c,0x18,0x15,0x18,0x1b};
BYTE code aReset[] = {5,0x1b,0x0e,0x1c,0x0e,0x1d};
BYTE code aBattery[] = {16,0x0b,0x24,0x37,0x37,0x28,0x35,0x3c,0x57,0x0d,0x28,0x33,0x2f,0x28,0x37,0x28,0x27};//Battery Depleted
#endif
BYTE __bTFT_HW_Switch_OnOff;
//#ifdef SUPPORT_AVIN //yfxiao1215,for pdv288
BYTE __bTftAvSwitchStatus=0;
BYTE __bTftAvSwitchFlag=0;
DWORD __dwTftAvSwitchTime;
BYTE __bAvInStatus;
BYTE __bAvINPowerKeyEnable=TRUE;
BYTE __bTtftVChannel;
BYTE __bTftKeyAvInEnable=TRUE;
DWORD __dwOsdAVINSHowTime=0;
BYTE __bOSDAVINShowFlag=0;
//#endif
BYTE bTftTmp1,bTftTmp2;
BYTE bTFT_TVMode=0xff;
BYTE __bTftTvModeChangeFlag=0;
DWORD __dwCountTFT;
BYTE __bTtfKeyPowerFlag=0;
#ifdef SUPPORT_TVMODE_AUTO_DETECT
DWORD __dwTftTVModeDetectTime=0;
#endif
void TFT_HW_Switch_ON_OFF(BYTE bOn)
{
if(bOn)
{
P5CON|=0x02;
P5&=0xfd;
// I2C_VX1818_Write(0x42,0x00);
__bTFT_HW_Switch_OnOff=1;
}
else
{
P5CON|=0x02;
P5|=0x02;
// I2C_VX1818_Write(0x42,0xA0);
__bTFT_HW_Switch_OnOff=0;
}
}
void _TFT_PowerOn_Initial_Variable(void)
{
__bTftSize=TFT_TVTYPE_WIDE;
__bTftRevise=TFT_REVISE_NORMAL;
__bTftSetupMode=TFT_SETUP_NULL;
__bTftTvTypePrev=__bTftSize;
__dwCountTFT=0;
#ifdef SUPPORT_AVIN
__bAvInStatus=DVD_OUTPUT_STATUS;
__bTftAvSwitchStatus=DVD_OUTPUT_STATUS;
#endif
}
void _TFT_PowerOn_Initial(void)
{
// __sbTftreset=1;
// __sbTftreset=1;
#ifndef SERIAL_DEBUG
__sbTftud =0;
__sbTftlr =1;
#else
P5CON|=0x01;//set p5.0
P5CON|=0x04;//set p5.2
P5|=0x04; //set p5.2 to high//LR
// for(__bTftTemp1=0;__bTftTemp1<50;__bTftTemp1++){}
P5&=0xfe; //set p5.0 to low//UD
#endif
#ifdef SUPPORT_AVIN
__sbAvIn=0;
#endif
// if(__bTftSwd == 0xFF) // Power on reset
I2C_VX1818_Write(0x01,0x5a);
//turn oN HIGH V of TFT PANEL
I2C_VX1818_Write(0x05,0xd9);
I2C_VX1818_Write(0x06,0x02);
I2C_VX1818_Write(0xc0,0xff);
I2C_VX1818_Write(0xc1,0xdd);
I2C_VX1818_Write(0x3b,0x03);
//I2C_VX1818_Write(0x06,0x28);
I2C_VX1818_Write(0x06,0x30);
I2C_VX1818_Write(0x02,0x07); //For S-Video
//C_VX1818_Write(0x02,0x01);
// GDI_OUTPUT_TEXT(10, 15, BatterLow);
//I2C_VX1818_Write(0x06,0x68);
I2C_VX1818_Write(0x06,0x68);
I2C_VX1818_Write(0x04,0x7a);
I2C_VX1818_Write(0x04,0x79);
I2C_VX1818_Write(0x04,0x78);
I2C_VX1818_Write(0x04,0x77);
// I2C_VX1818_Write(0x04,0x76);
I2C_VX1818_Write(0x48,0x01);
//I2C_VX1818_Write(0x06,0x01);
I2C_VX1818_Write(0x48,0x02);
//I2C_VX1818_Write(0x06,0x02);
I2C_VX1818_Write(0x11,0x65);
I2C_VX1818_Write(0x12,0x05);//yhtang_1101
I2C_VX1818_Write(0xa0,0x0);
I2C_VX1818_Write(0xa1,0x0);
I2C_VX1818_Write(0xa2,0x0);
//I2C_VX1818_Write(0x07,0x0a);
I2C_VX1818_Write(0x07,0xCA);
I2C_VX1818_Write(0x7A,0x98);
//I2C_VX1818_Write(0xb1,0x0);
I2C_VX1818_Write(0xb1,0x23);
//I2C_VX1818_Write(0xb2,0x0);
I2C_VX1818_Write(0xb2,0x23);
//I2C_VX1818_Write(0xb3,0x0);
I2C_VX1818_Write(0xb3,0x28);
I2C_VX1818_Write(0xb4,0x0);
I2C_VX1818_Write(0xb5,0x0);
I2C_VX1818_Write(0xb6,0x0);
//I2C_VX1818_Write(0xb7,0x0);
//I2C_VX1818_Write(0xb8,0x0);
//I2C_VX1818_Write(0xb9,0x0);
I2C_VX1818_Write(0xb7,0x23);
I2C_VX1818_Write(0xb8,0x23);
I2C_VX1818_Write(0xb9,0x28);
I2C_VX1818_Write(0xba,0x0);
I2C_VX1818_Write(0xbb,0x0);
I2C_VX1818_Write(0xbc,0x0);
I2C_VX1818_Write(0x3a,0x08);
I2C_VX1818_Write(0x3b,0xfb);
I2C_VX1818_Write(0x3c,0x9b);
I2C_VX1818_Write(0xc1,0x78);
I2C_VX1818_Write(0x22,0x11);
// Will add read 24C02 value.
_TFT_EpromData(TFT_READ_EPROM);
I2C_VX1818_Write(0x1E,(64+8*(__bTftBright-TFT_EPROM_MIN_BRIGHT)));
I2C_VX1818_Write(0x1f,(64+8*(__bTftContrast-TFT_EPROM_MIN_BRIGHT)-32));
I2C_VX1818_Write(0x20,(64+8*(__bTftColor-TFT_EPROM_MIN_BRIGHT)));
I2C_VX1818_Write(0x21,0x60);//hue adjustment
I2C_VX1818_Write(0x2f,0x20);//sharpness begin
I2C_VX1818_Write(0x30,0x0d);
I2C_VX1818_Write(0x31,0x1d);
I2C_VX1818_Write(0x32,0xff);
I2C_VX1818_Write(0x2e,0x96);//sharpness end
_TFT_Set_TvMode(__bMPEGVideoMode);
#ifdef TFT_OSD_CONTROLED_BY_VX1818
VX1818_OSD_SetAddr(BLOCK_CONTENT,0x20);
VX1818_OSD_SetAddr(BLOCK_BOTTOM, 0xb0);
//VX1818_OSD_Enable(0x00); // first off all block TFT OSD //yhtang_0803
VX1818_OSD_SetBlink(0x0f);
VX1818_OSD_SetAlpha(0x0d);
VX1818_OSD_SetSize(BLOCK_TITLE,0x10,0x01); // 06 01
VX1818_OSD_SetSize(BLOCK_CONTENT, 0x14, 0x04); // 10 07
VX1818_OSD_SetPos(BLOCK_TITLE, 0x20, 0x07); // 90->10
VX1818_OSD_SetPos(BLOCK_CONTENT, 0x40, 0x10); // 80 -> 10
bTFT_Status |= TFT_FOREGROUND; bTFT_Status &= ~TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_CONTENT, WHITE);
bTFT_Status &= ~TFT_FOREGROUND; bTFT_Status &= ~TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_CONTENT, ROYALBLUE);
bTFT_Status |= TFT_FOREGROUND; bTFT_Status |= TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_CONTENT, ORANGE);
bTFT_Status &= ~TFT_FOREGROUND; bTFT_Status |= TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_CONTENT, ROYALBLUE);
TFT_OSD_Initial();//yhtang_0719
#endif
}
void TFT_MUTE_ON(BYTE bMute)
{
if(bMute)
{
P5CON|=0x08;
P5&=0xf7;
#ifdef YHTANG_DEBUG
_printf("\n mute on");
#endif
}
else
{
P5CON|=0x08;
P5|=0x08;
#ifdef YHTANG_DEBUG
_printf("\n mute off");
#endif
}
}
//************************************
void TFT_Driver_AV_Switch(BYTE bAvIn)
{
#ifdef SUPPORT_AVIN
__bTftAvSwitchFlag=1;
__dwTftAvSwitchTime=__dwCountSystem;
TFT_MUTE_ON(TRUE);
if(!bAvIn) //switch to av in
{
UTL_DelayTime(COUNT_500_MSEC, FALSE);
__sbAvIn=0;
#ifdef YHTANG_DEBUG
_printf("\n p1.7 is low");
#endif
TFT_Driver_Write(0x02,0x07); //For S-Video for coby
TFT_Driver_Write(0x01,0xa5); //For S-Video for yashi
UTL_DelayTime(COUNT_50_MSEC, FALSE);
TFT_Driver_Write(0x06,0x30); //For S-Video for yashi
TFT_Driver_Write(0x06,0x68);
TFT_Driver_Write(0x04,0x7a);
TFT_Driver_Write(0x04,0x79);
TFT_Driver_Write(0x04,0x78);
TFT_Driver_Write(0x04,0x77);
// TFT_Driver_Write(0x04,0x76);
__bTftAvSwitchStatus=DVD_OUTPUT_STATUS;
VX1818_OSD_DisEnable(0x04);
__dwOsdAVINSHowTime=0;
__bOSDAVINShowFlag=0;
}
else //switch to s
{
UTL_DelayTime(COUNT_500_MSEC, FALSE);
__sbAvIn=1;
#ifdef YHTANG_DEBUG
_printf("\n p1.7 is high");
#endif
TFT_Driver_Write(0x02,0x01); //FOR CVBS INPUT for coby
TFT_Driver_Write(0x01,0xa5); //For S-Video for yashi
UTL_DelayTime(COUNT_50_MSEC, FALSE);
TFT_Driver_Write(0x06,0x30);
TFT_Driver_Write(0x06,0x70);
TFT_Driver_Write(0x04,0x7a);
TFT_Driver_Write(0x04,0x79);
TFT_Driver_Write(0x04,0x78);
TFT_Driver_Write(0x04,0x77);
// TFT_Driver_Write(0x04,0x76);
__bTftAvSwitchStatus=AV_IN_STATUS;
UTL_DelayTime(COUNT_500_MSEC, FALSE);
TFT_MUTE_ON(FALSE);
TFT_OSD_SHOW_AVIN();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -