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

📄 o_password_prompt.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
					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 + -