touch_panel_.h 21.7 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617
/*****************************************************************************
*  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:
 * ---------
 *    serial_interface.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This Module defines Touch Panel Interface.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#ifndef TOUCH_PANEL__H
#define TOUCH_PANEL__H
#include "Eint.h"
#include "intrCtrl.h"
#include "kal_non_specific_general_types.h"
#include "dcl_hts.h"
#include "kal_release.h"

#if defined(__TOUCH_PANEL_CAPACITY__)
#define   TOUCH_PANEL_BUFFER_SIZE 512*16 //size MUST be exponential of 2
#define   TP_SUPPORT_POINTS 5
#define   TP_EVENT_HEADER 8
#define   BASIC_EVENT_UNIT   TP_EVENT_HEADER + 40 // size of TouchPanelMultipleEventStruct
#elif defined(__TOUCH_PANEL_MULTITOUCH__)
#define   TP_SUPPORT_POINTS 2
#define   TOUCH_PANEL_BUFFER_SIZE 512*2
#define   BASIC_EVENT_UNIT   24 // x1/x2(4), y1/y2(4), pressure1/2(4), event1/2(2-8), timestamp(4)
#define   TP_EVENT_HEADER 8
#else
#define   TP_SUPPORT_POINTS 1
#define   TOUCH_PANEL_BUFFER_SIZE 512
#define   BASIC_EVENT_UNIT   14 // x(2), y(2), pressure(2), event(1-4), timestamp(4)
#endif//#if defined(__TOUCH_PANEL_CAPACITY__)

#define   TOUCH_PANEL_BUFFER_HIGH_THRES TOUCH_PANEL_BUFFER_SIZE*90/100
#define   TOUCH_PANEL_BUFFER_LOW_THRES TOUCH_PANEL_BUFFER_SIZE*80/100
#define   HAND_WRITING_AREA_NUM  3

#if !defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
#define   MIN_PEN_MOVE_OFFSET 5
#define   HAND_WRITING_MAX_OFFSET 50
#define   NONHAND_WRITING_MAX_OFFSET 100
#define   MAX_STROKE_MOVE_OFFSET 1

#if defined(TRULY_HVGA_LCM)
#define   TOUCH_PANEL_CALI_CHECK_OFFSET  12
#else
#define   TOUCH_PANEL_CALI_CHECK_OFFSET  6
#endif //#if defined(TRULY_HVGA_LCM)
#endif //#if !defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)

#define   MAX_ADC_VALUE 4095 

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

#if !defined(IRQ_TS_CODE)
#if defined(DRV_TP_6516_AP_SETTING)
#define IRQ_TS_CODE IRQ_TOUCHSCREEN_CODE
#elif defined(DRV_TP_IRQ_TPC)
#define IRQ_TS_CODE IRQ_TPC_CODE
#else
#define IRQ_TS_CODE IRQ_AUXADC_CODE
#endif
#endif//#if !defined(IRQ_TS_CODE)

#define CTP_PATTERN 0xAA

typedef enum {
  CTP_NO_POINT,
  CTP_GESTURE, //save the gesture information in one point event
  CTP_1POINT=1,
  CTP_2POINTS,
  CTP_3POINTS,
  CTP_4POINTS,
  CTP_5POINTS,
  CTP_6POINTS,
  CTP_7POINTS,
  CTP_8POINTS,
  CTP_9POINTS,
  CTP_10POINTS,
  //add new detection type before unknown
  CTP_UNKNOWN
} CTP_EVENT_NUMBER_ENUM;

typedef struct
{
   // Touch_Panel_Event_enum
   kal_uint16 event; 
   /*coordinate point, not diff*/
   kal_uint16 x;  
   kal_uint16 y;
   kal_uint16 z; //resistance TP: presure,  capacitive TP: area
} TP_SINGLE_EVENT_T;

typedef enum {
      UP,
      DOWN
} Touch_Panel_PenState_enum;

typedef enum {
      CTP_LAST_EVENT_GET,
      CTP_LAST_EVENT_SET
} Touch_Panel_Handle_LastEvent_enum;

typedef enum {
   TP_CALI_POINT_LOW_BOUND,
   TP_CALI_NEGATIVE_LOW_BOUND,
   TP_CALI_NEGATIVE_UP_BOUND,
   TP_CALI_POSITIVE_UP_BOUND,
   TP_CALI_POSITIVE_LOW_BOUND,
   TP_CALI_MIN_X_LOW_BOUND,
   TP_CALI_MIN_X_UP_BOUND,
   TP_CALI_MAX_X_LOW_BOUND,
   TP_CALI_MAX_X_UP_BOUND,
   TP_CALI_MIN_Y_LOW_BOUND,
   TP_CALI_MIN_Y_UP_BOUND,
   TP_CALI_MAX_Y_LOW_BOUND,
   TP_CALI_MAX_Y_UP_BOUND,
   TP_CALI_FINISH
} Touch_Panel_Dual_Calibration_Mode_enum;

typedef struct {
   kal_int16 point_low_bound;
   kal_int16 negative_low_bound;
   kal_int16 negative_up_bound;
   kal_int16 positive_up_bound;
   kal_int16 positive_low_bound;
   kal_int16 min_x_low_bound;
   kal_int16 min_x_up_bound;
   kal_int16 max_x_low_bound;
   kal_int16 max_x_up_bound;
   kal_int16 min_y_low_bound;
   kal_int16 min_y_up_bound;
   kal_int16 max_y_low_bound;
   kal_int16 max_y_up_bound;
} TouchPanel_dual_touch_custom_data_struct;

typedef enum {
   TP_SINGLE_CALIBRATION_MODE_STEP1,
   TP_SINGLE_CALIBRATION_MODE_STEP2,
   TP_SINGLE_CALIBRATION_MODE_STEP3,
   TP_DUAL_CALIBRATION_MODE,
   TP_FINISH_CALIBRATION_MODE
} Touch_Panel_Calibration_Mode_enum;

typedef enum {
      HAND_WRITING,
      NON_HAND_WRITING
} Touch_Panel_Area_enum;
typedef enum {
      PEN_DOWN,    /*0*/  
      PEN_UP,      /*1*/
      PEN_MOVE,    /*2*/
      PEN_LONGTAP, /*3*/     
      PEN_REPEAT,  /*4*/ 
      PEN_ABORT,   /*5*/ 
      TP_UNKNOWN_EVENT,/*6*/
      STROKE_MOVE,     /*7*/
      STROKE_STATICAL, /*8*/
      STROKE_HOLD, /*9*/
      PEN_LONGTAP_HOLD, /*10*/
      PEN_REPEAT_HOLD,  /*11*/ 
      STROKE_DOWN_, /*12*/
      STROKE_LONGTAP_,   /*13*/
      STROKE_UP_,/*14*/
      STROKE_DOWN=0xc0, /*0*/        /*1*/
      STROKE_LONGTAP=0x7e,   /*8*/
      STROKE_UP=0x7f/*127*/
} Touch_Panel_Event_enum;
typedef kal_uint16 (*CTP_FUNC)(kal_int16 x_diff, kal_int16 y_diff, kal_uint16 count);

typedef struct
{   
   kal_int16 x;  /*x coordinate*/
   kal_int16 y;  /*y coordinate*/ 
}TouchPanelCoordStruct; 
typedef struct
{  
   TouchPanelCoordStruct min;
   TouchPanelCoordStruct max;
}TouchPanelHandAreaStruct; 

typedef struct
{  
   /*x*/ 
   double x_slope;
   double x_offset; 
   /*y*/   
   double y_slope;
   double y_offset; 
}TouchPanelCaliStruct ; 
typedef void (*TP_EVENT_FUNC)(void *parameter, Touch_Panel_Event_enum state) ; 
typedef struct
{   
   kal_eventgrpid    event;               /*event id*/
   kal_uint8         gpthandle;           /*gpt handle*/
   kal_uint8         eint_chan;
   kal_uint32        longtap_cnt;         /*LongTap cnt*/
   kal_uint32        handwriting_longtap_cnt;         /*LongTap cnt*/
   kal_uint32        repeat_cnt;          /*Repeat cnt*/
   kal_uint32        low_sample_period;
   kal_uint32        high_sample_period;
   TouchPanelHandAreaStruct handarea[HAND_WRITING_AREA_NUM];    /*hand area*/
   TouchPanelHandAreaStruct ext_handarea;     /*extended area*/
   kal_uint16               hand_num;   
   kal_bool                 ext_enable;   /*extended stroke or not*/
   TouchPanelCoordStruct cur;             /*current point coord.*/
   TouchPanelCoordStruct pre;             /*previous point coord.*/
   TouchPanelCoordStruct temp;             /*previous point coord.*/      
   TouchPanelCoordStruct begin;             /*the first down point coord.*/      
   TP_EVENT_FUNC touch_panel_event_cb;
   void     *cb_para;
   Touch_Panel_Area_enum area;            /*(non)handwriting*/  
   Touch_Panel_PenState_enum      state;  /*Down or UP*/  
   kal_bool  skip_unrelease_enable;
   kal_bool  skip_unrelease_state;   
   kal_bool  is_buff_full;
   kal_bool  wait_next_down;      /*inidcate if the down point reasonable*/
   kal_uint16 pen_offset;         /*pen move offset*/
   kal_uint16 longtap_pen_offset;/*longtap pen move offset*/
   kal_uint16 longtap_stroke_offset; /*longtap stroke move offset*/
   kal_uint16 storke_offset;     /*stroke offset*/
   kal_bool   longtap_state;     /*wait longtap timeout or not*/
#if defined(DRV_TOUCH_PANEL_PAIR_GUARANTEE)
   Touch_Panel_Event_enum buffer_push_stat;
   TouchPanelCoordStruct  buffer_push_point;             /*previous point coord.*/   
#endif //#if defined(DRV_TOUCH_PANEL_PAIR_GUARANTEE)

   DCL_HANDLE hts_handle;
   PFN_DCL_CALLBACK tp_down_cb;
   void *	tp_down_cb_para;
   PFN_DCL_CALLBACK tp_up_cb;
   void *   tp_up_cb_para;

}TouchPanelDataStruct;

typedef struct
{
   kal_int16     x_adc;
   kal_int16     y_adc;
   Touch_Panel_Event_enum event;
   kal_uint32   time_stamp;		// unit: system tick
}TouchPanelEventStruct;

typedef struct
{
   kal_uint16   model; // Single/Dual/Triple/Four/Five/All gesture 
   kal_uint16   padding; //currently use for check the structure format correctness, 0xAA
   kal_uint32  time_stamp;
   TP_SINGLE_EVENT_T points[5];
} TouchPanelMultipleEventStruct;


typedef struct
{
   kal_uint8      touch_panel_data[TOUCH_PANEL_BUFFER_SIZE];
   kal_uint16      touch_buffer_rindex;
   kal_uint16      touch_buffer_windex;
#if defined(__TOUCH_PANEL_CAPACITY__) || defined(__TOUCH_PANEL_MULTITOUCH__)
   kal_uint16      touch_buffer_last_rindex;
   kal_uint16      touch_buffer_last_windex;
#endif
}TouchPanelBufferStruct;

typedef struct {
#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
   kal_uint32 ts_debounce_time; //TS_DEBOUNCE_TIME
   kal_uint32 touch_panel_cali_check_offset;
   kal_uint32 min_pen_move_offset;//  MIN_PEN_MOVE_OFFSET = 10;
   kal_uint32 hand_writing_max_offset;//  HAND_WRITING_MAX_OFFSET = 50;
   kal_uint32 nonhand_writing_max_offset;//  NONHAND_WRITING_MAX_OFFSET = 100;
   kal_uint32 max_stroke_move_offset;//  MAX_STROKE_MOVE_OFFSET = 1;
   kal_uint32 touch_pressure_threshold_high;// TOUCH_PRESSURE_THRESHOLD_HIGH=6000;
#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
   kal_uint32 multiple_point_selection;//  MULTIPLE_POINT_SELECTION= 3;
#endif //#if defined(DRV_TOUCH_PANEL_MULTIPLE_PICK)
#if defined(__DRV_TP_DISCARD_SHIFTING__)
   kal_uint32 pressure_check_boundary;//  PRESSURE_CHECK_BOUNDARY = 2000;
   kal_uint32 pressure_shifting_boundary;//  PRESSURE_SHIFTING_BOUNDARY = 800;
#endif //#if defined(__DRV_TP_DISCARD_SHIFTING__)
#endif //#if defined(DRV_TOUCH_PANEL_CUSTOMER_PARAMETER)
   kal_int32 touch_panel_filter_thresold;
   /*ADC*/
   kal_int32 x_adc_start;
   kal_int32 x_adc_end;
   kal_int32 y_adc_start;
   kal_int32 y_adc_end;
   /*Coord.*/
   kal_int32 x_coord_start;
   kal_int32 x_coord_end;
   kal_int32 y_coord_start;
   kal_int32 y_coord_end;
   /*Size.*/
   kal_int32 x_millimeter;
   kal_int32 y_millimeter;
   /*EINT*/
   kal_uint8  eint_down_level;	

#if defined(__TOUCH_PANEL_MULTITOUCH__)
   kal_int16 x_plate; // x axis resistance
   kal_int16 y_plate; // y axis resistance
   TouchPanel_dual_touch_custom_data_struct tp_dual_cali;
   kal_int32 average_number;
   kal_int32 range;
   kal_int32 step;
   kal_int32 min_delta;
#endif //defined(__TOUCH_PANEL_MULTITOUCH__)
} TouchPanel_custom_data_struct;

typedef struct {  
   TouchPanel_custom_data_struct * (*tp_get_data)(void);
   void (*tp_read_adc)(kal_uint16 *x, kal_uint16 *y);
#ifdef TOUCH_PANEL_PRESSURE
#ifndef DRV_TP_SLIM
   kal_bool (*tp_pressure_check)(void);
#endif
#endif
#ifndef DRV_TP_SLIM
   void (*tp_irq_enable)(kal_bool on);
#endif
}TouchPanel_customize_function_struct;  

typedef enum {
      CTP_PARA_START,
      CTP_PARA_RESOLUTION=1,
      CTP_PARA_THRESHOLD=2,
      CTP_PARA_REPORT_INTVAL=4,
      CTP_PARA_IDLE_INTVAL=8,
      CTP_PARA_SLEEP_INTVAL=0x10,
      CTP_PARA_END
} CTP_parameters_enum;

typedef struct
{
	kal_uint16 resolution; // CTP_RESOLTION, 
	kal_uint16 threshold; //  CTP_THRESHOLD, 
	kal_uint16 Report_interval;
	kal_uint16 Idle_time_interval;
	kal_uint16 sleep_time_interval;
	kal_uint16 gesture_active_distance;
	kal_uint16 MS_calibration[128];
}CTP_parameters_struct;// ctp_get_set_enum 

typedef struct
{   
   char	vendor[8];
   char	product[8];
   char	FirmwareVersion[8];
}CTP_custom_information_struct;

typedef enum {
	CTP_ACTIVE_MODE,
	CTP_IDLE_MODE,
	CTP_SLEEP_MODE,
	CTP_GESTURE_DETECTION_MODE,
	CTP_MULTIPLE_POINT_MODE,
	CTP_FIRMWARE_UPDATE,
	CTP_FM_ENABLE,
	CTP_FM_DISABLE
}ctp_device_mode_enum;

typedef struct{
	kal_bool (*ctp_init)(void);
	kal_bool (*ctp_set_device_mode)(ctp_device_mode_enum);
	Touch_Panel_PenState_enum (*ctp_hisr)(void); 
	kal_bool (*ctp_get_data)(TouchPanelMultipleEventStruct *);
	kal_bool (*ctp_parameters)(CTP_parameters_struct *, kal_uint32, kal_uint32);
	void (*ctp_power_on)(kal_bool);
	kal_uint32 (*ctp_command)(kal_uint32, void *, void *);
}CTP_customize_function_struct;

/********************Function Declaration********************/
/********************For upper layer*************************/
void Touch_Panel_Ctrl_Param(DCL_CTRL_CUSTOM_PARAM_T param);
void Touch_Panel_Ctrl_Param_Range(DCL_CTRL_CUSTOM_PARAM_RANGE_T param);
void Touch_Panel_MicronMeter_To_Coord(DCL_CTRL_MICRONMETER_COORD_T* pparam);
void Touch_Panel_Coord_To_MicronMeter(DCL_CTRL_MICRONMETER_COORD_T* pparam ); 


void touch_panel_enable_(kal_bool enable);/*enable/disable touch panel*/
void ts_tcs_off_(kal_bool enable);/*turn off touch panel module when backlight off*/
kal_bool touch_panel_get_event_(TouchPanelMultipleEventStruct *touch_data);/*get touch event*/
void touch_panle_conf_timeout_period_(kal_uint32 longtap, 
                                     kal_uint32 repeat,
                                     kal_uint32 handwriting_longtap);
void touch_panle_conf_sample_period_(kal_uint32 low, kal_uint32 high);
void touch_panel_flush_(void);/*flsuh data in ring buffer*/
void touch_panel_start_cali_(TouchPanelCoordStruct *point, kal_uint16 num);
void touch_panel_stop_cali_(void);
void touch_panel_start_dual_cali_(void);
void touch_panel_stop_dual_cali_(void);
void touch_panel_read_cali_(TouchPanelCaliStruct *cali);
void touch_panel_set_cali_(TouchPanelCaliStruct cali);
void touch_panel_reset_(kal_bool skip_unrelease_enable);
void touch_panel_reset_handwriting_(void);
void touch_panel_conf_move_offset_(kal_uint16 pen_offset, kal_uint16 stroke_offset, 
                                  kal_uint16 longtap_pen_offset,
                                  kal_uint16 longtap_stroke_offset);
void touch_panel_conf_handwriting_(TouchPanelHandAreaStruct *area, kal_uint16 n, 
                              TouchPanelHandAreaStruct  *ext_area);
//void touch_panel_cb_registration_ (TP_EVENT_FUNC function, void *parameter);//liming remove --change to DCL interface
void Touch_Panel_Pixel_To_MicronMeter(DCL_CTRL_MICRONMETER_COORD_T* pparam);
void Touch_Panel_MicronMeter_To_Coord(DCL_CTRL_MICRONMETER_COORD_T* pparam);
#if defined(__TOUCH_PANEL_CAPACITY__)
void touch_panel_capacitive_up_hdr(DCL_EVENT event);
void touch_panel_capacitive_down_hdr(DCL_EVENT event);
void touch_panel_capacitive_power_on(kal_bool on);
kal_bool touch_panel_capacitive_set_device(ctp_device_mode_enum mode);
kal_uint32 touch_panel_capacitive_command(kal_uint32 cmd, void *p1, void*p2);
#endif //#if defined(__TOUCH_PANEL_CAPACITY__)
#if defined(__TOUCH_PANEL_MULTITOUCH__)
void touch_panel_dual_up_hdr(DCL_EVENT event);
void touch_panel_dual_down_hdr(DCL_EVENT event);
#endif

/********************For touch panel driver only*************/
// MoDIS parser skip start
// The following are private APIs
#ifdef TOUCH_PANEL_PRESSURE
#ifndef DRV_TP_SLIM
kal_bool tp_level(void);
kal_bool tp_level_pressure(kal_uint32 *pressure);
kal_uint32 tp_pressure_value(void);
kal_bool tp_pressure_check(void);
#endif 
kal_bool tp_pressure_check_value(kal_uint32 *pressure);
#endif //#ifdef TOUCH_PANEL_PRESSURE

void touch_panel_read_adc(kal_uint16 *x, kal_uint16 *y);
kal_bool touch_panel_adc_to_coordinate(kal_uint16 *x, kal_uint16 *y);/*tranlate*/
void touch_panel_event_cb(void *parameter);
void touch_panel_repeat_cb(void *parameter);
void touch_panel_longtap_cb(void *parameter);
void touch_panel_stroke_cb(void *parameter);
void touch_panel_up_hdr(DCL_EVENT event);
void touch_panel_down_hdr(DCL_EVENT event);
void touch_panel_event_hdr(void);
void touch_start_longtap(void);
void touch_panel_stroke_hdr(void);
void touch_excute_cali(kal_uint16 x_adc, kal_uint16 y_adc);
void touch_panel_sendilm(void *para, Touch_Panel_Event_enum state);
void tp_data_pop(Touch_Panel_Event_enum event, kal_int16 x, kal_int16 y);
void tp_data_push(TP_SINGLE_EVENT_T* push_event);

void touch_panel_init(void);
void touch_start_handwriting_longtap(void);
// MoDIS parser skip end
/*variable*/
extern TouchPanelDataStruct TP;
extern Touch_Panel_Event_enum touch_panel_track_stauts; /*pen/stroke status*/
extern TouchPanelBufferStruct    touch_panel_data_buffer;
extern TouchPanelCoordStruct pre_coord;
extern TouchPanelCoordStruct tp_stroke_pre;

#if defined(__DRV_COMM_REG_DBG__) && defined(__DRV_TP_REG_DBG__)
#define DRV_TP_WriteReg(addr,data)              DRV_DBG_WriteReg(addr,data)
#define DRV_TP_Reg(addr)                        DRV_DBG_Reg(addr)                      
#define DRV_TP_WriteReg32(addr,data)            DRV_DBG_WriteReg32(addr,data)          
#define DRV_TP_Reg32(addr)                      DRV_DBG_Reg32(addr)                    
#define DRV_TP_WriteReg8(addr,data)             DRV_DBG_WriteReg8(addr,data)           
#define DRV_TP_Reg8(addr)                       DRV_DBG_Reg8(addr)                     
#define DRV_TP_ClearBits(addr,data)             DRV_DBG_ClearBits(addr,data)           
#define DRV_TP_SetBits(addr,data)               DRV_DBG_SetBits(addr,data)             
#define DRV_TP_SetData(addr, bitmask, value)    DRV_DBG_SetData(addr, bitmask, value)  
#define DRV_TP_ClearBits32(addr,data)           DRV_DBG_ClearBits32(addr,data)         
#define DRV_TP_SetBits32(addr,data)             DRV_DBG_SetBits32(addr,data)           
#define DRV_TP_SetData32(addr, bitmask, value)  DRV_DBG_SetData32(addr, bitmask, value)
#define DRV_TP_ClearBits8(addr,data)            DRV_DBG_ClearBits8(addr,data)          
#define DRV_TP_SetBits8(addr,data)              DRV_DBG_SetBits8(addr,data)            
#define DRV_TP_SetData8(addr, bitmask, value)   DRV_DBG_SetData8(addr, bitmask, value) 
#else
#define DRV_TP_WriteReg(addr,data)              DRV_WriteReg(addr,data)
#define DRV_TP_Reg(addr)                        DRV_Reg(addr)                      
#define DRV_TP_WriteReg32(addr,data)            DRV_WriteReg32(addr,data)          
#define DRV_TP_Reg32(addr)                      DRV_Reg32(addr)                    
#define DRV_TP_WriteReg8(addr,data)             DRV_WriteReg8(addr,data)           
#define DRV_TP_Reg8(addr)                       DRV_Reg8(addr)                     
#define DRV_TP_ClearBits(addr,data)             DRV_ClearBits(addr,data)           
#define DRV_TP_SetBits(addr,data)               DRV_SetBits(addr,data)             
#define DRV_TP_SetData(addr, bitmask, value)    DRV_SetData(addr, bitmask, value)  
#define DRV_TP_ClearBits32(addr,data)           DRV_ClearBits32(addr,data)         
#define DRV_TP_SetBits32(addr,data)             DRV_SetBits32(addr,data)           
#define DRV_TP_SetData32(addr, bitmask, value)  DRV_SetData32(addr, bitmask, value)
#define DRV_TP_ClearBits8(addr,data)            DRV_ClearBits8(addr,data)          
#define DRV_TP_SetBits8(addr,data)              DRV_SetBits8(addr,data)            
#define DRV_TP_SetData8(addr, bitmask, value)   DRV_SetData8(addr, bitmask, value) 
#endif //#if defined(__DRV_COMM_REG_DBG__) && defined(__DRV_TP_REG_DBG__)
#if defined(__MTK_INTERNAL__) && !defined(LOW_COST_SUPPORT) && !defined(__MAUI_BASIC__) && defined(__DRV_DBG_MEMORY_TRACE_SUPPORT__) && defined(__DRV_TP_MEMORY_TRACE__)
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#else //#if defined(__MTK_INTERNAL__) && !defined(LOW_COST_SUPPORT)
#define TP_DBG(a,b,c,d) ;
#endif //#if defined(__MTK_INTERNAL__) && !defined(LOW_COST_SUPPORT)
#endif