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

📄 tidtv_menuproc.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************
*	@ModuleName  ::	TiDTV_MenuProc.c
*	
*	@Copyright	 ::	Copyright 2005- Texas Instruments, Inc.
*	
*	@Description ::	DTV Menu processing module
*	
*	@History     ::
*---------------------------------------
*	03-26-2005	W.Shi	Created
*	04-13-2005	Ray		Modified to LCD DTV system
*******************************************************************************/
#include	<stdio.h>
#include	"ucos_ii.h"

#include	"TiDTV_DataType.h"
#include	"TiDTV_GLib.h"
#include	"TiDTV_GUI.h"
#include	"TiDTV_McuComm.h"
#include	"TiDTV_IrKey.h"
#include	"TiDTV_Icon.h"
#include	"TiDTV_Msg.h"
#include	"TiDTV_Menu.h"
//#include	"TiDTV_Utility.h"
#include	"TiDTV_UserPreferDataTable.h"
#include	"TiDTV_SysCtrl.h"
#include	"TiDTV_Buffers.h"

extern UINT32 TiDTV_OsdPaletteBufMain[256];
extern 	const unsigned int TiDTV_256CLUTMenuStyleOne[256];
extern void TiDTV_CreateMainFrame(USHORT x, USHORT y, USHORT w, USHORT h );
extern void TiDTV_CreateSubFrame(USHORT x, USHORT y, USHORT w, USHORT h );
extern void TiDTV_UpdateSubFrameMiddleBlock(USHORT xPos, USHORT yPos, USHORT Width, USHORT Height);
extern void TiDTV_DrawGuage(UCHAR HighLight, USHORT xPos, USHORT yPos, USHORT Length, short Min, short Max, short Current_Value, short Direction, UCHAR FontColor);


extern UINT16 **pCurDtvMsgBase;	// pointer to Current message base (default = English)
extern TI_DTV_USER_PREFER_DATA UserPreferSetting;
extern TI_DTV_MENU_NODE_NAVIGATION TiDTV_Basic_Navigation;
////////////////////////////////////////////////


////////////////////////////////////////////////
extern UCHAR	InParentalGuidelines;
extern UCHAR	PassWordCursor;
extern UCHAR	PassWordCorrect;
extern UCHAR	PassWordInputEnd;
extern UCHAR	PassWordInputing;
extern unsigned char InRadioBox;
extern unsigned short CurrentRadioBoxItem;
extern unsigned char InCheckBox;
extern unsigned short CurrentCheckBoxItem;




UINT16 gSubMenuLevel;
USHORT gVideoModeIndex;
USHORT gNoiseRecIndex;
USHORT gAudioRadioBoxIndex;



static TI_DTV_MENU *pDtvSubMenu[] = {
	&TiDtvMenuVideo,
	&TiDtvMenuAudio,
	&TiDtvMenuChannel,
	&TiDtvMenuGuide,
	&TiDtvMenuSetup,
};


static TI_DTV_MENU_NODE_NAVIGATION *pDtvMainMenuNavigation[] = {
	&TiDTV_Basic_Navigation,
	&TiDTV_Basic_Navigation,
	&TiDTV_Basic_Navigation,
	&TiDTV_Basic_Navigation,
	&TiDTV_Basic_Navigation,
};

static const USHORT DtvMainMenuInfoIndex[] = {
	PICTUREINFO_INDEX,
	AUDIOINFO_INDEX,
	PROGRAMINFO_INDEX,
	GUIDEINFO_INDEX,
	SETUPINFO_INDEX,
};


void DtvDispMainMenuItem(TI_DTV_MENU_ITEM *pMenuItem, UCHAR CursorColor);
void DtvDispSubMenuItem(TI_DTV_MENU_ITEM *pMenuItem, UCHAR CursorColor, UCHAR FillColor);

void DtvDispSubMenu(void);







/*******************************************************************************
*	@RoutineName:: DtvMainMenuOpcodeParser
*
*	@Description:: DTV Main Menu Opcode Parser
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void DtvMainMenuOpcodeParser(void)
{
	TI_DTV_MENU_ITEM *pNextItem;
	int k;
	
	switch (TiDTV_KeyBuf.CurKeyCodeMenu) {
		case TI_DTV_IR_KEY_UP:
			pNextItem = pCurDtvMenu->pCurItem->pUpItem;
			break;
			
		case TI_DTV_IR_KEY_DOWN:
			pNextItem = pCurDtvMenu->pCurItem->pDownItem;
			break;
			
		case TI_DTV_IR_KEY_LEFT:
			
			pNextItem = pCurDtvMenu->pCurItem->pLeftItem;
			break;
			
		case TI_DTV_IR_KEY_RIGHT:
			
			pNextItem = pCurDtvMenu->pCurItem->pRightItem;
			break;
			
		default:
			pNextItem = NULL;
			break;

	}
	
	if (pNextItem != NULL) {
		// Erase the Cursor
		DtvDispMainMenuItem(pCurDtvMenu->pCurItem, MAIN_MENU_CHARACTER_UNSEL_FRONTCOLOR);
		
		// Display the Cursor
		pCurDtvMenu->pCurItem = pNextItem;
		DtvDispMainMenuItem(pCurDtvMenu->pCurItem, MAIN_MENU_CHARACTER_SEL_FRONTCOLOR);

		
		k = ((long) pCurDtvMenu->pCurItem - (long) pCurDtvMenu->pItemList) / sizeof(TI_DTV_MENU_ITEM);
		TiDTV_UpdateInformationBar(DtvMainMenuInfoIndex[k], SUB_MENU_CHARACTER_HIGHTLIGHTCOLOR);
		TiDTV_UpdateNavigationBar(pDtvMainMenuNavigation[k], 0);
		pCurDtvMenu->pNextMenu = (TI_DTV_MENU *) pDtvSubMenu[k];
		DtvDispSubMenu();	// Display the Sub Menu as Notes
	} else if (TiDTV_KeyBuf.CurKeyCodeMenu == TI_DTV_IR_KEY_RIGHT ||
				TiDTV_KeyBuf.CurKeyCodeMenu == TI_DTV_IR_KEY_SELECT)
	{
		if (pCurDtvMenu->pCurItem->ActFunc != NULL)
			(pCurDtvMenu->pCurItem->ActFunc)();		// Invoke the acting function
	}
}

/*******************************************************************************
*	@RoutineName:: DtvSubMenuOpcodeParser
*
*	@Description:: DTV Sub Menu Opcode Parser
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void DtvSubMenuOpcodeParser(void)
{
	(pCurDtvMenu->pCurItem->ActFunc)();		// Invoke the acting function
	
}





/*******************************************************************************
*	@RoutineName:: DtvMainMenuInit
*
*	@Description:: Init function for the Main Menu
*
*	@Input		::
*		TI_DTV_MENU *pMenu	: pointer to the Menu
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void DtvMainMenuInit(TI_DTV_MENU *pMenu)
{

	TI_DTV_MENU_ITEM *pMenuItem;
	UCHAR BackColor;
	int   i;
//	UINT8 Bstyle;


	InParentalGuidelines = 0;
	PassWordCursor = 0;
	PassWordCorrect= 0;
	PassWordInputEnd = 0;
	PassWordInputing = 0;
	InRadioBox = 0;
	CurrentRadioBoxItem = 0;
	InCheckBox = 0;
	CurrentCheckBoxItem = 0;


	TiDTV_OsdPaletteBufMain[0x7b] = TiDTV_256CLUTMenuStyleOne[0x7b];
	OSTimeDly(5);
	TiDTV_OsdClearWindow(&TiDTV_OsdScreenMain, &TiDTV_OsdScreenMain.pOsdWindows[0], MENU_TRANSPARENCY_COLOR);

	memmove(TiDTV_OsdPaletteBufMain, (UCHAR *) &(TiDTV_256CLUTMenuStyleOne[0]), sizeof(TiDTV_256CLUTMenuStyleOne));

	TiDTV_OsdSetCharFont(&TiDTV_OsdScreenMain, TI_DTV_EIA708B_FONT_DEFAULT,
					TI_DTV_EIA708B_FONT_LARGE, 1,
					0, 0,
					0, 0);

	TiDTV_OsdClearWindow(&TiDTV_OsdScreenMain, &TiDTV_OsdScreenMain.pOsdWindows[0], MENU_TRANSPARENCY_COLOR);
	TiDTV_CreateMainFrame(0, 0, 0, 0 );
	TiDTV_CreateSubFrame(0, 0, 0, 0 );
	TiDTV_UpdateInformationBar(DtvMainMenuInfoIndex[0], SUB_MENU_CHARACTER_HIGHTLIGHTCOLOR);
	TiDTV_UpdateNavigationBar(pDtvMainMenuNavigation[0], 0);



	pMenuItem = DtvMainMenu.pItemList;
	for (i = 0; i < DtvMainMenu.TotalNumItems; i++, pMenuItem++) {
		if (pMenuItem == DtvMainMenu.pCurItem) {
			// Display the Current Selected Menu Item
			BackColor = MAIN_MENU_CHARACTER_SEL_FRONTCOLOR;
		} else {
			BackColor = MAIN_MENU_CHARACTER_UNSEL_FRONTCOLOR;
		}
		DtvDispMainMenuItem(pMenuItem, BackColor);
//		DrawMainMenuItemBorder(pMenuItem, Bstyle);
	}
	
	// Display the Sub Menu as Notes

	DtvMainMenu.pNextMenu = &TiDtvMenuVideo;
	DtvDispSubMenu();
}

/*******************************************************************************
*	@RoutineName:: DtvDispSubMenu
*
*	@Description:: Display the Sub Menu as Notes
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void DtvDispSubMenu(void)
{
	// Save the Menu Attributes
	UCHAR SubMenuAttrib = pCurDtvMenu->pNextMenu->Attrib;
	
	TiDTV_UpdateSubFrameMiddleBlock(0,0,0,0);
	// Don't display the Footer
	pCurDtvMenu->pNextMenu->Attrib &= ~TI_DTV_MENU_FOOTER_DISP;
	TiDTV_DispMenu(pCurDtvMenu->pNextMenu);
	
	// Restore the Menu Attributes
	pCurDtvMenu->pNextMenu->Attrib = SubMenuAttrib;
}

/*******************************************************************************
*	@RoutineName:: DtvDispMainMenuItem
*
*	@Description:: Display an item of the main menu
*
*	@Input		::
*		TI_DTV_MENU_ITEM *pMenuItem	: pointer to the Menu Item
*		UCHAR CursorColor			: the color for drawing the cursor
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void DtvDispMainMenuItem(TI_DTV_MENU_ITEM *pMenuItem, UCHAR CursorColor)
{
	short x = pMenuItem->IconX, y = pMenuItem->IconY;
	USHORT	Bmp_Index;
	short CurrentStringLength, CurrentStringHeight;

	// Draw the Icon
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, x, y);
	if(CursorColor == MAIN_MENU_CHARACTER_SEL_FRONTCOLOR)
	{
		Bmp_Index = BMP_SELBUTTON;
		TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, Bmp_Index);

	}
	else
	{
		TiDTV_OsdDrawBitMap(&TiDTV_OsdScreenMain, pMenuItem->IconCode);
	}
	CurrentStringLength = (short)TiDTV_OsdGetStringLength(&TiDTV_OsdScreenMain, pCurDtvMsgBase[pMenuItem->MsgIndex]);
	CurrentStringHeight = (short)TiDTV_OsdGetStringHeight(&TiDTV_OsdScreenMain, pCurDtvMsgBase[pMenuItem->MsgIndex]);
	// caculate root title's position
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, (MAIN_MENU_CENTER_XPOSITION - CurrentStringLength/2), (y + 32 - CurrentStringHeight/2));
	// set root character attribute 
	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, MAIN_MENU_CHARACTER_UNSEL_FRONTCOLOR, 0);
	// draw root TitleIndex
	TiDTV_OsdDrawString(&TiDTV_OsdScreenMain, pCurDtvMsgBase[pMenuItem->MsgIndex]);
	
}

/*******************************************************************************
*	@RoutineName:: DtvDispSubMenuItem
*
*	@Description:: Display an item of the sub menu
*
*	@Input		::
*		TI_DTV_MENU_ITEM *pMenuItem	: pointer to the Menu Item
*		UCHAR CursorColor			: the color for drawing the cursor
*		UCHAR FillColor				: Filling color
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void DtvDispSubMenuItem(TI_DTV_MENU_ITEM *pMenuItem, UCHAR CursorColor, UCHAR FillColor)
{
	USHORT  xPos, yPos;
	short * UserPreferOffset;

	short x = pMenuItem->MsgX, y = pMenuItem->MsgY;
	
#if 1	
	TiDTV_OsdRect(&TiDTV_OsdScreenMain, x - 10, y - 10, SUB_MENU_WIDTH - 48, 24 + 20,
				TI_DTV_G_BORDER | TI_DTV_G_4ROUND, CursorColor, FillColor, 0);
       if(CursorColor == SUB_MENU_CHARACTER_SEL_FRONTCOLOR)
       {
       	switch(pMenuItem->MsgIndex)
       	{
       	case BRIGHTNESS_INDEX:
       		if(pMenuItem->pDownItem->MsgIndex == CONTRAST_INDEX)
       		{
                     	xPos = SUB_MENU_GUAGE_XPOSITION;

⌨️ 快捷键说明

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