summaryrefslogtreecommitdiffstats
path: root/keyboards
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/giabalanai/config.h294
-rw-r--r--keyboards/giabalanai/giabalanai.c255
-rw-r--r--keyboards/giabalanai/giabalanai.h132
-rw-r--r--keyboards/giabalanai/info.json125
-rw-r--r--keyboards/giabalanai/keymaps/2firmware/config.h9
-rw-r--r--keyboards/giabalanai/keymaps/2firmware/keymap.c739
-rw-r--r--keyboards/giabalanai/keymaps/2firmware/readme.md12
-rw-r--r--keyboards/giabalanai/keymaps/2firmware/rules.mk4
-rw-r--r--keyboards/giabalanai/keymaps/3araht/keymap.c754
-rw-r--r--keyboards/giabalanai/keymaps/3araht/readme.md1
-rw-r--r--keyboards/giabalanai/keymaps/3araht/rules.mk4
-rw-r--r--keyboards/giabalanai/keymaps/default/keymap.c259
-rw-r--r--keyboards/giabalanai/keymaps/default/readme.md1
-rw-r--r--keyboards/giabalanai/keymaps/default/rules.mk1
-rw-r--r--keyboards/giabalanai/keymaps/default_giabarinaix2/config.h26
-rw-r--r--keyboards/giabalanai/keymaps/default_giabarinaix2/info.json146
-rw-r--r--keyboards/giabalanai/keymaps/default_giabarinaix2/keymap.c262
-rw-r--r--keyboards/giabalanai/keymaps/default_giabarinaix2/readme.md1
-rw-r--r--keyboards/giabalanai/keymaps/default_giabarinaix2/rules.mk3
-rw-r--r--keyboards/giabalanai/keymaps/giabarinaix2led/config.h26
-rw-r--r--keyboards/giabalanai/keymaps/giabarinaix2led/info.json146
-rw-r--r--keyboards/giabalanai/keymaps/giabarinaix2led/keymap.c464
-rw-r--r--keyboards/giabalanai/keymaps/giabarinaix2led/readme.md1
-rw-r--r--keyboards/giabalanai/keymaps/giabarinaix2led/rules.mk3
-rw-r--r--keyboards/giabalanai/keymaps/party/keymap.c792
-rw-r--r--keyboards/giabalanai/keymaps/party/readme.md3
-rw-r--r--keyboards/giabalanai/keymaps/party/rgb_matrix_user.inc57
-rw-r--r--keyboards/giabalanai/keymaps/party/rules.mk6
-rw-r--r--keyboards/giabalanai/keymaps/via/config.h3
-rw-r--r--keyboards/giabalanai/keymaps/via/keymap.c260
-rw-r--r--keyboards/giabalanai/keymaps/via/readme.md1
-rw-r--r--keyboards/giabalanai/keymaps/via/rules.mk3
-rw-r--r--keyboards/giabalanai/keymaps/via_giabarinaix2/config.h27
-rw-r--r--keyboards/giabalanai/keymaps/via_giabarinaix2/info.json146
-rw-r--r--keyboards/giabalanai/keymaps/via_giabarinaix2/keymap.c262
-rw-r--r--keyboards/giabalanai/keymaps/via_giabarinaix2/readme.md1
-rw-r--r--keyboards/giabalanai/keymaps/via_giabarinaix2/rules.mk4
-rw-r--r--keyboards/giabalanai/readme.md24
-rw-r--r--keyboards/giabalanai/rules.mk26
39 files changed, 5283 insertions, 0 deletions
diff --git a/keyboards/giabalanai/config.h b/keyboards/giabalanai/config.h
new file mode 100644
index 0000000000..efad053aae
--- /dev/null
+++ b/keyboards/giabalanai/config.h
@@ -0,0 +1,294 @@
+/*
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* 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 { 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 }
+#define MATRIX_COL_PINS_RIGHT { F4, F5, F6, F7, B1, B3, B2, C7, B7, F1 }
+
+/* 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
+
+// for "Generic" Promicro to be detected correctly as lefthand side (slave)
+#define SPLIT_USB_DETECT
+
+//#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 somehow it doesn't work well yet.
+// Even thhough "#define RGBLED_SPLIT { 60, 63 }" was set, LEDs on the sub keyboad side didn't turn on.
+// Not sure but rgblight_sethsv_at() might not support RGBLED_SPLIT yet.
+// Instead, LED data is tranferred from right side to the left via TRRS cable.
+
+# define RGBLIGHT_LIMIT_VAL 80
+# define RGBLIGHT_LAYERS
+
+// By default, LEDs of the buttons which are pressed turn on.
+// # define RGBLIGHT_EFFECT_TWINKLE
+// # define RGBLIGHT_EFFECT_KNIGHT
+
+
+// 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 \
+ }
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+/* ws2812 RGB MATRIX */
+# define DRIVER_LED_TOTAL 123
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+
+// for all fingers used at once.
+# define LED_HITS_TO_REMEMBER 10
+
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
+
+// the above brighness setting has no effect on rgb_matrix_set_color().
+// Use darker colors instead.
+/* RGB darker COLORS */
+# define RGB_DARKWHITE 0x66, 0x66, 0x66
+# define RGB_DARKRED 0x66, 0x0, 0x0
+# define RGB_DARKCORAL 0x66, 0x31, 0x1E
+# define RGB_DARKORANGE 0x66, 0x33, 0x0
+# define RGB_DARKGOLDENROD 0x56, 0x42, 0xD
+# define RGB_DARKGOLD 0x66, 0x56, 0x0
+# define RGB_DARKYELLOW 0x66, 0x66, 0x0
+# define RGB_DARKCHARTREUSE 0x33, 0x66, 0x0
+# define RGB_DARKGREEN 0x0, 0x66, 0x0
+# define RGB_DARKSPRINGGREEN 0x0, 0x66, 0x33
+# define RGB_DARKTURQUOISE 0x1C, 0x2C, 0x2A
+# define RGB_DARKTEAL 0x0, 0x33, 0x33
+# define RGB_DARKCYAN 0x0, 0x66, 0x66
+# define RGB_DARKAZURE 0x3D, 0x62, 0x66
+# define RGB_DARKBLUE 0x0, 0x0, 0x66
+# define RGB_DARKPURPLE 0x30, 0x0, 0x66
+# define RGB_DARKMAGENTA 0x66, 0x0, 0x66
+# define RGB_DARKPINK 0x66, 0x33, 0x4C
+
+// https://docs.qmk.fm/#/feature_rgb_matrix
+// Enable suspend mode.
+// # define RGB_DISABLE_WHEN_USB_SUSPENDED true
+
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+// #define ENABLE_RGB_MATRIX_BREATHING
+// #define ENABLE_RGB_MATRIX_BAND_SAT
+// #define ENABLE_RGB_MATRIX_BAND_VAL
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+// #define ENABLE_RGB_MATRIX_CYCLE_ALL
+// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+// #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+// #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+// #define ENABLE_RGB_MATRIX_DUAL_BEACON
+// # define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_RAINDROPS
+// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// #define ENABLE_RGB_MATRIX_HUE_WAVE
+// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+// #define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+// #define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+// #define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif // RGB_MATRIX_ENABLE
+
+/* 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
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0
+
+/* Audio */
+#ifdef AUDIO_ENABLE
+# define AUDIO_PIN B5 // 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
+ */
+
+/* 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.
+*/
+#ifdef MIDI_ENABLE
+# define MIDI_ADVANCED
+// Initial velocity value (avoid using 127 since it is used as a special number in some sound sources.)
+# define MIDI_INITIAL_VELOCITY 117
+#endif // MIDI_ENABLE
+
+/*
+ * Encoder options
+ */
+#ifdef ENCODER_ENABLE
+# define ENCODERS_PAD_A { }
+# define ENCODERS_PAD_B { }
+# define ENCODER_RESOLUTIONS { }
+# define ENCODERS_PAD_A_RIGHT { B4 }
+# define ENCODERS_PAD_B_RIGHT { B6 }
+# define ENCODER_RESOLUTIONS_RIGHT { 4 }
+# define TAP_CODE_DELAY 10
+#endif // ENCODER_ENABLE
+
+/* 2021/01/22 added to shrink firmware size */
+// NO_ACTION_TAPPING -1964 bytes, however, this disables Layer mods...
+// #define NO_ACTION_TAPPING
+// NO_ACTION_ONESHOT -388 bytes
+#define NO_ACTION_ONESHOT
diff --git a/keyboards/giabalanai/giabalanai.c b/keyboards/giabalanai/giabalanai.c
new file mode 100644
index 0000000000..6f8e359479
--- /dev/null
+++ b/keyboards/giabalanai/giabalanai.c
@@ -0,0 +1,255 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "giabalanai.h"
+
+// the velocity difference from the velocity of the root note.
+#define UNISON_VELOCITY_OFFSET 30
+
+#ifdef RGBLIGHT_ENABLE
+# 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. */
+
+# ifdef GIABARINAIX2
+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,
+ 119, 107, 95, 83, 71, 108, 96, 84, 72, 60,
+ 118, 106, 94, 82, 70, 109, 97, 85, 73, 61,
+ 117, 105, 93, 81, 69, 110, 98, 86, 74, 62,
+ 116, 104, 92, 80, 68, 111, 99, 87, 75, 63,
+ 115, 103, 91, 79, 67, 112, 100, 88, 76, 64,
+ 114, 102, 90, 78, 66, 113, 101, 89, 77, 65
+};
+
+# else
+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
+#endif // RGBLIGHT_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+
+led_config_t g_led_config = {
+ {
+ { 74, 75, 98, 99, 122, 63, 86, 87, 110, 111 },
+ { 73, 76, 97, 100, 121, 64, 85, 88, 109, 112 },
+ { 72, 77, 96, 101, 120, 65, 84, 89, 108, 113 },
+ { 71, 78, 95, 102, 119, 66, 83, 90, 107, 114 },
+ { 70, 79, 94, 103, 118, 67, 82, 91, 106, 115 },
+ { 69, 80, 93, 104, 117, 68, 81, 92, 105, 116 },
+ { 26, 27, 28, 29, 30, 31, 32, NO_LED, NO_LED, NO_LED },
+ { 50, 49, 48, 47, 46, 45, 44, NO_LED, NO_LED, NO_LED },
+ { 25, 51, 52, 53, 54, 55, 56, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 12, 37, 36, 35, 34, 33, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 38, 39, 40, 41, 42, 43, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 62, 61, 60, 59, 58, 57, NO_LED, NO_LED, NO_LED }
+ }, {
+ { 120, 0 }, { 128, 0 }, { 136, 0 }, { 144, 0 }, { 152, 0 }, { 160, 0 }, { 168, 0 }, { 176, 0 }, { 184, 0 }, { 192, 0 }, { 200, 0 }, { 208, 0 },
+ { 224, 32 },
+ { 212, 16 }, { 204, 16 }, { 196, 16 }, { 188, 16 }, { 180, 16 }, { 172, 16 }, { 164, 16 }, { 156, 16 }, { 148, 16 }, { 140, 16 }, { 132, 16 }, { 124, 16 }, { 116, 16 },
+ { 120, 32 }, { 128, 32 }, { 136, 32 }, { 144, 32 }, { 152, 32 }, { 160, 32 }, { 168, 32 }, { 176, 32 }, { 184, 32 }, { 192, 32 }, { 200, 32 }, { 208, 32 },
+ { 212, 48 }, { 204, 48 }, { 196, 48 }, { 188, 48 }, { 180, 48 }, { 172, 48 }, { 164, 48 }, { 156, 48 }, { 148, 48 }, { 140, 48 }, { 132, 48 }, { 124, 48 }, { 116, 48 },
+ { 120, 64 }, { 128, 64 }, { 136, 64 }, { 144, 64 }, { 152, 64 }, { 160, 64 }, { 168, 64 }, { 176, 64 }, { 184, 64 }, { 192, 64 }, { 200, 64 }, { 208, 64 },
+
+ { 88, 0 }, { 80, 0 }, { 72, 0 }, { 64, 0 }, { 56, 0 }, { 48, 0 }, { 40, 0 }, { 32, 0 }, { 24, 0 }, { 16, 0 }, { 8, 0 }, { 0, 0 },
+ { 4, 16 }, { 12, 16 }, { 20, 16 }, { 28, 16 }, { 36, 16 }, { 44, 16 }, { 52, 16 }, { 60, 16 }, { 68, 16 }, { 76, 16 }, { 84, 16 }, { 92, 16 },
+ { 96, 32 }, { 88, 32 }, { 80, 32 }, { 72, 32 }, { 64, 32 }, { 56, 32 }, { 48, 32 }, { 40, 32 }, { 32, 32 }, { 24, 32 }, { 16, 32 }, { 8, 32 },
+ { 12, 48 }, { 20, 48 }, { 28, 48 }, { 36, 48 }, { 44, 48 }, { 52, 48 }, { 60, 48 }, { 68, 48 }, { 76, 48 }, { 84, 48 }, { 92, 48 }, { 100, 48 },
+ { 104, 64 }, { 96, 64 }, { 88, 64 }, { 80, 64 }, { 72, 64 }, { 64, 64 }, { 56, 64 }, { 48, 64 }, { 40, 64 }, { 32, 64 }, { 24, 64 }, { 16, 64 }
+ }, {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ }
+};
+
+// const uint8_t PROGMEM convert_led_location2number[] = {
+// 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63,
+// 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+// 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87,
+// 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+// 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111,
+//
+// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+// 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, 12,
+// 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
+// };
+#endif
+
+void my_process_midi4Bass(uint8_t channel, keyrecord_t *record,
+ uint8_t *chord_status, uint8_t chord, uint16_t root_note, bool is_single_bass) {
+ uint8_t velocity = midi_config.velocity;
+ if (record->event.pressed) {
+ if (chord_status[chord] == MIDI_INVALID_NOTE) {
+ uint8_t note = midi_compute_note(root_note);
+ if (is_single_bass) {
+ midi_send_noteon(&midi_device, channel, note, velocity);
+ } else {
+ midi_send_noteon(&midi_device, channel, note, velocity);
+ midi_send_noteon(&midi_device, channel, note + 12, velocity); // +1 Octave
+ }
+ dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ chord_status[chord] = note; // store root_note status.
+ }
+ } else {
+ uint8_t note = chord_status[chord];
+ if (note != MIDI_INVALID_NOTE) {
+ if (is_single_bass) {
+ midi_send_noteoff(&midi_device, channel, note, velocity);
+ } else {
+ midi_send_noteoff(&midi_device, channel, note, velocity);
+ midi_send_noteoff(&midi_device, channel, note + 12, velocity); // +1 Octave
+ }
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ }
+ chord_status[chord] = MIDI_INVALID_NOTE;
+ }
+}
+
+void my_process_midi4TriadChords(uint8_t channel, keyrecord_t *record,
+ uint8_t *chord_status, uint8_t chord, uint16_t root_note,
+ int8_t offset1, int8_t offset2, int8_t offset3) {
+ uint8_t velocity = midi_config.velocity;
+ if (record->event.pressed) {
+ if (chord_status[chord] == MIDI_INVALID_NOTE) {
+ uint8_t note = midi_compute_note(root_note);
+ midi_send_noteon(&midi_device, channel, note + offset1, velocity);
+ midi_send_noteon(&midi_device, channel, note + offset2, velocity);
+ midi_send_noteon(&midi_device, channel, note + offset3, velocity);
+ dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ chord_status[chord] = note; // store root_note status.
+ }
+ } else {
+ uint8_t note = chord_status[chord];
+ if (note != MIDI_INVALID_NOTE) {
+ midi_send_noteoff(&midi_device, channel, note + offset1, velocity);
+ midi_send_noteoff(&midi_device, channel, note + offset2, velocity);
+ midi_send_noteoff(&midi_device, channel, note + offset3, velocity);
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ }
+ chord_status[chord] = MIDI_INVALID_NOTE;
+ }
+}
+
+void my_process_midi(uint8_t channel, uint16_t keycode, keyrecord_t *record, uint8_t *my_tone_status, int8_t offset, bool melody_unison_suppress) {
+
+ uint8_t tone = keycode - MIDI_TONE_MIN;
+
+ uint8_t melody_unison_velocity;
+ if (melody_unison_suppress) {
+ if (midi_config.velocity > UNISON_VELOCITY_OFFSET){
+ melody_unison_velocity = midi_config.velocity - UNISON_VELOCITY_OFFSET;
+ } else {
+ melody_unison_velocity = 0;
+ }
+ } else {
+ melody_unison_velocity = midi_config.velocity;
+ }
+
+ if (record->event.pressed) {
+ if (my_tone_status[tone] == MIDI_INVALID_NOTE) {
+ uint8_t note = midi_compute_note(keycode);
+ midi_send_noteon(&midi_device, channel, note + offset, melody_unison_velocity);
+ dprintf("midi noteon channel:%d note:%d tone:%d velocity:%d\n", channel, note, tone, melody_unison_velocity);
+ my_tone_status[tone] = note; // store root_note status.
+ }
+ } else {
+ uint8_t note = my_tone_status[tone];
+ if (note != MIDI_INVALID_NOTE) {
+ midi_send_noteoff(&midi_device, channel, note + offset, melody_unison_velocity);
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, melody_unison_velocity);
+ }
+ my_tone_status[tone] = MIDI_INVALID_NOTE;
+ }
+}
+
+#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.
+# ifdef CONSOLE_ENABLE
+ uprintf("keylight_manager, NO_LED\n");
+# endif
+ }
+
+ if (record->event.pressed) {
+ rgblight_sethsv_at(hue, sat, val, keylocation);
+ } else {
+ rgblight_sethsv_at(HSV_BLACK, keylocation);
+ }
+}
+
+#endif // RGBLIGHT_ENABLE
+
diff --git a/keyboards/giabalanai/giabalanai.h b/keyboards/giabalanai/giabalanai.h
new file mode 100644
index 0000000000..df4759f00f
--- /dev/null
+++ b/keyboards/giabalanai/giabalanai.h
@@ -0,0 +1,132 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#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, l06, l07, l08, l09, l0a, l0b, \
+ l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l1a, l1b, \
+ l20, l21, l22, l23, l24, l25, l26, l27, l28, l29, l2a, l2b, \
+ l30, l31, l32, l33, l34, l35, l36, l37, l38, l39, l3a, l3b, \
+ l40, l41, l42, l43, l44, l45, l46, l47, l48, l49, l4a, l4b, \
+ \
+ r20, \
+ 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, \
+ 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 } \
+}
+
+#define LAYOUT_giabarinaix2( \
+ l00, l01, l02, l03, l04, l05, l06, l07, l08, l09, l0a, l0b, \
+ l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l1a, l1b, \
+ l20, l21, l22, l23, l24, l25, l26, l27, l28, l29, l2a, l2b, \
+