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

📄 mqext.ccp

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 CCP
📖 第 1 页 / 共 2 页
字号:
	
	if(ulAction & DSP_MODE_CHANGE)	// Display Mode changed
	{
		bMIUClkLow = FALSE;				//HSU
		switch(pDmode->DspType)
		{
			default:
			case	SIM_TYPE:

				// In Symoustance Mode, If LCD off, CRT must be ON.
				// (d) ==> (c)
				
				// Turn off both GC1 and GC2 display first
				pMQGC->HW_Disable_LCD(GC2);
				pMQGC->HW_Disable_CRT(GC1);
				
				// Load the timing parameters for LCD and CRT in GC1	
				if(ulAction & DSP_LCD_ON)
				{
					if ( !(ulAction & DSP_CRT_ON) )		//HSU
						bMIUClkLow = TRUE;			//HSU
					pMQGC->HW_LoadLCDTiming(GC1, pDmode->wLCDViewportX, pDmode->wLCDViewportY,RELOAD_TIMING);
					pMQGC->HW_Enable_LCD(GC1);
					//HSU - begin
					pMQGC->HW_Disable_LCD(GC1);
					pMQGC->HW_Enable_LCD(GC1);
					//HSU - end
					
				}else{
					pMQGC->HW_LoadCRTTiming(GC1,pDmode->wCRTViewportX, pDmode->wCRTViewportY,
												pDmode->wCRTRefreshRate);
				}	
				
				if(ulAction & DSP_CRT_ON)
						pMQGC->HW_Enable_CRT(GC1);
						
				break;
			case	QV_SAME_IMG:

				// Turn off both GC1 and GC2 display first
				pMQGC->HW_Disable_LCD(GC1);
				pMQGC->HW_Disable_CRT(GC1);
				
				pMQGC->HW_LoadLCDTiming(GC2, pDmode->wLCDViewportX, pDmode->wLCDViewportY,RELOAD_TIMING);

				pMQGC->HW_LoadCRTTiming(GC1,pDmode->wCRTViewportX, pDmode->wCRTViewportY,
												pDmode->wCRTRefreshRate);
				
				pMQGC->HW_Enable_LCD(GC2);
				pMQGC->HW_Enable_CRT(GC1);
				

				break;
			case	QV_LG_DTP:
				break;
		}
	}else{
		
		switch(pDmode->DspType)
		{
			default:

			//				LCD	CRT
			//========================
			//	(a)		GC1	GC1	
			//	(b)		GC1
			//	(c)				GC1
			//========================
			//	(d)		GC2	GC1	
			//========================
			//	(e)		GC2	GC1	
			//========================
			
			case	SIM_TYPE:
#if 0
				if(ulAction & DSP_LCD_VIEWPORT_CHANGE)
						pMQGC->HW_LoadLCDTiming(GC1, pDmode->wLCDViewportX, pDmode->wLCDViewportY,NO_RELOAD_TIMING);
						
				if(ulAction & DSP_CRT_OFF)
					pMQGC->HW_Disable_CRT(GC1);
				else
					pMQGC->HW_Enable_CRT(GC1);
					
				if(ulAction & DSP_LCD_OFF)
					pMQGC->HW_Disable_LCD(GC1);
				else
					pMQGC->HW_Enable_LCD(GC1);
					
#endif
				if(ulAction & (DSP_LCD_ON | DSP_LCD_VIEWPORT_CHANGE))
				{
					if ( !(ulAction & DSP_CRT_ON) )		//HSU
						bMIUClkLow = TRUE;			//HSU
					pMQGC->HW_LoadLCDTiming(GC1, pDmode->wLCDViewportX, pDmode->wLCDViewportY,RELOAD_TIMING);
					pMQGC->HW_Enable_LCD(GC1);
					//HSU - begin
					pMQGC->HW_Disable_LCD(GC1);
					pMQGC->HW_Enable_LCD(GC1);
					//HSU - end
				}else{
					pMQGC->HW_Disable_LCD(GC1);
					
					pMQGC->HW_LoadCRTTiming(GC1,pDmode->wCRTViewportX, pDmode->wCRTViewportY,
												pDmode->wCRTRefreshRate);
				}	
				
				if(ulAction & DSP_CRT_ON)
					pMQGC->HW_Enable_CRT(GC1);
				else
					pMQGC->HW_Disable_CRT(GC1);
						
				break;
			case	QV_SAME_IMG:
				if(ulAction & DSP_LCD_VIEWPORT_CHANGE)
				{
					pMQGC->HW_LoadLCDTiming(GC2, pDmode->wLCDViewportX, pDmode->wLCDViewportY,NO_RELOAD_TIMING);
					pMQGC->HW_Enable_LCD(GC2);
				}

				if(ulAction & (DSP_CRT_VIEWPORT_CHANGE |DSP_CRT_REFRESHRATE_CHANGE))
				{
					pMQGC->HW_Disable_CRT(GC1);
					pMQGC->HW_LoadCRTTiming(GC1,pDmode->wCRTViewportX, pDmode->wCRTViewportY,
												pDmode->wCRTRefreshRate);
					pMQGC->HW_Enable_CRT(GC1);
				}
				break;
			case	QV_LG_DTP:
				if(ulAction & DSP_LCD_VIEWPORT_CHANGE)
				{
					pMQGC->HW_LoadLCDTiming(GC2, pDmode->wLCDViewportX, pDmode->wLCDViewportY,NO_RELOAD_TIMING);
					pMQGC->HW_Enable_LCD(GC2);
				}

				if(ulAction & (DSP_CRT_VIEWPORT_CHANGE | DSP_CRT_REFRESHRATE_CHANGE) )
				{
					pMQGC->HW_LoadCRTTiming(GC1,pDmode->wCRTViewportX, pDmode->wCRTViewportY,
												pDmode->wCRTRefreshRate);
					pMQGC->HW_Enable_CRT(GC1);
				}

				if(ulAction & DSP_ORG_CHANGE)
					pMQGC->HW_SET_ORG(pDmode->fQVLGDTP_LCD_First);

				break;
		}
	}

	pMQGC->SetCursorData((int)pDmode->DspType);

#endif
	return ESC_SUCCESS;

}


// Assumption (default)
// PWM0: contrast control
// PWM1: brightness (backlite) control
//
// if SWAP_PWM01 is set in registry flag
// PWM0: brightness (backlite)
// PWM1: contrast
//
//#ifdef MQ_CPP
BOOL	MQGC::OemSetBacklight(int level)
{
#ifdef MQ_CPP
	ULONG	ulTemp;
	
	ulTemp = fpREAD(PWM_CONTROL);
	if (m_nMQFlag & SWAP_PWM01)
		ulTemp = ((ulTemp & PWM0_DC_MASK) | (level << 8));
	else
		ulTemp = ((ulTemp & PWM1_DC_MASK) | ((ULONG)level << 24));
	fpREG(PWM_CONTROL, ulTemp);
#endif
	return TRUE;
}

BOOL	MQGC::OemSetContrast(int level)
{
#ifdef MQ_CPP
	ULONG	ulTemp;
	
	ulTemp = fpREAD(PWM_CONTROL);
	if (m_nMQFlag & SWAP_PWM01)
		ulTemp = ((ulTemp & PWM1_DC_MASK) | ((ULONG)level << 24));
	else
		ulTemp = ((ulTemp & PWM0_DC_MASK) | (level << 8));
	fpREG(PWM_CONTROL, ulTemp);
	
	
#endif
	return TRUE;
}

BOOL	MQGC::OemSetupAltWin(void)
{
#ifdef MQ_CPP
	ULONG	ulTemp;
	
	if (m_nMQFlag & (LARGE_DESKTOP|SAME_IMAGE))
	{
		ulTemp = gc2READ(GC2_CONTROL);
		ulTemp |= AIM_ENABLE;
		gc2REG(GC2_CONTROL,ulTemp);
		
		ulTemp = gc1READ(GC1_CONTROL) & GC_DISABLE;
  		gc1REG(GC1_CONTROL, ulTemp);
	}
	else
	{
		ulTemp = gc1READ(GC1_CONTROL);
		ulTemp |= AIM_ENABLE;
		gc1REG(GC1_CONTROL,ulTemp);
	}
#endif
	return TRUE;
}

BOOL	MQGC::OemDisableAltWin(void)
{
#ifdef MQ_CPP
	ULONG	ulTemp;
	
	if (m_nMQFlag & (LARGE_DESKTOP|SAME_IMAGE))
	{
		ulTemp = gc2READ(GC2_CONTROL);
		ulTemp &= (~AIM_ENABLE);
		gc2REG(GC2_CONTROL,ulTemp);
		
		ulTemp = gc1READ(GC1_CONTROL) | GC_ENABLE;
  		gc1REG(GC1_CONTROL, ulTemp);
	}
	else
	{
		ulTemp = gc1READ(GC1_CONTROL);
		ulTemp &= (~AIM_ENABLE);
		gc1REG(GC1_CONTROL,ulTemp);
	}
#endif
	return TRUE;
}

BOOL	MQGC::OemEnterGhostMode(ULONG flag)
{
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("--> OemEnterGhostMode\r\n")));
	pMQGC->CursorData.ulFlag |= GHOST_MODE_ACTIVE;
	return TRUE;
}

BOOL	MQGC::OemLeaveGhostMode(void)
{
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("--> OemLeaveGhostMode\r\n")));
	pMQGC->CursorData.ulFlag &= (~GHOST_MODE_ACTIVE);
	if (usBPP == 0)
	{
		DEBUGMSG(GPE_ZONE_INIT, (TEXT("RESTORE_PALETTE 8BPP\r\n")));
		pMQGC->SetPalette(_rgbIdentity256, 0, 256);
	}
	return TRUE;
}

#ifdef SUPPORT_DDC
BOOL	MQGC::OemGetEDID(PVOID pvOut)
{
	BOOL bResult = TRUE;
	HKEY		hMQRegKey;
	ULONG		ulStatus;
	DWORD	Disp;
	
#ifdef	SDB_GPIO
 	return FALSE;
#endif 
 	 
	ulStatus = RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Drivers\\Display\\MQ100"), 0, NULL,0, KEY_ALL_ACCESS,NULL,&hMQRegKey,&Disp);

	if(ulStatus != ERROR_SUCCESS)
	{
		 return FALSE;
	}
	
	if(DDCTest())
	{

		//***********************************
		//	EDID  Data 
		//***********************************
	
		if (ERROR_SUCCESS != RegSetValueEx (hMQRegKey, (LPCTSTR)TEXT("EDID"), (DWORD)NULL,
										REG_BINARY, (PBYTE)&(EDID_Buffer),sizeof(EDID_DATA))) 
		{
			bResult = FALSE;
		}
	
	}else{ // read EDID failed	
	
		RegDeleteValue(hMQRegKey, (LPCWSTR)TEXT("EDID"));
		bResult = FALSE;
	}
	RegCloseKey(hMQRegKey);
	return bResult;
}
#endif // SUPPORT_DDC

BOOL	MQGC::OemEnterPowerSave(int level)
{
	if(level == 0)
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("OemExitPowerSave!\r\n")));
  	else
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("OemEnterPowerSave!\r\n")));
#ifdef	MQ_CPP
	// Enter intended state
	//
	pciREG(PCI_PM_CNTL_STATUS, level);
	
	// make sure it's settled in intended state
	//
	Sleep(50);
	if (level == 0)
		InDxState(level);
#endif

	return TRUE;
}

void	MQGC::HW_SET_ORG(BOOL LCD_First)
{
#ifdef	MQ_CPP
	ULONG ulTmp;
	BOOL	bswitch=FALSE;

	// Adjust starting address
	//
	if (pMQGC->CursorData.usCursorOn == AT_00_BY_GC2)
	{
		if (!LCD_First) // switch to CRT_First
		{
			pMQGC->CursorData.usCursorOn = AT_00_BY_GC1;
			bswitch = TRUE;
		}
		
	}else{ // Current CRT first
	
		if (LCD_First)
		{
			pMQGC->CursorData.usCursorOn = AT_00_BY_GC2;
			bswitch = TRUE;
		}
	}
	
	if(bswitch)
	{	
		ulTmp = m_nIW1StartAddr;
		m_nIW1StartAddr 			= m_nIW2StartAddr;
		m_nIW2StartAddr 			= ulTmp;
			
      gc1REG(IW1_START_ADDR, m_nIW1StartAddr);
      gc2REG(IW2_START_ADDR, m_nIW2StartAddr);
	}
#endif
	if(LCD_First)
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Set LCD First\r\n")));
	else
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Set CRT First\r\n")));
}

void	MQGC::SetCursorData(int DspType)
{
	switch (DspType)
	{
		case SIM_TYPE:
			pMQGC->CursorData.ulFlag &= (~USE_2GCs_MASK);
			break;
		
		case QV_SAME_IMG:
			pMQGC->CursorData.ulFlag &= (~USE_2GCs_MASK);
			pMQGC->CursorData.ulFlag |= SAME_IMAGE;
			break;
			
		case QV_LG_DTP:
			pMQGC->CursorData.ulFlag &= (~USE_2GCs_MASK);
			pMQGC->CursorData.ulFlag |= LARGE_DESKTOP;
			break;
	}
	return;
}	
#endif ////////////////////////////////////////////////////////// DDIDUMP

//HW access routines
void	MQGC::HW_LoadLCDTiming(WORD GC, WORD wLCDViewportX, WORD wLCDViewportY, USHORT flag)
{
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Load LCD Timing to GC%d: X=%d, Y=%d flag=%d \r\n"),GC, wLCDViewportX,wLCDViewportY,flag));
#ifdef MQ_CPP
	if(GC == GC2)
		flag |= LCD_BY_GC2;	
	
	SetupLCDTiming(wLCDViewportX,wLCDViewportY,60,flag);
#endif
}

void	MQGC::HW_LoadCRTTiming(WORD GC, WORD wCRTViewportX, WORD wCRTViewportY, WORD wRefreshRate)
{
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Load CRT Timing to GC%d: X=%d, Y=%d, ref=%d\r\n"),GC,wCRTViewportX,wCRTViewportY,wRefreshRate));
#ifdef MQ_CPP
	SetupCRTTiming(wCRTViewportX,wCRTViewportY,wRefreshRate,GC);
#endif
}

void	MQGC::HW_Enable_LCD(WORD GC)
{
#ifdef	MQ_CPP
	ULONG	ulTemp, ulFPTemp;

	ulFPTemp = fpREAD(FP_CONTROL) & FPI_BY_GCx_MASK;
	// Enable GC1 first
	//
	
	if (GC == GC1)
	{
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Enable LCD output at GC1\r\n")));
		ulTemp = gc1READ(GC1_CONTROL);
		if(!(ulTemp & GC_ENABLE))
		{ 
			ulTemp |= GC_ENABLE;
	  		gc1REG(GC1_CONTROL, ulTemp);
		}
		ulFPTemp |= FPI_BY_GC1;
	}
	else
	if (GC == GC2)
	{
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Enable LCD output at GC2\r\n")));
		ulTemp = gc2READ(GC2_CONTROL);
		if(!(ulTemp & GC_ENABLE))
		{ 
			ulTemp |= GC_ENABLE;
	  		gc2REG(GC2_CONTROL, ulTemp);
		}
		ulFPTemp |= FPI_BY_GC2;
	}
	
	// Enable FPI next
	//
  	fpREG(FP_CONTROL, ulFPTemp);

	// Need to wait until power seq is off
	//
	PowerSeqOff();
	
#endif
}

void	MQGC::HW_Disable_LCD(WORD GC)
{
#ifdef	MQ_CPP

	ULONG	ulTemp;

	
	// Disable FPI first - enough if at slmul mode ...
	//
	ulTemp = fpREAD(FP_CONTROL) & FPI_BY_GCx_MASK;
	fpREG(FP_CONTROL, ulTemp);
	
	ulTemp = gc1READ(GC1_CRT_CONTROL)  & (~CRT_BY_GCxMASK); 
	if (GC == GC1)
	{
		// Disable GC1 next
		//
		if(!(ulTemp == CRT_BY_GC1))
		{ 
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Disable LCD output at GC1\r\n")));
			ulTemp = gc1READ(GC1_CONTROL) & GC_DISABLE;
  			gc1REG(GC1_CONTROL, ulTemp);
		}
	}
	else
	{
		// Disable GC2 next
		//
		if(!(ulTemp == CRT_BY_GC2))
		{ 
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Disable LCD output at GC2\r\n")));
			ulTemp = gc2READ(GC2_CONTROL) & GC_DISABLE;
  			gc2REG(GC2_CONTROL, ulTemp);
		}
	}
	// Need to wait until power seq is off
	//
	PowerSeqOff();
#endif
}

void	MQGC::HW_Enable_CRT(WORD GC)
{
#ifdef	MQ_CPP

	ULONG	ulTemp;

	if (GC == GC1)
	{
		ulTemp = gc1READ(GC1_CONTROL);
		if(!(ulTemp & GC_ENABLE))
		{ 
			ulTemp |= GC_ENABLE;
	  		gc1REG(GC1_CONTROL, ulTemp);
		}
		
		ulTemp = gc1READ(GC1_CRT_CONTROL) & CRT_BY_GCxMASK;
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Read GC1_CRT_CONTROL=%08x\r\n"), ulTemp));
		ulTemp |= CRT_BY_GC1;
  		gc1REG(GC1_CRT_CONTROL, ulTemp);
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Write GC1_CRT_CONTROL=%08x\r\n"), ulTemp));
	}else{
		ulTemp = gc1READ(GC2_CONTROL);
		if(!(ulTemp & GC_ENABLE))
		{ 
			ulTemp |= GC_ENABLE;
	  		gc2REG(GC2_CONTROL, ulTemp);
		}
		
		ulTemp = gc1READ(GC1_CRT_CONTROL) & CRT_BY_GCxMASK;
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Read GC1_CRT_CONTROL=%08x\r\n"), ulTemp));
		ulTemp |= CRT_BY_GC2;
  		gc1REG(GC1_CRT_CONTROL, ulTemp);
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Write GC1_CRT_CONTROL=%08x\r\n"), ulTemp));
	}	
#endif
		DEBUGMSG(GPE_ZONE_INIT,(TEXT("Enable CRT output at GC%d\r\n"), GC));
}

void	MQGC::HW_Disable_CRT(WORD GC)
{
#ifdef	MQ_CPP

	ULONG	ulTemp;
	BOOL	bChange = FALSE;	//HSU

	ulTemp = gc1READ(GC1_CRT_CONTROL);
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Read GC1_CRT_CONTROL=%08x\r\n"), ulTemp));
	ulTemp &= CRT_BY_GCxMASK; // Disable CRT
  	gc1REG(GC1_CRT_CONTROL, ulTemp);
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Write GC1_CRT_CONTROL=%08x\r\n"), ulTemp));
	
	ulTemp = fpREAD(FP_CONTROL)  & (~FPI_BY_GCx_MASK); 
	if (GC == GC1)
	{
		// Disable GC1 next
		//
		if(!(ulTemp == FPI_BY_GC1))
		{ 
			ulTemp = gc1READ(GC1_CONTROL) & GC_DISABLE;
  			gc1REG(GC1_CONTROL, ulTemp);
		}
	}
	else
	if (GC == GC2)
	{
		// Disable GC2 next
		//
		if(!(ulTemp == FPI_BY_GC2))
		{ 
			ulTemp = gc2READ(GC2_CONTROL) & GC_DISABLE;
  			gc2REG(GC2_CONTROL, ulTemp);
		}
	}
	
#if 0	//def MIPS_NEC
	//HSU - begin Turn off corresponding PLL too
	if ( bChange )
	{
		//ulTemp contains whatever GC ctrl that was turned off
		//make sure we don't turn off PLL use by GE
		ULONG	ulPMMisc, ulGE;
   		ulPMMisc = pmuREAD(PM_MISC);
		ulGE = ulPMMisc &  GE_BY_MASK;
		ulTemp &= GxRCLK_PLL_MASK;
		if ( GxRCLK_PLL2 == ulTemp && ulGE != GE_BY_PLL2 )
			ulPMMisc &= ~PLL2_ENABLE;
		else if ( GxRCLK_PLL3 == ulTemp && ulGE != GE_BY_PLL3 )
			ulPMMisc &= ~PLL3_ENABLE;
		pmuREG(PM_MISC, ulPMMisc);
	}
	//HSU - end
#endif	//MIPS_NEC
#endif
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Disable CRT output at GC%d\r\n"), GC));
}
//#endif

⌨️ 快捷键说明

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