ql_keypad.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. /** @file
  2. ql_keypad.h
  3. @brief
  4. This file is used to define keypad interface 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. 16/11/2020 Neo Init version
  17. =================================================================*/
  18. #ifndef QL_KEYPAD_H
  19. #define QL_KEYPAD_H
  20. #include "ql_api_common.h"
  21. #include <stdlib.h>
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /*===========================================================================
  26. * Macro Definition
  27. ===========================================================================*/
  28. #define QL_KEYPAD_ERRCODE_BASE (QL_COMPONENT_BSP_KEYPAD<<16)
  29. #define QL_KEYPAD_ROW_LENGTH 6
  30. #define QL_KEYPAD_COL_LENGTH 6
  31. /*========================================================================
  32. * Enumeration Definition
  33. *========================================================================*/
  34. /**
  35. * keypad errcode
  36. */
  37. typedef enum
  38. {
  39. QL_KEYPAD_SUCCESS = QL_SUCCESS,
  40. QL_KEYPAD_INVALID_PARAM_ERR = 1|QL_KEYPAD_ERRCODE_BASE
  41. }ql_errcode_keypad_e;
  42. /**
  43. * keyout pin
  44. * if the module has GNSS function, keyout4 and keyout5 cannot be used
  45. */
  46. typedef enum
  47. {
  48. QL_KP_OUT0 = 0,
  49. QL_KP_OUT1,
  50. QL_KP_OUT2,
  51. QL_KP_OUT3,
  52. QL_KP_OUT4,
  53. QL_KP_OUT5,
  54. QL_KP_OUT_NO_VALID
  55. }ql_keypad_out_e;
  56. /**
  57. * keyin pin
  58. * keyin4 and keyin5 can be reused as UART2 RXD/TXD and UART3 CTS/RTS.
  59. * if it is enabled here, other functions will not be available
  60. * if it is not reused for other functions, please ignore this sentence
  61. */
  62. typedef enum
  63. {
  64. QL_KP_IN0 = 0,
  65. QL_KP_IN1,
  66. QL_KP_IN2,
  67. QL_KP_IN3,
  68. QL_KP_IN4,
  69. QL_KP_IN5,
  70. QL_KP_IN_NO_VALID
  71. }ql_keypad_in_e;
  72. //it is created for keypad to set fuction
  73. typedef struct
  74. {
  75. uint8_t ql_keypad_pin;
  76. uint8_t ql_keypad_pin_func;
  77. }ql_keypad_pin_s;
  78. extern const ql_keypad_pin_s ql_keypad_out_pin_map[];
  79. extern const ql_keypad_pin_s ql_keypad_in_pin_map[];
  80. /**
  81. * keypad position,support 6*6 keypad,Compatible with the old 6*5 keypad
  82. keyin0 keyin1 keyin2 keyin3 keyin4 keyin5
  83. keyout0 QL_KEY_MAP_0 QL_KEY_MAP_1 QL_KEY_MAP_2 QL_KEY_MAP_3 QL_KEY_MAP_4 QL_KEY_MAP_5
  84. keyout1 QL_KEY_MAP_31 QL_KEY_MAP_6 QL_KEY_MAP_7 QL_KEY_MAP_8 QL_KEY_MAP_9 QL_KEY_MAP_10
  85. keyout2 QL_KEY_MAP_32 QL_KEY_MAP_11 QL_KEY_MAP_12 QL_KEY_MAP_13 QL_KEY_MAP_14 QL_KEY_MAP_15
  86. keyout3 QL_KEY_MAP_33 QL_KEY_MAP_16 QL_KEY_MAP_17 QL_KEY_MAP_18 QL_KEY_MAP_19 QL_KEY_MAP_20
  87. keyout4 QL_KEY_MAP_34 QL_KEY_MAP_21 QL_KEY_MAP_22 QL_KEY_MAP_23 QL_KEY_MAP_24 QL_KEY_MAP_25
  88. keyout5 QL_KEY_MAP_35 QL_KEY_MAP_26 QL_KEY_MAP_27 QL_KEY_MAP_28 QL_KEY_MAP_29 QL_KEY_MAP_30
  89. */
  90. typedef enum
  91. {
  92. QL_KEY_MAP_0 = 0,
  93. QL_KEY_MAP_1,
  94. QL_KEY_MAP_2,
  95. QL_KEY_MAP_3,
  96. QL_KEY_MAP_4,
  97. QL_KEY_MAP_5,
  98. QL_KEY_MAP_6,
  99. QL_KEY_MAP_7,
  100. QL_KEY_MAP_8,
  101. QL_KEY_MAP_9,
  102. QL_KEY_MAP_10,
  103. QL_KEY_MAP_11,
  104. QL_KEY_MAP_12,
  105. QL_KEY_MAP_13,
  106. QL_KEY_MAP_14,
  107. QL_KEY_MAP_15,
  108. QL_KEY_MAP_16,
  109. QL_KEY_MAP_17,
  110. QL_KEY_MAP_18,
  111. QL_KEY_MAP_19,
  112. QL_KEY_MAP_20,
  113. QL_KEY_MAP_21,
  114. QL_KEY_MAP_22,
  115. QL_KEY_MAP_23,
  116. QL_KEY_MAP_24,
  117. QL_KEY_MAP_25,
  118. QL_KEY_MAP_26,
  119. QL_KEY_MAP_27,
  120. QL_KEY_MAP_28,
  121. QL_KEY_MAP_29,
  122. QL_KEY_MAP_30,
  123. QL_KEY_MAP_31,
  124. QL_KEY_MAP_32,
  125. QL_KEY_MAP_33,
  126. QL_KEY_MAP_34,
  127. QL_KEY_MAP_35,
  128. QL_KEY_MAP_MAX_COUNT ///< total count
  129. } ql_keymap_e;
  130. typedef enum
  131. {
  132. QL_KEY_STATE_PRESS = (1 << 0),
  133. QL_KEY_STATE_RELEASE = (1 << 1),
  134. } ql_keystate_e;
  135. /*========================================================================
  136. * Type Definition
  137. *========================================================================*/
  138. typedef struct
  139. {
  140. ql_keymap_e keymap; //按键id
  141. uint32_t keyout; //按键对应的输出通道
  142. uint32_t keyin; //按键对应的输入通道
  143. ql_keystate_e keystate; //按键状态,2表示按键按下, 1表示按键未被按下
  144. }ql_keymatrix_t;
  145. /*========================================================================
  146. * function Definition
  147. *========================================================================*/
  148. /*****************************************************************
  149. * Description: keypad 回调函数,用于按键触发通知
  150. *
  151. * Parameters:
  152. * key [in] 按键状态结构体
  153. *
  154. *
  155. *****************************************************************/
  156. typedef void (*ql_keyeventcb_t)(ql_keymatrix_t key);
  157. /*****************************************************************
  158. * Function: ql_keypad_state
  159. *
  160. * Description: 获取按键状态
  161. *
  162. * Parameters:
  163. * pressed [out] 按键状态,1表示按键处于按下状态, 0表示按键未被按下
  164. * id [in] 按键id, 取值范围见ql_keymap_e枚举
  165. *
  166. * Return:
  167. * 0 获取按键状态成功。
  168. * other 错误码。
  169. *
  170. *****************************************************************/
  171. ql_errcode_keypad_e ql_keypad_state(uint32_t *pressed, ql_keymap_e id);
  172. /*****************************************************************
  173. * Function: ql_keypad_init
  174. * Attention:
  175. 1. the callback will be run in interrupt, so it is forbidden to block the callback;
  176. 2. it is forbidden to call Audio start/stop/close,file write/read,CFW(releated to RPC)in interrupt;
  177. 3. it is forbidden to enter critical in interrupt
  178. 4. it is suggested for users to perform simple operations , or send event(no timeout) to inform your task in interrupt
  179. * Parameters:
  180. *
  181. * Description: 矩阵按键初始化
  182. *
  183. * Parameters:
  184. * cb [in] 回调函数
  185. * keyrow [in] 输出通道数据,取值范围见ql_keypad_out_e枚举
  186. * keycol [in] 输入通道数据,取值范围见ql_keypad_in_e枚举
  187. *
  188. * Return:
  189. * 0 获取按键状态成功。
  190. * other 错误码。
  191. *
  192. *****************************************************************/
  193. ql_errcode_keypad_e ql_keypad_init(ql_keyeventcb_t cb, ql_keypad_out_e keyrow[QL_KEYPAD_ROW_LENGTH], ql_keypad_in_e keycol[QL_KEYPAD_COL_LENGTH]);
  194. #ifdef __cplusplus
  195. } /*"C" */
  196. #endif
  197. #endif /* QL_KEYPAD_H */