1 /*
2  * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3  */
4 #ifndef __HAL_KEY_H__
5 #define __HAL_KEY_H__
6 
7 #include "hal_gpio.h"
8 #include "hal_gpadc.h"
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 enum HAL_KEY_CODE_T {
15     HAL_KEY_CODE_NONE = 0,
16     HAL_KEY_CODE_PWR = (1 << 0),
17     HAL_KEY_CODE_FN1 = (1 << 1),
18     HAL_KEY_CODE_FN2 = (1 << 2),
19     HAL_KEY_CODE_FN3 = (1 << 3),
20     HAL_KEY_CODE_FN4 = (1 << 4),
21     HAL_KEY_CODE_FN5 = (1 << 5),
22     HAL_KEY_CODE_FN6 = (1 << 6),
23     HAL_KEY_CODE_FN7 = (1 << 7),
24     HAL_KEY_CODE_FN8 = (1 << 8),
25     HAL_KEY_CODE_FN9 = (1 << 9),
26     HAL_KEY_CODE_FN10 = (1 << 10),
27     HAL_KEY_CODE_FN11 = (1 << 11),
28     HAL_KEY_CODE_FN12 = (1 << 12),
29 	HAL_KEY_CODE_FN13 = (1 << 13),
30 	HAL_KEY_CODE_FN14 = (1 << 14),
31 	HAL_KEY_CODE_FN15 = (1 << 15),
32 };
33 
34 enum HAL_KEY_EVENT_T {
35     HAL_KEY_EVENT_NONE = 0,
36     HAL_KEY_EVENT_DOWN,
37     HAL_KEY_EVENT_FIRST_DOWN,
38     HAL_KEY_EVENT_CONTINUED_DOWN,
39     HAL_KEY_EVENT_UP,
40     HAL_KEY_EVENT_UP_AFTER_LONGPRESS,
41     HAL_KEY_EVENT_LONGPRESS,
42     HAL_KEY_EVENT_LONGLONGPRESS,
43     HAL_KEY_EVENT_CLICK,
44     HAL_KEY_EVENT_DOUBLECLICK,
45     HAL_KEY_EVENT_TRIPLECLICK,
46     HAL_KEY_EVENT_ULTRACLICK,
47     HAL_KEY_EVENT_RAMPAGECLICK,
48     HAL_KEY_EVENT_REPEAT,
49     HAL_KEY_EVENT_GROUPKEY_DOWN,
50     HAL_KEY_EVENT_GROUPKEY_REPEAT,
51     HAL_KEY_EVENT_INITDOWN,
52     HAL_KEY_EVENT_INITUP,
53     HAL_KEY_EVENT_INITLONGPRESS,
54     HAL_KEY_EVENT_INITLONGLONGPRESS,
55     HAL_KEY_EVENT_INITFINISHED,
56 
57     HAL_KEY_EVENT_NUM,
58 };
59 
60 #define KEY_EVENT_SET(a)                (1 << HAL_KEY_EVENT_ ## a)
61 #define KEY_EVENT_SET2(a, b)            (KEY_EVENT_SET(a) | KEY_EVENT_SET(b))
62 #define KEY_EVENT_SET3(a, b, c)         (KEY_EVENT_SET2(a, b) | KEY_EVENT_SET(c))
63 #define KEY_EVENT_SET4(a, b, c, d)      (KEY_EVENT_SET3(a, b, c) | KEY_EVENT_SET(d))
64 
65 enum HAL_KEY_GPIOKEY_VAL_T {
66     HAL_KEY_GPIOKEY_VAL_LOW = 0,
67     HAL_KEY_GPIOKEY_VAL_HIGH,
68 };
69 
70 struct HAL_KEY_GPIOKEY_CFG_T {
71     enum HAL_KEY_CODE_T key_code;
72     struct HAL_IOMUX_PIN_FUNCTION_MAP key_config;
73     enum HAL_KEY_GPIOKEY_VAL_T key_down;
74 };
75 
76 int hal_key_open(int checkPwrKey, int (* cb)(uint32_t, uint8_t));
77 
78 enum HAL_KEY_EVENT_T hal_key_read_status(enum HAL_KEY_CODE_T code);
79 
80 int hal_key_close(void);
81 
82 int get_recovery_mode(void);
83 #ifdef __cplusplus
84     }
85 #endif
86 
87 #endif//__FMDEC_H__
88