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

📄 emc_infopanel.c

📁 关于嵌入式PCB板UI的程序
💻 C
字号:
/*******************************************************************************
File name		: emc_infopanel.c
Description	: include info_panel,program_num_panel
Revision    	: 1.0

COPYRIGHT (C) EMC-HUST-JRC 2005.

Date         	Label   	Auther 		Comment
----		----    	------		---------------------
01-03-2006			Allen Wu		Created
*********************************************************************************/

/* Includes --------------------------------------------------------------------- */
#include "usif.h"
#include "string.h"
#include "sr_dbase.h"
//#include "hl_stosd.h"
#include "UIPositionDef.h"
//#include "OsdRegionInit.h"
#include "gui.h"
#include "osdwrap.h"
#include "emc_font.h"
#include "emc_menustate.h"
#include "emc_channeldisplay.h"
#include "emc_infopanel.h"


clock_t infoStartTime;

extern short int sProgIndex2bRetrieved;
extern int iProgNumberBeingRetrieved;
extern U32 currentUTCtime;
extern PROGRAM_LIST *ProgramList;
extern EPG_PF_INFO_STRUCT PFEvtInfoDataBlock [] [2];

extern PROG_INFO_STRUCT *SRDBE_CurProgInfo(int *piProgramNo);

extern int ConvertTimeStampToTimeString(U32 timeStamp, char* out);
extern int ConvertTimeStampToDateString(U32 timeStamp, char* out);
extern int ConvertUTCDateToWeek(unsigned int utcDate);
extern int ConvertUTCDate(unsigned int utcDate);
extern U32 ST_GetClocksPerSecondLow( void );
extern void sttbx_Print(const char *const Format_p, ...);



void msm_UpdateInfoPanelTime(void)
{
	char currTime[10];
	ConvertTimeStampToTimeString(currentUTCtime/*+timeDateUserOffset*3600*/, currTime);

	EMC_DrawTextRectangle(Handle_ProviewWindow, 
		INFO_PANEL_X+255, INFO_PANEL_Y+2, 66, 24,
		currTime, JLEFT,FONT_MYFONT,FALSE,
		whitecolor, darkyellow, darkyellow);
}

static BOOL drawInfoPanel(BOOL Update)
{	
	int currProgDuration,currDuration,currProgTimePassed;
	int pos_x,pos_y,width,height;
	int iProgNo;
	//char progNum[4];
	char str[256];
	char str1[100];
	char startTime[10],endTime[10];
	int sProgIndex = 0;
	PROG_INFO_STRUCT 	*pstProgInfoTemp;

	if ( ( pstProgInfoTemp = SRDBE_CurProgInfo ( &iProgNo ) ) == NULL )
	{
		sttbx_Print("cannot get current program!!!\n");
		return FALSE;
	}
	sProgIndex = sProgIndex2bRetrieved;

	if(Update == FALSE)	/*redraw the total info panel*/
	{
		/*clear the screen*/
		STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
		/*draw flat panel*/
		STOSD_FillRectangle(Handle_ProviewWindow,INFO_PANEL_X,INFO_PANEL_Y,INFO_PANEL_WIDTH,INFO_PANEL_HEIGHT,lightbluecolor);
		STOSD_FillRectangle(Handle_ProviewWindow,INFO_PANEL_X+2,INFO_PANEL_Y+2,INFO_PANEL_WIDTH-4,INFO_PANEL_HEIGHT-4,dialogcolor);
		/*draw shadow*/
		STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X,INFO_PANEL_Y+INFO_PANEL_HEIGHT,INFO_PANEL_X+INFO_PANEL_WIDTH,INFO_PANEL_Y+INFO_PANEL_HEIGHT, epgheadcolor);
		STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X+1,INFO_PANEL_Y+INFO_PANEL_HEIGHT-1,INFO_PANEL_X+INFO_PANEL_WIDTH-1,INFO_PANEL_Y+INFO_PANEL_HEIGHT-1, epgheadcolor);
		STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X+INFO_PANEL_WIDTH,INFO_PANEL_Y,INFO_PANEL_X+INFO_PANEL_WIDTH,INFO_PANEL_Y+INFO_PANEL_HEIGHT, epgheadcolor);
		STOSD_DrawLine(Handle_ProviewWindow,INFO_PANEL_X+INFO_PANEL_WIDTH-1,INFO_PANEL_Y+1,INFO_PANEL_X+INFO_PANEL_WIDTH-1,INFO_PANEL_Y+INFO_PANEL_HEIGHT-1, epgheadcolor);
		/*draw title*/
		STOSD_FillRectangle(Handle_ProviewWindow,INFO_PANEL_X+2,INFO_PANEL_Y+2,INFO_PANEL_WIDTH-4,24,darkyellow);
	}
	else
		STOSD_FillRectangle(Handle_ProviewWindow, INFO_PANEL_X+5,INFO_PANEL_Y+30, INFO_PANEL_WIDTH-10, INFO_PANEL_HEIGHT-35, dialogcolor);

	sttbx_Print("\ncurrentUTCtime = %d\n",currentUTCtime);
	/*get current date*/
	ConvertTimeStampToDateString(currentUTCtime/*+timeDateUserOffset*3600*/, str1);
	/*get current time*/
	currDuration = ConvertTimeStampToTimeString(currentUTCtime/*+timeDateUserOffset*3600*/, str);
	sttbx_Print("\ncurrDuration = %d\n",currDuration);
	/*draw the date&time string*/
	msm_UpdateInfoPanelTime();

	/*draw progNum & progName*/
	sprintf(str,"%03d  %s",iProgNumberBeingRetrieved,pstProgInfoTemp->cServiceName);
	EMC_DrawTSTextRectangle(Handle_ProviewWindow, 
		INFO_PANEL_X+5, INFO_PANEL_Y+2, 250, 24,
		str, JLEFT,FALSE,
		whitecolor, darkyellow, darkyellow);
	
	if((pstProgInfoTemp->bLockedStatus) /*&& (parentalLockEnabled == TRUE)*/)
	{
		switch((pstBoxInfo->iUILanguage))
		{	case 0:	strcpy(str,"Program be locked!!");
					break;
			/*
			case 1:	strcpy(str,"该节目已被锁定!!");
					break; 
			case 2:	break;
			*/
		}
		EMC_DrawTextRectangle(Handle_ProviewWindow,
				INFO_PANEL_X+10+60,INFO_PANEL_Y+30+18,150,18,
				str,JLEFT,FONT_MYFONT,FALSE,
				whitecolor,dialogcolor,dialogcolor);
	}
	else
	{
		if(PFEvtInfoDataBlock[sProgIndex][0].status == ELEMENT_OCCUPIED)
		{
			/*draw current program infomation*/
			pos_x = INFO_PANEL_X+10;
			pos_y = INFO_PANEL_Y+35;
			width = 300;
			height = 24;
			EMC_DrawTSTextRectangle(Handle_ProviewWindow,
				pos_x,pos_y,width,height,
				PFEvtInfoDataBlock[sProgIndex][0].eventName,JLEFT,FALSE,
				whitecolor,dialogcolor,dialogcolor);
			pos_y += 25;
			width = 100;
			EMC_DrawTextRectangle(Handle_ProviewWindow,
				pos_x,pos_y,width,height,
				"INFO Details",JLEFT,FONT_MYFONT,FALSE,
				lightbluecolor,dialogcolor,dialogcolor);
			pos_x = pos_x+width;
			ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][0].startTime,startTime);
			ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][0].startTime+PFEvtInfoDataBlock[sProgIndex][0].duration,endTime);
			startTime[5]=endTime[5]='\0';
			sprintf(str, "%s-%s", startTime,endTime);
			EMC_DrawTextRectangle(Handle_ProviewWindow,
				pos_x,pos_y,width,height,
				str,JLEFT,FONT_MYFONT,FALSE,
				whitecolor,dialogcolor,dialogcolor);
			/*draw current program progress bar,by Allen,09-28-2005*/
			currProgTimePassed = currentUTCtime-PFEvtInfoDataBlock[sProgIndex][0].startTime;
			currProgDuration = PFEvtInfoDataBlock[sProgIndex][0].duration;
			if(currProgTimePassed>0 && currProgDuration>0)
			{
				pos_x = pos_x+width+2;
				width = 110;
				STOSD_FillRectangle(Handle_ProviewWindow,pos_x,pos_y+3,width,18,whitecolor);
				if(currProgTimePassed<currProgDuration)
					width = 110*currProgTimePassed/currProgDuration;
				STOSD_FillRectangle(Handle_ProviewWindow,pos_x,pos_y+3,width,18,darkyellow);
			}
		}
		else
		{
			EMC_DrawTextRectangle(Handle_ProviewWindow,
				INFO_PANEL_X+10+100,INFO_PANEL_Y+30+18,100,18,
				"waiting...",JLEFT,FONT_MYFONT,FALSE,
				whitecolor,dialogcolor,dialogcolor);
		}
		if(PFEvtInfoDataBlock[sProgIndex][1].status == ELEMENT_OCCUPIED)
		{
			ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][1].startTime,startTime);
			ConvertTimeStampToTimeString(PFEvtInfoDataBlock[sProgIndex][1].startTime+PFEvtInfoDataBlock[sProgIndex][0].duration,endTime);
			startTime[5]=endTime[5]='\0';
			sprintf(str, "%s-%s %s", startTime,endTime, PFEvtInfoDataBlock[sProgIndex][1].eventName);
			EMC_DrawTSTextRectangle(Handle_ProviewWindow,
				INFO_PANEL_X+10,INFO_PANEL_Y+50+34,318,24,
				str,JLEFT,FALSE,
				whitecolor,dialogcolor,dialogcolor);
		}
	}
	
	infoStartTime = time_now();
#if 0
	STOSD_HideRegion(Handle_ProviewWindow);	/* FF03 add*/
	STOSD_ShowRegion(Handle_ProviewWindow);
#else
	EMC_ShowRegion();
#endif
	return TRUE;
}


void InfoPanelTimeoutPerform(void)
{
	clock_t curTime = time_now();
	char str[10];
	if(time_minus(curTime , infoStartTime) >= WAIT_FOR_1_SEC * 5)
	{
		msm_FeedbackMsg(cmd_Exit);
	}
}

void msm_ShowChannelInfoPanel(BOOL bUpdateInfoPanel)
{
	drawInfoPanel(bUpdateInfoPanel);
}

void msm_HideChannelInfoPanel(void)
{
	//STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
	//STOSD_HideRegion(Handle_ProviewWindow);
	EMC_HideAllRegions();
}
/*AL02 Start*/
/*--------Begin of Press RCKeyboard to Show Program ,by Allen Wu,10-21-2005--------*/
clock_t pogNumInputStartTime;
static int progArrayIndex = -1;
static char progArray[4] = {' ',' ',' ','\0'};
static int progNumTemp = -1;
static void prepareProgNumInput(void)
{
	int i;
	progArrayIndex = -1;
	for(i = 0;i<3;i++)
		progArray[i] = '_';
	progArray[3] = '\0';
	progNumTemp = 0;
}

static void drawProgNumInputPanel(int progArrayIndex,char progNum)
{
	/*restart the timing*/
	pogNumInputStartTime = time_now();
	
	switch(progArrayIndex)
	{
		case 0:
			/*In this condition,we should draw the total ProgPanel and with the first prognum*/
			/*And the total program number must more than 10*/
			EMC_HideAllRegions();
			STOSD_FillRectangle(Handle_ProviewWindow, PROG_PANEL_X, PROG_PANEL_Y,PROG_PANEL_WIDTH, PROG_PANEL_HEIGHT, dialogcolor);
			EMC_DrawTextRectangle(Handle_ProviewWindow,
				PROG_PANEL_X+20, PROG_PANEL_Y+10, 60, 32,
				progArray, JLEFT, FONT_MYENGFONT,FALSE, 
				whitecolor, dialogcolor,dialogcolor);
			EMC_ShowRegion();
			break;
		case 1:
			/*just update the second number*/
			EMC_DrawTextRectangle(Handle_ProviewWindow,
				PROG_PANEL_X+20, PROG_PANEL_Y+10, 60, 32, 
				progArray, JLEFT, FONT_MYENGFONT,FALSE, 
				whitecolor, dialogcolor,dialogcolor);
			/*if total program number less than 100,then show the program directly*/
			if(ProgramList->NoOfValidPgms<100)
			{	/*without waiting for 3 secs,show the program directly*/
				msm_FeedbackMsg(cmd_Select);
			}
			break;
		case 2:
			/*just update the third number*/
			EMC_DrawTextRectangle(Handle_ProviewWindow,
				PROG_PANEL_X+20, PROG_PANEL_Y+10, 60, 32, 
				progArray, JLEFT, FONT_MYENGFONT,FALSE, 
				whitecolor, dialogcolor,dialogcolor);
			/*without waiting for 3 secs,show the program directly*/
			msm_FeedbackMsg(cmd_Select);
			break;
	}
}

void ProNumPanelTimeoutPerform(void)
{
 	clock_t currTime = time_now();
	if(time_minus(currTime , pogNumInputStartTime) >= WAIT_FOR_1_SEC * 5)
	{
		msm_FeedbackMsg(cmd_Select);
	}
}

void msm_ShowProNumPanel(int num)
{
	if(ProgramList->NoOfValidPgms == 0)
	{
		pogNumInputStartTime = time_now();/*Added by Allen,02-16-2006*/
		msm_FeedbackMsg(cmd_Exit);
		return;
	}
	#if 0
	else if(ProgramList->NoOfValidPgms<10)
	{	/*jump to the program directly without showing the input panel*/
		progNumTemp = num;
		msm_FeedbackMsg(cmd_Select);
	}
	else
	{	/*show the InputPanel waiting for the next input*/	
		prepareProgNumInput();
		progNumTemp = num;
		progArrayIndex=0;
		progArray[progArrayIndex] = progNumTemp+'0';
		/*draw ProgNumInputPanel with the first number*/
		drawProgNumInputPanel(progArrayIndex,progArray[progArrayIndex]);
	}
	#endif
	prepareProgNumInput();
	progNumTemp = num;
	progArrayIndex=0;
	progArray[progArrayIndex] = progNumTemp+'0';
	/*draw ProgNumInputPanel with the first number*/
	drawProgNumInputPanel(progArrayIndex,progArray[progArrayIndex]);
	if(ProgramList->NoOfValidPgms<10)
		msm_FeedbackMsg(cmd_Select);
}

void msm_EditProNumPanel(int num)
{
	progArrayIndex++;
	progNumTemp = progNumTemp*10 + num;
	progArray[progArrayIndex] = num+'0';
	drawProgNumInputPanel(progArrayIndex,progArray[progArrayIndex]);
}

void msm_ConfirmProNumPanel(void)
{
	/*without waiting for 3 secs,show the program directly*/
	iCurrentProgramNo = progNumTemp;
	/*roll back*/
	prepareProgNumInput();
	/*clear the screen*/
	//STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
	EMC_HideAllRegions();

	msm_NewChannelDisplay(cmd_DirChNum);
}

void msm_ExitProNumPanel(void)
{
	/*roll back*/
	prepareProgNumInput();
	/*change state to SYSTEM_DVB_DISPLAY*/
	//STOSD_FillRectangle(Handle_ProviewWindow,0,0,ProviewWindowParams.Width,ProviewWindowParams.Height,backgroundColor);
	EMC_HideAllRegions();
}

/*------------End of Press RCKeyboard to Show Program ,by Allen Wu,10-21-2005-------------*/

/*------------------------------------EOF---------------------------------------*/

⌨️ 快捷键说明

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