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

📄 psl_process_key.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
******************************************************************************
**                                                                          **
**  Copyright (c) 2002 Videon Central, Inc.                                 **
**  All rights reserved.                                                    **
**                                                                          **
**  The computer program contained herein contains proprietary information  **
**  which is the property of Videon Central, Inc.  The program may be used  **
**  and/or copied only with the written permission of Videon Central, Inc.  **
**  or in accordance with the terms and conditions stipulated in the        **
**  agreement/contract under which the programs have been supplied.         **
**                                                                          **
******************************************************************************
*****************************************************************************/
/**
 * @file psl_process_key.cpp
 *
 * $Revision: 1.7 $ 
 *
 * Process Key Module of the PSL.
 * 
 */

#include <string.h>
#include "vdvd_types.h"
#include "psl_process_key.h"
#include "psl_interface.h"
#include "psl_general.h"
#include "psl_types.h"
#include "psl_external_interface.h"
#include "psl_screen_layout.h"
#include "psl_data_bank.h"
#include "deal_control.h"
#include "deal_general.h"
#include "dbgprint.h"

/* Debug macros */
#define DBG_PSL_PROC_KEY    DBG_ERROR
#define DBG_ON(x)           (DBG_PSL_PROC_KEY >= x)

/* Password modes for locked buttons */
typedef enum
{
    PSL_PWD_LOCKED,
    PSL_PWD_CREATE,
    PSL_PWD_CONFIRM,
    PSL_PWD_RESET
} PSL_PWD_MODE;
 
/**
 * Local variables
 */
static ULONG    m_ulTempPassword = 0xffffffff;

/**
 * PslProcessKeySetupMenuUp -- Process the up command for setup menu
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS  PslProcessKeySetupMenuUp(PSL_HANDLE *pPSL)
{
    /* Check for a valid psl handle and setup menu data */
    if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: NULL pointer!\n"));
        return (PSL_FAILURE);
    }

    if (pPSL->pSetupMenu->pActiveButton->pAboveButton != NULL)
    {
        /* If active button is the password button, make sure any entered numbers are cleared */
        if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_PWD)
        {
            /* reset entered password */
            pPSL->pSetupMenu->pActiveButton->ulInfo = 0;

            /* reset the string */
            if (PslScreenLayoutSetButtonText(pPSL->pSetupMenu->pActiveButton, " _  _  _  _ ") != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
                return (PSL_FAILURE);
            }

            if (pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo == PSL_PWD_CONFIRM)
            {
                /* Check if parental password is set.  If it is not, allow user to set it */
                if (PslDataGetParentalPassword(pPSL) == 0xffffffff)
                {
                    pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_CREATE;
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Create Password") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                }
                else
                {
                    pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_RESET;
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Reset Password") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                }

                /* redraw the button */
                if (PslScreenLayoutDrawButton(&pPSL->pSetupMenu->pActiveTab->pSubButton[0]) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
                    return (PSL_FAILURE);
                }
            }
        }

        /* unselect the currently active button */
        pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;

        /* redraw the button */
        if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
            return (PSL_FAILURE);
        }

        /* change the active button and select it */
        pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pAboveButton;
        pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;

        /* redraw the button */
        if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
            return (PSL_FAILURE);
        }

        /* copy draw buffer to display buffer to show changes */
        DealCMBufferCopy(pPSL->pSetupMenu->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessKeySetupMenuDown -- Process the down command for setup menu
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS  PslProcessKeySetupMenuDown(PSL_HANDLE *pPSL)
{
    /* Check for a valid psl handle and setup menu data */
    if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuDown: NULL pointer!\n"));
        return (PSL_FAILURE);
    }

    if (pPSL->pSetupMenu->pActiveButton->pBelowButton != NULL)
    {
        /* If active button is the password button, make sure any entered numbers are cleared */
        if (pPSL->pSetupMenu->pActiveButton->tButtonType == PSL_BUTTON_PWD)
        {
            /* reset entered password */
            pPSL->pSetupMenu->pActiveButton->ulInfo = 0;

            /* reset the string */
            if (PslScreenLayoutSetButtonText(pPSL->pSetupMenu->pActiveButton, " _  _  _  _ ") != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
                return (PSL_FAILURE);
            }

            if (pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo == PSL_PWD_CONFIRM)
            {
                /* Check if parental password is set.  If it is not, allow user to set it */
                if (PslDataGetParentalPassword(pPSL) == 0xffffffff)
                {
                    pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_CREATE;
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Create Password") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                }
                else
                {
                    pPSL->pSetupMenu->pActiveTab->pSubButton[0].ulInfo = PSL_PWD_RESET;
                    if (PslScreenLayoutSetButtonText(&pPSL->pSetupMenu->pActiveTab->pSubButton[0], "Reset Password") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to set button text\n"));
                        return (PSL_FAILURE);
                    }
                }

                /* redraw the button */
                if (PslScreenLayoutDrawButton(&pPSL->pSetupMenu->pActiveTab->pSubButton[0]) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuUp: Failed to draw button!\n"));
                    return (PSL_FAILURE);
                }
            }
        }

        /* unselect the currently active button */
        pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;

        /* redraw the button */
        if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuDown: Failed to draw button!\n"));
            return (PSL_FAILURE);
        }

        /* change the active button and select it */
        pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pBelowButton;
        pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;

        /* redraw the button */
        if (PslScreenLayoutDrawButton(pPSL->pSetupMenu->pActiveButton) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuDown: Failed to draw button!\n"));
            return (PSL_FAILURE);
        }

        /* copy draw buffer to display buffer to show changes */
        DealCMBufferCopy(pPSL->pSetupMenu->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessKeySetupMenuLeft -- Process the left command for setup menu
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS  PslProcessKeySetupMenuLeft(PSL_HANDLE *pPSL)
{
    /* Check for a valid psl handle and setup menu data */
    if ( (pPSL == NULL) || (pPSL->pSetupMenu == NULL) )
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: NULL pointer!\n"));
        return (PSL_FAILURE);
    }

    if (pPSL->pSetupMenu->pActiveButton->pLeftButton != NULL)
    {
        pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;
        pPSL->pSetupMenu->pActiveButton = pPSL->pSetupMenu->pActiveButton->pLeftButton;
        pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;

        /* redraw the menu */
        if (PslScreenLayoutDrawSetupMenu(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessKeySetupMenuLeft: Failed to draw setup menu!\n"));
            return (PSL_FAILURE);
        }
    }
    else if (pPSL->pSetupMenu->pActiveTab->pLeftButton != NULL)
    {
        /* unselect active button */
        pPSL->pSetupMenu->pActiveButton->fSelected = FALSE;

        /* change the active tab */
        pPSL->pSetupMenu->pActiveTab->fSelected = FALSE;
        pPSL->pSetupMenu->pActiveTab = pPSL->pSetupMenu->pActiveTab->pLeftButton;
        pPSL->pSetupMenu->pActiveTab->fSelected = TRUE;

        if (pPSL->pSetupMenu->pActiveTab == &pPSL->pSetupMenu->pTab[1])
        {
            ULONG ulNavState = PslExternalGetNavStatus();

            /* 
             * Video setting buttons can only be navigated to if player is stopped.
             * If player is stopped, map buttons so they can be navigated.
             * Otherwise, map the buttons so they cannot be navigated to.
             */
            if ( (ulNavState == PSL_STATUS_FULLSTOP) || 
                 (ulNavState == PSL_STATUS_OPEN) ||
                 (ulNavState == PSL_STATUS_NO_DISC) )
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pBelowButton = &pPSL->pSetupMenu->pTab[1].pSubButton[1];
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pAboveButton = &pPSL->pSetupMenu->pTab[1].pSubButton[3];
                pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[1];
                pPSL->pSetupMenu->pActiveButton->fSelected = TRUE;
            }
            else
            {
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pBelowButton = NULL;
                pPSL->pSetupMenu->pActiveTab->pSubButton[4].pAboveButton = NULL;
                pPSL->pSetupMenu->pActiveButton = &pPSL->pSetupMenu->pActiveTab->pSubButton[4];

⌨️ 快捷键说明

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