📄 selector.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 05/10/10 10:19a $ ****************/
/*************** $Revision: 2.0 $ ****************/
/*************** ****************/
/*************** Description : ****************/
/*************** ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : shangbo lin ****************/
/**********************************************************************/
#define _SELECTOR_C_
#include "general.h"
#include "sltmenu.h"
#ifdef BBK_NEW_SELECTOR
#pragma NOAREGS
//#define SELECTOR_DEBUG
#ifdef SELECTOR_DEBUG
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#endif
static xdata S_SELECTOR _rSelector;
/*********************************************************************
Function : static void vSltSelectFocus(BYTE bPosition) large
Description : highlight one item.
Parameter : bPosition is the position id within selector
Return :
**********************************************************************/
static void vSltSelectFocus(BYTE bPosition) large
{
_wStartX = wSltItemStartX(_eSltMenu, bPosition);
_wEndX = wSltItemEndY(_eSltMenu, bPosition);
_wStartY = SLT_ITEM_START_Y;
_wEndY = SLT_ITEM_END_Y;
//vRectangle(WB_SELECTOR,2,11,FALSE,0); //for test
vChgColRep(WB_SELECTOR, SLT_UNFOCUS_COLOR, SLT_FOCUS_COLOR);
}
/*********************************************************************
Function : static void vSltUnselectFocus(BYTE bPosition) large
Description : disable one item's highlight.
Parameter : bPosition is the position id within selector
Return :
**********************************************************************/
static void vSltUnselectFocus(BYTE bPosition) large
{
_wStartX = wSltItemStartX(_eSltMenu, bPosition);
_wEndX = wSltItemEndY(_eSltMenu, bPosition);
_wStartY = SLT_ITEM_START_Y;
_wEndY = SLT_ITEM_END_Y;
//vRectangle(WB_SELECTOR,2,7,FALSE,0); //test
vChgColRep(WB_SELECTOR, SLT_FOCUS_COLOR, SLT_UNFOCUS_COLOR); // disable the hi light button
}
/*********************************************************************
Function :static void vRepeatItemSelect(void) large
Description :
Parameter :
Return :
**********************************************************************/
static void vRepeatItemSelect(void) large
{
BYTE bMode = bSharedInfo(SI_USR_PBC_CTRL);
BYTE bRepeatType = bSharedInfo(SI_REPEAT_MODE);
BYTE bAuxCtrl = bSharedInfo(SI_USR_AUX_CTRL);
if((bAuxCtrl == SV_REPEAT_AB) || (bAuxCtrl == SV_REPEAT_SET_A))
{
bRepeatType = SV_REPEAT_AB;
}
if(bSltItemCmd(_eSltMenu, _rSelector.bPosition) == SV_REPEAT_AB)
{
//vSendUopCmd(UOP_REPEAT, SV_REPEAT_NONE, 0, 0);
#ifdef RUSSIAN_BUYER_REQUEST2
if(bAuxCtrl == SV_REPEAT_ABNONE ||bAuxCtrl == SV_REPEAT_SET_A||bAuxCtrl == SV_REPEAT_NONE)//billy[070417] for vcd can't AB repeat when press ir_repeat.
{
vSendUopCmd(UOP_A_TO_B, 0, 0, 0);
}
#else
if(SLT_MENU_REPEAT_DVD == _eSltMenu)
{
vSendUopCmd(UOP_REPEAT, SV_REPEAT_CHAPTER, 0, 0);
}
else
{
vSendUopCmd(UOP_REPEAT, SV_REPEAT_TRACK, 0, 0);
}
#endif
// vOsdPosShow(OSD_POS_ERROR, OSD_MSG_SET_A2B, OSD_TIMEOUT);
return;
}
else
{
#ifdef RUSSIAN_BUYER_REQUEST2
if(SV_REPEAT_ABNONE != bAuxCtrl)
#endif
{
vSendUopCmd(UOP_A_TO_B, SV_AB_OFF, 0, 0);
}
}
switch(_eSltMenu)
{
case SLT_MENU_REPEAT_DVD:
if((fgIsUsrCtrlMode(bMode)) && (bSltItemCmd(_eSltMenu, _rSelector.bPosition) == SV_REPEAT_TITLE))
{
_rSelector.eError = SLT_ERR_INVALID_OPERATION;
return;
}
vSendUopCmd(UOP_REPEAT, bSltItemCmd(_eSltMenu, _rSelector.bPosition), 0, 0);
break;
case SLT_MENU_REPEAT_VCD:
case SLT_MENU_REPEAT_CDDA:
vSendUopCmd(UOP_REPEAT, bSltItemCmd(_eSltMenu, _rSelector.bPosition), 0, 0);
break;
default:
break;
}
}
/*********************************************************************
Function : static void vDrawSltMenu(void) large
Description :
Parameter :
Return :
**********************************************************************/
static void vDrawSltMenu(void) large
{
BYTE bTemp;
vSetStartEndXY(SLT_RECT_START_X, SLT_RECT_START_Y, SLT_RECT_END_X - 1, SLT_RECT_END_Y - 1);
vRectangle(WB_SELECTOR, 0, 0, TRUE, SLT_COL_BLACK2);
vOsdPasteBmpXY(SLT_RECT_START_X, SLT_RECT_START_Y, WB_SELECTOR, BMP_CORNER_TL_B75_TRA);
vOsdPasteBmpXY((WB_SELECTOR_WIDTH - SLT_CORNER_BMP_WIDTH), SLT_RECT_START_Y, WB_SELECTOR, BMP_CORNER_TR_B75_TRA);
vOsdPasteBmpXY(SLT_RECT_START_X, (WB_SELECTOR_HEIGHT - SLT_CORNER_BMP_HEIGHT), WB_SELECTOR, BMP_CORNER_BL_B75_TRA);
vOsdPasteBmpXY((WB_SELECTOR_WIDTH - SLT_CORNER_BMP_WIDTH), (WB_SELECTOR_HEIGHT - SLT_CORNER_BMP_HEIGHT), WB_SELECTOR, BMP_CORNER_BR_B75_TRA);
vSetMsgCol4(WB_SELECTOR, SLT_COL_BLACK2, SLT_UNFOCUS_COLOR, SLT_UNFOCUS_COLOR, SLT_COL_WHITE43);
}
/*********************************************************************
Function : void vRepeatMenuInit(void) large
Description :
Parameter :
Return :
**********************************************************************/
void vRepeatMenuInit(void) large
{
BYTE bTemp;
BYTE bRepeatType = bSharedInfo(SI_REPEAT_MODE);
BYTE bAuxCtrl = bSharedInfo(SI_USR_AUX_CTRL);
if((bAuxCtrl == SV_REPEAT_AB) || (bAuxCtrl == SV_REPEAT_SET_A))
{
bRepeatType = SV_REPEAT_AB;
}
vOsdPasteMsgXY(SLT_MSG_LINE1_START_X, SLT_MSG_LINE1_START_Y, WB_SELECTOR, _rSltMenu[_eSltMenu]->pwMenuMsg);
for(bTemp=0; bTemp < _rSltMenu[_eSltMenu]->bItemCnt; bTemp++)
{
vOsdPasteMsgXY(wSltItemStartX(_eSltMenu, bTemp), SLT_MSG_LINE2_START_Y, WB_SELECTOR, wSltItemMsg(_eSltMenu, bTemp));
if(bSltItemCmd(_eSltMenu, bTemp) == bRepeatType)
{
_rSelector.bPosition = bTemp;
}
}
}
/*********************************************************************
Function : BOOL vRepeatMenuState(void) large
Description :
Parameter :
Return :
**********************************************************************/
BOOL vRepeatMenuState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
case IR_RIGHT:
case IR_REPEAT:
vSltUnselectFocus(_rSelector.bPosition);
_rSelector.bPosition = (_rSelector.bPosition + 1) % (_rSltMenu[_eSltMenu]->bItemCnt);
vSltSelectFocus(_rSelector.bPosition);
break;
case IR_LEFT:
vSltUnselectFocus(_rSelector.bPosition);
_rSelector.bPosition = ((_rSltMenu[_eSltMenu]->bItemCnt) - _rSelector.bPosition + 1) % (_rSltMenu[_eSltMenu]->bItemCnt);
_rSelector.bPosition = ((_rSltMenu[_eSltMenu]->bItemCnt) - _rSelector.bPosition) % (_rSltMenu[_eSltMenu]->bItemCnt);
vSltSelectFocus(_rSelector.bPosition);
break;
case IR_ENTER:
case IR_PLAY_ENTER:
case IR_TIME_OUT:
vRepeatItemSelect();
vSetExitInputState();
break;
case IR_UP:
case IR_DOWN:
fgRet = FALSE;
break;
#ifdef GUI_CANCEL_BUTTON
case IR_CANCEL:
vSetExitInputState();
break;
#endif
default:
fgRet = FALSE;
vSetExitInputState();
break;
}
return (fgRet);
}
/*********************************************************************
Function : void vRepeatMenuExit(void) large
Description :
Parameter :
Return :
**********************************************************************/
void vRepeatMenuExit(void) large
{
#ifdef RUSSIAN_BUYER_REQUEST2 //songchen 061211
BYTE bAuxCtrl = bSharedInfo(SI_USR_AUX_CTRL);
#endif
switch(_rSelector.eError)
{
case SLT_ERR_INVALID_OPERATION:
vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
return;
case SLT_ERR_REPEAT_OPERATION:
vOsdShowError(SV_ERR_GENERAL, OSD_TIMEOUT_SHORT);
return;
case SLT_ERR_NONE:
default:
break;
}
//if(bSltItemCmd(_eSltMenu, _rSelector.bPosition) == SV_REPEAT_AB)
//{
//vOsdPosShow(OSD_POS_ERROR, OSD_MSG_SET_A2B, OSD_TIMEOUT);
//}
#ifdef RUSSIAN_BUYER_REQUEST2 //songchen 061211
if(bAuxCtrl == SV_REPEAT_AB)
{
//SHOW NOTHING
}
else if(bAuxCtrl == SV_REPEAT_SET_A)
{
vOsdPosShow(OSD_POS_REPEAT_MSG, OSD_MSG_SET_B, OSD_TIMEOUT);
}
else if(bAuxCtrl == SV_REPEAT_ABNONE && (bSltItemCmd(_eSltMenu, _rSelector.bPosition) == SV_REPEAT_AB)) //if none then display,songchen 061222
{
vOsdPosShow(OSD_POS_REPEAT_MSG, OSD_MSG_SET_B, OSD_TIMEOUT);
}
else
{
/*vOsdPosShow(OSD_POS_REPEAT_MSG, OSD_MSG_SET_A2B, OSD_TIMEOUT);*///songchen cancel in 061222
}
#endif
_eSltMenu = SLT_MENU_NONE;
}
/*********************************************************************
Function : void vSelectorInit(BYTE fgInit) large
Description : Initial function when go into selector state.
Parameter :
Return :
**********************************************************************/
void vSelectorInit(BYTE fgInit) large
{
if (bSharedInfo(SI_OSD_CMD_BUF_FULL) == TRUE)
{
vSetExitInputState();
return;
}
if(_eSltMenu > SLT_MENU_MAX)
{
vSetExitInputState();
return;
}
_rSelector.eError = SLT_ERR_NONE;
_rSelector.bPosition = 0;
_rSelector.eState = SLT_STATE_INIT;
SetSelector();
vOsdShowWb(OSD_WB_FULL_SCR);
//vDisableWB(WB_ZOOM_BR);
vCreateWB(WB_SELECTOR, TRUE);
vSetWBTcColor(WB_SELECTOR);
vSetTcPal(WB_SELECTOR, SLT_COL_BLACK2, SLT_COLOR_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetTcPal(WB_SELECTOR, SLT_COL_BLACK42, SLT_COLOR_BLEND, NEWUICOLOR_PANEL_GRAY); //unselect color
vSetTcPal(WB_SELECTOR, SLT_COL_BLACK1, BLEND_1, PURE_BLACK);
vSetTcPal(WB_SELECTOR, SLT_COL_WHITE41, BLEND_1, PURE_WHITE);
vSetTcPal(WB_SELECTOR, SLT_COL_WHITE43, BLEND_3, PURE_WHITE);
vSetTcPal(WB_SELECTOR, SLT_COL_RED43, BLEND_3, PURE_RED); //selecting color
vSetTransEn(WB_SELECTOR, SLT_COL_BG);
vDrawSltMenu();
if((_rSltMenu[_eSltMenu]->vMenuInit) != SLT_FUN_NULL)
{
(_rSltMenu[_eSltMenu]->vMenuInit)();
}
vSltSelectFocus(_rSelector.bPosition);
vEnableWB(WB_SELECTOR);
vIrSetTimeOut(IR_TIMEOUT_SELECTOR);
}
/*********************************************************************
Function : BOOL fgSelectorState(void) large
Description : State machine when selector input state.
Parameter :
Return :
**********************************************************************/
BOOL fgSelectorState(void) large
{
BOOL fgRet = TRUE;
switch (_bIRKey)
{
//case IR_VOLUME_DOWN:
//case IR_VOLUME_UP:
// fgRet = FALSE;
// break;
//please place the irkeys here, which need to be processed in the function of 'vMenuState'.
case IR_RIGHT:
case IR_LEFT:
case IR_UP:
case IR_DOWN:
case IR_ENTER:
case IR_PLAY_ENTER:
case IR_REPEAT:
case IR_DISPLAY:
case IR_TIME_OUT:
if((_rSltMenu[_eSltMenu]->vMenuState) != SLT_FUN_NULL)
{
fgRet = (_rSltMenu[_eSltMenu]->vMenuState)();
}
break;
default:
fgRet = FALSE;
vSetExitInputState();
break;
}
vIrSetTimeOut(IR_TIMEOUT_SELECTOR);
return (fgRet);
}
/*********************************************************************
Function : void vSelectorExit(void) large
Description : Exit function when exiting selector input mode.
Parameter :
Return :
**********************************************************************/
void vSelectorExit(void) large
{
vOsdSetSt(OSD_ST_BURST);
vDeleteWB(WB_SELECTOR);
vOsdSetSt(OSD_ST_NML);
/* restore OSD mode */
vOsdShowWb(OSD_WB_RESTORE);
ClrSelector();
if((_rSltMenu[_eSltMenu]->vMenuExit) != SLT_FUN_NULL)
{
(_rSltMenu[_eSltMenu]->vMenuExit)();
}
}
//---------------------------undefine bbk_new_selector---------------------------------------------------
#else
//dummy functions
void vSelectorInit(BYTE fgInit) large
{
return;
}
BOOL fgSelectorState(void) large
{
return (FALSE);
}
void vSelectorExit(void) large
{
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -