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

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

?? hal.c

?? 用C語言設計的EPSON LCD控制器S1D13700驅動。
?? C
?? 第 1 頁 / 共 3 頁
字號:
}



//-----------------------------------------------------------------------------
//  FUNCTION:		halWriteReg8( )
//
//  DESCRIPTION:
//		These routines write the S1D13700 control registers at the width
//		indicated in the function name.
//
//  PARAMETERS:
//		Index -	Offset to the register to read. The index value is zero	based
//				from the beginning of register address space.

//		Value -	The value to write to the register indicated by offset.
//
//				Be very cautious in interpretting the index and values to write
//				to registers using the halWriteReg8() and halWriteReg16()
//				functions, to ensure the correct meaning is programmed into the
//				register. Differing endians will move relative register offsets.
//
//  RETURNS:	Nothing
//
//	MODIFIES:	The register(s) indicated in the function name.
//-----------------------------------------------------------------------------
void halWriteReg8( UInt16 Index, UInt8 Value )
{
	if ( HalInfo.dwFlags & fPCCARD_INTERFACE )
	{
		if( HalInfo.dwFlags&fINDIRECT_INTERFACE )
		{
			halIndRegWrite8( Index, Value );
		}
		else
		{
			*((pvUInt8)((UInt32)gHD.RegisterAddress + Index*2)) = Value;
		}
	}
	else
	{
		if( HalInfo.dwFlags&fINDIRECT_INTERFACE )
		{
			halIndRegWrite8( Index, Value );
		}
		else
		{
			*((pvUInt8)((UInt32)gHD.RegisterAddress + Index)) = Value;
		}
	}
}


void halWriteReg16( UInt16 Index, UInt16 Value )
{
	if ( HalInfo.dwFlags & fPCCARD_INTERFACE )
	{
		if( HalInfo.dwFlags&fINDIRECT_INTERFACE )
		{
			halIndRegWrite16( Index, Value );
		}
		else
		{
			UInt8*  pReg = (UInt8*)(gHD.RegisterAddress + Index*2);

			*((pvUInt8)(pReg))		= (UInt8) Value;
			*((pvUInt8)(pReg+2))	= (UInt8) (Value>>8);
		}
	}
	else
	{
		if( HalInfo.dwFlags&fINDIRECT_INTERFACE )
		{
			halIndRegWrite16( Index, Value );
		}
		else
		{
			UInt8*  pReg = (UInt8*)(gHD.RegisterAddress + Index);

			*((pvUInt8)(pReg  )) = (UInt8) Value;
			*((pvUInt8)(pReg+1)) = (UInt8)(Value>>8);
		}
	}
}


void halWriteReg32( UInt16 Index, UInt32 Value )
{
	if ( HalInfo.dwFlags & fPCCARD_INTERFACE )
	{
		if( HalInfo.dwFlags&fINDIRECT_INTERFACE )
		{
			halIndRegWrite32( Index, Value );
		}
		else
		{
			UInt8*  pReg = (UInt8*)(gHD.RegisterAddress + Index*2);

			*((pvUInt8)(pReg  )) = (UInt8) Value;
			*((pvUInt8)(pReg+2)) = (UInt8)(Value>>8 );
			*((pvUInt8)(pReg+4)) = (UInt8)(Value>>16);
			*((pvUInt8)(pReg+6)) = (UInt8)(Value>>24);
		}
	}
	else
	{
		if( HalInfo.dwFlags&fINDIRECT_INTERFACE )
		{
			halIndRegWrite32( Index, Value );
		}
		else
		{
			UInt8*  pReg = (UInt8*)(gHD.RegisterAddress + Index);

			*((pvUInt8)(pReg  )) = (UInt8) Value;
			*((pvUInt8)(pReg+1)) = (UInt8)(Value>>8 );
			*((pvUInt8)(pReg+2)) = (UInt8)(Value>>16);
			*((pvUInt8)(pReg+3)) = (UInt8)(Value>>24);
		}
	}
}



/*=========================================================================*/
/*                             Miscellaneous                               */
/*=========================================================================*/

//---------------------------------------------------------------------------
//  FUNCTION:	halGetVersionInfo()
//
//  DESCRIPTION:
//		This routine takes program specific information and merges it with
//		HAL specific information and a standardized copyright notice.
//		The newly formulated string is returned to the caller for display.
//
//		The final formatted string will resemble:
//
//			13700PROGRAM - Internal test and diagnostic program - Build: 1234 [HAL: 1234]
//			Copyright (c) Seiko Epson Corporation 2003-2005.
//			All Rights Reserved.
//
//  PARAMETERS:
//		szProgName	  - Pointer to an ASCIIZ string containing the name of
//						the program.
//						(eg. "PROGRAM")
//		szDesc		  - Pointer to an ASCIIZ string containing a description
//						of what this program is intended to do.
//						(eg. "Internal test and diagnostic program")
//		szVersion	  - Pointer to an ASCIIZ string containg the build number
//						of the program.
//						(eg. "$Revision: 10 $")
//		szInfoString - Pointer to a buffer into which the product and version
//						information will be formatted into.
//		Length		  - Total number of bytes in the string pointed to by
//						pszInfoString. This function will write nLength or
//						fewer bytes to the buffer pointed to by pszInfoString.
//
//  RETURNS: 	Nothing.
//
//	MODIFIES:	Nothing.
//---------------------------------------------------------------------------

static char szCopyright[] = "Copyright (c) Seiko Epson Corporation 2003-2005.\n"
					 "All rights reserved.\n";

void halGetVersionInfo( const char * szProgName, const char * szDesc, const char * szVersion, char * szRetStr, int Length )
{
	char szTmp[3*256+sizeof(HalInfo.szConfigString)];	// Allow for 3 LONG lines of text, plus config description string.
	unsigned AppBuild, HalBuild;
	int iTmp;

	// From the HAL revision string, extract just the numerical value.
	HalBuild = (strchr(gszHALRevision,':')) ? atoi(strchr(gszHALRevision,':')+1) : 0;

	// From the application revision string, extract the numerical value.
	AppBuild = (strchr(szVersion,':')) ? atoi(strchr(szVersion,':')+1) : 0;

  	iTmp = sprintf(szTmp, "%s%s - %s - Build %u [HAL: %u]\n"
  	               "%s\n",
  			HalInfo.szChipId, szProgName, szDesc, AppBuild, HalBuild,
  			szCopyright);

	// Tack on the configuration description if it's not an empty string.
	if (HalInfo.szConfigString[0])
		sprintf(szTmp+iTmp-1, ", Description:\n%s\n", HalInfo.szConfigString);

	strncpy(szRetStr, szTmp, Length);
	szRetStr[Length-1] = 0;		// Terminate string in case of buffer overflow.
}

//-----------------------------------------------------------------------------
//  FUNCTION:	halGetLastError();
//
//  DESCRIPTION:
//		This routine retrieves information about the last error detected by the
//		HAL.
//
//  PARAMETERS:
//		ErrMsg	  - String pointer to receive the textual error message.
//					If ErrMsg is NULL then only the	error code is be returned.
//		MaxSize		Maximum number of bytes that can be copied into the string
//					pointed to by ErrMsg.
//
//  RETURNS:
//		The return value consists of the numerical error value which indexes
//		into szErrMsg[]. Each string in szErrMsg[] describes a specific error.
//
//	MODIFIES:
//-----------------------------------------------------------------------------

// IMPORTANT - IMPORTANT - IMPORTANT
//	The messages in this array MUST correspond to
//	the error codes contained in the HAL.H enumeration.
// IMPORTANT - IMPORTANT - IMPORTANT
static char * szErrMsg[ERR_FAILED + 1] =
{
	"There was no error detected",					// ERR_NONE
	"Unable to find/load the S1D13xxx driver",		// ERR_PCI_DRIVER_NOT_FOUND
	"Unable to locate an S1D13xxx controller",		// ERR_PCI_ADAPTER_NOT_FOUND
	"This program has not been configured",			// ERR_NOT_CONFIGURED
	"Config CRC does not match configureation",		// ERR_BAD_CFG_DATA
	"The programmable clock cannot be set",			// ERR_CANNOT_SET_CLOCK
	"The requested clock frequency is too high",	// ERR_CLK_FREQ_TOO_HIGH
	"The requested clock frequency is too low",		// ERR_CLK_FREQ_TOO_LOW
	"An unspecified error occured"					// ERR_FAILED
};


int halGetLastError( char * ErrMsg, int MaxSize )
{
	char szTmp[160];

	if (NULL != ErrMsg)
	{
		// Format a suitable error message,
		// just don't prefix 'no error' with "ERROR: ..."
		if (ERR_NONE == gnHalErrCode)
			strncpy(ErrMsg, szErrMsg[gnHalErrCode], MaxSize);
		else
		{
			sprintf(szTmp, "ERROR: %s", szErrMsg[gnHalErrCode]);
			strncpy(ErrMsg, szTmp, MaxSize);
		}
	}
	return gnHalErrCode;
}



//----------------------------------------------------------------------------
// OS FUNCTION: halpDelayUS()
//----------------------------------------------------------------------------
Boolean halDelayUS( UInt32 Microseconds )
{
	__int64	SysClockCount, SysClockTarget;

	// If requested delay is zero, just leave quickly.
	if ( Microseconds == 0 )
		return TRUE;

	// Init the ps/Tick constant if this is the first time here.
	if ( !gSysClockPS )
		CalibrateSystemClock();

	// Get the starting initial counter value now.
	RDTSC( SysClockTarget );

	// Calculate the terminal count of ticks required for requested delay.
	SysClockTarget += (Microseconds*1000000i64)/gSysClockPS;

	// Loop until the counter exceeds the number of ticks in the requested delay.
	do
	{
		RDTSC( SysClockCount );
	} while ( SysClockCount < SysClockTarget );

	return TRUE;
}




//---------------------------------------------------------------------------
// PRIVATE FUNCTION: ClearVideoMemory()
//---------------------------------------------------------------------------
static void ClearVideoMemory( void )
{
	halWriteDisplay8( 0x0, 0x0, HAL_DISPLAYMEMSIZE );
}


//---------------------------------------------------------------------------
// PRIVATE FUNCTION: InitRegisters()
//---------------------------------------------------------------------------
static void InitRegisters( void )
{

	if ( HalInfo.dwFlags & fPCCARD_INTERFACE )
	{
		if( HalInfo.dwFlags & fINDIRECT_INTERFACE )
			halpIndInitRegisters();
		else
		{
			UInt16  i;
			UInt8   bT;

			*((pvUInt8)(gHD.RegisterAddress + REG0008_SLEEPIN * 2 )) = 0;

			for( i=0; HalInfo.Regs[i].Index!=REGFLAG_ENDOFTABLE; i++ )
			{
				*((pvUInt8)(gHD.RegisterAddress + HalInfo.Regs[i].Index*2 )) = (UInt8)HalInfo.Regs[i].Value;
				bT = *((pvUInt8)(gHD.RegisterAddress + HalInfo.Regs[i].Index*2));
			}
		}
	}
	else
	{
		if( HalInfo.dwFlags & fINDIRECT_INTERFACE )
			halpIndInitRegisters();
		else
		{
			UInt16  i;
			UInt8   bT;

			*((pvUInt8)(gHD.RegisterAddress + REG0008_SLEEPIN)) = 0;

			for( i=0; HalInfo.Regs[i].Index!=REGFLAG_ENDOFTABLE; i++ )
			{
				*((pvUInt8)(gHD.RegisterAddress + HalInfo.Regs[i].Index)) = (UInt8)HalInfo.Regs[i].Value;
				bT = *((pvUInt8)(gHD.RegisterAddress + HalInfo.Regs[i].Index));
			}
		}
	}
}




//---------------------------------------------------------------------------
// PRIVATE FUNCTION: CalibrateSystemClock()
//---------------------------------------------------------------------------
static Boolean CalibrateSystemClock( void )
{
	#define SYSCLOCK_CALIBRATE_US	500			// Time (in us) to use to calibrate system clock.
	__int64	PerfCountPS;
	__int64	PerfCount, PerfTarget;
	__int64	SysClockCount;
	HANDLE	hProcess = GetCurrentProcess();
	HANDLE	hThread = GetCurrentThread();
	DWORD	ClassPriority = GetPriorityClass( hProcess );
	int		ThreadPriority = GetThreadPriority( hThread );

	if ( QueryPerformanceFrequency((PLARGE_INTEGER)&PerfCount) )
		PerfCountPS = 1000000000000i64/PerfCount;
	else
	{
		return FALSE;
	}

	SetPriorityClass( hProcess, REALTIME_PRIORITY_CLASS );
	SetThreadPriority( hThread, THREAD_PRIORITY_TIME_CRITICAL );

	QueryPerformanceCounter( (PLARGE_INTEGER)&PerfTarget );
	PerfTarget += (SYSCLOCK_CALIBRATE_US*1000000i64)/PerfCountPS;

	RDTSC( gSysClockBase );

	do
	{
		QueryPerformanceCounter( (PLARGE_INTEGER)&PerfCount );
	} while ( PerfCount < PerfTarget );

	RDTSC( SysClockCount );

	SetThreadPriority( hThread, ThreadPriority );
	SetPriorityClass( hProcess, ClassPriority );

	gSysClockPS = (SYSCLOCK_CALIBRATE_US*1000000i64)/(SysClockCount-gSysClockBase);

	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av手机在线观看| 欧美精品一区二区三区很污很色的 | 久久er99精品| 不卡av在线免费观看| 69堂成人精品免费视频| 中文字幕一区二区视频| 麻豆一区二区三区| 在线观看免费亚洲| 国产精品视频观看| 麻豆91免费看| 3d动漫精品啪啪一区二区竹菊| 欧美国产精品劲爆| 久久不见久久见免费视频1 | 国产高清在线观看免费不卡| 青娱乐精品视频| 成人h精品动漫一区二区三区| 3atv在线一区二区三区| 亚洲女与黑人做爰| 成人精品高清在线| 国产日产欧美精品一区二区三区| 日韩 欧美一区二区三区| av高清不卡在线| 久久精品一区蜜桃臀影院| 日本成人超碰在线观看| 欧美日韩免费高清一区色橹橹| 国产精品国产三级国产| 国产精品1区二区.| 精品国产成人在线影院| 麻豆精品一区二区三区| 91精品中文字幕一区二区三区| 性感美女久久精品| 欧美日韩国产综合一区二区三区| 亚洲品质自拍视频| 一本久道久久综合中文字幕| 中文字幕中文字幕在线一区| 国产馆精品极品| 国产亚洲精品福利| www.亚洲在线| 国产精品美女久久久久久久久久久 | 中文字幕一区二区三区视频| 国产激情一区二区三区| 国产欧美精品在线观看| 成人三级伦理片| 亚洲欧美电影一区二区| 欧美性淫爽ww久久久久无| 亚洲国产综合色| 欧美久久久久久久久久| 蜜桃视频在线观看一区| 2020日本不卡一区二区视频| 丁香一区二区三区| 亚洲男女一区二区三区| 欧美日韩夫妻久久| 久久超碰97人人做人人爱| 中文字幕乱码久久午夜不卡| av亚洲产国偷v产偷v自拍| 日韩美女视频19| 欧美午夜精品一区二区蜜桃| 麻豆国产欧美日韩综合精品二区| 久久一二三国产| 99视频精品在线| 亚洲成人一区在线| www久久精品| 色综合天天综合给合国产| 同产精品九九九| 2020国产精品| 色欧美片视频在线观看在线视频| 天堂在线亚洲视频| 欧美高清在线视频| 欧美日韩成人在线一区| 国产精品自产自拍| 一区二区高清免费观看影视大全| 日韩一级成人av| 成人sese在线| 青青草国产成人av片免费| 久久久精品国产免大香伊| 91久久一区二区| 国模套图日韩精品一区二区| 综合av第一页| 精品国产百合女同互慰| 91福利在线播放| 国产精品一区二区三区四区| 一卡二卡三卡日韩欧美| 久久青草欧美一区二区三区| 欧美性色综合网| av午夜一区麻豆| 国产在线一区二区| 亚洲国产美国国产综合一区二区| 久久亚洲二区三区| 欧美福利电影网| 91美女精品福利| 国产不卡免费视频| 久久爱www久久做| 午夜精品123| 亚洲精品成人a在线观看| 国产精品网站一区| 亚洲精品一区二区三区影院| 欧美日韩国产123区| 色综合天天综合| 播五月开心婷婷综合| 国内精品久久久久影院一蜜桃| 亚洲.国产.中文慕字在线| 亚洲四区在线观看| 日本一区二区视频在线| 久久综合久久鬼色中文字| 日韩三级视频在线观看| 欧美日韩国产精选| 精品视频全国免费看| 91丝袜美腿高跟国产极品老师 | 午夜精品免费在线观看| 亚洲欧洲色图综合| 国产日产精品一区| 欧美国产精品一区| 中文子幕无线码一区tr| 国产欧美精品一区二区三区四区 | 精品国产欧美一区二区| 日韩午夜激情免费电影| 日韩午夜三级在线| 欧美精品一区二区在线观看| 日韩精品一区二区三区视频在线观看| 在线不卡中文字幕| 欧美一区二区视频免费观看| 777a∨成人精品桃花网| 91精品国产色综合久久久蜜香臀| 欧美福利视频一区| 欧美成人精品3d动漫h| 日韩视频免费观看高清完整版在线观看 | 天堂成人国产精品一区| 午夜在线成人av| 免费成人av在线| 国产激情视频一区二区三区欧美| 国产91精品久久久久久久网曝门| 成人性色生活片免费看爆迷你毛片| 成人福利电影精品一区二区在线观看 | 亚洲成a人片综合在线| 日韩一区精品视频| 六月丁香婷婷久久| 国产成人免费网站| 99麻豆久久久国产精品免费优播| 久久久久久97三级| 国产精品久久久久久久久果冻传媒| 国产精品女主播av| 一区二区三区视频在线观看| 日韩精品国产欧美| 国产美女久久久久| 色94色欧美sute亚洲13| 91麻豆精品国产无毒不卡在线观看| 欧美电影免费观看高清完整版| 中文字幕不卡的av| 午夜精品福利在线| 国产一区二区美女诱惑| 欧美性色欧美a在线播放| 久久综合九色综合欧美98| 亚洲人妖av一区二区| 日韩av午夜在线观看| 成人毛片在线观看| 制服丝袜av成人在线看| 日本一区二区三区国色天香| 亚洲国产裸拍裸体视频在线观看乱了| 精久久久久久久久久久| 欧美三级日韩三级| 欧美国产精品专区| 日韩av在线播放中文字幕| 91欧美一区二区| 欧美精品一区二区三区在线播放| 亚洲资源中文字幕| 成人黄色免费短视频| 欧美一区二区三区免费视频| 日韩毛片精品高清免费| 美女免费视频一区二区| 色综合久久天天综合网| 久久婷婷一区二区三区| 三级欧美在线一区| 色综合久久综合中文综合网| 久久久久成人黄色影片| 丝袜亚洲精品中文字幕一区| 成人高清视频在线| 久久免费看少妇高潮| 亚洲国产欧美在线人成| voyeur盗摄精品| 精品欧美一区二区久久| 亚洲午夜久久久| 日本高清不卡一区| 国产精品免费观看视频| 国产福利精品一区| 欧美一区二区成人| 成人国产视频在线观看| 日韩你懂的电影在线观看| 日韩avvvv在线播放| 欧美视频一区在线| 一区二区三区在线免费| 99久久综合99久久综合网站| 国产人成亚洲第一网站在线播放 | 日韩免费电影网站| 午夜电影久久久| 欧美视频精品在线| 亚洲尤物视频在线| 欧美在线一区二区三区| 亚洲曰韩产成在线| 欧美体内she精高潮| 亚洲成av人片一区二区三区|