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

📄 mmi_touchpanel.c

📁 嵌入式展讯mmi层kernel的c 源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
						y0 = pos[0].y-((int32)gTarget[0].y)*TP_SCALE_VALUE/dY;
						SCI_TRACE_LOW("TPCalibrationHandler: x0(%ld) y0(%ld) dX(%ld) dY(%ld)", x0, y0, dX, dY);
						TPSetCalibration(x0, y0, dX, dY, TP_SCALE_VALUE);
						value[0] = x0;
						value[1] = y0;
						value[2] = dX;
						value[3] = dY;
					}
					break;
				default:
					break;		
			}
			
			if (is_ivalid)
				s_curTarget++;
			else
				s_curTarget = 0;
				
			if (s_curTarget < sizeof(gTarget)/sizeof(gTarget[0]))
				MMK_PostMsg(win_id, MSG_FULL_PAINT, NULL, 0);
			else
			{		
				MMK_CloseWin(win_id);
			}
		} 
		else 
		{
			SCI_TRACE_LOW("TPCalibrationHandler: MSG_TP_DOWN/MSG_TP_MOVE");
		}
		break;

	default:
		result = MMI_RESULT_FALSE;

		if (msg_id >= MSG_APP_PHONE && msg_id <= MSG_APP_MAX)
			result = MMI_RESULT_TRUE;		
	    break;	
	}
	return result;
}

/*****************************************************************************/
// 	Description : Touch Panel的绘制窗口
//	Global resource dependence : 
//  Author: hongbing
//	Note:
/*****************************************************************************/
LOCAL MMI_RESULT_E TP_PaintHandler (
									 MMI_WINDOW_ID_E		win_id, 	// 窗口的ID
									 MMI_MESSAGE_ID_E 		msg_id, 	// 窗口的内部消息ID
									 DPARAM 		        param		// 相应消息的参数
									 )
{
	
	MMI_RESULT_E	result = MMI_RESULT_TRUE;

	GUI_POINT_T		*cur_point = (GUI_POINT_T*)param;

	static GUI_POINT_T	old_point;

	switch (msg_id)
	{
	case MSG_OPEN_WINDOW:		
		SCI_TRACE_LOW("TP_PaintHandler: MSG_OPEN_WINDOW");		
		break;

	case MSG_APP_OK:
	case MSG_FULL_PAINT:
		SCI_TRACE_LOW("TP_PaintHandler: MSG_FULL_PAINT");
		GUI_DisplayStaticBmp(MAIN_LCD_ID, 0, 0, IMAGE_SYSSET_CALIBRATION_BG);
		break;

//	case MSG_LOSE_FOCUS:
//	case MSG_CLOSE_WINDOW:
	case MSG_APP_RED:
		SCI_TRACE_LOW("TP_PaintHandler: MSG_CLOSE_WINDOW");
		MMK_CloseWin(win_id);
		break;

	case MSG_TP_DOWN:
		old_point = *cur_point;
	//	TP_DrawPoint(*cur_point);
		break;

	case MSG_TP_MOVE:
	case MSG_TP_UP:
	//	SCI_TRACE_LOW("TP_PaintHandler: MSG_TP_XXXX cur_point(%d, %d)...", cur_point->x, cur_point->y);
	//	SCI_TRACE_LOW("TP_PaintHandler: MSG_TP_XXXX old_point(%d, %d)...", old_point.x, old_point.y);
		
		TP_DrawLine(*cur_point, old_point);
		TP_DrawPoint(*cur_point);
		TP_DrawPoint(old_point);
		
		old_point = *cur_point;
		break;

	default:
	    result = MMI_RESULT_FALSE;
	    break;	
	}
	return MMI_RESULT_FALSE;
}

LOCAL void TP_DrawPoint (GUI_POINT_T point_pos)
{
	uint16 x, y;
	x = point_pos.x-1;
	if(x > point_pos.x)
	{
		x = point_pos.x;
	}

	y = point_pos.y-1;
	if(y > point_pos.y)
	{
		y = point_pos.y;
	}
	
	LCD_DrawHLine(MAIN_LCD_ID,x, point_pos.y, point_pos.x +1, MMI_DARK_RED_COLOR );
	LCD_DrawVLine(MAIN_LCD_ID,point_pos.x, y, point_pos.y +1, MMI_DARK_RED_COLOR );
}

LOCAL void TP_DrawLine(GUI_POINT_T point_pos, GUI_POINT_T old_point)
{

	LCD_DrawLine(
				MAIN_LCD_ID,
				point_pos.x, 
				point_pos.y, 
				old_point.x,
				old_point.y, 
				MMI_DARK_BLUE_COLOR 
				);

}

/*****************************************************************************/
// 	Description : 是否正在Touch Panel校准窗口
//	Global resource dependence : 
//  Author: liukaizan
//	Note:
/*****************************************************************************/
PUBLIC BOOLEAN MMI_IsTpCalibration()
{
	return (BOOLEAN)(MMK_GetFocusWinId() == TOUCH_PANEL_CALIBRATION_WIN_ID);
}

/*****************************************************************************/
// 	Description : 进行Touch Panel校准
//	Global resource dependence : 
//  Author: liukaizan
//	Note:
/*****************************************************************************/
LOCAL void MMI_TPCalibrationSub(BOOLEAN bForce)
{	
	int32 x0, y0, dX, dY;
	if (!MMI_GetIsTouchPanel())
		return ;

	TPSampleCallBackSet(TP_SendPoint);

	if(bForce || !MMI_LoadTPCalibration(&x0, &y0, &dX, &dY)) //需要重新校准??
	{		
		MMK_CreateWin((uint32*)TOUCH_PANEL_CALIBRATION_WIN_TAB, (ADD_DATA)bForce);
		for ( ;MMI_IsTpCalibration(); )
		{
			MMI_ProcessMsg();
		}
	}
	else
	{
		TPSetCalibration(x0, y0, dX, dY, TP_SCALE_VALUE);
	}
}

/*****************************************************************************/
// 	Description : 进行Touch Panel校准
//	Global resource dependence : 
//  Author: liukaizan
//	Note:
/*****************************************************************************/
PUBLIC void MMI_TPCalibration()
{
	BOOLEAN RM_GetCalibrationPostMode(void);
#ifdef WIN32
	MMI_SaveTPCalibration(0,0,1,1);
#endif
	//xiezhuxin20070617 if( !MMI_IsPCBAVersion())
	if(!RM_GetCalibrationPostMode())
		MMI_TPCalibrationSub(FALSE);
}

/*****************************************************************************/
// 	Description : 强制进行Touch Panel校准
//	Global resource dependence : 
//  Author: liukaizan
//	Note:
/*****************************************************************************/
PUBLIC void MMI_TPCalibrationForce()
{	
	MMI_TPCalibrationSub(TRUE);
	//MMK_CreateWin((uint32*)TOUCH_PANEL_PAINT_WIN_TAB, PNULL);
}

extern MmiSignalS *MMI_PeekSignal(MmiSignalS **signal);

BOOLEAN MMI_SendPoint(int16 x, int16 y, uint32 TPMsg)
{
	MmiSignalS		*sendSignal;
	
	if (!MMI_IsTpCalibration())
	{
		//MMI_HandleStatusTPMsg(x, y, TPMsg);
		y -= LCD_STATUS_H;
	}
	
	MmiCreateSignal(TPMsg, sizeof(uint32), &sendSignal);
	sendSignal->send = TPSVR;
	*((uint32*)(&sendSignal->sig)) = (x << 16)+(y & 0xffff);	
	MmiSendSignal(TASK_FL_ID, sendSignal);
	return TRUE;
}

#define	HWTP_SEND_POINT_TO_MMI_INTERVAL	1000
#define INVALID_MMI_COORD_X		0x7FFF
#define INVALID_MMI_COORD_Y		0x7FFF

BOOLEAN TP_SendPoint(int16 x, int16 y, uint8 state)
{
	static uint16	s_lastX, s_lastY;
	static BOOLEAN	s_bTPDown = FALSE;
	static BOOLEAN	s_bDelalyProcess = FALSE;
	static BOOLEAN	s_bDelayMove = FALSE;
	static uint16	s_DelayDownX, s_DelayDownY;
	static uint16	s_DelayMoveX, s_DelayMoveY;
	static uint32	s_tick = 0;
	uint32			cur_tick = 0;
	uint32			TPMsg;	
	uint8 			bTPDown;

	if (SCI_NULL != MMI_PeekSignal(NULL)) 
	{
		return FALSE;
	}

	bTPDown = state;
	
	if (!bTPDown && !s_bTPDown)
	{
		SCI_TRACE_LOW("TP_SendPoint: Touch Panel error!");	
		return TRUE;
	} 
	else if (!bTPDown)
	{
		TPMsg = MSG_TP_UP;
		s_bTPDown = FALSE;
		x = s_lastX;
		y = s_lastY;
	} 
	else if (!s_bTPDown)
	{
		TPMsg = MSG_TP_DOWN;
		s_bTPDown = TRUE;
		s_lastX = x;
		s_lastY = y;
	} 
	else
	{
		TPMsg = MSG_TP_MOVE;
		s_lastX = x;
		s_lastY = y;
	}

	switch (HWTP_SendPoint(x, y, TPMsg))
	{
	case POINT_PROCESSED:
		if (s_bDelalyProcess)
		{
			MMI_SendPoint(INVALID_MMI_COORD_X, INVALID_MMI_COORD_Y, MSG_TP_DOWN);
			s_bDelalyProcess = FALSE;
			s_tick = SCI_GetTickCount();
		}
		cur_tick = SCI_GetTickCount();
		if (MSG_TP_DOWN == TPMsg || MSG_TP_UP == TPMsg || cur_tick - s_tick >= HWTP_SEND_POINT_TO_MMI_INTERVAL)
		{
			s_tick = cur_tick;
			MMI_SendPoint(INVALID_MMI_COORD_X, INVALID_MMI_COORD_Y, TPMsg);
		}
		break;
	case POINT_UNPROCESSED:
		if (s_bDelalyProcess)
		{
			MMI_SendPoint(s_DelayDownX, s_DelayDownY, MSG_TP_DOWN);
			s_bDelalyProcess = FALSE;
			if (s_bDelayMove)
			{
				s_bDelayMove = FALSE;
				MMI_SendPoint(s_DelayMoveX, s_DelayMoveY, MSG_TP_MOVE);
			}
		}
		return MMI_SendPoint(x, y, TPMsg);
		break;
	case POINT_DELAY_PROCESS:
		if (FALSE == s_bDelalyProcess)
		{
			s_bDelalyProcess = TRUE;
			s_DelayDownX = x;
			s_DelayDownY = y;
		}
		else if (MSG_TP_MOVE == TPMsg)
		{
			s_bDelayMove = TRUE;
			s_DelayMoveX = x;
			s_DelayMoveY = y;
		}
		break;
	case POINT_DISCARD:
		break;
	default:
		SCI_ASSERT(FALSE);
		break;
	}
	return TRUE;
}

⌨️ 快捷键说明

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