diff --git a/keyboards/3araht/giabalanai/config.h b/keyboards/3araht/giabalanai/config.h new file mode 100644 index 000000000000..b79935b9a3c2 --- /dev/null +++ b/keyboards/3araht/giabalanai/config.h @@ -0,0 +1,257 @@ +/* +Copyright 2020 3araht + +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 . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER 3araht +#define PRODUCT giabalanai + +/* key matrix size */ +#define MATRIX_ROWS 12 +#define MATRIX_COLS 10 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * + */ +// #define MATRIX_ROW_PINS { D1, D0, D4, C6, D7, E6 } +// #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B4, B5 } +#define MATRIX_ROW_PINS { B5, B4, E6, D7, C6, D4 } +#define MATRIX_COL_PINS { B1, F7, F6, F5, F4, B3, B2, B6, D0, D1 } +#define MATRIX_ROW_PINS_RIGHT { D1, D0, D4, C6, D7, E6 } +// F1 is an unused dummy pin to match the # of COLs used. B5 will be used for Audio. +// B7, C7 are unused dummy pin to match the # of COLs used. B6, B4 will be used for Encoder. +// #define MATRIX_COL_PINS_RIGHT { F4, F5, F6, F7, B1, B3, B2, B6, B4, F1 } +#define MATRIX_COL_PINS_RIGHT { F4, F5, F6, F7, B1, B3, B2, C7, B7, F1 } +// #define UNUSED_PINS + +/* COL2ROW, ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* + * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. + */ +#define SOFT_SERIAL_PIN D2 +#define SELECT_SOFT_SERIAL_SPEED 1 +/*Sets the protocol speed when using serial communication*/ +//Speeds: +//0: about 189kbps (Experimental only) +//1: about 137kbps (default) +//2: about 75kbps +//3: about 39kbps +//4: about 26kbps +//5: about 20kbps + +// Right side has to be the master since 1, LED data is output from right side, and 2, Audio pin is prepared on right side as a reserve. +#define MASTER_RIGHT + + +//#define BACKLIGHT_PIN B7 +//#define BACKLIGHT_LEVELS 3 +//#define BACKLIGHT_BREATHING + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 + +#ifdef RGBLIGHT_ENABLE + + #define RGBLED_NUM 123 + // Do not define "RGBLED_SPLIT" since the # of LEDs on both sides are not equal. + // Instead, LED data is tranferred from right side to the left via TRRS cable. + + #define RGBLIGHT_LIMIT_VAL 100 + // #define RGBLIGHT_LAYERS + + #ifndef HSV_BLACK + #define HSV_BLACK 0, 0, 0 // Define 'black' color, more like 'LED off' (H, S, V) + #endif + + /* All the animations have to be disabled so as not to overwrite the LED setting when keys are pressed. */ + // #ifndef AUDIO_ENABLE + // #define RGBLIGHT_EFFECT_KNIGHT + // #define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 15 + // #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 60 + // #define RGBLIGHT_EFFECT_RAINBOW_MOOD + // #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + // #endif + + // These two effects consume 1334 bytes. + // #define RGBLIGHT_EFFECT_TWINKLE + // #define RGBLIGHT_EFFECT_STATIC_GRADIENT + + +// RGBLIGHT LED MAP +// Right 1st row (12 LEDs) +// ENCODER +// Right 2nd .. 5th row(13, 12, 13, 12 LEDs) +// Left 1st .. 5th row (12 LEDs x 5 rows) + + #define RGBLIGHT_LED_MAP { \ + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, \ + 97, \ + 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, \ + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, \ + 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, \ + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, \ + \ + 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \ + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, \ + 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, \ + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \ + 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48 \ + } + + // #define RGBLIGHT_LED_MAP { + // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + // 12, + // 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, + // 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + // 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, + // 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + // + // 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + // 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + // 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + // 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + // 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122 + // } + + +#endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +// /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +// #define LOCKING_SUPPORT_ENABLE +// /* Locking resynchronize hack */ +// #define LOCKING_RESYNC_ENABLE + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is useful for the Windows task manager shortcut (ctrl+shift+esc). + */ +//#define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT + +/* disable these deprecated features by default */ +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + +/* Bootmagic Lite key configuration */ +//#define BOOTMAGIC_LITE_ROW 0 +//#define BOOTMAGIC_LITE_COLUMN 0 + +/* Audio */ +#ifdef AUDIO_ENABLE + #define B5_AUDIO // use EX1 = PB5 = PIN9 as Audio output + // #define DAC_SAMPLE_MAX 32768U + #define DAC_SAMPLE_MAX 65535U + // #define AUDIO_CLICKY + #define NO_MUSIC_MODE + // #define STARTUP_SONG SONG(FANTASIE_IMPROMPTU) + // #define STARTUP_SONG SONG(NOCTURNE_OP_9_NO_1) + // #define STARTUP_SONG SONG(USSR_ANTHEM) + // #define STARTUP_SONG SONG(CAMPANELLA) + +#endif + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +#define MIDI_ADVANCED +#define MIDI_TONE_KEYCODE_OCTAVES 5 + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +/* + * Encoder options + */ +#ifdef ENCODER_ENABLE + #define ENCODERS_PAD_A { C7 } // dummy + #define ENCODERS_PAD_B { B7 } // dummy + #define ENCODERS_PAD_A_RIGHT { B4 } + #define ENCODERS_PAD_B_RIGHT { B6 } + #define ENCODER_RESOLUTION 4 + #define TAP_CODE_DELAY 10 +#endif // ENCODER_ENABLE diff --git a/keyboards/3araht/giabalanai/giabalanai.c b/keyboards/3araht/giabalanai/giabalanai.c new file mode 100644 index 000000000000..0cff59574350 --- /dev/null +++ b/keyboards/3araht/giabalanai/giabalanai.c @@ -0,0 +1,24 @@ +/* Copyright 2020 3araht + * + * 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 . + */ + +#include "giabalanai.h" +#include "encoder.h" + +#ifdef ENCODER_ENABLE +void encoder_update_kb(int8_t index, bool clockwise) { + encoder_update_user(index, clockwise); +} +#endif //ENCODER_ENABLE diff --git a/keyboards/3araht/giabalanai/giabalanai.h b/keyboards/3araht/giabalanai/giabalanai.h new file mode 100644 index 000000000000..2df7c700e9c5 --- /dev/null +++ b/keyboards/3araht/giabalanai/giabalanai.h @@ -0,0 +1,59 @@ +/* Copyright 2020 3araht + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT( \ + l00, l01, l02, l03, l04, l05, \ + l10, l11, l12, l13, l14, l15, \ + l20, l21, l22, l23, l24, l25, \ + l30, l31, l32, l33, l34, l35, \ + l40, l41, l42, l43, l44, l45, \ + \ + l06, l07, l08, l09, l0a, l0b, \ + l16, l17, l18, l19, l1a, l1b, \ + l26, l27, l28, l29, l2a, l2b, \ + l36, l37, l38, l39, l3a, l3b, \ + l46, l47, l48, l49, l4a, l4b, \ + \ + r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, r0a, r0b, renc, \ + r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r1a, r1b, r1c, \ + r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r2a, r2b, r2c \ +) { \ + { l00, l10, l20, l30, l40, l0b, l1b, l2b, l3b, l4b }, \ + { l01, l11, l21, l31, l41, l0a, l1a, l2a, l3a, l4a }, \ + { l02, l12, l22, l32, l42, l09, l19, l29, l39, l49 }, \ + { l03, l13, l23, l33, l43, l08, l18, l28, l38, l48 }, \ + { l04, l14, l24, l34, l44, l07, l17, l27, l37, l47 }, \ + { l05, l15, l25, l35, l45, l06, l16, l26, l36, l46 }, \ + \ + { r00, r01, r02, r03, r04, r05, r06, KC_NO, KC_NO, KC_NO }, \ + { r10, r11, r12, r13, r14, r15, r16, KC_NO, KC_NO, KC_NO }, \ + { r20, r21, r22, r23, r24, r25, r26, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, renc, r0b, r0a, r09, r08, r07, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, r1c, r1b, r1a, r19, r18, r17, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, r2c, r2b, r2a, r29, r28, r27, KC_NO, KC_NO, KC_NO } \ +} diff --git a/keyboards/3araht/giabalanai/info.json b/keyboards/3araht/giabalanai/info.json new file mode 100644 index 000000000000..bdac932d5055 --- /dev/null +++ b/keyboards/3araht/giabalanai/info.json @@ -0,0 +1,19 @@ +{ + "keyboard_name": "giabalanai", + "url": "", + "maintainer": "3araht", + "width": 3, + "height": 2, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "k00", "x": 0, "y": 0}, + {"label": "k01", "x": 1, "y": 0}, + {"label": "k02", "x": 2, "y": 0}, + + {"label": "k10", "x": 0, "y": 1, "w": 1.5}, + {"label": "k12", "x": 1.5, "y": 1, "w": 1.5} + ] + } + } +} diff --git a/keyboards/3araht/giabalanai/keymaps/default/keymap.c b/keyboards/3araht/giabalanai/keymaps/default/keymap.c new file mode 100644 index 000000000000..04544eb9d037 --- /dev/null +++ b/keyboards/3araht/giabalanai/keymaps/default/keymap.c @@ -0,0 +1,389 @@ +/* Copyright 2020 3araht + * + * 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 . + */ +#include QMK_KEYBOARD_H + +// Alias layout macros that expand groups of keys. +#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) + +#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T +#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G +#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B + +#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P +#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN +#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH + +#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G +#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D +#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B + +#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN +#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O +#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH + +#define _________________NUMBER_L__________________ KC_1, KC_2, KC_3, KC_4, KC_5 +#define _________________NUMBER_R__________________ KC_6, KC_7, KC_8, KC_9, KC_0 + +#define DF_BASE DF(_BASE) +#define DF_QWER DF(_QWERTY) +// Long press: go to _FN layer, tap: MUTE +#define FN_MUTE LT(_FN, KC_MUTE) + +#ifdef RGBLIGHT_ENABLE + //Following line allows macro to read current RGB settings + extern rgblight_config_t rgblight_config; + rgblight_config_t RGB_current_config; + + // to indecate MUTE ON/OFF status with a LED. + bool myMUTEstat = false; + + /* used to specify there is no LED on the keylocation. */ + #define NO_LED 255 + + /* Conversion map from keylocation (MATRIX_ROWS x2(split) x MATRIX_COLS) to led IDs. + led IDs are the number starts "0" from upper left corner of left side, + enumerated from left to right, from top to bottom. + Then emumeration follows to the right side, starting from "60". + + Note that the conversion from physical LED serial alighment to + the led IDs is done with RGBLIGHT_LED_MAP beforehand. */ + const uint8_t PROGMEM convert_key_to_led[] = + { + 0, 12, 24, 36, 48, 11, 23, 35, 47, 59, \ + 1, 13, 25, 37, 49, 10, 22, 34, 46, 58, \ + 2, 14, 26, 38, 50, 9, 21, 33, 45, 57, \ + 3, 15, 27, 39, 51, 8, 20, 32, 44, 56, \ + 4, 16, 28, 40, 52, 7, 19, 31, 43, 55, \ + 5, 17, 29, 41, 53, 6, 18, 30, 42, 54, \ + \ + 85, 86, 87, 88, 89, 90, 91, NO_LED, NO_LED, NO_LED, \ + 98, 99, 100, 101, 102, 103, 104, NO_LED, NO_LED, NO_LED, \ + NO_LED, 111, 112, 113, 114, 115, 116, NO_LED, NO_LED, NO_LED, \ + NO_LED, 97, 96, 95, 94, 93, 92, NO_LED, NO_LED, NO_LED, \ + NO_LED, 110, 109, 108, 107, 106, 105, NO_LED, NO_LED, NO_LED, \ + NO_LED, 122, 121, 120, 119, 118, 117, NO_LED, NO_LED, NO_LED \ + }; + + /* Top 2 rows on the right side (LED:60-84) are + duplicates of the bottom 2 rows (LED:85-122). + LED:97 = Encoder, + LED:110 don't have a duplicate on the top row, + LED:72 is used when r20 is pressed (not a duplicate) */ + const uint8_t PROGMEM convert_key_to_led2[] = + { + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + 60, 61, 62, 63, 64, 65, 66, NO_LED, NO_LED, NO_LED, \ + 72, 73, 74, 75, 76, 77, 78, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, \ + NO_LED, NO_LED, 71, 70, 69, 68, 67, NO_LED, NO_LED, NO_LED, \ + NO_LED, 84, 83, 82, 81, 80, 79, NO_LED, NO_LED, NO_LED \ + }; + +#endif + + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, // MIDI + _QWERTY, // just in case + _FN +}; + +// Defines the keycodes used by our macros in process_record_user +enum custom_keycodes { + + // MIDI Chord Keycodes - Root notes + + MI_CH_Cr = SAFE_RANGE, + MI_CH_Csr, + MI_CH_Dbr = MI_CH_Csr, + MI_CH_Dr, + MI_CH_Dsr, + MI_CH_Ebr = MI_CH_Dsr, + MI_CH_Er, + MI_CH_Fr, + MI_CH_Fsr, + MI_CH_Gbr = MI_CH_Fsr, + MI_CH_Gr , + MI_CH_Gsr, + MI_CH_Abr = MI_CH_Gsr, + MI_CH_Ar, + MI_CH_Asr, + MI_CH_Bbr = MI_CH_Asr, + MI_CH_Br, + + // MIDI Chord Keycodes - Major + + MI_CH_C, + MI_CH_Cs, + MI_CH_Db = MI_CH_Cs, + MI_CH_D, + MI_CH_Ds, + MI_CH_Eb = MI_CH_Ds, + MI_CH_E, + MI_CH_F, + MI_CH_Fs, + MI_CH_Gb = MI_CH_Fs, + MI_CH_G , + MI_CH_Gs, + MI_CH_Ab = MI_CH_Gs, + MI_CH_A, + MI_CH_As, + MI_CH_Bb = MI_CH_As, + MI_CH_B, + + // MIDI Chord Keycodes Minor + + MI_CH_Cm, + MI_CH_Csm, + MI_CH_Dbm = MI_CH_Csm, + MI_CH_Dm, + MI_CH_Dsm, + MI_CH_Ebm = MI_CH_Dsm, + MI_CH_Em, + MI_CH_Fm, + MI_CH_Fsm, + MI_CH_Gbm = MI_CH_Fsm, + MI_CH_Gm, + MI_CH_Gsm, + MI_CH_Abm = MI_CH_Gsm, + MI_CH_Am, + MI_CH_Asm, + MI_CH_Bbm = MI_CH_Asm, + MI_CH_Bm, + + //MIDI Chord Keycodes Dominant Seventh + + MI_CH_CDom7, + MI_CH_CsDom7, + MI_CH_DbDom7 = MI_CH_CsDom7, + MI_CH_DDom7, + MI_CH_DsDom7, + MI_CH_EbDom7 = MI_CH_DsDom7, + MI_CH_EDom7, + MI_CH_FDom7, + MI_CH_FsDom7, + MI_CH_GbDom7 = MI_CH_FsDom7, + MI_CH_GDom7, + MI_CH_GsDom7, + MI_CH_AbDom7 = MI_CH_GsDom7, + MI_CH_ADom7, + MI_CH_AsDom7, + MI_CH_BbDom7 = MI_CH_AsDom7, + MI_CH_BDom7, + + // MIDI Chord Keycodes Diminished Seventh + + MI_CH_CDim7, + MI_CH_CsDim7, + MI_CH_DbDim7 = MI_CH_CsDim7, + MI_CH_DDim7, + MI_CH_DsDim7, + MI_CH_EbDim7 = MI_CH_DsDim7, + MI_CH_EDim7, + MI_CH_FDim7, + MI_CH_FsDim7, + MI_CH_GbDim7 = MI_CH_FsDim7, + MI_CH_GDim7, + MI_CH_GsDim7, + MI_CH_AbDim7 = MI_CH_GsDim7, + MI_CH_ADim7, + MI_CH_AsDim7, + MI_CH_BbDim7 = MI_CH_AsDim7, + MI_CH_BDim7, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Base */ + [_BASE] = LAYOUT( \ + MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, \ + MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, \ + MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, \ + MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, \ + MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, \ + \ + MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, \ + MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs, \ + MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm, \ + MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7, \ + MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7, \ + \ + MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE, \ + MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5, \ + MI_Fs_2, MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5 \ + ), + + /* Fn */ + [_QWERTY] = LAYOUT_wrapper( \ + KC_GESC, _________________NUMBER_L__________________, \ + KC_TAB, _________________QWERTY_L1_________________, \ + KC_CAPS, _________________QWERTY_L2_________________, \ + KC_LSFT, _________________QWERTY_L3_________________, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, \ + \ + _________________NUMBER_R__________________, KC_BSPC, \ + _________________QWERTY_R1_________________, KC_DEL, \ + _________________QWERTY_R2_________________, KC_ENT, \ + _________________QWERTY_R3_________________, KC_RSFT, \ + KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, KC_RCTRL, \ + \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ + ), + + /* Fn */ + [_FN] = LAYOUT( \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + \ + DF_BASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ + ) +}; + +#ifdef RGBLIGHT_ENABLE + void keylight_manager(keyrecord_t *record, uint8_t hue, uint8_t sat, uint8_t val, uint8_t keylocation) { + if (keylocation == NO_LED) { + return; // do nothing. + } + + if (record->event.pressed) { + rgblight_sethsv_at(hue, sat, val, keylocation); + }else{ + rgblight_sethsv_at(HSV_BLACK, keylocation); + } + } +#endif //RGBLIGHT_ENABLE + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord + + #ifdef RGBLIGHT_ENABLE + // prepare for turning on LEDs when keys are pressed. + uint8_t r = record->event.key.row; + uint8_t c = record->event.key.col; + uint8_t keylocation = convert_key_to_led[MATRIX_COLS*r+c]; + uint8_t keylocation2 = convert_key_to_led2[MATRIX_COLS*r+c]; + #endif //RGBLIGHT_ENABLE + + switch (keycode) { + // MIDI Chord Keycodes, on the left side. + case MI_CH_Cr ... MI_CH_Br: // Root Notes + root_note = keycode - MI_CH_Cr + MI_C_1; + process_midi(root_note, record); + process_midi(root_note - 12, record); // -1 Octave + process_midi(root_note + 12, record); // +1 Octave + #ifdef RGBLIGHT_ENABLE + // if (record->event.pressed) { + // rgblight_sethsv_at(HSV_GOLDENROD, keylocation); + // }else{ + // rgblight_sethsv_at(HSV_BLACK, keylocation); + // } + keylight_manager(record, HSV_GOLDENROD, keylocation); + #endif + break; + + case MI_CH_C ... MI_CH_B: // Major Chords + root_note = keycode - MI_CH_C + MI_C_1; + process_midi(root_note, record); + process_midi(root_note + 4, record); // Major Third Note + process_midi(root_note + 7, record); // Fifth Note + #ifdef RGBLIGHT_ENABLE + keylight_manager(record, HSV_GOLDENROD, keylocation); + #endif + break; + + case MI_CH_Cm ... MI_CH_Bm: // Minor Chord + root_note = keycode - MI_CH_Cm + MI_C_1; + process_midi(root_note, record); + process_midi(root_note + 3, record); // Minor Third Note + process_midi(root_note + 7, record); // Fifth Note + #ifdef RGBLIGHT_ENABLE + keylight_manager(record, HSV_GOLDENROD, keylocation); + #endif + break; + + case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord + root_note = keycode - MI_CH_CDom7 + MI_C_1; + process_midi(root_note, record); + process_midi(root_note + 4, record); // Major Third Note + process_midi(root_note + 10, record); // Minor Seventh Note + #ifdef RGBLIGHT_ENABLE + keylight_manager(record, HSV_GOLDENROD, keylocation); + #endif + break; + + case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord + root_note = keycode - MI_CH_CDim7 + MI_C_1; // Changed from "+ MI_C" to "+ MI_C_1" since there is "root_note - 3" below. + process_midi(root_note, record); + process_midi(root_note + 3, record); // Minor Third Note + process_midi(root_note - 3, record); // Diminished 7th Note + #ifdef RGBLIGHT_ENABLE + keylight_manager(record, HSV_GOLDENROD, keylocation); + #endif + break; + + // Keycodes on the right side. + #ifdef RGBLIGHT_ENABLE + case MIDI_TONE_MIN ... MIDI_TONE_MAX: // notes on the right side. + keylight_manager(record, HSV_GOLDENROD, keylocation); + keylight_manager(record, HSV_GOLDENROD, keylocation2); + break; + + case KC_MUTE: + if (record->event.pressed) { + myMUTEstat = !myMUTEstat; + if (myMUTEstat) { + rgblight_sethsv_at(HSV_GOLDENROD, keylocation); + } else { + rgblight_sethsv_at(HSV_BLACK, keylocation); + } + } + break; + #endif + } + return true; +} + +#ifdef ENCODER_ENABLE +void encoder_update_user(int8_t index, bool clockwise) { + if (index == 1) { /* An encoder on the right side */ + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } +} +#endif // ENCODER_ENABLE diff --git a/keyboards/3araht/giabalanai/keymaps/default/readme.md b/keyboards/3araht/giabalanai/keymaps/default/readme.md new file mode 100644 index 000000000000..d929aa1f5e54 --- /dev/null +++ b/keyboards/3araht/giabalanai/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for giabalanai diff --git a/keyboards/3araht/giabalanai/readme.md b/keyboards/3araht/giabalanai/readme.md new file mode 100644 index 000000000000..e0f1a05ecf0e --- /dev/null +++ b/keyboards/3araht/giabalanai/readme.md @@ -0,0 +1,19 @@ +# giabalanai - nobellows - + +![giabalanai - nobellows - ](imgur.com image replace me!) + +*A short description of the keyboard/project* + +* Keyboard Maintainer: [3araht](https://github.com/3araht) +* Hardware Supported: *The PCBs, controllers supported* +* Hardware Availability: *Links to where you can find this hardware* + +Make example for this keyboard (after setting up your build environment): + + make 3araht/giabalanai:default + +Flashing example for this keyboard: + + make 3araht/giabalanai:default:avrdude + +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). diff --git a/keyboards/3araht/giabalanai/rules.mk b/keyboards/3araht/giabalanai/rules.mk new file mode 100644 index 000000000000..8cbe9e11ca19 --- /dev/null +++ b/keyboards/3araht/giabalanai/rules.mk @@ -0,0 +1,38 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# ATmega32A bootloadHID +# ATmega328P USBasp +BOOTLOADER = caterina + +# Build Options +# change yes to no to disable +# +# BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +# RGB_MATRIX_ENABLE is not suitable for giabalanai keyboard on the right side (there are dulpicate keys). +RGB_MATRIX_ENABLE = no # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.) +BLUETOOTH_ENABLE = no # Enable Bluetooth +AUDIO_ENABLE = no # Audio output + +MIDI_ENABLE = yes # MIDI support + +ENCODER_ENABLE = yes # encoder on mute button + +SPLIT_KEYBOARD = yes # Enables split keyboard support