[FLYWOOF411] add board documentation
[inav/snaewe.git] / src / main / drivers / light_led.c
blobc999a62569dc62cd1befe6e820f1b1732a884ced
1 /*
2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
18 #include "platform.h"
20 #include "drivers/io.h"
21 #include "io_impl.h"
23 #include "drivers/light_led.h"
25 static const IO_t leds[] = {
26 #ifdef LED0
27 DEFIO_IO(LED0),
28 #else
29 DEFIO_IO(NONE),
30 #endif
31 #ifdef LED1
32 DEFIO_IO(LED1),
33 #else
34 DEFIO_IO(NONE),
35 #endif
36 #ifdef LED2
37 DEFIO_IO(LED2),
38 #else
39 DEFIO_IO(NONE),
40 #endif
41 #if defined(LED0_A) || defined(LED1_A) || defined(LED2_A)
42 #ifdef LED0_A
43 DEFIO_IO(LED0_A),
44 #else
45 DEFIO_IO(NONE),
46 #endif
47 #ifdef LED1_A
48 DEFIO_IO(LED1_A),
49 #else
50 DEFIO_IO(NONE),
51 #endif
52 #ifdef LED2_A
53 DEFIO_IO(LED2_A),
54 #else
55 DEFIO_IO(NONE),
56 #endif
57 #endif
60 uint8_t ledPolarity = 0
61 #ifdef LED0_INVERTED
62 | BIT(0)
63 #endif
64 #ifdef LED1_INVERTED
65 | BIT(1)
66 #endif
67 #ifdef LED2_INVERTED
68 | BIT(2)
69 #endif
70 #ifdef LED0_A_INVERTED
71 | BIT(3)
72 #endif
73 #ifdef LED1_A_INVERTED
74 | BIT(4)
75 #endif
76 #ifdef LED2_A_INVERTED
77 | BIT(5)
78 #endif
81 static uint8_t ledOffset = 0;
83 void ledInit(bool alternative_led)
85 #if defined(LED0_A) || defined(LED1_A) || defined(LED2_A)
86 if (alternative_led) {
87 ledOffset = LED_NUMBER;
89 #else
90 UNUSED(alternative_led);
91 #endif
93 LED0_OFF;
94 LED1_OFF;
95 LED2_OFF;
97 for (int i = 0; i < LED_NUMBER; i++) {
98 if (leds[i + ledOffset]) {
99 IOInit(leds[i + ledOffset], OWNER_LED, RESOURCE_OUTPUT, RESOURCE_INDEX(i));
100 IOConfigGPIO(leds[i + ledOffset], IOCFG_OUT_PP);
104 LED0_OFF;
105 LED1_OFF;
106 LED2_OFF;
109 void ledToggle(int led)
111 IOToggle(leds[led + ledOffset]);
114 void ledSet(int led, bool on)
116 const bool inverted = (1 << (led + ledOffset)) & ledPolarity;
117 IOWrite(leds[led + ledOffset], on ? inverted : !inverted);