]> begriffs open source - cmsis-driver-bare/blob - lib/debounce.c
Pass cmsis validator test
[cmsis-driver-bare] / lib / debounce.c
1 #include <stddef.h>
2
3 #include "debounce.h"
4
5 void debounce_init(sample_state *ss,
6         bool initial, uint32_t threshold)
7 {
8         ss->candidate = initial;
9         ss->count = ss->count_reset = threshold;
10 }
11
12 bool *debounce(sample_state *ss, bool val)
13 {
14         if (val == ss->candidate)
15                 ss->count = ss->count_reset;
16         else if (--ss->count == 0)
17         {
18                 ss->candidate = val;
19                 ss->count = ss->count_reset;
20                 return &ss->candidate;
21         }
22         return NULL;
23 }