Smart Remote 3 nRF52 v1.2
Copy URL
Source
Common
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;
27
}
key_combo_desc_t
;
28
30
typedef
union
31
{
32
uint8_t key_id;
33
uint32_t padding;
// Must be Word-sized
34
}
key_combo_member_t
;
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