📄 drm.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 + -