📄 dvb_avio.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 + -