📄 simpledriver.cpp
字号:
#include <windows.h>
#include <types.h>
#include "BSP.h"
static BYTE g_Tmp=0;
static DWORD g_OpenCount=0;
BOOL InitializeAddresses(VOID);
volatile S3C2440A_IOPORT_REG *v_pIOPregs;
BOOL InitializeAddresses(VOID)
{
BOOL RetValue = TRUE;
/* IO Register Allocation */
v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
if (v_pIOPregs == NULL)
{
ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc failed!\r\n")));
RetValue = FALSE;
}
else
{
if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))
{
ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy failed!\r\n")));
RetValue = FALSE;
}
}
if (!RetValue)
{
if (v_pIOPregs)
{
VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
}
v_pIOPregs = NULL;
}
return(RetValue);
}
BOOL
WINAPI
DllEntry(
HANDLE hInstDll,
DWORD dwReason,
LPVOID lpReserved
)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
RETAILMSG(1, (TEXT("SPL:DLL_PROGRESS_ATTACH.\r\n")));
DisableThreadLibraryCalls((HMODULE) hInstDll);
break;
case DLL_PROCESS_DETACH:
RETAILMSG(1, (TEXT("SPL:DLL_PROGRESS_DETACH.\r\n")));
break;
}
return TRUE;
}
DWORD SPL_Init(DWORD dwContext)
{
RETAILMSG(1, (TEXT("SPL:SPL_Init.\r\n")));
if (!InitializeAddresses())
return (FALSE);
g_Tmp=0;
g_OpenCount=0;
return 1;
}
bool SPL_Deinit(DWORD dwContext)
{
RETAILMSG(1, (TEXT("SPL:SPL_Deinit.\r\n")));
g_Tmp=0;
g_OpenCount=0;
return 1;
}
DWORD SPL_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
RETAILMSG(1, (TEXT("SPL:SPL_Open.\r\n")));
if(g_OpenCount!=0){
RETAILMSG(1, (TEXT("SPL Open failed.\r\n")));
return 0;
}
g_OpenCount++;
return g_OpenCount;
}
BOOL SPL_Close(DWORD hOpenContext)
{
RETAILMSG(1, (TEXT("SPL_Close.\r\n")));
if(g_OpenCount!=0){
g_OpenCount--;
}
return 1;
}
BOOL SPL_IOControl(
DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut
)
{
BOOL RetVal = TRUE;
DWORD dwErr = ERROR_SUCCESS;
RETAILMSG(1, (TEXT("SPL_IOControl.\r\n")));
switch (dwCode) {
case 0:
break;
case 1:
break;
case 2:
break;
default:
RetVal = FALSE;
break;
}
return(RetVal);
}
void SPL_PowerDown(void)
{
RETAILMSG(1, (TEXT("SPL_Power_Up.\r\n")));
}
void SPL_PowerUp(void)
{
RETAILMSG(1, (TEXT("SPL_Power_Down.\r\n")));
}
DWORD SPL_Read(DWORD Handle, LPVOID pBuffer, DWORD Count)
{
uchar *pReadBuffer;
RETAILMSG(1, (TEXT("SPL_Read.\r\n")));
if((pBuffer==NULL)||(Count<=0)){
RETAILMSG(1, (TEXT("SPL_Read parameter is error.\r\n")));
return 0;
}
pReadBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());
*pReadBuffer=g_Tmp;
return 1;
}
DWORD SPL_Write(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
uchar *pWriteBuffer;
RETAILMSG(1, (TEXT("SPL_Write.\r\n")));
if((pBuffer==NULL)||(Count<=0)){
RETAILMSG(1, (TEXT("SPL_Write parameter is error.\r\n")));
return 0;
}
pWriteBuffer=MapPtrToProcess((LPVOID) pBuffer,GetCallerProcess());
g_Tmp= *pWriteBuffer;
return 1;
}
DWORD SPL_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
RETAILMSG(1,(TEXT("SPL_Seek.\r\n")));
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -