]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Added support for V60 Type R Polestar backlight and RGB underglow (#1852)
authorbenlyall <ben@lyall.me>
Mon, 1 Jan 2018 22:49:26 +0000 (09:49 +1100)
committerJack Humbert <jack.humb@gmail.com>
Mon, 1 Jan 2018 22:49:26 +0000 (17:49 -0500)
* Added V60 Type R Polestar Backlight and RGB Underglow support

* made RGB Underglow stuff optional, to support the non Polestar V60

* updated readme and rules

* fixed typo in readme

keyboards/v60_type_r/config.h
keyboards/v60_type_r/keymaps/default/config.h [new file with mode: 0644]
keyboards/v60_type_r/keymaps/default/keymap.c
keyboards/v60_type_r/keymaps/vimouse/config.h [new file with mode: 0644]
keyboards/v60_type_r/keymaps/vimouse/keymap.c [new file with mode: 0644]
keyboards/v60_type_r/keymaps/vimouse/readme.md [new file with mode: 0644]
keyboards/v60_type_r/keymaps/vimouse/rules.mk [new file with mode: 0644]
keyboards/v60_type_r/readme.md
keyboards/v60_type_r/rules.mk
keyboards/v60_type_r/v60_type_r.c
keyboards/v60_type_r/v60_type_r.h

index c20bfe3a62d3f940aecbcfc845885e966690c3e3..1f3ebcd516067bcb071491b2389f5d9f911dadbd 100644 (file)
@@ -48,10 +48,20 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
 #define DIODE_DIRECTION COL2ROW
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
+
+#define BACKLIGHT_PIN F7
+//#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_ON_STATE 0
+
+#define RGBLIGHT_CUSTOM_DRIVER
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 1
+#define RGB_RED_PIN PF6
+#define RGB_GREEN_PIN PF5
+#define RGB_BLUE_PIN PF4
+#define RGB_DI_PIN 0
+#define RGB_STEP 16
 
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/v60_type_r/keymaps/default/config.h b/keyboards/v60_type_r/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..9561b02
--- /dev/null
@@ -0,0 +1,26 @@
+/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#ifdef V60_POLESTAR
+#undef V60_POLESTAR
+#endif
+
+#endif
index 58ae81c4be9e7bbffc3893bb2a91a83002cd83cc..e277254b9e442c457ef4dd59df405d0753e489b9 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 /* This is the default layout provided by the KBP V60 Type R
-* as depicted in their manual and on the stock keycaps. 
+* as depicted in their manual and on the stock keycaps.
 */
 #include "v60_type_r.h"
 
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
               KC_TRNS,   KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT,        KC_TRNS,          \
               KC_TRNS,   KC_NO,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_VOLD,   KC_VOLU, KC_MUTE, KC_END,  KC_PGDN, KC_DOWN,         KC_TRNS, KC_NO,  \
               KC_TRNS,   KC_TRNS,  KC_TRNS,            KC_TRNS,                                                           KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS),
+
 };
 
 
@@ -86,18 +86,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 };
 
 
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  return true;
-}
-
 void led_set_user(uint8_t usb_led) {
 
 }
diff --git a/keyboards/v60_type_r/keymaps/vimouse/config.h b/keyboards/v60_type_r/keymaps/vimouse/config.h
new file mode 100644 (file)
index 0000000..3937420
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define V60_POLESTAR
+
+// place overrides here
+#define MOUSEKEY_INTERVAL       20
+#define MOUSEKEY_DELAY          0
+#define MOUSEKEY_TIME_TO_MAX    60
+#define MOUSEKEY_MAX_SPEED      7
+#define MOUSEKEY_WHEEL_DELAY    0
+
+#endif
diff --git a/keyboards/v60_type_r/keymaps/vimouse/keymap.c b/keyboards/v60_type_r/keymaps/vimouse/keymap.c
new file mode 100644 (file)
index 0000000..1dd9f7e
--- /dev/null
@@ -0,0 +1,130 @@
+/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "v60_type_r.h"
+
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Keymap 0: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|   Bs  |
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
+     * |-----------------------------------------------------------|
+     * |FN0   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
+     * |-----------------------------------------------------------|
+     * |LShift  |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /| RShift   |
+     * |-----------------------------------------------------------|
+     * |Ctrl|Alt |Gui |      Space/L3           |Gui |Alt |Ctrl|Fn1|
+     * `-----------------------------------------------------------'
+     */
+    [0] = KEYMAP(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  XXXXX, KC_BSPC, \
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC,     KC_BSLS, \
+        LT(1, KC_CAPS),   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  \
+        KC_LSFT, XXXXX,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, XXXXX,  \
+        KC_LCTL, KC_LALT, KC_LGUI,               LT(2, KC_SPC),                          KC_RGUI, KC_RALT,  KC_RCTL, MO(3)),
+    /* Keymap 1: FN Layer
+     * ,-----------------------------------------------------------.
+     * |`  | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|  Del  |
+     * |-----------------------------------------------------------|
+     * |     |   |   |   |   |   |   |   |   |   |PSc|SLk|Pau| Ins |
+     * |-----------------------------------------------------------|
+     * |      |   |   |   |   |   | Lt| Dn| Up| Rt|Hom|PgU|        |
+     * |-----------------------------------------------------------|
+     * |        |   |   |   |   |   |Mut|VDn|VUp|End|PgD|          |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |    |    |    |    |
+     * `-----------------------------------------------------------'
+     */
+    [1] = KEYMAP(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12,  _____,  KC_DEL, \
+        _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____, KC_PSCR, KC_SLCK, KC_PAUS,          KC_INS, \
+        _____,   _____,   _____,   _____,   _____,   _____, KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT, KC_HOME, KC_PGUP,           _____,          \
+        _____,   _____,   _____,   _____,   _____,   _____,   _____, KC_MUTE, KC_VOLD, KC_VOLU,  KC_END, KC_PGDN,           _____,  _____,  \
+        _____,   _____,   _____,               _____,                                                      _____,   _____,  _____,  _____),
+    /* Keymap 2: Mouse Keys Layer
+     * ,-----------------------------------------------------------.
+     * |   |   |   |   |   |   |   |   |   |   |   |   |   |       |
+     * |-----------------------------------------------------------|
+     * |     |   |   |   |   |   |   |MWU|MWD|   |   |   |   |     |
+     * |-----------------------------------------------------------|
+     * |      |   |   |   |   |   |MLt|MDn|MUp|MRt|   |   |        |
+     * |-----------------------------------------------------------|
+     * |        |   |   |   |   |SPC|Ms1|Ms2|Ms3|   |   |          |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |    |    |    |    |
+     * `-----------------------------------------------------------'
+     */
+    [2] = KEYMAP(
+        _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,  _____,  _____,  _____,  _____,  _____, \
+        _____,   _____,   _____,   _____,   _____,   _____,   _____,   KC_MS_WH_UP, KC_MS_WH_DOWN,   _____, _____, _____, _____,          _____, \
+        _____,   _____,   _____,   _____,   _____,   _____, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, _____, _____,           _____,          \
+        _____,   _____,   _____,   _____,   _____,   _____,   KC_SPC, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3,  _____, _____,           _____,  _____,  \
+        _____,   _____,   _____,               _____,                                                      _____,   _____,  _____,  _____),
+    /* Keymap 3: LED Modification Layer
+     * ,-----------------------------------------------------------.
+     * |   |BLT|BLC|UGT|UGP|UGB|UGR|   |   |   |   |   |   |       |
+     * |-----------------------------------------------------------|
+     * |     |RD+|GN+|BL+|HU+|SA+|VA+|   |   |   |   |   |   |     |
+     * |-----------------------------------------------------------|
+     * |      |RD-|GN-|BL-|HU-|SA-|VA-|   |   |   |   |   |        |
+     * |-----------------------------------------------------------|
+     * |        |   |   |   |   |   |   |   |   |   |   |          |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |    |    |    |    |
+     * `-----------------------------------------------------------'
+     */
+    [3] = KEYMAP(
+        _____, BL_TOGG, BL_STEP, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R,   _____,   _____,   _____,   _____,   _____,   _____,  _____,  _____, \
+        _____, RGB_RI,  RGB_GI,  RGB_BI,  RGB_HUI, RGB_SAI, RGB_VAI,   _____,   _____,   _____,   _____,   _____,   _____,          _____, \
+        _____, RGB_RD,  RGB_GD,  RGB_BD,  RGB_HUD, RGB_SAD, RGB_VAD,   _____,   _____,   _____,   _____,   _____,           _____,          \
+        _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,   _____,           _____,  _____,  \
+        _____,   _____,   _____,               _____,                                                      _____,   _____,  _____,  _____),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+
+void led_set_user(uint8_t usb_led) {
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        // output low
+        DDRE  |=  (1<<PE6);
+        PORTE &= ~(1<<PE6);
+    }
+    else {
+        // Hi-Z
+        DDRE  &= ~(1<<PE6);
+        PORTE &= ~(1<<PE6);
+    }
+}
diff --git a/keyboards/v60_type_r/keymaps/vimouse/readme.md b/keyboards/v60_type_r/keymaps/vimouse/readme.md
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/v60_type_r/keymaps/vimouse/rules.mk b/keyboards/v60_type_r/keymaps/vimouse/rules.mk
new file mode 100644 (file)
index 0000000..3107706
--- /dev/null
@@ -0,0 +1,2 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
index c6be2909134c122c2816e82108a925bb76452e41..5065ca106284cb9d95423c1081e80cc4c76100ae 100644 (file)
@@ -1,19 +1,30 @@
-KBParadise V60 Type R 
+KBParadise V60 Type R
 ======================
 
-Released in 2017, the KBP V60 Type R is KB Paradise's first foray into the world of fully programmable keyboards. It utilizes an atmega32u4, Cherry MX switches, standard layout plate, Cherry style stabilizers, and plastic 60% case.  
+Released in 2017, the KBP V60 Type R is KB Paradise's first foray into the world of fully programmable keyboards. It utilizes an atmega32u4, Cherry MX switches, standard layout plate, Cherry style stabilizers, and plastic 60% case.
 
 The keyboard comes in two flavors:
 1. V60 Type R
 2. V60 Type R Polestar
 
-The Polestar comes with both in switch and underglow lighting, while the regular Type R has neither.  
+The Polestar comes with both in switch and underglow lighting, while the regular Type R has neither.
 
-Please note that other variants of the KBP V60 are not fully programmable. 
+Please note that other variants of the KBP V60 are not fully programmable.
 
-In switch and underglow lighting is currently not supported, but the hex file generated by QMK can still be used for either type r board. 
+Backlight and RGB Underglow are both supported.
 
-The KB Paradise preferred way of creating the hex file is by using https://tkg.io/, selecting Fantastic60 and then defining your keymap.  
+To use the backlight and/or RGB underglow:
+* Create a new keymap
+* Create a rules.mk file in the keymap
+* Add RGBLIGHT_ENABLE = yes and/or BACKLIGHT_ENABLE = yes to the rules.mk
+* Setup your keymap to your preference.  Use [the `vimouse` keymap](keymaps/vimouse/keymap.c) as a starting point
+* Some extra keys are defined to allow you to set the red, green and blue values of the underglow directly, rather than using the HSV spectrum.  These are RGB_RI, RGB_RD, RGB_GI, RGB_GD, RGB_BI, RGB_BD for increase and decrease of the red, green and blue channels respectively.
+
+The provided `default` keymap pretty closely matches the default V60 Type R keymap, minus the backlight and underglow control keys.  The `vimouse` keymap is completely customised and makes use of many of the possibilities, including mouse keys, backlighting, RGB underglow, etc.
+
+Note for those customising: The configuration used in the `vimouse` keymap results in about 93% of the available flash being utilised.  Keep that in mind if you're adding functionality.
+
+Note: By default the V60 Type R uses TMK.  You should know what you're doing and none of this is guaranteed to work.  If you want to stick with the TMK default, then the KB Paradise preferred way of creating the hex file is by using https://tkg.io/, selecting Fantastic60 and then defining your keymap.
 
 You will then have to use tkg-toolkit to finish the flashing
 
@@ -25,6 +36,10 @@ Make example for this keyboard (after setting up your build environment):
 
     make v60_type_r:default
 
+or
+
+    make v60_type_r:vimouse
+
 See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
 
 
index a3571e8deb0eb7d2a57d25af7f99ffbb5205f535..b970f2722d8b9d4543b6a5c4b145d7e697725deb 100644 (file)
@@ -51,7 +51,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
 # Build Options
 #   change yes to no to disable
 #
-BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
 EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
 CONSOLE_ENABLE ?= yes        # Console for debug(+400)
@@ -61,6 +61,7 @@ SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 NKRO_ENABLE ?= no            # USB Nkey Rollover
 BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE ?= no        # Enable the RGB Underglow
 MIDI_ENABLE ?= no            # MIDI support (+2400 to 4200, depending on config)
 UNICODE_ENABLE ?= no         # Unicode
 BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
index 4f88919bc364d660b92e1f20295102b23bbf106d..016348db9f7f582a1f2c4014ea2c16a07a3e8eaa 100644 (file)
  */
 #include "v60_type_r.h"
 
+#include "rgblight.h"
+
+#include <avr/pgmspace.h>
+
+#include "action_layer.h"
+#include "quantum.h"
+
+// if we've got an RGB underglow!
+#ifdef V60_POLESTAR
+#define SOFTPWM_LED_TIMER_TOP F_CPU/(256*64)
+
+extern rgblight_config_t rgblight_config;
+static uint8_t softpwm_buff[3] = {0};
+
+void matrix_init_user(void) {
+       rgb_init();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       uint8_t r = led[0].r, g = led[0].g, b = led[0].b;
+       switch(keycode) {
+               case RGB_RI:
+                       if (record->event.pressed) {
+                               r += RGB_STEP;
+                               if (r < led[0].r) {
+                                       r = 255;
+                               }
+                               rgblight_setrgb(r, g, b);
+                       }
+
+                       return false;
+               case RGB_RD:
+                 if (record->event.pressed) {
+                       r -= RGB_STEP;
+                               if (r > led[0].r) {
+                                       r = 0;
+                               }
+                               rgblight_setrgb(r, g, b);
+                 }
+
+                       return false;
+               case RGB_BI:
+                       if (record->event.pressed) {
+                               b += RGB_STEP;
+                               if (b < led[0].b) {
+                                       b = 255;
+                               }
+                               rgblight_setrgb(r, g, b);
+                       }
+
+                       return false;
+               case RGB_BD:
+                 if (record->event.pressed) {
+                       b -= RGB_STEP;
+                               if (b > led[0].b) {
+                                       b = 0;
+                               }
+                               rgblight_setrgb(r, g, b);
+                 }
+
+                       return false;
+               case RGB_GI:
+                       if (record->event.pressed) {
+                               g += RGB_STEP;
+                               if (g < led[0].g) {
+                                       g = 255;
+                               }
+                               rgblight_setrgb(r, g, b);
+                       }
+
+                       return false;
+               case RGB_GD:
+                 if (record->event.pressed) {
+                       g -= RGB_STEP;
+                               if (g > led[0].g) {
+                                       g = 0;
+                               }
+                               rgblight_setrgb(r, g, b);
+                       }
+
+                       return false;
+       }
+
+       return true;
+}
+
+
+void rgb_timer_init(void) {
+    /* Timer1 setup */
+    /* CTC mode */
+    TCCR1B |= (1<<WGM12);
+    /* Clock selelct: clk/8 */
+    TCCR1B |= (1<<CS10);
+    /* Set TOP value */
+    uint8_t sreg = SREG;
+    cli();
+    OCR1AH = (SOFTPWM_LED_TIMER_TOP >> 8) & 0xff;
+    OCR1AL = SOFTPWM_LED_TIMER_TOP & 0xff;
+    SREG = sreg;
+
+    // Enable the compare match interrupt on timer 1
+    TIMSK1 |= (1<<OCIE1A);
+}
+
+void rgb_init(void) {
+    DDRF  |=  (1<<PF6 | 1<<PF5 | 1<<PF4);
+    PORTF |=  (1<<PF6 | 1<<PF5 | 1<<PF4);
+
+    rgb_timer_init();
+}
+
+void set_rgb_pin_on(uint8_t pin) {
+       PORTF &= ~(1<<pin);
+}
+
+void set_rgb_pin_off(uint8_t pin) {
+       PORTF |= (1<<pin);
+}
+
+void rgblight_set(void) {
+         // xprintf("Setting RGB underglow\n");
+    if (!rgblight_config.enable) {
+          led[0].r = 0;
+          led[0].g = 0;
+          led[0].b = 0;
+          set_rgb_pin_off(RGB_RED_PIN);
+          set_rgb_pin_off(RGB_GREEN_PIN);
+          set_rgb_pin_off(RGB_BLUE_PIN);
+    }
+
+   //  //xprintf("Red: %u, Green: %u, Blue: %u\n", led[0].r, led[0].g, led[0].b);
+}
+
+ISR(TIMER1_COMPA_vect)
+{
+    static uint8_t pwm = 0;
+    pwm++;
+
+    // turn the LEDS on
+    if (pwm == 0) {
+       if (softpwm_buff[0]) {
+               set_rgb_pin_on(RGB_RED_PIN);
+               softpwm_buff[0] = led[0].r;
+       }
+
+       if (softpwm_buff[1]) {
+               set_rgb_pin_on(RGB_GREEN_PIN);
+               softpwm_buff[1] = led[0].g;
+       }
+
+       if (softpwm_buff[2]) {
+               set_rgb_pin_on(RGB_BLUE_PIN);
+               softpwm_buff[2] = led[0].b;
+       }
+    }
+
+    // turn em off
+       if (pwm == softpwm_buff[0]) {
+               set_rgb_pin_off(RGB_RED_PIN);
+               softpwm_buff[0] = led[0].r;
+
+       }
+
+       if (pwm == softpwm_buff[1]) {
+               set_rgb_pin_off(RGB_GREEN_PIN);
+       softpwm_buff[1] = led[0].g;
+       }
+
+       if (pwm == softpwm_buff[2]) {
+               set_rgb_pin_off(RGB_BLUE_PIN);
+       softpwm_buff[2] = led[0].b;
+       }
+}
+#else
+
+void matrix_init_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       return true;
+}
+
+#endif // V60_POLESTAR
+
+// we need these functions for both versions
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
+
+void matrix_scan_user(void) {
+}
+
 void matrix_init_kb(void) {
        // put your keyboard start-up code here
        // runs once when the firmware starts up
@@ -35,9 +229,3 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
 
        return process_record_user(keycode, record);
 }
-
-void led_set_kb(uint8_t usb_led) {
-       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
-       led_set_user(usb_led);
-}
index 77d871e5385415a19fa8d7ad6b9a9bc5faf55232..180294d79e08ac5d7cf7ec29a85397793d961364 100644 (file)
 
 #include "quantum.h"
 
+#include "rgblight.h"
+
+#ifdef V60_POLESTAR
+
+void rgb_init(void);
+void set_rgb_color(uint8_t pin, uint8_t value, uint8_t timer_value);
+
+enum my_keycodes {
+  RGB_RI = SAFE_RANGE,
+  RGB_RD,
+  RGB_GI,
+  RGB_GD,
+  RGB_BI,
+  RGB_BD
+};
+#endif
+
 // This a shortcut to help you visually see your layout.
 // The first section contains all of the arguments
 // The second converts the arguments into a two-dimensional array