📄 dvb_sys.c
字号:
CX_Initial();
CA_MENU_Initial();
#endif
#ifdef DUI
Init_PopupMessage( );
#endif
#ifdef OTA_ENABLE
Init_Nit_Monitor_Task();
#endif
#ifdef TONGFANG
TFCA_Init() ;
#endif
}
/*******************************************************************************************/
u16 DVB_GetSleepTime( void )
{
u32 u32Temp;
if (s32SleepTime<=0)
{
return 0;
}
u32Temp = (u32)(s32SleepTime / 60); // convert seconds to minutes
if(s32SleepTime%60)
return (u16)u32Temp + 1; //jin modify 05-14
else
return (u16)u32Temp;
}
/*******************************************************************************************/
void DVB_SetSleepTime( u16 u16Minute )
{
s32 s32SleepTimeTemp; // for multi task protection
if (u16Minute == 0)
{
s32SleepTimeTemp = 0;
}
else
{
s32SleepTimeTemp = (s32)(u16Minute * 60);
//SYS_DBG(( "Set sleep time: (%d)mins = (%ld)secs\n", u16Minute, s32SleepTime));
}
s32SleepTime = s32SleepTimeTemp;
}
/*******************************************************************************************/
void DVB_SystemStandby( bool8 b8Standby )
{
b8SystemStandby = b8Standby;
if (b8Standby == TRUE)
{
s32SleepTime = 0;
#ifdef TELETEXT_ON_OSD
DVB_TTX_Term();
#endif
DVB_ScartStandby(TRUE);
DVB_AudioSetMute(TRUE);
// DVB_OSDClearRegion(OSD_FRAME_DISPLAY_REGION);
DVB_AVDemuxDisable();
DVB_VideoSetPID( 0 );
DVB_AudioSetPID( 0 );
// DVB_AudioVideoStop();
DVB_VideoPosition(EN_VID_SCALING_NORMAL, 0, 0);
DVB_OSDRectangleStripDisplay(EN_RECTANGLE_STRIP_LAYER1, FALSE);
DVB_OSDRectangleStripDisplay(EN_RECTANGLE_STRIP_LAYER2, FALSE);
DVB_OSDRectangleStripDisplay(EN_RECTANGLE_STRIP_LAYER3, FALSE);
DVB_OSDRectangleStripDisplay(EN_RECTANGLE_STRIP_LAYER4, FALSE);
DVB_OSDCursorDisplay(FALSE);
// GDI_DeactivateRegion();
DEV_IO_Standby(TRUE); //Marlin 20060616
#ifdef ENABLE_POWER_SAVING
#ifdef DVB_SYSTEM_S_T
if (DVB_DBGetSystemType() == EN_SYSTEM_TYPE_DVBS)
{
DVB_NIM_Reset(TRUE);
}
#endif
#ifdef USB_ENABLE
DVB_USB_Standby();
#endif
#endif
}
else
{
#ifdef ENABLE_POWER_SAVING
#ifdef USB_ENABLE
DVB_USB_Recovery();
#endif
#ifdef DVB_SYSTEM_S_T
if (DVB_DBGetSystemType() == EN_SYSTEM_TYPE_DVBS)
{
DVB_NIM_Reset(FALSE);
}
#endif
#endif
DEV_IO_Standby(FALSE); //Marlin 20060616
DVB_AudioSetMute(FALSE);
DVB_AudioVideoStop();
DVB_AudioVideoPlay();
DVB_AVDemuxEnable();
DVB_ScartStandby(FALSE);
}
// b8SystemStandby = b8Standby;
}
/*******************************************************************************************/
bool8 DVB_GetSystemStandby( void ) { return b8SystemStandby;
}
/*******************************************************************************************/
extern CTOS_MEM_POOL GEN_MEM_POOL;
void * DVB_MemoryAllocate( u32 u32NumberofBytes )
{
u32* pu32Data;
u32 u32idx;
pu32Data = NULL;
if (u32NumberofBytes == 0)
{
return pu32Data;
}
pu32Data = (u32 * )DVB_MEM_Allocate(GEN_MEMPOOL_TYPE, u32NumberofBytes);
if (pu32Data)
{
for (u32idx = 0; u32idx<MAX_MEM_INFO; u32idx++)
{
if (stMemRecord[u32idx].pu32Pointer == NULL)
{
stMemRecord[u32idx].pu32Pointer = pu32Data;
stMemRecord[u32idx].u32Size = u32NumberofBytes;
break;
}
}
}
if (pu32Data == NULL)
{
DVB_MEM_PrintInfo(GEN_MEMPOOL_TYPE);
}
return pu32Data;
}
/*******************************************************************************************/
void * DVB_MemoryAllocateBIG ( u32 u32NumberofBytes )
{
u32* pu32Data = NULL;
if (u32NumberofBytes == 0)
{
return pu32Data;
}
pu32Data = (u32 * )DVB_MEM_Allocate(BIG_MEMPOOL_TYPE, u32NumberofBytes);
#if defined (CT216S) || defined (CT216T) || defined (CT216H)
DVB_SetBGLReloadStatus(TRUE);
#endif //#if defined (CT216S) || defined (CT216T)
return pu32Data;
}
/*******************************************************************************************/
extern CTOS_MEM_POOL EIT_MEM_POOL;
void * DVB_MemoryAllocateEIT( u32 u32NumberofBytes )
{
u32* pu32Data = NULL;
if (u32NumberofBytes == 0)
{
return pu32Data;
}
//SYS_DBG(("DVB_MemoryAllocateEIT start\n"));
pu32Data = (u32 * )DVB_MEM_Allocate(EIT_MEMPOOL_TYPE, u32NumberofBytes);
/*
eitadd[eit_cout].pu32Pointer = pu32Data;
eitadd[eit_cout].u32Size = u32NumberofBytes;
eit_cout++;
*/
//SYS_DBG(("DVB_MemoryAllocateEIT end\n"));
return pu32Data;
}
/*******************************************************************************************/
void EITMemoryStatus( void )
{
}
/*******************************************************************************************/
void DVB_MemoryFree( void * pu8Free )
{
u32 u32idx;
u32 au32Start;
u32 au32End;
if (pu8Free != NULL)
{
// free(pu8Free);
/* check in which pool */
DVB_MEM_GetInfo(EIT_MEMPOOL_TYPE, &au32Start, &au32End);
if (((u32)pu8Free>=au32Start) && ((u32)pu8Free<=au32End))
{
DVB_MEM_Free(EIT_MEMPOOL_TYPE, pu8Free);
}
else
{
DVB_MEM_GetInfo(BIG_MEMPOOL_TYPE, & au32Start, & au32End);
if (((u32)pu8Free>=au32Start) && ((u32)pu8Free<=au32End))
{
DVB_MEM_Free(BIG_MEMPOOL_TYPE, pu8Free);
}
else
{
DVB_MEM_Free(GEN_MEMPOOL_TYPE, pu8Free);
}
}
for (u32idx = 0; u32idx<MAX_MEM_INFO; u32idx++)
{
if (stMemRecord[u32idx].pu32Pointer == pu8Free)
{
stMemRecord[u32idx].pu32Pointer = NULL;
}
}
}
}
/*******************************************************************************************/
void DVB_MemoryStatus( void )
{
//struct mallinfo minfo;
// malloc_stats();
CT_OS_MempoolInfo();
#if 0
minfo = mallinfo();
SYS_DBG(( "\n total space allocated from system = %d", minfo.arena));
SYS_DBG(( "\n number of non-inuse chunks = %d", minfo.ordblks));
SYS_DBG(( "\n number of mmapped regions = %d", minfo.hblks));
SYS_DBG(( "\n total space in mmapped regions = %d", minfo.hblkhd));
SYS_DBG(( "\n total allocated space = %d", minfo.uordblks));
SYS_DBG(( "\n total non-inuse space = %d", minfo.fordblks));
SYS_DBG(( "\n top-most, releasable (via malloc_trim) space = %d\n", minfo.keepcost));
#endif
}
/*******************************************************************************************/
//#define DVB_WATCHDOG_TIMER
#define DVB_WATCHDOG_TASK
#define DVB_WATCHDOG_TIMEOUT 6000
#define DVB_WATCHDOG_TIMER_TIME 1000
static bool8 b8WatchDogEnable = FALSE;
#ifdef DVB_WATCHDOG_TIMER
static CTOS_TIMER DvbWatchDogTimer;
#endif
#ifdef DVB_WATCHDOG_TASK
static CTOS_TASK DvbWatchDogTask;
static u8 au8WatchDogStack[DVB_WATCHDOG_TASK_STACK_SIZE];
#endif
static void WatchDog_Checker( u32 argc, void * argv )
{
#ifdef DVB_WATCHDOG_TIMER
CT_SYS_WatchDogEnable(DVB_WATCHDOG_TIMEOUT);
#endif
#ifdef DVB_WATCHDOG_TASK
while (1)
{
CT_SYS_WatchDogEnable(DVB_WATCHDOG_TIMEOUT);
CT_OS_MS_Delay(DVB_WATCHDOG_TIMER_TIME); //_ms2tick(DVB_WATCHDOG_TIMER_TIME)
}
#endif
}
void DVB_WatchDog_Enable( void )
{
#ifdef DVB_WATCHDOG_TIMER
CT_OS_ControlTimer(& DvbWatchDogTimer, EN_CTOS_TIMER_ENABLE);
#endif
#ifdef DVB_WATCHDOG_TASK
CT_OS_ResumeTask(& DvbWatchDogTask);
#endif
CT_SYS_WatchDogEnable(DVB_WATCHDOG_TIMEOUT);
b8WatchDogEnable = TRUE;
}
void DVB_WatchDog_Disable( void )
{
#ifdef DVB_WATCHDOG_TIMER
CT_OS_ControlTimer(& DvbWatchDogTimer, EN_CTOS_TIMER_DISABLE);
#endif
#ifdef DVB_WATCHDOG_TASK
CT_OS_SuspendTask(& DvbWatchDogTask);
#endif
CT_SYS_WatchDogDisable();
b8WatchDogEnable = FALSE;
}
bool8 DVB_WatchDog_GetStatus( void ) { return b8WatchDogEnable;
}
/*******************************************************************************************/
void DVB_WatchDog_Init( void )
{
#ifdef DVB_WATCHDOG_TIMER
CT_OS_MS_CreateTimer(& DvbWatchDogTimer, "wdog", EN_CTOS_TIMER_CONTINUOUS, WatchDog_Checker, 0,
DVB_WATCHDOG_TIMER_TIME);
CT_OS_ControlTimer(& DvbWatchDogTimer, EN_CTOS_TIMER_ENABLE);
#endif
#ifdef DVB_WATCHDOG_TASK
CT_OS_CreateTask(& DvbWatchDogTask, "wdog", WatchDog_Checker, & au8WatchDogStack[0], DVB_WATCHDOG_TASK_STACK_SIZE,
DVB_WATCHDOG_TASK_PRIORITY, DVB_WATCHDOG_TASK_TIMESLICE);
CT_OS_ResumeTask(& DvbWatchDogTask);
#endif
b8WatchDogEnable = TRUE;
}
/*******************************************************************************************/
void DVB_SystemReset( u8 u8Parameter )
{
#if !defined(WIN32)
if (u8Parameter == 0)
{
//SoftwareReset();
CT_SYS_Reset();
}
if (u8Parameter == 1)
{
}
#endif
}
/*******************************************************************************************/
u16 DVB_Random( void )
{
u16 temp1, temp2;
temp1 = ((u16)(((u32Holdrand = u32Holdrand * 214013L + 2531011L) >> 16) & 0x7fff)) & 0xFFFF;
temp2 = (u16)DVB_TimerGet() & 0xFFFF;
temp1 = temp1 ^ temp2;
return temp1;
}
/*******************************************************************************************/
bool8 DVB_SetSystemCountry( EN_SYS_COUNTRY_TYPE enCountry )
{
/*
if ((enCountry >= EN_SYS_COUNTRY_TAIWAN)&&(enCountry <= EN_SYS_COUNTRY_AMERICA))
{
enDvbSystemCountry = enCountry;
return TRUE;
}
else
{
return FALSE;
}
*/
if (enCountry>=EN_SYS_COUNTRY_NUMBER)
{
return FALSE;
}
enDvbSystemCountry = enCountry;
return TRUE;
}
/*******************************************************************************************/
EN_SYS_COUNTRY_TYPE DVB_GetSystemCountry( void ) { return enDvbSystemCountry;
}
s8 DVB_GetCountryTimeZone( EN_SYS_COUNTRY_TYPE enCountry )
{
s8 s8TempTimeZone;
switch (enCountry)
{
case EN_SYS_COUNTRY_TAIWAN:
s8TempTimeZone = 16;
break;
case EN_SYS_COUNTRY_CHINA:
s8TempTimeZone = 16;
break;
case EN_SYS_COUNTRY_ENGLAND:
s8TempTimeZone = 0;
break;
case EN_SYS_COUNTRY_GERMANY:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_NETHERLAND:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_FRANCE:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_PORTUGAL:
s8TempTimeZone = 0;
break;
case EN_SYS_COUNTRY_SPAIN:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_ITALY:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_HOLLAND:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_AMERICA:
s8TempTimeZone = -12;
break;
case EN_SYS_COUNTRY_AUSTRALIA:
s8TempTimeZone = 20;
break;
case EN_SYS_COUNTRY_FINLAND:
case EN_SYS_COUNTRY_TURKEY:
s8TempTimeZone = 4;
break;
//(jin-085)>>jin add CZECH
case EN_SYS_COUNTRY_CZECH:
s8TempTimeZone = 2;
break;
//(jin-085)<<
case EN_SYS_COUNTRY_RUSSIA:
s8TempTimeZone = 6;
break;
case EN_SYS_COUNTRY_DENMARK:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_SWEDEN:
s8TempTimeZone = 2;
break;
case EN_SYS_COUNTRY_AUSTRIA:
s8TempTimeZone = 2;
break;
default:
s8TempTimeZone = 0;
break;
}
return s8TempTimeZone;
}
/*******************************************************************************************/
static struct _tm stSysTm;
static s32 s32LocalTimeoffset = 0; //unit is second
/***********************************************************************
Convert MJD format to Date (tm) Function
***********************************************************************/
void _Mjd2Date( u8 u8D1, u8 u8D2, struct _tm * pstTM )
{
//s32 mjd, YY, MM, K, W, Y, M, D, WY, WD;
s32 mjd, YY, MM, K, Y, M, D;
/* date */
mjd = (u8D1 * 256) + u8D2;
/* yr, mn, dt, hur, min */
YY = (int)((mjd - 15078.2) / 365.25);
MM = (int)((mjd - 14956.1 - (YY * 365.25)) / 30.6001);
if ((MM == 14) || (MM == 15))
{
K = 1;
}
else
{
K = 0;
}
//ignore W and WY
/*W = (int) ( (mjd / 7.0) - 2144.64 );
WY = (int) ( (W * 28.0 / 1461) - 0.0079 );*/
//SYS_DBG(( "mjd=%ld, YY=%ld, MM=%ld, K=%ld\n", mjd, YY, MM, K));
Y = YY + K;
M = MM - 1 - (K * 12);
D = mjd - 14956 - (int)(YY * 365.25) - (int)(MM * 30.6001);
//ignore WY and WD
/*WY = W - (int) ( (WY * 1461.0 / 28) + 0.41 );
WD = ( (mjd + 2) % 7 ) + 1;*/
/*SYS_DBG(("Mjd2Data: X%x X%x => %02d/%02d/%02d %d,%d!\n",
u8D1, u8D2, (int)Y, (int)M, (int)D, WY, WD));*/
/*SYS_DBG(("Mjd2Data: X%hx X%hx => %02d/%02d/%02d !\n",
u8D1, u8D2, (int)Y, (int)M, (int)D));*/
pstTM->s16tm_year = (int)Y;
pstTM->s16tm_mon = (int)M;
pstTM->s16tm_mday = (int)D;
}
#define BCD2Bin(x) ( (((x)>>4) * 10) + ((x)&0x0F) )
/***********************************************************************
Convert MJD-UTC format to Time (time_t) Function
***********************************************************************/
void dvb_MjdUtc2Time( u8 * pu8MjdUtc, struct _tm * pstTM )
{
/*DVB_Msg(MSG_4_SYS, "MosMjd TDT:%2hx, %2hx, %2hx, %2hx, %2hx\n", *pu8MjdUtc,
*(pu8MjdUtc+1), *(pu8MjdUtc+2), *(pu8MjdUtc+3), *(pu8MjdUtc+4));*/
_Mjd2Date(* pu8MjdUtc, *(pu8MjdUtc + 1), pstTM);
//SYS_DBG(( "MosMjd pstTM:%02d/%02d/%02d\n", (int)pstTM->s16tm_year, (int)pstTM->s16tm_mon, (int)pstTM->s16tm_mday));
pstTM->s16tm_hour = BCD2Bin(*(pu8MjdUtc + 2));
pstTM->s16tm_min = BCD2Bin(*(pu8MjdUtc + 3));
pstTM->s16tm_sec = BCD2Bin(*(pu8MjdUtc + 4));
//SYS_DBG(( "MosMjd stTM:%02d:%02d:%02d\n", pstTM->s16tm_hour, pstTM->s16tm_min, pstTM->s16tm_sec));
}
/*******************************************************************************************/
/* ―
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -