-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogic_in_example.c.txt
112 lines (87 loc) · 3.24 KB
/
Logic_in_example.c.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*!\file Logic_in_example.c
** \author SMFSW
** \copyright MIT (c) 2017-2024, SMFSW
** \brief Logic_in example
** \note Simple Logic_in.c / Logic_ex.c example to handle different variables inputs with callbacks
**/
#include "sarmfsw.h"
#include "Logic_in.h"
#define IN_var2_Pos 3
static Logic_in in_varB11; //!< Logic_in in_varB11 instance structure declaration
static Logic_in in_varB15; //!< Logic_in in_varB15 instance structure declaration
static Logic_in in_varB19; //!< Logic_in in_varB19 instance structure declaration
static Logic_in in_var2; //!< Logic_in in_var2 instance structure declaration
static Logic_in * const LOGICs_in[] = { &in_varB11, &in_varB15, &in_varB19, &in_var2 }; //!< Logic_in pointers array (for handler loop)
static const uint8_t LOGICs_in_nb = SZ_ARRAY(LOGICs_in); //!< Number of LOGICs_in
uint32_t LGI_var = 0; //!< Logic_in test var
uint32_t LGI_var2 = 0; //!< Logic_in test var2
/*!\brief LGI_var2 getter
** \return Bit state
**/
GPIO_PinState get_LGI_var2(const Logic_in * const in) {
// Catching LGI_var2 bit at position IN_var2_Pos
return binEval(LGI_var2 & LSHIFT(1U, IN_var2_Pos)); }
/*!\brief Callback for inputs when on
** \note Callbacks On declared with same function callback (to demonstrate use of passed argument Logic_in *)
**/
static void Callback_ON(const Logic_in * const in)
{
static uint32_t hRepeat_b19 = 0;
if (in == &in_varB11)
{
// On Callback for in_varB11
}
else if (in == &in_varB15)
{
// On Callback for in_varB15
}
else if (in == &in_varB19)
{
if (TPSSUP_MS(hRepeat_b19, 500)) // Repeat every 500ms
{
hRepeat_b19 = HALTicks();
// On Callback for in_varB19 (repeat)
}
}
}
/*!\brief Callback for b11 when getting off
** \note Callbacks Off declared with different function callback (to demonstrate both possibilities)
**/
static void Callback_OFF_b11(const Logic_in * const in)
{
// Off Callback for in_varB11
}
/*!\brief Callback for b15 when getting off
** \note Callbacks Off declared with different function callback (to demonstrate both possibilities)
**/
static void Callback_OFF_b15(const Logic_in * const in)
{
// Off Callback for in_varB15
}
/*!\brief Callback for b19 when getting off
** \note Callbacks Off declared with different function callback (to demonstrate both possibilities)
**/
static void Callback_OFF_b19(const Logic_in * const in)
{
// Off Callback for in_varB19
}
void Logic_in_example_handler(void)
{
static bool init_io = false;
if (!init_io)
{
// Inputs configured logic high active, 75ms debounce, both OFF & ON callbacks (with ON repeat only for B2)
// With get_LGI_var getter, getting bit position 11 (0x800), 15 (0x8000) & 19 (0x80000) respectively
Logic_in_init(&in_varB11, NULL, &LGI_var, 11, true, 75, Callback_ON, Callback_OFF_b11, false);
Logic_in_init(&in_varB15, NULL, &LGI_var, 15, true, 75, Callback_ON, Callback_OFF_b15, false);
Logic_in_init(&in_varB19, NULL, &LGI_var, 19, true, 75, Callback_ON, Callback_OFF_b19, true);
Logic_in_init(&in_var2, get_LGI_var2, NULL, 0, true, 75, Callback_ON, Callback_OFF_b11, false);
init_io = true;
}
for (unsigned int i = 0 ; i < LOGICs_in_nb ; i++)
{
Logic_in_handler(LOGICs_in[i]);
}
LGI_var++; // To get different values on variable
LGI_var2++; // To get different values on variable
}