亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ddc.ccp

?? WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
?? CCP
?? 第 1 頁 / 共 2 頁
字號:
/* $Header:   U:/archive/ce/mq200/driver/mq200drv/ext/ddc.ccv   1.2   May 15 1999 09:31:02   tzyywei  $
 * 
 * ========================================================================
 * Copyright (c) 1999 by MediaQ, Incorporated.
 * All Rights Reserved.
 *
 * Confidential and Proprietary to MediaQ, Incorporated.
 * ========================================================================
 *
 * $Log:   U:/archive/ce/mq200/driver/mq200drv/ext/ddc.ccv  $
*
*   Rev 1.2   May 15 1999 09:31:02   tzyywei
*change OutputDebugStringW to RETAILMSG
*
*   Rev 1.1   Mar 30 1999 15:02:52   tzyywei
*update for JP demo.
*using GPIO to read HW switch for different mode setting.
*
*   Rev 1.0   Feb 16 1999 14:39:40   yuhuan
*Initial revision.
 */
#ifdef	MQ_CPP
///#include	"mqcfg.h"
#include	"..\mqhw2.h"										  
#else
#include	<windows.h>

#endif

#include "ddc.h"

#define	OLD_DEVICE	1

EDID_DATA	EDID_Buffer;

#define	ReportDDCcaps	0
#define	ReadEDID			1
#define	ReadVDIF			2

#define	Fun_Read						0x00
#define	Fun_No_Read					0x01
#define	Fun_No_VerifyCheckSum	0x02
//#define	Fun_VerifyCheckSum	0x03
///temp data
unsigned char *m_pMMIO;
//**************************************
// Local function prototype
//**************************************
void I2CNackWrite();
void I2CAckWrite();
BOOL I2CDataRequest(BYTE	bStartAddr, BYTE *pBuffer, BYTE bLength, BYTE bAction);
BOOL I2CByteWrite(BYTE	bData);
BOOL I2CBitWrite(BOOL BitData);
BYTE I2CByteRead();
BOOL I2CBitRead();
/// BOOL I2COemCheckSCLHigh();
/// BOOL I2COemInSDA();
/// void I2COemOut(ULONG SCL,ULONG SDA);
BOOL I2COut(ULONG SCL, ULONG SDA);
BOOL I2CStopService();
BOOL I2CStartService();
void I2CSetup();
BOOL ConfigChipReadVDIF(UINT	iBlockNum, BYTE *pBuffer);
BOOL ConfigChipReadEDID(BYTE *pBuffer);
BOOL ConfigChipDDCCaps();
BOOL DDCCore(UINT	ulFunction, UINT iBlockNum, BYTE *pBuffer);
void	D2_DELAY();
void	D1_DELAY();
void	Wait_20_30ns();


UINT	WAIT_COUNT=200;
UINT   D1_TIME= 53;
UINT   D2_TIME= 210;
#if 0
//****************************************************************************
//	Test
//****************************************************************************
ULONG	ulLoop = 100;
ULONG ulWait = 275;
BOOL DDCTest();
void DoDDCTest(ULONG ulFun)
{
	BYTE	bData;
	BYTE	pBuffer[128];
	int i;
	ULONG setvalue = 0;
	int	value=0;

	switch(ulFun)
	{
		 default:
		 	break;
		 case 0:
////			DEBUGMSG(GPE_ZONE_INIT,(TEXT("DDCTest:\r\n")));
		 	DDCTest();
			break;
		 case 1:
////			DEBUGMSG(GPE_ZONE_INIT,(TEXT("SCL=0, SDA=1:\r\n")));
			//I2COemOut(ULONG SCL,ULONG SDA)
			pMQGC->I2COemOut(0L ,1L);
			break;
		 case 2:
////			DEBUGMSG(GPE_ZONE_INIT,(TEXT("SCL=1, SDA=0:\r\n")));
			//I2COemOut(ULONG SCL,ULONG SDA)
			pMQGC->I2COemOut(1L ,0L);
			break;
		 case 3:
////			DEBUGMSG(GPE_ZONE_INIT,(TEXT("SCL=1, SDA=1:\r\n")));
			//I2COemOut(ULONG SCL,ULONG SDA)
			pMQGC->I2COemOut(1L ,1L);
			break;
		 case 4:
////			DEBUGMSG(GPE_ZONE_INIT,(TEXT("SCL=0, SDA=0:\r\n")));
			//I2COemOut(ULONG SCL,ULONG SDA)
			pMQGC->I2COemOut(0L ,0L);
			break;
		 case 5:
////			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Loop SCL=1, SDA=0,then SCL=1, SDA=1:\r\n")));
			//I2COemOut(ULONG SCL,ULONG SDA)
			for(i =0; i<(int)ulLoop; ++i)
			{
				pMQGC->I2COemOut(1L ,0L);
				Wait_20_30ns();
//				for(j=0; j<(int)ulWait; ++j)
//				{}
				pMQGC->I2COemOut(1L ,1L);
				Wait_20_30ns();
//				for(j=0; j<(int)ulWait; ++j)
//				{}
			}
			break;
		 case 6:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Loop SCL=1, SDA=0,then SCL=1, SDA=1: cycle D1_TIME\r\n")));
			for(i =0; i<(int)ulLoop; ++i)
			{
				pMQGC->I2COemOut(1L ,0L);
				D1_DELAY();
				pMQGC->I2COemOut(1L ,1L);
				D1_DELAY();
			}
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Loop SCL=1, SDA=0,then SCL=1, SDA=1: cycle D2_TIME\r\n")));
			for(i =0; i<(int)ulLoop; ++i)
			{
				pMQGC->I2COemOut(1L ,0L);
				D2_DELAY();
				pMQGC->I2COemOut(1L ,1L);
				D2_DELAY();
			}
			break;
		case 7:
			RETAIL_MSG(1,(TEXT("Loop I2CStartServeice() function\r\n")));
			for(i =0; i<(int)ulLoop; ++i)
			{
				I2CStartService();
			}
			break;
		case 8:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Loop I2CStopService() function\r\n")));
			for(i =0; i<(int)ulLoop; ++i)
			{
				I2CStopService();
			}
			break;
		case 9:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("I2CBitRead \r\n")));
			I2CBitRead();
			break;
		case 10:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("I2COemInSDA \r\n")));
			pMQGC->I2COemInSDA();
			break;
		case 11:
			I2CSetup();													 	// Ensure monitor is in DDC2 mode
			break;
		case 12:
			I2CDataRequest(0x00, pBuffer, 0x00, Fun_No_Read);	// setup address for display
			break;
		case 13:

		I2CSetup();													 	// Ensure monitor is in DDC2 mode
		I2CDataRequest(0x00, pBuffer, 0x00, Fun_No_Read);	// setup address for display
		bData = I2CByteRead();
		I2CAckWrite();													// Send ACKnowledge
#if 0
		if(bData)
		{	// DDC Monitor Not Attached
			I2CStopService();
			return FALSE;
		}
		bData = I2CByteRead();
		I2CNackWrite();											// Send Not Acknowledge

		if(bData != 0xFF)
		{	// DDC Monitor Not Attached
			I2CStopService();
			return FALSE;
		}

		I2CStopService();
#endif
		break;

	}
	setvalue = (ulFun & 0xffff0000) >> 16;
	value = (int)(ulFun & 0x0000ffff);

	switch(setvalue)
	{
		 default:
		 	break;
		 case 1:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Set WAIT_COUNT:\r\n")));
		 	WAIT_COUNT = value;
			break;
		 case 2:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Set D1 WAIT COUNT:\r\n")));
		 	D1_TIME = value;
			break;
		 case 3:
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Set D2 WAIT COUNT:\r\n")));
		 	D1_TIME = value;
			break;
	}

}	 
void DumpHex(BYTE b)
{
	DEBUGMSG(GPE_ZONE_INIT,(TEXT("0x%2x \r\n"),b));
}
#endif

BOOL DDCTest()
{
//	DebugBreak();
////	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Do ReportDDCcaps:\r\n")));
	if(!DDCCore(ReportDDCcaps, 0 , NULL))
	{
		 //Non DDC monitor
////	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Fail ReportDDCcaps:\r\n")));
		return FALSE;
	}
////	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Pass ReportDDCcaps:\r\n")));
////	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Do ReadEDID:\r\n"));
	if(!DDCCore(ReadEDID, 0, (BYTE *)&EDID_Buffer))
	{
		 // Something wrong in the I2C
////	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Fail ReadEDID:\r\n")));
		return FALSE;
	}
	// Process EDID Data

////	DEBUGMSG(GPE_ZONE_INIT,(TEXT("Get ReadEDID:\r\n")));


#if 0
	int i;
	if(EDID_Buffer.Header[0] != 0x00 || EDID_Buffer.Header[7] != 0x00)
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Bad Header:\r\n"));
	else
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Good Header:\r\n"));

	for(i=1;i<7;++i)
	{
		if(EDID_Buffer.Header[i] != 0xff)
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Bad Header:\r\n"));
		else
			DEBUGMSG(GPE_ZONE_INIT,(TEXT("Good Header:\r\n"));
	}
	BYTE *pByte = (BYTE *)(&EDID_Buffer);
	for(i=0;i<128;++i,++pByte)
	{

		DumpHex(*pByte);

	}
	//return TRUE;
#endif

	return TRUE;

}

//****************************************************************************
//	DDCCore - VESA DDC core code, called by DDCHook from OEM tip 
//****************************************************************************
BOOL DDCCore(UINT	ulFunction, UINT iBlockNum, BYTE *pBuffer)
{

#ifdef	MQ_CPP
	if(!pMQGC)
		pMQGC = (MQGC *)pGPE;
	
	if(!pMQGC)
		DebugBreak();
#endif
		
	switch(ulFunction)
	{
		case	ReportDDCcaps:
	  			if(!ConfigChipDDCCaps())
					return FALSE;
				break;
		case	ReadEDID:
				if(!ConfigChipReadEDID(pBuffer))
					return FALSE;
				break;
		case	ReadVDIF:
				if(!ConfigChipReadVDIF(iBlockNum, pBuffer))
					return FALSE;
				break;
		default:
				break;
	}
	return TRUE;
}


//****************************************************************************
//	ConfigChipDDCCaps - Determine capabilites of host and display. 
//****************************************************************************
BOOL ConfigChipDDCCaps()
{
	BYTE	bData;
	BYTE	pBuffer[128];

		I2CSetup();													 	// Ensure monitor is in DDC2 mode
		I2CDataRequest(0x00, pBuffer, 0x00, Fun_No_Read);	// setup address for display
		bData = I2CByteRead();
		I2CAckWrite();													// Send ACKnowledge
		if(bData)
		{	// DDC Monitor Not Attached
			I2CStopService();
			return FALSE;
		}
		bData = I2CByteRead();
		I2CNackWrite();											// Send Not Acknowledge

		if(bData != 0xFF)
		{	// DDC Monitor Not Attached
			I2CStopService();
			return FALSE;
		}

		I2CStopService();

		return TRUE;
}

//****************************************************************************
//	ConfigChipReadEDID - Read the EDID block from monitor. 
//****************************************************************************
BOOL	ConfigChipReadEDID(BYTE *pBuffer)
{
		I2CSetup();
		I2CDataRequest(0x00, pBuffer, 128, Fun_Read);	// Setup word address for display.
																		// Assume 1 EDID block

	return TRUE;


}

//****************************************************************************
//	ConfigChipReadVDIF - Read the VDIF block from the monitor. 
//****************************************************************************
BOOL	ConfigChipReadVDIF(UINT	iBlockNum, BYTE *pBuffer)
{
	BYTE	bData;

		I2CSetup();

		I2CDataRequest(0x80, pBuffer, 00, Fun_No_Read);	// Setup word address for display.
																		// Assume 1 EDID block

		bData = I2CByteRead();				 					// Check for DDC2

		if(bData != 0x56)											// Check for "V"
		{
			I2CStopService();
			return FALSE;
		}
		I2CAckWrite();												// Send Acknowledge
		bData = I2CByteRead();
		I2CAckWrite();												// Send Acknowledge

		if(bData != 0x44)											// Check for "D"
		{
			I2CStopService();
			return FALSE;
		}
		I2CDataRequest(iBlockNum*64 + 0x80, pBuffer, 64, Fun_Read | Fun_No_VerifyCheckSum);	// Setup word address for display.
		return TRUE;
}
//****************************************************************************
//	I2CSetup - Allow one very long low clock pulse so that the 
//		    monitor has time to switch to DDC2 mode. 
//
//****************************************************************************

void I2CSetup()
{
	I2COut(0,1);					// SCL = LOW,	SDA = HIGH

	Sleep(50);
////	WaitForDisplay();
////	WaitForDisplay();

	I2COut(1,1);					// SCL = HIGH,	SDA = HIGH

	Sleep(50);
////	WaitForDisplay();
////	WaitForDisplay();

}

//****************************************************************************
//	I2CStartService - Provide start sequence for tallking to i2c bus. 
//****************************************************************************

BOOL	I2CStartService()
{
		I2COut(0,1);		// SCL = LOW,  SDA = HIGH
		I2COut(1,1);	   // SCL = HIGH, SDA = HIGH
		I2COut(1,0);	   // SCL = HIGH, SDA = LOW
		I2COut(0,0);	   // SCL = LOW, SDA = LOW
		return TRUE;	   

}

//****************************************************************************
//	I2CStopService - Provide stop sequence to i2c bus. 
//****************************************************************************
BOOL I2CStopService()
{
	  I2COut(0,0);		// SCL = LOW,  SDA = LOW
	  I2COut(1,0);		// SCL = HIGH, SDA = LOW
	  I2COut(1,1);		// SCL = HIGH, SDA = HIGH
	  D1_DELAY();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片在线观看| 久久久久国产一区二区三区四区| 91麻豆精品国产综合久久久久久 | 欧美国产成人精品| 亚洲国产精品视频| 成人性生交大片免费看中文| 久久综合九色综合欧美98| 亚洲精品国产无天堂网2021 | 欧美一区二区三区性视频| 久久精子c满五个校花| 亚洲一区二区三区小说| 国产精品18久久久久| 91麻豆精品国产91久久久久久 | 26uuu精品一区二区| 亚洲综合一区二区三区| 岛国精品在线观看| 欧美精品一区二区三区一线天视频| 亚洲精品中文字幕在线观看| 黑人巨大精品欧美一区| 欧美丰满美乳xxx高潮www| 亚洲欧美日韩在线播放| a美女胸又www黄视频久久| 精品国产一区二区三区久久影院| 午夜激情综合网| 色8久久精品久久久久久蜜| 国产拍欧美日韩视频二区| 日韩成人dvd| 欧美日韩亚州综合| 亚洲永久精品大片| 色欲综合视频天天天| 亚洲图片欧美激情| 91激情在线视频| 亚洲六月丁香色婷婷综合久久| 91在线观看免费视频| 国产精品家庭影院| 99久久精品免费| 综合久久给合久久狠狠狠97色 | 国产一区二区三区高清播放| 欧美成人精精品一区二区频| 免费观看成人鲁鲁鲁鲁鲁视频| 51精品国自产在线| 免费成人在线播放| 精品国产精品一区二区夜夜嗨| 激情综合网最新| 久久青草欧美一区二区三区| 国产成都精品91一区二区三| 欧美国产日韩精品免费观看| 91影院在线观看| 亚洲成人午夜影院| 69久久99精品久久久久婷婷| 九九九久久久精品| 国产精品色一区二区三区| 91亚洲男人天堂| 亚洲第一电影网| 欧美成人综合网站| 成人一级片在线观看| 亚洲色图清纯唯美| 在线电影一区二区三区| 国产一区二区三区免费观看| 国产性做久久久久久| 一本大道久久a久久综合婷婷| 午夜激情一区二区三区| 精品国产三级电影在线观看| 国产91精品一区二区麻豆亚洲| 日韩毛片视频在线看| 欧美乱妇15p| 国产一区二区成人久久免费影院| 中文字幕一区二区三区四区| 91精品福利视频| 国产一区二区视频在线播放| 亚洲欧美偷拍三级| 日韩一区在线看| 欧美疯狂性受xxxxx喷水图片| 韩国女主播成人在线| 亚洲日本电影在线| 欧美一区二区福利视频| 成人性视频免费网站| 日韩高清不卡在线| 亚洲欧洲国产专区| 日韩欧美不卡一区| 在线中文字幕不卡| 国产精品456| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产女同性恋一区二区| 911国产精品| 91一区二区在线| 国产一区二区三区免费播放| 亚洲夂夂婷婷色拍ww47| 欧美激情一区二区| 日韩免费成人网| 欧美日韩中文字幕一区| 成人短视频下载 | 一区二区三区精品视频在线| 亚洲精品在线观看视频| 欧美亚洲综合在线| jvid福利写真一区二区三区| 久久99热这里只有精品| 婷婷成人激情在线网| 亚洲免费视频成人| 国产精品免费视频网站| 三级亚洲高清视频| 国产精品久久久久久久久免费相片| 在线免费av一区| 蜜臀av一区二区三区| 国产精品一区免费在线观看| 欧美韩国日本不卡| 欧美视频一二三区| 欧美老人xxxx18| 蜜桃视频一区二区三区在线观看| 樱桃国产成人精品视频| 国产精品嫩草影院com| 久久精品视频网| 久久婷婷国产综合精品青草| 精品国产青草久久久久福利| 欧美一级高清片在线观看| 欧美精品三级在线观看| 7799精品视频| 7777精品伊人久久久大香线蕉经典版下载| 色婷婷综合中文久久一本| 成人黄色小视频| 国产福利一区二区三区在线视频| 国产麻豆午夜三级精品| 美国欧美日韩国产在线播放| 美女免费视频一区二区| 精品系列免费在线观看| 国产精品综合在线视频| 国产精品亚洲一区二区三区在线| 国产精品亚洲а∨天堂免在线| 国产精品一区二区男女羞羞无遮挡| 韩国精品主播一区二区在线观看| 韩国三级电影一区二区| 国产伦精品一区二区三区免费| 国产综合久久久久久鬼色| 国产激情视频一区二区三区欧美| 国产精品资源站在线| 国产.精品.日韩.另类.中文.在线.播放| 国产最新精品精品你懂的| 国产精品一区二区久久精品爱涩 | 日韩一本二本av| 精品捆绑美女sm三区| 国产日韩欧美激情| 欧美日本视频在线| |精品福利一区二区三区| 日韩精品一区第一页| 成人免费视频网站在线观看| 日韩美女视频19| 久久久久久久久久久久久久久99| 国产亚洲成aⅴ人片在线观看 | 成人a免费在线看| 色综合中文字幕国产 | 成人激情视频网站| 日本伦理一区二区| 久久亚洲精精品中文字幕早川悠里| 国产精品久久久久久户外露出| 亚洲一区二区三区四区在线| 麻豆国产欧美日韩综合精品二区| 懂色中文一区二区在线播放| 91黄色免费网站| 精品国产露脸精彩对白| 伊人婷婷欧美激情| 国产精品小仙女| 欧美久久久久久蜜桃| 国产精品久久久久久久午夜片| 日韩av不卡在线观看| 成人av影院在线| 日韩限制级电影在线观看| 亚洲欧美在线视频| 国产乱色国产精品免费视频| 亚洲国产美女搞黄色| 成人app在线观看| 色天天综合久久久久综合片| 国产乱码精品一品二品| 91美女在线视频| 国产喂奶挤奶一区二区三区| 亚洲一二三四在线| 成人在线综合网| 精品国产一区二区三区四区四 | 国产成人三级在线观看| 欧美日韩小视频| 亚洲精品水蜜桃| 成人动漫av在线| 国产欧美日韩精品在线| 另类小说一区二区三区| 欧美日韩国产另类一区| 中文字幕佐山爱一区二区免费| 国产成人免费网站| www日韩大片| 精品一区免费av| 日韩美女在线视频| 日韩高清在线电影| 在线综合视频播放| 香蕉久久夜色精品国产使用方法| 色综合一区二区| 亚洲精品国产精华液| 日本韩国一区二区| 一区二区理论电影在线观看| 色一区在线观看| 亚洲午夜精品一区二区三区他趣| 欧美最猛性xxxxx直播| 亚洲激情六月丁香|