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

📄 selector.c

📁 MTK portableDVD 采用mtk1389方案的代码
💻 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 + -