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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? touch_panel.c

?? 代碼用簡單的4個IO口外加兩個ADC轉(zhuǎn)換接口實現(xiàn)了觸摸屏全套控制流程.
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *    touch_panel.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This Module is touch panel driver.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#if defined(TOUCH_PANEL_SUPPORT) || defined(HAND_WRITING)
#include    "drv_comm.h"
#include 	"stack_common.h"
#include    "syscomp_config.h"   /*MOD_BMT*/
#include 	"stack_msgs.h"
#include 	"app_ltlcom.h"       /* Task message communiction */
#include    "stacklib.h"         /* Basic type for dll, evshed, stacktimer */
#include    "event_shed.h"       /* Event scheduler */
#include    "stack_timer.h"     /*Timer*/
#include    "app_buff_alloc.h"   /*buffer*/
#include    "task_config.h"      /* Task creation */
#include    "stack_ltlcom.h"       /*msg_send_ext_queue.....definitions*/
#include    "reg_base.h"
#include    "gpio_hw.h"
#include    "gpio_sw.h"
#include    "touch_panel_spi.h"
#include    "eint.h"
#include    "intrCtrl.h"
#include 	"touch_panel.h"
#include 	"touch_panel_buff.h"
#include 	"gpt_sw.h"

#define   touch_down_level   LEVEL_LOW   /*touch down level*/
#define   touch_up_level     LEVEL_HIGH  /*touch up level*/

TouchPanelBufferStruct    touch_panel_data_buffer;
kal_bool    touch_panel_state = touch_down_level; /*touch panel inq level*/


kal_bool send_touch_ilm=KAL_TRUE;
TouchPanelCoordStruct tp_stroke_pre;
static Touch_Panel_Event_enum tp_decode_state=TP_UNKNOWN_EVENT;/*get event state*/

/*GPT timer handle*/
kal_uint8   touch_panel_handle=0;  /*gpt handle*/
kal_uint8   touch_panel_repeat_handle=0;
/*Screen ADC Value*/
kal_uint32 ADC_X_START=230;
kal_uint32 ADC_X_END=3867;
kal_uint32 ADC_Y_START=287;
kal_uint32 ADC_Y_END=3853;
kal_uint32 SCREEN_X_START=0;
#if defined(__MMI_MAINLCD_240X320__)
kal_uint32 SCREEN_X_END=240;
#else
kal_uint32 SCREEN_X_END=176;
#endif
kal_uint32 SCREEN_Y_START=0;
#if defined(__MMI_MAINLCD_240X320__)
	#if defined(PROJECT_I100)||defined(PROJECT_V830)
	kal_uint32 SCREEN_Y_END=320+20;
	#else
	kal_uint32 SCREEN_Y_END=320;
	#endif
#else
kal_uint32 SCREEN_Y_END=220;
#endif


/*Calibration*/
#define TOUCH_CALIBRATION_POINT_NUM 3
TouchPanelCaliStruct TPCali;  /*Calibration offset and slope*/
static TouchPanelCoordStruct cali_point[TOUCH_CALIBRATION_POINT_NUM];
static TouchPanelCoordStruct cali_point_adc[TOUCH_CALIBRATION_POINT_NUM];
static kal_bool tp_cali_mode=KAL_FALSE;
static kal_uint16 tp_cali_cnt=0;
static kal_bool tp_eint_mask = KAL_FALSE;

extern TouchPanel_customize_function_struct *tp_GetFunc(void);
TouchPanel_customize_function_struct *tp_fun_ptr;


/*************************************************************************
* FUNCTION
*	touch_panel_tuning
*
* DESCRIPTION
*	This function is to calculate slope and offset.
*
* PARAMETERS
*  coord1: coordinate of calibration point 1
*  coord2: coordinate of calibration point 2
*  adc1:   ADC of calibration point 1
*  adc2:   ADC of calibration point 1
*  slope:  slope of calibration
*  offset: offset of calibration
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void touch_panel_tuning(kal_int16 coord1, kal_uint16 adc1,
                        kal_int16 coord2, kal_uint16 adc2,
                        double *slope,     double *offset)
{
   *slope=((double)(coord2-coord1)/((double)(adc2-adc1)));
   *offset=(double)coord1-(*slope)*(double)adc1;      
}
/*************************************************************************
* FUNCTION
*	touch_panel_flush
*
* DESCRIPTION
*	This function is to flush all data in ring buffer.
*
* PARAMETERS
*  None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/   
void touch_panel_flush(void)
{
   IRQMask(IRQ_GPT_CODE);
   /* only mask eint when it's unmasked. */
   if (tp_eint_mask == KAL_FALSE)
   EINT_Mask(TP.eint_chan);
   touch_flush_data_buffer();
   /*reset decode state*/
   tp_decode_state=TP_UNKNOWN_EVENT;
   /*recover from buffer full*/
   TP.is_buff_full=KAL_FALSE;
   GPTI_StopItem(touch_panel_handle);
   GPTI_StopItem(touch_panel_repeat_handle);
   TP.skip_unrelease_state=KAL_TRUE;
   
   if (tp_eint_mask == KAL_FALSE)
   EINT_UnMask(TP.eint_chan);
   IRQUnmask(IRQ_GPT_CODE);
}
/*************************************************************************
* FUNCTION
*	touch_panel_flush
*
* DESCRIPTION
*	This function is to reset touch panel driver. 
*
* PARAMETERS
*  skip_unrelease_enable: skip the first unrelease events or not.
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/  
void touch_panel_reset(kal_bool skip_unrelease_enable)
{
   IRQMask(IRQ_GPT_CODE);
   EINT_Mask(TP.eint_chan);
   /*stop calibration*/
   touch_panel_stop_cali();
   /*flush ring buffer*/   
   touch_flush_data_buffer();
   /*reset decode state*/
   tp_decode_state=TP_UNKNOWN_EVENT;
   /*configure default pen/move offset*/
   //touch_panel_conf_move_offset(MIN_PEN_MOVE_OFFSET, MAX_STROKE_MOVE_OFFSET, 10);
   /*buff full flag*/
   TP.is_buff_full=KAL_FALSE;
   /*skip the first unrelease events or not*/
   TP.skip_unrelease_enable=skip_unrelease_enable;
   if(TP.skip_unrelease_enable)
   {
      TP.skip_unrelease_state=KAL_TRUE;
      #ifdef TOUCH_PANEL_DEBUG
      dbg_printWithTime("reset and skip");
      #endif
   }   
   else
   {
      TP.skip_unrelease_state=KAL_FALSE;   
      #ifdef TOUCH_PANEL_DEBUG
      dbg_printWithTime("reset but not skip");
      #endif
   }   
   /*stop polling*/
   GPTI_StopItem(touch_panel_handle);
   GPTI_StopItem(touch_panel_repeat_handle);
   EINT_UnMask(TP.eint_chan);
   IRQUnmask(IRQ_GPT_CODE);
  
}
/*************************************************************************
* FUNCTION
*	touch_panel_start_cali
*
* DESCRIPTION
*	This function is to do coordinate calibration. 
*
* PARAMETERS
*  point: coordiante of calibration points
*  num:   number of calibration points
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void touch_panel_start_cali(TouchPanelCoordStruct *point, kal_uint16 num)
{
   #if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
   #else
   kal_uint32 i;
   for(i=0;i<num;i++)
   {
      cali_point[i].x=point[i].x;   
      cali_point[i].y=point[i].y;
   }      
   #endif
   tp_cali_mode=KAL_TRUE;
}
/*************************************************************************
* FUNCTION
*	touch_panel_stop_cali
*
* DESCRIPTION
*	This function is to stop coordinate calibration.
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void touch_panel_stop_cali(void)
{
   tp_cali_mode=KAL_FALSE;  
   tp_cali_cnt=0;  
   cali_point[0].x=0;   
   cali_point[0].y=0;
   cali_point[1].x=0;
   cali_point[1].y=0;      
}
/*************************************************************************
* FUNCTION
*	touch_panel_set_cali
*
* DESCRIPTION
*	This function is to set coordinate calibration.
*
* PARAMETERS
*	cali: calibration data
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
/*MMI configures calibration accodring to the value in the NVRAM*/
void touch_panel_set_cali(TouchPanelCaliStruct cali)
{
   
   TPCali.x_slope= cali.x_slope;
   TPCali.x_offset= cali.x_offset;
   TPCali.y_slope= cali.y_slope;
   TPCali.y_offset= cali.y_offset;
}
/*************************************************************************
* FUNCTION
*	touch_panel_read_cali
*
* DESCRIPTION
*	This function is to read coordinate calibration.
*
* PARAMETERS
*	cali: the pointer to read calibraion data
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
/*MMI reads calibration after receiving MSG_ID_TP_CALI_DONE*/
/*and stores it in NVRAM*/
void touch_panel_read_cali(TouchPanelCaliStruct *cali)
{
   cali->x_slope =TPCali.x_slope;  
   cali->x_offset=TPCali.x_offset;
   cali->y_slope =TPCali.y_slope;  
   cali->y_offset=TPCali.y_offset;
}  
   
/*************************************************************************
* FUNCTION
*	touch_panel_cb_registration
*
* DESCRIPTION
*	This function is to register touch event callback function.
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void touch_panel_cb_registration (TP_EVENT_FUNC Callback, void *parameter)
{
   TP.touch_panel_event_cb=Callback;
   TP.cb_para=parameter;
}
/*************************************************************************
* FUNCTION
*	touch_panel_up_hdr
*
* DESCRIPTION
*	This function is to handle up event.
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void touch_panel_up_hdr(void)
{
   /*check if the down point is reasonable*/
   if(TP.wait_next_down==KAL_TRUE)
      return;
      
   /*reset temp coordinate*/
   TP.temp.x=0;
   TP.temp.y=0;
   /*stop polling*/     
   GPTI_StopItem(touch_panel_handle);
   GPTI_StopItem(touch_panel_repeat_handle);
   if(TP.skip_unrelease_state==KAL_FALSE)
   {   
   if(TP.area==NON_HAND_WRITING)
   {    
         tp_data_pop(PEN_UP, TP.pre.x, TP.pre.y);
   }   
   else
   {      
         tp_data_pop(STROKE_UP, TP.pre.x, TP.pre.y);
      }   
   }
   else/*TP.skip_unrelease_state==KAL_TRUE*/
      TP.skip_unrelease_state=KAL_FALSE;   
}   
/*************************************************************************
* FUNCTION
*	touch_panel_down_hdr
*
* DESCRIPTION
*	This function is to handle down event.
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void touch_panel_down_hdr(void)
{
   kal_int16  x, y;
   kal_uint16 i;
   kal_bool valid=KAL_FALSE;
   TP.skip_unrelease_state=KAL_FALSE;
   touch_panel_read_adc(&x, &y);
   touch_excute_cali(x,y);
   valid=touch_panel_adc_to_coordinate(&x,&y);/*tranlate*/            
   if(valid==KAL_TRUE)
   {
   TP.pre.x=x; 
   TP.pre.y=y;
      TP.begin.x=x; 
      TP.begin.y=y;
      TP.wait_next_down=KAL_FALSE;
   }
   else
   {
      /*use the previous down coordinate to prevent touch panel controller temp state*/
   	//x=TP.pre.x; 
   	//y=TP.pre.y;
   	TP.wait_next_down=KAL_TRUE;
   	return;
   }		
   TP.temp.x=0;
   TP.temp.y=0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道a无线码一区v| 日产欧产美韩系列久久99| 成人视屏免费看| 国产精品欧美久久久久一区二区| 国产成人亚洲综合a∨婷婷图片 | 91福利视频久久久久| 亚洲视频一二三| 欧美在线短视频| 亚洲亚洲精品在线观看| 欧美一区二区三区四区视频| 韩国女主播一区| 中文字幕亚洲一区二区av在线| 91免费小视频| 欧美aaaaa成人免费观看视频| 337p日本欧洲亚洲大胆色噜噜| 成人小视频在线| 亚洲成人久久影院| 2023国产精品| 91高清在线观看| 蜜桃免费网站一区二区三区| 久久久www成人免费毛片麻豆| 99久久免费国产| 日本中文字幕一区| 中文字幕精品在线不卡| 欧美片在线播放| 国产成人免费网站| 亚洲福利视频一区二区| 国产日韩欧美电影| 欧美日韩视频第一区| 国产99久久久国产精品潘金| 亚洲一区在线电影| 国产亚洲1区2区3区| 91久久精品日日躁夜夜躁欧美| 蜜芽一区二区三区| 亚洲美女免费在线| 久久天天做天天爱综合色| 欧美在线观看一区| 国产成人精品免费在线| 午夜激情一区二区三区| 亚洲欧美综合色| 精品国产髙清在线看国产毛片| 在线观看国产一区二区| 国产精品自在在线| 奇米影视一区二区三区小说| 亚洲欧美激情插| 国产视频在线观看一区二区三区| 欧美日韩高清影院| 91亚洲精华国产精华精华液| 国产在线播放一区二区三区| 日韩国产欧美一区二区三区| 亚洲乱码中文字幕| 亚洲国产成人自拍| 久久综合国产精品| 欧美一级搡bbbb搡bbbb| 精品视频1区2区| 一本大道av一区二区在线播放| 国产精品一品视频| 美国十次了思思久久精品导航| 亚洲成人av资源| 亚洲欧美国产毛片在线| 国产精品久久久久一区| 国产视频不卡一区| 26uuu久久天堂性欧美| 日韩午夜小视频| 91精品国产一区二区人妖| 91成人免费在线视频| 91天堂素人约啪| 成人av在线播放网址| 国产精品白丝jk黑袜喷水| 激情伊人五月天久久综合| 久久精品国内一区二区三区| 日本怡春院一区二区| 丝袜诱惑制服诱惑色一区在线观看| 樱花影视一区二区| 亚洲一区二区三区三| 一区二区成人在线观看| 亚洲精品欧美专区| 一区二区三区四区av| 一区二区三区在线看| 伊人一区二区三区| 亚洲成va人在线观看| 偷窥国产亚洲免费视频| 日本在线不卡视频一二三区| 美女一区二区在线观看| 久久激情综合网| 国产精品99久久久久久久vr | 在线成人免费视频| 制服.丝袜.亚洲.另类.中文| 欧美一区二区视频在线观看2022 | 久久一区二区三区国产精品| www国产成人免费观看视频 深夜成人网| 精品久久久三级丝袜| 国产亚洲一区字幕| 成人欧美一区二区三区视频网页| 国产精品国产三级国产a | 欧美精品第一页| 日韩视频一区二区| 久久精品一区八戒影视| 中文字幕亚洲区| 亚洲一卡二卡三卡四卡| 蜜臀精品一区二区三区在线观看| 国产在线一区二区| 93久久精品日日躁夜夜躁欧美| 欧美无砖砖区免费| 精品99999| 亚洲天堂a在线| 日本成人在线不卡视频| 国产精品1024久久| 在线视频欧美精品| 精品国产区一区| 亚洲精品国产精华液| 免费看欧美女人艹b| 高清国产一区二区| 欧美巨大另类极品videosbest| xnxx国产精品| 亚洲一区二区三区小说| 国产成人午夜精品影院观看视频| 色狠狠av一区二区三区| 精品国产一区二区亚洲人成毛片 | 欧美日韩一区视频| 国产亚洲污的网站| 亚洲高清中文字幕| 成人午夜在线播放| 91麻豆精品国产91久久久使用方法 | 国产激情视频一区二区三区欧美| 色久优优欧美色久优优| 久久久久88色偷偷免费| 亚洲综合999| 国产成人av电影在线播放| 3d成人h动漫网站入口| 国产精品美女www爽爽爽| 蜜桃视频一区二区| 欧美做爰猛烈大尺度电影无法无天| 久久久国际精品| 日本美女一区二区三区视频| 色综合色综合色综合 | 在线不卡免费欧美| 亚洲少妇30p| 国产99久久久久| 欧美精品一区二区三| 午夜精品久久久久久久久| 成人av资源站| 国产欧美日韩中文久久| 久久国产乱子精品免费女| 欧美精选在线播放| 亚洲精品国产第一综合99久久| 国产在线观看一区二区| 日韩欧美一区二区久久婷婷| 亚洲图片欧美视频| 91国产丝袜在线播放| 国产精品美女久久久久久| 国产一区福利在线| 欧美videos大乳护士334| 日韩精品一二三四| 91麻豆精品国产91久久久使用方法 | 天天综合日日夜夜精品| 91成人免费在线视频| 亚洲色大成网站www久久九九| 成人午夜视频网站| 国产三级三级三级精品8ⅰ区| 国产主播一区二区三区| 欧美xxxx老人做受| 狠狠狠色丁香婷婷综合激情 | 成人涩涩免费视频| 国产日韩影视精品| 粉嫩蜜臀av国产精品网站| 国产欧美1区2区3区| 成人性色生活片| 一区视频在线播放| 91蝌蚪国产九色| 亚洲国产精品久久久久婷婷884| 在线精品视频免费播放| 亚洲电影你懂得| 欧美乱妇15p| 久久国内精品自在自线400部| 精品国产凹凸成av人网站| 国内精品国产成人国产三级粉色| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品一二三| 亚洲男同1069视频| 欧美日韩在线免费视频| 视频一区在线播放| 精品久久久影院| 成人午夜在线视频| 夜夜亚洲天天久久| 欧美日韩精品欧美日韩精品一| 青娱乐精品视频| 国产日产精品一区| 色欧美乱欧美15图片| 日韩**一区毛片| 欧美国产成人在线| 欧美综合久久久| 麻豆精品新av中文字幕| 中文字幕欧美三区| 欧美色电影在线| 国产在线国偷精品免费看| 亚洲人成精品久久久久| 日韩一区二区免费高清| 成人a级免费电影| 亚洲国产精品一区二区久久恐怖片|