ql_api_tp.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /** @file
  2. ql_api_tp.h
  3. @brief
  4. This file is used to define touch penal api for different Quectel Project.
  5. */
  6. /*================================================================
  7. Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
  8. Quectel Wireless Solution Proprietary and Confidential.
  9. =================================================================*/
  10. /*=================================================================
  11. EDIT HISTORY FOR MODULE
  12. This section contains comments describing changes made to the module.
  13. Notice that changes are listed in reverse chronological order.
  14. WHEN WHO WHAT, WHERE, WHY
  15. ------------ ------- -------------------------------------------------------------------------------
  16. =================================================================*/
  17. #ifndef QL_API_TP_H
  18. #define QL_API_TP_H
  19. #include "ql_api_common.h"
  20. #include "ql_gpio.h"
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /*========================================================================
  25. * Variable Definition
  26. *========================================================================*/
  27. #define QL_TP_CALIB_POINT_NUM 3
  28. #define QL_TP_LCD_BLACK 0x0000 //LCD校准显示颜色,0x0000为黑色
  29. #define QL_TP_LCD_WHITE 0xFFFF //LCD校准显示颜色,0xffff为白色
  30. #define QL_TP_ADC_VALUE_TIMES 1 //TP ADC采样次数
  31. #define QL_TP_ADC_DIFF 10 //ADC采用在diff范围内认为是同一个触摸点
  32. /**************************** error code about ql spi ***************************/
  33. typedef enum
  34. {
  35. QL_TP_SUCCESS = 0,
  36. QL_TP_INIT_ERROR = 1 | (QL_COMPONENT_BSP_TP << 16), //初始化失败
  37. QL_TP_PARAM_ERROR, //参数错误
  38. QL_TP_LCD_NOT_INIT, //LCD显示屏未初始化
  39. QL_TP_ADC_ERROR, //ADC采样失败
  40. QL_TP_NOT_INIT, //TP未初始化
  41. QL_TP_NOT_CALIB_ERR, //TP未校准
  42. QL_TP_CALIB_ERR, //TP校准失败
  43. QL_TP_CFG_ERR, //配置参数错误
  44. QL_TP_SEMAPHORE_ERR, //校准创建信号量失败
  45. QL_TP_TIMER_ERR, //创建timer失败
  46. QL_TP_ADC_CH_ERR, //ADC通道错误
  47. QL_TP_ADC_SAMPLE_ERR, //ADC采样错误
  48. QL_TP_GPIO_ERR, //设置GPIO错误
  49. }ql_errcode_tp_e;
  50. typedef struct
  51. {
  52. int xp_adc_channel; //XP或XN进行ADC采样,实际上读取LCD屏幕Y轴坐标的ADC值
  53. int yp_adc_channel; //YP或YN进行ADC采样,实际上读取LCD屏幕X轴坐标的ADC值
  54. ql_GpioNum xp; //控制XP导通或高阻
  55. ql_GpioNum xn; //控制XN导通或高阻
  56. ql_GpioNum yp; //控制YP导通或高阻
  57. ql_GpioNum yn; //控制YP导通或高阻
  58. }ql_tp_ctg_t;
  59. typedef enum
  60. {
  61. QL_TP_NOT_CALIB = 0, //电阻触摸屏处于未校准状态
  62. QL_TP_IS_CALIB, //电阻触摸屏处于已校准状态
  63. QL_TP_CALIB_POINT_1, //正在校准中,等待点击第一个校准点
  64. QL_TP_CALIB_POINT_PRESS_1, //正在校准中,第一个校准点已经按下
  65. QL_TP_CALIB_POINT_2, //正在校准中,等待点击第二个校准点
  66. QL_TP_CALIB_POINT_PRESS_2, //正在校准中,第二个校准点已经按下
  67. QL_TP_CALIB_POINT_3, //正在校准中,等待点击第三个校准点
  68. QL_TP_CALIB_POINT_PRESS_3, //正在校准中,第三个校准点已经按下
  69. } QL_TP_CALIB_STATUS_E;
  70. //校准过程中的回调函数
  71. typedef void (*ql_tp_calib_cb)(QL_TP_CALIB_STATUS_E calib_status);
  72. typedef enum
  73. {
  74. QL_TP_NOT_NEED_CALIB = 0, //电阻触摸屏不需要校准
  75. QL_TP_NEED_CALIB, //电阻触摸屏需要校准
  76. } QL_TP_DO_CALIB_E;
  77. typedef struct
  78. {
  79. int x; //LCD屏幕的X轴坐标
  80. int y; //LCD屏幕的Y轴坐标
  81. }ql_tp_point_t;
  82. typedef enum
  83. {
  84. QL_TP_NOT_PRESS = 0, //电阻触摸屏被按下
  85. QL_TP_PRESSED, //电阻触摸屏被松开
  86. } QL_TP_PRESS_STATE_E;
  87. typedef struct
  88. {
  89. QL_TP_DO_CALIB_E calib; //QL_TP_NEED_CALIB重新校准,为QL_TP_NOT_NEED_CALIB时,执行校准,若触摸屏已校准,则不需要再校准
  90. ql_tp_point_t point[QL_TP_CALIB_POINT_NUM]; //校准的三个参考坐标,注意不能在同一条直线上
  91. int calib_width; //校准线+的横线长度
  92. int calib_height; //校准线+的竖线宽度
  93. }ql_tp_calib_ctg_t;
  94. typedef struct
  95. {
  96. int timeout; //间隔时间进行TP检测,单位为us
  97. int adc_num; //每次TP检测,X轴和Y轴ADC采样的次数,为2*adc_num次
  98. int adc_diff; //ADC采样的误差,超过误差认为不是同一次采样
  99. }ql_tp_touch_adc_ctg_t;
  100. typedef void (*ql_tp_touch_cb)(ql_tp_point_t, QL_TP_PRESS_STATE_E);
  101. /*========================================================================
  102. * function Definition
  103. *========================================================================*/
  104. /*****************************************************************
  105. * Function: ql_tp_init
  106. *
  107. * Description:
  108. * 初始化电阻触摸屏,调用此API时,触摸屏必须处于未点击状态
  109. *
  110. * Parameters:
  111. * tp_cfg [in] 电阻触摸屏配置
  112. * adc_cfg [in] 触摸屏中ADC配置
  113. *
  114. * Return:ql_errcode_tp_e
  115. *
  116. *****************************************************************/
  117. ql_errcode_tp_e ql_tp_init(ql_tp_ctg_t *tp_cfg, ql_tp_touch_adc_ctg_t *adc_cfg);
  118. /*****************************************************************
  119. * Function: ql_tp_do_calib
  120. *
  121. * Description:
  122. * 电阻触摸屏执行校准操作
  123. *
  124. * Parameters:
  125. * calib_cfg [in] 校准的配置信息
  126. * calib_cb [in] 校准过程中的回调函数,回调函数可以为NULL
  127. *
  128. * Return:ql_errcode_tp_e
  129. *
  130. *****************************************************************/
  131. ql_errcode_tp_e ql_tp_do_calib(ql_tp_calib_ctg_t *calib_cfg, ql_tp_calib_cb calib_cb);
  132. /*****************************************************************
  133. * Function: ql_tp_open
  134. *
  135. * Description:
  136. * 电阻触摸屏开始进行检测是否按下
  137. *
  138. * Parameters:
  139. * touch_cb [in] 电阻触摸屏点击或者释放的回调函数,不能为NULL
  140. *
  141. * Return:ql_errcode_tp_e
  142. *
  143. *****************************************************************/
  144. ql_errcode_tp_e ql_tp_open(ql_tp_touch_cb touch_cb);
  145. /*****************************************************************
  146. * Function: ql_tp_open
  147. *
  148. * Description:
  149. * 关闭电阻触摸屏的触摸功能
  150. *
  151. * Parameters:
  152. *
  153. * Return:ql_errcode_tp_e
  154. *
  155. *****************************************************************/
  156. ql_errcode_tp_e ql_tp_close(void);
  157. #ifdef __cplusplus
  158. } /*"C" */
  159. #endif
  160. #endif /* QL_API_TP_H */