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

📄 dvb_avio.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
字号:
/**************************************************************************

        (C)Copyright Cheertek Inc. 2002-2004,
           D700, all right reserved.

        Product : STB Firmware

****************************************************************************/
#include <stdio.h>

#include "ap_defs.h"
#include "Task_cfg.h"
#include "io_config.h"
#include "hw_config.h"
#include "ct_iic.h"
#include "ct_os.h"
#include "ct_gpio.h"
#include "dvb_avio.h"
#include "dvb_av.h"
#include "ct_nim.h"
#include "dvb_sys.h"

#include "dev_io.h"
#include "dev_avio.h"

#include "dvb_fp.h"    //(GFG-002)

/******************************************************************************/
//#define AVIO_DBG(p)      printf p
#define AVIO_DBG(p)


#define DVB_AVIO_DELAY_500_MS 				(500/CTOS_MS_PER_TICKS)  // 1 tick = 10 ms

static bool8 _b8SCARVCR = FALSE;

void DVB_AVIO_SystemPoll(u32 u32Argc, void* pArgv);
bool8 bDVB_AVIO_Initial = FALSE;
/******************************************************************************/
CTOS_TASK AVIOTask;
CTOS_SEMAPHORE stAVIOSemaphore;
/*
static EN_SCART_VIDEO_FORMAT enCurType;
static bool8 b8MonitorVCR = FALSE,b8MonitorDAR = FALSE;
static bool8 b8CurrentVcrState = FALSE;
static bool8 b8LastVcrState = FALSE;
static u8 au8ModBuf[4] = {0x80,0,0,0};
static EN_VID_DISPLAY enCurrentDAR, enLastContentDAR=EN_VID_DISPLAY_UNKNOWS;
*/
//EN_CT_GPIO_PORT enHwMutePort, enScartVcrDetectPort, enScartVcrSelectPort, enScartTVSwPort, enScartTVRGBPort, enScartTvPort;
//EN_CT_GPIO_BIT enHwMuteBit, enScartVcrDetectBit, enScartVcrSelectBit, enScartTVSwBit, enScartTVRGBBit, enScartTvBit;

u8 u8DVB_AVIO_TaskStack[DVB_AVIO_TASK_STACK_SIZE];
//u8	u8ID = 0xCA;

/*===========================================================================*/	
static bool8 _b8ANTPowerStatus = FALSE;

//Logic modify for LNB Overload 20081008
#ifdef LNB_OVERLOAD_DETECTION_ENABLE
	#if (defined(DVB_SYSTEM_T)||defined (DVB_SYSTEM_DTMB)||defined(DVB_SYSTEM_S))
		static void ANTPowerTimerInitial(void);
	#endif
#else
	#if (defined(DVB_SYSTEM_T)||defined (DVB_SYSTEM_DTMB))
		static void ANTPowerTimerInitial(void);
	#endif
#endif
//Logic modify end

#ifdef ANT_OVERLOAD_DETECTION_ENABLE
CTOS_TIMER ANTPowerTimer;
	//(GFG-002)    static void ANTPowerTimerCallBack(); /* call back func */
	static void ANTPowerTimerCallBack(void); /* call back func */ 	//(GFG-002)
#endif

/**************************************************************************/
void DVB_ScartSetVideoFormat( EN_SCART_VIDEO_FORMAT enType )
{
	DEV_ScartSetVideoFormat(enType);
}

/**************************************************************************/
void DVB_ScartSetTvType( EN_SCART_TV_TYPE enType )
{
	DEV_ScartSetTvType(enType);
}

bool8 DVB_ScartVcrDetect(void)
{
	return DEV_ScartVcrDetect();
}

void DVB_ScartVcrSelect( bool8 b8Selected )
{
	// Wait Semaphore
	if (CT_OS_WaitOnSemaphore (&stAVIOSemaphore, CTOS_WAIT) != EN_CTOS_SUCCESS)
	{
		return;
	}	
	
	DEV_ScartVcrSelect(b8Selected);
	if(b8Selected)
		_b8SCARVCR = TRUE;
	else
		_b8SCARVCR = FALSE;
	
	// Free Semaphore
	CT_OS_FreeSemaphore (&stAVIOSemaphore);
}

void DVB_ScartInit(void)
{
	DEV_ScartVcrSelect(FALSE);
}

/****************************************************************************/
void DVB_ScartStandby(bool8 b8Standby)
{
	DEV_ScartStandby(b8Standby);
}

/****************************************************************************/
void DVB_ScartAutoTVSW(void)
{
	DEV_ScartAutoTVSW();
}

/****************************************************************************/
void DVB_AVIO_Initialize(void)
{
	if ( FALSE == bDVB_AVIO_Initial) {
		
		if (EN_CTOS_SUCCESS != CT_OS_CreateSemaphore (&stAVIOSemaphore, "AVIOSEM", 1, EN_CTOS_SUSPEND_FIFO))
		{
			
			return;
		}
			
		if( EN_CTOS_SUCCESS != CT_OS_CreateTask(&AVIOTask,
						"AVIOTK",
						DVB_AVIO_SystemPoll,
						&u8DVB_AVIO_TaskStack[0],
						DVB_AVIO_TASK_STACK_SIZE,
						DVB_AVIO_TASK_PRIORITY,
						DVB_AVIO_TASK_TIMESLICE)) 
        {
			
		}
		CT_OS_ResumeTask(&AVIOTask);
		bDVB_AVIO_Initial = TRUE;
	} 
	else
	{
		
	}

	DEV_AVIO_Initialize();

	//Logic modify for LNB Overload 20081008
	#ifdef LNB_OVERLOAD_DETECTION_ENABLE
		#if (defined(DVB_SYSTEM_T)||defined (DVB_SYSTEM_DTMB)||defined(DVB_SYSTEM_S))
			ANTPowerTimerInitial();	//KS 2007/6/26, for monitor Antenna Overload. for DVB_SYSTEM_T
		#endif
	#else
		#if (defined(DVB_SYSTEM_T)||defined (DVB_SYSTEM_DTMB))
			ANTPowerTimerInitial();	//KS 2007/6/26, for monitor Antenna Overload. for DVB_SYSTEM_T
		#endif
	#endif
	//Logic modify end
}
/****************************************************************************/
void DVB_MonitorScartVcr( bool8 b8Switch)
{
	// Wait Semaphore
	if (CT_OS_WaitOnSemaphore (&stAVIOSemaphore, CTOS_WAIT) != EN_CTOS_SUCCESS)
	{
		return;
	}
	
	DEV_MonitorScartVcr(b8Switch);
	
	// Free Semaphore
	CT_OS_FreeSemaphore (&stAVIOSemaphore);
}
/****************************************************************************/
void DVB_AVIO_SystemPoll (u32 u32Argc, void* pArgv)
{
	while (1)
	{
		// Wait Semaphore
		if (CT_OS_WaitOnSemaphore(&stAVIOSemaphore, CTOS_WAIT) == EN_CTOS_SUCCESS)
		{
			DEV_AVIO_SystemPoll(u32Argc, pArgv);
			
			// Free Semaphore
			CT_OS_FreeSemaphore(& stAVIOSemaphore);
		}	
		
		if (EN_CTOS_SUCCESS != CT_OS_Delay(DVB_AVIO_DELAY_500_MS))
		{
		    
		}
			
			
	}	
	
}
/****************************************************************************/
void DVB_ModSetMode( EN_MOD_CH_TYPE enModChType, EN_MOD_AUDIO_MODE enModAudio, u8 u8TVChannelNum )
{/* TOSHIBA TA1243CF, YINHE RF MODULATOR TSU-PC*/
		DEV_ModSetMode(enModChType, enModAudio, u8TVChannelNum);
}

void DVB_HardwareMute(bool8 b8HWMute)
{
	DEV_HardwareMute(b8HWMute);
}

void DVB_AVIO_LEDShow (s8 s8Idx, bool8 b8Show)
{
	DEV_AVIO_LEDShow (s8Idx, b8Show);
}

void DVB_SCMD(u16 u16Param1, u16 Param2, u16 Param3)
{
	DEV_SCMD(u16Param1, Param2, Param3);
}

void DVB_MonitorVideoDAR( bool8 b8Switch)
{
	// Wait Semaphore
	if (CT_OS_WaitOnSemaphore (&stAVIOSemaphore, CTOS_WAIT) != EN_CTOS_SUCCESS)
	{
		return;
	}
	
	DEV_MonitorVideoDAR(b8Switch);
	
	// Free Semaphore
	CT_OS_FreeSemaphore (&stAVIOSemaphore);
}

#ifdef ANT_OVERLOAD_DETECTION_ENABLE
bool8 b8LNBOverload = FALSE;

void DVB_AVIO_SetANTOverload (bool8 b8Schedule)
{
	AVIO_DBG(("set b8Schedule:%d\n", b8Schedule));
    b8LNBOverload = b8Schedule;
}

bool8 DVB_AVIO_GetANTOverload (void)
{
	AVIO_DBG(("get b8Schedule:%d\n", b8LNBOverload));	
	return b8LNBOverload;
}

void _SetANTOverLoad (void)
{
	if ( b8LNBOverload==FALSE )
	{
		DVB_SendKey (EVENT_KEY_FORCE_EXIT);
		b8LNBOverload = TRUE;
	}
}

//(GFG-002)    void ANTPowerTimerCallBack()
void ANTPowerTimerCallBack(void)	//(GFG-002)
{
	if(_b8ANTPowerStatus == TRUE)
	{					
		//AVIO_DBG(("_b8LNBPowerStatus = TRUE\n"));
		if(DEV_IO_DetectOverload() == TRUE)
		{
			DVB_AVIO_SetANTPowerStaus(FALSE);
			//AVIO_DBG(("Detect LNB Over load\n"));			
			
			//TO DO: send message to AP that will modify the Nvram data
			_SetANTOverLoad();
		}	
	}
	return;
}
#endif /* end if ANT_OVERLOAD_DETECTION_ENABLE */

//Logic modify for LNB Overload 20081008
#ifdef LNB_OVERLOAD_DETECTION_ENABLE
	#if (defined(DVB_SYSTEM_T)||defined (DVB_SYSTEM_DTMB)||defined(DVB_SYSTEM_S))
		void ANTPowerTimerInitial(void)
		{
			#ifdef ANT_OVERLOAD_DETECTION_ENABLE	
				//AVIO_DBG(("DVB_SYS_LBNPowerTimeInitial\n"));
				//(GFG-002)    if( EN_CTOS_SUCCESS != CT_OS_MS_CreateTimer(&ANTPowerTimer, "LNBPowerTimer", EN_CTOS_TIMER_CONTINUOUS, ANTPowerTimerCallBack, 0, 1))
				if( EN_CTOS_SUCCESS != CT_OS_MS_CreateTimer(&ANTPowerTimer, "LNBPowerTimer", EN_CTOS_TIMER_CONTINUOUS, (void *)ANTPowerTimerCallBack, 0, 1))	//(GFG-002)	
				{
					AVIO_DBG(("Antenna Power Timer Create fail %d\n"));
				}
				else
				{
					CT_OS_ControlTimer(&ANTPowerTimer, EN_CTOS_TIMER_ENABLE);
					//AVIO_DBG(("Antenna Power Timer Create success\n"));
				}
			#endif /* end if ANT_OVERLOAD_DETECTION_ENABLE */	
			
			return;
		}
	#endif
#else
	#if (defined(DVB_SYSTEM_T)||defined (DVB_SYSTEM_DTMB))
		void ANTPowerTimerInitial(void)
		{
			#ifdef ANT_OVERLOAD_DETECTION_ENABLE	
				//AVIO_DBG(("DVB_SYS_LBNPowerTimeInitial\n"));
				//(GFG-002)    if( EN_CTOS_SUCCESS != CT_OS_MS_CreateTimer(&ANTPowerTimer, "LNBPowerTimer", EN_CTOS_TIMER_CONTINUOUS, ANTPowerTimerCallBack, 0, 1))
				if( EN_CTOS_SUCCESS != CT_OS_MS_CreateTimer(&ANTPowerTimer, "LNBPowerTimer", EN_CTOS_TIMER_CONTINUOUS, (void *)ANTPowerTimerCallBack, 0, 1))	//(GFG-002)	
				{
					AVIO_DBG(("Antenna Power Timer Create fail %d\n"));
				}
				else
				{
					CT_OS_ControlTimer(&ANTPowerTimer, EN_CTOS_TIMER_ENABLE);
					//AVIO_DBG(("Antenna Power Timer Create success\n"));
				}
			#endif /* end if ANT_OVERLOAD_DETECTION_ENABLE */	
			
			return;
		}
	#endif
#endif
//Logic modify end

void DVB_AVIO_SetANTPowerStaus(bool8 b8status)
{
	if(b8status == TRUE)
	{		
		//AVIO_DBG(("DEV_IO_LNBPower ON\n"));
		DEV_IO_LNBPower(TRUE);
		#ifndef CT216T						
			CT_OS_MS_Delay (6);//@pkt add delay
		#else
			CT_OS_MS_Delay (200);//add delay by Jack
		#endif		
			_b8ANTPowerStatus = TRUE;
	}
	else
	{
		//AVIO_DBG(("DEV_IO_LNBPower FALSE\n"));
		_b8ANTPowerStatus = FALSE;
		DEV_IO_LNBPower(FALSE);		
	}
	return;	
}

bool8 DVB_AVIO_GetANTPowerStaus(void)
{
	return _b8ANTPowerStatus;
}

bool8 DVB_ScartGetVcrSat(void)
{
	if(_b8SCARVCR)
		return TRUE;
	else
		return FALSE;
}

⌨️ 快捷键说明

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