📄 o_password_prompt.c
字号:
lParam = 0;
//in DVD AUDIO disc the password number is hexadecimal
if(PASSWORD_TYPE_DVDA_PLAY == ((MSO_PASSWORD_PROMPT __NEAR*) pPasswordPrompt)->moParam.mtPasswordType)
cFactor = HEX_FACTOR;
else
cFactor = DEC_FACTOR;
for(cIndex = 0; cIndex < sFormattedString.mcStrLength; cIndex++)
{
lParam = (lParam * cFactor);
lParam += (sFormattedString.mszUniStr[cIndex] - L'0');
}
// Set a new password
if(MS_IsSetPasswordPrompt(pThis->mpParent))
{
gps->parental_password = (UINT16)lParam;
CoreAPI_UpdatePlayerSetting(PS_UPDATE_PARENTAL_PASSWORD, (UINT16)lParam);
return MS_OP_CLOSE_PARENT;
}
// check password
else
{
BOOL bPassCheck;
MSO_OBJECT __NEAR* pOBPasswdCheck;
MSO_OBJECT __NEAR* pPasswordPrompt = MS_FindAncestor(pThis, &oPasswordPromptDescriptor);
MS_ASSERT(NULL != pPasswordPrompt);
MS_SendOpObject(pThis, MS_OP_CLEAR, lParam);
pOBPasswdCheck = MS_FindDescendant(pPasswordPrompt, &oDescriptorPasswordCheck);
bPassCheck = _CheckPassword(pPasswordPrompt, (UINT16)lParam);
if(bPassCheck)
{
_SetPasswordStatus(pPasswordPrompt, PASSWORD_OK);
MS_SendOpObject(pOBPasswdCheck, MS_OP_BUILD_TEXT_STRING, S_CORRECT_PASSWORD);
}
else
{
if(_RetryInputPassword(pPasswordPrompt))
_SetPasswordStatus(pPasswordPrompt, PASSWORD_IN_PROGRESS);
else
_SetPasswordStatus(pPasswordPrompt, PASSWORD_FAILED);
MS_SendOpObject(pOBPasswdCheck, MS_OP_BUILD_TEXT_STRING, S_INCORRECT_PASSWORD);
}
_HidePasswordEdit(pPasswordPrompt, TRUE);
((MSO_PASSWORD_PROMPT __NEAR*)pPasswordPrompt)->moParam.mwTimeout = PASSWORD_TIMEOUT;
#ifdef DVD_AUDIO_SUPPORT
if(( (MSO_PASSWORD_PROMPT __NEAR*) pPasswordPrompt)->moParam.mtPasswordType == PASSWORD_TYPE_DVDA_PLAY)
{
//save UI input pw
MS_SendOpObject(MS_MenuGetActive(), MS_OP_MENU_DVDA_USER_PASSWORD_SET, lParam);
if (bPassCheck)
return MS_OP_MENU_DVDA_PENDING_PLAY_RUN;
}
#endif//#ifdef DVD_AUDIO_SUPPORT
}
}
return MS_OP_NONE;
}
}
break;
}
MsOp = EditOperation(pThis, MsOp, lParam);
// Post-processing
switch(MsOp)
{
case MS_OP_LEFT:// Fall Thru
case MS_OP_RIGHT:// Fall Thru
case MS_OP_UP:// Fall Thru
case MS_OP_DOWN: // Fall Thru
{
if(!MS_IS_PASSWORD_FOR_DVD(pThis->mpParent))
return MS_OP_CLOSE_PARENT;
}
default:
{
if (MS_IS_USER_OP(MsOp)
&& (MS_OP_EJECT != MsOp)
&&(MS_OP_SETUP != MsOp)
&& (MS_OP_POWER != MsOp))
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
MsOp = MS_OP_NONE;
}
}
break;
}
return MsOp;
}
/***************************************************************************************
* Display functions
****************************************************************************************/
/***************************************************************************************
* Function : _PasswordEditFillOSDSeg
*
* In :
*
* Out :
*
* Desc : The password edit display function.
****************************************************************************************/
static BOOL _PasswordEditFillOSDSeg(MSO_OBJECT __NEAR* pEditObject, MS_AREA __NEAR* pAbsArea)
{
FORMATED_UNICODE_STRING oFormUniStr;
MS_AREA TempArea = *pAbsArea;
UINT16 wColor = (MS_IsFocusable(pEditObject)) ? CIDX_6 : CIDX_4;
//CONST UINT8 * pBmp;
UINT16 wTotalCount = PASSWORD_CHARS;
UINT8 i;
UINT8 cRectangleGap =2;
OSDR_GetFormUniStr_ScFormatted((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr, (UINT32)((MSO_EDIT __NEAR*)(pEditObject))->moParam.ScPtr);
for (i =0; i < wTotalCount; i++)
{
UINT16 wStartX;
wStartX = (i * (pEditObject->moArea.mwW / (wTotalCount << 1))) << 1;
OSDR_FillOsdSegRectangle(wStartX, 0, ((pEditObject->moArea.mwW >> 2) - cRectangleGap), pEditObject->moArea.mwH, pAbsArea, wColor);
}
TempArea.mwW = ((pAbsArea->mwW/(wTotalCount << 1)) << 1) - cRectangleGap;
if(MS_IsEditMasked(pEditObject))
{
UINT16 wCount =0;
UINT16 wInputLength = oFormUniStr.mcStrLength;
oFormUniStr.mcStrLength = wInputLength? 1 : 0;
oFormUniStr.mszUniStr[0]= L'*';
for(wCount = 0;wCount<wInputLength;wCount++)
{
OSDR_FillOsdSegUniString((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr,
(MS_AREA __NEAR*)&TempArea,
6, // sX,
0, // sY,
ALIGN_H_LEFT,
ALIGN_V_TOP,
CIDX_2);
TempArea.msX += TempArea.mwW +cRectangleGap;
}
}
return FALSE;
}
/***************************************************************************************
* Public functions
****************************************************************************************/
/***************************************************************************************
* Function : OPASSWORD_PROMPT_OpenAtPos
*
* In : pParent = Pointer of the parent container.
*
* bSetPassword = TRUE if the Set Password prompt component needs to be opened.
*
* ePasswdType = TRUE if, for DVD playback.
*
* wStartX = X position of the component. The default position (specified in the
* descriptor) is used in case this parameter is set to DEFAULT_POSITION.
*
* wStartY = Y position of the component.The default position (specified in the
* descriptor) is used in case this parameter is set to DEFAULT_POSITION.
*
* Out : None.
*
* Return : None.
*
* Desc : Display the Password component at the specified location.
****************************************************************************************/
void OPASSWORD_PROMPT_OpenAtPos(MSO_CONTAINER __NEAR* pParent, BOOL bSetPassword,
PASSWD_TYPE ePasswdType, UINT16 wStartX, UINT16 wStartY)
{
MSO_OBJECT __NEAR* pObject = NULL;
if(NULL == pParent)
return;
if ((PASSWORD_TYPE_DVDV_PLAY == ePasswdType) && (IS_UNLOCKED))
{
CoreAPI_SetPWStatus(PASSWORD_OK);
return;
}
if(TRUE == bSetPassword)
pObject = (MSO_OBJECT __NEAR*)MS_ComponentOpen((MS_DESCRIPTOR_COMPONENT*)&oPasswordSetPromptDescriptor, pParent);
else
pObject = (MSO_OBJECT __NEAR*)MS_ComponentOpen((MS_DESCRIPTOR_COMPONENT*)&oPasswordPromptDescriptor, pParent);
if((DEFAULT_POSITION != wStartX) || (DEFAULT_POSITION != wStartY))
{
wStartX = (DEFAULT_POSITION == wStartX) ? pObject->mpDescriptor->moArea.msX : wStartX;
wStartY = (DEFAULT_POSITION == wStartY) ? pObject->mpDescriptor->moArea.msY : wStartY;
MS_ObjectMove(pObject, wStartX, wStartY);
}
((MSO_PASSWORD_PROMPT __NEAR*)pObject)->moParam.mtPasswordType = ePasswdType;
if(PASSWORD_TYPE_DVDV_PLAY == ePasswdType)
MS_SET_PASSWORD_FOR_DVD(pObject);
MS_DisplayAddObject(pObject);
}
/***************************************************************************************
* Function : OPASSWORD_PROMPT_IsPasswordCorrect
*
* In : None.
*
* Out : None.
*
* Return : TRUE if the user entered password is correct otherwise returns FALSE.
*
* Desc : Verifies user entered password.
****************************************************************************************/
BOOL OPASSWORD_PROMPT_IsPasswordCorrect(void)
{
return (PASSWORD_OK == gtPasswordStatusSetup);
}
/***************************************************************************************
* Function : OPASSWORD_PROMPT_ResetUserInput
*
* In : None.
*
* Out : None.
*
* Return : None.
*
* Desc : Resets user entered password.
****************************************************************************************/
void OPASSWORD_PROMPT_ResetUserInput(void)
{
gtPasswordStatusSetup = PASSWORD_IN_PROGRESS;
}
/***************************************************************************************
* Function : _SetPasswordStatus
*
* In : None.
*
* Out : None.
*
* Return : None.
*
* Desc :
****************************************************************************************/
static void _SetPasswordStatus(MSO_OBJECT __NEAR* pObjectPassword, PASSWORD_STATUS tStatus)
{
switch(((MSO_PASSWORD_PROMPT __NEAR*)pObjectPassword)->moParam.mtPasswordType)
{
case PASSWORD_TYPE_SETUP_MENU:
gtPasswordStatusSetup = tStatus;
break;
case PASSWORD_TYPE_DVDV_PLAY:
if ((NULL != pObjectPassword) && MS_IS_PASSWORD_FOR_DVD(pObjectPassword))
CoreAPI_SetPWStatus(tStatus);
break;
case PASSWORD_TYPE_DVDA_PLAY:
gtPasswordStatusDVDA = tStatus;
break;
}
}
/***************************************************************************************
* Function : _GetPasswordStatus
*
* In : None.
*
* Out : None.
*
* Return : None.
*
* Desc :
****************************************************************************************/
static PASSWORD_STATUS _GetPasswordStatus(MSO_OBJECT __NEAR* pObjectPassword)
{
switch(((MSO_PASSWORD_PROMPT __NEAR*)pObjectPassword)->moParam.mtPasswordType)
{
case PASSWORD_TYPE_DVDV_PLAY:
if ((NULL != pObjectPassword) && MS_IS_PASSWORD_FOR_DVD(pObjectPassword))
return CoreAPI_GetPWStatus();
case PASSWORD_TYPE_DVDA_PLAY:
return gtPasswordStatusDVDA;
default:
return gtPasswordStatusSetup;
}
}
static BOOL _CheckPassword(MSO_OBJECT __NEAR* pObjectPassword, UINT16 wPassword)
{
BOOL bPassCheck = FALSE;
MS_ASSERT(NULL != pObjectPassword);
switch(((MSO_PASSWORD_PROMPT __NEAR*)pObjectPassword)->moParam.mtPasswordType)
{
case PASSWORD_TYPE_DVDA_PLAY:
#ifdef DVD_AUDIO_SUPPORT
bPassCheck = (wPassword == CoreAPI_GetDVDAudioHiddenGroupInfo());
#endif//#ifdef DVD_AUDIO_SUPPORT
break;
default:
bPassCheck = ((wPassword == gps->parental_password) || (MASTER_PASSWORD == wPassword));
break;
}
return bPassCheck;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -