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

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

?? touch_panel.c

?? 代碼用簡單的4個IO口外加兩個ADC轉換接口實現了觸摸屏全套控制流程.
?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久免费| 欧美性xxxxxx少妇| 丝袜亚洲另类欧美综合| 亚洲曰韩产成在线| 一区二区三区在线视频免费| 中文字幕一区二区在线观看| 国产精品久久久久婷婷二区次| 久久久精品综合| 亚洲欧洲性图库| 国产精品二三区| 一个色综合av| 五月综合激情日本mⅴ| 免费高清在线视频一区·| 久久av中文字幕片| 成人一区二区视频| 一本久久综合亚洲鲁鲁五月天 | 欧美一区二区三区免费在线看| 欧美日韩午夜影院| 日韩欧美国产一区二区三区 | 精品88久久久久88久久久| www国产成人免费观看视频 深夜成人网| 日韩一级二级三级| 国产色爱av资源综合区| 一区免费观看视频| 日本人妖一区二区| 国产69精品久久久久毛片| 91九色02白丝porn| 日韩精品一区二区三区视频在线观看| 久久婷婷国产综合精品青草| 国产精品国产自产拍高清av| 亚洲va欧美va国产va天堂影院| 美国毛片一区二区| 色婷婷亚洲婷婷| 精品乱码亚洲一区二区不卡| 国产精品嫩草99a| 午夜精品福利视频网站| 国产高清在线观看免费不卡| 欧美性做爰猛烈叫床潮| 欧美成人免费网站| 亚洲精品中文字幕在线观看| 久88久久88久久久| 欧美性受极品xxxx喷水| 日韩视频一区二区在线观看| 亚洲另类色综合网站| 另类小说一区二区三区| 日本韩国精品在线| 国产女人aaa级久久久级| 视频在线观看一区| 91在线免费视频观看| 久久综合精品国产一区二区三区| 亚洲一线二线三线视频| 国产精品一二三四| 日韩美女在线视频| 午夜伦理一区二区| 在线免费av一区| 日本一区二区三区四区在线视频 | 日韩一二三区不卡| 亚洲乱码国产乱码精品精98午夜| 国产黄人亚洲片| 欧美岛国在线观看| 日韩国产在线观看| 欧美色老头old∨ideo| 亚洲欧美日韩国产手机在线| 国产成人免费在线观看不卡| 欧美日韩视频在线观看一区二区三区 | 在线亚洲免费视频| 日韩码欧中文字| av中文字幕在线不卡| 国产精品福利一区| 99久久久国产精品免费蜜臀| 中文字幕欧美日韩一区| 国产激情91久久精品导航 | 一本久久精品一区二区| 亚洲私人影院在线观看| 成人蜜臀av电影| 国产精品美女久久久久久久网站| 国产福利一区二区三区视频在线 | 亚洲一区成人在线| 欧美系列亚洲系列| 午夜伦理一区二区| 欧美一区二区美女| 国内精品久久久久影院薰衣草 | 亚洲国产一区二区三区青草影视| 色综合久久久久综合99| 一区二区三区高清不卡| 欧美男人的天堂一二区| 日本特黄久久久高潮 | 处破女av一区二区| 亚洲欧洲国产日本综合| 色综合久久中文字幕| 五月婷婷激情综合网| 日韩免费高清av| 大桥未久av一区二区三区中文| 综合亚洲深深色噜噜狠狠网站| 在线观看一区不卡| 日韩vs国产vs欧美| 国产视频一区二区在线| 一本色道久久综合狠狠躁的推荐| 亚洲第一成人在线| www国产精品av| 91国偷自产一区二区开放时间| 奇米在线7777在线精品 | 欧美片在线播放| 国产精品1区二区.| 一区二区三区四区五区视频在线观看 | 日韩一区二区在线免费观看| 国产成人综合在线观看| 亚洲国产精品一区二区尤物区| 2024国产精品视频| 色八戒一区二区三区| 久久精品久久99精品久久| 国产精品网友自拍| 欧美疯狂做受xxxx富婆| 国产91清纯白嫩初高中在线观看| 亚洲国产一区二区a毛片| 精品国产乱码久久久久久闺蜜| 北条麻妃一区二区三区| 老鸭窝一区二区久久精品| 亚洲精品亚洲人成人网在线播放| 欧美一级日韩免费不卡| 在线精品视频小说1| 国产真实乱偷精品视频免| 亚洲午夜免费视频| 国产精品成人在线观看| 欧美不卡123| 欧美乱妇15p| av成人老司机| 国产91丝袜在线播放0| 另类人妖一区二区av| 亚洲成av人**亚洲成av**| 中文字幕一区二区三| 久久久www成人免费毛片麻豆| 欧美日韩成人高清| 欧美三级资源在线| 色偷偷成人一区二区三区91| 国产传媒一区在线| 韩国女主播一区二区三区| 爽爽淫人综合网网站| 亚洲成人一区在线| 亚洲一区电影777| 一区二区三区在线高清| 亚洲精品你懂的| 亚洲免费三区一区二区| 亚洲欧美怡红院| 亚洲视频一二三区| 亚洲婷婷综合色高清在线| 国产精品视频在线看| 国产女主播视频一区二区| 国产亚洲精品7777| 欧美激情中文字幕| 国产日韩欧美精品综合| 久久久久成人黄色影片| 国产午夜精品久久久久久免费视 | 亚洲成人7777| 视频一区二区三区入口| 五月天欧美精品| 美国十次了思思久久精品导航| 麻豆成人久久精品二区三区小说| 久久福利视频一区二区| 久久99国产精品免费网站| 国内精品伊人久久久久av一坑| 国内久久精品视频| av网站一区二区三区| 91久久精品一区二区| 欧美群妇大交群的观看方式| 日韩一卡二卡三卡| 国产欧美一区二区精品性| 国产精品美日韩| 亚洲成人一区二区| 韩国毛片一区二区三区| 成人高清av在线| 欧美伊人精品成人久久综合97| 欧美日韩国产另类不卡| 久久只精品国产| 18欧美乱大交hd1984| 五月开心婷婷久久| 激情文学综合网| 色婷婷精品久久二区二区蜜臀av| 欧美三级电影在线看| 日韩视频免费直播| 国产精品乱码一区二三区小蝌蚪| 一区二区三区免费在线观看| 日韩电影免费在线| 成人成人成人在线视频| 91黄色免费看| 国产无一区二区| 性感美女久久精品| 国产精品1区2区| 欧美精品日韩综合在线| 中文字幕久久午夜不卡| 日韩高清中文字幕一区| 成人av在线播放网站| 717成人午夜免费福利电影| 中文字幕第一区综合| 天堂久久久久va久久久久| 成人99免费视频| 337p粉嫩大胆噜噜噜噜噜91av| 伊人色综合久久天天| 精久久久久久久久久久| 欧美日韩中文精品|