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

📄 gui_mouse_driverps2.c

📁 在fs2410开发板上的移植好的ucos操作系统和ucgui图形用户接口。
💻 C
字号:
/*
*********************************************************************************************************
*                                                uC/GUI
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : GUITOUCH.C
Purpose     : Touch screen manager
----------------------------------------------------------------------
This module handles the touch screen. It is configured in the file
GUITouch.conf.h (Should be located in the Config\ directory).
----------------------------------------------------------------------
*/


#include "LCD_Private.h"      /* private modul definitions & config */
#include "GUI_Protected.h"

/*********************************************************************
*
*                Local Variables & Defines
*
**********************************************************************
*/

static int  _ScreenX              = 0;    /* x-pos         */
static int  _ScreenY              = 0;    /* y-pos         */
static int  _NumBytesInBuffer     = 0;    /* bytes in rx buffer */
static U8   _Buttons              = 0;    /* button status */
static U8   _abInBuffer[3];               /* mouse rx buffer */



/*********************************************************************
*
*           _EvaPacket
*
**********************************************************************

  Process data packet from mouse:

              D7    D6    D5    D4    D3    D2    D1    D0
            -----------------------------------------------
  1st byte  | --    --    Y-    X-     1    --    LB    RB
  2nd byte  | X7    X6    X5    X4    X3    X2    X1    X0
  3rd byte  | Y7    Y6    Y5    Y4    Y3    Y2    Y1    Y0
  
*/

static void _EvaPacket(void) {
  char a;
  GUI_PID_STATE State;
  _Buttons = _abInBuffer[0] & 0x03;
  a = _abInBuffer[1];
  // test x move sign.
  if(_abInBuffer[0] & 0x10) {
    a=-a;
    _ScreenX  -= a;
  }        /* direction is negative, move left */
  else {
    _ScreenX  += a;
  }
  a = _abInBuffer[2];
  // test y move sign.
  if(_abInBuffer[0] & 0x20) {
    a=-a;
    _ScreenY  += a;
  }  /* direction is negative, move down */ else {
    _ScreenY  -= a;
  }
  /* check min/max positions */    
  if (_ScreenX < 0) {
    _ScreenX = 0;
  } else if (_ScreenX > LCD_XSIZE-1) {
    _ScreenX = LCD_XSIZE-1;
  } if (_ScreenY < 0) {
    _ScreenY = 0;
  } else if (_ScreenY > LCD_YSIZE-1) {
    _ScreenY = LCD_YSIZE-1;
  }
  /* signal new mouse data */
  State.x       = _ScreenX;
  State.y       = _ScreenY;
  State.Pressed = _Buttons;
  GUI_MOUSE_StoreState(&State);
}


/*********************************************************************
*
*       GUI_MOUSE_DRIVER_PS2_OnRx : Mouse receive interrupt handler
*
**********************************************************************

  The PS2 mouse interrupt gets in three bytes from the mouse, then wakes
  up  the mouse LSR.
*/

void GUI_MOUSE_DRIVER_PS2_OnRx(unsigned char Data) {
  if (!_NumBytesInBuffer) {
    /* check for start frame */
    if ((Data & 0x0c) == 0x08) {
      _abInBuffer[0] = Data;
      _NumBytesInBuffer++;
    }
  } else {
    _abInBuffer[_NumBytesInBuffer] = Data;
    _NumBytesInBuffer++;
    if (_NumBytesInBuffer >= 3) {
      _EvaPacket();
      _NumBytesInBuffer = 0;
    }
  }
}

/*********************************************************************
*
*       GUI_MOUSE_DRIVER_PS2_Init
*
**********************************************************************
*/

void GUI_MOUSE_DRIVER_PS2_Init(void) {
  _NumBytesInBuffer = 0; 
}

⌨️ 快捷键说明

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