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

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

?? ddc.cpp

?? WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
?? CPP
字號(hào):
/*
 * $Workfile: ddc.cpp $
 * $Revision: 3 $
 * $Date: 4/07/00 8:48a $
 * $Modtime: 4/07/00 8:38a $
 * $Author: Sarma $
 *
 * Contains routines for GXVideo initialization and also to set modes.
 *
 * Copyright (c) 1998 National Semiconductor Corporation.
 * All Rights Reserved.
 *
 * This software is the confidential and proprietary information of National 
 * Semiconductor Corporation. ("Confidential Information").
 * You shall not disclose such Confidential Information and shall use it only
 * in accordance with the terms of the license agreement you entered into
 * with National Semiconductor Corporation.
 * This code is supplied as is.
 *
 */

/*
 *$Log: /CE/Platform/Nsc/Drivers/Video/gxvideo/base/ddc.cpp $
 * 
 * 3     4/07/00 8:48a Sarma
 * Removed Cyrix Corporation from the legal/confidentail information.
 * 
 * 2     7/20/99 2:09p Sarma
 * Added Vss history tags.
*/

#include "precomp.h"
#include "ddc.h"

//Data locations in VESA ver1.0 format containg 128 Bytes
#define VESA1_VERSION 12
#define VESA1_REVSION 13
#define VESA1_EST_TIM1 35
#define VESA1_EST_TIM2 36
#define VESA1_EST_MANU_TIM 37
#define VESA1_EST_STAND_TIM 38

typedef struct _DispAspectRatio{
	int xRatio;
	int yRatio;
}DispAspectRatio;

static DispAspectRatio asp[4] = {
	{1, 1},
	{4, 3},
	{5, 4},
	{16, 9}
};
static  void standardTiming(unsigned char *data) 
{
	int width, height;
	int freq, ratio, pos;
	for (int i = 0; i < 8; i++) {
		//value = (HorizTiming /8) - 31
		pos = VESA1_EST_STAND_TIM + (i <<1); //Each timing uses 2 Bytes as info.
		if((data[pos] == 0x1 ) && (data[pos + 1] == 0x1))
			continue;
		width = (data[pos] + 31) << 3;
		freq = 60+(data[pos + 1] & 0x3F);
		ratio = (data[pos + 1] & 0xC0) >> 6;
		height = (width / asp[ratio].xRatio) * asp[ratio].yRatio;
		
	DEBUGMSG( 1,(TEXT("%d = %3dX%3d %dHz\n"),i, width, height, freq));
	//RETAILMSG( 1,(_T("%d = %3dX%3d %dHz\n"),i, width, height, freq));
	}
}

static void dumpData(unsigned char *data, int length) 
{
	for (int i = 0; i < length; i++) {
	DEBUGMSG( 1,(TEXT("%d = %2X %3d\n"),i, data[i],data[i]));
	//RETAILMSG( 1,(_T("%d = %2X %3d\n"),i, data[i],data[i]));
	}
}

DDC1_2B::DDC1_2B(unsigned char *regBase) {
	cxReg = regBase;
	displayDataLength = 128;
	displaySupports = 0;
	displayData = new byte[displayDataLength];
	memset(displayData, 0x0, displayDataLength);
	startXfer();
	init();
	getBlock(displayData, displayDataLength);
	endXfer();
	dumpData(displayData, displayDataLength);
	standardTiming(displayData);
}

DDC1_2B::~DDC1_2B() 
{
	DEBUGMSG( 0,(TEXT("DDC1_2B::~DDC1_2B\n")));
	if(displayData)
		delete [] displayData;
	displayData = 0x0;
}

// Data accessors for extracting information from the data block
bool DDC1_2B::doesDisplaySupport(unsigned long mode) 
{
	//Check if we were really able to read display
	if((displayData[VESA1_VERSION] == 0xFF) ||
		(displayData[VESA1_REVSION] == 0xFF))
		return false; 
	displaySupports = (displayData[VESA1_EST_TIM1] << 16) |
		(displayData[VESA1_EST_TIM2] << 8) | 
		displayData[VESA1_EST_MANU_TIM];
	DEBUGMSG( 1,(TEXT("doesDisplaySupport %X\n"),displaySupports));

	return ((displaySupports & mode) == mode);
}

//Wait for microSeconds
void DDC1_2B::wait(int uSec) 
{
	DEBUGMSG( 0,(TEXT("delay %d\n"),uSec));
	unsigned long target = GetTickCount() + uSec;

	while (GetTickCount() <= target);
}

unsigned char DDC1_2B::ReadByte(bool ack) 
{
	unsigned char val = 0;
	DEBUGMSG( 0,(TEXT("getByte\n")));
	for (int i = 0; i < 8; i++) {
		val <<= 1;
		val |= ReadBit();
	}

	Ack(ack);
	return val;
}

int DDC1_2B::ReadBit() 
{
	DEBUGMSG( 0,(TEXT("getBit\n")));
	wait();
	ClearSCL();
	wait();
	WaitSCLHigh();
	wait();
	return GetSDA();
}

void DDC1_2B::WaitSCLHigh() 
{
	DEBUGMSG( 0,(TEXT("WaitSCLHigh\n")));
	SetSCL();
	// slow down trasfer 

	unsigned long target = GetTickCount() + 2;
	for (;;) {	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
		if (GetSCL() == 1) {
			break;
		} else if (GetTickCount() > target) {
			DEBUGMSG( 1,(TEXT("timeout")));
		}
		DEBUGMSG( 1,(TEXT("WaitSCLHigh - Delay 2 u Sec\n")));
	}
}

void DDC1_2B::SendByte(unsigned char data) 
{
	DEBUGMSG( 0,(TEXT("sendByte Enter\n")));
	for (int i = 7; i >= 0; i--) {
		SendBit((data >> i) & 1);
	}

	if (! waitForAck()) {
		DEBUGMSG( 1,(TEXT("NACK received\n")));
	}
	ClearSCL();
	DEBUGMSG( 0,(TEXT("sendByte Exit\n")));
}

void DDC1_2B::SendBit(bool flag) 
{
	DEBUGMSG( 0,(TEXT("sendBit\n")));
	wait();
	ClearSCL();
	wait();
	if (flag) {
		SetSDA();
	} else {
		ClearSDA();
	}
	wait();
	WaitSCLHigh();
}

void DDC1_2B::StartBit() 
{
	DEBUGMSG( 0,(TEXT("startBit\n")));
	wait();
	SetSDA();
	wait();
	WaitSCLHigh();
	wait();
	ClearSDA();
	wait();
}

void DDC1_2B::StopBit() 
{
	DEBUGMSG( 0,(TEXT("stopBit\n")));
	wait();
	WaitSCLHigh();
	wait();
	SetSDA();
	wait(2);
}

void DDC1_2B::Ack(bool flag)
{
	DEBUGMSG( 0,(TEXT("ACK\n")));
	wait();
	ClearSCL();
	wait();
	if (flag) {
		ClearSDA();
	} else {
		SetSDA();
	}
	WaitSCLHigh();
	ClearSCL();
	wait();
	SetSDA();
	DEBUGMSG( 0,(TEXT("ACK Exit\n")));
}

bool DDC1_2B::waitForAck()
{
	DEBUGMSG( 0,(TEXT("waitForACK\n")));
	wait();
	ClearSCL();
	wait();
	SetSDA();

	unsigned long target = GetTickCount() + 2;

	for (;;) {
		wait();
		if (GetSDA() == 0) {
			wait();
			WaitSCLHigh();
			return true;
	    //} else if(endtime > target) {
		} else if(GetTickCount() > target) {
			wait();
			WaitSCLHigh();
			return false;
		}
	}
}

void DDC1_2B::requestData() 
{
	DEBUGMSG( 0,(TEXT("requestData\n")));
	StartBit();
	SendByte(0xa0);
	SendByte(0);
	StopBit();

	StartBit();
	SendByte(0xa1);
}

void DDC1_2B::init() 
{
	DEBUGMSG( 0,(TEXT("setup\n")));
	SetSDA();
	WaitSCLHigh();
	ClearSCL();
	WaitSCLHigh();
	ClearSCL();
	WaitSCLHigh();
	requestData();
	ReadByte(false);
	StopBit();
}

void DDC1_2B::getBlock(unsigned char *block, int length) 
{
	DEBUGMSG( 0,(TEXT("getBlock\n")));
	requestData();

	int cksum = 0;
	int end = length - 1;

	for (int i = 0; i < length; i++) {
		block[i] = ReadByte((i != end));
		cksum += (int)block[i];
	}
	StopBit();

	DEBUGMSG( 0,(TEXT("getBlock %d\n"),cksum));

	if ((cksum & 0xff) != 0) {
		DEBUGMSG( 1,(TEXT("Checksum Error\n")));
	}
}

////////////////////////////////////////////////////////////////
// H/W DEPENDENT LOW LAYER ROUTINES
////////////////////////////////////////////////////////////////

// Toggle SDA from low to high while SCL is high.
void DDC1_2B::startXfer() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	DEBUGMSG( 0,(TEXT("startXfer\n")));
	data &= ~CX5530_DCFG_DDC_SCL;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	data &= ~CX5530_DCFG_DDC_SDA;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	data |= CX5530_DCFG_DDC_SCL;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	data |= CX5530_DCFG_DDC_SDA;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
}

// Toggle SDA from high to low while SCL is high.
void DDC1_2B::endXfer() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	DEBUGMSG( 0,(TEXT("endXfer\n")));
	data &= ~CX5530_DCFG_DDC_SCL;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	data |= CX5530_DCFG_DDC_SDA;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	data |= CX5530_DCFG_DDC_SCL;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	data &= ~CX5530_DCFG_DDC_SDA;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
}

//Set clock high
void DDC1_2B::SetSCL() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	DEBUGMSG( 0,(TEXT("SetSCL\n")));
	data |= CX5530_DCFG_DDC_SCL;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
}

//Set clock low
void DDC1_2B::ClearSCL() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	data &= ~CX5530_DCFG_DDC_SCL;
	DEBUGMSG( 0,(TEXT("DDCclockLo %X\n"),data));
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
}

int DDC1_2B::GetSCL() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	DEBUGMSG( 0,(TEXT("GetSCL %X\n"), data));
	return ((data & CX5530_DCFG_DDC_SCL) >> 22);
}

//Set data high
void DDC1_2B::SetSDA() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	data |= CX5530_DCFG_DDC_SDA | CX5530_DCFG_DDC_OE;
	DEBUGMSG( 0,(TEXT("SetSDA %X\n"), data));
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
}

//Set data low
void DDC1_2B::ClearSDA() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	data &= ~CX5530_DCFG_DDC_SDA; 
	data |= CX5530_DCFG_DDC_OE;
	DEBUGMSG( 0,(TEXT("ClearSDA %X\n"), data));
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
}


int DDC1_2B::GetSDA() 
{
	unsigned long data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	data &= ~CX5530_DCFG_DDC_OE;
	WRITE_REG32(cxReg, CX55xx_DISPLAY_CONFIG, data);
	wait(2); //10
	data = READ_REG32(cxReg, CX55xx_DISPLAY_CONFIG);
	DEBUGMSG( 0,(TEXT("GetSDA %X\n"), data));
	return (data >> 31);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲婷婷国产精品电影人久久| 成人免费一区二区三区在线观看| 成人免费黄色在线| 亚洲第一成人在线| 欧美高清在线精品一区| 日韩一区二区在线观看视频 | 成人欧美一区二区三区小说 | 亚洲天堂网中文字| www国产亚洲精品久久麻豆| 欧美亚洲国产一区在线观看网站| 国产成人午夜电影网| 免费观看一级欧美片| 亚洲综合精品自拍| 亚洲天堂久久久久久久| 亚洲国产激情av| 久久女同精品一区二区| 日韩欧美在线123| 欧美一区二区视频在线观看 | 高清成人在线观看| 老司机精品视频导航| 日本欧美久久久久免费播放网| 亚洲欧美电影一区二区| 国产精品女人毛片| 久久久久久久久久看片| 日韩精品自拍偷拍| 日韩一区二区三区观看| 在线不卡中文字幕| 在线不卡一区二区| 91精品国产综合久久久久久漫画| 欧洲视频一区二区| 在线观看视频91| 在线看一区二区| 91福利国产成人精品照片| 91在线免费看| 一本一道综合狠狠老| 色菇凉天天综合网| 欧美午夜精品久久久久久超碰| 97久久精品人人澡人人爽| 91蝌蚪porny| 91猫先生在线| 色成人在线视频| 欧美日产在线观看| 日韩一区二区高清| 26uuu另类欧美| 国产日产欧美一区二区视频| 国产亚洲视频系列| 中文字幕av不卡| 亚洲人亚洲人成电影网站色| 日韩理论电影院| 亚洲大尺度视频在线观看| 亚洲超碰精品一区二区| 日本va欧美va欧美va精品| 韩国一区二区视频| 国产suv一区二区三区88区| 不卡欧美aaaaa| 欧美亚洲综合网| 5566中文字幕一区二区电影| 日韩亚洲欧美高清| 国产嫩草影院久久久久| 亚洲黄色片在线观看| 日韩制服丝袜av| 国产九色sp调教91| 97久久精品人人澡人人爽| 欧美天堂一区二区三区| 日韩视频一区在线观看| 国产三级精品三级| 亚洲一区二区在线播放相泽| 奇米一区二区三区| 成人v精品蜜桃久久一区| 91官网在线观看| 日韩三级伦理片妻子的秘密按摩| 精品国产一二三区| 亚洲欧洲制服丝袜| 奇米精品一区二区三区在线观看一| 国产乱淫av一区二区三区| 91性感美女视频| 日韩视频123| 亚洲精选在线视频| 精品一区二区三区的国产在线播放 | 亚洲女人的天堂| 男人的天堂亚洲一区| 不卡区在线中文字幕| 日韩一区二区三区三四区视频在线观看| 久久精品夜夜夜夜久久| 亚洲一区二区三区四区中文字幕| 久久精品国产亚洲一区二区三区| 波多野结衣中文字幕一区 | 欧美一区二区三区爱爱| 欧美国产一区在线| 日韩成人免费看| 91色视频在线| 久久亚洲欧美国产精品乐播| 亚洲永久免费视频| 国产成人av影院| 69久久夜色精品国产69蝌蚪网| 国产偷v国产偷v亚洲高清 | 成人在线视频首页| 在线成人高清不卡| 一区二区在线观看不卡| 国产一区二区精品久久| 欧美人牲a欧美精品| 亚洲欧洲日本在线| 国产成人精品一区二| 欧美成人官网二区| 日日夜夜精品免费视频| 色偷偷久久一区二区三区| 26uuu亚洲| 美国毛片一区二区三区| 在线观看一区二区视频| 国产精品免费看片| 国产精品伊人色| 91精品国产综合久久香蕉麻豆| 亚洲精品伦理在线| 99精品久久免费看蜜臀剧情介绍| 久久精品亚洲乱码伦伦中文| 久久精品国产在热久久| 91麻豆精品国产91久久久久| 一区二区三区中文字幕精品精品| 粉嫩av亚洲一区二区图片| 久久众筹精品私拍模特| 免费在线成人网| 日韩一区二区三区四区| 日韩黄色小视频| 91.xcao| 日韩国产在线观看一区| 欧美日韩另类一区| 亚洲国产你懂的| 欧美在线观看视频一区二区| 亚洲美女免费视频| 91片黄在线观看| 亚洲欧美另类小说视频| 99re在线精品| 一区二区三区国产精品| 色婷婷综合久久久久中文| 樱桃国产成人精品视频| 欧美性一级生活| 午夜欧美电影在线观看| 91精品国产色综合久久久蜜香臀| 日韩福利电影在线| 日韩欧美中文字幕制服| 久久99精品久久只有精品| 精品乱人伦小说| 国产美女av一区二区三区| 国产日韩高清在线| 99精品黄色片免费大全| 一区二区三区免费| 欧美日韩大陆一区二区| 日韩精品高清不卡| 久久美女高清视频| 99视频精品全部免费在线| 一区二区在线观看视频在线观看| 欧美在线观看一区二区| 美国三级日本三级久久99| 久久久久久久综合狠狠综合| 成人av免费观看| 亚洲一区二区美女| 精品精品欲导航| 成人免费视频一区二区| 亚洲一区二区三区国产| 欧美成人video| 高清视频一区二区| 亚洲影视资源网| 精品免费日韩av| 不卡av免费在线观看| 亚洲123区在线观看| 26uuu亚洲| 在线观看日韩毛片| 激情欧美一区二区| 1区2区3区精品视频| 91精品一区二区三区久久久久久| 国产成人精品www牛牛影视| 亚洲综合视频网| 欧美xxxxxxxx| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲一区二区三区视频在线播放 | 国产精品女人毛片| 亚洲人快播电影网| 亚洲日本va午夜在线电影| 欧美在线一二三| 欧美一区日本一区韩国一区| 日本中文字幕一区二区视频| 91精品国产一区二区三区香蕉| 丝袜国产日韩另类美女| 欧美电影免费观看高清完整版在线 | 欧美日韩高清在线| 男女男精品视频| 国产欧美日韩在线看| 一本一道波多野结衣一区二区| 一区二区三区成人| 91精品国产欧美一区二区| 国产伦精品一区二区三区免费 | 国产免费观看久久| 蜜臀久久久99精品久久久久久| 日韩视频一区二区| 成人免费毛片片v| 亚洲一区二区视频在线| 日韩欧美电影一区| 99久久国产综合精品色伊| 亚洲123区在线观看| 精品久久人人做人人爽|