]> git.donarmstrong.com Git - qmk_firmware.git/blob - LUFA/Drivers/Board/AVR8/QMK/LEDs.h
1310612dc83ec4e60e8c13f773b2e3b29d32088e
[qmk_firmware.git] / LUFA / Drivers / Board / AVR8 / QMK / LEDs.h
1 /*\r
2 Copyright 2017 Jack Humbert\r
3 \r
4 This program is free software: you can redistribute it and/or modify\r
5 it under the terms of the GNU General Public License as published by\r
6 the Free Software Foundation, either version 2 of the License, or\r
7 (at your option) any later version.\r
8 \r
9 This program is distributed in the hope that it will be useful,\r
10 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 GNU General Public License for more details.\r
13 \r
14 You should have received a copy of the GNU General Public License\r
15 along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
16 */\r
17 \r
18 /** \file\r
19  *  \brief General driver header for QMK-powered keyboards.\r
20  *  \copydetails Group_LEDs_QMK\r
21  *\r
22  *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver\r
23  *        dispatch header located in LUFA/Drivers/Board/LEDs.h.\r
24  */\r
25 \r
26 /** \ingroup Group_LEDs\r
27  *  \defgroup Group_LEDs_QMK QMK\r
28  *  \brief General driver header for QMK-powered keyboards.\r
29  *\r
30  *  General driver header for QMK-powered keyboards (http://qmk.fm).\r
31  *\r
32  *  <b>QMK</b>:\r
33  *  <table>\r
34  *    <tr><th>Name</th><th>Color</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>\r
35  *    <tr><td>LEDS_LED1</td><td>Green</td><td>General Indicator</td><td>High</td><td>PORT(QMK_LED).6</td></tr>\r
36  *  </table>\r
37  *\r
38  *  @{\r
39  */\r
40 \r
41 #ifndef __LEDS_QMK_H__\r
42 #define __LEDS_QMK_H__\r
43 \r
44     /* Includes: */\r
45         #include "../../../../Common/Common.h"\r
46 \r
47     /* Enable C linkage for C++ Compilers: */\r
48         #if defined(__cplusplus)\r
49             extern "C" {\r
50         #endif\r
51 \r
52     /* Preprocessor Checks: */\r
53         #if !defined(__INCLUDE_FROM_LEDS_H)\r
54             #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.\r
55         #endif\r
56 \r
57         #define B0 0x30\r
58         #define B1 0x31\r
59         #define B2 0x32\r
60         #define B3 0x33\r
61         #define B4 0x34\r
62         #define B5 0x35\r
63         #define B6 0x36\r
64         #define B7 0x37\r
65         #define C0 0x60\r
66         #define C1 0x61\r
67         #define C2 0x62\r
68         #define C3 0x63\r
69         #define C4 0x64\r
70         #define C5 0x65\r
71         #define C6 0x66\r
72         #define C7 0x67\r
73         #define D0 0x90\r
74         #define D1 0x91\r
75         #define D2 0x92\r
76         #define D3 0x93\r
77         #define D4 0x94\r
78         #define D5 0x95\r
79         #define D6 0x96\r
80         #define D7 0x97\r
81         #define E0 0xC0\r
82         #define E1 0xC1\r
83         #define E2 0xC2\r
84         #define E3 0xC3\r
85         #define E4 0xC4\r
86         #define E5 0xC5\r
87         #define E6 0xC6\r
88         #define E7 0xC7\r
89         #define F0 0xF0\r
90         #define F1 0xF1\r
91         #define F2 0xF2\r
92         #define F3 0xF3\r
93         #define F4 0xF4\r
94         #define F5 0xF5\r
95         #define F6 0xF6\r
96         #define F7 0xF7\r
97         #define A0 0x00\r
98         #define A1 0x01\r
99         #define A2 0x02\r
100         #define A3 0x03\r
101         #define A4 0x04\r
102         #define A5 0x05\r
103         #define A6 0x06\r
104         #define A7 0x07\r
105 \r
106         #define QMK_ESC_COL F1\r
107         #define QMK_ESC_ROW D5\r
108         #define QMK_LED     E6\r
109         #define QMK_SPEAKER C6\r
110 \r
111         #define DDR(pin) _SFR_IO8(((pin) >> 4) + 1)\r
112         #define PORT(pin) _SFR_IO8(((pin) >> 4) + 2)\r
113         #define PIN(pin) _SFR_IO8((pin) >> 4)\r
114         #define NUM(pin) _BV((pin) & 0xF)\r
115 \r
116     /* Public Interface - May be used in end-application: */\r
117         /* Macros: */\r
118             /** LED mask for the first LED on the board. */\r
119             #define LEDS_LED1        NUM(QMK_LED)\r
120             #define LEDS_LED2        NUM(QMK_SPEAKER)\r
121 \r
122             /** LED mask for all the LEDs on the board. */\r
123             #define LEDS_ALL_LEDS    LEDS_LED1 | LEDS_LED2\r
124 \r
125             /** LED mask for none of the board LEDs. */\r
126             #define LEDS_NO_LEDS     0\r
127 \r
128         /* Inline Functions: */\r
129         #if !defined(__DOXYGEN__)\r
130             static inline void LEDs_Init(void)\r
131             {\r
132                 DDR(QMK_LED)  |= LEDS_LED1;\r
133                 PORT(QMK_LED) |= LEDS_LED1;\r
134 \r
135                 DDR(QMK_SPEAKER)  |= LEDS_LED2;\r
136                 PORT(QMK_SPEAKER) |= LEDS_LED2;\r
137             }\r
138 \r
139             static inline void LEDs_Disable(void)\r
140             {\r
141                 DDR(QMK_LED)  &= ~LEDS_LED1;\r
142                 PORT(QMK_LED) &= ~LEDS_LED2;\r
143 \r
144                 DDR(QMK_SPEAKER)  &= ~LEDS_LED1;\r
145                 PORT(QMK_SPEAKER) &= ~LEDS_LED2;\r
146             }\r
147 \r
148             static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)\r
149             {\r
150                 PORT(QMK_LED) &= (LEDS_LED1 & ~LEDMask);\r
151                 PORT(QMK_SPEAKER) &= (LEDS_LED2 & ~LEDMask);\r
152             }\r
153 \r
154             static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)\r
155             {\r
156                 PORT(QMK_LED) |=  (LEDS_LED1 & LEDMask);\r
157                 PORT(QMK_SPEAKER) |=  (LEDS_LED2 & LEDMask);\r
158             }\r
159 \r
160             static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)\r
161             {\r
162                 PORT(QMK_LED) = ((PORT(QMK_LED) | LEDS_LED1) & ~LEDMask);\r
163                 PORT(QMK_SPEAKER) = ((PORT(QMK_SPEAKER) | LEDS_LED2) & ~LEDMask);\r
164             }\r
165 \r
166             static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,\r
167                                                const uint8_t ActiveMask)\r
168             {\r
169                 PORT(QMK_LED) = ((PORT(QMK_LED) | (LEDS_LED1 & LEDMask)) & ~ActiveMask);\r
170                 PORT(QMK_SPEAKER) = ((PORT(QMK_SPEAKER) | (LEDS_LED1 & LEDMask)) & ~ActiveMask);\r
171             }\r
172 \r
173             static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)\r
174             {\r
175                 PIN(QMK_LED)  = (LEDS_LED1 & LEDMask);\r
176                 PIN(QMK_SPEAKER)  = (LEDS_LED2 & LEDMask);\r
177             }\r
178 \r
179             static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;\r
180             static inline uint8_t LEDs_GetLEDs(void)\r
181             {\r
182                 return (~PORT(QMK_LED) & LEDS_LED1) | (~(PORT(QMK_SPEAKER) & LEDS_LED2));\r
183             }\r
184         #endif\r
185 \r
186     /* Disable C linkage for C++ Compilers: */\r
187         #if defined(__cplusplus)\r
188             }\r
189         #endif\r
190 \r
191 #endif\r
192 \r
193 /** @} */\r
194 \r