⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tv.c

📁 RTD2662板卡源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//                            CChangeChannel
//==========================================================================
void CChangeChannel(bit bNext)
{
    BYTE ucmaxchannel = CloadMaxChannelNumber();

    COsdDispOsdTimerEvent();
#if (_OSD_TYPE == _OSD003)
    bDrawMute = 0;
#endif

    if (stTvInfo.CurChn > ucmaxchannel)
    {
        ucPrevChannel   = 0;
        stTvInfo.CurChn = 0;
        return;
    }
              
    CMuteOn();
#if(_FM_DEVICE)
    if (1 == bFM)
    {
        ucPrevChannel =  stTvInfo.ucFMCurrCh;
    }
    else
#endif
    {
        ucPrevChannel =  stTvInfo.CurChn;
        CModeResetTVMode();
    }

	do
	{
       if (bNext)  // Change next channel
           stTvInfo.CurChn = (stTvInfo.CurChn == ucmaxchannel) ? 0 : (stTvInfo.CurChn+1);
       else        // Change prev channel
           stTvInfo.CurChn = (stTvInfo.CurChn == 0) ? ucmaxchannel : (stTvInfo.CurChn-1);
    
	   if (!CLoadChannelSkip(stTvInfo.CurChn) || stTvInfo.CurChn == ucPrevChannel)
	        break;
	}
	while(1);

    CSetTVChannel(stTvInfo.CurChn); 
    CEepromSaveTvData();
   // CShowTVNumber(stTvInfo.CurChn, _SHOW_CH_TV_NUMBER | _SHOW_CH_TV_TYPE);
}

//==========================================================================
//bSearchAction:   0 --> Tuning down
//                 1 --> Tuning up
//==========================================================================
void CTuningCurrentChannel(const bit bSearchAction, const BYTE ucCurrentChannel) small
{
    bit bSkip  = CLoadChannelSkip(ucCurrentChannel);
    WORD iFreq = CLoadChannelFreq(ucCurrentChannel);

    if ((iFreq < _MIN_FREQ || iFreq > _MAX_FREQ) && 0 == CloadMaxChannelNumber())
        iFreq = _MIN_FREQ;

    if (bSearchAction) // Tuning up
    {
#if (_FM_DEVICE)
        if (((iFreq < _MAX_FREQ) && 0 == bFM) || ((iFreq < _FM_MAX_FREQ) && 1 == bFM))
#else
        if (iFreq < _MAX_FREQ)
#endif
            iFreq++;
    }
    else  // Tuning down
    {
#if (_FM_DEVICE)
        if (((iFreq > _MIN_FREQ) && 0 == bFM) || ((iFreq > _FM_MIN_FREQ) && 1 == bFM))
#else
        if (iFreq > _MIN_FREQ)
#endif
            iFreq--;
    }

    gmi_CSetTuner(_ADDR_TUNER, iFreq);
    CSaveChannelFreq((iFreq | ((bSkip) ? 0x8000 : 0x0000)), ucCurrentChannel);
}

//==========================================================================
//                          CInitTV
//==========================================================================
void CInitTV(void)
{
#if(_IF_PLL_DE_CHIP == _IF_PLL_DE_1338)
    CInitialTB1338();
#endif
//     TUNER_PWR_ON();
    CSetTVChannel(stTvInfo.CurChn);
    ucPrevChannel = stTvInfo.CurChn;
    CSetTvColor(ucTVType);
    CTimerDelayXms(100); 
}
   
#if(_IF_PLL_DE_CHIP == _IF_PLL_DE_1338)  
//---------------------------------------------------------------------------
void CAudioCtrl(void)
{
    if (_GET_INPUT_SOURCE() != _SOURCE_VIDEO_TV)
        return;
 
    if (!gmi_CModeLocked() && ucAudioState == 0)
       ucAudioState = 1;

    if (ucAudioState != 0)
        ucAudioState++;

    if (ucAudioState < 50)
        return;

    if (!gmi_CModeLocked() && bFM == 0)  // TV no signal
        CMuteOn();
    else      
        CSetVolume();

    ucAudioState = 0;
}

//---------------------------------------------------------------------------
#if(_FM_DEVICE)
void CChangeFM(void)
{
    CMuteOn();
    if (bFM)
    {                
        CInitialTB1338();
        CTimerDelayXms(10);
        CFMInit();
        CSetTVChannel(stTvInfo.ucFMCurrCh);
        CInitSoundChannel(_SOURCE_VIDEO_TV);
    }
    else
    {
        if (_SOURCE_VIDEO_TV == _GET_INPUT_SOURCE())
           CInitTV();

        CInitSoundChannel(_GET_INPUT_SOURCE());
    }

    CTimerDelayXms(100);
    CSetVolume();
}
#endif
#endif
    
//---------------------------------------------------------------------------
#if(_SLEEP_FUNC)
#if(_OSD_TYPE == _OSD002)
void CShowTimer(void) small
{
    BYTE ucCurrentMin = ucAutoPowerDownTime - 1;
    BYTE ucCurrentSec = 59 - (BYTE)(ucMinuteCount/1000);
    
    if (!bTimerOnScreen)
    {
        COsdFxDisableOsd();
        g_ucPageIndex     = _P_MENU_NONE;
        g_ucMenuItemIndex = _MENU_NONE;
        SetOSDDouble(0x03);
        SetOsdMap(tUserMenuOsdMap);
                             
        // Init OSD Ram
        OSDClear(0, GET_OSD_MAP_ROWCOUNT(), 0, 30, 0x8C, BYTE_ATTRIB);
        OSDClear(0, GET_OSD_MAP_ROWCOUNT(), 0, 30, 0x00, BYTE_DISPLAY);
        OSDLine(0, 0, 30, 0x40, BYTE_COLOR);
        OSDClear(1, GET_OSD_MAP_ROWCOUNT() - 1, 0, 30, 0x60, BYTE_COLOR);
        
        COsdFxCodeWrite(ucCloseAllWindow);
        OSDPosition(_MAINMENU_WIDTH * 12,_MAINMENU_HEIGHT * 18,50,1,0x03);
    
        COsdFxEnableOsd();
        bTimerOnScreen = 1;
    }
    
    Gotoxy(0, 0, BYTE_DISPLAY);
    CShowNumber1(ucAutoPowerDownTime - 1, 0);
    OutputChar(0x3a);  // Show ":"
    CShowNumber1(59 - (BYTE)(ucMinuteCount/1000), 2);
    OutputChar(0x00);   

    CTimerReactiveTimerEvent(SEC(GET_OSDTIMEOUT()), COsdDispOsdTimerEvent);
}
#endif // OSD002

#if(_OSD_TYPE == _OSD003)
void CShowTimer(void) small
{
    BYTE ucCurrentMin = ucAutoPowerDownTime;
    BYTE ucCurrentSec = 60-(BYTE)(ucMinuteCount/1000);
    
    if (!bTimerOnScreen)
    {              
        COsdFxDisableOsd();
        ucOsdState = _MI_MENU_NONE;
        SetOSDDouble(0x03);
        SetOsdMap(tMsgOsdMap);
                             
        // Init OSD Ram
        OSDClear(0, 8, 0, 46, 0x8C, BYTE_ATTRIB);
        OSDClear(0, 8, 0, 46, 0x00, BYTE_DISPLAY);
        OSDClear(0, 8, 0, 46, 0xc0, BYTE_COLOR);
        
        COsdFxCodeWrite(ucCloseAllWindow);
    
        OSDPosition(_MAINMENU_WIDTH,_MAINMENU_HEIGHT,80,1,0x03);
    
        COsdFxEnableOsd();
        bTimerOnScreen = 1;
    }
    
    Gotoxy(3, 0, BYTE_DISPLAY);	
    CShowNumber1(ucAutoPowerDownTime , 0);
    OutputChar(0x5E);  // Show ":"
    if(ucCurrentSec == 60)
    	CShowNumber1(0, 2);
    else
    	CShowNumber1(60-(BYTE)(ucMinuteCount/1000), 2);
    OutputChar(0x01);   
   	CTimerCancelTimerEvent(COsdDispOsdTimerEvent);
}

#elif(_OSD_TYPE == _OSD007)

void CShowTimer(void) small
{
    BYTE ucCurrentMin = ucAutoPowerDownTime - 1;
    BYTE ucCurrentSec = 59 - (BYTE)(ucMinuteCount/1000);
    
    if (!bTimerOnScreen)
    {
        COsdFxDisableOsd();
        SetOsdMap(tUserMenuOsdMap);
        SetOSDDouble(OSD_DOUBLE_HEIGHT_ENABLE | OSD_DOUBLE_WIDTH_ENABLE);
        COsdFxCodeWrite(ucCloseAllWindow);
        CClearWindow(0x20);

#if(_OSD_DISPLAY_SIZE_ADJ)
        if (GET_OSD_SIZE())
        {
            OSDPosition(12*10, 18*3, 80, 1, 0x03);
            DirectWOSDRam(0x00, 0x01, THE_BYTE0, 0x80|0x03);  // Row 0 character double height and width
        }
        else
#endif
            OSDPosition(30,30,38,1,0x01);

        COsdFxEnableOsd();
        bTimerOnScreen = 1;
    }
    
    Gotoxy(3,0,BYTE_DISPLAY);         
    CShowNumber1(ucAutoPowerDownTime - 1, 2);
    OutputChar(0x3a);  // Show ":"
    CShowNumber1(59 - (BYTE)(ucMinuteCount/1000), 2);
    
    
    CTimerReactiveTimerEvent(SEC(stOsdUserData.OsdTimeout),COsdDispOsdTimerEvent);
}

#endif  // OSD003

#endif  // #if(_SLEEP_FUNC)

  
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -