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

📄 psl_process_status.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        if (PslScreenLayoutClearStatusDisplay(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusSetTmpParental: Failure clearing status display!\n"));
            return (PSL_FAILURE);
        } 
    }

    /* If status menu is active, clear it */
    if (PslScreenLayoutIsStatusMenuActive(pPSL) == TRUE)
    {
        /* clear status menu */ 
        if (PslScreenLayoutClearStatusMenu(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusSetTmpParental: Failure clearing status menu!\n"));
            return (PSL_FAILURE);
        } 
    }

    /* Set parental control mode */
    pPSL->pParentalControl->usMode = 1;

    /* Draw the parental control interface */
    if (PslScreenLayoutDrawParentalControl(pPSL) != PSL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusSetTmpParental: Failure drawing parental control!\n"));
        return (PSL_FAILURE);
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusParentalProhibit -- Process the parental prohibit status event
 *
 * @param
 *      pPSL         - handle to internal PSL data
 *      ulData1      - data parameter associated with status event
 *      ulData2      - data parameter associated with status event
 *      pvBuffer     - buffer containing data associated with status event
 *      ulBufferSize - size of buffer pointed to by pvBuffer
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessStatusParentalProhibit(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessStatusParentalProhibit: ENTER\n"));

    if (pPSL == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusParentalProhibit: NULL pointer!\n"));
        return (PSL_NULL_POINTER);
    }

    if (pPSL->pParentalControl == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusSetTmpParental: parental control data not created!\n"));
        return (PSL_FAILURE);
    }

    /* If generic osd is active, clear it */
    if (PslScreenLayoutIsGenericActive(pPSL) == TRUE)
    {
        if (PslScreenLayoutClearGeneric(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusParentalProhibit: failed to clear generic osd!\n"));
            return (PSL_FAILURE);
        }
    }

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

    /* If status display is active, clear it */
    if (PslScreenLayoutIsStatusDisplayActive(pPSL) == TRUE)
    {
        /* clear status display */ 
        if (PslScreenLayoutClearStatusDisplay(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusParentalProhibit: Failure clearing status display!\n"));
            return (PSL_FAILURE);
        } 
    }

    /* If status menu is active, clear it */
    if (PslScreenLayoutIsStatusMenuActive(pPSL) == TRUE)
    {
        /* clear status menu */ 
        if (PslScreenLayoutClearStatusMenu(pPSL) != PSL_SUCCESS)
        {
            DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusParentalProhibit: Failure clearing status menu!\n"));
            return (PSL_FAILURE);
        } 
    }

    /* Set parental control mode */
    pPSL->pParentalControl->usMode = 2;

    /* Draw the parental control interface */
    if (PslScreenLayoutDrawParentalControl(pPSL) != PSL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusParentalProhibit: Failure drawing parental control!\n"));
        return (PSL_FAILURE);
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusTimer -- Process the status display timer status event
 *
 * @param
 *      pPSL         - handle to internal PSL data
 *      ulData1      - data parameter associated with status event
 *      ulData2      - data parameter associated with status event
 *      pvBuffer     - buffer containing data associated with status event
 *      ulBufferSize - size of buffer pointed to by pvBuffer
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessStatusTimer(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    ULONG   ulSetting;
    char    cSetting[25];
    char    cTmp[5];
    BOOLEAN fUpdate = FALSE;

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

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

    if (PslScreenLayoutIsStatusDisplayActive(pPSL) == TRUE)
    {
        ULONG ulNavState = PslExternalGetNavStatus();

        /* If we are in a bad play state to show time display, clear it */
        if ( (ulNavState == PSL_STATUS_FULLSTOP) || (ulNavState == PSL_STATUS_OPEN) ||
             (ulNavState == PSL_STATUS_NO_DISC) || (ulNavState == PSL_STATUS_UNKNOWN) )
        {
            /* clear status display */ 
            if (PslScreenLayoutClearStatusDisplay(pPSL) != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusTimer: Failure clearing status display!\n"));
                return (PSL_FAILURE);
            } 
        }
        else
        {
            /* Get the title number */
            ulSetting = PslExternalGetCurrentTitle();

            /* If title is different, update the status display */
            if (ulSetting != pPSL->pStatusDisplay->StatusInfo.usTitle)
            {
                pPSL->pStatusDisplay->StatusInfo.usTitle = (USHORT)(ulSetting);

                /* Conver title number to a string */
                if (ulSetting < 10)
                {
                    cTmp[0] = (char)(ulSetting + '0');
                    cTmp[1] = '\0';
                }
                else
                {
                    cTmp[0] = (char)((ulSetting / 10) + '0');
                    cTmp[1] = (char)((ulSetting % 10) + '0');
                    cTmp[2] = '\0';
                }

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

                /* redraw the button with the title */
                if (PslScreenLayoutDrawButton(&pPSL->pStatusDisplay->pButton[0][1]) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusTimer: failure drawing button!\n"));
                    return (PSL_FAILURE);
                }

                fUpdate = TRUE;
            }

            /* Get the chapter number */
            ulSetting = PslExternalGetCurrentChapter();

            /* If chapter is different, update the status display */
            if (ulSetting != pPSL->pStatusDisplay->StatusInfo.usChapter)
            {
                pPSL->pStatusDisplay->StatusInfo.usChapter = (USHORT)(ulSetting);

                /* Conver chapter number to a string */
                if (ulSetting < 10)
                {
                    cTmp[0] = (char)(ulSetting + '0');
                    cTmp[1] = '\0';
                }
                else
                {
                    cTmp[0] = (char)((ulSetting / 10) + '0');
                    cTmp[1] = (char)((ulSetting % 10) + '0');
                    cTmp[2] = '\0';
                }

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

                /* redraw the button with the chapter */
                if (PslScreenLayoutDrawButton(&pPSL->pStatusDisplay->pButton[0][3]) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusTimer: failure drawing button!\n"));
                    return (PSL_FAILURE);
                }

                fUpdate = TRUE;
            }

            /* Get the play time */
            ulSetting = PslExternalGetTime(pPSL->pStatusDisplay->StatusInfo.tTimeMode);

            if (ulSetting != pPSL->pStatusDisplay->StatusInfo.ulTime)
            {
                pPSL->pStatusDisplay->StatusInfo.ulTime = ulSetting;

                /* convert hour string */
                cTmp[0] = (char)(( (ulSetting / 3600) / 10) + '0');
                cTmp[1] = (char)(( (ulSetting / 3600) % 10) + '0');
                cTmp[2] = '\0';

                /* add hour to time setting string */
                strcpy(cSetting, cTmp);
                strcat(cSetting, " : ");

                /* convert minute string */
                ulSetting   = ulSetting % 3600;
                cTmp[0] = (char)(( (ulSetting / 60) / 10) + '0');
                cTmp[1] = (char)(( (ulSetting / 60) % 10) + '0');
                cTmp[2] = '\0';

                /* add minute to time setting string */
                strcat(cSetting, cTmp);
                strcat(cSetting, " : ");

                /* convert second string */
                ulSetting   = ulSetting % 60;
                cTmp[0] = (char)((ulSetting / 10) + '0');
                cTmp[1] = (char)((ulSetting % 10) + '0');
                cTmp[2] = '\0';

                /* add second to time setting string */
                strcat(cSetting, cTmp);
             
                /* set time setting text */
                if (PslScreenLayoutSetButtonText(&pPSL->pStatusDisplay->pButton[0][5], cSetting) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusTimer: failure setting button text!\n"));
                    return (PSL_FAILURE);
                }

                /* redraw the button with the time */
                if (PslScreenLayoutDrawButton(&pPSL->pStatusDisplay->pButton[0][5]) != PSL_SUCCESS)
                {
                    DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusTimer: failure drawing button!\n"));
                    return (PSL_FAILURE);
                }

                fUpdate = TRUE;
            }

            if (fUpdate == TRUE)
            {
                /* copy draw buffer to display buffer */
                DealCMBufferCopy(pPSL->pStatusDisplay->hDeal, DEAL_BUFFER_DRAW, DEAL_BUFFER_DISPLAY);
            }
        }
    }
    else if (PslScreenLayoutIsCDDAActive(pPSL) == TRUE)
    {
        /* Get the track number */
        ulSetting = PslExternalGetCurrentChapter();

        /* If track is different, update the cdda display */
        if (ulSetting != pPSL->pCddaGui->StatusInfo.usChapter)
        {
            pPSL->pCddaGui->StatusInfo.usChapter = (USHORT)(ulSetting);

            /* Conver chapter number to a string */
            if (ulSetting < 10)
            {
                cTmp[0] = (char)(ulSetting + '0');
                cTmp[1] = '\0';
            }
            else
            {
                cTmp[0] = (char)((ulSetting / 10) + '0');
                cTmp[1] = (char)((ulSetting % 10) + '0');
                cTmp[2] = '\0';
            }

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

            /* redraw the button with the track number */
            if (PslScreenLayoutDrawButton(&pPSL->pCddaGui->pButton[0][1]) != PSL_SUCCESS)
            {
                DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusTimer: failure drawing button!\n"));
                return (PSL_FAILURE);
            }

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

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusIconTimeout -- Process the icon timeout status event
 *
 * @param
 *      pPSL         - handle to internal PSL data
 *      ulData1      - data parameter associated with status event
 *      ulData2      - data parameter associated with status event
 *      pvBuffer     - buffer containing data associated with status event
 *      ulBufferSize - size of buffer pointed to by pvBuffer
 *
 * @retval
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessStatusIconTimeout(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessStatusIconTimeout: ENTER\n"));

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

    /* If time display is active, icon should not be cleared */
    if (PslScreenLayoutIsStatusDisplayActive(pPSL) == TRUE)
    {
        /* If icon was the prohibited icon, redraw the status icon */
        if (pPSL->pIconData->pActiveIcon == PslBitmapGetProhibitedIcon() )
        {
            ULONG ulNavState = PslExternalGetNavStatus();

            /* get appropriate icon based on navigator state */
            switch (ulNavState)
            {
            case PSL_STATUS_PAUSE:
                pPSL->pIconData->pActiveIcon = PslBitmapGetPauseIcon();
                break;
            case PSL_STATUS_STOP:
                pPSL->pIconData->pActiveIcon = PslBitmapGetStopIcon();
                break;
            case PSL_STATUS_PLAY:
                pPSL->pIconData->pActiveIcon = PslBitmapGetPlay

⌨️ 快捷键说明

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