?? funcontrol.cpp
字號:
#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 + -