亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gui_touch_driveranalog.c

?? 這套代碼已經成功一直到S3C44B0X開發板上
?? 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "LCD_Private.h"      /* private modul definitions & config */
#include "GUI_Protected.h"

/* Generate code only if configuration says so ! */
#if GUI_SUPPORT_TOUCH

#include "GUITouchConf.h"    /* Located in GUIx, will include GUITouchConf.h */

/*********************************************************************
*
*       Defines, config defaults
*
**********************************************************************
*/

#ifndef GUI_TOUCH_AD_LEFT         /* max value returned by AD-converter */
  #define GUI_TOUCH_AD_LEFT 30   
#endif

#ifndef GUI_TOUCH_AD_RIGHT        /* min value returned by AD-converter */
  #define GUI_TOUCH_AD_RIGHT 220    
#endif

#ifndef GUI_TOUCH_AD_TOP          /* max value returned by AD-converter */
  #define GUI_TOUCH_AD_TOP 30
#endif

#ifndef GUI_TOUCH_AD_BOTTOM       /* min value returned by AD-converter */
  #define GUI_TOUCH_AD_BOTTOM 220
#endif

#ifndef GUI_TOUCH_SWAP_XY         /* Is XY of touch swapped ? */
  #define GUI_TOUCH_SWAP_XY 0
#endif

#ifndef GUI_TOUCH_MIRROR_X
  #define GUI_TOUCH_MIRROR_X 0
#endif

#ifndef GUI_TOUCH_MIRROR_Y
  #define GUI_TOUCH_MIRROR_Y 0
#endif

#ifndef GUI_TOUCH_YSIZE
  #define GUI_TOUCH_YSIZE LCD_YSIZE
#endif

#ifndef GUI_TOUCH_XSIZE
  #define GUI_TOUCH_XSIZE LCD_XSIZE
#endif

/*********************************************************************
*
*       Types
*
**********************************************************************
*/

typedef struct {int Min; int Max; } tMinMax;

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

static int xPhys, yPhys;

static tMinMax xyMinMax[2] = {
#if ((GUI_TOUCH_SWAP_XY==0) && (GUI_TOUCH_MIRROR_X==0)) || ((GUI_TOUCH_SWAP_XY) && (GUI_TOUCH_MIRROR_Y==0))
  { GUI_TOUCH_AD_LEFT, GUI_TOUCH_AD_RIGHT },
#else
  { GUI_TOUCH_AD_RIGHT, GUI_TOUCH_AD_LEFT },
#endif
#if ((GUI_TOUCH_SWAP_XY==0) && (GUI_TOUCH_MIRROR_Y==0)) || ((GUI_TOUCH_SWAP_XY) && (GUI_TOUCH_MIRROR_X==0))
  { GUI_TOUCH_AD_TOP,  GUI_TOUCH_AD_BOTTOM }
#else
  { GUI_TOUCH_AD_BOTTOM,  GUI_TOUCH_AD_TOP }
#endif
};

#ifndef WIN32
static int xMin;
static int xMax;
static int yMin;
static int yMax;
#endif

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _AD2X
*
* Purpose:
*   Convert physical value into (logical) coordinates.
*/
#ifndef WIN32
static int _AD2X(int adx) {
  I32 r = adx - xyMinMax[GUI_COORD_X].Min;
  r *= GUI_TOUCH_XSIZE - 1;
  return r / (xyMinMax[GUI_COORD_X].Max - xyMinMax[GUI_COORD_X].Min);    
}

/*********************************************************************
*
*       _AD2Y
*
* Purpose:
*   Convert physical value into (logical) coordinates.
*/
static int _AD2Y(int ady) {
  I32 r = ady - xyMinMax[GUI_COORD_Y].Min;
  r *= GUI_TOUCH_YSIZE - 1;
  return r/(xyMinMax[GUI_COORD_Y].Max - xyMinMax[GUI_COORD_Y].Min);    
}
#endif

/*********************************************************************
*
*       _Log2Phys
*/
static int _Log2Phys(int l, I32 l0, I32 l1, I32 p0, I32 p1) {
  return p0+ ((p1 - p0) * (l - l0)) / (l1 - l0);
}

/*********************************************************************
*
*       _StoreUnstable
*/
static void _StoreUnstable(int x, int y) {
  static int _xLast = -1;
  static int _yLast = -1;
  int xOut, yOut;

  if ((x != -1) && (y != -1) && (_xLast != -1) && (_yLast != -1)) {
    xOut = _xLast;    
    yOut = _yLast;    
  } else {
    xOut = -1;
    yOut = -1;    
  }
  _xLast = x;
  _yLast = y;
  GUI_TOUCH_StoreUnstable(xOut, yOut);
}
/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_TOUCH_GetxPhys
*/
int  GUI_TOUCH_GetxPhys(void) {
  return xPhys;
}

/*********************************************************************
*
*       GUI_TOUCH_GetyPhys
*/
int  GUI_TOUCH_GetyPhys(void) {
  return yPhys;
}

/*********************************************************************
*
*       GUI_TOUCH_SetDefaultCalibration
*/
void GUI_TOUCH_SetDefaultCalibration(void) {
  xyMinMax[0].Min = GUI_TOUCH_AD_LEFT;
  xyMinMax[0].Max = GUI_TOUCH_AD_RIGHT;
  xyMinMax[1].Min = GUI_TOUCH_AD_TOP;
  xyMinMax[1].Max = GUI_TOUCH_AD_BOTTOM;
}

/*********************************************************************
*
*       GUI_TOUCH_Calibrate
*/
int GUI_TOUCH_Calibrate(int Coord, int Log0, int Log1, int Phys0, int Phys1) {
  int l0 = 0;
  int l1 = (Coord == GUI_COORD_X) ? LCD_XSIZE - 1 : LCD_YSIZE - 1;
  if (labs(Phys0 - Phys1) < 20) {
    return 1;
  }
  if (labs(Log0 - Log1) < 20) {
    return 1;
  }
  xyMinMax[Coord].Min = _Log2Phys(l0, Log0, Log1, Phys0, Phys1);  
  xyMinMax[Coord].Max = _Log2Phys(l1, Log0, Log1, Phys0, Phys1);
  return 0;
}

/*********************************************************************
*
*       GUI_TOUCH_GetCalData
*/
void GUI_TOUCH_GetCalData(int Coord, int* pMin,int* pMax) {
  *pMin = xyMinMax[Coord].Min;
  *pMax = xyMinMax[Coord].Max; 
}
  
/*********************************************************************
*
*       GUI_TOUCH_Exec
*/
void GUI_TOUCH_Exec(void) {
  #ifndef WIN32
  static U8 ReadState;
  int x,y;
  /* calculate Min / Max values */
  if (xyMinMax[GUI_COORD_X].Min < xyMinMax[GUI_COORD_X].Max) {
    xMin = xyMinMax[GUI_COORD_X].Min;
    xMax = xyMinMax[GUI_COORD_X].Max;
  } else {
    xMax = xyMinMax[GUI_COORD_X].Min;
    xMin = xyMinMax[GUI_COORD_X].Max;
  }
  if (xyMinMax[GUI_COORD_Y].Min < xyMinMax[GUI_COORD_Y].Max) {
    yMin = xyMinMax[GUI_COORD_Y].Min;
    yMax = xyMinMax[GUI_COORD_Y].Max;
  } else {
    yMax = xyMinMax[GUI_COORD_Y].Min;
    yMin = xyMinMax[GUI_COORD_Y].Max;
  }
  /* Execute the state machine which reads the touch */
  switch (ReadState) {
  case 0:
    yPhys = TOUCH_X_MeasureY();
    TOUCH_X_ActivateY();  /* Prepare X- measurement */
    ReadState++;
    break;
  default:
    xPhys = TOUCH_X_MeasureX();
    TOUCH_X_ActivateX();  /* Prepare Y- measurement */
    /* Convert values into logical values */
    #if !GUI_TOUCH_SWAP_XY   /* Is X/Y swapped ? */
      x = xPhys;
      y = yPhys;
    #else
      x = yPhys;
      y = xPhys;
    #endif
    if ((x < xMin) || (x > xMax)  || (y < yMin) || (y > yMax)) {
      _StoreUnstable(-1, -1);
    } else {
      x = _AD2X(x);
      y = _AD2Y(y);
      _StoreUnstable(x, y);
    }
    /* Reset state machine */
    ReadState = 0;
    break;
  }
  #endif /* WIN32 */
}

#else

void GUI_TOUCH_DriverAnalog_C(void);  /* Avoid "no prototype" warnings */
void GUI_TOUCH_DriverAnalog_C(void) {}

#endif /* defined(GUI_SUPPORT_TOUCH) && GUI_SUPPORT_TOUCH */

/*************************** End of file ****************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品精品国产色婷婷| 精品国产99国产精品| 韩国av一区二区三区在线观看| 中文字幕在线不卡| 精品国产一区二区三区久久久蜜月 | 91超碰这里只有精品国产| 国产成人精品午夜视频免费| 视频一区二区三区中文字幕| 中文字幕一区在线观看视频| 精品免费日韩av| 欧美在线|欧美| 97久久超碰精品国产| 国产麻豆精品一区二区| 美腿丝袜在线亚洲一区| 亚洲一级二级三级| 自拍偷在线精品自拍偷无码专区| 久久久一区二区三区捆绑**| 欧美一区二区三区人| 欧美伊人精品成人久久综合97| 成人免费看的视频| 国产成人三级在线观看| 美女一区二区三区在线观看| 日韩黄色免费电影| 视频一区二区欧美| 亚洲成人动漫在线观看| 一区二区三区四区不卡视频| 国产精品久久久久久久岛一牛影视| 精品国产亚洲在线| 日韩视频永久免费| 精品理论电影在线| 2023国产精品| 久久精品亚洲一区二区三区浴池| 精品国产一区二区三区忘忧草| 日韩欧美国产麻豆| 精品剧情在线观看| 亚洲精品一线二线三线无人区| 日韩午夜激情免费电影| 日韩一区二区三区av| 日韩欧美一区二区免费| 日韩视频在线一区二区| 精品黑人一区二区三区久久| 亚洲午夜精品在线| 亚洲综合成人网| 亚洲国产精品久久一线不卡| 日韩精品亚洲一区| 老司机午夜精品| 国产精品一区二区久久精品爱涩| 国产aⅴ综合色| av一二三不卡影片| 在线观看91视频| 在线成人av网站| 日韩精品一区二区三区中文不卡 | 亚洲男人的天堂av| 亚洲午夜视频在线| 青青草国产精品亚洲专区无| 久久99热这里只有精品| 国产成人免费9x9x人网站视频| 国产不卡视频一区| 91黄色小视频| 日韩精品在线一区| 中文字幕va一区二区三区| 中文字幕在线不卡视频| 亚洲图片欧美色图| 久久99久久精品| 成人avav影音| 7777精品伊人久久久大香线蕉| 日韩欧美二区三区| 国产精品嫩草久久久久| 亚洲国产一区视频| 久久99精品久久久久久| av在线不卡网| 欧美一级黄色大片| 国产精品短视频| 日本特黄久久久高潮| 国产成人综合亚洲网站| 91电影在线观看| 欧美成人女星排名| 亚洲图片欧美激情| 久久99精品久久久久久动态图| 99久久精品国产一区二区三区| 6080午夜不卡| 中文字幕在线观看一区| 日韩精品每日更新| jlzzjlzz亚洲日本少妇| 9191成人精品久久| 自拍偷拍国产亚洲| 国内欧美视频一区二区| 欧美三级中文字幕在线观看| 国产日韩一级二级三级| 日韩国产在线观看| 成人黄色小视频| 欧美白人最猛性xxxxx69交| 中文字幕制服丝袜一区二区三区| 日韩va亚洲va欧美va久久| 成av人片一区二区| 欧美videos大乳护士334| 亚洲毛片av在线| 国产高清精品在线| 欧美一级黄色录像| 亚洲无人区一区| 成人av电影观看| 久久夜色精品国产欧美乱极品| 亚洲成人手机在线| 色av成人天堂桃色av| 久久久久久久免费视频了| 调教+趴+乳夹+国产+精品| 国产女人aaa级久久久级| 亚洲成人综合在线| 色菇凉天天综合网| 中文字幕欧美三区| 国产精品538一区二区在线| 制服丝袜一区二区三区| 一个色综合av| 色婷婷亚洲综合| 中文字幕在线观看不卡| 国产91精品免费| 2014亚洲片线观看视频免费| 日本最新不卡在线| 欧美日本高清视频在线观看| 一区二区三区免费| 色综合咪咪久久| 亚洲欧洲av色图| 成a人片国产精品| 国产精品护士白丝一区av| 国产麻豆精品95视频| 精品国产免费一区二区三区香蕉| 日韩电影在线一区二区三区| 欧美日韩免费一区二区三区视频| 亚洲欧美日韩在线| 91美女片黄在线观看| 亚洲婷婷在线视频| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品少妇自拍| 国产成a人无v码亚洲福利| 国产欧美va欧美不卡在线| 高清国产一区二区三区| 欧美国产精品中文字幕| 成人av资源在线| 最新国产精品久久精品| 99久久国产免费看| 亚洲免费观看高清在线观看| 色综合天天做天天爱| 一区二区在线观看不卡| 在线欧美小视频| 日韩在线观看一区二区| 日韩欧美的一区| 国产黄色精品网站| 国产精品久久久久aaaa| 色综合天天天天做夜夜夜夜做| 亚洲蜜臀av乱码久久精品| 欧美视频一区二区在线观看| 三级欧美在线一区| 精品久久99ma| 成人黄色在线看| 亚洲福利一区二区| 日韩免费视频一区二区| 狠狠狠色丁香婷婷综合激情| 欧美韩国日本综合| 色婷婷久久久久swag精品| 性久久久久久久久久久久| 日韩一二三区视频| 豆国产96在线|亚洲| 亚洲欧美激情视频在线观看一区二区三区| 欧美亚洲国产一区二区三区va | 99久久精品免费看国产免费软件| 中文字幕一区二区三区精华液 | 精品国产一区二区亚洲人成毛片| 国产电影精品久久禁18| 亚洲精品免费在线| 日韩三级在线免费观看| 国产suv精品一区二区883| 亚洲激情av在线| 欧美不卡在线视频| 91色在线porny| 免费在线观看成人| 国产精品国产三级国产普通话三级 | 一区二区三区小说| 日韩三级视频中文字幕| 成人免费视频视频在线观看免费| 一区二区三区日韩欧美| 亚洲精品一区二区精华| 色视频成人在线观看免| 国内精品自线一区二区三区视频| 国产精品毛片久久久久久久| 欧美一区永久视频免费观看| 粉嫩aⅴ一区二区三区四区| 午夜激情一区二区三区| 国产日韩精品一区二区三区| 欧美日韩高清影院| 成年人网站91| 狠狠狠色丁香婷婷综合激情| 亚洲国产婷婷综合在线精品| 日本一区二区动态图| 91精品福利在线一区二区三区| 99re66热这里只有精品3直播 | 风间由美一区二区av101| 亚洲高清视频的网址| 国产精品久久精品日日| 日韩女优毛片在线| 欧美日韩国产一级片|