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

📄 emc_epg.c

📁 关于嵌入式PCB板UI的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*******************************************************************************
File name		: emc_epg.c
Description	: EPG
Revision    	: 1.0

COPYRIGHT (C) EMC-HUST-JRC 2006.

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

/* Includes --------------------------------------------------------------------- */
#include "stddefs.h"   /* standard definitions*/
#include <stdio.h>
#include <string.h>
#include "sttbx.h"
#include "stsys.h"

#include "vid.h"
#include "gui.h"
#include "osdwrap.h"
#include "loadchannels.h"
#include "UIPositionDef.h"

#include "emc_menustate.h"
#include "emc_font.h"
#include "emc_epg.h"

#include "./pics/data_bitmap_epg.h"
#include "./pics/data_struct_epg.h"

/* Private Typedef ----------------------------------------------------------------*/
#define MAX_PROG_ITEMS_IN_EPG 5
#define MAX_EVENT_ITEMS_IN_EPG 5

/* Static variables & structures------------------------------------------------------ */
static int iEventItemOff = 0; 	/*The Index of event item current selected in the WHOLE event list*/
static int iTopEventItem = 0; 	/*The TOP Index of event item in the current event list PAGE*/

static int iSelectedDay = 0;/*1:Monday, 2:Tuesday, ..., 7:Sunday*/
static U32 uCurrentDateForShow;
static int iCurrentTimePeriod = -1;
static BOOL bNeedUpdateSkedInfo = FALSE;

static int positon_epg_progressbar = 0;/*this is used for rolling the progressbtn*/
static int iChannelItemOff = 0;


static char* TimePeriod[8] = 
{
	"00:00-03:00","03:00-06:00","06:00-09:00","09:00-12:00",
	"12:00-15:00","15:00-18:00","18:00-21:00","21:00-24:00",
};
static char * WeekDay[7] = {"Mon","Tue","Wed","Thur","Fri","Sat","Sun"};

/* Global variables & structures----------------------------------------------------- */
extern U32 currentUTCtime;
extern short int sProgIndex;
extern int iProgNumber;
extern short int sProgIndex2bRetrieved;
extern int iProgNumberBeingRetrieved;
extern SLOT_ID old_EIT_slot;
extern SERVICE_EPG_INFO SkedEvtInfoDataBlock[];
extern EPG_PF_INFO_STRUCT PFEvtInfoDataBlock[] [2];
/* Functions--------------------------------------------------------------------- */
extern ST_ErrorCode_t SRAVC_PositionVideoWindow(int decode_channel, BOOL fullscreen, S32 offsetX, S32 offsetY, U32 width, U32 height);
extern void SRDBE_GetCurEventInfo(void);

static void drawEPGHeader(void)
{
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_HEADER1_X,EPG_HEADER1_Y,Bitmap_Struct_EPG_Header1);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_HEADER2_X,EPG_HEADER2_Y,Bitmap_Struct_EPG_Header2);
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_TIMEBOX_X,EPG_TIMEBOX_Y,EPG_TIMEBOX_W,EPG_TIMEBOX_H,skybluecolor);
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_TIMEBOX_X+2,EPG_TIMEBOX_Y+2,EPG_TIMEBOX_W-4,EPG_TIMEBOX_H-4,darkbluecolor);
}

static void drawEPGProgramPointer(int index,BOOL bHighlight)
{
	STOSD_Color_t color;
	if(bHighlight)
		color = greencolor;
	else
		color = skybluecolor;
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_LEFTPANEL_X+9,EPG_LEFTPANEL_Y+7+index*35,6,15,color);
	EMC_DrawTriangle(TRIANGLE_RIGHT,EPG_LEFTPANEL_X+15,EPG_LEFTPANEL_Y+1+index*35,27,color);
}
static void drawEPGLeftsidePanel(void)
{
	int i;
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_LEFTPANEL_X,EPG_LEFTPANEL_Y,EPG_LEFTPANEL_W,EPG_LEFTPANEL_H,orangecolor);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_LEFTPANEL_X, EPG_LEFTPANEL_Y+EPG_LEFTPANEL_H-8, Bitmap_Struct_EPG_LeftBottom);
	for(i=0;i<MAX_PROG_ITEMS_IN_EPG;i++)
	{
		drawEPGProgramPointer(i,0);
	}
}

static void drawEPGSmallScreenHeader(void)
{
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X,EPG_SMALL_SCREEN_FRAME_Y,Bitmap_Struct_EPG_SmallScreen_Header);
}


void drawEPGSmallScreenBottom(void)
{
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X,EPG_SMALL_SCREEN_BOTTOM_Y,EPG_SMALL_SCREEN_FRAME_W,EPG_SMALL_SCREEN_BOTTOM_H,orangecolor);
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X,EPG_SMALL_SCREEN_BOTTOM_Y+EPG_SMALL_SCREEN_BOTTOM_H-8,Bitmap_Struct_EPG_LeftBottom);
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X+EPG_SMALL_SCREEN_FRAME_W-9,EPG_SMALL_SCREEN_BOTTOM_Y+EPG_SMALL_SCREEN_BOTTOM_H-9,Bitmap_Struct_EPG_RightBottom);
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_SMALL_SCREEN_FRAME_X+7,EPG_SMALL_SCREEN_BOTTOM_Y+3,Bitmap_Struct_EPG_Volume);
}

static void drawEPGSmallScreen(void)
{
	drawEPGSmallScreenHeader();
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_SMALL_SCREEN_X-4,EPG_SMALL_SCREEN_Y-4,EPG_SMALL_SCREEN_FRAME_W,EPG_SMALL_SCREEN_H+8,orangecolor);
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_SMALL_SCREEN_X,EPG_SMALL_SCREEN_Y,EPG_SMALL_SCREEN_W,EPG_SMALL_SCREEN_H,backgroundColor);
	drawEPGSmallScreenBottom();
}

static void drawEPGProgressBar(void)
{
	STOSD_FillRectangle(Handle_ProviewWindow, EPG_PROGRESSBAR_X,EPG_PROGRESSBAR_Y, EPG_PROGRESSBAR_W,EPG_PROGRESSBAR_H, whitecolor);
	STOSD_FillRectangle(Handle_ProviewWindow, EPG_PROGRESSBAR_X+3,EPG_PROGRESSBAR_Y+3, EPG_PROGRESSBAR_W-6,EPG_PROGRESSBAR_H-6, dialogcolor);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_PROGRESSBAR_X+4,EPG_PROGRESSBAR_Y+4, Bitmap_Struct_EPG_Arrow_Up);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_PROGRESSBAR_X+4,EPG_PROGRESSBAR_Y+EPG_PROGRESSBAR_H-4-Bitmap_Struct_EPG_Arrow_Down.Height, Bitmap_Struct_EPG_Arrow_Down);
}
static void drawEPGProgressBtn(void)
{
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_PROGRESSBAR_X+4,EPG_PROGRESSBAR_Y+3+Bitmap_Struct_EPG_Arrow_Up.Height+positon_epg_progressbar, Bitmap_Struct_EPG_ProgressBar);
}

static void drawEPGMenuDateBtnUnSelected(int i)
{
	int left_margin = 0;
	int btn_width = 0;
	HL_STOSD_DrawBMP(Handle_ProviewWindow, POS_EPG_DATE_BTN_X+i*58,POS_EPG_DATE_BTN_Y, Bitmap_Struct_EPG_UpBtn);
	switch(i)
	{
		case 0:
			left_margin = 8;
			btn_width = 35;
			break;
		case 1:
			left_margin = 10;
			btn_width = 33;
			break;
		case 2:
			left_margin = 8;
			btn_width = 35;
			break;
		case 3:
			left_margin = 7;
			btn_width = 38;
			break;
		case 4:
			left_margin = 15;
			btn_width = 28;
			break;
		case 5:
			left_margin = 10;
			btn_width = 30;
			break;
		case 6:
			left_margin = 10;
			btn_width = 30;
			break;
	}
	EMC_DrawTextRectangle(Handle_ProviewWindow,
		POS_EPG_DATE_BTN_X+i*58+left_margin-1,POS_EPG_DATE_BTN_Y+5,btn_width+1,17,
		WeekDay[i],JLEFT,FONT_MYFONT,FALSE,
		whitecolor,dialogcolor,dialogcolor);
}

static void drawEPGMenuDateBtnSelected(int i)
{
	int left_margin = 0;
	int btn_width = 0;
	HL_STOSD_DrawBMP(Handle_ProviewWindow, POS_EPG_DATE_BTN_X+i*58,POS_EPG_DATE_BTN_Y, Bitmap_Struct_EPG_DownBtn);
	switch(i)
	{
		case 0:
			left_margin = 8-2;
			btn_width = 35;
			break;
		case 1:
			left_margin = 10-2;
			btn_width = 33;
			break;
		case 2:
			left_margin = 8-2;
			btn_width = 35;
			break;
		case 3:
			left_margin = 7-2;
			btn_width = 38;
			break;
		case 4:
			left_margin = 15-2;
			btn_width = 28;
			break;
		case 5:
			left_margin = 10-2;
			btn_width = 30;
			break;
		case 6:
			left_margin = 10-2;
			btn_width = 30;
			break;
	}
	EMC_DrawTextRectangle(Handle_ProviewWindow,
		POS_EPG_DATE_BTN_X+i*58+left_margin-1,POS_EPG_DATE_BTN_Y+6,btn_width+1,17,
		WeekDay[i],JLEFT,FONT_MYFONT,FALSE,
		whitecolor,dialogcolor,dialogcolor);
}

/*modified by Allen,09-24-2005,fitting the new UI*/
/*NOTICE!!*/
/*uCurrentDateForShow : 	1:Monday, 2:Tuesday, ...,0:Sunday*/
/*											  7:Sunday*/
/*iSelectedDay : 			1:Monday, 2:Tuesday, ..., 7:Sunday*/
static void drawEPGEventListBox(void)
{
	int i;
	STOSD_Color_t backcolor;
	backcolor.Type = STOSD_COLOR_TYPE_PALETTE;
	backcolor.Value.PaletteEntry = 84;
	
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+41,397, 272+4, orangecolor);
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+231,EPG_HEADER1_Y+63,389, 247+4, dialogcolor);
	EMC_DrawTextRectangle(Handle_ProviewWindow,
		EPG_HEADER1_X+229,EPG_HEADER1_Y+41, 120, 22, 
		"Program Guide", JLEFT,FONT_MYFONT,FALSE,
		darkbluecolor,orangecolor, orangecolor);
	for(i=0;i<MAX_EVENT_ITEMS_IN_EPG;i++)
	{
		STOSD_FillRectangle(Handle_ProviewWindow,EPG_EVENT_ITEM_X,EPG_EVENT_ITEM_Y+i*(EPG_EVENT_ITEM_H+6),EPG_EVENT_ITEM_W,EPG_EVENT_ITEM_H,yellowcolor);
	}
	/*time period box*/
	STOSD_FillRectangle(Handle_ProviewWindow, EPG_EVENT_ITEM_X, EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6), 170, 32, blackcolor);
	EMC_DrawTriangle(TRIANGLE_UP, EPG_EVENT_ITEM_X+Bitmap_Struct_EPG_TimeBtn.Width+5,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+20,20, whitecolor);
	EMC_DrawTriangle(TRIANGLE_DOWN, EPG_EVENT_ITEM_X+Bitmap_Struct_EPG_TimeBtn.Width+5+20,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+10,20, whitecolor);
	
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_EVENT_ITEM_X+1,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+1, Bitmap_Struct_EPG_TimeBtn);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width*2-10,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+1, Bitmap_Struct_EPG_PageBtn);
	EMC_DrawTextRectangle(Handle_ProviewWindow,
		EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width*2-10+8,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+5,75,15,
		"prev page",JLEFT,FONT_MYFONT,FALSE,
		whitecolor,backcolor,backcolor);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+1, Bitmap_Struct_EPG_PageBtn);
	EMC_DrawTextRectangle(Handle_ProviewWindow,
		EPG_EVENT_ITEM_X+380-Bitmap_Struct_EPG_PageBtn.Width+9,EPG_EVENT_ITEM_Y+MAX_EVENT_ITEMS_IN_EPG*(EPG_EVENT_ITEM_H+6)+5,75,15,
		"next page",JLEFT,FONT_MYFONT,FALSE,
		whitecolor,backcolor,backcolor);

	/*progressbar*/
	drawEPGProgressBar();
	drawEPGProgressBtn();
}

static void drawEPGEventDescBox(void)
{
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+318+7,397,130,orangecolor);
	STOSD_FillRectangle(Handle_ProviewWindow,EPG_HEADER1_X+227+4,EPG_HEADER1_Y+318+4+7,397-8,107,yellowcolor);
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+318+7, Bitmap_Struct_EPG_LeftTop);
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227+397-14,EPG_HEADER1_Y+318+7, Bitmap_Struct_EPG_RightTop);

	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227,EPG_HEADER1_Y+318+130-8+7, Bitmap_Struct_EPG_LeftBottom);
	HL_STOSD_DrawBMP(Handle_ProviewWindow,EPG_HEADER1_X+227+397-9,EPG_HEADER1_Y+318+130-9+7, Bitmap_Struct_EPG_RightBottom);
	
	EMC_DrawTriangle(TRIANGLE_UP,EPG_HEADER1_X+582, EPG_HEADER1_Y+435+8+7,17,lightbluecolor);
	EMC_DrawTriangle(TRIANGLE_DOWN,EPG_HEADER1_X+598, EPG_HEADER1_Y+435+7,17,lightbluecolor);
}

static void drawEPGItem(U8 offset,const ST_String_t item,BOOL bHighlight)
{
	int 	i;
	char	epg_item[MAX_SERVICE_NAME_LENGTH+10];
	U16 DrawPositionX,DrawPositionY;
	STOSD_Color_t textcolor;

	if(bHighlight)
	{
		textcolor = backgroundColor;
	}
	else
	{
		textcolor = whitecolor;
	}
	
	DrawPositionX=EPG_PROGITEM_X;
	DrawPositionY=EPG_PROGITEM_Y+offset*(32+3);
	HL_STOSD_DrawBMP(Handle_ProviewWindow, DrawPositionX,DrawPositionY, Bitmap_Struct_EPG_ProgItem);

	for(i=0;i<3;i++)
	{
		epg_item[i] = item[i];
	}
	epg_item[3] = ' ';
	/*epg_item[4] = ' ';*/
	for(i=0;i<MAX_SERVICE_NAME_LENGTH;i++)
	{
		if(item[i+17]!='\0' || item[i+17]!=' ')
			epg_item[i+4] = item[i+17];
		else
		{
			epg_item[i+4] = '\0';

⌨️ 快捷键说明

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