[Keyboard] Add splitkb.com's Aurora Helix (#21871)

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
harveysch 2023-09-15 20:34:21 +02:00 committed by GitHub
parent 49f1cbd40e
commit e7ae5ec07c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 1209 additions and 0 deletions

View file

@ -0,0 +1,21 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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
#ifdef OLED_ENABLE
# define OLED_FONT_H "keyboards/splitkb/aurora/helix/glcdfont.c"
#endif

View file

@ -0,0 +1,250 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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 "progmem.h"
// NOTE: This file is a copy of `crkbd/soundmonster/glcdfont.c`
// Corne 8x6 font with QMK Firmware Logo
// Online editor: https://helixfonteditor.netlify.com/
// See also: https://github.com/soundmonster/glcdfont_converter
const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8,
0xF8, 0x18, 0x00, 0xC0, 0xF0, 0xFC,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2,
0x42, 0x42, 0x42, 0xE2, 0x52, 0x22,
0x22, 0x22, 0x42, 0x82, 0x02, 0x02,
0x22, 0x22, 0x02, 0x04, 0xF8, 0x00,
0x00, 0xF8, 0x04, 0x02, 0x02, 0x82,
0x42, 0x22, 0x42, 0x82, 0x02, 0x02,
0x02, 0x82, 0x42, 0x22, 0x12, 0x22,
0x42, 0x82, 0x02, 0x04, 0xF8, 0x00,
0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E,
0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE,
0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE,
0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00,
0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E,
0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0,
0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0,
0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0,
0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0,
0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80,
0x00, 0xF8, 0xFC, 0xFE, 0xFF, 0xE0,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x07, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47,
0x42, 0x42, 0x42, 0x47, 0x4A, 0x44,
0x40, 0x40, 0x40, 0x40, 0x41, 0x42,
0x44, 0x44, 0x40, 0x20, 0x1F, 0x00,
0x00, 0x1F, 0x20, 0x40, 0x41, 0x40,
0x40, 0x40, 0x40, 0x40, 0x41, 0x40,
0x41, 0x41, 0x4F, 0x48, 0x48, 0x48,
0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00,
0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78,
0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B,
0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D,
0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00,
0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F,
0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E,
0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C,
0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88,
0x88, 0x88, 0x55, 0x55, 0x23, 0x23,
0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47,
0x23, 0x23, 0x55, 0x55, 0x88, 0x88,
0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2,
0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4,
0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88,
0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6,
0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6,
0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88,
0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x3F,
0x3F, 0x3F, 0x1F, 0x1F, 0x3F, 0x3F,
0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F,
0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7C,
0x78, 0x78, 0x38, 0x1C, 0x0F, 0x00,
0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04,
0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20,
0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04,
0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20,
0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC,
0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F,
0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC,
0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F,
0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE,
0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00,
0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77,
0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x03, 0x03,
0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07,
0x03, 0x03, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x03, 0x02,
0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06,
0x03, 0x02, 0x01, 0x01, 0x00, 0x00
};

View file

@ -0,0 +1,304 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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 "quantum.h"
// The first four layers gets a name for readability, which is then used in the OLED below.
enum layers {
_DEFAULT,
_LOWER,
_RAISE,
_ADJUST
};
#ifdef OLED_ENABLE
// NOTE: Most of the OLED code was originally written by Soundmonster for the Corne,
// and has been copied directly from `crkbd/soundmonster/keymap.c`
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
return OLED_ROTATION_270;
}
void render_mod_status_gui_alt(uint8_t modifiers) {
static const char PROGMEM gui_off_1[] = {0x85, 0x86, 0};
static const char PROGMEM gui_off_2[] = {0xa5, 0xa6, 0};
static const char PROGMEM gui_on_1[] = {0x8d, 0x8e, 0};
static const char PROGMEM gui_on_2[] = {0xad, 0xae, 0};
static const char PROGMEM alt_off_1[] = {0x87, 0x88, 0};
static const char PROGMEM alt_off_2[] = {0xa7, 0xa8, 0};
static const char PROGMEM alt_on_1[] = {0x8f, 0x90, 0};
static const char PROGMEM alt_on_2[] = {0xaf, 0xb0, 0};
// fillers between the modifier icons bleed into the icon frames
static const char PROGMEM off_off_1[] = {0xc5, 0};
static const char PROGMEM off_off_2[] = {0xc6, 0};
static const char PROGMEM on_off_1[] = {0xc7, 0};
static const char PROGMEM on_off_2[] = {0xc8, 0};
static const char PROGMEM off_on_1[] = {0xc9, 0};
static const char PROGMEM off_on_2[] = {0xca, 0};
static const char PROGMEM on_on_1[] = {0xcb, 0};
static const char PROGMEM on_on_2[] = {0xcc, 0};
if(modifiers & MOD_MASK_GUI) {
oled_write_P(gui_on_1, false);
} else {
oled_write_P(gui_off_1, false);
}
if ((modifiers & MOD_MASK_GUI) && (modifiers & MOD_MASK_ALT)) {
oled_write_P(on_on_1, false);
} else if(modifiers & MOD_MASK_GUI) {
oled_write_P(on_off_1, false);
} else if(modifiers & MOD_MASK_ALT) {
oled_write_P(off_on_1, false);
} else {
oled_write_P(off_off_1, false);
}
if(modifiers & MOD_MASK_ALT) {
oled_write_P(alt_on_1, false);
} else {
oled_write_P(alt_off_1, false);
}
if(modifiers & MOD_MASK_GUI) {
oled_write_P(gui_on_2, false);
} else {
oled_write_P(gui_off_2, false);
}
if (modifiers & MOD_MASK_GUI & MOD_MASK_ALT) {
oled_write_P(on_on_2, false);
} else if(modifiers & MOD_MASK_GUI) {
oled_write_P(on_off_2, false);
} else if(modifiers & MOD_MASK_ALT) {
oled_write_P(off_on_2, false);
} else {
oled_write_P(off_off_2, false);
}
if(modifiers & MOD_MASK_ALT) {
oled_write_P(alt_on_2, false);
} else {
oled_write_P(alt_off_2, false);
}
}
void render_mod_status_ctrl_shift(uint8_t modifiers) {
static const char PROGMEM ctrl_off_1[] = {0x89, 0x8a, 0};
static const char PROGMEM ctrl_off_2[] = {0xa9, 0xaa, 0};
static const char PROGMEM ctrl_on_1[] = {0x91, 0x92, 0};
static const char PROGMEM ctrl_on_2[] = {0xb1, 0xb2, 0};
static const char PROGMEM shift_off_1[] = {0x8b, 0x8c, 0};
static const char PROGMEM shift_off_2[] = {0xab, 0xac, 0};
static const char PROGMEM shift_on_1[] = {0xcd, 0xce, 0};
static const char PROGMEM shift_on_2[] = {0xcf, 0xd0, 0};
// fillers between the modifier icons bleed into the icon frames
static const char PROGMEM off_off_1[] = {0xc5, 0};
static const char PROGMEM off_off_2[] = {0xc6, 0};
static const char PROGMEM on_off_1[] = {0xc7, 0};
static const char PROGMEM on_off_2[] = {0xc8, 0};
static const char PROGMEM off_on_1[] = {0xc9, 0};
static const char PROGMEM off_on_2[] = {0xca, 0};
static const char PROGMEM on_on_1[] = {0xcb, 0};
static const char PROGMEM on_on_2[] = {0xcc, 0};
if(modifiers & MOD_MASK_CTRL) {
oled_write_P(ctrl_on_1, false);
} else {
oled_write_P(ctrl_off_1, false);
}
if ((modifiers & MOD_MASK_CTRL) && (modifiers & MOD_MASK_SHIFT)) {
oled_write_P(on_on_1, false);
} else if(modifiers & MOD_MASK_CTRL) {
oled_write_P(on_off_1, false);
} else if(modifiers & MOD_MASK_SHIFT) {
oled_write_P(off_on_1, false);
} else {
oled_write_P(off_off_1, false);
}
if(modifiers & MOD_MASK_SHIFT) {
oled_write_P(shift_on_1, false);
} else {
oled_write_P(shift_off_1, false);
}
if(modifiers & MOD_MASK_CTRL) {
oled_write_P(ctrl_on_2, false);
} else {
oled_write_P(ctrl_off_2, false);
}
if (modifiers & MOD_MASK_CTRL & MOD_MASK_SHIFT) {
oled_write_P(on_on_2, false);
} else if(modifiers & MOD_MASK_CTRL) {
oled_write_P(on_off_2, false);
} else if(modifiers & MOD_MASK_SHIFT) {
oled_write_P(off_on_2, false);
} else {
oled_write_P(off_off_2, false);
}
if(modifiers & MOD_MASK_SHIFT) {
oled_write_P(shift_on_2, false);
} else {
oled_write_P(shift_off_2, false);
}
}
void render_logo(void) {
static const char PROGMEM aurora_logo[] = {
0x00, 0x00, 0x00, 0xe0, 0x00, 0xf8, 0xc0, 0xf8, 0xe0, 0xc0, 0xfc, 0x00, 0x7e, 0x18, 0x00, 0x80,
0x00, 0x02, 0x80, 0xf0, 0x00, 0xc0, 0x80, 0xf8, 0xc0, 0xe0, 0x70, 0x60, 0x3c, 0x38, 0x3c, 0x1c,
0x00, 0x3f, 0x0c, 0x0f, 0x1f, 0x03, 0x07, 0x01, 0xc3, 0x00, 0xe0, 0x80, 0x00, 0xe0, 0x80, 0xf8,
0x80, 0xc0, 0xf7, 0xc7, 0x6f, 0x7b, 0x39, 0x30, 0x00, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0xc2, 0xe0,
0x00, 0x40, 0x38, 0x30, 0x38, 0x1e, 0x18, 0x1e, 0x0f, 0x0c, 0x07, 0x07, 0x07, 0x03, 0x03, 0x21,
0x21, 0x31, 0x30, 0x18, 0x18, 0x1c, 0x08, 0x0c, 0x0e, 0x07, 0x06, 0x07, 0x03, 0xc3, 0x03, 0x01,
0x4c, 0xcc, 0xc2, 0xc2, 0x41, 0x49, 0x09, 0x2b, 0x2a, 0x6a, 0x6e, 0x24, 0x24, 0x04, 0x92, 0x92,
0xb1, 0xf1, 0xf1, 0xf2, 0xe6, 0xa4, 0xa4, 0x04, 0x04, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28
};
oled_write_raw_P(aurora_logo, sizeof(aurora_logo));
oled_set_cursor(0, 4);
}
void render_logo_text(void) {
oled_write_P(PSTR("helix"), false);
}
void render_kb_LED_state(void) {
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_P(led_state.num_lock ? PSTR("N ") : PSTR(" "), false);
oled_write_P(led_state.caps_lock ? PSTR("C ") : PSTR(" "), false);
oled_write_P(led_state.scroll_lock ? PSTR("S ") : PSTR(" "), false);
}
void render_layer_state(void) {
static const char PROGMEM default_layer[] = {
0x20, 0x94, 0x95, 0x96, 0x20,
0x20, 0xb4, 0xb5, 0xb6, 0x20,
0x20, 0xd4, 0xd5, 0xd6, 0x20, 0};
static const char PROGMEM raise_layer[] = {
0x20, 0x97, 0x98, 0x99, 0x20,
0x20, 0xb7, 0xb8, 0xb9, 0x20,
0x20, 0xd7, 0xd8, 0xd9, 0x20, 0};
static const char PROGMEM lower_layer[] = {
0x20, 0x9a, 0x9b, 0x9c, 0x20,
0x20, 0xba, 0xbb, 0xbc, 0x20,
0x20, 0xda, 0xdb, 0xdc, 0x20, 0};
static const char PROGMEM adjust_layer[] = {
0x20, 0x9d, 0x9e, 0x9f, 0x20,
0x20, 0xbd, 0xbe, 0xbf, 0x20,
0x20, 0xdd, 0xde, 0xdf, 0x20, 0};
if(layer_state_is(_LOWER)) {
oled_write_P(lower_layer, false);
} else if(layer_state_is(_RAISE)) {
oled_write_P(raise_layer, false);
} else if(layer_state_is(_DEFAULT)) {
oled_write_P(default_layer, false);
} else {
oled_write_P(adjust_layer, false);
}
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
if (is_keyboard_master()) {
// Renders the current keyboard state (layers and mods)
render_logo();
render_logo_text();
oled_advance_page(false);
render_layer_state();
oled_advance_page(false);
render_mod_status_gui_alt(get_mods()|get_oneshot_mods());
render_mod_status_ctrl_shift(get_mods()|get_oneshot_mods());
render_kb_LED_state();
} else {
// clang-format off
static const char PROGMEM aurora_art[] = {
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40,
0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x80,
0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x80, 0x00, 0xf0, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x81, 0x00, 0xc0, 0x00, 0xfe, 0x00, 0xfc, 0x00, 0xff, 0x20, 0xff, 0xf0, 0x0f, 0xf0, 0x00, 0xff,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0xf8, 0x00, 0x00, 0xf8,
0xff, 0x10, 0xff, 0x84, 0xff, 0x60, 0xff, 0x36, 0xff, 0x0f, 0xff, 0x3f, 0x00, 0x5f, 0x00, 0x05,
0x80, 0x00, 0x80, 0x00, 0xc0, 0x38, 0x00, 0xec, 0xf0, 0x00, 0xfb, 0x80, 0xff, 0xf0, 0xff, 0xef,
0xff, 0xe8, 0xff, 0x03, 0xff, 0x0c, 0xff, 0x00, 0xff, 0x00, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x80,
0xff, 0x20, 0xff, 0xd0, 0xff, 0xe0, 0xfe, 0xf8, 0xff, 0xfc, 0xff, 0xff, 0x0f, 0xff, 0x01, 0x3f,
0xff, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x03, 0x00, 0xfe, 0x80, 0xfe, 0x00, 0xc0, 0xff, 0xc4, 0xfb,
0xff, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x07, 0xff, 0x03, 0x3f, 0x00, 0x0f, 0xc0, 0x00,
0x00, 0x00, 0xb8, 0x00, 0xff, 0x40, 0xbe, 0xf0, 0xff, 0xf1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0x1f, 0xff, 0x67, 0x00, 0xef, 0x00, 0x1f, 0x00, 0x00, 0x07, 0x00, 0x00, 0xe0, 0x00, 0xff, 0xf0,
0xff, 0x88, 0xff, 0xc4, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x7f, 0x0f, 0xff,
0x00, 0x07, 0xfe, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xc0, 0x3f, 0xf8, 0xe7, 0xff,
0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0x1f, 0x3f, 0x01, 0xff, 0x0b, 0x00, 0xff, 0x00, 0x00, 0x05,
0x00, 0x00, 0x00, 0xe0, 0x00, 0xf8, 0x60, 0x80, 0xfe, 0xe3, 0xfc, 0xff, 0x1e, 0xff, 0xff, 0x23,
0xff, 0x09, 0xff, 0x20, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x00, 0xc0, 0x00, 0xfc,
0xe0, 0xfc, 0xf0, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0x0f, 0xff, 0x07, 0x1f, 0x00, 0x01, 0x0f, 0x00,
0x0f, 0x00, 0x81, 0x70, 0x0c, 0xf0, 0x80, 0x00, 0x00, 0xe4, 0xf8, 0xe6, 0x70, 0x3f, 0xcf, 0xff,
0x1f, 0xff, 0x48, 0xff, 0x0f, 0x00, 0x07, 0x00, 0x00, 0x43, 0x60, 0xf8, 0xf0, 0xfe, 0x38, 0xfe,
0x00, 0xfc, 0x03, 0x00, 0xc8, 0x72, 0xcf, 0xfc, 0x00, 0x03, 0x0f, 0x01, 0xe0, 0x1c, 0xe0, 0x03,
0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x06, 0xf9, 0x00, 0x03, 0x00, 0x07,
0xff, 0x00, 0x10, 0x12, 0xc9, 0xf0, 0xcf, 0xb4, 0x7f, 0x80, 0xe0, 0x1e, 0x01, 0x40, 0x65, 0x5e,
0xe0, 0x00, 0x00, 0xf0, 0x0c, 0xf0, 0x00, 0x80, 0x7e, 0x01, 0x80, 0x93, 0xfc, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x89, 0x18, 0x2c, 0x46, 0x00, 0x07, 0x21, 0x10, 0x10, 0x80, 0x09, 0x13,
0x31, 0xbf, 0xff, 0x00, 0x08, 0x1a, 0xf7, 0x0f, 0x00, 0x00, 0x44, 0x45, 0x34, 0xbf, 0xb8, 0x00,
0x10, 0xf0, 0x08, 0xf4, 0x18, 0x11, 0xfc, 0x18, 0xfb, 0x0e, 0x10, 0xf8, 0x04, 0xf8, 0x10, 0x20,
0x18, 0x09, 0xff, 0x0c, 0xea, 0x1f, 0x28, 0x60, 0x30, 0xf8, 0x20, 0xc0, 0x42, 0x33, 0x21, 0x00
};
// clang-format on
oled_write_raw_P(aurora_art, sizeof(aurora_art));
}
return false;
}
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
// 0 is left-half encoder,
// 1 is right-half encoder
if (index == 0) {
// Volume control
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
} else if (index == 1) {
// Page up/Page down
if (clockwise) {
tap_code(KC_PGDN);
} else {
tap_code(KC_PGUP);
}
}
return true;
}
#endif

View file

@ -0,0 +1,16 @@
{
"manufacturer": "splitkb.com",
"maintainer": "splitkb",
"build": {
"lto": true
},
"development_board": "elite_c",
"split": {
"enabled": true
},
"url": "https://splitkb.com",
"usb": {
"device_version": "1.0.0",
"vid": "0x8D1D"
}
}

View file

@ -0,0 +1,19 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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
#define RGBLIGHT_EFFECT_BREATHING

View file

@ -0,0 +1,68 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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 QMK_KEYBOARD_H
enum layers {
_DEFAULT = 0,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_DEFAULT] = LAYOUT(
KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, S(KC_F), S(KC_E), S(KC_D), S(KC_C), S(KC_B), S(KC_A),
KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, S(KC_L), S(KC_K), S(KC_J), S(KC_I), S(KC_H), S(KC_G),
KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, S(KC_R), S(KC_Q), S(KC_P), S(KC_O), S(KC_N), S(KC_M),
KC_S, KC_T, KC_U, KC_V, KC_W, KC_X, KC_Y, S(KC_Y), S(KC_X), S(KC_W), S(KC_V), S(KC_U), S(KC_T), S(KC_S),
KC_Z, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, S(KC_6), S(KC_5), S(KC_4), S(KC_3), S(KC_2), S(KC_1), S(KC_Z)
)
};
#ifdef RGBLIGHT_ENABLE
void keyboard_post_init_user(void) {
rgblight_enable_noeeprom(); // enables RGB, without saving settings
rgblight_sethsv_noeeprom(HSV_RED); // sets the color to red without saving
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // sets mode to Fast breathing without saving
}
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
// 0 is left-half encoder
// 1 is right-half encoder
if (index == 0) {
tap_code(KC_0);
} else if (index == 1) {
tap_code(KC_1);
}
if (clockwise) {
tap_code16(KC_PLUS);
} else {
tap_code(KC_MINUS);
}
return false;
}
#endif
#ifdef OLED_ENABLE
bool oled_task_user(void) {
// A 128x32 OLED rotated 90 degrees is 5 characters wide and 16 characters tall
// This example string should fill that neatly
oled_write_P(PSTR("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789!@#$%^&*()[]{}-=_+?"), false);
return false;
}
#endif

View file

@ -0,0 +1,24 @@
# Aurora Helix's Debug Keymap
To make debugging your build as easy as possible, we have provided a special debugging keymap. It is not intended to actually type on, it is just here to make sure that your hardware is working correctly.
## Keys
![Keys](https://raw.githubusercontent.com/splitkb/qmk_firmware/assets/aurora/keymaps/debug/keys.png)
The left side uses lowercase letters, the right side uses uppercase ones.
## Encoders
Encoders output a number of 0 or 1, depending on the installed position.
These correspond to the index used for custom encoder code: the left half uses index 0, the right half uses index 1.
The number is followed by either a `+` or a `-`, depending on the direction turned.
## LEDs
Both underglow and per-key RGB should be fading between red and off.
## OLEDs
Both the primary and secondary side should be filled with characters.

View file

@ -0,0 +1,8 @@
# NOTE: These are already enabled by default at the revision level
#ENCODER_ENABLE = yes
#OLED_ENABLE = yes
# RGB Matrix is enabled at the revision level,
# while we use the regular RGB underglow for testing
RGB_MATRIX_ENABLE = no
RGBLIGHT_ENABLE = yes

View file

@ -0,0 +1,24 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_KEYPRESSES
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT

View file

@ -0,0 +1,52 @@
{
"config": {
"features": {
"oled": true,
"rgb_matrix": true,
"rgblight": false
},
"encoder": {
"enabled": true
},
"rgblight": {
"hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true
}
},
"keyboard": "splitkb/aurora/helix",
"keymap": "default",
"layers": [
[
"KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_DEL",
"KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC",
"KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT",
"KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_LBRC", "KC_RBRC", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_ENT" ,
"MO(3)", "KC_ESC", "KC_LALT", "KC_LGUI", "LALT(KC_GRV)", "MO(1)", "KC_SPC", "KC_SPC", "MO(2)", "LALT(KC_GRV)", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT"
],
[
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______",
"KC_TILD", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "_______",
"_______", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_UNDS", "KC_PLUS", "KC_LCBR", "KC_RCBR", "KC_PIPE",
"KC_CAPS", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_LPRN", "KC_RPRN", "KC_F12", "_______", "_______", "KC_HOME", "KC_END", "_______",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "MO(3)", "_______", "KC_MNXT", "KC_VOLD", "KC_VOLU", "KC_MPLY"
],
[
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "KC_BSPC",
"KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_DEL",
"_______", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_MINS", "KC_EQL", "KC_LBRC", "KC_RBRC", "KC_BSLS",
"KC_CAPS", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "_______", "_______", "KC_F12", "_______", "_______", "KC_PGDN", "KC_PGUP", "_______",
"_______", "_______", "_______", "_______", "_______", "MO(3)", "_______", "_______", "_______", "_______", "KC_MNXT", "KC_VOLD", "KC_VOLU", "KC_MPLY"
],
[
"KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12",
"_______", "QK_BOOT", "_______", "EE_CLR", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "KC_DEL",
"_______", "_______", "_______", "_______", "_______", "AG_NORM", "AG_SWAP", "_______", "_______", "_______", "_______", "_______",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "RGB_TOG", "RGB_HUI", "RGB_SAI", "RGB_VAI",
"_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "RGB_MOD", "RGB_HUD", "RGB_SAD", "RGB_VAD"
]
],
"layout": "LAYOUT",
"version": 1
}

View file

@ -0,0 +1,88 @@
# Aurora Helix's Default Keymap
_This keymap is a copy of the [Helix default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/helix/rev3_5rows/keymaps/default), with slight modifications._
A simple default keymap for the Aurora Helix
=============================================
Keymaps in general are quite personal, so it is difficult to come up with a default that will suit every user. We hope this keymap serves as a good starting point for your own - although it should be fairly usable out-of-the-box.
What do all these layers do?
----------------------------
### Layer 0: Base layer
![Layer 0](https://i.imgur.com/2E4hHxw.png)
This is where your basic letters live.
The homing thumb fingers are used to access the different layers.
* The homing second to left thumb finger gives access to the Symbols (or lower) layer
* The homing second to right thumb finger gives access to the Navigation (or raise) layer
* Pressing both homing thumb fingers gives access to the Adjust layer
### Layer 1: Lower
![Layer 1](https://i.imgur.com/p68qrBz.png)
The Lower layer gives access to the F keys, symbols and media control.
### Layer 2: Raise
![Layer 2](https://i.imgur.com/7T4KSW6.png)
The Raise layer gives access to additional numbers keys, F keys.
### Layer 3: Adjust
![Layer 3](https://i.imgur.com/YbbwHSD.png)
The Adjust layer exposes RGB adjustment keys on the right hand and additional configuration keys.
Where is the keymap.c?
----------------------
The keymap.c file is not published to the repository. It is generated from `keymap.json` by the build system.
This avoids duplicating information and allow users to edit their keymap from the QMK Configurator web interface.
How do I edit and update the keymap?
------------------------------------
The `keymap.json` file is generated from the QMK Configurator interface and formatted for better readability in the context of the Ferris keyboard.
To edit it, you may:
* Edit it directly from a text editor.
* Edit it from the QMK Configurator.
If you decide to use the latter workflow, here are the steps to follow:
* From the [QMK Configurator](https://config.qmk.fm/#/splitkb/aurora/helix/rev1/LAYOUT), hit the "import QMK keymap json file" button (it has a drawing with an up arrow on it).
* Browse to the location of your keymap (for example, `<your qmk repo>/keyboards/splitkb/aurora/helix/keymaps/default/keymap.json`)
* Perform any modification to the keymap in the web UI
* Export the keymap to your downloads folder, by hitting the "Export QMK keymap json file" button (it has a drawing with a down arrow on it)
* Replace your original keymap with the one you just downloaded
_**Note:** At the time of writing (the 24th of October 2022), not every feature used in the default keymap is supported by the QMK Configurator. You cannot yet upload the default `keymap.json` due to a file format mismatch - use the "Load Default" button to load the default keymap instead. Additionally, custom configuration options are still being worked on: if your keymap depends on them, please compile your firmware offline for now._
I want to do more than the JSON format supports!
-------------------------------------------------
While the `json` format is easy to use, it does lack certain functionality - most notably custom OLED or encoder behaviour.
To add this, you need to convert it to the `c` format. Do keep in mind that this is generally a one-way operation.
First, from the root of your qmk repo, move to your keymap folder
```bash
cd ./keyboards/splitkb/aurora/helix/keymaps/my_personal_keymap
```
Next, convert your `keymap.json` to a `keymap.c`
```bash
qmk json2c -o keymap.c keymap.json
```
You can add custom C code to the newly generated `keymap.c` file. Do note that you have to use **either** a C file **or** a JSON file - you cannot do both!
**If a JSON file is present, the C file is ignored.**

View file

@ -0,0 +1,48 @@
![Aurora Helix](https://i.imgur.com/zzzW8Tu.jpg)
# Aurora Helix
The Aurora Helix is a redesign by splitkb.com of the popular Helix by Yushakobo.
Keyboard Maintainer: [splitkb.com](https://github.com/splitkb)
Hardware Supported: Pro Micro 5V/16MHz and compatible.
Hardware Availability: [splitkb.com](https://splitkb.com).
Make example for this keyboard (after setting up your build environment):
make splitkb/aurora/helix/rev1:default
Example of flashing this keyboard:
make splitkb/aurora/helix/rev1:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
You can enter the bootloader in 3 ways:
* **Physical reset button**: Briefly press the button on the side of the PCB, next to the TRRS socket.
* **Bootmagic reset**: Hold down the bootmagic key and plug in the keyboard. For the left half, this is the top-left button. For the right half, this is the top-right button.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
# Assembly
A build guide for the entire Aurora series is available at [https://splitkb.com/aurora-build](https://splitkb.com/aurora-build).
# Features
The Aurora Helix supports the following features:
- Support for MX or Kailh Choc switches;
- Top mounted controllers for a lower profile;
- Up to two 128×32 pixel OLED displays;
- Up to one EC11 rotary encoder per half in one of three possible positions;
- Per-key RGB backlight by individual RGB LEDs;
- Underglow by individual RGB LEDs;
- Support for a power switch for wireless controllers;
- Support for the splitkb.com tenting puck.
# What is the Aurora Series?
The Aurora series were designed as a homage to open source keyboard kits that have carved their space into the community. Kits that provided something new and unique, kits that resonated with the community and that have both received and have given a lot of love in return.
With the Aurora series, we aim to make these kits available to the community in a way that both honors the original, while also offering the best possible feature set and a consistent, well-documented build experience.
For each kit sold, we give back to the community by donating €1 across [the firmware projects we support](https://opencollective.com/splitkb). This way we support open source projects and benefit everyone using keyboards, whether they use our kits or their own.

View file

@ -0,0 +1,24 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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
#define SPLIT_HAND_PIN D3
#define OLED_DISPLAY_128X32
#define SPLIT_OLED_ENABLE
#define RGB_MATRIX_LED_COUNT 76

View file

@ -0,0 +1,206 @@
{
"keyboard_name": "Aurora Helix rev1",
"diode_direction": "COL2ROW",
"encoder": {
"enabled": true,
"rotary": [
{"pin_a": "E6", "pin_b": "B4"}
]
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"oled": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["F6", "F7", "B1", "B3", "B2", "B6", "B5"],
"rows": ["F4", "F5", "D4", "C6", "D7"]
},
"rgb_matrix": {
"driver": "ws2812",
"layout": [
{"x": 72, "y": 16, "flags": 2},
{"x": 40, "y": 16, "flags": 2},
{"x": 8, "y": 16, "flags": 2},
{"x": 8, "y": 48, "flags": 2},
{"x": 40, "y": 48, "flags": 2},
{"x": 72, "y": 48, "flags": 2},
{"matrix": [0, 5], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [1, 5], "x": 80, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 64, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 48, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 32, "y": 16, "flags": 4},
{"matrix": [1, 1], "x": 16, "y": 16, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 16, "flags": 4},
{"matrix": [2, 5], "x": 80, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 64, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 48, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 32, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 16, "y": 32, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
{"matrix": [3, 6], "x": 96, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 80, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 64, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 48, "y": 48, "flags": 4},
{"matrix": [3, 2], "x": 32, "y": 48, "flags": 4},
{"matrix": [3, 1], "x": 16, "y": 48, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 48, "flags": 4},
{"matrix": [4, 6], "x": 96, "y": 64, "flags": 4},
{"matrix": [4, 5], "x": 80, "y": 64, "flags": 4},
{"matrix": [4, 4], "x": 64, "y": 64, "flags": 4},
{"matrix": [4, 3], "x": 48, "y": 64, "flags": 4},
{"matrix": [4, 2], "x": 32, "y": 64, "flags": 4},
{"matrix": [4, 1], "x": 16, "y": 64, "flags": 4},
{"matrix": [4, 0], "x": 0, "y": 64, "flags": 4},
{"x": 152, "y": 16, "flags": 2},
{"x": 184, "y": 16, "flags": 2},
{"x": 216, "y": 16, "flags": 2},
{"x": 216, "y": 48, "flags": 2},
{"x": 184, "y": 48, "flags": 2},
{"x": 152, "y": 48, "flags": 2},
{"matrix": [5, 5], "x": 144, "y": 0, "flags": 4},
{"matrix": [5, 4], "x": 160, "y": 0, "flags": 4},
{"matrix": [5, 3], "x": 176, "y": 0, "flags": 4},
{"matrix": [5, 2], "x": 192, "y": 0, "flags": 4},
{"matrix": [5, 1], "x": 208, "y": 0, "flags": 4},
{"matrix": [5, 0], "x": 224, "y": 0, "flags": 4},
{"matrix": [6, 5], "x": 144, "y": 16, "flags": 4},
{"matrix": [6, 4], "x": 160, "y": 16, "flags": 4},
{"matrix": [6, 3], "x": 176, "y": 16, "flags": 4},
{"matrix": [6, 2], "x": 192, "y": 16, "flags": 4},
{"matrix": [6, 1], "x": 208, "y": 16, "flags": 4},
{"matrix": [6, 0], "x": 224, "y": 16, "flags": 4},
{"matrix": [7, 5], "x": 144, "y": 32, "flags": 4},
{"matrix": [7, 4], "x": 160, "y": 32, "flags": 4},
{"matrix": [7, 3], "x": 176, "y": 32, "flags": 4},
{"matrix": [7, 2], "x": 192, "y": 32, "flags": 4},
{"matrix": [7, 1], "x": 208, "y": 32, "flags": 4},
{"matrix": [7, 0], "x": 224, "y": 32, "flags": 4},
{"matrix": [8, 6], "x": 128, "y": 48, "flags": 4},
{"matrix": [8, 5], "x": 144, "y": 48, "flags": 4},
{"matrix": [8, 4], "x": 160, "y": 48, "flags": 4},
{"matrix": [8, 3], "x": 176, "y": 48, "flags": 4},
{"matrix": [8, 2], "x": 192, "y": 48, "flags": 4},
{"matrix": [8, 1], "x": 208, "y": 48, "flags": 4},
{"matrix": [8, 0], "x": 224, "y": 48, "flags": 4},
{"matrix": [9, 6], "x": 128, "y": 64, "flags": 4},
{"matrix": [9, 5], "x": 144, "y": 64, "flags": 4},
{"matrix": [9, 4], "x": 160, "y": 64, "flags": 4},
{"matrix": [9, 3], "x": 176, "y": 64, "flags": 4},
{"matrix": [9, 2], "x": 192, "y": 64, "flags": 4},
{"matrix": [9, 1], "x": 208, "y": 64, "flags": 4},
{"matrix": [9, 0], "x": 224, "y": 64, "flags": 4}
],
"max_brightness": 128,
"split_count": [38, 38]
},
"rgblight": {
"led_count": 76,
"max_brightness": 128,
"split": true,
"split_count": [38, 38]
},
"split": {
"bootmagic": {
"matrix": [7, 0]
},
"encoder": {
"right": {
"rotary": [
{"pin_a": "B2", "pin_b": "B3"}
]
}
},
"main": "matrix_grid",
"matrix_pins": {
"right": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5", "B6"],
"rows": ["F4", "F5", "F6", "F7", "B1"]
}
},
"soft_serial_pin": "D2"
},
"usb": {
"pid": "0xB4C4"
},
"ws2812": {
"pin": "D3"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "L01", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "L02", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "L03", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "L04", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "L05", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "L06", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "R06", "matrix": [5, 5], "x": 9, "y": 0},
{"label": "R05", "matrix": [5, 4], "x": 10, "y": 0},
{"label": "R04", "matrix": [5, 3], "x": 11, "y": 0},
{"label": "R03", "matrix": [5, 2], "x": 12, "y": 0},
{"label": "R02", "matrix": [5, 1], "x": 13, "y": 0},
{"label": "R01", "matrix": [5, 0], "x": 14, "y": 0},
{"label": "L07", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "L08", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "L09", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "L10", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "L11", "matrix": [1, 4], "x": 4, "y": 1},
{"label": "L12", "matrix": [1, 5], "x": 5, "y": 1},
{"label": "R12", "matrix": [6, 5], "x": 9, "y": 1},
{"label": "R11", "matrix": [6, 4], "x": 10, "y": 1},
{"label": "R10", "matrix": [6, 3], "x": 11, "y": 1},
{"label": "R09", "matrix": [6, 2], "x": 12, "y": 1},
{"label": "R08", "matrix": [6, 1], "x": 13, "y": 1},
{"label": "R07", "matrix": [6, 0], "x": 14, "y": 1},
{"label": "L13", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "L14", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "L15", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "L16", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "L17", "matrix": [2, 4], "x": 4, "y": 2},
{"label": "L18", "matrix": [2, 5], "x": 5, "y": 2},
{"label": "R18", "matrix": [7, 5], "x": 9, "y": 2},
{"label": "R17", "matrix": [7, 4], "x": 10, "y": 2},
{"label": "R16", "matrix": [7, 3], "x": 11, "y": 2},
{"label": "R15", "matrix": [7, 2], "x": 12, "y": 2},
{"label": "R14", "matrix": [7, 1], "x": 13, "y": 2},
{"label": "R13", "matrix": [7, 0], "x": 14, "y": 2},
{"label": "L19", "matrix": [3, 0], "x": 0, "y": 3},
{"label": "L20", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "L21", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "L22", "matrix": [3, 3], "x": 3, "y": 3},
{"label": "L23", "matrix": [3, 4], "x": 4, "y": 3},
{"label": "L24", "matrix": [3, 5], "x": 5, "y": 3},
{"label": "L25", "matrix": [3, 6], "x": 6, "y": 3},
{"label": "R25", "matrix": [8, 6], "x": 8, "y": 3},
{"label": "R24", "matrix": [8, 5], "x": 9, "y": 3},
{"label": "R23", "matrix": [8, 4], "x": 10, "y": 3},
{"label": "R22", "matrix": [8, 3], "x": 11, "y": 3},
{"label": "R21", "matrix": [8, 2], "x": 12, "y": 3},
{"label": "R20", "matrix": [8, 1], "x": 13, "y": 3},
{"label": "R19", "matrix": [8, 0], "x": 14, "y": 3},
{"label": "L26", "matrix": [4, 0], "x": 0, "y": 4},
{"label": "L27", "matrix": [4, 1], "x": 1, "y": 4},
{"label": "L28", "matrix": [4, 2], "x": 2, "y": 4},
{"label": "L29", "matrix": [4, 3], "x": 3, "y": 4},
{"label": "L30", "matrix": [4, 4], "x": 4, "y": 4},
{"label": "L31", "matrix": [4, 5], "x": 5, "y": 4},
{"label": "L32", "matrix": [4, 6], "x": 6, "y": 4},
{"label": "R32", "matrix": [9, 6], "x": 8, "y": 4},
{"label": "R31", "matrix": [9, 5], "x": 9, "y": 4},
{"label": "R30", "matrix": [9, 4], "x": 10, "y": 4},
{"label": "R29", "matrix": [9, 3], "x": 11, "y": 4},
{"label": "R28", "matrix": [9, 2], "x": 12, "y": 4},
{"label": "R27", "matrix": [9, 1], "x": 13, "y": 4},
{"label": "R26", "matrix": [9, 0], "x": 14, "y": 4}
]
}
}
}

View file

@ -0,0 +1,56 @@
/* Copyright 2023 splitkb.com <support@splitkb.com>
*
* 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 QMK_KEYBOARD_H
// Overriding is_keyboard_left() in qmk_firmware/quantum/split_common/split_util.c to limit the handedness check only once.
// reason: SPLIT_HAND_PIN is shared with the RGB pin so we don't want to keep reusing the pin for handedness checks.
bool is_keyboard_left(void) {
static enum { UNKNOWN, LEFT, RIGHT } hand_side = UNKNOWN;
// only check once, as this is called often
if (hand_side == UNKNOWN) {
#if defined(SPLIT_HAND_PIN)
// Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
setPinInput(SPLIT_HAND_PIN);
hand_side = readPin(SPLIT_HAND_PIN) ? LEFT : RIGHT;
return (hand_side == LEFT);
#endif
hand_side = is_keyboard_master() ? LEFT : RIGHT;
return (hand_side == LEFT);
} else {
return (hand_side == LEFT);
}
}
#ifdef SWAP_HANDS_ENABLE
// clang-format off
__attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}},
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}},
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}},
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}},
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}}
};
// clang-format on
# ifdef ENCODER_MAP_ENABLE
const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1,0};
# endif
#endif

View file

@ -0,0 +1 @@
DEFAULT_FOLDER = splitkb/aurora/helix/rev1