コード例 #1
0
/**
  * @brief  Provide the GUI with current state of the touch screen
  * @param  None
  * @retval None
  */
void BSP_Pointer_Update(void)
{
    GUI_PID_STATE TS_State;
    static TS_StateTypeDef prev_state;
    TS_StateTypeDef  ts;
    uint16_t xDiff, yDiff;

    BSP_TS_GetState(&ts);

    TS_State.Pressed = ts.TouchDetected;

    xDiff = (prev_state.x > ts.x) ? (prev_state.x - ts.x) : (ts.x - prev_state.x);
    yDiff = (prev_state.y > ts.y) ? (prev_state.y - ts.y) : (ts.y - prev_state.y);

    if(ts.TouchDetected)
    {
        if((prev_state.TouchDetected != ts.TouchDetected )||
                (xDiff > 3 )||
                (yDiff > 3))
        {
            prev_state = ts;

            TS_State.Layer = 0;
            TS_State.x = ts.x;
            TS_State.y = ts.y;

            GUI_TOUCH_StoreStateEx(&TS_State);
        }
    }
}
コード例 #2
0
ファイル: LCDConf_mm.c プロジェクト: AndreMiras/EFM32-Library
void LCD_TOUCH_Upcall(TOUCH_Pos_TypeDef *pos)
{ static GUI_PID_STATE gui_pos;

  if(pos->x < LCD_GetXSize()) gui_pos.x = pos->x;
    else gui_pos.x = LCD_GetXSize()-1;
  if(pos->y < LCD_GetYSize()) gui_pos.y = pos->y;
    else gui_pos.y = LCD_GetYSize()-1;
  gui_pos.Pressed = pos->pen;
  GUI_TOUCH_StoreStateEx(&gui_pos);
}
コード例 #3
0
ファイル: k_bsp.c プロジェクト: RadMie/STM32F7DiscoveryBase
/**
  * @brief  Read the coordinate of the point touched and assign their
  *         value to the variables u32_TSXCoordinate and u32_TSYCoordinate
  * @param  None
  * @retval None
  */
void k_TouchUpdate(void)
{
  static GUI_PID_STATE TS_State = {0, 0, 0, 0};
  __IO TS_StateTypeDef  ts;
  uint16_t xDiff, yDiff;  

  BSP_TS_GetState((TS_StateTypeDef *)&ts);

  if((ts.x >= LCD_GetXSize()) ||(ts.y >= LCD_GetYSize()) ) 
  {
    ts.x = 0;
    ts.y = 0;
    ts.TouchDetected =0;
  }

  xDiff = (TS_State.x > ts.x) ? (TS_State.x - ts.x) : (ts.x - TS_State.x);
  yDiff = (TS_State.y > ts.y) ? (TS_State.y - ts.y) : (ts.y - TS_State.y);
  
  
  if((TS_State.Pressed != ts.TouchDetected ) ||
     (xDiff > 30 )||
      (yDiff > 30))
  {
    TS_State.Pressed = ts.TouchDetected;
    TS_State.Layer = SelLayer;
    if(ts.TouchDetected) 
    {
      TS_State.x = ts.x;
      TS_State.y = ts.y;
      GUI_TOUCH_StoreStateEx(&TS_State);
    }
    else
    {
      GUI_TOUCH_StoreStateEx(&TS_State);
      TS_State.x = 0;
      TS_State.y = 0;
    }
  }
}
コード例 #4
0
ファイル: Main.c プロジェクト: SMelanko/STemWinPro
void BSP_Pointer_Update(void)
{
	GUI_PID_STATE TS_State;
	static TS_StateTypeDef prev_state;
	TS_StateTypeDef  ts;
	uint16_t xDiff, yDiff;

	BSP_TS_GetState(&ts);

	TS_State.Pressed = ts.TouchDetected;

	if (ts.TouchDetected)
	{
		xDiff = (prev_state.X > ts.X) ? (prev_state.X - ts.X) : (ts.X - prev_state.X);
		yDiff = (prev_state.Y > ts.Y) ? (prev_state.Y - ts.Y) : (ts.Y - prev_state.Y);

		if ((prev_state.TouchDetected != ts.TouchDetected) || (xDiff > 3) || (yDiff > 3))
		{
			prev_state = ts;

			TS_State.Layer = 0;
			TS_State.x = ts.X;
			TS_State.y = ts.Y;

			GUI_TOUCH_StoreStateEx(&TS_State);
		}
	}
	else
	{
		// Use -1 if touch is not pressed.
		TS_State.Layer = 0;
		TS_State.x = -1;
		TS_State.y = -1;

		GUI_TOUCH_StoreStateEx(&TS_State);
	}
}
コード例 #5
0
/**
  * @brief  Read the coordinate of the point touched and assign their
  *         value to the variables u32_TSXCoordinate and u32_TSYCoordinate
  * @param  None
  * @retval None
  */
void k_TouchUpdate(void)
{
  GUI_PID_STATE TS_State;
  static TS_StateTypeDef prev_state;
  __IO TS_StateTypeDef  ts;
  uint16_t xDiff, yDiff;

  BSP_TS_GetState((TS_StateTypeDef *)&ts);

  TS_State.Pressed = ts.TouchDetected;

  xDiff = (prev_state.x > ts.x) ? (prev_state.x - ts.x) : (ts.x - prev_state.x);
  yDiff = (prev_state.y > ts.y) ? (prev_state.y - ts.y) : (ts.y - prev_state.y);

  if((prev_state.TouchDetected != ts.TouchDetected )||
     (xDiff > 3 )||
       (yDiff > 3))
  {
    prev_state.TouchDetected = ts.TouchDetected;

    if((ts.x != 0) &&  (ts.y != 0))
    {
      prev_state.x = ts.x;
      prev_state.y = ts.y;
    }

    if(k_CalibrationIsDone())
    {
      TS_State.Layer = 0;
      TS_State.x = k_CalibrationGetX (prev_state.x);
      TS_State.y = k_CalibrationGetY (prev_state.y);
    }
    else
    {
      TS_State.Layer = 0;
      TS_State.x = prev_state.x;
      TS_State.y = prev_state.y;
    }

    GUI_TOUCH_StoreStateEx(&TS_State);
  }
}
コード例 #6
0
ファイル: main.c プロジェクト: pierreroth64/STM32Cube_FW_F4
/**
  * @brief  Provide the GUI with current state of the touch screen
  * @param  None
  * @retval None
  */
void BSP_Pointer_Update(void)
{
  GUI_PID_STATE TS_State;
  static TS_StateTypeDef prev_state;
  TS_StateTypeDef  ts;
  uint16_t xDiff, yDiff;  
  
  BSP_TS_GetState(&ts);
  
  TS_State.Pressed = ts.TouchDetected;

  xDiff = (prev_state.x > ts.x) ? (prev_state.x - ts.x) : (ts.x - prev_state.x);
  yDiff = (prev_state.y > ts.y) ? (prev_state.y - ts.y) : (ts.y - prev_state.y);
  
  if((prev_state.TouchDetected != ts.TouchDetected )||
     (xDiff > 3 )||
       (yDiff > 3))
  {
    prev_state.TouchDetected = ts.TouchDetected;
    
    if((ts.x != 0) &&  (ts.y != 0)) 
    {
      prev_state.x = ts.x;
      prev_state.y = ts.y;
    }
      
    if(CALIBRATION_IsDone())
    {
      TS_State.Layer = 0;
      TS_State.x = CALIBRATION_GetX (prev_state.x);
      TS_State.y = CALIBRATION_GetY (prev_state.y);
    }
    else
    {
      TS_State.Layer = 0;
      TS_State.x = prev_state.x;
      TS_State.y = prev_state.y;
    }
    
    GUI_TOUCH_StoreStateEx(&TS_State);
  }
}
コード例 #7
0
ファイル: main.c プロジェクト: pierreroth64/STM32Cube_FW_F4
/**
  * @brief  Provide the GUI with current state of the touch screen
  * @param  None
  * @retval None
  */
void BSP_Pointer_Update(void)
{
  GUI_PID_STATE TS_State;
  static TS_StateTypeDef prev_state;
  TS_StateTypeDef  ts;
  uint16_t xDiff, yDiff;  
  
  BSP_TS_GetState(&ts);
  
  TS_State.Pressed = ts.TouchDetected;

  xDiff = (prev_state.X > ts.X) ? (prev_state.X - ts.X) : (ts.X - prev_state.X);
  yDiff = (prev_state.Y > ts.Y) ? (prev_state.Y - ts.Y) : (ts.Y - prev_state.Y);
  
  if((prev_state.TouchDetected != ts.TouchDetected )||
     (xDiff > 3 )||
       (yDiff > 3))
  {
    prev_state.TouchDetected = ts.TouchDetected;
    
    if((ts.X != 0) &&  (ts.Y != 0)) 
    {
      prev_state.X = ts.X;
      prev_state.Y = ts.Y;
    }
      
    if(CALIBRATION_IsDone())
    {
      TS_State.Layer = 0;
      TS_State.x = CALIBRATION_GetX (prev_state.X);
      TS_State.y = CALIBRATION_GetY (prev_state.Y);
    }
    else
    {
      TS_State.Layer = 0;
      TS_State.x = prev_state.X;
      TS_State.y = prev_state.Y;
    }
    
    GUI_TOUCH_StoreStateEx(&TS_State);
  }
}
コード例 #8
0
ファイル: Touchpanel.cpp プロジェクト: Arakula/Misa-Kitara-AP
void *touchscreen_thread(void *t)
{
	Touchpanel *ts = (Touchpanel *) t;

	fd_set rds;
	int ret;
	struct touchstate tsState;
	static int lastX,lastY;

	lastX = lastY = 0;

	std::queue<touchpanel_event> events;

	std::cout << "Touch panel started." << std::endl << std::flush;

	while(ts->threadRun)
	{
		FD_ZERO(&rds);
		FD_SET(ts->touchpanel_fd, &rds);

		ret = select(ts->touchpanel_fd + 1, &rds, NULL, NULL, NULL);

		if(ret < 0)
			std::cerr << "Touch panel error." << std::endl;

		if(ret == 0)
			std::cerr << "Touch panel time out." << std::endl;
		else
		if(FD_ISSET(ts->touchpanel_fd, &rds))
		{
			struct input_event new_event;
			if(read(ts->touchpanel_fd, &new_event, sizeof(struct input_event)) == -1)
			{
				if(errno != EAGAIN)
					std::cerr << "Touch panel read error." << std::endl;
			}
			else
			{
				struct touchpanel_event tpe;
				GUI_PID_STATE pid_state;
				read(ts->drv_fd, &tpe.data, 22);
				tpe.p_data = (unsigned short *) tpe.data;
				ts->addToEventQueue(tpe);
#if 0
				ts->getTouchState(&tsState);
				if(tsState.num_touches > tsState.old_num_touches)
				{
					pid_state.Pressed = 1;
					if(GetLcdFlip())
					{
						
						lastX = pid_state.x = 800-tsState.x[0];
						lastY = pid_state.y = 600-tsState.y[0];
					}
					else
					{
						lastX = pid_state.x = tsState.x[0];
						lastY = pid_state.y = tsState.y[0];
					}
					GUI_TOUCH_StoreStateEx(&pid_state);
				}
				else if(0 == tsState.num_touches)
				{
					pid_state.Pressed = 0;
					pid_state.x = lastX;
					pid_state.y = lastY;
					GUI_TOUCH_StoreStateEx(&pid_state);
				}
				else
				{
					pid_state.Pressed = 1;
					if(GetLcdFlip())
					{
						
						lastX = pid_state.x = 800-tsState.x[0];
						lastY = pid_state.y = 600-tsState.y[0];
					}
					else
					{
						lastX = pid_state.x = tsState.x[0];
						lastY = pid_state.y = tsState.y[0];
					}
					GUI_TOUCH_StoreStateEx(&pid_state);
				}
#endif
			}
		}
	}
	pthread_exit(NULL);
}