亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一区二区视频免费在线观看| 久久国产麻豆精品| 欧美国产禁国产网站cc| 久久亚洲综合色一区二区三区 | 色妹子一区二区| 不卡电影免费在线播放一区| 国产精品456| 国产成人精品一区二区三区四区 | 一区二区三区国产豹纹内裤在线| 国产婷婷精品av在线| 精品久久免费看| 精品国内二区三区| 26uuu亚洲综合色| 久久久无码精品亚洲日韩按摩| 精品国产免费人成在线观看| 久久日一线二线三线suv| 精品1区2区在线观看| 久久精品亚洲一区二区三区浴池| 久久一区二区三区国产精品| 国产日本欧洲亚洲| 中文字幕一区日韩精品欧美| 亚洲精品国产视频| 亚洲777理论| 日本在线观看不卡视频| 久久草av在线| 成人av在线一区二区三区| 国产激情一区二区三区| 色综合色综合色综合| 色婷婷综合久色| 欧美日韩视频在线观看一区二区三区 | 狠狠色丁香婷婷综合| 国产一区二区三区免费播放| 成人黄动漫网站免费app| 91小视频免费观看| 欧美麻豆精品久久久久久| 日韩精品资源二区在线| 国产欧美日韩麻豆91| 一区二区三区蜜桃网| 日本系列欧美系列| 美女爽到高潮91| 成人精品一区二区三区四区| 一本大道久久a久久综合| 欧美午夜在线一二页| 欧美一区二区三区在线观看 | 狠狠狠色丁香婷婷综合激情| 成人av集中营| 欧美老女人在线| 久久久噜噜噜久久中文字幕色伊伊| 国产精品少妇自拍| 亚洲第一激情av| 国内国产精品久久| 91国内精品野花午夜精品| 日韩欧美二区三区| 亚洲四区在线观看| 免费精品99久久国产综合精品| 粉嫩aⅴ一区二区三区四区| 欧美优质美女网站| 久久久一区二区三区捆绑**| 亚洲黄色av一区| 国产一区二区美女诱惑| 欧美又粗又大又爽| 国产欧美日产一区| 亚洲一区二区三区爽爽爽爽爽| 国产一区二区三区观看| 欧美天堂一区二区三区| 久久精品人人做人人综合| 亚洲午夜一区二区| 高清在线成人网| 欧美成人猛片aaaaaaa| 亚洲另类在线视频| 国产精品系列在线播放| 欧美日韩视频一区二区| 1区2区3区精品视频| 久久97超碰国产精品超碰| 色偷偷久久一区二区三区| 国产欧美一区二区精品性色| 爽爽淫人综合网网站| 99re成人精品视频| 久久无码av三级| 日韩中文字幕不卡| 色综合亚洲欧洲| 中国色在线观看另类| 日本成人在线视频网站| 欧美性猛交xxxx乱大交退制版| 国产丝袜欧美中文另类| 日本中文一区二区三区| 欧美综合一区二区| 亚洲日本乱码在线观看| 风流少妇一区二区| 日韩精品一区二区三区视频播放 | 亚洲成人一区二区| gogogo免费视频观看亚洲一| 久久久久久久久99精品| 青草国产精品久久久久久| 欧美日韩国产首页| 午夜天堂影视香蕉久久| 91成人国产精品| 亚洲欧洲中文日韩久久av乱码| 国产宾馆实践打屁股91| 久久久久青草大香线综合精品| 美日韩一区二区三区| 337p亚洲精品色噜噜狠狠| 天天综合色天天综合色h| 在线观看国产一区二区| 亚洲免费av网站| 色悠久久久久综合欧美99| 亚洲美女淫视频| 色综合视频在线观看| 亚洲精品福利视频网站| 色综合咪咪久久| 一区二区成人在线| 在线精品视频一区二区三四 | 91福利国产精品| 有坂深雪av一区二区精品| 欧美体内she精视频| 亚洲一区在线观看免费观看电影高清 | 中文字幕av一区二区三区高 | 欧美绝品在线观看成人午夜影视| 一区二区视频在线| 在线区一区二视频| 亚洲午夜免费福利视频| 欧美日产在线观看| 青青草国产精品亚洲专区无| 欧美不卡一区二区| 国产精品亚洲人在线观看| 亚洲国产成人午夜在线一区| 成人国产免费视频| 亚洲日韩欧美一区二区在线| 欧美色网一区二区| 久88久久88久久久| 欧美激情一区在线观看| 一本一道综合狠狠老| 午夜成人免费电影| 日韩一区二区电影| 丁香婷婷综合网| 一区二区三区四区激情| 91精品国产综合久久久久久久| 国产一区二区三区久久悠悠色av| 日本一区二区三区在线不卡 | 26uuu国产电影一区二区| 国产成人精品影院| 一区二区三区在线高清| 欧美精品 国产精品| 国内成+人亚洲+欧美+综合在线| 国产精品丝袜在线| 欧美视频中文一区二区三区在线观看| 亚洲午夜av在线| 国产午夜一区二区三区| 91麻豆高清视频| 蜜臀久久99精品久久久久宅男 | 久久99蜜桃精品| 一区在线中文字幕| 欧美日韩国产另类不卡| 国产精品一二三| 亚洲一区在线观看视频| 久久久久久久久伊人| 一本久道久久综合中文字幕| 美女脱光内衣内裤视频久久影院| 国产精品网站在线观看| 欧美日韩免费观看一区三区| 国产v综合v亚洲欧| 亚洲在线免费播放| 国产亚洲成年网址在线观看| 欧美日韩亚洲综合在线 | 国产成人av电影在线| 亚洲宅男天堂在线观看无病毒| 久久蜜臀精品av| 欧美丰满少妇xxxxx高潮对白| 国产激情91久久精品导航| 午夜影院久久久| 国产精品视频一区二区三区不卡| 欧美一区日韩一区| 91在线播放网址| 国产一区二区伦理| 日韩激情视频在线观看| 亚洲欧洲国产专区| 欧美精品一区二区三区视频| 在线视频国产一区| 成人不卡免费av| 激情五月播播久久久精品| 亚洲国产美女搞黄色| 中文乱码免费一区二区| 日韩精品一区二区三区视频播放| 欧美视频中文一区二区三区在线观看 | 国模少妇一区二区三区| 一区二区三区免费| 亚洲四区在线观看| 国产精品久久久一区麻豆最新章节| 欧美一区二区三区免费在线看| 色综合久久天天| 成人av在线影院| 盗摄精品av一区二区三区| 蜜桃视频在线观看一区二区| 天堂一区二区在线| 亚洲国产你懂的| 亚洲综合丝袜美腿| 亚洲色大成网站www久久九九| 欧美激情一区二区| 久久久一区二区三区捆绑**| www激情久久|