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

📄 funcontrol.cpp

📁 wince中工程模式用来测试硬件的驱动是否好用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "storemgr.h"
#include "funlist.h"
#include "ReportDlg.h"
#include "nled.h"
#include "Winuser.h"
#include "Mmsystem.h"


#include "winceKBhook.h"
 extern BOOL ActivateKBHook(HINSTANCE hInstance, HOOKPROC LLKeyboardHookCallbackFunction);
 extern BOOL DeactivateKBHook();


#include "winioctl.h"

 static volatile BULVERDE_GPIO_REG   *g_pGPIORegs  = NULL;
///*Keypad Backlight On*/
//#define IOCTL_NKPDBKL_ON \
//	CTL_CODE(FILE_DEVICE_KEYBOARD, 0x888, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
///*Keypad Backlight Off*/
//#define IOCTL_NKPDBKL_OFF \
//	CTL_CODE(FILE_DEVICE_KEYBOARD, 0x666, METHOD_BUFFERED, FILE_ANY_ACCESS)



static HRIL hRil ;
static HMODULE s_hRILLib ;
static PFRIL_Initialize s_pfRIL_Initialize;
static PFRIL_Deinitialize s_pfRIL_Deinitialize;
static PFRIL_DevSpecific s_pfRIL_DevSpecific;

int  index=0;
#define  MAX_TIT   30
#define  MAX_ERR   100
const TCHAR g_szSearchCardFlag[] = L"SDMemory";
const TCHAR g_szDefaultPartName[] = L"Part00";
const int MAX_PART_NUM = 4;
HWAVEOUT g_phwo;

typedef struct _PARTINFO_LIST
{
	PARTINFO aPartInfo[MAX_PART_NUM];
	int nNumPart;
}PARTINFO_LIST, *PPARTINFO_LIST;




enum tagLED
{
	
#if 0
	GREENOFF,
	REDON,
	REDOFF,
	GREENON,
#endif
	LEDTEST,
	VIBERATERON,
	VIBERATEROFF
};

#ifdef ZTE_P550A#define FILE_DEVICE_BACKLIGHT            0x300#define IOCTL_BKL_BRIGHTSET      CTL_CODE(FILE_DEVICE_BACKLIGHT, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)#endif

struct BKL_LightSet{	BOOL fDirection;	UINT8 steps;};


HANDLE g_hEvent ;
void CALLBACK ResultCallback(DWORD dwCode, HRESULT hrCmdID, const void* lpData, DWORD cbData, DWORD dwParam);
void CALLBACK NotifyCallback(DWORD dwCode, const void* lpData, DWORD cbData, DWORD dwParam);
DWORD dwDevSpecificCommand = 0;
BOOL rilSucess = FALSE;
TCHAR strReturnData[256];
typedef enum
{ 
	ALLWHITE = 0,
	ALLBLACK,
	ALLBLUE,
	ALLGREEN,
	ALLRED,
	
} PALETTE_COLOR_PAGE;


void CALLBACK ResultCallback(DWORD dwCode, HRESULT hrCmdID, const void* lpData, DWORD cbData, DWORD dwParam)
{
	//调用扩展接口的结果
	//TCHAR strInfo[256];
	char *tmpChar = NULL;

	DWORD index =0;
	DWORD size = 0;
	switch (dwCode)
	{
	case RIL_RESULT_OK:
		rilSucess =TRUE;
		switch(dwDevSpecificCommand)
		{
		case RIL_DEVSPECIFICPARAM_GET_VERSION:
			//MessageBox(NULL,_T("版本号"),_T(""),MB_OK);
			SetCursor(LoadCursor(NULL,IDC_NO));
			tmpChar = (char*)lpData;	
			MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,tmpChar,strlen(tmpChar)*sizeof(char),strReturnData,sizeof(strReturnData));
			//MessageBox(NULL,rilReturnData,_T("无线版本号"),MB_OK);
			break;
		case RIL_DEVSPECIFICPARAM_CBAND:

			break;
		default:
			break;
		}
		break;
	case RIL_RESULT_NOCARRIER:
	case RIL_RESULT_NODIALTONE:
	case RIL_RESULT_ERROR:
	case RIL_RESULT_BUSY:
		break;
	}
	(void)SetEvent(g_hEvent);
	//SetCursor(LoadCursor(AfxGetInstanceHandle(),IDC_NO));
	SetCursor(LoadCursor(NULL,IDC_NO));

}


void CALLBACK NotifyCallback(DWORD dwCode, const void* lpData, DWORD cbData, DWORD dwParam)
{
	//主动上报的消息
	WCHAR wszMessage[MAX_PATH] = L"";

	switch (dwCode)
	{
	case RIL_NOTIFY_CONNECT:
	case RIL_NOTIFY_DISCONNECT:
	case RIL_NOTIFY_RING:
		//TRACE3("RIL NotifyCallback = %d .........file:%s,line:%d\r\n", dwCode,__FILE__,__LINE__);
		break;
	}
}


BOOL LoadRILLib()
{
	HRESULT hr;

	g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	if (!g_hEvent) 
	{
		goto Error;
	}

	if (s_hRILLib != NULL) return TRUE;

	s_hRILLib = LoadLibrary(TEXT("\\Windows\\ril.dll"));
	if (s_hRILLib == NULL) goto Error;

	s_pfRIL_Initialize = (PFRIL_Initialize)GetProcAddress(s_hRILLib, L"RIL_Initialize");
	if (s_pfRIL_Initialize == NULL)
		goto Error;

	s_pfRIL_Deinitialize = (PFRIL_Deinitialize)GetProcAddress(s_hRILLib, L"RIL_Deinitialize");
	if (s_pfRIL_Deinitialize == NULL)
		goto Error;

	s_pfRIL_DevSpecific = (PFRIL_DevSpecific)GetProcAddress(s_hRILLib, L"RIL_DevSpecific");
	if (s_pfRIL_DevSpecific == NULL)
		goto Error;

	// Initialize RIL
	//TRACE3(">>>>> Calling RIL_Initialize().........file:%s,line:%d\r\n",0,__FILE__,__LINE__);
	hr = (*s_pfRIL_Initialize)(1, ResultCallback, NotifyCallback, RIL_NCLASS_ALL, NULL, &hRil);//RIL_NCLASS_ALL 那些类型的上报消息
	if (FAILED(hr)) 
	{
		//		MessageBox(0, TEXT(">>>>> Calling RIL_Initialize() Fail\r\n"), TEXT("Caption"), MB_OK);
		//TRACE3("RIL call failed immediately, code = %x.........file:%s,line:%d\r\n", hr,__FILE__,__LINE__);

		goto Error;

	}
	return TRUE;
Error:
	if (hRil) 
	{
		(*s_pfRIL_Deinitialize)(hRil);
		printf("zjh***************RIL s_pfRIL_Deinitialize ..........\r\n");
	}

	if (g_hEvent) 
	{
		(void)CloseHandle(g_hEvent);
	}
	return FALSE;
}
BOOL unLoadRILLib()
{
	if (hRil) 
	{
		(*s_pfRIL_Deinitialize)(hRil);
		hRil = NULL;
		printf("zjh***************RIL s_pfRIL_Deinitialize ..........\r\n");
	}

	if (g_hEvent) 
	{
		(void)CloseHandle(g_hEvent);
		g_hEvent = NULL;
	}
	if (s_hRILLib != NULL)
	{
		FreeLibrary(s_hRILLib);
		s_hRILLib = NULL;
	}

	return TRUE;

}
//设置GPIO输入输出,功能
void GPIOSet(volatile BULVERDE_GPIO_REG   *g_pGPIORegs,unsigned char num,unsigned char direct,unsigned char fn)
{  
	if (g_pGPIORegs == NULL)
	{
		return;

	}

	if ( num<32)
	{
		if(direct==1) g_pGPIORegs->GPDR0 |=( 0x1<<num ); 
		else g_pGPIORegs->GPDR0 &=~( 0x1<<num );
	}
	else if (num>=32 && num<64)
	{
		if(direct==1) g_pGPIORegs->GPDR1 |=( 0x1<<(num-32) ); 
		else g_pGPIORegs->GPDR1 &=~( 0x1<<(num-32) );
	} 
	else if (num>=64 && num<96)
	{
		if(direct==1) g_pGPIORegs->GPDR2 |=( 0x1<<(num-64) ); 
		else g_pGPIORegs->GPDR2 &=~( 0x1<<(num-64) ); 
	}
	else if (num>=96 && num<121)
	{
		if (direct==1) g_pGPIORegs->GPDR3 |=( 0x1<<(num-96) ); 
		else g_pGPIORegs->GPDR3 &=~( 0x1<<(num-96) ); 
	}

	if ( num<16)
	{
		g_pGPIORegs->GAFR0_L &=~( 0x3<< (2*num) ); 
		g_pGPIORegs->GAFR0_L |=( fn<< (2*num) ); 
	}
	else if (num>=16 && num<32)
	{
		g_pGPIORegs->GAFR0_U &=~( 0x3<< (2*(num-16)) ); 
		g_pGPIORegs->GAFR0_U |=( fn<< (2*(num-16)) ); 
	}
	else if (num>=32 && num<48)
	{
		g_pGPIORegs->GAFR1_L &=~( 0x3<< (2*(num-32)) ); 
		g_pGPIORegs->GAFR1_L |=( fn<< (2*(num-32)) ); 
	}
	else if (num>=48 && num<64)
	{
		g_pGPIORegs->GAFR1_U &=~( 0x3<< (2*(num-48)) ); 
		g_pGPIORegs->GAFR1_U |=( fn<< (2*(num-48)) ); 
	}
	else if (num>=64 && num<80)
	{
		g_pGPIORegs->GAFR2_L &=~( 0x3<< (2*(num-64)) ); 
		g_pGPIORegs->GAFR2_L |=( fn<< (2*(num-64)) ); 
	}
	else if (num>=80 && num<96)
	{
		g_pGPIORegs->GAFR2_U &=~( 0x3<< (2*(num-80)) ); 
		g_pGPIORegs->GAFR2_U |=( fn<< (2*(num-80)) ); 
	}
	else if (num>=96 && num<112)
	{
		g_pGPIORegs->GAFR3_L &=~( 0x3<< (2*(num-96)) ); 
		g_pGPIORegs->GAFR3_L |=( fn<< (2*(num-96)) ); 
	}
	else if (num>=112 && num<121)
	{
		g_pGPIORegs->GAFR3_U &=~( 0x3<< (2*(num-112)) ); 
		g_pGPIORegs->GAFR3_U |=( fn<< (2*(num-112)) ); 
	}


}

//设置GPIO高低位
void GPIOWrite(volatile BULVERDE_GPIO_REG   *g_pGPIORegs,unsigned char num,unsigned char c)
{  

	if (g_pGPIORegs == NULL)
	{
		return;

	}
	if (c==0)
	{
		if ( num<32)
			g_pGPIORegs->GPCR0 |= ( 0x1<<num ); 
		else if (num>=32 && num<64)
			g_pGPIORegs->GPCR1 |= ( 0x1<<(num-32) ); 
		else if (num>=64 && num<96)
			g_pGPIORegs->GPCR2 |= ( 0x1<<(num-64) ); 
		else if (num>=96 && num<121)
			g_pGPIORegs->GPCR3 |= ( 0x1<<(num-96) ); 
	}
	else 
	{
		if ( num<32)
			g_pGPIORegs->GPSR0 |= ( 0x1<<num ); 
		else if (num>=32 && num<64)
			g_pGPIORegs->GPSR1 |= ( 0x1<<(num-32) ); 
		else if (num>=64 && num<96)
			g_pGPIORegs->GPSR2 |= ( 0x1<<(num-64) ); 
		else if (num>=96 && num<121)
			g_pGPIORegs->GPSR3 |= ( 0x1<<(num-96) );  
	}



}



FUNCTIONDESC(getRadioVer)//TCHAR* getRadioVer(void)
{
	memset(strReturnData,0,sizeof(strReturnData));
	dwDevSpecificCommand = RIL_DEVSPECIFICPARAM_GET_VERSION;//
	rilSucess = FALSE;

	HRESULT hr =  (*s_pfRIL_DevSpecific)(hRil, (BYTE*)(&dwDevSpecificCommand), sizeof(DWORD));
	WAITFORAPICOMPLETION(hr);//
	return TRUE;
Error:
	if (hRil) 
	{
		(*s_pfRIL_Deinitialize)(hRil);
		printf("zjh***************RIL s_pfRIL_Deinitialize ..........\r\n");
	}

	if (g_hEvent) 
	{
		(void)CloseHandle(g_hEvent);
	}
	return FALSE;

}
FUNCTIONDESC(getMemoryInfo)//TCHAR* getMemoryInfo(void)
{
//	if(buf == NULL || len <1)
//	{
//		return FALSE;
//	}
//	TCHAR tmp[128];
	MEMORYSTATUS MemStatus;
	STORE_INFORMATION StoreInfo;
	GlobalMemoryStatus(&MemStatus);
	GetStoreInformation(&StoreInfo);

	memset(strReturnData,0,sizeof(strReturnData));
	swprintf(strReturnData,_T("%d %"),MemStatus.dwMemoryLoad);
//	StringCchCopy(buf,len,tmp);

	//MessageBox(NULL,tmp,_T("内存"),MB_OK);

	return TRUE;


}
FUNCTIONDESC(GPIOControl)
{
	//显示窗口
	CReportDlg dlg(GPIO_DLG);
	dlg.DoModal();
	memset(strReturnData,0,sizeof(strReturnData));
	return TRUE;

}
FUNCTIONDESC(WakeSleepInfo)
{
	memset(strReturnData,0,sizeof(strReturnData));
	CReportDlg dlg(WAKESLEEP_DLG);
	dlg.DoModal();
	return TRUE;

}
FUNCTIONDESC(OpenCloseWireless)
{
	memset(strReturnData,0,sizeof(strReturnData));

	volatile BULVERDE_GPIO_REG   *g_pGPIORegs =NULL;
	PHYSICAL_ADDRESS RegPA;

	if (g_pGPIORegs == NULL)
	{
		RegPA.QuadPart = BULVERDE_BASE_REG_PA_GPIO;
		g_pGPIORegs = (volatile BULVERDE_GPIO_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
	}

	BOOL isClosed = FALSE;
	isClosed = g_pGPIORegs->GPLR0&(0x01<<12);


	if (isClosed)
	{

		if(IDOK == MessageBox(NULL,TEXT("无线模块本来是关闭的,要开启吗?"),_T("驱动调试"), MB_ICONQUESTION|MB_OKCANCEL|MB_APPLMODAL|MB_SETFOREGROUND|MB_TOPMOST))
		{

			g_pGPIORegs->GPSR2 |=(0x01<<29);
			Sleep(500);
			g_pGPIORegs->GPCR2 |=(0x01<<29);

			StringCchCopy(strReturnData,sizeof(strReturnData),_T("已开启"));

		}
	}
	else
	{

		if(IDOK == MessageBox(NULL, TEXT("无线模块本来是开启的,要关闭吗?"),_T("驱动调试"),MB_ICONQUESTION|MB_OKCANCEL|MB_APPLMODAL|MB_SETFOREGROUND|MB_TOPMOST))
		{

			g_pGPIORegs->GPSR2 |=(0x01<<29);
			Sleep(500);
			g_pGPIORegs->GPCR2 |=(0x01<<29);

			StringCchCopy(strReturnData,sizeof(strReturnData),_T("已关闭"));

		}
	}

	if(g_pGPIORegs!=NULL)
		MmUnmapIoSpace ((PVOID)g_pGPIORegs,0x400);	 

	return TRUE;

}
FUNCTIONDESC(DispBattery)

⌨️ 快捷键说明

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