display_main.cpp
来自「6410BSP3」· C++ 代码 · 共 1,962 行 · 第 1/5 页
CPP
1,962 行
|| (SMDK6410_LCD_MODULE == LCD_MODULE_LTP700) \
|| (SMDK6410_LCD_MODULE == LCD_MODULE_LTM030DK) \
)
// Initialize LCD Module
LDI_initialize_LCD_module();
#endif
// Power On Video Driver
// All of HW State is restored by Video Driver
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_PM_SET_POWER_ON, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevPowerOn() : IOCTL_SVE_PM_SET_POWER_ON Failed\n\r")));
}
if (m_eOutputInterface == OUTPUT_IF_RGB)
{
#if ((SMDK6410_LCD_MODULE != LCD_MODULE_LTE480) \
|| (SMDK6410_LCD_MODULE != LCD_MODULE_LTV350) \
|| (SMDK6410_LCD_MODULE != LCD_MODULE_LTP700)) // In case of LTE480 Module
// Initialize LCD Module
LDI_initialize_LCD_module();
#endif
// Backlight On
DevicePowerNotify(_T("BKL1:"),(_CEDEVICE_POWER_STATE)D0, POWER_NAME);
}
LeaveCriticalSection(&m_csDevice);
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --%s()\n\r"), _T(__FUNCTION__)));
return TRUE;
}
BOOL
S3C6410Disp::DevPowerOff(void)
{
DWORD dwBytes;
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++%s()\n\r"), _T(__FUNCTION__)));
EnterCriticalSection(&m_csDevice);
if (m_eOutputInterface == OUTPUT_IF_RGB)
{
// Backlight Off
DevicePowerNotify(_T("BKL1:"),(_CEDEVICE_POWER_STATE)D4, POWER_NAME);
}
#if ((SMDK6410_LCD_MODULE == LCD_MODULE_LTS222) || (SMDK6410_LCD_MODULE == LCD_MODULE_LTV350) \
|| (SMDK6410_LCD_MODULE == LCD_MODULE_LTP700))
// Power Off Video Driver
// All of HW State will be restored by Video Driver
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_PM_SET_POWER_OFF, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevPowerOff() : IOCTL_SVE_PM_SET_POWER_OFF Failed : m_hVideoDrv:0x%x\n\r"),m_hVideoDrv));
}
// Deinitialize LCD Module
LDI_deinitialize_LCD_module();
#else // In case of LTE480 Module
// Deinitialize LCD Module
LDI_deinitialize_LCD_module();
// Power Off Video Driver
// All of HW State will be restored by Video Driver
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_PM_SET_POWER_OFF, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevPowerOff() : IOCTL_SVE_PM_SET_POWER_OFF Failed : m_hVideoDrv:0x%x\n\r"),m_hVideoDrv));
}
#endif
LeaveCriticalSection(&m_csDevice);
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --%s()\n\r"), _T(__FUNCTION__)));
return TRUE;
}
BOOL
S3C6410Disp::DevChangeOutputInterface(OUTPUT_INTERFACE eNewOutputIF)
{
BOOL bRet = TRUE;
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++%s(%d)\n\r"), _T(__FUNCTION__), eNewOutputIF));
EnterCriticalSection(&m_csDevice);
if (m_eOutputInterface == eNewOutputIF)
{
RETAILMSG(DISP_ZONE_TEMP, (_T("[DISPDRV:INF] DevChangeOutputInterface(%d) : Same Inteface... Not Changed\n\r"), eNewOutputIF));
bRet = FALSE;
goto CleanUp;
}
if (eNewOutputIF == OUTPUT_IF_TV)
{
// Check TV Scaler Limitation
if (m_dwDeviceScreenWidth > 800)
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevChangeOutputInterface() : For TVout, Screen width[%d] should be lower than 800 pixel\n\r"), m_dwDeviceScreenWidth));
bRet = FALSE;
goto CleanUp;
}
// Request Video Driver HW Resource
if (!TVOutAllocResource())
{
RETAILMSG(DISP_ZONE_TEMP, (_T("[DISPDRV:INF] DevChangeOutputInterface(%d) : TVOutAllocResource() Failed\n\r"), eNewOutputIF));
bRet = FALSE;
goto CleanUp;
}
}
//---------------------------
// Disable Old Output Interface
//---------------------------
if (m_eOutputInterface == OUTPUT_IF_RGB) // Previous interface is RGB I/F
{
if (m_eTVDMAMode != TV_DMA_DISABLE)
{
DevOutputDisableTVDMA();
m_eTVDMAMode = TV_DMA_DISABLE;
RETAILMSG(DISP_ZONE_TEMP, (_T("[DISPDRV:INF] DevChangeOutputInterface() : TV DMA is disabled for TV Out\n\r")));
}
DevOutputDisableRGBIF();
}
else // Previous interface is TV Out
{
DevOutputDisableTV();
}
//---------------------------
// Update Output Interface State
//---------------------------
m_eOutputInterface = eNewOutputIF;
if (m_eOutputInterface == OUTPUT_IF_RGB)
{
// Release Video Driver HW Resource
TVOutReleaseResource();
}
//---------------------------
// Enable New Output Interface
//---------------------------
RETAILMSG(DISP_ZONE_TEMP, (_T("[DISPDRV:INF] Enable New Output Interface(%d)\n\r"), m_eOutputInterface));
if (m_eOutputInterface == OUTPUT_IF_RGB)
{
DevOutputEnableRGBIF();
}
else if (m_eOutputInterface == OUTPUT_IF_TV)
{
DevOutputEnableTV();
}
CleanUp:
LeaveCriticalSection(&m_csDevice);
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --%s()\n\r"), _T(__FUNCTION__)));
return bRet;
}
void
S3C6410Disp::DevOutputEnableRGBIF(void)
{
DWORD dwBytes;
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++%s()\n\r"), _T(__FUNCTION__)));
// Display initialize to RGB I/F
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_OUTPUT_RGBIF, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : IOCTL_SVE_FIMD_SET_OUTPUT_RGBIF Failed\n\r")));
}
switch(m_pModeEx->ePixelFormat)
{
case ddgpePixelFormat_565:
{
SVEARG_FIMD_WIN_MODE tParam;
tParam.dwWinMode = PRIMARY_WINDOW_MODE;
tParam.dwBPP = DISP_16BPP_565;
tParam.dwWidth = m_dwDeviceScreenWidth;
tParam.dwHeight = m_dwDeviceScreenHeight;
tParam.dwOffsetX = 0;
tParam.dwOffsetY = 0;
// Primary Window Initialize
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_MODE, &tParam, sizeof(SVEARG_FIMD_WIN_MODE), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : IOCTL_SVE_FIMD_SET_WINDOW_MODE Failed\n\r")));
}
break;
}
//case ddgpePixelFormat_8880: // FIMD can not support Packed RGB888
case ddgpePixelFormat_8888:
{
SVEARG_FIMD_WIN_MODE tParam;
tParam.dwWinMode = PRIMARY_WINDOW_MODE;
tParam.dwBPP = DISP_24BPP_888;
tParam.dwWidth = m_dwDeviceScreenWidth;
tParam.dwHeight = m_dwDeviceScreenHeight;
tParam.dwOffsetX = 0;
tParam.dwOffsetY = 0;
// Primary Window Initialize
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_MODE, &tParam, sizeof(SVEARG_FIMD_WIN_MODE), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : IOCTL_SVE_FIMD_SET_WINDOW_MODE Failed\n\r")));
}
break;
}
default:
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : Unknown PixelFormat %d \n\r"), m_pModeEx->ePixelFormat));
break;
}
// Set Primary Window Framebuffer
SVEARG_FIMD_WIN_FRAMEBUFFER tParamFB;
tParamFB.dwWinNum = PRIMARY_WINDOW;
tParamFB.dwFrameBuffer = m_VideoMemoryPhysicalBase;
tParamFB.bWaitForVSync = FALSE;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER, &tParamFB, sizeof(SVEARG_FIMD_WIN_FRAMEBUFFER), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER Failed\n\r")));
}
// Primary Window Enable
DWORD dwParam;
dwParam = PRIMARY_WINDOW;
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_ENABLE, &dwParam, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : IOCTL_SVE_FIMD_SET_WINDOW_ENABLE Failed\n\r")));
}
// Initialize LCD Module
#if (SMDK6410_LCD_MODULE == LCD_MODULE_LTM030DK)
LDI_LTM030DK_port_initialize();
LDI_LTM030DK_SetALC();
LDI_LTM030DK_RGB_initialize();
#else
LDI_initialize_LCD_module();
#endif
// Video Output Enable
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_OUTPUT_ENABLE, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputEnableRGBIF() : IOCTL_SVE_LCD_SET_MODULE_ENABLE Failed\n\r")));
}
// Enable Overlay Window and Blending
DevRecoverOverlay();
// Backlight On
DevicePowerNotify(_T("BKL1:"),(_CEDEVICE_POWER_STATE)D0, POWER_NAME);
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --%s()\n\r"), _T(__FUNCTION__)));
}
void
S3C6410Disp::DevOutputDisableRGBIF(void)
{
DWORD dwBytes;
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] ++%s()\n\r"), _T(__FUNCTION__)));
// Backlight Off
DevicePowerNotify(_T("BKL1:"),(_CEDEVICE_POWER_STATE)D4, POWER_NAME);
// Disable Overlay Window
DevOverlayDisable();
#if ((SMDK6410_LCD_MODULE == LCD_MODULE_LTS222) || (SMDK6410_LCD_MODULE == LCD_MODULE_LTV350) \
|| (SMDK6410_LCD_MODULE == LCD_MODULE_LTP700))
// Video Output Disable
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_OUTPUT_DISABLE, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputDisableRGBIF() : IOCTL_SVE_FIMD_SET_OUTPUT_DISABLE Failed\n\r")));
}
// Deinitialize LCD Module
LDI_deinitialize_LCD_module();
#else // In case of LTE480 Module
// Deinitialize LCD Module
LDI_deinitialize_LCD_module();
// Video Output Disable
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_SET_OUTPUT_DISABLE, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevOutputDisableRGBIF() : IOCTL_SVE_FIMD_SET_OUTPUT_DISABLE Failed\n\r")));
}
#endif
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --%s()\n\r"), _T(__FUNCTION__)));
RETAILMSG(DISP_ZONE_ENTER, (_T("[DISPDRV] --S3C6410Disp::DevOutputDisableRGBIF()\n\r")));
}
BOOL
S3C6410Disp::DevWaitForVerticalBlank(void)
{
BOOL bRet = TRUE;
DWORD dwBytes;
// Wait for Frame Interrupt
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_WAIT_FRAME_INTERRUPT, NULL, 0, NULL, 0, &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevGetVerticalStatus() : IOCTL_SVE_FIMD_WAIT_FRAME_INTERRUPT Failed\n\r")));
bRet = FALSE;
}
return bRet;
}
int
S3C6410Disp::DevGetVerticalStatus(void)
{
SVEARG_FIMD_OUTPUT_STAT tParam;
DWORD dwBytes;
// Get Output Status
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_GET_OUTPUT_STATUS, NULL, 0, &tParam, sizeof(SVEARG_FIMD_OUTPUT_STAT), &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevGetVerticalStatus() : IOCTL_SVE_FIMD_GET_OUTPUT_STATUS Failed\n\r")));
}
return (int)tParam.dwVerticalStatus;
}
DWORD
S3C6410Disp::DevGetScanLine(void)
{
SVEARG_FIMD_OUTPUT_STAT tParam;
DWORD dwBytes;
// Get Output Status
if ( !DeviceIoControl(m_hVideoDrv, IOCTL_SVE_FIMD_GET_OUTPUT_STATUS, NULL, 0, &tParam, sizeof(SVEARG_FIMD_OUTPUT_STAT), &dwBytes, NULL) )
{
RETAILMSG(DISP_ZONE_ERROR, (_T("[DISPDRV:ERR] DevGetScanLine() : IOCTL_SVE_FIMD_GET_OUTPUT_STATUS Failed\n\r")));
}
return tParam.dwLineCnt;
}
// this routine converts a string into a GUID and returns TRUE if the
// conversion was successful.
BOOL
ConvertStringToGuid (LPCTSTR pszGuid, GUID *pGuid)
{
UINT Data4[8];
int Count;
BOOL fOk = FALSE;
TCHAR *pszGuidFormat = _T("{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}");
DEBUGCHK(pGuid != NULL && pszGuid != NULL);
__try
{
if (_stscanf(pszGuid, pszGuidFormat, &pGuid->Data1,
&pGuid->Data2, &pGuid->Data3, &Data4[0], &Data4[1], &Data4[2], &Data4[3],
&Data4[4], &Data4[5], &Data4[6], &Data4[7]) == 11)
{
for(Count = 0; Count < (sizeof(Data4) / sizeof(Data4[0])); Count++)
{
pGuid->Data4[Count] = (UCHAR) Data4[Count];
}
}
fOk = TRUE;
}
__except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
DEBUGMSG(DISP_ZONE_ERROR, (TEXT("%s: Exception occured\n")));
fOk=FALSE;
}
return fOk;
}
// This routine notifies the OS that we support the
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?