nRF Connect SDK API
3.4.99
Toggle main menu visibility
Loading...
Searching...
No Matches
led_effect.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2019-2021 Nordic Semiconductor ASA
3
*
4
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5
*/
6
7
#ifndef _LED_EFFECT_H_
8
#define _LED_EFFECT_H_
9
15
16
#include <zephyr/types.h>
17
#include <zephyr/sys/util.h>
18
19
#ifdef __cplusplus
20
extern
"C"
{
21
#endif
22
23
#define _CAF_LED_COLOR_CHANNEL_COUNT 3
24
27
struct
led_color
{
29
uint8_t
c
[_CAF_LED_COLOR_CHANNEL_COUNT];
30
};
31
38
struct
led_effect_step
{
40
struct
led_color
color
;
41
43
uint16_t
substep_count
;
44
46
uint16_t
substep_time
;
47
};
48
51
struct
led_effect
{
53
const
struct
led_effect_step
*
steps
;
54
56
uint16_t
step_count
;
57
59
bool
loop_forever
;
60
};
61
68
#define COLOR_BRIGHTNESS_TO_PCT(_val) ((_val * 100) / UINT8_MAX)
69
83
#define LED_COLOR_ARG_PASS(...) __VA_ARGS__
84
96
#define LED_COLOR(_r, _g, _b) { \
97
.c = { \
98
COLOR_BRIGHTNESS_TO_PCT(_r), \
99
COLOR_BRIGHTNESS_TO_PCT(_g), \
100
COLOR_BRIGHTNESS_TO_PCT(_b) \
101
} \
102
}
103
106
#define LED_NOCOLOR() { \
107
.c = {0, 0, 0} \
108
}
109
116
#define LED_EFFECT_LED_ON(_color) \
117
{ \
118
.steps = ((const struct led_effect_step[]) { \
119
{ \
120
.color = _color, \
121
.substep_count = 1, \
122
.substep_time = 0, \
123
}, \
124
}), \
125
.step_count = 1, \
126
.loop_forever = false, \
127
}
128
129
132
#define LED_EFFECT_LED_OFF() LED_EFFECT_LED_ON(LED_NOCOLOR())
133
143
#define LED_EFFECT_LED_ON_GO_OFF(_color, _on_time, _off_delay) \
144
{ \
145
.steps = ((const struct led_effect_step[]) { \
146
{ \
147
.color = _color, \
148
.substep_count = 1, \
149
.substep_time = 0, \
150
}, \
151
{ \
152
.color = _color, \
153
.substep_count = 1, \
154
.substep_time = (_on_time), \
155
}, \
156
{ \
157
.color = LED_NOCOLOR(), \
158
.substep_count = (_off_delay)/10, \
159
.substep_time = 10, \
160
}, \
161
}), \
162
.step_count = 3, \
163
.loop_forever = false, \
164
}
165
178
#define LED_EFFECT_LED_BLINK2(_period_on, _period_off, _color) \
179
{ \
180
.steps = ((const struct led_effect_step[]) { \
181
{ \
182
.color = _color, \
183
.substep_count = 1, \
184
.substep_time = (_period_off), \
185
}, \
186
{ \
187
.color = LED_NOCOLOR(), \
188
.substep_count = 1, \
189
.substep_time = (_period_on), \
190
}, \
191
}), \
192
.step_count = 2, \
193
.loop_forever = true, \
194
}
195
207
#define LED_EFFECT_LED_BLINK(_period, _color) \
208
LED_EFFECT_LED_BLINK2(_period, _period, LED_COLOR_ARG_PASS(_color))
209
214
#define _BREATH_SUBSTEPS 15
215
224
#define LED_EFFECT_LED_BREATH(_period, _color) \
225
{ \
226
.steps = ((const struct led_effect_step[]) { \
227
{ \
228
.color = _color, \
229
.substep_count = _BREATH_SUBSTEPS, \
230
.substep_time = ((_period + (_BREATH_SUBSTEPS - 1)) \
231
/ _BREATH_SUBSTEPS), \
232
}, \
233
{ \
234
.color = _color, \
235
.substep_count = 1, \
236
.substep_time = _period, \
237
}, \
238
{ \
239
.color = LED_NOCOLOR(), \
240
.substep_count = _BREATH_SUBSTEPS, \
241
.substep_time = ((_period + (_BREATH_SUBSTEPS - 1)) \
242
/ _BREATH_SUBSTEPS), \
243
}, \
244
{ \
245
.color = LED_NOCOLOR(), \
246
.substep_count = 1, \
247
.substep_time = _period, \
248
}, \
249
}), \
250
.step_count = 4, \
251
.loop_forever = true, \
252
}
253
259
#define LED_CLOCK_BLINK_PERIOD 200
260
265
#define LED_CLOCK_SLEEP_PERIOD 1000
266
275
#define _LED_CLOCK_TIK(i, ...) \
276
{ \
277
.color = __VA_ARGS__, \
278
.substep_count = 1, \
279
.substep_time = LED_CLOCK_BLINK_PERIOD, \
280
}, \
281
{ \
282
.color = LED_NOCOLOR(), \
283
.substep_count = 1, \
284
.substep_time = LED_CLOCK_BLINK_PERIOD, \
285
}
286
298
#define LED_EFFECT_LED_CLOCK(_ticks, _color) \
299
{ \
300
.steps = ((const struct led_effect_step[]) { \
301
{ \
302
.color = LED_NOCOLOR(), \
303
.substep_count = 1, \
304
.substep_time = LED_CLOCK_SLEEP_PERIOD, \
305
}, \
306
LISTIFY(_ticks, _LED_CLOCK_TIK, (,), _color) \
307
}), \
308
.step_count = (2 * _ticks + 1), \
309
.loop_forever = true, \
310
}
311
312
#ifdef __cplusplus
313
}
314
#endif
315
319
320
#endif
/* _LED_EFFECT_H_ */
led_color::c
uint8_t c[3]
Definition
led_effect.h:29
led_color
Color of LED.
Definition
led_effect.h:27
led_effect_step::color
struct led_color color
Definition
led_effect.h:40
led_effect_step::substep_count
uint16_t substep_count
Definition
led_effect.h:43
led_effect_step::substep_time
uint16_t substep_time
Definition
led_effect.h:46
led_effect_step
Single step of a LED effect.
Definition
led_effect.h:38
led_effect::step_count
uint16_t step_count
Definition
led_effect.h:56
led_effect::steps
const struct led_effect_step * steps
Definition
led_effect.h:53
led_effect::loop_forever
bool loop_forever
Definition
led_effect.h:59
led_effect
Single LED effect.
Definition
led_effect.h:51
include
caf
led_effect.h
Generated on
for nRF Connect SDK API by
1.17.0