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

📄 gwme.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 2 页
字号:
static VOID CALLBACK SetCalibrationXY(int x, int y)
{ 
	if( !hWndCalibrate )
		return;
	RETAILMSG( 1, ( "SetCalibrationXY:x=%d,y=%d.\r\n", x, y ) );

	PostMessage( hWndCalibrate, WM_LBUTTONDOWN, 0, MAKELONG( x, y ) );
}

BOOL WINAPI WinSys_SetCalibrateWindow( HWND hWnd )
{
	if( hWnd )
	{
		if( lpGwdiPosEnter )
		{
		    lpGwdiPosEnter( GWDI_CALIBRATION, CALIBRATION_DOWN, SetCalibrationXY );
		    hWndCalibrate = hWnd;
		}
	}
	else
	{
		hWndCalibrate = NULL; //clear cal state		
		if( lpGwdiPosEnter )
		    lpGwdiPosEnter( GWDI_CALIBRATION, CALIBRATION_INACIVE, 0 );  //完成		
	}
	return TRUE;			
}

BOOL WINAPI WinSys_SetCalibratePoints( int cCalibrationPoints, int *pScreenXBuffer,int *pScreenYBuffer, int *pUncalXBuffer, int *pUncalYBuffer )
{
	return TouchPanelSetCalibration( cCalibrationPoints, pScreenXBuffer, pScreenYBuffer, pUncalXBuffer, pUncalYBuffer );
}

// **************************************************
// 声明:static BOOL CALLBACK DoEnumAPMQUERYSUSPEND( HWND hWnd, LPARAM lParam )
// 参数:
//    IN hWnd - 窗口句柄
//    IN lParam - 附带的用户参数
// 返回值:
//	如果继续,返回TRUE;否则,返回FALSE
// 功能描述:
//	枚举通知功能
// 引用: 
//	
// ************************************************
#define DEBUG_DoEnumAPMQUERYSUSPEND 0
static BOOL CALLBACK DoEnumAPMQUERYSUSPEND( HWND hWnd, LPARAM lParam )
{
	LRESULT lret;
	
	SendMessageTimeout( hWnd, WM_POWERBROADCAST, PBT_APMQUERYSUSPEND, lParam, SMTO_NORMAL, 10000, &lret );
	if( lret == BROADCAST_QUERY_DENY )
	{
		WARNMSG( DEBUG_DoEnumAPMQUERYSUSPEND, ( "hWnd(0x%x) return deny.\r\n", hWnd ) );
		return FALSE;
	}
	return TRUE;
}


// **************************************************
// 声明:static BOOL CALLBACK DoEnumAPMSUSPEND( HWND hWnd, LPARAM lParam )
// 参数:
//    IN hWnd - 窗口句柄
//    IN lParam - 附带的用户参数
// 返回值:
//	如果继续,返回TRUE;否则,返回FALSE
// 功能描述:
//	枚举挂起功能
// 引用: 
//	
// ************************************************

static BOOL CALLBACK DoEnumAPMSUSPEND( HWND hWnd, LPARAM lParam )
{
	LRESULT lret;
	SendMessageTimeout( hWnd, WM_POWERBROADCAST, PBT_APMSUSPEND, 0, SMTO_NORMAL, 10000, &lret );
	return TRUE;
}


// **************************************************
// 声明:static BOOL CALLBACK DoPostAPMQUERYSUSPENDFAILED(VOID)
// 参数:
//    IN hWnd - 窗口句柄
//    IN lParam - 附带的用户参数
// 返回值:
//	如果继续,返回TRUE;否则,返回FALSE
// 功能描述:
//	通知所有窗口挂起失败
// 引用: 
//	
// ************************************************

static BOOL CALLBACK DoPostAPMQUERYSUSPENDFAILED(VOID)
{
//	LRESULT lret;
	
	PostMessage( HWND_BROADCAST, WM_POWERBROADCAST, PBT_APMQUERYSUSPENDFAILED, 0 );
	return TRUE;
}

// **************************************************
// 声明:static BOOL CALLBACK DoPostAPMRESUMESUSPEND(VOID)
// 参数:
//    IN hWnd - 窗口句柄
//    IN lParam - 附带的用户参数
// 返回值:
//	如果继续,返回TRUE;否则,返回FALSE
// 功能描述:
//	从挂起中返回,恢复所有窗口
// 引用: 
//	
// ************************************************

static BOOL CALLBACK DoPostAPMRESUMESUSPEND(VOID)
{
	PostMessage( HWND_BROADCAST, WM_POWERBROADCAST, PBT_APMRESUMESUSPEND, 0 );
	return TRUE;
}

#define DEBUG_DoPower 1
static DWORD DoPower( HANDLE hServer, DWORD dwParam, LPVOID lpParam )
{
	DWORD dwRetv = 0;
	DEBUGMSG( DEBUG_DoPower, ( "GWME-DoPower entry.\r\n" ) );

	if( dwParam == SBP_APMQUERYSUSPEND )
	{	//查寻挂起许可
		if( DoEnumTopLevelWindow( DoEnumAPMQUERYSUSPEND, 0, NULL ) == FALSE )
		{	//许可挂起失败				
			DoPostAPMQUERYSUSPENDFAILED();
			dwRetv = FALSE;
		}
		else
		    dwRetv = TRUE;
	}
	else if( dwParam == SBP_APMSUSPEND )
	{	//通知挂起		
		DoEnumTopLevelWindow( DoEnumAPMSUSPEND, 0, NULL );
		if( lpGwdiDisplayEnter )
		{
			lpGwdiDisplayEnter( GWDI_POWEROFF, 0, 0 );
		}
		if( lpGwdiPosEnter )
		{
			lpGwdiPosEnter( GWDI_POWEROFF, 0, 0 );
		}
		if( lpGwdiKeyEnter )
		{
			lpGwdiKeyEnter( GWDI_POWEROFF, 0, 0 );
		}
	}
	else if( dwParam == SBP_APMQUERYSUSPENDFAILED )
	{	//系统挂起请求失败
		DoPostAPMQUERYSUSPENDFAILED();
	}
	else if( dwParam == SBP_APMRESUMESUSPEND )
	{	//挂起后的恢复
		if( lpGwdiDisplayEnter )
		{
			lpGwdiDisplayEnter( GWDI_POWERON, 0, 0 );
		}
		if( lpGwdiPosEnter )
		{
			lpGwdiPosEnter( GWDI_POWERON, 0, 0 );
		}
		if( lpGwdiKeyEnter )
		{
			lpGwdiKeyEnter( GWDI_POWERON, 0, 0 );		
		}
		DoPostAPMRESUMESUSPEND();
	}
	DEBUGMSG( DEBUG_DoPower, ( "GWME-DoPower leave,dwRetv(%d).\r\n",  dwRetv ) );
	return dwRetv;
}

// **************************************************
// 声明:DWORD WINAPI GwmeServerHandler( HANDLE hServer, DWORD dwIoControlCode , DWORD dwParam, LPVOID lpParam )
// 参数:
//    IN hServer - 服务句柄
//	IN dwIoControlCode - 控制码
//    IN dwParam - 第一个参数
//    IN lpParam - 第二个参数
// 返回值:
//	依赖与不同的控制
// 功能描述:
//	服务总线控制,处理各种系统服务,通知功能
// 引用: 
//	
// ************************************************
#define DEBUG_GwmeServerHandler 1
DWORD WINAPI GwmeServerHandler( HANDLE hServer, DWORD dwServerCode , DWORD dwParam, LPVOID lpParam )
{
	switch( dwServerCode )
	{
	case SCC_BROADCAST_THREAD_EXIT:
		Win_Clear(dwParam);
		break;
	case SCC_BROADCAST_PROCESS_EXIT:
		WinClass_Clear( (HANDLE)dwParam);
		WinSys_CloseObject( (HANDLE)dwParam );
		_ClearProcessTimer( (HANDLE)dwParam );
		break;
	case SCC_BROADCAST_POWER:
		return DoPower( hServer, dwParam, lpParam );
	case SCC_BROADCAST_SHUTDOWN:
		DoEnumTopLevelWindow( DoEnumAPMSUSPEND, 0, NULL );
		break;
	default:
		return Sys_DefServerProc( hServer, dwServerCode , dwParam, lpParam );
	}
	return 0;
}


// **************************************************
// 声明:int CALLBACK WinMain(
//                     HINSTANCE hInstance,
//                     HINSTANCE hPrevInstance,
//                     LPSTR     lpCmdLine,
//                     int       nCmdShow)
// 参数:
//    IN hInstance - 进程实例句柄
//	IN hPrevInstance - 前一个进程实例句柄(无用)
//    IN lpCmdLine - 命令行
//    IN nCmdShow - 怎样显示主窗口
// 返回值:
//	依赖与不同的控制
// 功能描述:
//	GWME进程总入口
// 引用: 
//	
// ************************************************
#define DEBUG_GWME 0
#ifdef INLINE_PROGRAM

int CALLBACK Gwme_WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)

#else


int CALLBACK WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)

#endif
{
	HANDLE hActiveTimerEvent;
	DWORD dwCurTickCount;

	//防止重复加载
	if( API_IsReady( API_GWE ) )
	{
		DEBUGMSG( DEBUG_GWME, ( "the gwme has already load.exit!\r\n" ) );
		return -1;
	}
	hgwmeInstance = hInstance;
	DEBUGMSG( DEBUG_GWME, ( "gwme hInstance=%x.\r\n", hInstance ) );
	//得到当前进程真实句柄
	hgwmeProcess = OpenProcess( PROCESS_ALL_ACCESS, 0, GetCurrentProcessId() );//GetCurrentProcess();
	//需要文件系统,看是否准备好 ?
	while( API_IsReady( API_FILESYS ) == FALSE )
	{		
		Sleep(100);
	}
	//初始化块堆管理模块
	InitGwmeBlockHeap();
	//安装 GWME 服务器
	InstallGwmeServer();
	//初始化 GWME 设备,例如:mouse, displayer keyboard..
	InstallGwmeDevice( hInstance );
	//初始化 GWME 图形对象
	InstallGwmeObject( hInstance );
	//安装 GWME 系统资源
	//LoadGwmeResource( hInstance );
	//打开设备
	OpenGwmeDevice();
	_InitCalibration();

	API_SetReady( API_GWE );
	
	DEBUGMSG( DEBUG_GWME, ( "GWE is ready.\r\n" ) );
	
	hgwmeEvent = CreateEvent( NULL, FALSE, FALSE, "GWME_EVENT" );
	hActiveTimerEvent = CreateEvent( NULL, FALSE, FALSE, "__GWME_ACTIVE_TIMER__" );
	dwActiveTimerCount = GetTickCount();

	while( 1 )
	{
		int rv;

		//等待事件
		//50是用来做WM_TIMER的处理的
		rv = WaitForSingleObject( hgwmeEvent, 50 );
		if( rv == WAIT_TIMEOUT )
		{   // 检查所有 timer 事件
			CheckWinTimerEvent();
		}
		else if( rv == WAIT_OBJECT_0 )
		{  // gwme event
			;//RETAILMSG( 1, ( "Gwme event\r\n." ) );
		}
		else  // if( rv == WAIT_OBJECT_0 + 1 )
		{
			;//break;
		}

		if( GetSYSQueueState() ) //系统队列是否有消息、事件 ?
		{	//有
			HandleSystemQueue();
		}
		//判断用户输入事件响应时间
		dwCurTickCount = GetTickCount();
		if( ( dwCurTickCount - dwActiveTimerCount ) >= 10000 )
		{
			dwActiveTimerCount = GetTickCount();
			SetEvent(hActiveTimerEvent);
		}
	}

	while(1)
		Sleep(10);

	CloseHandle( hgwmeEvent );
	ReleaseGwme();

	return 0;
}


⌨️ 快捷键说明

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