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
This commit is contained in:
Drashna Jaelre 2018-12-31 14:29:56 -08:00 committed by MechMerlin
parent 7f0def77a2
commit 40383089d0
19 changed files with 339 additions and 193 deletions

View File

@ -93,11 +93,13 @@ void matrix_init_keymap(void) {
iota_gfx_init(!has_usb()); // turns on the display
#endif
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
}
//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,

View File

@ -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
}

View File

@ -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
}

View File

@ -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);
DDRB &= ~(1<<0);
PORTB &= ~(1<<0);
void matrix_init_keymap(void) {
#ifndef CONVERT_TO_PROTON_C
setPinOutput(D5);
writePinHigh(D5);
setPinOutput(B0);
writePinHigh(B0);
#endif
}

View File

@ -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

View File

@ -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

View File

@ -7,3 +7,5 @@ ifneq (,$(findstring ergodox_ez,$(KEYBOARD)))
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
endif
COMMAND_ENABLE = no

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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 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 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
only:
- master
- drashna_keymaps
- merge-requests
- branches
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 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 planck/rev6:drashna fractal:drashna:production
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- ./*.hex
- ./*.bin
expire_in: 1 month

View File

@ -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

View File

@ -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) {
#if !defined(KEYBOARD_viterbi)
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);
#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" 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"), 10);
#if defined(__arm__)
send_string_with_delay_P(PSTR(":dfu-util"), MACRO_TIMER);
#elif defined(BOOTLOADER_DFU)
send_string_with_delay_P(PSTR(":dfu"), 10);
send_string_with_delay_P(PSTR(":dfu"), MACRO_TIMER);
#elif defined(BOOTLOADER_HALFKAY)
send_string_with_delay_P(PSTR(":teensy"), 10);
send_string_with_delay_P(PSTR(":teensy"), MACRO_TIMER);
#elif defined(BOOTLOADER_CATERINA)
send_string_with_delay_P(PSTR(":avrdude"), 10);
send_string_with_delay_P(PSTR(":avrdude"), MACRO_TIMER);
#endif // bootloader options
}
#if defined(KEYBOARD_viterbi)
send_string_with_delay_P(PSTR(":dfu"), 10);
#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);
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
}
break;

View File

@ -200,6 +200,9 @@ void start_rgb_light(void) {
bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
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:

View File

@ -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

View File

@ -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
}

View File

@ -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