Smart Remote 3 nRF52 v1.2
key_combo_util.h
1 /*$$$LICENCE_NORDIC_STANDARD<2016>$$$*/
2 
9 #ifndef __KEY_COMBO_UTIL_H__
10 #define __KEY_COMBO_UTIL_H__
11 
12 #include "app_util.h"
13 #include "nrf.h"
14 #include "nrf_section.h"
15 #include "event_bus.h"
16 
18 typedef void (*key_combo_handler_t)(void * p_context);
19 
21 typedef struct
22 {
23  uint8_t combo_keys[4];
24  uint32_t combo_duration_ms : 30;
25  uint32_t combo_num_keys : 2;
26  key_combo_handler_t handler;
28 
30 typedef union
31 {
32  uint8_t key_id;
33  uint32_t padding; // Must be Word-sized
35 
36 // Verify that structs are Word sized
37 STATIC_ASSERT((sizeof(key_combo_desc_t) % sizeof(uint32_t)) == 0);
38 STATIC_ASSERT((sizeof(key_combo_member_t) % sizeof(uint32_t)) == 0);
39 
47 #define KEY_COMBO_MEMBER_REGISTER(_key_id) \
48  NRF_SECTION_ITEM_REGISTER(combo_member_keys, static const key_combo_member_t CONCAT_2(_COMBO_MEMBER, __LINE__)) = \
49  {.key_id = _key_id}
50 
56 #define KEY_COMBO_ONE_KEY_REGISTER(key_id_1, duration_ms, evt_handler) \
57  NRF_SECTION_ITEM_REGISTER(combo_descriptions, static const key_combo_desc_t CONCAT_2(evt_handler, _combo_cb)) = \
58  { \
59  .handler = evt_handler, \
60  .combo_keys = {key_id_1, 0xFF, 0xFF, 0xFF}, \
61  .combo_num_keys = 1, \
62  .combo_duration_ms = duration_ms \
63  }
64 
71 #define KEY_COMBO_TWO_KEY_REGISTER(key_id_1, key_id_2, duration_ms, evt_handler) \
72  NRF_SECTION_ITEM_REGISTER(combo_descriptions, static const key_combo_desc_t CONCAT_2(evt_handler, _combo_cb)) = \
73  { \
74  .handler = evt_handler, \
75  .combo_keys = {key_id_1, key_id_2, 0xFF, 0xFF}, \
76  .combo_num_keys = 2, \
77  .combo_duration_ms = duration_ms \
78  }
79 
87 #define KEY_COMBO_THREE_KEY_REGISTER(key_id_1, key_id_2, key_id_3, duration_ms, evt_handler) \
88  NRF_SECTION_ITEM_REGISTER(combo_descriptions, static const key_combo_desc_t CONCAT_2(evt_handler, _combo_cb)) = \
89  { \
90  .handler = evt_handler, \
91  .combo_keys = {key_id_1, key_id_2, key_id_3, 0xFF}, \
92  .combo_num_keys = 3, \
93  .combo_duration_ms = duration_ms \
94  }
95 
100 ret_code_t key_combo_util_init(void);
101 
108 bool key_combo_util_key_process(const event_t * p_event);
109 
110 #endif /* __KEY_COMBO_UTIL_H__ */
111 

Documentation feedback | Developer Zone | Subscribe | Updated