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

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

?? gpio.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
//  Copyright(C) Renesas Technology Corp. 2002-2003. All rights reserved.
//
// GPIO driver for ITS-DS7
//
// FILE     : GPIO.C
// CREATED  : 2002.06.27
// MODIFIED : 2003.06.20
// AUTHOR   : Renesas Technology Corp.
// HARDWARE : RENESAS ITS-DS7
// HISTORY  : 
//            2003.06.20
//            - Created release code.
//              (based on GPIO driver for 
//                        ITS-DS4 Source Kit Ver.1.2.0 for WCE 4.2)
//

#include <windows.h>
#include <types.h>
#include <memory.h>
#include <nkintr.h>
#include <excpt.h>
#include "oalintr.h"
#include "platform.h"
#include "sh7770.h"
#include "gpio.h"
#include "gpiodbg.h"
#include "drv_glob.h"
#include "ioctl_its_ds7.h"

#define GPIO_DRIVER_KEY		TEXT("Drivers\\BuiltIn\\GPIO")
#define ENABLE_GPIO_MODE	TEXT("ENABLE_GPIO_MODE")
#define LOCK_PORT_GPIO0		TEXT("LOCK_PORT_GPIO0")
#define LOCK_PORT_GPIO1		TEXT("LOCK_PORT_GPIO1")
#define LOCK_PORT_GPIO2		TEXT("LOCK_PORT_GPIO2")
#define LOCK_PORT_GPIO3		TEXT("LOCK_PORT_GPIO3")

VOID EventHandler();

HANDLE	hEvent[4][32];

BOOL __stdcall
DllEntry(
	HINSTANCE	hinstDll,			// @param Instance pointer.
	DWORD		dwReason,			// @param Reason routine is called.
	LPVOID		lpReserved			// @param system parameter.
	)
{
	switch( dwReason ){
		case DLL_PROCESS_ATTACH :
			DEBUGREGISTER( hinstDll );
			break;
		case DLL_PROCESS_DETACH :
			break;
		default :
			break;
	}
	return TRUE;
}

//	@func HANDLE | GPI_Init | device initialization routine
//	@parm DWORD  |  Index   | info passed to RegisterDevice
//	@rdesc	Returns a HANDLE which will be passed to Open & Deinit or NULL if
//			unable to initialize to driver.
HANDLE
GPI_Init(
	DWORD	Index
	)
{
	PGPIO_DRIVER_INFO	pGpio;
    DWORD	 			dwType;
	HKEY				hKey;
    DWORD	 			dwModeSize = sizeof(pGpio->dwMode);
    DWORD	 			dwLockSize = sizeof(pGpio->Lock);
	DWORD				dwRet;

	DWORD				dwGpioNum;
	ULONG				ulRegSize;

	pGpio = VirtualAlloc(
					NULL,
					sizeof ( GPIO_DRIVER_INFO ),
					MEM_COMMIT,
					PAGE_READWRITE
					);
	if ( pGpio == NULL ){
		goto ALLOCFAILED;
	}

	pGpio -> pvBase = VirtualAlloc(
						NULL,
						GPIO_REGSIZE,
						MEM_RESERVE, 
						PAGE_NOACCESS);
	if ( pGpio -> pvBase == NULL ){
		goto ALLOCFAILED;
	}
	if ( !VirtualCopy(
					(PVOID)pGpio -> pvBase, 
					(PVOID)GPIO_REGBASE,
					GPIO_REGSIZE,
					PAGE_READWRITE|PAGE_NOCACHE) 
		){
		goto ALLOCFAILED;
	}

	ulRegSize = 0; 

	for (dwGpioNum =0; dwGpioNum < 4; dwGpioNum++){

		pGpio -> IOINTSEL[dwGpioNum]  = pGpio -> pvBase + GPIO_IOINTSEL_OFFSET + ulRegSize;
		pGpio -> INOUTSEL[dwGpioNum]  = pGpio -> pvBase + GPIO_INOUTSEL_OFFSET + ulRegSize;
		pGpio -> OUTDT[dwGpioNum]  = pGpio -> pvBase + GPIO_OUTDT_OFFSET + ulRegSize;
		pGpio -> INDT[dwGpioNum]  = pGpio -> pvBase + GPIO_INDT_OFFSET + ulRegSize;
		pGpio -> INTDT[dwGpioNum]  = pGpio -> pvBase + GPIO_INTDT_OFFSET + ulRegSize;
		pGpio -> INTCLR[dwGpioNum]  = pGpio -> pvBase + GPIO_INTCLR_OFFSET + ulRegSize;
		pGpio -> INTMSK[dwGpioNum]  = pGpio -> pvBase + GPIO_INTMSK_OFFSET + ulRegSize;
		pGpio -> MSKCLR[dwGpioNum]  = pGpio -> pvBase + GPIO_MSKCLR_OFFSET + ulRegSize;
		pGpio -> POSNEG[dwGpioNum]  = pGpio -> pvBase + GPIO_POSNEG_OFFSET + ulRegSize;
		pGpio -> EDGLEVEL[dwGpioNum]  = pGpio -> pvBase + GPIO_EDGLEVEL_OFFSET + ulRegSize;
		pGpio -> FILONOFF[dwGpioNum]  = pGpio -> pvBase + GPIO_FILONOFF_OFFSET + ulRegSize;
		ulRegSize += GPIO_REGSIZE/4; 
	}

    dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,GPIO_DRIVER_KEY,0,0,&hKey);
    if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR,(TEXT("GPIO driver : RegOpenKeyEx failed\r\n")));
        return NULL;
    }

    dwRet = RegQueryValueEx(hKey,ENABLE_GPIO_MODE,NULL,&dwType,(PUCHAR)&(pGpio->dwMode),&dwModeSize);
     if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GPIO driver : RegQueryValueEx failed\r\n")));
        return NULL;
    }

    dwRet = RegQueryValueEx(hKey,LOCK_PORT_GPIO0,NULL,&dwType,(PUCHAR)&(pGpio->Lock[0]),&dwLockSize);
     if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GPIO driver : RegQueryValueEx failed\r\n")));
        return NULL;
    }

    dwRet = RegQueryValueEx(hKey,LOCK_PORT_GPIO1,NULL,&dwType,(PUCHAR)&(pGpio->Lock[1]),&dwLockSize);
     if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GPIO driver : RegQueryValueEx failed\r\n")));
        return NULL;
    }

    dwRet = RegQueryValueEx(hKey,LOCK_PORT_GPIO2,NULL,&dwType,(PUCHAR)&(pGpio->Lock[2]),&dwLockSize);
     if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GPIO driver : RegQueryValueEx failed\r\n")));
        return NULL;
    }

    dwRet = RegQueryValueEx(hKey,LOCK_PORT_GPIO3,NULL,&dwType,(PUCHAR)&(pGpio->Lock[3]),&dwLockSize);
     if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR, (TEXT("GPIO driver : RegQueryValueEx failed\r\n")));
        return NULL;
    }  
    

    dwRet = RegCloseKey(hKey);

	for (dwGpioNum = 0; dwGpioNum < 4; dwGpioNum++){
		pGpio->dwLock[dwGpioNum] = pGpio->Lock[dwGpioNum];
	}		

	pGpio -> hThread = CreateThread(
						NULL,
						0,
						(LPTHREAD_START_ROUTINE)EventHandler,
						pGpio,
						0,
						NULL
						);
	if ( pGpio -> hThread == NULL ){
		goto ALLOCFAILED;
	}

	return (HANDLE)pGpio;

ALLOCFAILED:
	if ( pGpio )
		VirtualFree(pGpio, sizeof(GPIO_DRIVER_INFO), MEM_DECOMMIT);
	if ( pGpio -> pvBase )
		VirtualFree((PVOID)pGpio -> pvBase, 0, MEM_RELEASE);
	if ( pGpio -> hThread )
		CloseHandle( pGpio -> hThread );
	return NULL;
}

//	@func BOOL | GPI_Deinit | device deinitialization routine
//	@parm ??
//	@rdesc	Returns TRUE for success, FALSE for failure
BOOL
GPI_Deinit(
	PGPIO_DRIVER_INFO	pGpio
	)
{
	CloseHandle( pGpio -> hThread );
	VirtualFree((PVOID)pGpio -> pvBase, 0, MEM_RELEASE);
	VirtualFree(pGpio, sizeof(GPIO_DRIVER_INFO), MEM_DECOMMIT);

	return TRUE;
}

//	@func HANDLE | GPI_Open    | device open routine
//	@parm DWORD  | dwData      | value returned from GPI_Init call
//	@parm DWORD  | dwAccess    | requested access (combination of GENERIC_READ
//								 and GENERIC_WRITE)
//	@parm DWORD  | dwShareMode | requested share mode (combination of 
//								 FILE_SHARE_READ and FILE_SHARE_WRITE)
//	@rdesc	Returns a HANDLE which will be passed to Read, Write, etc or NULL if
//			unable to open device.
HANDLE
GPI_Open(
	DWORD	dwData,
	DWORD	dwAccess,
	DWORD	dwShareMode
	)
{
	PGPIO_OPEN_INFO pOpen;

	pOpen = LocalAlloc(LPTR,sizeof(GPIO_OPEN_INFO));
	if( pOpen == NULL ){
		return NULL;
	}
	pOpen -> dwAccess = dwAccess;
	pOpen -> dwShareMode = dwShareMode;
	pOpen -> pGPIOHandle = (PGPIO_DRIVER_INFO)dwData;

	return (HANDLE)pOpen;
}

//	@func BOOL | GPI_Close | device close routine
//	@parm ???
//	@rdesc	Returns TRUE for success, FALSE for failure
BOOL
GPI_Close(
	PGPIO_OPEN_INFO pOpen
	)
{
	LocalFree( pOpen );
	return TRUE;
}

//	@func DWORD  | GPI_Read | device write routine
//	@parm DWORD  | dwData   | value returned from GPI_Open call
//	@parm LPVOID | pBuf     | buffer to receive data
//	@parm DWORD  | dwLen    | maximum length to read
//	@rdesc	Returns 0 for end of file
DWORD
GPI_Read(
	DWORD	dwData,
	LPVOID	pBuf,
	DWORD	dwLen
	)
{
	return 0;
}

//	@func DWORD   | GPI_Write | device write routine
//	@parm DWORD   | dwData    | value returned from GPI_Open call
//	@parm LPCVOID | pBuf      | buffer containing data
//	@parm DWORD   | dwLen     | data length to write
//	@rdesc	Returns 0 for end of file
DWORD
GPI_Write(
	DWORD	dwData,
	LPCVOID	pBuf,
	DWORD	dwLen
	)
{
	return 0;
}

//	@func DWORD | GPI_Seek | device seek routine
//	@parm DWORD | dwData   | value returned from GPI_Open call
//	@parm long  | lPos     | position to seek to
//	@parm DWORD | dwType   | FILE_BEGIN, FILE_CURRENT, or FILE_END
//	@rdesc	Returns current position relative to start of file, or -1 on error
DWORD
GPI_Seek(
	DWORD	dwData,
	long	lPos,
	DWORD	dwType
	)
{
	return (DWORD)-1;
}

//	@func VOID | GPI_PowerUp | device powerup routine
//	@comm	Called power up device
VOID
GPI_PowerUp(
	DWORD	dwData
	)
{
}

//	@func VOID | GPI_PowerDown | device powerup routine
//	@comm	Called power down device
VOID
GPI_PowerDown(
	DWORD	dwData
	)
{
}

//	@func BOOL   | GPI_IOControl | Device IO control routine
//	@parm DWORD  | dwData        | value returned from GPI_Open call
//	@parm DWORD  | dwCode        | io control code to be performed
//	@parm PVOID  | pBufIn        | input data to the device
//	@parm DWORD  | dwLenIn       | number of bytes being passed in
//	@parm PVOID  | pBufOut       | output data from the device
//	@parm DWORD  | dwLenOut      | maximum number of bytes to receive from device
//	@parm PDWORD | pdwActualOut  | actual number of bytes received from device
//	@rdesc	Returns TRUE for success, FALSE for failure
BOOL
GPI_IOControl(
	DWORD	dwData,
	DWORD	dwCode,
	PVOID	pBufIn,
	DWORD	dwLenIn,
	PVOID	pBufOut,
	DWORD	dwLenOut,
	PDWORD	pdwActualOut
	)
{
	DWORD				dwRet;
	PGPIO_OPEN_INFO		pOpen = (PGPIO_OPEN_INFO)dwData;
	PGPIO_DRIVER_INFO	pGpio = pOpen -> pGPIOHandle;
	PGPIO_PORT_INFO		pPort = (PGPIO_PORT_INFO)pBufIn;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉视频mp4| 成人免费在线视频| 亚洲国产美女搞黄色| 99久久伊人网影院| 欧美中文字幕一区二区三区亚洲| 久久久久99精品一区| 亚洲成人久久影院| 91麻豆精东视频| 日本一区二区三区国色天香 | 白白色 亚洲乱淫| 久久免费偷拍视频| 免费人成在线不卡| 欧美高清视频在线高清观看mv色露露十八| 久久精品网站免费观看| 老司机免费视频一区二区| 欧美日韩一区视频| 国产日韩欧美激情| 亚洲国产视频在线| 国内欧美视频一区二区 | 亚洲日本在线看| 精品影院一区二区久久久| 欧美日本乱大交xxxxx| 亚洲裸体在线观看| 日本道在线观看一区二区| 中文字幕高清不卡| 懂色av一区二区夜夜嗨| 国产精品美女一区二区三区| 国产精品影视天天线| 国产精品婷婷午夜在线观看| 成人免费视频视频在线观看免费 | www激情久久| 国产盗摄精品一区二区三区在线| 精品奇米国产一区二区三区| 国产精品中文字幕一区二区三区| 亚洲精品一区二区三区香蕉| 国产专区综合网| 国产精品久久久久四虎| 91蝌蚪porny成人天涯| 亚洲成a人v欧美综合天堂| 欧美一区二区三区男人的天堂| 蜜桃视频一区二区三区在线观看| 精品乱码亚洲一区二区不卡| 成人97人人超碰人人99| 亚洲一区二区精品视频| 精品少妇一区二区三区在线视频| 成人涩涩免费视频| 午夜精品国产更新| 久久久精品国产免大香伊 | 99re视频精品| 亚洲成人1区2区| 欧美国产97人人爽人人喊| 欧美色偷偷大香| 国产精品自拍三区| 日精品一区二区| 国产精品久久久久国产精品日日| 欧美一区二区三区视频在线| 99久久99久久精品免费看蜜桃| 青青草精品视频| 亚洲裸体xxx| 中文av一区二区| 日韩你懂的在线播放| 在线观看不卡视频| 不卡影院免费观看| 激情五月激情综合网| 亚洲国产精品综合小说图片区| 国产精品国产三级国产普通话三级| 日韩视频中午一区| 欧美日韩国产精品成人| 91免费精品国自产拍在线不卡| 久久国产福利国产秒拍| 亚洲国产欧美另类丝袜| 亚洲自拍都市欧美小说| 国产精品系列在线| 国产亚洲一区二区三区四区 | 亚洲国产欧美日韩另类综合| 中文字幕国产一区| 国产人成亚洲第一网站在线播放| 欧美一二三区在线观看| 91精品国产一区二区| 久久综合久久综合久久| 欧美久久一二区| 色狠狠综合天天综合综合| 奇米精品一区二区三区在线观看一| 亚洲精品一区在线观看| 欧美久久久影院| 懂色av一区二区三区蜜臀| 日韩精品一区在线观看| 色菇凉天天综合网| 91视频.com| 成人免费看黄yyy456| 粉嫩蜜臀av国产精品网站| 精品午夜一区二区三区在线观看| 青娱乐精品视频在线| 久久久高清一区二区三区| 日本一区二区免费在线| 国产亚洲一二三区| 国产精品久久久久久久久图文区 | 国产精品视频yy9299一区| 久久精品国产色蜜蜜麻豆| 欧美日韩国产一区| 美女一区二区视频| 久久久777精品电影网影网 | 午夜视频在线观看一区二区 | av一区二区三区四区| 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区影院| 色婷婷国产精品综合在线观看| 国产亚洲自拍一区| 欧美日韩中字一区| 极品美女销魂一区二区三区| 亚洲影视在线播放| 日韩一区二区在线免费观看| 9i看片成人免费高清| 热久久一区二区| 亚洲欧美成aⅴ人在线观看| 欧美一级片在线看| 91浏览器在线视频| 精品一区二区三区影院在线午夜| 一区二区三区欧美视频| 亚洲精品一区二区三区精华液 | 最新成人av在线| 91精品国产色综合久久| 日本韩国欧美在线| 国产美女在线观看一区| 秋霞av亚洲一区二区三| 中文字幕在线一区二区三区| 欧美电视剧在线观看完整版| 色诱视频网站一区| 国产精品66部| 日韩1区2区3区| ww亚洲ww在线观看国产| 欧美精选在线播放| 91女人视频在线观看| 国产精品一区在线观看你懂的| 日日摸夜夜添夜夜添精品视频| 亚洲色图色小说| 国产欧美一区二区在线| 欧美大片日本大片免费观看| 欧美日韩精品一区二区三区| 日本一不卡视频| 国产精品国产精品国产专区不蜜| 日韩免费看网站| 在线播放中文一区| 97se亚洲国产综合自在线观| 国产iv一区二区三区| 久久精品国产99国产| 日韩1区2区日韩1区2区| 一区二区三区在线播放| 亚洲精品日韩专区silk | 日本伦理一区二区| 国产成人精品影视| 国产大陆a不卡| 九九久久精品视频 | 国产午夜一区二区三区| 精品国产凹凸成av人导航| 欧美军同video69gay| 欧美日韩dvd在线观看| 成人黄色av电影| 成人三级在线视频| 国产成人av电影在线| 国产一级精品在线| 日本最新不卡在线| 日韩成人伦理电影在线观看| 亚洲444eee在线观看| 一区二区三区美女| 亚洲综合av网| 亚洲最大的成人av| 亚洲在线视频一区| 午夜精品久久久久影视| 色婷婷亚洲精品| 丰满亚洲少妇av| 国产欧美中文在线| www.视频一区| 一区二区久久久| 成人av在线一区二区| 亚洲日本电影在线| 在线看一区二区| 日韩专区在线视频| 久久色.com| 97久久精品人人爽人人爽蜜臀 | 亚洲精品中文在线观看| 国产精品成人一区二区三区夜夜夜| 日韩三级电影网址| 日韩三级精品电影久久久| 久久视频一区二区| 国产女主播在线一区二区| 亚洲色图视频网站| 亚洲裸体xxx| 日韩1区2区3区| 麻豆成人免费电影| 丁香激情综合国产| 91免费观看在线| 欧美丰满少妇xxxbbb| 色婷婷综合久久久久中文| 看电影不卡的网站| 日韩国产在线一| 国产二区国产一区在线观看| 91免费在线视频观看| 在线播放视频一区| 亚洲国产经典视频|