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

📄 system.c

📁 CIRRUS 93XX系列windows mobile 6.0 BSP
💻 C
字号:

#include <windows.h>
#include <windev.h>
#include <types.h>
#include <winnt.h>

#include <nkintr.h>
#include <oalintr.h>
#include <clocks.h>
#include <hwdefs.h>
#include <haluser.h>

#define MAX_BUFFER 1024

static BOOL  g_bDeviceOpened=FALSE;
static BOOL  g_bRuning=TRUE;
static HANDLE 	g_hEvent;

static BYTE gBuffer[MAX_BUFFER];


BOOL WINAPI
DllMain(HINSTANCE DllInstance, DWORD Reason, LPVOID Reserved)
{
    switch(Reason) {
    case DLL_PROCESS_ATTACH:
        DEBUGMSG(ZONE_INIT, (TEXT("CIR: DLL_PROCESS_ATTACH\r\n")));
	    DisableThreadLibraryCalls((HMODULE) DllInstance);
        return TRUE;

    case DLL_PROCESS_DETACH:
        DEBUGMSG(ZONE_INIT, (TEXT("CIR: DLL_PROCESS_DETACH\r\n")));
        break;
    }
    return TRUE;
}   // CIREntry


DWORD
CIR_Init(
    DWORD dwContext
    )
{
    DEBUGMSG(ZONE_INIT,(TEXT("CIR: CIR_Init\r\n")));

	return (DWORD)&g_bDeviceOpened;
}   // CIR_Init


BOOL
CIR_Close(
    DWORD Handle
    )
{
    DEBUGMSG(ZONE_IO, (TEXT("CIR: CIR_Close\r\n")));

	g_bDeviceOpened=FALSE;

	InterruptDisable(SYSINTR_PIO_CIR);

    return TRUE;
}   // CIR_Close



BOOL
CIR_Deinit(
    DWORD dwContext     // pointer to the per disk structure
    )
{
    return TRUE;
}   // CIR_Deinit

//
// Returns handle value for the open instance.
//
DWORD
CIR_Open(
    DWORD dwData,
    DWORD dwAccess,
    DWORD dwShareMode
    )
{
	if( g_bDeviceOpened )
		return 0;
	else
		g_bDeviceOpened=TRUE;

	g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	
	if( g_hEvent == NULL )
	{
		RETAILMSG(1,(L" CIR failed to create event\r\n!"));
		return 0;
	}

	if ( !InterruptInitialize(SYSINTR_PIO_CIR, g_hEvent, NULL, 0) )
	{
		RETAILMSG(1,(L"CIR failed to initialize interrupt. %d %d\r\n", SYSINTR_PIO_CIR, GetLastError( ) ));
		return 0;
	}
     return (DWORD)&g_bDeviceOpened;
}   // CIR_Open


//
// I/O Control function - responds to info, read and write control codes.
// The read and write take a scatter/gather list in pInBuf
//
BOOL
CIR_IOControl(
    DWORD Handle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
    return FALSE;
}   // CIR_IOControl


DWORD CIR_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
	if ( WAIT_OBJECT_0 == WaitForSingleObject(g_hEvent,1000) )
	{
		KernelIoControl(  IOCTL_HAL_PIO_CIR, 
		  NULL, 
		  0, 
		  pBuffer, 
		  20, 
		  &dwNumBytes
		);
		InterruptDone(SYSINTR_PIO_CIR);
		return dwNumBytes;
	}
	return (DWORD)-1;
}

DWORD CIR_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes){return 0;}
DWORD CIR_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod){return 0;}
void  CIR_PowerUp(void){}
void  CIR_PowerDown(void){}


⌨️ 快捷键说明

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