⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extkey.cpp

📁 pxa270实验板上的
💻 CPP
字号:
// ExtKey.cpp : 定义 DLL 应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <ceddk.h>
#include "bsp.h"

volatile static DWORD intr_count = 0;
HANDLE gIntrEvent = NULL;


UINT IntrThreadProc(LPVOID);


BOOL WINAPI
DllMain(HANDLE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
{
	switch(dwReason)
	{
	case DLL_PROCESS_ATTACH:
		//RETAILMSG(1, (TEXT("***ExtKEY:DLL_PROCESS_ATTACH\n")));
		break;

	case DLL_THREAD_ATTACH:
		//RETAILMSG(1, (TEXT("***ExtKEY:DLL_THREAD_ATTACH\n")));
		break;
	
	case DLL_THREAD_DETACH:
		//RETAILMSG(1, (TEXT("***ExtKEY:DLL_THREAD_DETACH\n")));
		break;
	
	case DLL_PROCESS_DETACH:
		//RETAILMSG(1, (TEXT("***ExtKEY:DLL_PROCESS_DETACH\n")));
		break;
	}
	return TRUE;
}

DWORD KEY_Init(DWORD dwContext)
{
	RETAILMSG(1, (TEXT("***ExtKEY: KEY_Init\r\n")));
	gIntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	if(gIntrEvent)
	{
		if( InterruptInitialize(SYSINTR_EXTKEY, gIntrEvent, NULL, 0) )
		{
			SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL);
			if( CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)IntrThreadProc, NULL, 0, NULL))
			{
				RETAILMSG(1, (TEXT("***ExtKEY: KEY_Init CreateThread OK\r\n")));
				return TRUE;
			}
		}
		CloseHandle(gIntrEvent);
	}
	RETAILMSG(1, (TEXT("***ExtKEY: KEY_Init fail\r\n")));
	return FALSE;
}

BOOL KEY_Deinit(DWORD hDeviceContext)
{
	RETAILMSG(1, (TEXT("***ExtKEY: KEY_Deinit\r\n")));
	return TRUE;
}

DWORD KEY_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
	RETAILMSG(1, (TEXT("***ExtKEY: KEY_Open\r\n")));
	return TRUE;
}

BOOL KEY_Close(DWORD hOpenContext)
{
	RETAILMSG(1, (TEXT("***ExtKEY: KEY_Close\r\n")));
	return TRUE;
}

BOOL KEY_IOControl(DWORD hOpenContext,
				   DWORD dwCode,
				   PBYTE pBufIn,
				   DWORD dwLenIn,
				   PBYTE pBufOut,
				   DWORD dwLenOut,
				   PDWORD pdwActualOut)
{
	return TRUE;
}

void KEY_PowerDown(DWORD hDeviceContext)
{
	//RETAILMSG(1, (TEXT("***ExtKEY: KEY_PowerDown\n")));
}

void KEY_PowerUp(DWORD hDeviceContext)
{
	//RETAILMSG(1, (TEXT("***ExtKEY: KEY_PowerUp\n")));
}

DWORD KEY_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
	if(Count >= sizeof(DWORD))
	{
		*((PDWORD)pBuffer) = intr_count;
		return sizeof(DWORD);
	}
	
	return 0;
}

DWORD KEY_Seek(DWORD hOpenContext, long Amount, DWORD Type)
{
	return 0;
}

DWORD KEY_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD NumberOfBytes)
{
	if(NumberOfBytes >= sizeof(DWORD))
	{
		intr_count = *((PDWORD)pBuffer);
		return sizeof(DWORD);
	}
	return 0;
}


UINT IntrThreadProc(LPVOID ptr)
{
	while(1)
	{
		WaitForSingleObject(gIntrEvent, INFINITE);
		intr_count++;
		RETAILMSG(1, (TEXT("***ExtKEY: intr_count=%d\r\n"), intr_count));
		Sleep(500);
		InterruptDone(SYSINTR_EXTKEY);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -