~ruther/qmk_firmware

40383089d035f69101851831f756508271fff103 — Drashna Jaelre 6 years ago 7f0def7
Keymap: Update for Drashna code - Proton C Prep Edition (#4708)

* Make CRKBD keylogger output actually show tap keys

* check MT/LT for twinkling

* Add ortho 5x12 support for fractal keyboard

* Use newer interface for setting pins/ports

* Remove custom unicode methods

* Reomve unicode input info

* Odd rules issue

* Redefine REST note to be more pleasing

* Properly disable PM LEDs with GPIO commands

* Update gitlab CI yaml file

* Remove extra mod tap check

* Remove initial state on ergodox glow

* Rev6 Cleanup

* Fix KC_MAKE macro

* Update GitLab CI yaml file

* More GitLab CI changes

* One final GitLab CI change

* Remove unneeded unicode support

* Optimize KC_MAKE
M keyboards/crkbd/keymaps/drashna/keymap.c => keyboards/crkbd/keymaps/drashna/keymap.c +13 -11
@@ 88,16 88,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};

void matrix_init_keymap(void) {
    //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
    #ifdef SSD1306OLED
        iota_gfx_init(!has_usb());   // turns on the display
    #endif

  DDRD &= ~(1<<5);
  PORTD &= ~(1<<5);

  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
  //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  #ifdef SSD1306OLED
    iota_gfx_init(!has_usb());   // turns on the display
  #endif

  #ifndef CONVERT_TO_PROTON_C
    setPinOutput(D5);
    writePinHigh(D5);

    setPinOutput(B0);
    writePinHigh(B0);
  #endif
}

//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h


@@ 126,10 128,10 @@ const char code_to_name[60] = {

void set_keylog(uint16_t keycode, keyrecord_t *record) {
  char name = ' ';
  if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
  if (keycode < 60) {
    name = code_to_name[keycode];
  }

  // update keylog
  snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
           record->event.key.row, record->event.key.col,

M keyboards/iris/keymaps/drashna/keymap.c => keyboards/iris/keymaps/drashna/keymap.c +6 -4
@@ 89,9 89,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {


void matrix_init_keymap(void) {
  DDRD &= ~(1<<5);
  PORTD &= ~(1<<5);
  #ifndef CONVERT_TO_PROTON_C
    setPinOutput(D5);
    writePinHigh(D5);

  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
    setPinOutput(B0);
    writePinHigh(B0);
  #endif
}

M keyboards/orthodox/keymaps/drashna/keymap.c => keyboards/orthodox/keymaps/drashna/keymap.c +6 -4
@@ 97,9 97,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};

void matrix_init_keymap(void) {
  DDRD &= ~(1<<5);
  PORTD &= ~(1<<5);
  #ifndef CONVERT_TO_PROTON_C
    setPinOutput(D5);
    writePinHigh(D5);

  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
    setPinOutput(B0);
    writePinHigh(B0);
  #endif
}

M keyboards/viterbi/keymaps/drashna/keymap.c => keyboards/viterbi/keymaps/drashna/keymap.c +7 -4
@@ 87,10 87,13 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {




void matrix_init_keymap(void) {
  DDRD &= ~(1<<5);
  PORTD &= ~(1<<5);
  #ifndef CONVERT_TO_PROTON_C
    setPinOutput(D5);
    writePinHigh(D5);

  DDRB &= ~(1<<0);
  PORTB &= ~(1<<0);
    setPinOutput(B0);
    writePinHigh(B0);
  #endif
}

M layouts/community/ergodox/drashna/keymap.c => layouts/community/ergodox/drashna/keymap.c +2 -8
@@ 20,7 20,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifdef UNICODEMAP_ENABLE
#include "drashna_unicode.h"
#endif // UNICODEMAP_ENABLE
extern uint8_t input_mode;

#ifdef RGB_MATRIX_ENABLE
extern bool g_suspend_state;


@@ 425,17 424,12 @@ void rgb_matrix_indicators_user(void) {
}

void matrix_init_keymap(void) {
#if 0
  #ifdef RGB_MATRIX_KEYPRESSES
    rgblight_mode(RGB_MATRIX_MULTISPLASH);
  #else
    rgblight_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
  #endif

  input_mode = 2;
}

#else
void matrix_init_keymap(void) {
  input_mode = 2;
#endif
}
#endif //RGB_MATRIX_INIT

M layouts/community/ergodox/drashna/rules.mk => layouts/community/ergodox/drashna/rules.mk +1 -1
@@ 1,6 1,6 @@
TAP_DANCE_ENABLE  = yes
SLEEP_LED_ENABLE  = no  # Breathing sleep LED during USB suspend
COMMAND_ENABLE    = yes  # Commands for debug and configuration
COMMAND_ENABLE    = no  # Commands for debug and configuration
ifneq (,$(findstring ergodox_ez,$(KEYBOARD)))
  RGBLIGHT_ENABLE = yes
  RGB_MATRIX_ENABLE = no

M layouts/community/ergodox/drashna_glow/rules.mk => layouts/community/ergodox/drashna_glow/rules.mk +2 -0
@@ 7,3 7,5 @@ ifneq (,$(findstring ergodox_ez,$(KEYBOARD)))
  RGBLIGHT_ENABLE = no
  RGB_MATRIX_ENABLE = yes
endif

COMMAND_ENABLE = no

M layouts/community/ortho_4x12/drashna/config.h => layouts/community/ortho_4x12/drashna/config.h +1 -4
@@ 1,5 1,4 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#pragma once


#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)


@@ 61,5 60,3 @@

/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2

#endif

M layouts/community/ortho_4x12/drashna/keymap.c => layouts/community/ortho_4x12/drashna/keymap.c +12 -1
@@ 94,7 94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST,
  VRSN,    _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
  _______, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, TG_MODS,
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_NUKE
)




@@ 219,4 219,15 @@ void rgb_matrix_indicators_user(void) {
void matrix_init_keymap(void) {
  rgblight_mode(RGB_MATRIX_MULTISPLASH);
}
#else //RGB_MATRIX_INIT

void matrix_init_keymap(void) {
  #ifndef CONVERT_TO_PROTON_C
    setPinOutput(D5);
    writePinHigh(D5);

    setPinOutput(B0);
    writePinHigh(B0);
  #endif
}
#endif //RGB_MATRIX_INIT

A layouts/community/ortho_5x12/drashna/config.h => layouts/community/ortho_5x12/drashna/config.h +16 -0
@@ 0,0 1,16 @@
#pragma once


/* ws2812 RGB LED */
#if defined(KEYBOARD_fractal)
  #define RGB_DI_PIN D2
  #undef RGBLED_NUM
  #define RGBLIGHT_ANIMATIONS
  #define RGBLED_NUM 29     // Number of LEDs
  #undef RGBLIGHT_HUE_STEP
  #define RGBLIGHT_HUE_STEP 8
  #undef RGBLIGHT_SAT_STEP
  #define RGBLIGHT_SAT_STEP 8
  #undef RGBLIGHT_VAL_STEP
  #define RGBLIGHT_VAL_STEP 8
#endif

A layouts/community/ortho_5x12/drashna/keymap.c => layouts/community/ortho_5x12/drashna/keymap.c +156 -0
@@ 0,0 1,156 @@
/* Copyright 2015-2017 Jack Humbert
 * Modified by KeyPCB for the Fractal keyboard
 * Backlight isn't on the Fractal, so I've removed the keycode from the keymaps
 *
 * 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
#include "drashna.h"

#define LAYOUT_ortho_5x12_base( \
    K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
    K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A,  \
    K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A  \
  ) \
  LAYOUT_ortho_5x12_wrapper( \
    KC_GRV,  K01,    K02,     K03,      K04,     K05,     K06,     K07,     K08,     K09,     K0A,     KC_BSPC, \
    KC_TAB,  K11,    K12,     K13,      K14,     K15,     K16,     K17,     K18,     K19,     K1A,     KC_BSPC, \
    KC_ESC,  K21,    K22,     K23,      K24,     K25,     K26,     K27,     K28,     K29,     K2A,     KC_QUOT, \
    KC_MLSF, CTL_T(K31), K32, K33,      K34,     K35,     K36,     K37,     K38,     K39,  CTL_T(K3A), KC_ENT,  \
    KC_NO,   OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
  )
#define LAYOUT_ortho_5x12_base_wrapper(...)       LAYOUT_ortho_5x12_base(__VA_ARGS__)


const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[_QWERTY] = LAYOUT_ortho_5x12_base_wrapper(
  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
  _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
  _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
  _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
),

[_COLEMAK] = LAYOUT_ortho_5x12_base_wrapper(
  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
  _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
  _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
  _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
),

[_DVORAK] = LAYOUT_ortho_5x12_base_wrapper(
  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
  _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
  _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
  _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
),

[_WORKMAN] = LAYOUT_ortho_5x12_base_wrapper(
  ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
  _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
  _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
  _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
),

[_MODS] = LAYOUT_ortho_5x12_wrapper(
  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
  KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, _______,
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),

/* Lower
 * ,-----------------------------------------------------------------------------------.
 * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_LOWER] = LAYOUT_ortho_5x12_wrapper( \
  _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
  KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_PIPE,
  KC_DEL,  _________________LOWER_L2__________________, _________________LOWER_R2__________________, _______,
  _______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),

/* Raise
 * ,-----------------------------------------------------------------------------------.
 * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_RAISE] = LAYOUT_ortho_5x12_wrapper( \
  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
  KC_GRV,  _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
  KC_DEL,  _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
  _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
  _______, _______, _______, _______, _______, _______, _______, _________________RAISE_R3__________________
),

/* Adjust (Lower + Raise)
 * ,-----------------------------------------------------------------------------------.
 * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |      |      |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff|      |      |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |             |      |      |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */
[_ADJUST] = LAYOUT_ortho_5x12_wrapper( \
  KC_MAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RST,
  VRSN,    _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, EEP_RST,
  _______, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, _______,
  _______, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, TG_MODS,
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)


};

bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
  }
  return true;
};

void matrix_init_keymap(void) {
#ifdef KEYBOARD_fractal
    setPinOutput(D5);
    writePinHigh(D5);

    setPinOutput(B0);
    writePinHigh(B0);
#endif
}

A layouts/community/ortho_5x12/drashna/rules.mk => layouts/community/ortho_5x12/drashna/rules.mk +23 -0
@@ 0,0 1,23 @@
BOOTMAGIC_ENABLE  = no       # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE   = no       # Mouse keys(+4700)
EXTRAKEY_ENABLE   = yes       # Audio control and System control(+450)
CONSOLE_ENABLE    = no         # Console for debug(+400)
COMMAND_ENABLE    = no        # Commands for debug and configuration
TAP_DANCE_ENABLE  = no
AUDIO_ENABLE      = yes
ifneq (,$(findstring fractal,$(KEYBOARD))) # Make sure it IS the Planck Light
  RGB_MATRIX_ENABLE   = no
  AUDIO_ENABLE        = no
  RGBLIGHT_ENABLE     = yes
  RGBLIGHT_TWINKLE    = yes
  BOOTLOADER          = qmk-dfu
endif

ifeq ($(strip $(PROTOCOL)), VUSB)
NKRO_ENABLE       = no
else
NKRO_ENABLE       = yes
endif


MACROS_ENABLED    = no

M users/drashna/.gitlab-ci.yml => users/drashna/.gitlab-ci.yml +61 -9
@@ 1,26 1,78 @@
stages:
  - test
  - build
  - deploy

qmk_firmware:
Tests:
  stage: test
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
  tags:
    - linux
  image: ubuntu:18.10
  before_script:
    - apt-get update -qy
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - avr-gcc --version
    - uname -a
  script:
    - make test:all
    - make planck/rev6:default

QMK Firmware Defaults:
  stage: deploy
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
  tags:
    - linux
  image: ubuntu:18.10
  before_script:
    - apt-get update -qy
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - avr-gcc --version
    - uname -a
  script:
    - make test:all
    - make all:default -j16

Drashna Firmware:
  stage: build
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
  tags:
    - linux
  image: ubuntu
  image: ubuntu:18.10
  before_script:
    - apt-get update -qy
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - avr-gcc --version
  script:
    - make iris/rev2:drashna iris/rev2:drashna_old ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna planck/rev6:drashna fractal:drashna
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    paths:
      - ./*.hex
      - ./*.bin
    expire_in: 1 month

Firmware Deploy:
  stage: deploy
  dependencies:
    - Drashna Firmware
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
  tags:
    - linux
  image: ubuntu:18.10
  before_script:
    - apt-get update -qy
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util diffutils gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
    - avr-gcc --version
  script:
    - make iris/rev2:drashna:production iris/rev2:drashna_old:production ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna:production orthodox/rev1:drashna:production orthodox/rev3:drashna:production crkbd:drashna:production planck/light:drashna:production
    - make iris/rev2:drashna:production iris/rev2:drashna_old:production ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna:production orthodox/rev1:drashna:production orthodox/rev3:drashna:production crkbd:drashna:production planck/light:drashna planck/rev6:drashna fractal:drashna:production
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
    paths:
      - ./*.hex
      - ./*.bin
  only:
    - master
    - drashna_keymaps
    - merge-requests
    - branches
    expire_in: 1 month

M users/drashna/config.h => users/drashna/config.h +6 -2
@@ 14,8 14,12 @@
#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
// #ifdef RGBLIGHT_ENABLE
// #define NO_MUSIC_MODE
// #endif //RGBLIGHT_ENABLE
#endif
// #endif //RGBLIGHT_ENABLE/
#ifndef __arm__
#undef  NOTE_REST
#define NOTE_REST         1.00f
#endif // !__arm__
#endif // !AUDIO_ENABLE

#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_SLEEP

M users/drashna/process_records.c => users/drashna/process_records.c +22 -19
@@ 51,27 51,30 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {

  case KC_MAKE:  // Compiles the firmware, and adds the flash command based on keyboard bootloader
    if (!record->event.pressed) {
      uint8_t temp_mod = get_mods();
      uint8_t temp_osm = get_oneshot_mods();
      clear_mods(); clear_oneshot_mods();
      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
      if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
        #if defined(__ARM__)
          send_string_with_delay_P(PSTR(":dfu-util"), 10);
        #elif defined(BOOTLOADER_DFU)
          send_string_with_delay_P(PSTR(":dfu"), 10);
        #elif defined(BOOTLOADER_HALFKAY)
          send_string_with_delay_P(PSTR(":teensy"), 10);
        #elif defined(BOOTLOADER_CATERINA)
          send_string_with_delay_P(PSTR(":avrdude"), 10);
        #endif // bootloader options
      }
      #if !defined(KEYBOARD_viterbi)
        uint8_t temp_mod = get_mods();
        uint8_t temp_osm = get_oneshot_mods();
        clear_mods(); clear_oneshot_mods();
      #endif
      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), MACRO_TIMER);
      #if defined(KEYBOARD_viterbi)
        send_string_with_delay_P(PSTR(":dfu"), 10);
        send_string_with_delay_P(PSTR(":dfu" SS_TAP(X_ENTER)), MACRO_TIMER);
      #else
        if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
          #if defined(__arm__)
            send_string_with_delay_P(PSTR(":dfu-util"), MACRO_TIMER);
          #elif defined(BOOTLOADER_DFU)
            send_string_with_delay_P(PSTR(":dfu"), MACRO_TIMER);
          #elif defined(BOOTLOADER_HALFKAY)
            send_string_with_delay_P(PSTR(":teensy"), MACRO_TIMER);
          #elif defined(BOOTLOADER_CATERINA)
            send_string_with_delay_P(PSTR(":avrdude"), MACRO_TIMER);
          #endif // bootloader options
        }
        if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), MACRO_TIMER); }
        send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), MACRO_TIMER);
        set_mods(temp_mod);
      #endif
      if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); }
      send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
      set_mods(temp_mod);
    }
    break;


M users/drashna/rgb_stuff.c => users/drashna/rgb_stuff.c +4 -1
@@ 200,7 200,10 @@ void start_rgb_light(void) {


bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
  if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
    keycode = keycode & 0xFF;
  }
  switch (keycode) {
#ifdef RGBLIGHT_TWINKLE
    case KC_A ... KC_SLASH:
    case KC_F1 ... KC_F12:

M users/drashna/rules.mk => users/drashna/rules.mk +0 -13
@@ 42,16 42,3 @@ ifdef CONSOLE_ENABLE
    OPT_DEFS += -DKEYLOGGER_ENABLE
  endif
endif


ifeq ($(strip $(UCIS_ENABLE)), yes)
  SRC += send_unicode.c
endif

ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
  SRC += send_unicode.c
endif

ifeq ($(strip $(UNICODE_ENABLE)), yes)
  SRC += send_unicode.c
endif

D users/drashna/send_unicode.c => users/drashna/send_unicode.c +0 -112
@@ 1,112 0,0 @@
// Written by konstantin: vomindoraan
#include "send_unicode.h"
#include <ctype.h>
#include <string.h>

__attribute__((weak))
void send_unicode_hex_string(const char* str) {
  if (!str) { return; } // Safety net

  while (*str) {
    // Find the next code point (token) in the string
    for (; *str == ' '; str++);
    size_t n = strcspn(str, " "); // Length of the current token
    char code_point[n+1];
    strncpy(code_point, str, n);
    code_point[n] = '\0'; // Make sure it's null-terminated

    // Normalize the code point: make all hex digits lowercase
    for (char *p = code_point; *p; p++) {
      *p = tolower((unsigned char)*p);
    }

    // Send the code point as a Unicode input string
    unicode_input_start();
    send_string(code_point);
    unicode_input_finish();

    str += n; // Move to the first ' ' (or '\0') after the current token
  }
}

// (ノಠ痊ಠ)ノ彡┻━┻
//   send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");

//Old code
// (╯°□°)╯ ︵ ┻━┻
      #if 0
      register_code(KC_RSFT);
      tap(KC_9);
      unregister_code(KC_RSFT);
      process_unicode((0x256F | QK_UNICODE), record); // Arm
      process_unicode((0x00B0 | QK_UNICODE), record); // Eye
      process_unicode((0x25A1 | QK_UNICODE), record); // Mouth
      process_unicode((0x00B0 | QK_UNICODE), record); // Eye
      register_code(KC_RSFT);
      tap(KC_0);
      unregister_code(KC_RSFT);
      process_unicode((0x256F | QK_UNICODE), record); // Arm
      tap(KC_SPC);
      process_unicode((0x0361 | QK_UNICODE), record); // Flippy
      tap(KC_SPC);
      process_unicode((0x253B | QK_UNICODE), record); // Table
      process_unicode((0x2501 | QK_UNICODE), record); // Table
      process_unicode((0x253B | QK_UNICODE), record); // Table
      #endif


// If you need a good converter: https://r12a.github.io/app-conversion/
uint8_t saved_mods;

void unicode_input_start (void) {
  // save current mods
  saved_mods = get_mods(); // Save current mods
  clear_mods(); // Unregister mods to start from a clean state

  switch(get_unicode_input_mode()) {
  case UC_OSX:
    register_code(KC_LALT);
    break;
  case UC_OSX_RALT:
    register_code(KC_RALT);
    break;
  case UC_LNX:
    register_code(KC_LCTL);
    register_code(KC_LSFT);
    register_code(KC_U);
    unregister_code(KC_U);
    unregister_code(KC_LSFT);
    unregister_code(KC_LCTL);
    break;
  case UC_WIN:
    register_code(KC_LALT);
    register_code(KC_PPLS);
    unregister_code(KC_PPLS);
    break;
  case UC_WINC:
    register_code(KC_RALT);
    unregister_code(KC_RALT);
    register_code(KC_U);
    unregister_code(KC_U);
    break;
  }
  wait_ms(UNICODE_TYPE_DELAY);
}

void unicode_input_finish (void) {
  switch(get_unicode_input_mode()) {
    case UC_OSX:
    case UC_WIN:
      unregister_code(KC_LALT);
      break;
    case UC_OSX_RALT:
      unregister_code(KC_RALT);
      break;
    case UC_LNX:
      register_code(KC_SPC);
      unregister_code(KC_SPC);
      break;
  }

  set_mods(saved_mods); // Reregister previously set mods
}

M users/drashna/wrappers.h => users/drashna/wrappers.h +1 -0
@@ 14,6 14,7 @@ expanded before being used as arguments to the LAYOUT_xxx macro.
#define KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__)
#define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__)
#define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)
#define LAYOUT_ortho_5x12_wrapper(...)       LAYOUT_ortho_5x12(__VA_ARGS__)

/*
Blocks for each of the four major keyboard layouts