s3c6410_display_con.c

来自「6410BSP3」· C语言 代码 · 共 1,790 行 · 第 1/5 页

C
1,790
字号
            error = DISP_ERROR_ILLEGAL_PARAMETER;
#else
            // Safe Frame buffer Address for Local Path
            g_pDispConReg->VIDW02ADD0 = VBANK_F(uiFrameBufferAddress>>24) | VBASEU_F(uiFrameBufferAddress);
            g_pDispConReg->VIDW02ADD1 = VBASEL_F(VBASEU_F(uiFrameBufferAddress)+0x10);        // 4 Words
            g_pDispConReg->VIDW02ADD2 = PAGEWIDTH_F(0x10);                                    // 4 Words
#endif
        }
        else
        {
            g_pDispConReg->VIDW02ADD0 = VBANK_F(uiFrameBufferAddress>>24) | VBASEU_F(uiFrameBufferAddress);
            g_pDispConReg->VIDW02ADD1 = VBASEL_F(VBASEU_F(uiFrameBufferAddress)+g_Win2Config.uiPageWidth*g_Win2Config.uiHeight);
            g_pDispConReg->VIDW02ADD2 = PAGEWIDTH_F(g_Win2Config.uiPageWidth);
        }
        break;
    case DISP_WIN3:
        g_pDispConReg->VIDW03ADD0 = VBANK_F(uiFrameBufferAddress>>24) | VBASEU_F(uiFrameBufferAddress);
        g_pDispConReg->VIDW03ADD1 = VBASEL_F(VBASEU_F(uiFrameBufferAddress)+g_Win3Config.uiPageWidth*g_Win3Config.uiHeight);
        g_pDispConReg->VIDW03ADD2 = PAGEWIDTH_F(g_Win3Config.uiPageWidth);
        break;
    case DISP_WIN4:
        g_pDispConReg->VIDW04ADD0 = VBANK_F(uiFrameBufferAddress>>24) | VBASEU_F(uiFrameBufferAddress);
        g_pDispConReg->VIDW04ADD1 = VBASEL_F(VBASEU_F(uiFrameBufferAddress)+g_Win4Config.uiPageWidth*g_Win4Config.uiHeight);
        g_pDispConReg->VIDW04ADD2 = PAGEWIDTH_F(g_Win4Config.uiPageWidth);
        break;
    default:
        DISP_ERR((_T("[DISP:ERR] Disp_set_framebuffer() : Unknown Window Number [%d]\n\r"), Win));
        error = DISP_ERROR_ILLEGAL_PARAMETER;
        break;
    }

    //DISP_MSG((_T("[DISP]--Disp_set_framebuffer() : %d\n\r"), error));

    return error;
}

DISP_ERROR Disp_envid_onoff(DISP_ENVID_ONOFF EnvidOnOff)
{
    DISP_ERROR error = DISP_SUCCESS;

    DISP_MSG((_T("[DISP]++Disp_envid_onoff(%d)\n\r"), EnvidOnOff));

    if (EnvidOnOff == DISP_ENVID_ON)
    {
        g_pDispConReg->VIDCON0 |= (ENVID_ENABLE | ENVID_F_ENABLE);
    }
    else if (EnvidOnOff == DISP_ENVID_OFF)
    {
        g_pDispConReg->VIDCON0 &= ~(ENVID_F_ENABLE);    // Per Frame Off
    }
    else if (EnvidOnOff == DISP_ENVID_DIRECT_OFF)
    {
        g_pDispConReg->VIDCON0 &= ~(ENVID_ENABLE | ENVID_F_ENABLE);    // Direct Off
    }
    else
    {
        DISP_ERR((_T("[DISP:ERR] Disp_envid_onoff() : Unknown Parameter [%d]\n\r"), EnvidOnOff));
        error = DISP_ERROR_ILLEGAL_PARAMETER;
    }

    DISP_MSG((_T("[DISP]--Disp_envid_onoff() : %d\n\r"), error));

    return error;
}

BOOL Disp_get_envid_status(void)
{
    BOOL bRet = FALSE;

    DISP_MSG((_T("[DISP]++Disp_get_envid_status()\n\r")));

    if (g_pDispConReg->VIDCON0 & ENVID_ENABLE)
    {
        bRet = TRUE;
    }
    else
    {
        bRet = FALSE;
    }

    DISP_MSG((_T("[DISP]--Disp_envid_onoff() : %d\n\r"), bRet));

    return bRet;
}

DISP_ERROR Disp_window_onfoff(DISP_WINDOW Win, DISP_WINDOW_ONOFF WinOnOff)
{
    DISP_ERROR error = DISP_SUCCESS;

    DISP_MSG((_T("[DISP]++Disp_window_onfoff(%d, %d)\n\r"), Win, WinOnOff));

    if (WinOnOff == DISP_WINDOW_ON || WinOnOff == DISP_WINDOW_OFF)
    {
        switch(Win)
        {
        case DISP_WIN0:
            if (WinOnOff == DISP_WINDOW_ON)
            {
                g_pDispConReg->WINCON0 |= (ENWIN_F_ENABLE | g_Win0Config.LocalPathEnable);
            }
            else
            {
                // ENLOCAL bit must be disabled after ENWIN_F has been disabled
                g_pDispConReg->WINCON0 &= ~(ENWIN_F_ENABLE | g_Win0Config.LocalPathEnable);
                //g_pDispConReg->WINCON0 &= ~ENWIN_F_ENABLE;
            }
            break;
        case DISP_WIN1:
            if (WinOnOff == DISP_WINDOW_ON)
            {
                g_pDispConReg->WINCON1 |= (ENWIN_F_ENABLE | g_Win1Config.LocalPathEnable);
            }
            else
            {
                // ENLOCAL bit must be disabled after ENWIN_F has been disabled
                g_pDispConReg->WINCON1 &= ~(ENWIN_F_ENABLE | g_Win1Config.LocalPathEnable);
                //g_pDispConReg->WINCON1 &= ~ENWIN_F_ENABLE;
            }
            break;
        case DISP_WIN2:
            if (WinOnOff == DISP_WINDOW_ON)
            {
                g_pDispConReg->WINCON2 |= (ENWIN_F_ENABLE | g_Win2Config.LocalPathEnable);
            }
            else
            {
                // ENLOCAL bit must be disabled after ENWIN_F has been disabled
                g_pDispConReg->WINCON2 &= ~(ENWIN_F_ENABLE | g_Win2Config.LocalPathEnable);
                //g_pDispConReg->WINCON2 &= ~ENWIN_F_ENABLE;
            }
            break;
        case DISP_WIN3:
            if (WinOnOff == DISP_WINDOW_ON)
            {
                g_pDispConReg->WINCON3 |= ENWIN_F_ENABLE;
            }
            else
            {
                g_pDispConReg->WINCON3 &= ~ENWIN_F_ENABLE;
            }
            break;
        case DISP_WIN4:
            if (WinOnOff == DISP_WINDOW_ON)
            {
                g_pDispConReg->WINCON4 |= ENWIN_F_ENABLE;
            }
            else
            {
                g_pDispConReg->WINCON4 &= ~ENWIN_F_ENABLE;
            }
            break;
        default:
            DISP_ERR((_T("[DISP:ERR] Disp_window_onfoff() : Unknown Window Number [%d]\n\r"), Win));
            error = DISP_ERROR_ILLEGAL_PARAMETER;
            break;
        }
    }
    else
    {
        DISP_ERR((_T("[DISP:ERR] Disp_window_onfoff() : Unknown OnOff Parameter [%d]\n\r"), WinOnOff));
        error = DISP_ERROR_ILLEGAL_PARAMETER;
    }

    DISP_MSG((_T("[DISP]--Disp_window_onfoff() : %d\n\r"), error));

    return error;
}

DISP_ERROR Disp_local_path_off(DISP_WINDOW Win)
{
    DISP_ERROR error = DISP_SUCCESS;

    DISP_MSG((_T("[DISP]++Disp_local_path_off(%d)\n\r"), Win));

    switch(Win)
    {
    case DISP_WIN0:
        // The precondition is that ENLOCAL bit must be disabled after ENWIN_F has been disabled
        g_pDispConReg->WINCON0 &= ~(g_Win0Config.LocalPathEnable);
        break;
    case DISP_WIN1:
        // The precondition is that ENLOCAL bit must be disabled after ENWIN_F has been disabled
        g_pDispConReg->WINCON1 &= ~(g_Win1Config.LocalPathEnable);
        break;
    case DISP_WIN2:
        // The precondition is that ENLOCAL bit must be disabled after ENWIN_F has been disabled
        g_pDispConReg->WINCON2 &= ~(g_Win2Config.LocalPathEnable);
        break;
    default:
        DISP_ERR((_T("[DISP:ERR] Disp_local_path_off() : Unknown Window Number [%d]\n\r"), Win));
        error = DISP_ERROR_ILLEGAL_PARAMETER;
        break;
    }

    DISP_MSG((_T("[DISP]--Disp_local_path_off() : %d\n\r"), error));

    return error;
}


DISP_WINDOW_ONOFF Disp_get_window_status(DISP_WINDOW Win)
{
    unsigned int uiWinConReg;

    switch(Win)
    {
    case DISP_WIN0:
        uiWinConReg = g_pDispConReg->WINCON0;
        break;
    case DISP_WIN1:
        uiWinConReg = g_pDispConReg->WINCON1;
        break;
    case DISP_WIN2:
        uiWinConReg = g_pDispConReg->WINCON2;
        break;
    case DISP_WIN3:
        uiWinConReg = g_pDispConReg->WINCON3;
        break;
    case DISP_WIN4:
        uiWinConReg = g_pDispConReg->WINCON4;
        break;
    default:
        DISP_ERR((_T("[DISP:ERR] Disp_get_window_status() : Unknown Window Number [%d]\n\r"), Win));
        return -1;
    }

    if (uiWinConReg & ENWIN_F_ENABLE)
    {
        return DISP_WINDOW_ON;
    }
    else
    {
        return DISP_WINDOW_OFF;
    }
}

DISP_ERROR Disp_set_dithering_mode(DISP_DITHER_MODE Mode)
{
    DISP_ERROR error = DISP_SUCCESS;

    DISP_MSG((_T("[DISP]++Disp_set_dithering_mode(%d)\n\r"), Mode));

    switch(Mode)
    {
    case DISP_DITHER_OFF:
        g_pDispConReg->DITHMODE = DITHEN_F_DISABLE;
        break;
    case DISP_DITHER_565:
        g_pDispConReg->DITHMODE = RDITHPOS_5BIT | GDITHPOS_6BIT | BDITHPOS_5BIT | DITHEN_F_ENABLE;
        break;
    case DISP_DITHER_666:
        g_pDispConReg->DITHMODE = RDITHPOS_6BIT | GDITHPOS_6BIT | BDITHPOS_6BIT | DITHEN_F_ENABLE;
        break;
    case DISP_DITHER_888:
        g_pDispConReg->DITHMODE = RDITHPOS_8BIT | GDITHPOS_8BIT | BDITHPOS_8BIT | DITHEN_F_ENABLE;
        break;
    default:
        DISP_ERR((_T("[DISP:ERR] Disp_set_dithering_mode() : Unknown Mode [%d]\n\r"), Mode));
        error = DISP_ERROR_ILLEGAL_PARAMETER;
        g_pDispConReg->DITHMODE = DITHEN_F_DISABLE;
        break;
    }

    DISP_MSG((_T("[DISP]--Disp_set_dithering_mode() : %d\n\r"), error));

    return error;
}

DISP_ERROR Disp_set_window_color_map(DISP_WINDOW Win, BOOL bOnOff, unsigned int uiColorValue)
{
    DISP_ERROR error = DISP_SUCCESS;

    DISP_MSG((_T("[DISP]++Disp_set_window_color_map(%d, %d, 0x%08x)\n\r"), Win, bOnOff, uiColorValue));

    switch(Win)
    {
    case DISP_WIN0:
        if (bOnOff)
        {
            g_pDispConReg->WIN0MAP = MAPCOLEN_F_ENABLE | MAPCOLOR(uiColorValue);
        }
        else
        {
            g_pDispConReg->WIN0MAP = MAPCOLEN_F_DISABLE;
        }
        break;
    case DISP_WIN1:
        if (bOnOff)
        {
            g_pDispConReg->WIN1MAP = MAPCOLEN_F_ENABLE | MAPCOLOR(uiColorValue);
        }
        else
        {
            g_pDispConReg->WIN1MAP = MAPCOLEN_F_DISABLE;
        }
        break;
    case DISP_WIN2:
        if (bOnOff)
        {
            g_pDispConReg->WIN2MAP = MAPCOLEN_F_ENABLE | MAPCOLOR(uiColorValue);
        }
        else
        {
            g_pDispConReg->WIN2MAP = MAPCOLEN_F_DISABLE;
        }
        break;
    case DISP_WIN3:
        if (bOnOff)
        {
            g_pDispConReg->WIN3MAP = MAPCOLEN_F_ENABLE | MAPCOLOR(uiColorValue);
        }
        else
        {
            g_pDispConReg->WIN3MAP = MAPCOLEN_F_DISABLE;
        }
        break;
    case DISP_WIN4:
        if (bOnOff)
        {
            g_pDispConReg->WIN4MAP = MAPCOLEN_F_ENABLE | MAPCOLOR(uiColorValue);
        }
        else
        {
            g_pDispConReg->WIN4MAP = MAPCOLEN_F_DISABLE;
        }
        break;
    default:
        DISP_ERR((_T("[DISP:ERR] Disp_set_window_color_map() : Unknown Window Number [%d]\n\r"), Win));
        error = DISP_ERROR_ILLEGAL_PARAMETER;
        break;
    }

    DISP_MSG((_T("[DISP]--Disp_set_window_color_map() : %d\n\r"), error));

    return error;
}

DISP_ERROR Disp_set_color_key(DISP_WINDOW Win, BOOL bOnOff, DISP_COLOR_KEY_DIRECTION Direction, unsigned int uiColorKey, unsigned int uiComparekey)
{
    DISP_ERROR error = DISP_SUCCESS;

    unsigned int uiKeyDir;

    DISP_MSG((_T("[DISP]++Disp_set_color_key(%d, %d, %d, 0x%08x, 0x%08x)\n\r"), Win, bOnOff, Direction, uiColorKey, uiComparekey));

    if (Direction == DISP_FG_MATCH_BG_DISPLAY)
    {
        uiKeyDir = DIRCON_FG_MATCH_BG_DISPLAY;
    }
    else
    {
        uiKeyDir = DIRCON_BG_MATCH_FG_DISPLAY;
    }

    switch(Win)
    {
    case DISP_WIN1:
        if (bOnOff)

⌨️ 快捷键说明

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