yc_keypad.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. /*
  2. * Copyright 2016, yichip Semiconductor(shenzhen office)
  3. * All Rights Reserved.
  4. *
  5. * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
  6. * the contents of this file may not be disclosed to third parties, copied
  7. * or duplicated in any form, in whole or in part, without the prior
  8. * written permission of Yichip Semiconductor.
  9. */
  10. /**
  11. *@file keypad.h
  12. *@brief keypad support for application
  13. */
  14. #ifndef DRIVERS_KEYSCAN_YC_KEYPAD_H_
  15. #define DRIVERS_KEYSCAN_YC_KEYPAD_H_
  16. #include <stdint.h>
  17. #include "yc_timer.h"
  18. #define KEYPAD_COMBO_KEY_MAX 4
  19. /**
  20. *@brief GPIO number.
  21. */
  22. typedef enum
  23. {
  24. GPIO_0 = 0,
  25. GPIO_1,
  26. GPIO_2,
  27. GPIO_3,
  28. GPIO_4,
  29. GPIO_5,
  30. GPIO_6,
  31. GPIO_7,
  32. GPIO_8,
  33. GPIO_9,
  34. GPIO_10,
  35. GPIO_11,
  36. GPIO_12,
  37. GPIO_13,
  38. GPIO_14,
  39. GPIO_15,
  40. GPIO_16,
  41. GPIO_17,
  42. GPIO_18,
  43. GPIO_19,
  44. GPIO_20,
  45. GPIO_21,
  46. GPIO_22,
  47. GPIO_23,
  48. GPIO_24,
  49. GPIO_25,
  50. GPIO_26,
  51. GPIO_27,
  52. GPIO_28,
  53. GPIO_29,
  54. GPIO_30,
  55. GPIO_31,
  56. GPIO_MAX_NUM,
  57. }GPIO_NUM;
  58. /**
  59. *@brief Key index.
  60. */
  61. typedef enum
  62. {
  63. KEY_0,
  64. KEY_1,
  65. KEY_2,
  66. KEY_3,
  67. KEY_4,
  68. KEY_5,
  69. KEY_6,
  70. KEY_7,
  71. KEY_8,
  72. KEY_9,
  73. KEY_10,
  74. KEY_11,
  75. KEY_12,
  76. KEY_13,
  77. KEY_14,
  78. KEY_15,
  79. KEY_MAX_NUM, /*!< don't change this value */
  80. COMB_KEY1,
  81. COMB_KEY2,
  82. COMB_KEY3,
  83. COMB_KEY4,
  84. }KEY_INDEX;
  85. /**
  86. *@brief Key index mask.
  87. */
  88. typedef enum
  89. {
  90. KEY_0_MASK = 0x0001,
  91. KEY_1_MASK = 0x0002,
  92. KEY_2_MASK = 0x0004,
  93. KEY_3_MASK = 0x0008,
  94. KEY_4_MASK = 0x0010,
  95. KEY_5_MASK = 0x0020,
  96. KEY_6_MASK = 0x0040,
  97. KEY_7_MASK = 0x0080,
  98. KEY_8_MASK = 0x0100,
  99. KEY_9_MASK = 0x0200,
  100. KEY_10_MASK = 0x0400,
  101. KEY_11_MASK = 0x0800,
  102. KEY_12_MASK = 0x1000,
  103. KEY_13_MASK = 0x2000,
  104. KEY_14_MASK = 0x4000,
  105. KEY_15_MASK = 0x8000,
  106. KEY_INVALID_MASK = 0x0000,
  107. }KEY_INDEX_MASK;
  108. /**
  109. *@brief Event type.
  110. */
  111. typedef enum
  112. {
  113. KEYPAD_NON,
  114. KEYPAD_TAP,
  115. KEYPAD_DOUBLE,
  116. KEYPAD_TRIPLE,
  117. KEYPAD_DOWN,
  118. KEYPAD_UP,
  119. KEYPAD_PRESS,
  120. KEYPAD_PRESS_RELEASE,
  121. KEYPAD_LONG_PRESS,
  122. KEYPAD_LONG_RELEASE,
  123. KEYPAD_LONGLONG_PRESS,
  124. KEYPAD_LONGLONG_RELEASE,
  125. }KEYPAD_EVT_TYPE;
  126. /**
  127. *@brief Press type.
  128. */
  129. typedef enum
  130. {
  131. KEYPAD_PRESS_NONE,
  132. KEYPAD_PRESS_MULTI,
  133. KEYPAD_PRESS_PRESS,
  134. KEYPAD_PRESS_LONG_PRESS,
  135. KEYPAD_PRESS_LONGLONG_PRESS,
  136. KEYPAD_PRESS_EXTREME_LONG_PESS,
  137. }KEYPAD_PRESS_TYPE;
  138. /**
  139. *@brief Key timer.
  140. */
  141. typedef struct
  142. {
  143. uint32_t multi_timer;
  144. uint32_t press_timer; /*!< unit 10ms */
  145. uint32_t long_press_timer; /*!< unit 10ms */
  146. uint32_t longlong_press_timer; /*!<unit 10ms */
  147. }KEYPAD_KEYTIMER;
  148. /**
  149. *@brief Key configure.
  150. */
  151. typedef struct
  152. {
  153. GPIO_NUM gpio_ind;
  154. KEYPAD_PRESS_TYPE press_type;
  155. SYS_TIMER_TYPE key_timer;
  156. KEYPAD_KEYTIMER key_timer_cfg;
  157. }KEY_CONFIG;
  158. /**
  159. *@brief Combkey configure.
  160. */
  161. typedef struct
  162. {
  163. uint16_t comkKeyMask;
  164. KEYPAD_PRESS_TYPE press_type;
  165. SYS_TIMER_TYPE key_timer;
  166. KEYPAD_KEYTIMER key_timer_cfg;
  167. }COMBKEY_CONFIG;
  168. #define KEYPAD_FLAG_SUPPORT_MULTI_KEY 0x0001
  169. #define KEYPAD_FLAG_SUPPORT_COMBO_KEY 0x0002
  170. /**
  171. *@brief Keypad configure.
  172. */
  173. typedef struct
  174. {
  175. uint32_t polling_timer; /*!< unit 10ms*/
  176. COMBKEY_CONFIG keypad_combokey_array[KEYPAD_COMBO_KEY_MAX];
  177. KEY_CONFIG keypad_gpio_array[KEY_MAX_NUM];
  178. uint8_t comboKeyNum; /*!< the number combo key configured*/
  179. uint8_t keyNum; /*!< the number key configured*/
  180. uint16_t kepadFlag;
  181. }KEYPAD_CONFIG;
  182. /**
  183. *@brief Keypad event callback function.
  184. */
  185. typedef void (* KeyPad_Evt_CB_Handle)(KEY_INDEX,KEYPAD_EVT_TYPE);
  186. /**
  187. *@brief Key map.
  188. */
  189. typedef union
  190. {
  191. uint16_t keymap_u16;
  192. uint8_t keymap_u8[2];
  193. }KEY_KEYMAP;
  194. /**
  195. *@brief Driver key map.
  196. */
  197. typedef union
  198. {
  199. uint16_t keymap_u16;
  200. uint8_t keymap_u8[2];
  201. } DRIVER_KEY_KEYMAP;
  202. /**
  203. *@brief Keypad control.
  204. */
  205. typedef struct
  206. {
  207. uint16_t gpio_key_mask;
  208. uint16_t gpio_hid_key_mask;
  209. uint8_t Key_Change_happen;
  210. uint32_t keypad_history_value;
  211. uint32_t keypapd_current_value;
  212. KeyPad_Evt_CB_Handle keypad_evt_callback;
  213. DRIVER_KEY_KEYMAP gpio_mapping_result; /*!< all input result */
  214. DRIVER_KEY_KEYMAP key_mapping_result; /*!< only key input result */
  215. DRIVER_KEY_KEYMAP key_mapping_result_old; /*!< last key input */
  216. DRIVER_KEY_KEYMAP key_hid_mapping_result; /*!< only key hid input result */
  217. DRIVER_KEY_KEYMAP key_hid_mapping_result_old; /*!< last key input */
  218. uint8_t key_multi_count;
  219. }KEYPAD_CONTROL;
  220. /**
  221. *@brief Key event.
  222. */
  223. typedef struct
  224. {
  225. KEY_INDEX key_ind;
  226. KEYPAD_EVT_TYPE evt_type;
  227. }KEY_EVT_ELE;
  228. /**
  229. *@brief Keypad initialization.
  230. *@param cb Callback function.
  231. *@return None.
  232. */
  233. void keypad_init(KeyPad_Evt_CB_Handle cb);
  234. /**
  235. *@brief Scan key pad.
  236. *@param None.
  237. *@return None.
  238. */
  239. void keypad_check_keypress();
  240. /**
  241. *@brief Key expired.
  242. *@param keyIndex key number.
  243. *@return None.
  244. */
  245. void keypad_keyExpired(int keyIndex);
  246. /**
  247. *@brief scan key pad.
  248. *@param index key index value.@ref KEY_INDEX
  249. *@param key_evt key event.@ref KEYPAD_EVT_TYPE
  250. *@return None.
  251. */
  252. void key_send_evt_to_Queue(KEY_INDEX index,KEYPAD_EVT_TYPE key_evt);
  253. /**
  254. *@brief Polling key queue.
  255. *@param None.
  256. *@return None.
  257. */
  258. void keypad_polling_keyQueue();
  259. #endif