1
0
Fork 0

Sol Rev 2 Keyboard (#6389)

* Basic Rev 2 implementation

* Updated LED defines and added Extra encoder support

* Fixed rgb pin assignment

* Physically accurate LED positions

* Single Color Band scrolling left to right effects

* Spirals, Pinwheels, and Documentation....Oh My!

* Spiral effect band thickness adjustments

* Fixing animation spin directions

* Full hand LED positions

* Basic Rev 2 implementation

Updated LED defines and added Extra encoder support

Fixed rgb pin assignment

Physically accurate LED positions

Full hand LED positions

Moving rev2 folder

* RGB Center Point LED position update

* Fixing led config commas

* Fixing led config commas

* fix enter key

* fix enter

* Small changes to default

* update default

* typo fix

* update default

* Fixing defines & led config, turned full hand & extra encoders into rules.mk feature

* Refactored rules.mk to have a post_rules.mk

* Forgot to offset the matrix to led map due to the edge led additions

* Updated LED flags and fixed my keymap

* Update keymap.c

include speed controls for RGB

* Fixing more rules.mk and adding keymap like encoders functionality

* Sol Rev 2 Implementation

* Minor fixes

* Keymap fixes

* Fix Colemak, add lock keys
This commit is contained in:
XScorpion2 2019-07-22 12:43:52 -05:00 committed by MechMerlin
parent 17ff9cf554
commit 40b0ddd425
22 changed files with 683 additions and 388 deletions

View file

@ -168,11 +168,11 @@ static const unsigned char font[] PROGMEM = {
0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, 0x00, 0x00, 0xF0, 0xF4, 0xEC, 0xDE,
0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, 0xDE, 0xBE, 0x3E, 0x3E, 0x3F, 0x3F,
0x00, 0x00, 0x00, 0xE0, 0xEC, 0xDF, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x3F,
0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3E, 0x3E, 0xBE, 0xDE, 0xDE,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xF4, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0x80, 0x80, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x80,
0x80, 0x70, 0x0F, 0x00, 0x00, 0x80, 0x80, 0x70, 0x0F, 0x00, 0x00, 0x80,
0x7F, 0x00, 0x00, 0x7F, 0x80, 0x80, 0x7F, 0x00, 0x00, 0x7F, 0x80, 0x80,
@ -200,11 +200,11 @@ static const unsigned char font[] PROGMEM = {
0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x3F, 0xFF,
0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, 0xFF, 0xFF, 0xFC, 0xE0, 0x80, 0x00,
0x40, 0x7C, 0x3F, 0x3F, 0x23, 0x01,
0x23, 0x3F, 0x37, 0x6C, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF,
0x3F, 0x0F, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -233,8 +233,8 @@ static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}; };

View file

@ -35,16 +35,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COLS 7 #define MATRIX_COLS 7
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 } #define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 }
// Encoder support
#define ENCODERS_PAD_A { D2 }
#define ENCODERS_PAD_B { D6 }
/* Set 0 if debouncing isn't needed */ /* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5 #define DEBOUNCE 5
/* ws2812 RGB LED */
#define RGB_DI_PIN B3
#ifdef IOS_DEVICE_ENABLE #ifdef IOS_DEVICE_ENABLE
#define RGBLIGHT_LIMIT_VAL 40 #define RGBLIGHT_LIMIT_VAL 40
#elif RGBLIGHT_FULL_POWER #elif RGBLIGHT_FULL_POWER

View file

@ -1,38 +1,15 @@
# Build Options # Overridden build options from rev1
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) # RGB Options
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = yes # LED animations
LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master) LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
UNICODE_ENABLE = no # Unicode
SWAP_HANDS_ENABLE = no # Enable one-hand typing
OLED_DRIVER_ENABLE = yes # Enable the OLED Driver (+5000) # Misc
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone) OLED_DRIVER_ENABLE = yes # Enable the OLED Driver
# Do not edit past here # Do not edit past here
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) include keyboards/$(KEYBOARD)/post_rules.mk
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif

View file

@ -1,38 +1,14 @@
# Build Options # Overridden build options from rev1
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) # Debug Options
CONSOLE_ENABLE = yes # Console for debug(+400) CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = yes # LED animations
LED_MIRRORED = yes # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
UNICODE_ENABLE = no # Unicode
SWAP_HANDS_ENABLE = no # Enable one-hand typing
OLED_DRIVER_ENABLE = no # Enable the OLED Driver (+5000)
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Do not edit past here # Do not edit past here
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) include keyboards/$(KEYBOARD)/post_rules.mk
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif

View file

@ -5,13 +5,6 @@
#include "split_util.h" #include "split_util.h"
#endif #endif
extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below. // Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them // Layer names don't all need to be of the same length, obviously, and you can also skip them
@ -23,21 +16,17 @@ enum layer_number {
_ADJ _ADJ
}; };
// Keycode defines for layers
#define QWERTY DF(_QWERTY)
#define COLEMAK DF(_COLEMAK)
#define FN MO(_FN)
#define ADJ MO(_ADJ)
enum custom_keycodes { enum custom_keycodes {
QWERTY = SAFE_RANGE, RGBRST = SAFE_RANGE,
COLEMAK, RGB_MENU
FN,
ADJ,
BACKLIT,
RGBRST
}; };
enum macro_keycodes {
KC_SAMPLEMACRO,
};
#define FN_ESC LT(_FN, KC_ESC) #define FN_ESC LT(_FN, KC_ESC)
#define FN_CAPS LT(_FN, KC_CAPS) #define FN_CAPS LT(_FN, KC_CAPS)
@ -50,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
* |FN(CAPS)| A | S | D | F | G | ( | | ) | H | J | K | L | ; | ' | * |FN(CAPS)| A | S | D | F | G | ( | | ) | H | J | K | L | ; | ' |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* |Shift | Z | X | C | V | B | { | | } | N | M | , | . | / |Shift | * |Shift | Z | X | C | V | B | { | | } | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right | * | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------' * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
@ -74,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
* |FN(CAPS)| A | R | S | T | G | ( | | ) | K | N | E | I | O | ' | * |FN(CAPS)| A | R | S | T | G | ( | | ) | K | N | E | I | O | ' |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* |Shift | Z | X | C | D | V | { | | } | M | H | , | . | / |Shift | * |Shift | Z | X | C | D | V | { | | } | M | H | , | . | / |Enter |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right | * | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------' * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
@ -83,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
[_COLEMAK] = LAYOUT( \ [_COLEMAK] = LAYOUT( \
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, \ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, \
FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_LPRN, KC_RPRN, KC_K, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_LPRN, KC_RPRN, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_LCBR, KC_RCBR, KC_M, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, ADJ, KC_SPC, KC_DEL, KC_ENT, KC_SPC, FN, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, \ KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, ADJ, KC_SPC, KC_DEL, KC_ENT, KC_SPC, FN, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, \
KC_SPC, KC_DEL, KC_ENT, KC_SPC \ KC_SPC, KC_DEL, KC_ENT, KC_SPC \
), ),
@ -107,8 +96,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
[_FN] = LAYOUT( \ [_FN] = LAYOUT( \
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
_______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, \ _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_SLCK, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, \
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, \ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_NLCK, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, \ _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, \
_______, _______, _______, _______ \ _______, _______, _______, _______ \
@ -134,120 +123,184 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
_______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, RGB_HUD, RGB_VAD, RGB_HUI, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, \ _______, RGB_HUD, RGB_VAD, RGB_HUI, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \ _______, RGB_SPD, _______, RGB_SPI, _______, _______, _______, _______, _______, RGB_SPI, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
_______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, \ _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, \
_______, _______, _______, _______ \ _______, _______, _______, _______ \
) )
}; };
// For RGBRST Keycode
#if defined(RGB_MATRIX_ENABLE)
void rgb_matrix_increase_flags(void)
{
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: {
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
case LED_FLAG_UNDERGLOW: {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_disable_noeeprom();
}
break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
rgb_matrix_enable_noeeprom();
}
break;
}
}
void rgb_matrix_decrease_flags(void)
{
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_disable_noeeprom();
}
break;
case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: {
rgb_matrix_set_flags(LED_FLAG_ALL);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
case LED_FLAG_UNDERGLOW: {
rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER);
rgb_matrix_set_color_all(0, 0, 0);
}
break;
default: {
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
rgb_matrix_enable_noeeprom();
}
break;
}
}
#endif
// define variables for reactive RGB #ifdef RGB_OLED_MENU
bool TOG_STATUS = false; uint8_t rgb_encoder_state = 4;
int RGB_current_mode;
typedef void (*rgb_matrix_f)(void);
const rgb_matrix_f rgb_matrix_functions[6][2] = {
{ rgb_matrix_increase_hue, rgb_matrix_decrease_hue },
{ rgb_matrix_increase_sat, rgb_matrix_decrease_sat },
{ rgb_matrix_increase_val, rgb_matrix_decrease_val },
{ rgb_matrix_increase_speed, rgb_matrix_decrease_speed },
{ rgb_matrix_step, rgb_matrix_step_reverse },
{ rgb_matrix_increase_flags, rgb_matrix_decrease_flags }
};
#endif
#ifdef ENCODER_ENABLE #ifdef ENCODER_ENABLE
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (index == 1) { /* Second encoder*/
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
}
#endif
// Setting ADJ layer RGB back to default static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { #define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a)/sizeof(pin_t))
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
#ifdef RGBLIGHT_ENABLE const uint16_t PROGMEM encoders[][NUMBER_OF_ENCODERS * 2][2] = {
//rgblight_mode(RGB_current_mode); [_QWERTY] = ENCODER_LAYOUT( \
KC_VOLU, KC_VOLD,
KC_VOLU, KC_VOLD
),
[_COLEMAK] = ENCODER_LAYOUT( \
_______, _______,
_______, _______
),
[_FN] = ENCODER_LAYOUT( \
_______, _______,
_______, _______
),
[_ADJ] = ENCODER_LAYOUT( \
_______, _______,
_______, _______
)
};
void encoder_update_user(uint8_t index, bool clockwise) {
if (!is_keyboard_master())
return;
#ifdef RGB_OLED_MENU
if (index == RGB_OLED_MENU) {
(*rgb_matrix_functions[rgb_encoder_state][clockwise])();
} else
#endif #endif
layer_on(layer3); {
} else { uint8_t layer = biton32(layer_state);
layer_off(layer3); uint16_t keycode = encoders[layer][index][clockwise];
while (keycode == KC_TRANSPARENT && layer > 0)
{
layer--;
if ((layer_state & (1 << layer)) != 0)
keycode = encoders[layer][index][clockwise];
}
if (keycode != KC_TRANSPARENT)
tap_code16(keycode);
} }
} }
#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
//uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)); static uint16_t reset_timer;
switch (keycode) { switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
case COLEMAK:
if(record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
return false;
break;
case FN:
if (record->event.pressed) {
//not sure how to have keyboard check mode and set it to a variable, so my work around
//uses another variable that would be set to true after the first time a reactive key is pressed.
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
} else {
TOG_STATUS = !TOG_STATUS;
#ifdef RGBLIGHT_ENABLE
//rgblight_mode(15);
#endif
}
layer_on(_FN);
} else {
#ifdef RGBLIGHT_ENABLE
//rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
#endif
layer_off(_FN);
TOG_STATUS = false;
}
return false;
break;
case ADJ:
if (record->event.pressed) {
layer_on(_ADJ);
} else {
layer_off(_ADJ);
}
return false;
break;
//led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
case RGBRST: case RGBRST:
#ifdef RGBLIGHT_ENABLE #if defined(RGBLIGHT_ENABLE)
if (record->event.pressed) { if (record->event.pressed) {
eeconfig_update_rgblight_default(); eeconfig_update_rgblight_default();
rgblight_enable(); rgblight_enable();
RGB_current_mode = rgblight_config.mode; }
#elif defined(RGB_MATRIX_ENABLE)
if (record->event.pressed) {
eeconfig_update_rgb_matrix_default();
} }
#endif #endif
break; return false;
case RESET:
if (record->event.pressed) {
reset_timer = timer_read();
} else {
if (timer_elapsed(reset_timer) >= 500) {
reset_keyboard();
}
}
return false;
#if defined(RGB_MATRIX_ENABLE) && defined(KEYBOARD_rgbkb_sol_rev2)
case RGB_TOG:
if (record->event.pressed) {
rgb_matrix_increase_flags();
}
return false;
#endif
case RGB_MENU:
#ifdef RGB_OLED_MENU
if (record->event.pressed) {
if (get_mods() & MOD_MASK_SHIFT) {
rgb_encoder_state = (rgb_encoder_state - 1);
if (rgb_encoder_state > 5) {
rgb_encoder_state = 5;
}
} else {
rgb_encoder_state = (rgb_encoder_state + 1) % 6;
}
}
#endif
return false;
} }
return true; return true;
} }
void matrix_init_user(void) {
#ifdef RGBLIGHT_ENABLE
RGB_current_mode = rgblight_config.mode;
#endif
}
// OLED Driver Logic // OLED Driver Logic
#ifdef OLED_DRIVER_ENABLE #ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (!has_usb()) if (is_keyboard_master())
return OLED_ROTATION_180; // flip 180 for offhand return OLED_ROTATION_90;
return rotation; return rotation;
} }
@ -255,62 +308,63 @@ static void render_logo(void) {
static const char PROGMEM sol_logo[] = { static const char PROGMEM sol_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0}; 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
};
oled_write_P(sol_logo, false); oled_write_P(sol_logo, false);
} }
//assign the right code to your layers for OLED display
#define L_BASE 0
#define L_FN (1<<_FN)
#define L_ADJ (1<<_ADJ)
#define L_ADJ_TRI (L_ADJ|L_FN)
static void render_status(void) { static void render_status(void) {
// Render to mode icon // Render to mode icon
static const char PROGMEM mode_logo[4][4] = { static const char PROGMEM sol_icon[] = {
{0x95,0x96,0x0a,0}, 0x9b,0x9c,0x9d,0x9e,0x9f,
{0xb5,0xb6,0x0a,0}, 0xbb,0xbc,0xbd,0xbe,0xbf,
{0x97,0x98,0x0a,0}, 0xdb,0xdc,0xdd,0xde,0xdf,0
{0xb7,0xb8,0x0a,0} }; };
oled_write_P(sol_icon, false);
if (keymap_config.swap_lalt_lgui != false) { // Define layers here
oled_write_P(mode_logo[0], false); oled_write_P(PSTR("Layer"), false);
oled_write_P(mode_logo[1], false); switch (biton32(layer_state)) {
} else { case _QWERTY:
oled_write_P(mode_logo[2], false); oled_write_P(PSTR("BASE "), false);
oled_write_P(mode_logo[3], false);
}
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
oled_write_P(PSTR("Layer: "), false);
switch (layer_state) {
case L_BASE:
oled_write_P(PSTR("Default\n"), false);
break; break;
case L_FN: case _COLEMAK:
oled_write_P(PSTR("FN \n"), false); oled_write_P(PSTR("CLMK "), false);
break; break;
case L_ADJ: case _FN:
case L_ADJ_TRI: oled_write_P(PSTR("FN "), false);
oled_write_P(PSTR("ADJ \n"), false); break;
case _ADJ:
oled_write_P(PSTR("ADJ "), false);
break; break;
default: default:
oled_write_P(PSTR("UNDEF \n"), false); oled_write_P(PSTR("UNDEF"), false);
} }
// Host Keyboard LED Status // Host Keyboard LED Status
uint8_t led_usb_state = host_keyboard_leds(); uint8_t led_state = host_keyboard_leds();
oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK) ? PSTR("NUMLOCK ") : PSTR(" "), false); oled_write_P(PSTR("-----"), false);
oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK) ? PSTR("CAPS ") : PSTR(" "), false); oled_write_P(IS_LED_ON(led_state, USB_LED_NUM_LOCK) ? PSTR("NUMLK") : PSTR(" "), false);
oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR("SCLK ") : PSTR(" "), false); oled_write_P(IS_LED_ON(led_state, USB_LED_CAPS_LOCK) ? PSTR("CAPLK") : PSTR(" "), false);
oled_write_P(IS_LED_ON(led_state, USB_LED_SCROLL_LOCK) ? PSTR("SCRLK") : PSTR(" "), false);
#ifdef RGB_OLED_MENU
static char buffer[31] = { 0 };
snprintf(buffer, sizeof(buffer), "h%3d s%3d v%3d s%3d m%3d e%3d ", rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, rgb_matrix_config.speed, rgb_matrix_config.mode, rgb_matrix_get_flags());
buffer[4 + rgb_encoder_state * 5] = '<';
oled_write_P(PSTR("-----"), false);
oled_write(buffer, false);
#endif
} }
void oled_task_user(void) { void oled_task_user(void) {
if (is_keyboard_master()) if (is_keyboard_master()) {
render_status(); render_status();
else } else {
render_logo(); render_logo();
oled_scroll_left();
}
} }
#endif #endif

View file

@ -10,7 +10,7 @@
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
* |FN(CAPS)| A | S | D | F | G | ( | | ) | H | J | K | L | ; | ' | * |FN(CAPS)| A | S | D | F | G | ( | | ) | H | J | K | L | ; | ' |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* |Shift | Z | X | C | V | B | { | | } | N | M | , | . | / |Shift | * |Shift | Z | X | C | V | B | { | | } | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right | * | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------' * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
@ -27,7 +27,7 @@
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------| * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
* |FN(CAPS)| A | R | S | T | G | ( | | ) | K | N | E | I | O | ' | * |FN(CAPS)| A | R | S | T | G | ( | | ) | K | N | E | I | O | ' |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* |Shift | Z | X | C | D | V | { | | } | M | H | , | . | / |Shift | * |Shift | Z | X | C | D | V | { | | } | M | H | , | . | / |Enter |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right | * | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------' * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'

View file

@ -1,38 +1,16 @@
# Build Options # Default keymap does not have any overridden options from the rev1 / rev2 rules.mk files.
# change to "no" to disable the options, or define them in the Makefile in # Example:
# the appropriate keymap folder that will get included automatically # if you wanted to disable EXTRAKEY_ENABLE, you would copy the line from the rev1/rules.mk file
# and paste it in to this file, changing the yes to no. Like so:
# EXTRAKEY_ENABLE = no # Audio control and System control(+450)
# #
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) # To keep things clean and tidy, as well as make upgrades easier, only place overrides from the defaults in this file.
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = yes # LED animations
LED_MIRRORED = yes # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
UNICODE_ENABLE = no # Unicode
SWAP_HANDS_ENABLE = no # Enable one-hand typing
OLED_DRIVER_ENABLE = no # Enable the OLED Driver (+5000)
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Do not edit past here # Do not edit past here
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) include keyboards/$(KEYBOARD)/post_rules.mk
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif

View file

@ -1,38 +1,21 @@
# Build Options # Overridden build options from rev1 & rev2
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450) # Debug Options
CONSOLE_ENABLE = yes # Console for debug(+400) CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# RGB Options
RGBLIGHT_ENABLE = no # Enable global lighting effects. Do not enable with RGB Matrix RGBLIGHT_ENABLE = no # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = no # LED animations RGBLIGHT_ANIMATIONS = no # LED animations
LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master) LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500) RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port # Userspace implements their own LTO
UNICODE_ENABLE = no # Unicode LINK_TIME_OPTIMIZATION_ENABLE = no
SWAP_HANDS_ENABLE = no # Enable one-hand typing
OLED_DRIVER_ENABLE = no # Enable the OLED Driver (+5000)
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Do not edit past here # Do not edit past here
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) include keyboards/$(KEYBOARD)/post_rules.mk
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif

View file

@ -1,37 +1,19 @@
# Build Options # Overridden build options from rev1 & rev2
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically # RGB Options
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable global lighting effects. Do not enable with RGB Matrix RGBLIGHT_ENABLE = no # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = no # LED animations RGBLIGHT_ANIMATIONS = no # LED animations
LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master) LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500) RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500) FULLHAND_ENABLE = yes # Enables the additional 24 Full Hand LEDs
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
UNICODE_ENABLE = no # Unicode # Misc
SWAP_HANDS_ENABLE = no # Enable one-hand typing OLED_DRIVER_ENABLE = yes # Enable the OLED Driver
OLED_DRIVER_ENABLE = yes # Enable the OLED Driver (+5000)
ENCODER_ENABLE = no # Enable rotary encoder (+90)
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Do not edit past here # Do not edit past here
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) include keyboards/$(KEYBOARD)/post_rules.mk
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif

View file

@ -26,6 +26,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT Sol #define PRODUCT Sol
#define DESCRIPTION "An RGB, split, ortho-esque keyboard" #define DESCRIPTION "An RGB, split, ortho-esque keyboard"
/* ws2812 RGB LED */
#define RGB_DI_PIN B3
#ifdef LED_MIRRORED #ifdef LED_MIRRORED
#define RGBLED_NUM 35 #define RGBLED_NUM 35
#else #else
@ -34,3 +37,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DRIVER_LED_TOTAL RGBLED_NUM #define DRIVER_LED_TOTAL RGBLED_NUM
#define RGB_MATRIX_CENTER { 112, 35 } #define RGB_MATRIX_CENTER { 112, 35 }
// Encoder support
#define ENCODERS_PAD_A { D2 }
#define ENCODERS_PAD_B { D6 }

View file

@ -0,0 +1,19 @@
# As long as the users rules.mk has include $(KEYBOARD)/post_rules.mk this will be run after to properly setup any keyboard features and defines
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(RGB_MATRIX_FRAMEBUFFER)), yes)
OPT_DEFS += -DRGB_MATRIX_FRAMEBUFFER_EFFECTS
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif

View file

@ -0,0 +1,28 @@
# RGBKB Sol Rev1 Defaults
# Keycode Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
UNICODE_ENABLE = no # Unicode keycodes
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# Debug Options
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
# RGB Options
RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = yes # LED animations
LED_MIRRORED = yes # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects.
RGB_MATRIX_FRAMEBUFFER_EFFECTS = no # Enable frame buffer effects like the typing heatmap.
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness for RGBLIGHT or RGB_MATRIX. Otherwise, limited to a safe level for a normal USB-A port
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Misc
OLED_DRIVER_ENABLE = no # Enable the OLED Driver
SWAP_HANDS_ENABLE = no # Enable one-hand typing

View file

@ -0,0 +1,61 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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/>.
*/
#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x3060
#define DEVICE_VER 0x0002
#define MANUFACTURER RGBKB
#define PRODUCT Sol
#define DESCRIPTION "An RGB, split, ortho-esque keyboard"
/* ws2812 RGB LED */
#define RGB_DI_PIN B7
#define BACKLIGHT_LEDS 124
#ifdef FULLHAND_ENABLE
#define FULLHAND_LEDS 24
#else
#define FULLHAND_LEDS 0
#endif
// Underglow / DIY Tent Glow are parallel to the top row leds, no separate define
#ifdef LED_MIRRORED
#define RGBLED_NUM ((BACKLIGHT_LEDS + FULLHAND_LEDS) / 2)
#else
#define RGBLED_NUM (BACKLIGHT_LEDS + FULLHAND_LEDS)
#endif
#define DRIVER_LED_TOTAL RGBLED_NUM
#define RGB_MATRIX_CENTER { 112, 37 }
// Encoder support
#ifndef EXTRA_ENCODERS_ENABLE
#define ENCODERS_PAD_A { D2 }
#define ENCODERS_PAD_B { D6 }
#else
#ifdef OLED_DRIVER_ENABLE
#error Extra encoders cannot be enabled at the same time as the OLED Driver as they use the same pins.
#endif
#define ENCODERS_PAD_A { D2, D1, B0 }
#define ENCODERS_PAD_B { D6, B1, D0 }
#endif

View file

@ -0,0 +1,87 @@
{
"keyboard_name": "Sol",
"url": "",
"maintainer": "Legonut",
"width": 17,
"height": 6.5,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L00", "x":0, "y":0, "w":1.5},
{"label":"L01", "x":1.5, "y":0},
{"label":"L02", "x":2.5, "y":0},
{"label":"L03", "x":3.5, "y":0},
{"label":"L04", "x":4.5, "y":0},
{"label":"L05", "x":5.5, "y":0},
{"label":"L06", "x":6.75, "y":0},
{"label":"R06", "x":9.25, "y":0},
{"label":"R00", "x":10.5, "y":0},
{"label":"R01", "x":11.5, "y":0},
{"label":"R02", "x":12.5, "y":0},
{"label":"R03", "x":13.5, "y":0},
{"label":"R04", "x":14.5, "y":0},
{"label":"R05", "x":15.5, "y":0, "w":1.5},
{"label":"L10", "x":0, "y":1, "w":1.5},
{"label":"L11", "x":1.5, "y":1},
{"label":"L12", "x":2.5, "y":1},
{"label":"L13", "x":3.5, "y":1},
{"label":"L14", "x":4.5, "y":1},
{"label":"L15", "x":5.5, "y":1},
{"label":"L16", "x":6.75, "y":1},
{"label":"R16", "x":9.25, "y":1},
{"label":"R10", "x":10.5, "y":1},
{"label":"R11", "x":11.5, "y":1},
{"label":"R12", "x":12.5, "y":1},
{"label":"R13", "x":13.5, "y":1},
{"label":"R14", "x":14.5, "y":1},
{"label":"R15", "x":15.5, "y":1, "w":1.5},
{"label":"L20", "x":0, "y":2, "w":1.5},
{"label":"L21", "x":1.5, "y":2},
{"label":"L22", "x":2.5, "y":2},
{"label":"L23", "x":3.5, "y":2},
{"label":"L24", "x":4.5, "y":2},
{"label":"L25", "x":5.5, "y":2},
{"label":"L26", "x":6.75, "y":2},
{"label":"R26", "x":9.25, "y":2},
{"label":"R20", "x":10.5, "y":2},
{"label":"R21", "x":11.5, "y":2},
{"label":"R22", "x":12.5, "y":2},
{"label":"R23", "x":13.5, "y":2},
{"label":"R24", "x":14.5, "y":2},
{"label":"R25", "x":15.5, "y":2, "w":1.5},
{"label":"L30", "x":0, "y":3, "w":1.5},
{"label":"L31", "x":1.5, "y":3},
{"label":"L32", "x":2.5, "y":3},
{"label":"L33", "x":3.5, "y":3},
{"label":"L34", "x":4.5, "y":3},
{"label":"L35", "x":5.5, "y":3},
{"label":"L36", "x":6.75, "y":3},
{"label":"R36", "x":9.25, "y":3},
{"label":"R30", "x":10.5, "y":3},
{"label":"R31", "x":11.5, "y":3},
{"label":"R32", "x":12.5, "y":3},
{"label":"R33", "x":13.5, "y":3},
{"label":"R34", "x":14.5, "y":3},
{"label":"R35", "x":15.5, "y":3, "w":1.5},
{"label":"L40", "x":0, "y":4, "w":1.5},
{"label":"L41", "x":1.5, "y":4},
{"label":"L42", "x":2.5, "y":4},
{"label":"L43", "x":3.5, "y":4},
{"label":"L44", "x":4.5, "y":4},
{"label":"L45", "x":6, "y":4.5},
{"label":"L46", "x":7, "y":4.5},
{"label":"R46", "x":9, "y":4.5},
{"label":"R40", "x":10, "y":4.5},
{"label":"R41", "x":11.5, "y":4},
{"label":"R42", "x":12.5, "y":4},
{"label":"R43", "x":13.5, "y":4},
{"label":"R44", "x":14.5, "y":4},
{"label":"R45", "x":15.5, "y":4, "w":1.5},
{"label":"L55", "x":6, "y":5.5},
{"label":"L56", "x":7, "y":5.5},
{"label":"R56", "x":9, "y":5.5},
{"label":"R50", "x":10, "y":5.5}
]
}
}
}

View file

@ -0,0 +1,37 @@
# As long as the users rules.mk has include $(KEYBOARD)/post_rules.mk this will be run after to properly setup any keyboard features and defines
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
OPT_DEFS += -DIOS_DEVICE_ENABLE
else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
OPT_DEFS += -DRGBLIGHT_FULL_POWER
endif
ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
endif
ifeq ($(strip $(RGB_MATRIX_FRAMEBUFFER)), yes)
OPT_DEFS += -DRGB_MATRIX_FRAMEBUFFER_EFFECTS
endif
ifeq ($(strip $(LED_MIRRORED)), yes)
OPT_DEFS += -DLED_MIRRORED
endif
ifeq ($(strip $(FULLHAND_ENABLE)), yes)
OPT_DEFS += -DFULLHAND_ENABLE
endif
ifeq ($(strip $(EXTRA_ENCODERS_ENABLE)), yes)
OPT_DEFS += -DEXTRA_ENCODERS_ENABLE
endif
ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
ifeq ($(strip $(ENCODER_ENABLE)), yes)
ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
ifneq ($(strip $(RGB_OLED_MENU)), no)
OPT_DEFS += -DRGB_OLED_MENU=$(strip $(RGB_OLED_MENU))
endif
endif
endif
endif

View file

@ -0,0 +1,89 @@
#include "quantum.h"
#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = { {
{ 0, 1, 2, 3, 4, 5, 6 },
{ 7, 8, 9, 10, 11, 12, 13 },
{ 14, 15, 16, 17, 18, 19, 20 },
{ 21, 22, 23, 24, 25, 26, 27 },
{ 28, 29, 30, 31, 32, 33, 34 },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 33, 34 },
// Need to shift Right hand indexes if full hand LEDs are enabled
#define LO (FULLHAND_LEDS / 2)
{ LO+62, LO+63, LO+64, LO+65, LO+66, LO+67, LO+68 },
{ LO+69, LO+70, LO+71, LO+72, LO+73, LO+74, LO+75 },
{ LO+76, LO+77, LO+78, LO+79, LO+80, LO+81, LO+82 },
{ LO+83, LO+84, LO+85, LO+86, LO+87, LO+88, LO+89 },
{ LO+90, LO+91, LO+92, LO+93, LO+94, LO+95, LO+95 },
{ NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, LO+95, LO+95 }
#undef LO
}, {
// Left Hand Mapped Left to Right
{ 11, 14 }, { 28, 14 }, { 42, 14 }, { 56, 14 }, { 70, 14 }, { 84, 14 }, { 102, 14 },
{ 11, 28 }, { 28, 28 }, { 42, 28 }, { 56, 28 }, { 70, 28 }, { 84, 28 }, { 98, 25 },
{ 11, 42 }, { 28, 42 }, { 42, 42 }, { 56, 42 }, { 70, 42 }, { 84, 42 }, { 98, 39 },
{ 11, 56 }, { 28, 56 }, { 42, 56 }, { 56, 56 }, { 70, 56 }, { 84, 56 }, { 98, 53 },
{ 11, 70 }, { 28, 70 }, { 42, 70 }, { 56, 70 }, { 70, 70 }, { 83, 87 }, { 93, 97 },
// Edge Light Left
{ 0, 66 }, { 0, 52 }, { 0, 38 }, { 0, 24 }, { 0, 10 }, { 31, 0 }, { 38, 0 },
{ 46, 0 }, { 54, 0 }, { 61, 0 }, { 69, 0 }, { 76, 0 }, { 84, 0 }, { 109, 11 },
{ 109, 24 }, { 109, 39 }, { 109, 53 }, { 110, 73 }, { 112, 85 }, { 106, 95 }, { 95, 98 },
{ 83, 91 }, { 71, 84 }, { 58, 77 }, { 42, 74 }, { 28, 74 }, { 14, 74 },
// Full Hand Left
#ifdef FULLHAND_ENABLE
{ 2, 88 }, { 2, 103 }, { 2, 117 }, { 2, 132 }, { 10, 145 }, { 25, 145 }, { 39, 145 },
{ 54, 145 }, { 69, 145 }, { 79, 136 }, { 87, 124 }, { 94, 111 },
#endif
// Left Hand Mapped Right to Left
{ 213, 14 }, { 196, 14 }, { 182, 14 }, { 168, 14 }, { 154, 14 }, { 140, 14 }, { 122, 14 },
{ 213, 28 }, { 196, 28 }, { 182, 28 }, { 168, 28 }, { 154, 28 }, { 140, 28 }, { 126, 25 },
{ 213, 42 }, { 196, 42 }, { 182, 42 }, { 168, 42 }, { 154, 42 }, { 140, 42 }, { 126, 39 },
{ 213, 56 }, { 196, 56 }, { 182, 56 }, { 168, 56 }, { 154, 56 }, { 140, 56 }, { 126, 53 },
{ 213, 70 }, { 196, 70 }, { 182, 70 }, { 168, 70 }, { 154, 70 }, { 141, 87 }, { 131, 97 },
// Edge Light Right
{ 224, 66 }, { 224, 52 }, { 224, 38 }, { 224, 24 }, { 224, 10 }, { 193, 0 }, { 186, 0 },
{ 178, 0 }, { 170, 0 }, { 163, 0 }, { 155, 0 }, { 148, 0 }, { 140, 0 }, { 115, 11 },
{ 115, 24 }, { 115, 39 }, { 115, 53 }, { 114, 73 }, { 112, 85 }, { 118, 95 }, { 129, 98 },
{ 141, 91 }, { 153, 84 }, { 166, 77 }, { 182, 74 }, { 196, 74 }, { 210, 74 }
// Full Hand Right
#ifdef FULLHAND_ENABLE
,{ 222, 88 }, { 222, 103 }, { 222, 117 }, { 222, 132 }, { 214, 145 }, { 199, 145 }, { 185, 145 },
{ 170, 145 }, { 155, 145 }, { 145, 136 }, { 137, 124 }, { 130, 111 }
#endif
}, {
// Left Hand Mapped Left to Right
1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 1,
1, 1, 1, 1, 1, 1, 1,
// Edge Light Left
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2,
// Full Hand Left
#ifdef FULLHAND_ENABLE
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2,
#endif
// Left Hand Mapped Right to Left
1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 1,
1, 1, 1, 1, 1, 1, 1,
// Edge Light Right
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2
// Full Hand Right
#ifdef FULLHAND_ENABLE
,2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2
#endif
} };
#endif

View file

@ -0,0 +1 @@
#pragma once

View file

@ -0,0 +1,35 @@
# RGBKB Sol Rev2 Defaults
# Keycode Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
UNICODE_ENABLE = no # Unicode keycodes
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# Debug Options
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
# RGB Options
RGBLIGHT_ENABLE = no # Enable global lighting effects. Do not enable with RGB Matrix
RGBLIGHT_ANIMATIONS = no # LED animations
LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight
RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects.
RGB_MATRIX_FRAMEBUFFER_EFFECTS = no # Enable frame buffer effects like the typing heatmap.
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness for RGBLIGHT or RGB_MATRIX. Otherwise, limited to a safe level for a normal USB-A port
FULLHAND_ENABLE = no # Enables the additional 24 Full Hand LEDs
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Misc
OLED_DRIVER_ENABLE = no # Enable the OLED Driver
EXTRA_ENCODERS_ENABLE = no # Enables 3 encoders per side (up from 1, not compatible with OLED_DRIVER_ENABLE)
SWAP_HANDS_ENABLE = no # Enable one-hand typing
LINK_TIME_OPTIMIZATION_ENABLE = yes # Enable Link Time Optimizations greatly reducing firmware size by disabling the old Macros and Functions features
# Special RGB Matrix, OLED, & Encoder Control Menu!
RGB_OLED_MENU = no # Enabled by setting this to the encoder index (0-5) you wish to use to control the menu.
# Use the RGB_MENU keycode in the keymap for the encoder to advance the menu to the next option.

View file

@ -2,41 +2,15 @@
MCU = atmega32u4 MCU = atmega32u4
# Processor frequency. # Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000 F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation). # Target architecture (see library "Board Types" documentation).
ARCH = AVR8 ARCH = AVR8
# Input clock frequency. # Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU) F_USB = $(F_CPU)
# Bootloader # Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = qmk-dfu BOOTLOADER = qmk-dfu
# Interrupt driven control endpoint task(+60) # Interrupt driven control endpoint task(+60)
@ -48,18 +22,4 @@ OPT_DEFS += -DOLED_FONT_H=\"common/glcdfont.c\"
SPLIT_KEYBOARD = yes SPLIT_KEYBOARD = yes
ENCODER_ENABLE = yes ENCODER_ENABLE = yes
# Build Options DEFAULT_FOLDER = rgbkb/sol/rev2
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
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 = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
DEFAULT_FOLDER = rgbkb/sol/rev1

View file

@ -3,6 +3,8 @@
#include "quantum.h" #include "quantum.h"
#ifdef KEYBOARD_rgbkb_sol_rev1 #ifdef KEYBOARD_rgbkb_sol_rev1
#include "rev1.h" #include "rev1.h"
#else
#include "rev2.h"
#endif #endif
@ -29,6 +31,32 @@
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, R50, R56 } \ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, R50, R56 } \
} }
#define ENCODER_LAYOUT( \
E10, E11, \
E20, E21 \
) \
{ \
{ E10, E11 }, \
{ E20, E21 } \
}
#define EXTRA_ENCODER_LAYOUT( \
E10, E11, \
E20, E21, \
E30, E31, \
E40, E41, \
E50, E51, \
E60, E61 \
) \
{ \
{ E10, E11 }, \
{ E20, E21 }, \
{ E30, E31 }, \
{ E40, E41 }, \
{ E50, E51 }, \
{ E60, E61 } \
}
#define KC________ KC_TRNS #define KC________ KC_TRNS
#define KC_RGB_MOD RGB_MOD #define KC_RGB_MOD RGB_MOD
#define KC_FN FN #define KC_FN FN

View file

@ -4,7 +4,7 @@
const uint16_t PROGMEM encoders[][2] = { const uint16_t PROGMEM encoders[][2] = {
{ KC_PGUP, KC_PGDN }, { KC_PGUP, KC_PGDN },
{ KC_DOWN, KC_UP } { KC_DOWN, KC_UP }
} };
void encoder_update_user(uint8_t index, bool clockwise) void encoder_update_user(uint8_t index, bool clockwise)
{ {