summaryrefslogtreecommitdiff
path: root/keyboards/xd75
diff options
context:
space:
mode:
authorColin T.A. Gray <colinta@gmail.com>2017-12-03 08:21:10 -0700
committerJack Humbert <jack.humb@gmail.com>2017-12-04 18:16:07 -0500
commitd299d0e72dd96b73b745cad12977a719a0d71cd4 (patch)
treea3114c78a70d01315380d3f7c0b7fd91e639e1ca /keyboards/xd75
parent6fddb31c4c7dd96203e76ec9ba204c02bb86f060 (diff)
adds led control functions to XD75 layout
Diffstat (limited to 'keyboards/xd75')
-rw-r--r--keyboards/xd75/readme.md40
-rw-r--r--keyboards/xd75/xd75.c62
-rw-r--r--keyboards/xd75/xd75.h16
3 files changed, 118 insertions, 0 deletions
diff --git a/keyboards/xd75/readme.md b/keyboards/xd75/readme.md
index 5f4d2e85ff..e11ce7dca9 100644
--- a/keyboards/xd75/readme.md
+++ b/keyboards/xd75/readme.md
@@ -26,6 +26,46 @@ firmware likely requires a command line like:
$ sudo make xd75:default:dfu
```
+### LED control
+
+There are 3 individual LEDs that can be turned on and off, plus the keycap LEDs (which are all wired into the same pin). The functions are named according to how they're labeled on the PCB.
+
+TODO: it would be nice to have PWM support on these LEDs for fade-in/fade-out effects.
+
+```c
+capslock_led_on();
+gp100_led_on();
+gp103_led_on();
+keycaps_led_on();
+
+
+// led_set_user example - you could also turn these on/off in response
+// to events in process_record_user or matrix_scan_user
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ capslock_led_on();
+ } else {
+ capslock_led_off();
+ }
+
+ if (some_custom_state) {
+ gp100_led_on();
+ }
+ else {
+ gp100_led_off();
+ }
+}
+```
+
+For the curious:
+
+```
+CAPSLOCK_LED B2
+GP103_LED F4
+KEYCAPS_LED F5
+GP100_LED F7
+```
+
### Other Keymaps
The "default" keymap included is basically the OLKB Atomic keymap with
diff --git a/keyboards/xd75/xd75.c b/keyboards/xd75/xd75.c
index 9b35b6cfa0..dd0ec8a433 100644
--- a/keyboards/xd75/xd75.c
+++ b/keyboards/xd75/xd75.c
@@ -15,10 +15,20 @@
*/
#include "xd75.h"
+#define XD75_CAPSLOCK_LED 2 // B2
+#define XD75_GP103_LED 4 // F4
+#define XD75_KEYCAPS_LED 5 // F5
+#define XD75_GP100_LED 7 // F7
+
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
+ capslock_led_init();
+ gp100_led_init();
+ gp103_led_init();
+ keycaps_led_init();
+
matrix_init_user();
}
@@ -41,3 +51,55 @@ void led_set_kb(uint8_t usb_led) {
led_set_user(usb_led);
}
+
+void capslock_led_init(void) {
+ DDRB |= (1 << XD75_CAPSLOCK_LED);
+ capslock_led_off();
+}
+
+void capslock_led_off(void) {
+ PORTB |= (1 << XD75_CAPSLOCK_LED);
+}
+
+void capslock_led_on(void) {
+ PORTB &= ~(1 << XD75_CAPSLOCK_LED);
+}
+
+void gp100_led_init(void) {
+ DDRF |= (1 << XD75_GP100_LED);
+ gp100_led_off();
+}
+
+void gp100_led_off(void) {
+ PORTF |= (1 << XD75_GP100_LED);
+}
+
+void gp100_led_on(void) {
+ PORTF &= ~(1 << XD75_GP100_LED);
+}
+
+void gp103_led_init(void) {
+ DDRF |= (1 << XD75_GP103_LED);
+ gp103_led_off();
+}
+
+void gp103_led_off(void) {
+ PORTF &= ~(1 << XD75_GP103_LED);
+}
+
+void gp103_led_on(void) {
+ PORTF |= (1 << XD75_GP103_LED);
+}
+
+void keycaps_led_init(void) {
+ DDRF |= (1 << XD75_KEYCAPS_LED);
+ keycaps_led_off();
+}
+
+void keycaps_led_off(void) {
+ PORTF |= (1 << XD75_KEYCAPS_LED);
+}
+
+void keycaps_led_on(void) {
+ PORTF &= ~(1 << XD75_KEYCAPS_LED);
+}
diff --git a/keyboards/xd75/xd75.h b/keyboards/xd75/xd75.h
index b2030d4a6e..e278066900 100644
--- a/keyboards/xd75/xd75.h
+++ b/keyboards/xd75/xd75.h
@@ -52,4 +52,20 @@
#define LAYOUT_ortho_5x15 KEYMAP
+void capslock_led_init(void);
+void capslock_led_off(void);
+void capslock_led_on(void);
+
+void gp100_led_init(void);
+void gp100_led_off(void);
+void gp100_led_on(void);
+
+void gp103_led_init(void);
+void gp103_led_off(void);
+void gp103_led_on(void);
+
+void keycaps_led_init(void);
+void keycaps_led_off(void);
+void keycaps_led_on(void);
+
#endif