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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区不卡在线 | 91视频你懂的| 久久99精品久久久久| 亚洲一线二线三线视频| 亚洲免费在线观看视频| 国产精品久久久久久亚洲毛片| 欧美一区二区三区四区久久| 91老师国产黑色丝袜在线| 91久色porny | 麻豆成人91精品二区三区| 五月婷婷综合网| 美女尤物国产一区| 国产伦精品一区二区三区视频青涩 | 91黄色激情网站| 欧美日韩免费在线视频| 日韩午夜在线观看视频| 亚洲精品一区二区在线观看| 国产免费久久精品| 一级中文字幕一区二区| 亚洲va欧美va人人爽午夜 | 欧美一区二区三区性视频| 欧美成va人片在线观看| 中文在线免费一区三区高中清不卡| 国产精品理论片在线观看| 一区二区三区精品视频| 久久精品免费观看| 不卡视频免费播放| 欧美大胆一级视频| 欧美日韩国产影片| 欧美草草影院在线视频| 国产性天天综合网| 一区二区三区影院| 国产一区二区在线看| 成人午夜av在线| 欧美熟乱第一页| 亚洲精品一线二线三线无人区| 中文字幕一区二区视频| 日本视频在线一区| 91免费精品国自产拍在线不卡| 欧美久久久久久久久| 中文字幕乱码亚洲精品一区| 岛国av在线一区| 94-欧美-setu| 欧美午夜片在线观看| 欧美成人激情免费网| 国产精品久久久久久亚洲伦| 蜜臀av性久久久久蜜臀aⅴ| 高清av一区二区| 3d动漫精品啪啪一区二区竹菊| 中文字幕免费观看一区| 美日韩一级片在线观看| voyeur盗摄精品| 久久综合给合久久狠狠狠97色69| 亚洲综合在线电影| av在线一区二区| 久久伊99综合婷婷久久伊| 日韩精品一级二级| 日本乱码高清不卡字幕| 国产精品久久久久久久久图文区 | 麻豆成人综合网| 91在线观看成人| 国产婷婷色一区二区三区| 蜜臀a∨国产成人精品| 7777精品伊人久久久大香线蕉| 专区另类欧美日韩| 高清在线成人网| 国产午夜三级一区二区三| 久久狠狠亚洲综合| 欧美大肚乱孕交hd孕妇| 美女视频黄久久| 丁香婷婷综合五月| 国产乱码精品一区二区三区五月婷 | 亚洲一区二区三区爽爽爽爽爽| 国产麻豆9l精品三级站| 精品国产髙清在线看国产毛片| 无吗不卡中文字幕| 欧美二区在线观看| 午夜精品免费在线| 在线播放一区二区三区| 日日夜夜免费精品| 日韩视频一区二区三区 | 成熟亚洲日本毛茸茸凸凹| 国产亲近乱来精品视频| 国产盗摄视频一区二区三区| 亚洲精品在线一区二区| 国产999精品久久久久久绿帽| 久久久亚洲精华液精华液精华液| 国产一区日韩二区欧美三区| 久久久91精品国产一区二区精品| 国产精品99久久久久久有的能看 | 日韩精品亚洲一区二区三区免费| 欧美色区777第一页| 午夜av区久久| 精品国内片67194| 国产精品综合一区二区| 国产精品热久久久久夜色精品三区 | 亚洲欧洲韩国日本视频| 在线视频你懂得一区| 婷婷久久综合九色国产成人| 欧美精品日韩一区| 国产美女av一区二区三区| 日本一区二区免费在线| 一本色道综合亚洲| 午夜亚洲福利老司机| 久久综合狠狠综合久久激情 | 欧美激情一区二区三区| 在线免费av一区| 精品一区二区三区在线观看 | 天天做天天摸天天爽国产一区| 欧美电影免费观看高清完整版在 | 99久精品国产| 日本美女视频一区二区| 国产精品不卡一区| 欧美一级夜夜爽| 91亚洲精品久久久蜜桃| 美女免费视频一区| 一区二区三区在线免费| 欧美精品一区二区三区在线播放| 色综合久久久久综合体桃花网| 日韩精品亚洲专区| 亚洲婷婷综合色高清在线| 欧美电视剧免费全集观看| 色吊一区二区三区| 国产精品亚洲视频| 美日韩一区二区三区| 亚洲综合偷拍欧美一区色| 中文字幕高清不卡| 欧美电视剧在线看免费| 欧美三级电影一区| 99re66热这里只有精品3直播| 国产综合久久久久久鬼色| 无码av中文一区二区三区桃花岛| 亚洲日本在线观看| 国产日韩欧美综合在线| 日韩欧美在线123| 欧美日韩在线播| 色悠久久久久综合欧美99| 国产suv精品一区二区三区| 激情综合色播五月| 美女视频免费一区| 久久国产精品露脸对白| 日韩成人免费电影| 日产欧产美韩系列久久99| 亚洲二区在线观看| 亚洲一二三四区| 一区二区三区精品在线| 一区二区三区欧美亚洲| 亚洲免费观看在线视频| 亚洲欧洲精品一区二区精品久久久| 欧美经典一区二区三区| 国产欧美日韩不卡免费| 国产日产欧美精品一区二区三区| 久久久久久一级片| 国产无人区一区二区三区| 久久久久成人黄色影片| 国产欧美日本一区二区三区| 中国av一区二区三区| 国产精品美女久久久久久久| 国产精品护士白丝一区av| 国产精品久久精品日日| 亚洲欧美电影院| 一区二区三区日韩| 三级精品在线观看| 狠狠色丁香婷综合久久| 国产成人激情av| 一本大道综合伊人精品热热| 欧美亚洲国产一卡| 日韩色视频在线观看| 亚洲精品一区二区三区在线观看| 国产亚洲人成网站| 亚洲欧洲精品成人久久奇米网| 亚洲一区二区三区四区在线观看 | 国产乱码一区二区三区| 成人av在线一区二区三区| 色综合天天天天做夜夜夜夜做| 在线看国产一区| 精品欧美一区二区三区精品久久| 久久久久久毛片| 亚洲欧美色一区| 美女视频黄a大片欧美| 成人av电影免费观看| 在线不卡的av| 国产精品少妇自拍| 婷婷丁香久久五月婷婷| 国产精品1区二区.| 欧美日韩亚洲丝袜制服| 欧美国产在线观看| 调教+趴+乳夹+国产+精品| 成人美女在线观看| 这里是久久伊人| 国产精品国产三级国产专播品爱网| 天堂蜜桃91精品| 成人av手机在线观看| 欧美一区二区三区不卡| 亚洲精品免费在线| 国产专区综合网| 8v天堂国产在线一区二区| 国产精品乱码妇女bbbb| 精品一二线国产| 在线免费精品视频|