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

📄 physicaladdress.h

📁 自己在wince的环境下做的一移动数字电视驱动
💻 H
字号:
#ifndef __PHYSICALADDRESS_H__
#define __PHYSICALADDRESS_H__

#include <Windows.h>
#include <CEDDK.h>


template<class ACCESSTYPE> class cPhysicalAddress
{
protected:
	DWORD mdwPhysicalAddress;
	DWORD mdwSize;
	
	ACCESSTYPE *mpVirtualAddress;
	
public:
	cPhysicalAddress()
	:mdwPhysicalAddress(0)
	,mdwSize(0)
	,mpVirtualAddress(NULL)
	{
	}
	
	cPhysicalAddress(DWORD dwPhysicalAddress, DWORD dwSize=sizeof(ACCESSTYPE))
	:mdwPhysicalAddress(dwPhysicalAddress)
	,mdwSize(dwSize)
	,mpVirtualAddress(NULL)
	{
		ASSERT(mdwPhysicalAddress);
		Open();
	};
	
	virtual ~cPhysicalAddress()
	{
		Close();
	};
	
	
	// 坷滚肺爹且 利寸茄 楷魂磊啊 迭洒 绝绢辑, 快急 []甫 捞侩秦焊磊
	ACCESSTYPE &operator[](unsigned int offset)const
	{
		return mpVirtualAddress[offset];
	};
	
	DWORD VirtualAddress(void)const
	{
		return (DWORD)mpVirtualAddress;
	};
	
	DWORD VirtualAddress(int Offset)const
	{
		return ((DWORD)mpVirtualAddress)+Offset;
	};
	
	DWORD PhysicalAddress(void)const
	{
		return mdwPhysicalAddress;
	}
	
	DWORD PhysicalAddress(int Offset)const
	{
		return mdwPhysicalAddress+Offset;
	}
	
	DWORD Size(void)const
	{
		return mdwSize;
	};
	
	BOOL IsAvailable(void)
	{
		return mpVirtualAddress?TRUE:FALSE;
	};
	
public:
	virtual BOOL Open(void)
	{
		if( NULL==mpVirtualAddress )
		{
			PHYSICAL_ADDRESS PhysicalAddress={mdwPhysicalAddress, 0};
			PVOID pVirtualAddress=::MmMapIoSpace(PhysicalAddress, mdwSize, FALSE);
			
			if( pVirtualAddress )
			{
				mpVirtualAddress=(ACCESSTYPE *)pVirtualAddress;
				
				///::printf("cPhysicalAddress %08x %08x\r\n", mdwPhysicalAddress, mpVirtualAddress);
				return TRUE;
			}
			
			::printf("[arc][FAIL]cPhysicalAddress::Open\r\n");
			return FALSE;
		}
		
		::printf("[arc][FAIL]cPhysicalAddress::Already Open\r\n");
		return FALSE;
	};
	
	virtual BOOL Open(DWORD dwPhysicalAddress, DWORD dwSize=sizeof(ACCESSTYPE))
	{
		mdwPhysicalAddress=dwPhysicalAddress;
		mdwSize=dwSize;
		
		return Open();
	};
	
	
	virtual BOOL Close(void)
	{
		if( mpVirtualAddress )
		{
			::MmUnmapIoSpace(mpVirtualAddress, mdwSize);
			mpVirtualAddress=NULL;
		}
		
		return FALSE;
	};
};

#endif//__PHYSICALADDRESS_H__

⌨️ 快捷键说明

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