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

📄 drm.c

📁 mtkDVD源代码程序4*16 很好玩的内置5.1环绕音效 大家可以玩一下
💻 C
字号:
#ifndef _DRM_C
#define _DRM_C
#include "general.h"
#include "../osdshow.h"

#pragma NOAREGS

#ifdef SUPPORT_DRM

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

#ifdef USE_PBSTR_SHOW_DRM
void vDRMShowItemspbStr(BYTE *pbStr, WORD wCharNo)
{
  WORD i=0;
  BYTE Row, j;
  BYTE pbStrs[DRM_MSG_LENGTH];
  
  
  //  Row = DRM_MSG_LENGTH-1;
  Row = (DRM_MSG_LENGTH<wCharNo)?DRM_MSG_LENGTH-1:wCharNo-1;
  while (i<wCharNo)
  {
    while(pbStr[i+ Row] != ' ')
    {
      if (i + Row <wCharNo)
        break;
      Row--;
    }
    pbStrs[0] = Row;
    for (j=1; j<=Row; j++,i++)
      pbStrs[j] = pbStr[i];

    vOsdShowStr(WB_SETUP_ITEM, pbStrs);
    _wStartY += 30;
    Row = (i+DRM_MSG_LENGTH<wCharNo)?DRM_MSG_LENGTH-1:(wCharNo-1)%DRM_MSG_LENGTH;
  }
}
#endif

void vDRMDrawRect()large
{
   //draw outside rectangle
  _wStartX=2;
  _wStartY=2;
  _wEndX=SETUP_ITEM_W-2;
  _wEndY=SETUP_ITEM_H-2;
  vRectangle(WB_SETUP_ITEM,4,0x0e,FALSE,0X00);
  //draw inside rectangle

  _wStartX=12;
  _wStartY=12;
  _wEndX=SETUP_ITEM_W-12;
  _wEndY=SETUP_ITEM_H-12;
  vRectangle(WB_SETUP_ITEM,2,0x0e,FALSE,0X00);
}


void vDRMShowRgCode()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);
  }
  
  vOsdPasteMsgXYArg(DRM_DRC_RG_CODE_X,DRM_DRC_RG_CODE_Y,WB_SETUP_ITEM,OSD_MSG_DRM_DRC10,pbStr);
}

void vDRMShowRntLmt()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';
  }
  
  vOsdPasteMsgXYArg(DRM_RNTLMT_X,DRM_RNTLMT_Y,WB_SETUP_ITEM,OSD_MSG_DRM_DRRTLM2,pbStr);
}

void vDRMDisRgCdShow()large
{
  BYTE i;

  //show the title name
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,0x0e);
  vDRMShowItems(_prDRMDRCTT,TBL_SIZE(_prDRMDRCTT));
  //show the content
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,3);
  vDRMShowItems(_prDRMDRCCNT,TBL_SIZE(_prDRMDRCCNT));

  //show the regiteration code
  vDRMShowRgCode();
  //show the button
  vSetBtnCol(WB_SETUP_ITEM,0,0x0b,2,3);
  _wStartX=(SETUP_ITEM_W-80)/2;
  _wStartY=(SETUP_ITEM_H-56);
  _wEndX=_wStartX+80;
  _wEndY=_wStartY+40;
  vSetMsgCol4(WB_SETUP_ITEM,0,0x0b,2,2);
  vCreateMsgButton(WB_SETUP_ITEM,0,4,OSD_MSG_DRM_BTN_OK,24, 5);
  //vSelButton(WB_SETUP_ITEM,0);
  vUnselButton(WB_SETUP_ITEM,0);
  
  vSetMsgCol4(WB_SETUP_ITEM,0,1,2,3);
}

void vDRMDisRntLmtShow()large
{
  BYTE i;
  
  //show the title name
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,0x0e);
  vDRMShowItems(_prDRMRTLMTTT,TBL_SIZE(_prDRMRTLMTTT));
  //show the content
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,3);
  vDRMShowItems(_prDRMRTLMTCnt,TBL_SIZE(_prDRMRTLMTCnt));
  //show the limit times
  vDRMShowRntLmt();
  //show the button
  
  _wStartX=SETUP_ITEM_W/2-110;
  _wStartY=(SETUP_ITEM_H-56);
  _wEndX=_wStartX+80;
  _wEndY=_wStartY+40;
  vSetMsgCol4(WB_SETUP_ITEM,0x0,0x0b,2,2);
  vCreateMsgButton(WB_SETUP_ITEM,0,4,OSD_MSG_DRM_BTN_YES,20,5);
  vSetBtnCol(WB_SETUP_ITEM,0x0b,0x0f,2,3);
  vSelButton(WB_SETUP_ITEM,0);
  //vUnselButton(WB_SETUP_ITEM,0);
  
  _wStartX=SETUP_ITEM_W/2+30;
  _wEndX=_wStartX+80;
  vSetMsgCol4(WB_SETUP_ITEM,0x0,0x0f,2,2);
  vCreateMsgButton(WB_SETUP_ITEM,1,4,OSD_MSG_DRM_BTN_NO,20,5);
  //vSelButton(WB_SETUP_ITEM,0);
  vUnselButton(WB_SETUP_ITEM,1);
  
  vSetMsgCol4(WB_SETUP_ITEM,0,1,2,3);
}

void vDRMDisErrAuthShow()large
{
  BYTE i;
  
  
  //show the title name
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,0x0f);
  vDRMShowItems(_prDRMErrTT,TBL_SIZE(_prDRMErrTT));
  //show the content
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,3);
  vDRMShowItems(_prDRMErrCnt,TBL_SIZE(_prDRMErrCnt));
  //show the limit times
  
  //show the button
  vSetBtnCol(WB_SETUP_ITEM,0,0x0b,2,3);
  _wStartX=(SETUP_ITEM_W-80)/2;
  _wStartY=(SETUP_ITEM_H-66);
  _wEndX=_wStartX+80;
  _wEndY=_wStartY+40;
  vSetMsgCol4(WB_SETUP_ITEM,0,0x0b,2,2);
  vCreateMsgButton(WB_SETUP_ITEM,0,4,OSD_MSG_DRM_BTN_OK,20,5);
  //vSelButton(WB_SETUP_ITEM,0);
  vUnselButton(WB_SETUP_ITEM,0);
  
  
  vSetMsgCol4(WB_SETUP_ITEM,0,1,2,3);
}


void vDRMDisRntExpShow()large
{
  BYTE i;
  
  
  //show the title name
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,0x0f);
  vDRMShowItems(_prDRMRntExpTT,TBL_SIZE(_prDRMRntExpTT));
  //show the content
  vSetMsgCol4(WB_SETUP_ITEM,0,0,2,3);
  vDRMShowItems(_prDRMRntExpCnt,TBL_SIZE(_prDRMRntExpCnt));
  //show the limit times
  
  //show the button
  vSetBtnCol(WB_SETUP_ITEM,0x0e,0x0b,2,3);
  _wStartX=(SETUP_ITEM_W-80)/2;
  _wStartY=(SETUP_ITEM_H-76);
  _wEndX=_wStartX+80;
  _wEndY=_wStartY+40;
  vSetMsgCol4(WB_SETUP_ITEM,0x0b,0x0b,2,2);
  vCreateMsgButton(WB_SETUP_ITEM,0,4,OSD_MSG_DRM_BTN_OK,20,5);
  //vSelButton(WB_SETUP_ITEM,0);
  vUnselButton(WB_SETUP_ITEM,0);
  
  
  vSetMsgCol4(WB_SETUP_ITEM,0,1,2,3);
}

void vDRMShowInit()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()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;
  }
}

void vDRMInit()large
{
  _rOsdStateCtx.fgDRMShow=FALSE;
  #ifdef PLAYER_FLMENU
  if (0)
  //if (fgFlCheckStatus(FL_STATUS_IN_MENU))
  {
    // tmp
    vPlayerShowLogo(DVD_STOP_LOGO, DVD_LOGO_COLOR);
    vDisableWB(FSMENU_OSD_WBIDX_BASIC);
    vDisableWB(FSMENU_INFO);
    //    wFlMnLeave();
  }
  #endif
  
  // - disable all previous white board
  vOsdShowWb(OSD_WB_DISABLE);
    
  #if (DRAM_SZ == DRAM_2M)   
  //if (!fgIsIsoPlay())
    vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
  #endif
  
  #ifdef SETUP_MENU_TRUECOLOR
  vCreateWB(WB_SETUP_ITEM, TRUE);
  #else
  vCreateWB(WB_SETUP_ITEM, FALSE);
  #endif
  
  #ifdef SETUP_MENU_TRUECOLOR
  vSetWBTcColor(WB_SETUP_ITEM);
  #else
  
  #endif
  //draw rectangle
  vDRMDrawRect();
  //show the page
  vDRMShowInit();
  //variable init
  _bSelBtnNo=0;
  
  //enable the white board
  vOsdSetSt(OSD_ST_BURST);
  vEnableWB(WB_SETUP_ITEM);
  vOsdSetSt(OSD_ST_NML);
  
  _rOsdStateCtx.fgDRMShow=TRUE;
}

void vDRMDisRgCdExitState()large
{

  vOsdSetSt(OSD_ST_BURST);
  vDeleteWB(WB_SETUP_ITEM);
  vOsdSetSt(OSD_ST_NML);
  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()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();
    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()large
{
  switch(_bIRKey)
  {
  case IR_LEFT:
    if(_bSelBtnNo)
    {
      vSetMsgCol4(WB_SETUP_ITEM,0x0,0x0f,2,2);
      vUnselButton(WB_SETUP_ITEM,_bSelBtnNo);
      _bSelBtnNo--;
      vSetMsgCol4(WB_SETUP_ITEM,0x0,0x0b,2,2);
      vSelButton(WB_SETUP_ITEM,_bSelBtnNo);
      vSetMsgCol4(WB_SETUP_ITEM,0,1,2,3);
    }
    break;
    
  case IR_RIGHT:
    if(_bSelBtnNo<DRM_RNTLMT_MAX_BTN_NO-1)
    {
      vSetMsgCol4(WB_SETUP_ITEM,0x0,0x0f,2,2);
      vUnselButton(WB_SETUP_ITEM,_bSelBtnNo);
      _bSelBtnNo++;
      vSetMsgCol4(WB_SETUP_ITEM,0x0,0x0b,2,2);
      vSelButton(WB_SETUP_ITEM,_bSelBtnNo);
      vSetMsgCol4(WB_SETUP_ITEM,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();
    break;
    
  case IR_DRM_REG:
    vSetSharedInfo(SI_DRM_RENTCHK,SV_DRM_RENTFAIL);
    vNotifySharedInfo(SI_DRM_RENTCHK,0,0);
    vDRMDisRgCdExitState();
    break;
  }
  
  _bIRKey=IR_NONE;
}

void vDRMState()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()large
{
  vDRMDisRgCdExitState();
  _rOsdStateCtx.fgDRMShow=FALSE;
}

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

void vDRMRegCodeKey()large
{
  vChangeInputState(INPUT_STATE_DRM_DISRGCD,FALSE);
}
#else
code BYTE _bDRM[] = {0} ;
#endif

#endif

⌨️ 快捷键说明

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