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

📄 psl_process_user_input.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessUserInputRepeatAB: ENTER\n"));

    if (pPSL == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputRepeatAB: Invalid psl handle\n"));
        return (PSL_NULL_POINTER);
    }

    /* If standby is on, do not process the user input */
    if (PslExternalGetNavStatus() != (ULONG)PSL_STATUS_STANDBY)
    {
        /* If parental control is active, do not process command */
        if (PslScreenLayoutIsParentalControlActive(pPSL) == FALSE)
        {
            /* If setup menu is active, do not process the command */
            if (PslScreenLayoutIsSetupMenuActive(pPSL) == FALSE)
            {
                /* Send command to the nav to be processed */
                if (PslExternalSendNavCommand(PSL_USER_CMD_REPEAT_AB, ulInfo) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputRepeatAB: Failure sending command to nav\n"));
                    return (PSL_FAILURE);
                }
            }
        }
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessUserInputSearch -- Process the search command
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *      ulInfo  - info param with the command
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessUserInputSearch(PSL_HANDLE *pPSL, ULONG ulInfo)
{   
    ULONG ulNavState;

    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessUserInputSearch: ENTER\n"));

    if (pPSL == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: Invalid psl handle\n"));
        return (PSL_NULL_POINTER);
    }

    /* check that status menu data is valid */
    if (pPSL->pStatusMenu == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: status menu not created!\n"));
        return (PSL_FAILURE);
    }

    /* Get navigator state */
    ulNavState = PslExternalGetNavStatus();

    /* If standby is on, do not process the user input */
    if ( (ulNavState != (ULONG)PSL_STATUS_STANDBY) &&
         (ulNavState != (ULONG)PSL_STATUS_OPEN) )
    {
        /* If parental control is active, do not process command */
        if (PslScreenLayoutIsParentalControlActive(pPSL) == FALSE)
        {
            /*
             * Change the search mode. If search is not currently active, then
             * initialize the search mode.
             */
            if (PslScreenLayoutIsStatusMenuActive(pPSL) == TRUE)
            {
                if (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_SEARCH_TITLE)
                {
                    /* Change search mode to chapter search */
                    pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_SEARCH_CHAPTER;

                    /* Set initial chapter number */
                    pPSL->pStatusMenu->StatusInfo.usChapter = 0;

                    /* set the initial title setting string */
                    if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[5][1], "00") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure setting button text!\n"));
                        return (PSL_FAILURE);
                    }
                }
                else if (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_SEARCH_CHAPTER)
                {
                    /* Change search mode to time search */
                    pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_SEARCH_TIME_HOUR;

                    /* Set initial time numbers */
                    pPSL->pStatusMenu->StatusInfo.usTimeHour = 0;
                    pPSL->pStatusMenu->StatusInfo.usTimeMin  = 0;
                    pPSL->pStatusMenu->StatusInfo.usTimeSec  = 0;

                    /* Initialialy the time hour will be selected */
                    pPSL->pStatusMenu->pButton[6][1].fSelected = TRUE;
                    pPSL->pStatusMenu->pButton[6][3].fSelected = FALSE;
                    pPSL->pStatusMenu->pButton[6][5].fSelected = FALSE;

                    /* set the initial time hour string */
                    if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[6][1], "00") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure setting button text!\n"));
                        return (PSL_FAILURE);
                    }

                    /* set the initial time minute string */
                    if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[6][3], "00") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure setting button text!\n"));
                        return (PSL_FAILURE);
                    }

                    /* set the initial time second string */
                    if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[6][5], "00") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure setting button text!\n"));
                        return (PSL_FAILURE);
                    }
                }
                else if ( (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_SEARCH_TIME_HOUR) ||
                          (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_SEARCH_TIME_MIN) ||
                          (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_SEARCH_TIME_SEC) )
                {
                    pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_NONE;
                }
                else
                {
                    /* stop the status menu timer */
                    if (OS_TimerStop(pPSL->pStatusMenu->Timer) != OS_OK)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch -- Timer set FAILED\n"));
                        return (PSL_FAILURE);
                    }

                    /* Initialize search mode to title search */
                    pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_SEARCH_TITLE;

                    /* Set initial title number */
                    pPSL->pStatusMenu->StatusInfo.usTitle = 0;

                    /* set the initial title setting string */
                    if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[4][1], "00") != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure setting button text!\n"));
                        return (PSL_FAILURE);
                    }
                }
            }
            else
            {   
                /* Initialize status menu mode to search title */
                pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_SEARCH_TITLE;

                /* Set initial title number */
                pPSL->pStatusMenu->StatusInfo.usTitle = 0;

                /* set the initial title setting string */
                if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[4][1], "00") != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure setting button text!\n"));
                    return (PSL_FAILURE);
                }
            }
 
            if (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_NONE)
            {
                /* Clear the search menu */
                if (PslScreenLayoutClearStatusMenu(pPSL) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure clearing status menu!\n"));
                    return (PSL_FAILURE);
                }
            }
            else
            {
                /* If setup menu is active, clear it before drawing the search menu */
                if (PslScreenLayoutIsSetupMenuActive(pPSL) == TRUE)
                {
                    /* clear setup menu */ 
                    if (PslScreenLayoutClearSetupMenu(pPSL) != PSL_SUCCESS)
                    {
                        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: Failure clearing setup menu!\n"));
                        return (PSL_FAILURE);
                    } 
                }

                /* Draw the search menu */
                if (PslScreenLayoutDrawStatusMenu(pPSL) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSearch: failure drawing status menu!\n"));
                    return (PSL_FAILURE);
                }
            }
        }
    }

    switch ( pPSL->pStatusMenu->tCurrentMode ) 
    {
        case PSL_STATUS_MODE_NONE:              DBGPRINT(TRUE, ("PSL_STATUS_MODE_NONE\n"));             break;
        case PSL_STATUS_MODE_SUBTITLE:          DBGPRINT(TRUE, ("PSL_STATUS_MODE_SUBTITLE\n"));         break;
        case PSL_STATUS_MODE_AUDIO:             DBGPRINT(TRUE, ("PSL_STATUS_MODE_AUDIO\n"));            break;
        case PSL_STATUS_MODE_ANGLE:             DBGPRINT(TRUE, ("PSL_STATUS_MODE_ANGLE\n"));            break;
        case PSL_STATUS_MODE_REPEAT:            DBGPRINT(TRUE, ("PSL_STATUS_MODE_REPEAT\n"));           break;
        case PSL_STATUS_MODE_SEARCH_TITLE:      DBGPRINT(TRUE, ("PSL_STATUS_MODE_SEARCH_TITLE\n"));     break;
        case PSL_STATUS_MODE_SEARCH_CHAPTER:    DBGPRINT(TRUE, ("PSL_STATUS_MODE_SEARCH_CHAPTER\n"));   break;
        case PSL_STATUS_MODE_SEARCH_TIME_HOUR:  DBGPRINT(TRUE, ("PSL_STATUS_MODE_SEARCH_TIME_HOUR\n")); break;
        case PSL_STATUS_MODE_SEARCH_TIME_MIN:   DBGPRINT(TRUE, ("PSL_STATUS_MODE_SEARCH_TIME_MIN\n"));  break;
        case PSL_STATUS_MODE_SEARCH_TIME_SEC:   DBGPRINT(TRUE, ("PSL_STATUS_MODE_SEARCH_TIME_SEC\n"));  break;
        case PSL_STATUS_MODE_CHAPTER_SKIP:      DBGPRINT(TRUE, ("PSL_STATUS_MODE_CHAPTER_SKIP\n"));     break;
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessUserInputAngle -- Process the angle command
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *      ulInfo  - info param with the command
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessUserInputAngle(PSL_HANDLE *pPSL, ULONG ulInfo)
{
    char    cTmp[10];
    ULONG   ulTimeout = 3000;

    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessUserInputAngle: ENTER\n"));

    if (pPSL == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputAngle: Invalid psl handle\n"));
        return (PSL_NULL_POINTER);
    }

    /* If standby is on, do not process the user input */
    if (PslExternalGetNavStatus() != (ULONG)PSL_STATUS_STANDBY)
    {
        /* If parental control is active, do not process command */
        if (PslScreenLayoutIsParentalControlActive(pPSL) == FALSE)
        {
            /* Get the number of available angles */
            pPSL->pStatusMenu->StatusInfo.usAvailableAngles = (USHORT)(PslExternalGetNumberOfAngles());
        
            /* If angle menu is active, change to the next angle. */
            if ( (PslScreenLayoutIsStatusMenuActive(pPSL) == TRUE) &&
                 (pPSL->pStatusMenu->tCurrentMode == PSL_STATUS_MODE_ANGLE) )
            {
                /* Increment angle number */
                if (pPSL->pStatusMenu->StatusInfo.usAngleNumber >= pPSL->pStatusMenu->StatusInfo.usAvailableAngles)
                {
                    pPSL->pStatusMenu->StatusInfo.usAngleNumber = 1;
                }
                else
                {
                    pPSL->pStatusMenu->StatusInfo.usAngleNumber++;
                }
            }
            else
            {
                /* Get the current angle number */
                pPSL->pStatusMenu->StatusInfo.usAngleNumber = (USHORT)(PslExternalGetCurrentAngle());

                /* Set status menu mode to angle */
                pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_ANGLE;
            }

            /* Set angle number string */
            cTmp[0] = ( (pPSL->pStatusMenu->StatusInfo.usAngleNumber) / 10) + '0';
            cTmp[1] = ( (pPSL->pStatusMenu->StatusInfo.usAngleNumber) % 10) + '0';
            cTmp[2] = '/';
            cTmp[3] = (pPSL->pStatusMenu->StatusInfo.usAvailableAngles / 10) + '0';
            cTmp[4] = (pPSL->pStatusMenu->StatusInfo.usAvailableAngles % 10) + '0';
            cTmp[5] = '\0';


            /* set the angle text */
            if (PslScreenLayoutSetButtonText(&pPSL->pStatusMenu->pButton[3][1], cTmp) != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputAngle: failure setting button text!\n"));
                return (PSL_FAILURE);
            }

            /* If setup menu is active, clear it before drawing the angle menu */
            if (PslScreenLayoutIsSetupMenuActive(pPSL) == TRUE)
            {
                /* clear setup menu */ 
                if (PslScreenLayoutClearSetupMenu(pPSL) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputAngle: Failure clearing setup menu!\n"));
                    return (PSL_FAILURE);
                } 
            }

            /* Set the status menu timer */
            if (OS_TimerSetMsec(pPSL->pStatusMenu->Timer, ulTimeout) != OS_OK)
            {
                DbgPrint(("PslProcessUserInputAngle: Timer set FAILED\n"));
                return (PSL_FAILURE);
            }

            /* Draw the angle menu */
            if (PslScreenLayoutDrawStatusMenu(pPSL) != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputAngle: failure drawing status menu!\n"));
                return (PSL_FAILURE);
            }
        }
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessUserInputSetup -- Process the setup command
 *
 * @param
 *      pPSL    - handle to internal PSL data
 *      ulInfo  - info param with the command
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessUserInputSetup(PSL_HANDLE *pPSL, ULONG ulInfo)
{
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessUserInputSetup: ENTER\n"));

    if (pPSL == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessUserInputSetup: Invalid psl handle\n"));
        return (PSL_NULL_POINTER);
    }

    /* If standby is on, do not process the user input */
    if (PslExternalGetNavStatus() != (ULONG)PSL_STATUS_STANDBY)
    {
        /* If parental control is active, do not process command */
        if (PslScreenLayoutIsParentalControlActive(pPSL) == FALSE)
        {
            /* check if setup menu is active */
            if (PslScreenLayoutIsSetupMenuActive(pPSL) == FALSE)
            {
                /* If timedisplay is active, clear it before displaying setup menu */
                if (PslScreenLayoutIsStatusDisplayActive(pPSL) == TRUE)
                {
           

⌨️ 快捷键说明

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