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

📄 psl_process_status.cpp

📁 这是DVD中伺服部分的核心代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
 *    PSL_SUCCESS if successful
 *    PSL_FAILURE if not successful
 */
PSL_STATUS PslProcessStatusLoadComplete(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessStatusLoadComplete: ENTER\n"));

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

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

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusAngleChange -- Process the angle change 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 PslProcessStatusAngleChange(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    ULONG   ulTimeout   = 3000;
    char    cTmp[5];

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

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

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

    /* Set the angle number string */
    if (ulData1 < 10)
    {
        cTmp[0] = (char)(ulData1 + '0');
        cTmp[1] = '\0';
    }
    else
    {
        cTmp[0] = (char)((ulData1 / 10) + '0');
        cTmp[1] = (char)((ulData1 % 10) + '0');
        cTmp[2] = '\0';
    }

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

    /* set the status menu mode to angle */
    pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_ANGLE;

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

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

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusAudioChange -- Process the audio change 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 PslProcessStatusAudioChange(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    ULONG   ulTimeout   = 3000;
    char    cTmp[50];

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

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

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

    /* check that buffer is valid */
    if ( (pvBuffer == NULL) || (ulBufferSize < (sizeof(ULONG) * 2) ) )
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusAudioChange: invalid buffer!\n"));
        return (PSL_FAILURE);
    }

    /* Set the Audio number string */
    cTmp[0] = '0' + ( (UBYTE)ulData1 / 10);
    cTmp[1] = '0' + ( (UBYTE)ulData1 % 10);
    cTmp[2] = '\0';

    /* Set the Audio decode type string */
    switch ( ( (ULONG *)pvBuffer)[0] )
    {
    case VDVD_INFO_AUDIOTYPE_DOLBY:
        /* Look at number of audio channels */
        switch ( ( (ULONG *)pvBuffer)[1] )
        {
        case 1:
            strcat(cTmp, " DOLBY DIGITAL MONO " );
            break;
        case 2:
            strcat(cTmp, " DOLBY DIGITAL 2/0  " );
            break;
        case 3:
            strcat(cTmp, " AC3 3 CHANNEL " );
            break;
        case 4:
            strcat(cTmp, " AC3 4 CHANNEL " );
            break;
        case 5:
            strcat(cTmp, " AC3 5 CHANNEL " );
            break;
        case 6:
            strcat(cTmp, " DOLBY DIGITAL 5.1  " );
            break;
        case 7:
            strcat(cTmp, " AC3 7 CHANNEL " );
            break;
        case 8:
            strcat(cTmp, " AC3 8 CHANNEL " );
            break;
        default:    
            strcpy(cTmp, "");
            break;
        }
        break;
    case VDVD_INFO_AUDIOTYPE_MPEG:
        strcat(cTmp, " MPEG " );
        break;
    case VDVD_INFO_AUDIOTYPE_LPCM:
        strcat(cTmp, " LPCM " );
        break;
    case VDVD_INFO_AUDIOTYPE_DTS:
        strcat(cTmp, " DTS  " );
        break;
    default:
        strcpy(cTmp, "");
        break;
    }

    /* Set the audio language string */
    strcat(cTmp, LANGUAGE_CONST[ulData2 - 1]);

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

    /* set the status menu mode to audio */
    pPSL->pStatusMenu->tCurrentMode = PSL_STATUS_MODE_AUDIO;

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

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

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusAudioNotSupported -- Process the audio not supported 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 PslProcessStatusAudioNotSupported(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    ULONG ulTimeout = 3000;

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

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

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

    /* Draw message on generic osd */
    if (PslScreenLayoutDrawGeneric(pPSL, PSL_STATUS_AUDIO_NOT_SUPPORTED, ulData1) != PSL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusAudioNotSupported: failed to draw message!\n"));
        return (PSL_FAILURE);
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusInvalidRegion -- Process the invalid region 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 PslProcessStatusInvalidRegion(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    ULONG ulTimeout = 3000;

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

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

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

    /* Draw message on generic osd */
    if (PslScreenLayoutDrawGeneric(pPSL, PSL_STATUS_INVALID_REGION, ulData1) != PSL_SUCCESS)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusInvalidRegion: failed to draw message!\n"));
        return (PSL_FAILURE);
    }

    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusStandby -- Process the standby 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 PslProcessStatusStandby(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessStatusStandby: no functionality\n"));
    return (PSL_SUCCESS);
}

/**
 * PslProcessStatusSetTmpParental -- Process the set temp parental level 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 PslProcessStatusSetTmpParental(PSL_HANDLE *pPSL, ULONG ulData1, ULONG ulData2, PVOID pvBuffer, ULONG ulBufferSize)
{
    DBGPRINT(DBG_ON(DBG_TRACE), ("PslProcessStatusSetTmpParental: ENTER\n"));

    if (pPSL == NULL)
    {
        DBGPRINT(DBG_ON(DBG_ERROR), ("PslProcessStatusSetTmpParental: 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), ("PslProcessStatusSetTmpParental: 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), ("PslProcessStatusSetTmpParental: Failure clearing setup menu!\n"));
            return (PSL_FAILURE);
        } 
    }

    /* If status display is active, clear it */
    if (PslScreenLayoutIsStatusDisplayActive(pPSL) == TRUE)
    {
        /* clear status display */ 

⌨️ 快捷键说明

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