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

📄 dispconapi.c

📁 6410BSP3
💻 C
📖 第 1 页 / 共 2 页
字号:

            pArg = (SVEARG_FIMD_WIN_POS *)pBufIn;

            if (pPMCtxt->bPowerOn)
            {
                if (pCtxt->bVideoEnable && pCtxt->bWindowEnable[pArg->dwWinNum])    // Window is in use
                {
                    BOOL bRetry = TRUE;

                    while(bRetry)
                    {
                        EnterCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);

                        if (pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetPosition == FALSE)
                        {
                            pCtxt->DispCmdCtxt[pArg->dwWinNum].dwOffsetX = pArg->dwOffsetX;
                            pCtxt->DispCmdCtxt[pArg->dwWinNum].dwOffsetY = pArg->dwOffsetY;
                            pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetPosition = TRUE;
                            bRetry = FALSE;
                        }

                        LeaveCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);

                        if (bRetry)
                        {
                            if (WAIT_TIMEOUT == SVE_wait_disp_cmd_done())
                            {
                                VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_POSITION : SVE_wait_disp_cmd_done() TimeOut\n\r")));
                                bRet = FALSE;
                            }
                        }
                    }
                }
                else
                {
                    Disp_set_window_position(pArg->dwWinNum, pArg->dwOffsetX, pArg->dwOffsetY);
                }
            }

            // Backup for PM
            pPMCtxt->tFIMDWinMode[pArg->dwWinNum].dwOffsetX = pArg->dwOffsetX;
            pPMCtxt->tFIMDWinMode[pArg->dwWinNum].dwOffsetY = pArg->dwOffsetY;
            pPMCtxt->bFIMDWinMode[pArg->dwWinNum] = TRUE;

            break;
        }

        case SVE_FIMD_SET_WINDOW_FRAMEBUFFER:
        {
            SVEARG_FIMD_WIN_FRAMEBUFFER *pArg;

            VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_FRAMEBUFFER\n\r")));

            if(!pBufIn)
            {
                DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
                bRet = FALSE;
                break;
            }                   

            pArg = (SVEARG_FIMD_WIN_FRAMEBUFFER *)pBufIn;

            if (pPMCtxt->bPowerOn)
            {
                if (pCtxt->bVideoEnable && pCtxt->bWindowEnable[pArg->dwWinNum])    // Window is in use
                {
                    BOOL bRetry = TRUE;

                    while(bRetry)
                    {
                        EnterCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);

                        if (pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetBuffer == FALSE)
                        {
                            pCtxt->DispCmdCtxt[pArg->dwWinNum].dwBuffer = pArg->dwFrameBuffer;
                            pCtxt->DispCmdCtxt[pArg->dwWinNum].bCmdSetBuffer = TRUE;
                            bRetry = FALSE;
                        }

                        LeaveCriticalSection(&pCtxt->DispCmdCtxt[pArg->dwWinNum].csCmd);

                        if (bRetry || pArg->bWaitForVSync)
                        {
                            if (WAIT_TIMEOUT == SVE_wait_disp_cmd_done())
                            {
                                VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_FRAMEBUFFER : SVE_wait_disp_cmd_done() TimeOut\n\r")));
                                bRet = FALSE;
                            }
                        }
                    }
                }
                else
                {
                    Disp_set_framebuffer(pArg->dwWinNum, pArg->dwFrameBuffer);
                }
            }

            // Backup for PM
            memcpy(&pPMCtxt->tFIMDWinFBuffer[pArg->dwWinNum], pArg, sizeof(SVEARG_FIMD_WIN_FRAMEBUFFER));
            pPMCtxt->bFIMDWinFBuffer[pArg->dwWinNum] = TRUE;

            break;
        }

        case SVE_FIMD_SET_WINDOW_ENABLE:
        {
            DWORD dwWinNum;

            VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_ENABLE\n\r")));

            if(!pBufIn)
            {
                DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
                bRet = FALSE;
                break;
            }                   
            
            dwWinNum = *((DWORD *)pBufIn);
            if(dwWinNum < DISP_WIN_MAX)
            {            
                if (pPMCtxt->bPowerOn)
                {

                    Disp_window_onfoff(dwWinNum, DISP_WINDOW_ON);
                    pCtxt->bWindowEnable[dwWinNum] = TRUE;
                }

                // Backup for PM
                pPMCtxt->bFIMDWinEnable[dwWinNum] = TRUE;
            }

            break;
        }

        case SVE_FIMD_SET_WINDOW_DISABLE:
        {
            DWORD dwWinNum;

            VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_DISABLE\n\r")));

            if(!pBufIn)
            {
                DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
                bRet = FALSE;
                break;
            }                   

            dwWinNum = *((DWORD *)pBufIn);
            if(dwWinNum < DISP_WIN_MAX)
            {
                if (pPMCtxt->bPowerOn)
                {

                    Disp_window_onfoff(dwWinNum, DISP_WINDOW_OFF);
                    pCtxt->bWindowEnable[dwWinNum] = FALSE;
                }

                // Backup for PM
                pPMCtxt->bFIMDWinEnable[dwWinNum] = FALSE;
            }

            break;
        }

        case SVE_FIMD_SET_WINDOW_BLEND_COLORKEY:
        {
            SVEARG_FIMD_WIN_COLORKEY *pArg;

            VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_BLEND_COLORKEY\n\r")));

            if(!pBufIn)
            {
                DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
                bRet = FALSE;
                break;
            }                   

            pArg = (SVEARG_FIMD_WIN_COLORKEY *)pBufIn;

            if (pPMCtxt->bPowerOn)
            {
                Disp_set_color_key(pArg->dwWinNum, pArg->bOnOff, pArg->dwDirection, pArg->dwColorKey, pArg->dwCompareKey);
            }

            // Backup for PM
            memcpy(&pPMCtxt->tFIMDColorKey[pArg->dwWinNum], pArg, sizeof(SVEARG_FIMD_WIN_COLORKEY));
            pPMCtxt->bFIMDColorKey[pArg->dwWinNum] = TRUE;

            break;
        }

        case SVE_FIMD_SET_WINDOW_BLEND_ALPHA:
        {
            SVEARG_FIMD_WIN_ALPHA *pArg;

            VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_BLEND_ALPHA\n\r")));

            if(!pBufIn)
            {
                DEBUGMSG(VDE_ZONE_ERROR,(TEXT("Invalid Buffer : pBufIn:0x%x\n"), pBufIn));
                bRet = FALSE;
                break;
            }                   

            pArg = (SVEARG_FIMD_WIN_ALPHA *)pBufIn;

            if (pPMCtxt->bPowerOn)
            {
                Disp_set_alpha_blending(pArg->dwWinNum, pArg->dwMethod, pArg->dwAlpha0, pArg->dwAlpha1);
            }

            // Backup for PM
            memcpy(&pPMCtxt->tFIMDAlpha[pArg->dwWinNum], pArg, sizeof(SVEARG_FIMD_WIN_ALPHA));
            pPMCtxt->bFIMDAlpha[pArg->dwWinNum] = TRUE;

            break;
        }

        case SVE_FIMD_WAIT_FRAME_INTERRUPT:
        {
            if (pPMCtxt->bPowerOn && pCtxt->bVideoEnable)
            {
                if (WAIT_TIMEOUT == SVE_wait_disp_cmd_done())
                {
                    VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_WAIT_FRAME_INTERRUPT : SVE_wait_disp_cmd_done() TimeOut\n\r")));
                    bRet = FALSE;
                }
            }
            else
            {
                VDE_INF((_T("[VDE:INF] SVE_DispCon_API_Proc() : SVE_FIMD_WAIT_FRAME_INTERRUPT : Video Output is Disabled or Power Off Mode\n\r")));
            }
            break;
        }

        case SVE_FIMD_GET_OUTPUT_STATUS:
        {
            SVEARG_FIMD_OUTPUT_STAT *pArg;

            VDE_MSG((_T("[VDE] SVE_DispCon_API_Proc() : SVE_FIMD_GET_OUTPUT_STATUS\n\r")));

            pArg = (SVEARG_FIMD_OUTPUT_STAT *)pBufOut;

            if (pPMCtxt->bPowerOn)
            {
                pArg->dwLineCnt = Disp_get_line_count();
                pArg->dwVerticalStatus = Disp_get_vertical_status();
                pArg->dwHorizontalStatus = 0;
                pArg->bENVID = Disp_get_envid_status();
            }
            else
            {
                // Return Pseudo Values in Power Off State
                pArg->dwLineCnt = 0;
                pArg->dwVerticalStatus = 0;
                pArg->dwHorizontalStatus = 0;
                pArg->bENVID = FALSE;
            }

            *pdwActualOut = sizeof(SVEARG_FIMD_OUTPUT_STAT);

            break;
        }

        case SVE_FIMD_SET_WINDOW_COLORMAP:
            VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_GET_OUTPUT_STATUS : Not Implemented Yet...\n\r")));
            bRet = FALSE;
            break;
        case SVE_FIMD_GET_WINDOW_STATUS:
            VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_GET_WINDOW_STATUS : Not Implemented Yet...\n\r")));
            bRet = FALSE;
            break;
        case SVE_FIMD_SET_WINDOW_BLEND_DISABLE:
            VDE_ERR((_T("[VDE:ERR] SVE_DispCon_API_Proc() : SVE_FIMD_SET_WINDOW_BLEND_DISABLE : Not Implemented Yet...\n\r")));
            bRet = FALSE;
            break;
        default:    // This is filtered above switch statement
            bRet = FALSE;
            break;                  
        }

CleanUp:

    VDE_MSG((_T("[VDE] --SVE_DispCon_API_Proc()\n\r")));

    return bRet;
}


⌨️ 快捷键说明

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