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

📄 drm.c

📁 mtk1389L latest sourcecode enjoy
💻 C
字号:
#ifndef _DRM_C
#define _DRM_C
#include "general.h"
#include "../osdshow.h"

#pragma NOAREGS

#ifdef SUPPORT_DRM

void vDRMShowItems(sTextItem **prItem,BYTE bItemNO) large
{
  BYTE i;
      
  for(i=0;i<bItemNO;i++)//sizeof(prItem)
  {
    vOsdMsgPosPaste(WB_DRM,prItem[i]->wPosX,prItem[i]->wPosY,prItem[i]->wMsgId);
  }
}

void vDRMDrawRect(void) large
{
   //draw outside rectangle
  _wStartX=2;
  _wStartY=2;
  _wEndX=622; // modiy it from 582 to 622 by Bright /2005/10/21/, for CQ(PL00205062)
  _wEndY=356;
  vRectangle(WB_DRM,4,0x0e,FALSE,0X00);
  //draw inside rectangle

  _wStartX=12;
  _wStartY=12;
  _wEndX=612; // modiy it from 572 to 612 by Bright /2005/10/21/, for CQ(PL00205062)
  _wEndY=346;
  vRectangle(WB_DRM,2,0x0e,FALSE,0X00);
}


void vDRMShowRgCode(void) large
{
  BYTE pbStr[9];
  BYTE i;
  pbStr[0]=8;
  //get registeration from share infor registeration
  /*pbStr[1]='a';
  pbStr[2]='b';
  pbStr[3]='c';
  pbStr[4]='d';
  pbStr[5]='e';
  pbStr[6]='f';
  pbStr[7]='g';
  pbStr[8]='h';*/
  
  for(i=0;i<8;i++)
  {
    pbStr[1+i]= bSharedInfo(SI_DRM_REGCODE+i);
  }
  
  #ifdef PLAYER_GOTO
  vOsdPasteMsgXYArg(DRM_DRC_RG_CODE_X,DRM_DRC_RG_CODE_Y,WB_DRM,OSD_MSG_DRM_DRC4,pbStr);
  #endif
}

void vDRMShowRntLmt(void) large
{
  BYTE pbStr[4];
  BYTE bTemp;
  pbStr[0]=3;
  
  //get the limit times from share infor
  bTemp=bSharedInfo(SI_DRM_VIEWS);
  if(bTemp<10)
  {
    pbStr[1]=0X20;
    pbStr[2]=bTemp+'0';
    pbStr[3]=0X20;
  }
  else if(bTemp<100)
  {
    pbStr[1]=0X20;
    pbStr[2]=bTemp/10+'0';
    pbStr[3]=bTemp%10+'0';
  }
  else
  {
    pbStr[1]=bTemp/100+'0';
    pbStr[2]=(bTemp%100)/10+'0';
    pbStr[3]=bTemp%10+'0';
  }
  
  #ifdef PLAYER_GOTO
  vOsdPasteMsgXYArg(DRM_RNTLMT_X,DRM_RNTLMT_Y,WB_DRM,OSD_MSG_DRM_DRRTLM2,pbStr);
  #endif
  #ifdef DRM_USE_NEW_UI
  vOsdPasteMsgXYArg(DRM_RNTLMT4_X,DRM_RNTLMT4_Y,WB_DRM,OSD_MSG_DRM_DRRTLM4,pbStr);
  #endif
}

void vDRMDisRgCdShow(void) large
{
  BYTE i;
  
  //show the title name
  vSetMsgCol4(WB_DRM,0,0,2,0x0e);
  vDRMShowItems(_prDRMDRCTT,TBL_SIZE(_prDRMDRCTT));
  //show the content
  vSetMsgCol4(WB_DRM,0,0,2,3);
  vDRMShowItems(_prDRMDRCCNT,TBL_SIZE(_prDRMDRCCNT));
  //show the regiteration code
  vDRMShowRgCode();
  //show the button
  vSetBtnCol(WB_DRM,0,0x0b,2,3);
  _wStartX=252;
  _wStartY=300;
  _wEndX=332;
  _wEndY=340;
  #ifdef DRM_USE_NEW_UI
  _wStartY=260;
  _wEndX=352;
  _wEndY=300;
  #endif
  vSetMsgCol4(WB_DRM,0,0x0b,2,3);
  vCreateMsgButton(WB_DRM,0,4,OSD_MSG_DRM_BTN_OK,20,5);
  //vSelButton(WB_DRM,0);
  vUnselButton(WB_DRM,0);
  
  vSetMsgCol4(WB_DRM,0,1,2,3);
}

void vDRMDisRntLmtShow(void) large
{
  BYTE i;
  
  //show the title name
  vSetMsgCol4(WB_DRM,0,0,2,0x0e);
  vDRMShowItems(_prDRMRTLMTTT,TBL_SIZE(_prDRMRTLMTTT));
  //show the content
  vSetMsgCol4(WB_DRM,0,0,2,3);
  vDRMShowItems(_prDRMRTLMTCnt,TBL_SIZE(_prDRMRTLMTCnt));
  //show the limit times
  vDRMShowRntLmt();
  //show the button
  
  _wStartX=150;
  _wStartY=300;
  _wEndX=230;
  _wEndY=340;
  #ifdef DRM_USE_NEW_UI
  _wStartY=280;
  _wEndY=320;
  #endif
  vSetMsgCol4(WB_DRM,0x0,0x0b,2,3);
  vCreateMsgButton(WB_DRM,0,4,OSD_MSG_DRM_BTN_YES,20,5);
  vSetBtnCol(WB_DRM,0x0b,0x0f,2,3);
  vSelButton(WB_DRM,0);
  //vUnselButton(WB_DRM,0);
  
  _wStartX=300;
  _wEndX=380;
  vSetMsgCol4(WB_DRM,0x0,0x0f,2,3);
  vCreateMsgButton(WB_DRM,1,4,OSD_MSG_DRM_BTN_NO,20,5);
  //vSelButton(WB_DRM,0);
  vUnselButton(WB_DRM,1);
  
  vSetMsgCol4(WB_DRM,0,1,2,3);
}

void vDRMDisErrAuthShow(void) large
{
  BYTE i;
  
  
  //show the title name
  vSetMsgCol4(WB_DRM,0,0,2,0x0f);
  vDRMShowItems(_prDRMErrTT,TBL_SIZE(_prDRMErrTT));
  //show the content
  vSetMsgCol4(WB_DRM,0,0,2,3);
  vDRMShowItems(_prDRMErrCnt,TBL_SIZE(_prDRMErrCnt));
  //show the limit times
  
  //show the button
  vSetBtnCol(WB_DRM,0,0x0b,2,3);
  _wStartX=200;
  _wStartY=250;
  _wEndX=280;
  _wEndY=290;
  #ifdef DRM_USE_NEW_UI
  _wStartX=252;
  _wStartY=220;
  _wEndX=352;
  _wEndY=260;
  #endif
  vSetMsgCol4(WB_DRM,0,0x0b,2,3);
  vCreateMsgButton(WB_DRM,0,4,OSD_MSG_DRM_BTN_OK,20,5);
  //vSelButton(WB_DRM,0);
  vUnselButton(WB_DRM,0);
  
  
  vSetMsgCol4(WB_DRM,0,1,2,3);
}


void vDRMDisRntExpShow(void) large
{
  BYTE i;
  
  
  //show the title name
  vSetMsgCol4(WB_DRM,0,0,2,0x0f);
  vDRMShowItems(_prDRMRntExpTT,TBL_SIZE(_prDRMRntExpTT));
  //show the content

  //zhy 20050822 do not show this
 // vSetMsgCol4(WB_DRM,0,0,2,3);
//  vDRMShowItems(_prDRMRntExpCnt,TBL_SIZE(_prDRMRntExpCnt));
  //show the limit times
  
  //show the button
  vSetBtnCol(WB_DRM,0x0e,0x0b,2,3);
  _wStartX=240;
  _wStartY=250;
  _wEndX=320;
  _wEndY=290;
  #ifdef DRM_USE_NEW_UI
  _wStartY=210;
  _wEndX=340;
  _wEndY=250;
  #endif
  vSetMsgCol4(WB_DRM,0x0b,0x0b,2,3);
  vCreateMsgButton(WB_DRM,0,4,OSD_MSG_DRM_BTN_OK,20,5);
  //vSelButton(WB_DRM,0);
  vUnselButton(WB_DRM,0);
  
  
  vSetMsgCol4(WB_DRM,0,1,2,3);
}

void vDRMShowInit(void) large
{
  
  switch(_bDRMState)
  {
  case DRM_REG_CODE_ST:
    vDRMDisRgCdShow();
    break;
    
  case DRM_AUTH_ERR_ST:
    vDRMDisErrAuthShow();
    break;
    
  case DRM_RENT_EXP_ST:
    vDRMDisRntExpShow();
    break;
    
  case DRM_RENT_LMT_ST:
    vDRMDisRntLmtShow();
    break;
  }
}

void vJudgeDRMType(void) large
{
/*#define SI_DRM_CODE                            wSIItemPos(SI_DRM_MEM1, 27)  //error or success
#define DRM_ERROR_NOT_AUTH_USER                15   //from: drmQueryRentalStatus, drmCommitPlayback 
#define DRM_ERROR_RENTAL_EXPIRED               16   //from: drmQueryRentalStatus, drmCommitPlayback 

#define SI_DRM_VIEWS                           wSIItemPos(SI_DRM_MEM1, 28)
#define SI_DRM_LIMIT                            wSIItemPos(SI_DRM_MEM1, 29)
#define SI_DRM_TYPE                            wSIItemPos(SI_DRM_MEM1, 30)
#define SV_DRM_RENTAL                          0
#define SV_DRM_PURCHASE                        1*/
  BYTE bValue;
  bValue=bSharedInfo(SI_DRM_CODE);
  if(bValue==DRM_ERROR_NOT_AUTH_USER)
  {
    _bDRMState=DRM_AUTH_ERR_ST;
    return;
  }
  else if(bValue==DRM_ERROR_RENTAL_EXPIRED)
  {
    _bDRMState=DRM_RENT_EXP_ST;
    return;
  }
  else
  {
    _bDRMState=DRM_MAX_ST;
  }
}
extern BYTE xdata _bIsSetupMenuShow;
void vDRMInit(void) large
{
  _bIsSetupMenuShow = TRUE;	
  _rOsdStateCtx.fgDRMShow=FALSE;
  #ifdef PLAYER_FLMENU
  if (fgFlCheckStatus(FL_STATUS_IN_MENU))
  {
    // tmp
    vPlayerShowLogo(DVD_STOP_LOGO, DVD_LOGO_COLOR);
    vDisableWB(FSMENU_OSD_WBIDX_BASIC);
    vDisableWB(FSMENU_INFO);
    //    wFlMnLeave();
  }
  #endif
  
  if (fgIsInSetupMenu())
  {
    vSetupMenuClose();
  }
  
  
  // - disable all previous white board
  vOsdShowWb(OSD_WB_DISABLE);
  #ifdef SETUP_MENU_TRUECOLOR
  vCreateWB(WB_DRM, TRUE);
  #else
  vCreateWB(WB_DRM, FALSE);
  #endif
  
  #ifdef SETUP_MENU_TRUECOLOR
  vSetWBTcColor(WB_DRM);
  #else
  
  #endif
  //draw rectangle
  vDRMDrawRect();
  //show the page
  vDRMShowInit();
  //variable init
  _bSelBtnNo=0;
  
  //enable the white board
  vOsdSetSt(OSD_ST_BURST);
  vEnableWB(WB_DRM);
  vOsdSetSt(OSD_ST_NML);
  
  _rOsdStateCtx.fgDRMShow=TRUE;
}

void vDRMDisRgCdExitState(void) large
{

  vOsdSetSt(OSD_ST_BURST);
  vDeleteWB(WB_DRM);
  vOsdSetSt(OSD_ST_NML);
  
  _bIsSetupMenuShow = FALSE;    
  vOsdShowWb(OSD_WB_RESTORE);
  //_bDRMState=DRM_MAX_ST;
  
  #ifdef PLAYER_FLMENU
  if (fgFlCheckStatus(FL_STATUS_IN_MENU))
  {
    // tmp
    //vSetSharedInfo(SI_JPG_DIGEST_BG, 2); //[runma] add line.
    #ifndef MT1379_MANUFACTURE_TEST
      vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
    #endif
    vEnableWB(FSMENU_OSD_WBIDX_BASIC);
    vEnableWB(FSMENU_INFO);
    #ifdef WB_ALLOC_MIN
      vFlRecover();
    #endif
  }
  #endif  

  _fgInputEscape = TRUE;
}

void vDRMDisRgCdState(void) large
{
  switch(_bIRKey)
  {
  case IR_CMD_DONE:
    switch(DRM_ACK(_dwIrDoneParm))
    {
    case SI_DRM_REGCODE:
      vDRMInit();
      break;
    }    
    break;
    
  case IR_DRM_REG:
  case IR_PLAY_ENTER:
  case IR_PLAY:
  case IR_ENTER:
    vSetSharedInfo(SI_DRM_RENTCHK,SV_DRM_RENTFAIL);
    vNotifySharedInfo(SI_DRM_RENTCHK,0,0);
    // vDRMDisRgCdExitState();
    _fgInputEscape = TRUE;
    break;
  }
  
  _bIRKey=IR_NONE;
}

void vDRMJudgeState(void) large
{
  switch(DRM_ACK(_dwIrDoneParm))
  {
  case SI_DRM_REGCODE:
    vDRMDisRgCdState();
    break;
    
  case SI_DRM_CODE:
    vJudgeDRMType();
    if(_bDRMState<DRM_MAX_ST)
    {
      vChangeInputState(INPUT_STATE_DRM_OTHER,FALSE);
    }
    _bIRKey=IR_NONE;
    break;
    
  case SI_DRM_LIMIT:
    _bDRMState=DRM_RENT_LMT_ST;
    vChangeInputState(INPUT_STATE_DRM_OTHER,FALSE);
    _bIRKey=IR_NONE;
    break;
    
  case SI_DRM_MEM_OK:
    vEepromWriteDRMMemList();
    break;
  }
}

void vDRMDisRntLmtState(void) large
{
  switch(_bIRKey)
  {
  case IR_LEFT:
    if(_bSelBtnNo)
    {
      vSetMsgCol4(WB_DRM,0x0,0x0f,2,3);
      vUnselButton(WB_DRM,_bSelBtnNo);
      _bSelBtnNo--;
      vSetMsgCol4(WB_DRM,0x0,0x0b,2,3);
      vSelButton(WB_DRM,_bSelBtnNo);
      vSetMsgCol4(WB_DRM,0,1,2,3);
    }
    break;
    
  case IR_RIGHT:
    if(_bSelBtnNo<DRM_RNTLMT_MAX_BTN_NO-1)
    {
      vSetMsgCol4(WB_DRM,0x0,0x0f,2,3);
      vUnselButton(WB_DRM,_bSelBtnNo);
      _bSelBtnNo++;
      vSetMsgCol4(WB_DRM,0x0,0x0b,2,3);
      vSelButton(WB_DRM,_bSelBtnNo);
      vSetMsgCol4(WB_DRM,0,1,2,3);
    }
    break;
    
  case IR_PLAY_ENTER:
  case IR_PLAY:
  case IR_ENTER:
    switch(_bSelBtnNo)
    {
    case 0://YES BUTTON
      vSetSharedInfo(SI_DRM_RENTCHK,SV_DRM_RENTOK);
      vNotifySharedInfo(SI_DRM_RENTCHK,0,0);
      break;
    case 1://no button
      vSetSharedInfo(SI_DRM_RENTCHK,SV_DRM_RENTFAIL);
      vNotifySharedInfo(SI_DRM_RENTCHK,0,0);
      break;
    }
    // vDRMDisRgCdExitState();
    _fgInputEscape = TRUE;
    break;
    
  case IR_DRM_REG:
    vSetSharedInfo(SI_DRM_RENTCHK,SV_DRM_RENTFAIL);
    vNotifySharedInfo(SI_DRM_RENTCHK,0,0);
    // vDRMDisRgCdExitState();
    _fgInputEscape = TRUE;
    break;
  }
  
  _bIRKey=IR_NONE;
}

void vDRMState(void) large
{
  switch(_bDRMState)
  {
  case DRM_REG_CODE_ST:
  case DRM_AUTH_ERR_ST:
  case DRM_RENT_EXP_ST:
    vDRMDisRgCdState();
    break;
    
  case DRM_RENT_LMT_ST:
    vDRMDisRntLmtState();
    break;
  }
}


void vDRMExit(void) large
{
  if(fgIsInDRMShow())
  {
    vDRMDisRgCdExitState();  //zhy 20050822 add it to delete the wb when exit
    _rOsdStateCtx.fgDRMShow=FALSE;
  }
  /*play DVD or VCD, press STOP key and enter setupmenu,  enter DIVX VOD's option,
   and press OK key,  characters  of "press play key to continue"  disappear. It cause by
   setup WB's exiting. luoqing20060214
*/
  if(bSharedInfo(SI_PBC_STATE)==SV_STOP_RESUME)
  vOsdDisplayChange(DISP_STOP_RESUME, 0);
}

void vDRMDisRgCdInit(void) large
{
  _bDRMState=DRM_REG_CODE_ST;
  //notify risc
  vNotifySharedInfo(SI_DRM_ACTIVATION,0,0);
}

BYTE xdata _bDrmCounter = 0;
#define TIMER_EXPIRE_LOCK_IR_DRM	30
void vDRMRegCodeKey(void) large
{
  if(_bDrmCounter == 0)
  {
    _bDrmCounter = TIMER_EXPIRE_LOCK_IR_DRM;
    vChangeInputState(INPUT_STATE_DRM_DISRGCD,FALSE);
  }
}
#else
code BYTE _bDRM[] = {0} ;
#endif

#endif

⌨️ 快捷键说明

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