📄 tidtv_menuproc.c
字号:
/*******************************************************************************
* @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 + -