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

📄 dvb_sys.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -