📄 main.c
字号:
if(SelectedSW == 2 || SelectedSW == 3)
ChangeInputSW(SelectedSW);
if(SelectedSW == 0)
Printf("\r\nComposite Input");
else if(SelectedSW == 1)
Printf("\r\nS-Video Input");
}
// Long Key
/* else {
Printf("\r\n---------> Long Key");
CCFlag = !CCFlag;
CaptionOn(CCFlag);
}
*/
while( !(P4 & 0x04) );
}
}
/*=========================================================================*/
/* Initialize Register Set */
/*=========================================================================*/
void InitRegisterSet(BYTE id)
{
BYTE buf;
if( SQ ) {
#ifdef ADV717X
switch(EncoderID){
case 0x54: ptr_ENC_NTSC = ADV7176_NTSC_DataSet; ptr_ENC_PAL = ADV7176_PAL_DataSet; break;
case 0xd4: ptr_ENC_NTSC = ADV7175_NTSC_DataSet; ptr_ENC_PAL = ADV7175_PAL_DataSet; break;
default: Printf("\r\n=====> This chip is not defined ! (%02x)\r\n", EncoderID );
}
#endif //ADV717X
#ifdef SAA71XX
ptr_ENC_NTSC = SAA7129_NTSC_DataSet;
ptr_ENC_PAL = SAA7129_PAL_DataSet;
#endif //SAA71XX
switch( id ) {
case TW9908AID: ptr_NTSC = TW9908A_CCIR_NTSC_DataSet; ptr_PAL = TW9908A_CCIR_PAL_DataSet; break;
case TW9908CID: ptr_NTSC = TW9908C_CCIR_NTSC_DataSet; ptr_PAL = TW9908C_CCIR_PAL_DataSet; break;
case TW9910AID: Puts("\r\nTW9910A detected!!!\r\n");
ptr_NTSC = TW9910A_CCIR_NTSC_DataSet; ptr_PAL = TW9910A_CCIR_PAL_DataSet; break;
case TW9910BID: Puts("\r\nTW9910A detected!!!\r\n");
ptr_NTSC = TW9910B_CCIR_NTSC_DataSet; ptr_PAL = TW9910B_CCIR_PAL_DataSet; break;
default:
Printf("\r\n=====> This chip is not defined ! (%02x)\r\n", id );
NotDefineID = 1;
break;
}
}
else {
#ifdef ADV717X
switch(EncoderID){
case 0x54: ptr_ENC_NTSC = ADV7176_SQ_NTSC_DataSet; ptr_ENC_PAL = ADV7176_SQ_PAL_DataSet; break;
case 0xd4: ptr_ENC_NTSC = ADV7175_SQ_NTSC_DataSet; ptr_ENC_PAL = ADV7175_SQ_PAL_DataSet; break;
default: Printf("\r\n=====> This chip is not defined ! (%02x)\r\n", EncoderID );
}
#endif //ADV717X
#ifdef SAA71XX
ptr_ENC_NTSC = SAA7129_NTSC_DataSet;
ptr_ENC_PAL = SAA7129_PAL_DataSet;
#endif //SAA71XX
switch( id ) {
case TW9908AID: ptr_NTSC = TW9908A_SQ_NTSC_DataSet; ptr_PAL = TW9908A_SQ_PAL_DataSet; break;
case TW9908CID: ptr_NTSC = TW9908C_SQ_NTSC_DataSet; ptr_PAL = TW9908C_SQ_PAL_DataSet; break;
default:
Printf("\r\n=====> This chip is not defined ! (ID:%02x)\r\n", id );
NotDefineID = 1;
break;
}
}
// Last_PAL_NTSC = PAL_NTSC;
if(!NotDefineID){
if( Last_PAL_NTSC ){
I2CDeviceSet( ptr_NTSC );
buf = ReadI2C(FPGA, 0x02);
buf = buf | 0x01;
MonWriteI2C(FPGA, 0x02, buf);
I2CDeviceSet( ptr_ENC_NTSC );
}
else {
I2CDeviceSet( ptr_PAL );
buf = ReadI2C(FPGA, 0x02);
buf = buf & 0xfe;
MonWriteI2C(FPGA, 0x02, buf);
I2CDeviceSet( ptr_ENC_PAL );
}
}
}
void DacPassFrame(BYTE PassFrame)
{
BYTE buf;
if(PassFrame == 1){
Puts("\r\nDAC Direct Pass Mode\r\n");
buf = ReadI2C(FPGA, 0x04);
WriteI2C(FPGA, 0x04, buf & 0x7f);
if(MaskScaleMode)
{
WriteI2C(TW99I2CAddress, 0x0d, 0x00);
WriteI2C(TW99I2CAddress, 0x0e, 0x11);
WriteI2C(TW99I2CAddress, 0x0f, 0x00);
MaskScaleMode = 0;
}
}else if(PassFrame == 2){
Puts("\r\nDAC Frame Buffering Mode\r\n");
buf = ReadI2C(FPGA, 0x04);
WriteI2C(FPGA, 0x04, buf | 0x80);
}
}
void ScalingMode()
{
if(MaskScaleMode != OldMaskScaleMode)
{
if(ReadTW99(0x0d) != 0x00 || ReadTW99(0x0e) != 0x11 || ReadTW99(0x0f) != 0x00)
{
WriteTW99( 0x19, ReadTW99(0x19) | 0x08 );
DacPassFrame(2);
}
else
{
WriteTW99( 0x19, ReadTW99(0x19) & 0xf7 );
DacPassFrame(1);
}
}
OldMaskScaleMode = MaskScaleMode;
}
void AutoDetectRegSet(){
#ifdef ADV717X
BYTE buf;
#endif //ADV717X
// StatusReg1 = ReadTW99(0x01); // read status register1 of decoder
if( OldDetAuto != DetAuto ) {
if( DetAuto ) Puts("\r\n===== Auto Detect Mode ======\r\n");
else Puts("\r\n===== Manual Register Set Mode ======\r\n");
OldDetAuto = DetAuto;
}
if( DetAuto ) {
StatusReg1 = ReadTW99(0x01); // read status register1 of decoder
//----- Check if video in or not
if( DetVideo != IsVideoIn(StatusReg1) ) {
DetVideo = IsVideoIn(StatusReg1);
OSDLockMode();
// Printf("\r\nDetVideo0:%02x PAL_NTSC0:%02x",DetVideo,PAL_NTSC);
}
//----- Check if Color system is changed or not
if( DetVideo ) {
if( (PAL_NTSC=GetColorSystem(StatusReg1)) != Last_PAL_NTSC ) {
Last_PAL_NTSC = PAL_NTSC;
BUSY = Last_PAL_NTSC;
if( Last_PAL_NTSC ){
delay(20);
buf = ReadI2C(FPGA, 0x02);
buf = buf | 0x01;
// MonWriteI2C(TW99I2CAddress, 0x70, 0x40);
WriteI2C(FPGA, 0x02, buf);
Printf("\r\n\r\n ===== NTSC ====== \r\n");
switch(ChipID){
case TW9910AID : I2CDeviceSet( TW9910A_NTSC ); break;
}
#ifdef ADV717X
if(EncoderID == 0x54)
I2CDeviceSet( ADV7176_NTSC_DataSet ); // P->N
else if(EncoderID == 0xd4)
I2CDeviceSet( ADV7175_NTSC_DataSet );
#elif defined SAA71XX //ADV717X
I2CDeviceSet( SAA7129_NTSC_DataSet );
#endif //SAA71XX
}
else{
delay(20);
buf = ReadI2C(FPGA, 0x02); // to PAL
buf = buf & 0xfe;
// MonWriteI2C(TW99I2CAddress, 0x70, 0xd4);
WriteI2C(FPGA, 0x02, buf);
Printf("\r\n\r\n ===== PAL ====== \r\n");
switch(ChipID){
case TW9910AID : I2CDeviceSet( TW9910A_PAL ); break;
}
#ifdef ADV717X
if(EncoderID == 0x54)
I2CDeviceSet( ADV7176_PAL_DataSet ); // N->P
else if(EncoderID == 0xd4)
I2CDeviceSet( ADV7175_PAL_DataSet );
#elif defined SAA71XX //ADV717X
I2CDeviceSet( SAA7129_PAL_DataSet );
#endif //SAA71XX
}
}
}
//----- Check if Interaced or not
if( DetVideo ) {
if( DetInterace != IsInteraced() ) {
DetInterace = IsInteraced();
#ifdef ADV717X
if( DetInterace ){ //I2CDeviceSet(NonInteraceMode);
WriteTW99(0x28, 0x02);
buf = ReadI2C(EncoderID, 0x01);
buf = (buf & 0xfe) + 0x01;
WriteI2C(EncoderID, 0x01, buf);
MD0 = 0;
}
else{ //I2CDeviceSet(InteraceMode);
WriteTW99(0x28, 0x00);
buf = ReadI2C(EncoderID, 0x01);
buf = buf & 0xfe;
WriteI2C(EncoderID, 0x01, buf);
MD0 = 1;
}
#elif defined SAA71XX //AVD717X // need to work program for noninterace of SAA...
#endif //SAA71XX
}
}
//----- Check FastForward
if( DetVideo ) {
if(ChipID == TW9908AID){
if( DetFF != GetFFS() ) {
static DATA BYTE VDelayReg;
DetFF = GetFFS();
if( DetFF ) {
VDelayReg = GetVDelay();
SetVDelay(0x0d);
}
else {
SetVDelay( VDelayReg );
}
}
}
}
//----- Path Through Function
#ifdef NEW_BOARD
if(OldBypassKey != BypassKey){
if(BypassKey)
NonBypassMode();
else
BypassMode();
OldBypassKey = BypassKey;
}
#endif //NEW_BOARD
ScalingMode();
}
}
void ReturnInitialOFF(void)
{
if(MenuIndex == 0x01){
reset = 0; delay(1); // reset
reset = 1; delay(1);
delay(10);
InitRegisterSet(ChipID);
delay(10);
WriteTW99( 0x43, 0x40 );
delay(10);
OSDInitial();
MenuIndex = 0x00;
// Printf("\r\nILayer:%02x IIndex:%02x IOldKeyState:%02x", MenuLayer, MenuIndex, OldKeyState); // debug
}
}
void DetectEncoderID(void)
{
#ifdef ADV717X
if(ReadI2C(ADV7176I2CAddress, 0x00) != 0xff)
EncoderID = 0x54;
else
EncoderID = 0xd4;
#endif //ADV717X
#ifdef SAA71XX
EncoderID = 0x8c;
#endif //SAA71XX
}
void MakeMaxMenuLayer(void)
{
switch(OneMenuIndex){
case 0: MaxMenuLayer = 0x03; break; // video input
case 1: MaxMenuLayer = 0x04; break; // register set //$11
case 2: MaxMenuLayer = 0x03; break; // scaling
case 3: MaxMenuLayer = 0x02; break; // Caption
case 4: MaxMenuLayer = 0x02; break; // initializing
case 5: MaxMenuLayer = 0x02; break; // escape
case 6: MaxMenuLayer = 0x01; break; // help
default: break;
}
}
void OSDLockMode(void)
{
if(!DetVideo){
// delay(100);
OSDCmd2(0xc0, 0x0c);
// Printf("\r\nDetVideo:%02x PAL_NTSC:%02x",DetVideo,PAL_NTSC);
}
else{
if(PAL_NTSC)
OSDCmd2(0xc0, 0x00);
else
OSDCmd2(0xc0, 0x01);
// Printf("\r\nDetVideoP:%02x PAL_NTSC:%02x",DetVideo,PAL_NTSC);
}
}
void ExeMenu(void)
{
#ifdef ADV717X
BYTE OutSelect;
#endif //ADV717X
switch(OneMenuIndex){
case 0:
if(MenuLayer == 3){
switch(TwoMenuIndex){
case 0: I2CDeviceSet( OSDComposite ); break;
case 1: I2CDeviceSet( OSDSVideo ); break;
case 2: I2CDeviceSet( OSDYPbPr ); break;
case 3: I2CDeviceSet( InputSCART ); break;
case 4:
#ifdef ADV717X
OutSelect = ReadI2C(EncoderID, 0x00);
switch(MenuIndex){
case 0: WriteI2C(EncoderID, 0x00, (OutSelect | 0x40)); break;
case 1: WriteI2C(EncoderID, 0x00, (OutSelect & 0xbf)); break;
default: break;
}
#elif defined SAA71XX // ADV717X // has to work program for switching R,G,B / Cb,Y,Cr
#endif //SAA71XX
break;
default: break;
}
}
break;
case 1:
switch(MenuLayer){ //$11
case 2:
switch(MenuIndex){
case 0: TargetID = 0x88; break;
case 1: TargetID = EncoderID; break; // check EncoderID up
case 2: TargetID = 0x5c; break;
default: break;
}
break;
case 3: OSDData = ReadI2C(TargetID, MenuIndex); break;
case 4:
WriteI2C(TargetID, TwoMenuIndex, MenuIndex); break;
default: break;
}
break;
case 2:
if(MenuLayer == 2)
switch(MenuIndex){
case 0: OSDData = ReadTW99(0x0e); break;
case 1: OSDData = ReadTW99(0x0f); break;
case 2: OSDData = ReadTW99(0x0d); break;
default: break;
}
if(MenuLayer == 3)
WriteTW99(TwoMenuIndex, MenuIndex);
break;
case 3:
if(MenuLayer == 2){
switch(MenuIndex){
case 1: OSDCmd1(0x17); break; // caption on
default: break;
}
}
break;
case 4:
if(MenuLayer == 2){
switch(MenuIndex){
case 1: ReturnInitialOFF(); break;
default: break;
}
}
break;
case 5:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -