From 99bffc2a21ebed07fd767ad2a9a7e1aadd491ef3 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 7 Feb 2021 23:16:15 +0000 Subject: Migrate some tmk_core files to quantum (#11791) * Migrate some tmk_core files to quantum * Fix build errors --- common_features.mk | 6 + keyboards/ai03/orbit/matrix.h | 3 - keyboards/ai03/orbit/transport.h | 2 +- keyboards/converter/adb_usb/led.h | 43 -- quantum/bitwise.c | 123 +++++ quantum/bitwise.h | 40 ++ quantum/command.c | 786 ++++++++++++++++++++++++++++ quantum/command.h | 163 ++++++ quantum/led.h | 54 ++ quantum/matrix.h | 76 +++ quantum/ring_buffer.h | 44 ++ quantum/split_common/transport.h | 2 +- quantum/util.h | 26 + tmk_core/common.mk | 6 - tmk_core/common/command.c | 786 ---------------------------- tmk_core/common/command.h | 163 ------ tmk_core/common/led.h | 54 -- tmk_core/common/matrix.h | 76 --- tmk_core/common/util.c | 123 ----- tmk_core/common/util.h | 47 -- tmk_core/protocol/arm_atsam/md_rgb_matrix.c | 2 +- tmk_core/ring_buffer.h | 45 -- 22 files changed, 1321 insertions(+), 1349 deletions(-) delete mode 100644 keyboards/ai03/orbit/matrix.h delete mode 100644 keyboards/converter/adb_usb/led.h create mode 100644 quantum/bitwise.c create mode 100644 quantum/bitwise.h create mode 100644 quantum/command.c create mode 100644 quantum/command.h create mode 100644 quantum/led.h create mode 100644 quantum/matrix.h create mode 100644 quantum/ring_buffer.h create mode 100644 quantum/util.h delete mode 100644 tmk_core/common/command.c delete mode 100644 tmk_core/common/command.h delete mode 100644 tmk_core/common/led.h delete mode 100644 tmk_core/common/matrix.h delete mode 100644 tmk_core/common/util.c delete mode 100644 tmk_core/common/util.h delete mode 100644 tmk_core/ring_buffer.h diff --git a/common_features.mk b/common_features.mk index b9cd084d29..f98a788ca2 100644 --- a/common_features.mk +++ b/common_features.mk @@ -17,6 +17,7 @@ SERIAL_PATH := $(QUANTUM_PATH)/serial_link QUANTUM_SRC += \ $(QUANTUM_DIR)/quantum.c \ + $(QUANTUM_DIR)/bitwise.c \ $(QUANTUM_DIR)/led.c \ $(QUANTUM_DIR)/keymap_common.c \ $(QUANTUM_DIR)/keycode_config.c @@ -36,6 +37,11 @@ ifeq ($(strip $(API_SYSEX_ENABLE)), yes) SRC += $(QUANTUM_DIR)/api.c endif +ifeq ($(strip $(COMMAND_ENABLE)), yes) + SRC += $(QUANTUM_DIR)/command.c + OPT_DEFS += -DCOMMAND_ENABLE +endif + ifeq ($(strip $(AUDIO_ENABLE)), yes) OPT_DEFS += -DAUDIO_ENABLE MUSIC_ENABLE = yes diff --git a/keyboards/ai03/orbit/matrix.h b/keyboards/ai03/orbit/matrix.h deleted file mode 100644 index 664372b769..0000000000 --- a/keyboards/ai03/orbit/matrix.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "common/matrix.h" diff --git a/keyboards/ai03/orbit/transport.h b/keyboards/ai03/orbit/transport.h index 67597652fd..757eae6f5c 100644 --- a/keyboards/ai03/orbit/transport.h +++ b/keyboards/ai03/orbit/transport.h @@ -1,6 +1,6 @@ #pragma once -#include "common/matrix.h" +#include "matrix.h" #define ROWS_PER_HAND (MATRIX_ROWS/2) diff --git a/keyboards/converter/adb_usb/led.h b/keyboards/converter/adb_usb/led.h deleted file mode 100644 index b33b6894e5..0000000000 --- a/keyboards/converter/adb_usb/led.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 . - -Ported to QMK by Peter Roe -*/ - -#ifndef LED_H -#define LED_H -#include - - -/* keyboard LEDs */ -#define USB_LED_NUM_LOCK 0 -#define USB_LED_CAPS_LOCK 1 -#define USB_LED_SCROLL_LOCK 2 -#define USB_LED_COMPOSE 3 -#define USB_LED_KANA 4 - - -#ifdef __cplusplus -extern "C" { -#endif - -void led_set(uint8_t usb_led); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/quantum/bitwise.c b/quantum/bitwise.c new file mode 100644 index 0000000000..861cca0054 --- /dev/null +++ b/quantum/bitwise.c @@ -0,0 +1,123 @@ +/* +Copyright 2011 Jun Wako + +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 "util.h" + +// bit population - return number of on-bit +__attribute__((noinline)) uint8_t bitpop(uint8_t bits) { + uint8_t c; + for (c = 0; bits; c++) bits &= bits - 1; + return c; + /* + const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; + return bit_count[bits>>4] + bit_count[bits&0x0F] + */ +} + +uint8_t bitpop16(uint16_t bits) { + uint8_t c; + for (c = 0; bits; c++) bits &= bits - 1; + return c; +} + +uint8_t bitpop32(uint32_t bits) { + uint8_t c; + for (c = 0; bits; c++) bits &= bits - 1; + return c; +} + +// most significant on-bit - return highest location of on-bit +// NOTE: return 0 when bit0 is on or all bits are off +__attribute__((noinline)) uint8_t biton(uint8_t bits) { + uint8_t n = 0; + if (bits >> 4) { + bits >>= 4; + n += 4; + } + if (bits >> 2) { + bits >>= 2; + n += 2; + } + if (bits >> 1) { + bits >>= 1; + n += 1; + } + return n; +} + +uint8_t biton16(uint16_t bits) { + uint8_t n = 0; + if (bits >> 8) { + bits >>= 8; + n += 8; + } + if (bits >> 4) { + bits >>= 4; + n += 4; + } + if (bits >> 2) { + bits >>= 2; + n += 2; + } + if (bits >> 1) { + bits >>= 1; + n += 1; + } + return n; +} + +uint8_t biton32(uint32_t bits) { + uint8_t n = 0; + if (bits >> 16) { + bits >>= 16; + n += 16; + } + if (bits >> 8) { + bits >>= 8; + n += 8; + } + if (bits >> 4) { + bits >>= 4; + n += 4; + } + if (bits >> 2) { + bits >>= 2; + n += 2; + } + if (bits >> 1) { + bits >>= 1; + n += 1; + } + return n; +} + +__attribute__((noinline)) uint8_t bitrev(uint8_t bits) { + bits = (bits & 0x0f) << 4 | (bits & 0xf0) >> 4; + bits = (bits & 0b00110011) << 2 | (bits & 0b11001100) >> 2; + bits = (bits & 0b01010101) << 1 | (bits & 0b10101010) >> 1; + return bits; +} + +uint16_t bitrev16(uint16_t bits) { + bits = bitrev(bits & 0x00ff) << 8 | bitrev((bits & 0xff00) >> 8); + return bits; +} + +uint32_t bitrev32(uint32_t bits) { + bits = (uint32_t)bitrev16(bits & 0x0000ffff) << 16 | bitrev16((bits & 0xffff0000) >> 16); + return bits; +} diff --git a/quantum/bitwise.h b/quantum/bitwise.h new file mode 100644 index 0000000000..276bc7437b --- /dev/null +++ b/quantum/bitwise.h @@ -0,0 +1,40 @@ +/* +Copyright 2011 Jun Wako + +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 + +#ifdef __cplusplus +extern "C" { +#endif + +uint8_t bitpop(uint8_t bits); +uint8_t bitpop16(uint16_t bits); +uint8_t bitpop32(uint32_t bits); + +uint8_t biton(uint8_t bits); +uint8_t biton16(uint16_t bits); +uint8_t biton32(uint32_t bits); + +uint8_t bitrev(uint8_t bits); +uint16_t bitrev16(uint16_t bits); +uint32_t bitrev32(uint32_t bits); + +#ifdef __cplusplus +} +#endif diff --git a/quantum/command.c b/quantum/command.c new file mode 100644 index 0000000000..59aa4e4d34 --- /dev/null +++ b/quantum/command.c @@ -0,0 +1,786 @@ +/* +Copyright 2011 Jun Wako + +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 +#include +#include "wait.h" +#include "keycode.h" +#include "host.h" +#include "keymap.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "timer.h" +#include "keyboard.h" +#include "bootloader.h" +#include "action_layer.h" +#include "action_util.h" +#include "eeconfig.h" +#include "sleep_led.h" +#include "led.h" +#include "command.h" +#include "quantum.h" +#include "version.h" + +#ifdef BACKLIGHT_ENABLE +# include "backlight.h" +#endif + +#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) +# include "mousekey.h" +#endif + +#ifdef AUDIO_ENABLE +# include "audio.h" +#endif /* AUDIO_ENABLE */ + +static bool command_common(uint8_t code); +static void command_common_help(void); +static void print_version(void); +static void print_status(void); +static bool command_console(uint8_t code); +static void command_console_help(void); +#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) +static bool mousekey_console(uint8_t code); +static void mousekey_console_help(void); +#endif + +static void switch_default_layer(uint8_t layer); + +command_state_t command_state = ONESHOT; + +bool command_proc(uint8_t code) { + switch (command_state) { + case ONESHOT: + if (!IS_COMMAND()) return false; + return (command_extra(code) || command_common(code)); + break; + case CONSOLE: + if (IS_COMMAND()) + return (command_extra(code) || command_common(code)); + else + return (command_console_extra(code) || command_console(code)); + break; +#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) + case MOUSEKEY: + mousekey_console(code); + break; +#endif + default: + command_state = ONESHOT; + return false; + } + return true; +} + +/* TODO: Refactoring is needed. */ +/* This allows to define extra commands. return false when not processed. */ +bool command_extra(uint8_t code) __attribute__((weak)); +bool command_extra(uint8_t code) { + (void)code; + return false; +} + +bool command_console_extra(uint8_t code) __attribute__((weak)); +bool command_console_extra(uint8_t code) { + (void)code; + return false; +} + +/*********************************************************** + * Command common + ***********************************************************/ +static void command_common_help(void) { + print("\n\t- Magic -\n" STR(MAGIC_KEY_DEBUG) ": Debug Message Toggle\n" STR(MAGIC_KEY_DEBUG_MATRIX) ": Matrix Debug Mode Toggle - Show keypresses in matrix grid\n" STR(MAGIC_KEY_DEBUG_KBD) ": Keyboard Debug Toggle - Show keypress report\n" STR(MAGIC_KEY_DEBUG_MOUSE) ": Debug Mouse Toggle\n" STR(MAGIC_KEY_VERSION) ": Version\n" STR(MAGIC_KEY_STATUS) ": Status\n" STR(MAGIC_KEY_CONSOLE) ": Activate Console Mode\n" + +#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM + STR(MAGIC_KEY_LAYER0) ": Switch to Layer 0\n" STR(MAGIC_KEY_LAYER1) ": Switch to Layer 1\n" STR(MAGIC_KEY_LAYER2) ": Switch to Layer 2\n" STR(MAGIC_KEY_LAYER3) ": Switch to Layer 3\n" STR(MAGIC_KEY_LAYER4) ": Switch to Layer 4\n" STR(MAGIC_KEY_LAYER5) ": Switch to Layer 5\n" STR(MAGIC_KEY_LAYER6) ": Switch to Layer 6\n" STR(MAGIC_KEY_LAYER7) ": Switch to Layer 7\n" STR(MAGIC_KEY_LAYER8) ": Switch to Layer 8\n" STR(MAGIC_KEY_LAYER9) ": Switch to Layer 9\n" +#endif + +#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS + "F1-F10: Switch to Layer 0-9 (F10 = L0)\n" +#endif + +#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS + "0-9: Switch to Layer 0-9\n" +#endif + + STR(MAGIC_KEY_LAYER0_ALT) ": Switch to Layer 0 (alternate)\n" + + STR(MAGIC_KEY_BOOTLOADER) ": Jump to Bootloader\n" STR(MAGIC_KEY_BOOTLOADER_ALT) ": Jump to Bootloader (alternate)\n" + +#ifdef KEYBOARD_LOCK_ENABLE + STR(MAGIC_KEY_LOCK) ": Lock Keyboard\n" +#endif + + STR(MAGIC_KEY_EEPROM) ": Print EEPROM Settings\n" STR(MAGIC_KEY_EEPROM_CLEAR) ": Clear EEPROM\n" + +#ifdef NKRO_ENABLE + STR(MAGIC_KEY_NKRO) ": NKRO Toggle\n" +#endif + +#ifdef SLEEP_LED_ENABLE + STR(MAGIC_KEY_SLEEP_LED) ": Sleep LED Test\n" +#endif + ); +} + +static void print_version(void) { + // print version & information + print("\n\t- Version -\n"); + print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") " + "PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") " + "VER: " STR(DEVICE_VER) "\n"); + print("BUILD: (" __DATE__ ")\n"); +#ifndef SKIP_VERSION +# ifdef PROTOCOL_CHIBIOS + print("CHIBIOS: " STR(CHIBIOS_VERSION) ", CONTRIB: " STR(CHIBIOS_CONTRIB_VERSION) "\n"); +# endif +#endif + + /* build options */ + print("OPTIONS:" + +#ifdef PROTOCOL_LUFA + " LUFA" +#endif +#ifdef PROTOCOL_VUSB + " VUSB" +#endif +#ifdef BOOTMAGIC_ENABLE + " BOOTMAGIC" +#endif +#ifdef MOUSEKEY_ENABLE + " MOUSEKEY" +#endif +#ifdef EXTRAKEY_ENABLE + " EXTRAKEY" +#endif +#ifdef CONSOLE_ENABLE + " CONSOLE" +#endif +#ifdef COMMAND_ENABLE + " COMMAND" +#endif +#ifdef NKRO_ENABLE + " NKRO" +#endif +#ifdef LTO_ENABLE + " LTO" +#endif + + " " STR(BOOTLOADER_SIZE) "\n"); + + print("GCC: " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__) +#if defined(__AVR__) + " AVR-LIBC: " __AVR_LIBC_VERSION_STRING__ " AVR_ARCH: avr" STR(__AVR_ARCH__) +#endif + "\n"); + + return; +} + +static void print_status(void) { + print("\n\t- Status -\n"); + + print_val_hex8(host_keyboard_leds()); +#ifndef PROTOCOL_VUSB + // these aren't set on the V-USB protocol, so we just ignore them for now + print_val_hex8(keyboard_protocol); + print_val_hex8(keyboard_idle); +#endif +#ifdef NKRO_ENABLE + print_val_hex8(keymap_config.nkro); +#endif + print_val_hex32(timer_read32()); + return; +} + +static void print_eeconfig(void) { +// Print these variables if NO_PRINT or USER_PRINT are not defined. +#if !defined(NO_PRINT) && !defined(USER_PRINT) + + print("default_layer: "); + print_dec(eeconfig_read_default_layer()); + print("\n"); + + debug_config_t dc; + dc.raw = eeconfig_read_debug(); + print("debug_config.raw: "); + print_hex8(dc.raw); + print("\n"); + print(".enable: "); + print_dec(dc.enable); + print("\n"); + print(".matrix: "); + print_dec(dc.matrix); + print("\n"); + print(".keyboard: "); + print_dec(dc.keyboard); + print("\n"); + print(".mouse: "); + print_dec(dc.mouse); + print("\n"); + + keymap_config_t kc; + kc.raw = eeconfig_read_keymap(); + print("keymap_config.raw: "); + print_hex8(kc.raw); + print("\n"); + print(".swap_control_capslock: "); + print_dec(kc.swap_control_capslock); + print("\n"); + print(".capslock_to_control: "); + print_dec(kc.capslock_to_control); + print("\n"); + print(".swap_lctl_lgui: "); + print_dec(kc.swap_lctl_lgui); + print("\n"); + print(".swap_rctl_rgui: "); + print_dec(kc.swap_rctl_rgui); + print("\n"); + print(".swap_lalt_lgui: "); + print_dec(kc.swap_lalt_lgui); + print("\n"); + print(".swap_ralt_rgui: "); + print_dec(kc.swap_ralt_rgui); + print("\n"); + print(".no_gui: "); + print_dec(kc.no_gui); + print("\n"); + print(".swap_grave_esc: "); + print_dec(kc.swap_grave_esc); + print("\n"); + print(".swap_backslash_backspace: "); + print_dec(kc.swap_backslash_backspace); + print("\n"); + print(".nkro: "); + print_dec(kc.nkro); + print("\n"); + +# ifdef BACKLIGHT_ENABLE + backlight_config_t bc; + bc.raw = eeconfig_read_backlight(); + print("backlight_config.raw: "); + print_hex8(bc.raw); + print("\n"); + print(".enable: "); + print_dec(bc.enable); + print("\n"); + print(".level: "); + print_dec(bc.level); + print("\n"); +# endif /* BACKLIGHT_ENABLE */ + +#endif /* !NO_PRINT */ +} + +static bool command_common(uint8_t code) { +#ifdef KEYBOARD_LOCK_ENABLE + static host_driver_t *host_driver = 0; +#endif + + switch (code) { +#ifdef SLEEP_LED_ENABLE + + // test breathing sleep LED + case MAGIC_KC(MAGIC_KEY_SLEEP_LED): + print("Sleep LED Test\n"); + sleep_led_toggle(); + led_set(host_keyboard_leds()); + break; +#endif + + // print stored eeprom config + case MAGIC_KC(MAGIC_KEY_EEPROM): + print("eeconfig:\n"); + print_eeconfig(); + break; + + // clear eeprom + case MAGIC_KC(MAGIC_KEY_EEPROM_CLEAR): + print("Clearing EEPROM\n"); + eeconfig_init(); + break; + +#ifdef KEYBOARD_LOCK_ENABLE + + // lock/unlock keyboard + case MAGIC_KC(MAGIC_KEY_LOCK): + if (host_get_driver()) { + host_driver = host_get_driver(); + clear_keyboard(); + host_set_driver(0); + print("Locked.\n"); + } else { + host_set_driver(host_driver); + print("Unlocked.\n"); + } + break; +#endif + + // print help + case MAGIC_KC(MAGIC_KEY_HELP): + case MAGIC_KC(MAGIC_KEY_HELP_ALT): + command_common_help(); + break; + + // activate console + case MAGIC_KC(MAGIC_KEY_CONSOLE): + debug_matrix = false; + debug_keyboard = false; + debug_mouse = false; + debug_enable = false; + command_console_help(); + print("C> "); + command_state = CONSOLE; + break; + + // jump to bootloader + case MAGIC_KC(MAGIC_KEY_BOOTLOADER): + case MAGIC_KC(MAGIC_KEY_BOOTLOADER_ALT): + print("\n\nJumping to bootloader... "); + reset_keyboard(); + break; + + // debug toggle + case MAGIC_KC(MAGIC_KEY_DEBUG): + debug_enable = !debug_enable; + if (debug_enable) { + print("\ndebug: on\n"); + } else { + print("\ndebug: off\n"); + debug_matrix = false; + debug_keyboard = false; + debug_mouse = false; + } + break; + + // debug matrix toggle + case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX): + debug_matrix = !debug_matrix; + if (debug_matrix) { + print("\nmatrix: on\n"); + debug_enable = true; + } else { + print("\nmatrix: off\n"); + } + break; + + // debug keyboard toggle + case MAGIC_KC(MAGIC_KEY_DEBUG_KBD): + debug_keyboard = !debug_keyboard; + if (debug_keyboard) { + print("\nkeyboard: on\n"); + debug_enable = true; + } else { + print("\nkeyboard: off\n"); + } + break; + + // debug mouse toggle + case MAGIC_KC(MAGIC_KEY_DEBUG_MOUSE): + debug_mouse = !debug_mouse; + if (debug_mouse) { + print("\nmouse: on\n"); + debug_enable = true; + } else { + print("\nmouse: off\n"); + } + break; + + // print version + case MAGIC_KC(MAGIC_KEY_VERSION): + print_version(); + break; + + // print status + case MAGIC_KC(MAGIC_KEY_STATUS): + print_status(); + break; + +#ifdef NKRO_ENABLE + + // NKRO toggle + case MAGIC_KC(MAGIC_KEY_NKRO): + clear_keyboard(); // clear to prevent stuck keys + keymap_config.nkro = !keymap_config.nkro; + if (keymap_config.nkro) { + print("NKRO: on\n"); + } else { + print("NKRO: off\n"); + } + break; +#endif + + // switch layers + + case MAGIC_KC(MAGIC_KEY_LAYER0_ALT): + switch_default_layer(0); + break; + +#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM + + case MAGIC_KC(MAGIC_KEY_LAYER0): + switch_default_layer(0); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER1): + switch_default_layer(1); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER2): + switch_default_layer(2); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER3): + switch_default_layer(3); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER4): + switch_default_layer(4); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER5): + switch_default_layer(5); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER6): + switch_default_layer(6); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER7): + switch_default_layer(7); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER8): + switch_default_layer(8); + break; + + case MAGIC_KC(MAGIC_KEY_LAYER9): + switch_default_layer(9); + break; +#endif + +#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS + + case KC_F1 ... KC_F9: + switch_default_layer((code - KC_F1) + 1); + break; + case KC_F10: + switch_default_layer(0); + break; +#endif + +#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS + + case KC_1 ... KC_9: + switch_default_layer((code - KC_1) + 1); + break; + case KC_0: + switch_default_layer(0); + break; +#endif + + default: + print("?"); + return false; + } + return true; +} + +/*********************************************************** + * Command console + ***********************************************************/ +static void command_console_help(void) { + print("\n\t- Console -\n" + "ESC/q: quit\n" +#ifdef MOUSEKEY_ENABLE + "m: mousekey\n" +#endif + ); +} + +static bool command_console(uint8_t code) { + switch (code) { + case KC_H: + case KC_SLASH: /* ? */ + command_console_help(); + break; + case KC_Q: + case KC_ESC: + command_state = ONESHOT; + return false; +#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) + case KC_M: + mousekey_console_help(); + print("M> "); + command_state = MOUSEKEY; + return true; +#endif + default: + print("?"); + return false; + } + print("C> "); + return true; +} + +#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) +/*********************************************************** + * Mousekey console + ***********************************************************/ +static uint8_t mousekey_param = 0; + +static void mousekey_param_print(void) { +// Print these variables if NO_PRINT or USER_PRINT are not defined. +# if !defined(NO_PRINT) && !defined(USER_PRINT) + print("\n\t- Values -\n"); + print("1: delay(*10ms): "); + pdec(mk_delay); + print("\n"); + print("2: interval(ms): "); + pdec(mk_interval); + print("\n"); + print("3: max_speed: "); + pdec(mk_max_speed); + print("\n"); + print("4: time_to_max: "); + pdec(mk_time_to_max); + print("\n"); + print("5: wheel_max_speed: "); + pdec(mk_wheel_max_speed); + print("\n"); + print("6: wheel_time_to_max: "); + pdec(mk_wheel_time_to_max); + print("\n"); +# endif /* !NO_PRINT */ +} + +//#define PRINT_SET_VAL(v) print(#v " = "); print_dec(v); print("\n"); +# define PRINT_SET_VAL(v) xprintf(# v " = %d\n", (v)) +static void mousekey_param_inc(uint8_t param, uint8_t inc) { + switch (param) { + case 1: + if (mk_delay + inc < UINT8_MAX) + mk_delay += inc; + else + mk_delay = UINT8_MAX; + PRINT_SET_VAL(mk_delay); + break; + case 2: + if (mk_interval + inc < UINT8_MAX) + mk_interval += inc; + else + mk_interval = UINT8_MAX; + PRINT_SET_VAL(mk_interval); + break; + case 3: + if (mk_max_speed + inc < UINT8_MAX) + mk_max_speed += inc; + else + mk_max_speed = UINT8_MAX; + PRINT_SET_VAL(mk_max_speed); + break; + case 4: + if (mk_time_to_max + inc < UINT8_MAX) + mk_time_to_max += inc; + else + mk_time_to_max = UINT8_MAX; + PRINT_SET_VAL(mk_time_to_max); + break; + case 5: + if (mk_wheel_max_speed + inc < UINT8_MAX) + mk_wheel_max_speed += inc; + else + mk_wheel_max_speed = UINT8_MAX; + PRINT_SET_VAL(mk_wheel_max_speed); + break; + case 6: + if (mk_wheel_time_to_max + inc < UINT8_MAX) + mk_wheel_time_to_max += inc; + else + mk_wheel_time_to_max = UINT8_MAX; + PRINT_SET_VAL(mk_wheel_time_to_max); + break; + } +} + +static void mousekey_param_dec(uint8_t param, uint8_t dec) { + switch (param) { + case 1: + if (mk_delay > dec) + mk_delay -= dec; + else + mk_delay = 0; + PRINT_SET_VAL(mk_delay); + break; + case 2: + if (mk_interval > dec) + mk_interval -= dec; + else + mk_interval = 0; + PRINT_SET_VAL(mk_interval); + break; + case 3: + if (mk_max_speed > dec) + mk_max_speed -= dec; + else + mk_max_speed = 0; + PRINT_SET_VAL(mk_max_speed); + break; + case 4: + if (mk_time_to_max > dec) + mk_time_to_max -= dec; + else + mk_time_to_max = 0; + PRINT_SET_VAL(mk_time_to_max); + break; + case 5: + if (mk_wheel_max_speed > dec) + mk_wheel_max_speed -= dec; + else + mk_wheel_max_speed = 0; + PRINT_SET_VAL(mk_wheel_max_speed); + break; + case 6: + if (mk_wheel_time_to_max > dec) + mk_wheel_time_to_max -= dec; + else + mk_wheel_time_to_max = 0; + PRINT_SET_VAL(mk_wheel_time_to_max); + break; + } +} + +static void mousekey_console_help(void) { + print("\n\t- Mousekey -\n" + "ESC/q: quit\n" + "1: delay(*10ms)\n" + "2: interval(ms)\n" + "3: max_speed\n" + "4: time_to_max\n" + "5: wheel_max_speed\n" + "6: wheel_time_to_max\n" + "\n" + "p: print values\n" + "d: set defaults\n" + "up: +1\n" + "down: -1\n" + "pgup: +10\n" + "pgdown: -10\n" + "\n" + "speed = delta * max_speed * (repeat / time_to_max)\n"); + xprintf("where delta: cursor=%d, wheel=%d\n" + "See http://en.wikipedia.org/wiki/Mouse_keys\n", + MOUSEKEY_MOVE_DELTA, MOUSEKEY_WHEEL_DELTA); +} + +static bool mousekey_console(uint8_t code) { + switch (code) { + case KC_H: + case KC_SLASH: /* ? */ + mousekey_console_help(); + break; + case KC_Q: + case KC_ESC: + if (mousekey_param) { + mousekey_param = 0; + } else { + print("C> "); + command_state = CONSOLE; + return false; + } + break; + case KC_P: + mousekey_param_print(); + break; + case KC_1: + case KC_2: + case KC_3: + case KC_4: + case KC_5: + case KC_6: + mousekey_param = numkey2num(code); + break; + case KC_UP: + mousekey_param_inc(mousekey_param, 1); + break; + case KC_DOWN: + mousekey_param_dec(mousekey_param, 1); + break; + case KC_PGUP: + mousekey_param_inc(mousekey_param, 10); + break; + case KC_PGDN: + mousekey_param_dec(mousekey_param, 10); + break; + case KC_D: + mk_delay = MOUSEKEY_DELAY / 10; + mk_interval = MOUSEKEY_INTERVAL; + mk_max_speed = MOUSEKEY_MAX_SPEED; + mk_time_to_max = MOUSEKEY_TIME_TO_MAX; + mk_wheel_max_speed = MOUSEKEY_WHEEL_MAX_SPEED; + mk_wheel_time_to_max = MOUSEKEY_WHEEL_TIME_TO_MAX; + print("set default\n"); + break; + default: + print("?"); + return false; + } + if (mousekey_param) { + xprintf("M%d> ", mousekey_param); + } else { + print("M>"); + } + return true; +} +#endif + +/*********************************************************** + * Utilities + ***********************************************************/ +uint8_t numkey2num(uint8_t code) { + switch (code) { + case KC_1: + return 1; + case KC_2: + return 2; + case KC_3: + return 3; + case KC_4: + return 4; + case KC_5: + return 5; + case KC_6: + return 6; + case KC_7: + return 7; + case KC_8: + return 8; + case KC_9: + return 9; + case KC_0: + return 0; + } + return 0; +} + +static void switch_default_layer(uint8_t layer) { + xprintf("L%d\n", layer); + default_layer_set(1UL << layer); + clear_keyboard(); +} diff --git a/quantum/command.h b/quantum/command.h new file mode 100644 index 0000000000..4f77be085c --- /dev/null +++ b/quantum/command.h @@ -0,0 +1,163 @@ +/* +Copyright 2011 Jun Wako + +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 + +/* FIXME: Add doxygen comments for the behavioral defines in here. */ + +/* TODO: Refactoring */ +typedef enum { ONESHOT, CONSOLE, MOUSEKEY } command_state_t; +extern command_state_t command_state; + +/* This allows to extend commands. Return false when command is not processed. */ +bool command_extra(uint8_t code); +bool command_console_extra(uint8_t code); + +#ifdef COMMAND_ENABLE +uint8_t numkey2num(uint8_t code); +bool command_proc(uint8_t code); +#else +# define command_proc(code) false +#endif + +#ifndef IS_COMMAND +# define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT) +#endif + +#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +# define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +#endif + +#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +# define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +#endif + +#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +# define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false +#endif + +#ifndef MAGIC_KEY_HELP +# define MAGIC_KEY_HELP H +#endif + +#ifndef MAGIC_KEY_HELP_ALT +# define MAGIC_KEY_HELP_ALT SLASH +#endif + +#ifndef MAGIC_KEY_DEBUG +# define MAGIC_KEY_DEBUG D +#endif + +#ifndef MAGIC_KEY_DEBUG_MATRIX +# define MAGIC_KEY_DEBUG_MATRIX X +#endif + +#ifndef MAGIC_KEY_DEBUG_KBD +# define MAGIC_KEY_DEBUG_KBD K +#endif + +#ifndef MAGIC_KEY_DEBUG_MOUSE +# define MAGIC_KEY_DEBUG_MOUSE M +#endif + +#ifndef MAGIC_KEY_VERSION +# define MAGIC_KEY_VERSION V +#endif + +#ifndef MAGIC_KEY_STATUS +# define MAGIC_KEY_STATUS S +#endif + +#ifndef MAGIC_KEY_CONSOLE +# define MAGIC_KEY_CONSOLE C +#endif + +#ifndef MAGIC_KEY_LAYER0 +# define MAGIC_KEY_LAYER0 0 +#endif + +#ifndef MAGIC_KEY_LAYER0_ALT +# define MAGIC_KEY_LAYER0_ALT GRAVE +#endif + +#ifndef MAGIC_KEY_LAYER1 +# define MAGIC_KEY_LAYER1 1 +#endif + +#ifndef MAGIC_KEY_LAYER2 +# define MAGIC_KEY_LAYER2 2 +#endif + +#ifndef MAGIC_KEY_LAYER3 +# define MAGIC_KEY_LAYER3 3 +#endif + +#ifndef MAGIC_KEY_LAYER4 +# define MAGIC_KEY_LAYER4 4 +#endif + +#ifndef MAGIC_KEY_LAYER5 +# define MAGIC_KEY_LAYER5 5 +#endif + +#ifndef MAGIC_KEY_LAYER6 +# define MAGIC_KEY_LAYER6 6 +#endif + +#ifndef MAGIC_KEY_LAYER7 +# define MAGIC_KEY_LAYER7 7 +#endif + +#ifndef MAGIC_KEY_LAYER8 +# define MAGIC_KEY_LAYER8 8 +#endif + +#ifndef MAGIC_KEY_LAYER9 +# define MAGIC_KEY_LAYER9 9 +#endif + +#ifndef MAGIC_KEY_BOOTLOADER +# define MAGIC_KEY_BOOTLOADER B +#endif + +#ifndef MAGIC_KEY_BOOTLOADER_ALT +# define MAGIC_KEY_BOOTLOADER_ALT ESC +#endif + +#ifndef MAGIC_KEY_LOCK +# define MAGIC_KEY_LOCK CAPS +#endif + +#ifndef MAGIC_KEY_EEPROM +# define MAGIC_KEY_EEPROM E +#endif + +#ifndef MAGIC_KEY_EEPROM_CLEAR +# define MAGIC_KEY_EEPROM_CLEAR BSPACE +#endif + +#ifndef MAGIC_KEY_NKRO +# define MAGIC_KEY_NKRO N +#endif + +#ifndef MAGIC_KEY_SLEEP_LED +# define MAGIC_KEY_SLEEP_LED Z + +#endif + +#define XMAGIC_KC(key) KC_##key +#define MAGIC_KC(key) XMAGIC_KC(key) diff --git a/quantum/led.h b/quantum/led.h new file mode 100644 index 0000000000..0fe38ea035 --- /dev/null +++ b/quantum/led.h @@ -0,0 +1,54 @@ +/* +Copyright 2011 Jun Wako + +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 +#include + +/* FIXME: Add doxygen comments here. */ + +/* keyboard LEDs */ +#define USB_LED_NUM_LOCK 0 +#define USB_LED_CAPS_LOCK 1 +#define USB_LED_SCROLL_LOCK 2 +#define USB_LED_COMPOSE 3 +#define USB_LED_KANA 4 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef union { + uint8_t raw; + struct { + bool num_lock : 1; + bool caps_lock : 1; + bool scroll_lock : 1; + bool compose : 1; + bool kana : 1; + uint8_t reserved : 3; + }; +} led_t; + +void led_set(uint8_t usb_led); + +void led_init_ports(void); + +#ifdef __cplusplus +} +#endif diff --git a/quantum/matrix.h b/quantum/matrix.h new file mode 100644 index 0000000000..b570227a31 --- /dev/null +++ b/quantum/matrix.h @@ -0,0 +1,76 @@ +/* +Copyright 2011 Jun Wako + +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 +#include + +#if (MATRIX_COLS <= 8) +typedef uint8_t matrix_row_t; +#elif (MATRIX_COLS <= 16) +typedef uint16_t matrix_row_t; +#elif (MATRIX_COLS <= 32) +typedef uint32_t matrix_row_t; +#else +# error "MATRIX_COLS: invalid value" +#endif + +#define MATRIX_ROW_SHIFTER ((matrix_row_t)1) + +#ifdef __cplusplus +extern "C" { +#endif + +/* number of matrix rows */ +uint8_t matrix_rows(void); +/* number of matrix columns */ +uint8_t matrix_cols(void); +/* should be called at early stage of startup before matrix_init.(optional) */ +void matrix_setup(void); +/* intialize matrix for scaning. */ +void matrix_init(void); +/* scan all key states on matrix */ +uint8_t matrix_scan(void); +/* whether modified from previous scan. used after matrix_scan. */ +bool matrix_is_modified(void) __attribute__((deprecated)); +/* whether a switch is on */ +bool matrix_is_on(uint8_t row, uint8_t col); +/* matrix state on row */ +matrix_row_t matrix_get_row(uint8_t row); +/* print matrix for debug */ +void matrix_print(void); +/* delay between changing matrix pin state and reading values */ +void matrix_io_delay(void); + +/* power control */ +void matrix_power_up(void); +void matrix_power_down(void); + +/* executes code for Quantum */ +void matrix_init_quantum(void); +void matrix_scan_quantum(void); + +void matrix_init_kb(void); +void matrix_scan_kb(void); + +void matrix_init_user(void); +void matrix_scan_user(void); + +#ifdef __cplusplus +} +#endif diff --git a/quantum/ring_buffer.h b/quantum/ring_buffer.h new file mode 100644 index 0000000000..284745ca8e --- /dev/null +++ b/quantum/ring_buffer.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include + +#ifndef RBUF_SIZE +# define RBUF_SIZE 32 +#endif + +static uint8_t rbuf[RBUF_SIZE]; +static uint8_t rbuf_head = 0; +static uint8_t rbuf_tail = 0; +static inline bool rbuf_enqueue(uint8_t data) { + bool ret = false; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + uint8_t next = (rbuf_head + 1) % RBUF_SIZE; + if (next != rbuf_tail) { + rbuf[rbuf_head] = data; + rbuf_head = next; + ret = true; + } + } + return ret; +} +static inline uint8_t rbuf_dequeue(void) { + uint8_t val = 0; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + if (rbuf_head != rbuf_tail) { + val = rbuf[rbuf_tail]; + rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE; + } + } + + return val; +} +static inline bool rbuf_has_data(void) { + bool has_data; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { has_data = (rbuf_head != rbuf_tail); } + return has_data; +} +static inline void rbuf_clear(void) { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { rbuf_head = rbuf_tail = 0; } +} diff --git a/quantum/split_common/transport.h b/quantum/split_common/transport.h index f3e752bf9b..c667bfab85 100644 --- a/quantum/split_common/transport.h +++ b/quantum/split_common/transport.h @@ -1,6 +1,6 @@ #pragma once -#include "common/matrix.h" +#include "matrix.h" void transport_master_init(void); void transport_slave_init(void); diff --git a/quantum/util.h b/quantum/util.h new file mode 100644 index 0000000000..bef3b9abe3 --- /dev/null +++ b/quantum/util.h @@ -0,0 +1,26 @@ +/* +Copyright 2011 Jun Wako + +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 "bitwise.h" + +// convert to L string +#define LSTR(s) XLSTR(s) +#define XLSTR(s) L## #s +// convert to string +#define STR(s) XSTR(s) +#define XSTR(s) #s diff --git a/tmk_core/common.mk b/tmk_core/common.mk index fdf2aa0972..55af71ed6f 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -13,7 +13,6 @@ TMK_COMMON_SRC += $(COMMON_DIR)/host.c \ $(COMMON_DIR)/print.c \ $(COMMON_DIR)/debug.c \ $(COMMON_DIR)/sendchar_null.c \ - $(COMMON_DIR)/util.c \ $(COMMON_DIR)/eeconfig.c \ $(COMMON_DIR)/report.c \ $(PLATFORM_COMMON_DIR)/suspend.c \ @@ -93,11 +92,6 @@ else TMK_COMMON_DEFS += -DNO_DEBUG endif -ifeq ($(strip $(COMMAND_ENABLE)), yes) - TMK_COMMON_SRC += $(COMMON_DIR)/command.c - TMK_COMMON_DEFS += -DCOMMAND_ENABLE -endif - ifeq ($(strip $(NKRO_ENABLE)), yes) ifeq ($(PROTOCOL), VUSB) $(info NKRO is not currently supported on V-USB, and has been disabled.) diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c deleted file mode 100644 index 59aa4e4d34..0000000000 --- a/tmk_core/common/command.c +++ /dev/null @@ -1,786 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 -#include -#include "wait.h" -#include "keycode.h" -#include "host.h" -#include "keymap.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "timer.h" -#include "keyboard.h" -#include "bootloader.h" -#include "action_layer.h" -#include "action_util.h" -#include "eeconfig.h" -#include "sleep_led.h" -#include "led.h" -#include "command.h" -#include "quantum.h" -#include "version.h" - -#ifdef BACKLIGHT_ENABLE -# include "backlight.h" -#endif - -#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) -# include "mousekey.h" -#endif - -#ifdef AUDIO_ENABLE -# include "audio.h" -#endif /* AUDIO_ENABLE */ - -static bool command_common(uint8_t code); -static void command_common_help(void); -static void print_version(void); -static void print_status(void); -static bool command_console(uint8_t code); -static void command_console_help(void); -#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) -static bool mousekey_console(uint8_t code); -static void mousekey_console_help(void); -#endif - -static void switch_default_layer(uint8_t layer); - -command_state_t command_state = ONESHOT; - -bool command_proc(uint8_t code) { - switch (command_state) { - case ONESHOT: - if (!IS_COMMAND()) return false; - return (command_extra(code) || command_common(code)); - break; - case CONSOLE: - if (IS_COMMAND()) - return (command_extra(code) || command_common(code)); - else - return (command_console_extra(code) || command_console(code)); - break; -#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) - case MOUSEKEY: - mousekey_console(code); - break; -#endif - default: - command_state = ONESHOT; - return false; - } - return true; -} - -/* TODO: Refactoring is needed. */ -/* This allows to define extra commands. return false when not processed. */ -bool command_extra(uint8_t code) __attribute__((weak)); -bool command_extra(uint8_t code) { - (void)code; - return false; -} - -bool command_console_extra(uint8_t code) __attribute__((weak)); -bool command_console_extra(uint8_t code) { - (void)code; - return false; -} - -/*********************************************************** - * Command common - ***********************************************************/ -static void command_common_help(void) { - print("\n\t- Magic -\n" STR(MAGIC_KEY_DEBUG) ": Debug Message Toggle\n" STR(MAGIC_KEY_DEBUG_MATRIX) ": Matrix Debug Mode Toggle - Show keypresses in matrix grid\n" STR(MAGIC_KEY_DEBUG_KBD) ": Keyboard Debug Toggle - Show keypress report\n" STR(MAGIC_KEY_DEBUG_MOUSE) ": Debug Mouse Toggle\n" STR(MAGIC_KEY_VERSION) ": Version\n" STR(MAGIC_KEY_STATUS) ": Status\n" STR(MAGIC_KEY_CONSOLE) ": Activate Console Mode\n" - -#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM - STR(MAGIC_KEY_LAYER0) ": Switch to Layer 0\n" STR(MAGIC_KEY_LAYER1) ": Switch to Layer 1\n" STR(MAGIC_KEY_LAYER2) ": Switch to Layer 2\n" STR(MAGIC_KEY_LAYER3) ": Switch to Layer 3\n" STR(MAGIC_KEY_LAYER4) ": Switch to Layer 4\n" STR(MAGIC_KEY_LAYER5) ": Switch to Layer 5\n" STR(MAGIC_KEY_LAYER6) ": Switch to Layer 6\n" STR(MAGIC_KEY_LAYER7) ": Switch to Layer 7\n" STR(MAGIC_KEY_LAYER8) ": Switch to Layer 8\n" STR(MAGIC_KEY_LAYER9) ": Switch to Layer 9\n" -#endif - -#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS - "F1-F10: Switch to Layer 0-9 (F10 = L0)\n" -#endif - -#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS - "0-9: Switch to Layer 0-9\n" -#endif - - STR(MAGIC_KEY_LAYER0_ALT) ": Switch to Layer 0 (alternate)\n" - - STR(MAGIC_KEY_BOOTLOADER) ": Jump to Bootloader\n" STR(MAGIC_KEY_BOOTLOADER_ALT) ": Jump to Bootloader (alternate)\n" - -#ifdef KEYBOARD_LOCK_ENABLE - STR(MAGIC_KEY_LOCK) ": Lock Keyboard\n" -#endif - - STR(MAGIC_KEY_EEPROM) ": Print EEPROM Settings\n" STR(MAGIC_KEY_EEPROM_CLEAR) ": Clear EEPROM\n" - -#ifdef NKRO_ENABLE - STR(MAGIC_KEY_NKRO) ": NKRO Toggle\n" -#endif - -#ifdef SLEEP_LED_ENABLE - STR(MAGIC_KEY_SLEEP_LED) ": Sleep LED Test\n" -#endif - ); -} - -static void print_version(void) { - // print version & information - print("\n\t- Version -\n"); - print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") " - "PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") " - "VER: " STR(DEVICE_VER) "\n"); - print("BUILD: (" __DATE__ ")\n"); -#ifndef SKIP_VERSION -# ifdef PROTOCOL_CHIBIOS - print("CHIBIOS: " STR(CHIBIOS_VERSION) ", CONTRIB: " STR(CHIBIOS_CONTRIB_VERSION) "\n"); -# endif -#endif - - /* build options */ - print("OPTIONS:" - -#ifdef PROTOCOL_LUFA - " LUFA" -#endif -#ifdef PROTOCOL_VUSB - " VUSB" -#endif -#ifdef BOOTMAGIC_ENABLE - " BOOTMAGIC" -#endif -#ifdef MOUSEKEY_ENABLE - " MOUSEKEY" -#endif -#ifdef EXTRAKEY_ENABLE - " EXTRAKEY" -#endif -#ifdef CONSOLE_ENABLE - " CONSOLE" -#endif -#ifdef COMMAND_ENABLE - " COMMAND" -#endif -#ifdef NKRO_ENABLE - " NKRO" -#endif -#ifdef LTO_ENABLE - " LTO" -#endif - - " " STR(BOOTLOADER_SIZE) "\n"); - - print("GCC: " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__) -#if defined(__AVR__) - " AVR-LIBC: " __AVR_LIBC_VERSION_STRING__ " AVR_ARCH: avr" STR(__AVR_ARCH__) -#endif - "\n"); - - return; -} - -static void print_status(void) { - print("\n\t- Status -\n"); - - print_val_hex8(host_keyboard_leds()); -#ifndef PROTOCOL_VUSB - // these aren't set on the V-USB protocol, so we just ignore them for now - print_val_hex8(keyboard_protocol); - print_val_hex8(keyboard_idle); -#endif -#ifdef NKRO_ENABLE - print_val_hex8(keymap_config.nkro); -#endif - print_val_hex32(timer_read32()); - return; -} - -static void print_eeconfig(void) { -// Print these variables if NO_PRINT or USER_PRINT are not defined. -#if !defined(NO_PRINT) && !defined(USER_PRINT) - - print("default_layer: "); - print_dec(eeconfig_read_default_layer()); - print("\n"); - - debug_config_t dc; - dc.raw = eeconfig_read_debug(); - print("debug_config.raw: "); - print_hex8(dc.raw); - print("\n"); - print(".enable: "); - print_dec(dc.enable); - print("\n"); - print(".matrix: "); - print_dec(dc.matrix); - print("\n"); - print(".keyboard: "); - print_dec(dc.keyboard); - print("\n"); - print(".mouse: "); - print_dec(dc.mouse); - print("\n"); - - keymap_config_t kc; - kc.raw = eeconfig_read_keymap(); - print("keymap_config.raw: "); - print_hex8(kc.raw); - print("\n"); - print(".swap_control_capslock: "); - print_dec(kc.swap_control_capslock); - print("\n"); - print(".capslock_to_control: "); - print_dec(kc.capslock_to_control); - print("\n"); - print(".swap_lctl_lgui: "); - print_dec(kc.swap_lctl_lgui); - print("\n"); - print(".swap_rctl_rgui: "); - print_dec(kc.swap_rctl_rgui); - print("\n"); - print(".swap_lalt_lgui: "); - print_dec(kc.swap_lalt_lgui); - print("\n"); - print(".swap_ralt_rgui: "); - print_dec(kc.swap_ralt_rgui); - print("\n"); - print(".no_gui: "); - print_dec(kc.no_gui); - print("\n"); - print(".swap_grave_esc: "); - print_dec(kc.swap_grave_esc); - print("\n"); - print(".swap_backslash_backspace: "); - print_dec(kc.swap_backslash_backspace); - print("\n"); - print(".nkro: "); - print_dec(kc.nkro); - print("\n"); - -# ifdef BACKLIGHT_ENABLE - backlight_config_t bc; - bc.raw = eeconfig_read_backlight(); - print("backlight_config.raw: "); - print_hex8(bc.raw); - print("\n"); - print(".enable: "); - print_dec(bc.enable); - print("\n"); - print(".level: "); - print_dec(bc.level); - print("\n"); -# endif /* BACKLIGHT_ENABLE */ - -#endif /* !NO_PRINT */ -} - -static bool command_common(uint8_t code) { -#ifdef KEYBOARD_LOCK_ENABLE - static host_driver_t *host_driver = 0; -#endif - - switch (code) { -#ifdef SLEEP_LED_ENABLE - - // test breathing sleep LED - case MAGIC_KC(MAGIC_KEY_SLEEP_LED): - print("Sleep LED Test\n"); - sleep_led_toggle(); - led_set(host_keyboard_leds()); - break; -#endif - - // print stored eeprom config - case MAGIC_KC(MAGIC_KEY_EEPROM): - print("eeconfig:\n"); - print_eeconfig(); - break; - - // clear eeprom - case MAGIC_KC(MAGIC_KEY_EEPROM_CLEAR): - print("Clearing EEPROM\n"); - eeconfig_init(); - break; - -#ifdef KEYBOARD_LOCK_ENABLE - - // lock/unlock keyboard - case MAGIC_KC(MAGIC_KEY_LOCK): - if (host_get_driver()) { - host_driver = host_get_driver(); - clear_keyboard(); - host_set_driver(0); - print("Locked.\n"); - } else { - host_set_driver(host_driver); - print("Unlocked.\n"); - } - break; -#endif - - // print help - case MAGIC_KC(MAGIC_KEY_HELP): - case MAGIC_KC(MAGIC_KEY_HELP_ALT): - command_common_help(); - break; - - // activate console - case MAGIC_KC(MAGIC_KEY_CONSOLE): - debug_matrix = false; - debug_keyboard = false; - debug_mouse = false; - debug_enable = false; - command_console_help(); - print("C> "); - command_state = CONSOLE; - break; - - // jump to bootloader - case MAGIC_KC(MAGIC_KEY_BOOTLOADER): - case MAGIC_KC(MAGIC_KEY_BOOTLOADER_ALT): - print("\n\nJumping to bootloader... "); - reset_keyboard(); - break; - - // debug toggle - case MAGIC_KC(MAGIC_KEY_DEBUG): - debug_enable = !debug_enable; - if (debug_enable) { - print("\ndebug: on\n"); - } else { - print("\ndebug: off\n"); - debug_matrix = false; - debug_keyboard = false; - debug_mouse = false; - } - break; - - // debug matrix toggle - case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX): - debug_matrix = !debug_matrix; - if (debug_matrix) { - print("\nmatrix: on\n"); - debug_enable = true; - } else { - print("\nmatrix: off\n"); - } - break; - - // debug keyboard toggle - case MAGIC_KC(MAGIC_KEY_DEBUG_KBD): - debug_keyboard = !debug_keyboard; - if (debug_keyboard) { - print("\nkeyboard: on\n"); - debug_enable = true; - } else { - print("\nkeyboard: off\n"); - } - break; - - // debug mouse toggle - case MAGIC_KC(MAGIC_KEY_DEBUG_MOUSE): - debug_mouse = !debug_mouse; - if (debug_mouse) { - print("\nmouse: on\n"); - debug_enable = true; - } else { - print("\nmouse: off\n"); - } - break; - - // print version - case MAGIC_KC(MAGIC_KEY_VERSION): - print_version(); - break; - - // print status - case MAGIC_KC(MAGIC_KEY_STATUS): - print_status(); - break; - -#ifdef NKRO_ENABLE - - // NKRO toggle - case MAGIC_KC(MAGIC_KEY_NKRO): - clear_keyboard(); // clear to prevent stuck keys - keymap_config.nkro = !keymap_config.nkro; - if (keymap_config.nkro) { - print("NKRO: on\n"); - } else { - print("NKRO: off\n"); - } - break; -#endif - - // switch layers - - case MAGIC_KC(MAGIC_KEY_LAYER0_ALT): - switch_default_layer(0); - break; - -#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM - - case MAGIC_KC(MAGIC_KEY_LAYER0): - switch_default_layer(0); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER1): - switch_default_layer(1); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER2): - switch_default_layer(2); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER3): - switch_default_layer(3); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER4): - switch_default_layer(4); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER5): - switch_default_layer(5); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER6): - switch_default_layer(6); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER7): - switch_default_layer(7); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER8): - switch_default_layer(8); - break; - - case MAGIC_KC(MAGIC_KEY_LAYER9): - switch_default_layer(9); - break; -#endif - -#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS - - case KC_F1 ... KC_F9: - switch_default_layer((code - KC_F1) + 1); - break; - case KC_F10: - switch_default_layer(0); - break; -#endif - -#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS - - case KC_1 ... KC_9: - switch_default_layer((code - KC_1) + 1); - break; - case KC_0: - switch_default_layer(0); - break; -#endif - - default: - print("?"); - return false; - } - return true; -} - -/*********************************************************** - * Command console - ***********************************************************/ -static void command_console_help(void) { - print("\n\t- Console -\n" - "ESC/q: quit\n" -#ifdef MOUSEKEY_ENABLE - "m: mousekey\n" -#endif - ); -} - -static bool command_console(uint8_t code) { - switch (code) { - case KC_H: - case KC_SLASH: /* ? */ - command_console_help(); - break; - case KC_Q: - case KC_ESC: - command_state = ONESHOT; - return false; -#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) - case KC_M: - mousekey_console_help(); - print("M> "); - command_state = MOUSEKEY; - return true; -#endif - default: - print("?"); - return false; - } - print("C> "); - return true; -} - -#if defined(MOUSEKEY_ENABLE) && !defined(MK_3_SPEED) -/*********************************************************** - * Mousekey console - ***********************************************************/ -static uint8_t mousekey_param = 0; - -static void mousekey_param_print(void) { -// Print these variables if NO_PRINT or USER_PRINT are not defined. -# if !defined(NO_PRINT) && !defined(USER_PRINT) - print("\n\t- Values -\n"); - print("1: delay(*10ms): "); - pdec(mk_delay); - print("\n"); - print("2: interval(ms): "); - pdec(mk_interval); - print("\n"); - print("3: max_speed: "); - pdec(mk_max_speed); - print("\n"); - print("4: time_to_max: "); - pdec(mk_time_to_max); - print("\n"); - print("5: wheel_max_speed: "); - pdec(mk_wheel_max_speed); - print("\n"); - print("6: wheel_time_to_max: "); - pdec(mk_wheel_time_to_max); - print("\n"); -# endif /* !NO_PRINT */ -} - -//#define PRINT_SET_VAL(v) print(#v " = "); print_dec(v); print("\n"); -# define PRINT_SET_VAL(v) xprintf(# v " = %d\n", (v)) -static void mousekey_param_inc(uint8_t param, uint8_t inc) { - switch (param) { - case 1: - if (mk_delay + inc < UINT8_MAX) - mk_delay += inc; - else - mk_delay = UINT8_MAX; - PRINT_SET_VAL(mk_delay); - break; - case 2: - if (mk_interval + inc < UINT8_MAX) - mk_interval += inc; - else - mk_interval = UINT8_MAX; - PRINT_SET_VAL(mk_interval); - break; - case 3: - if (mk_max_speed + inc < UINT8_MAX) - mk_max_speed += inc; - else - mk_max_speed = UINT8_MAX; - PRINT_SET_VAL(mk_max_speed); - break; - case 4: - if (mk_time_to_max + inc < UINT8_MAX) - mk_time_to_max += inc; - else - mk_time_to_max = UINT8_MAX; - PRINT_SET_VAL(mk_time_to_max); - break; - case 5: - if (mk_wheel_max_speed + inc < UINT8_MAX) - mk_wheel_max_speed += inc; - else - mk_wheel_max_speed = UINT8_MAX; - PRINT_SET_VAL(mk_wheel_max_speed); - break; - case 6: - if (mk_wheel_time_to_max + inc < UINT8_MAX) - mk_wheel_time_to_max += inc; - else - mk_wheel_time_to_max = UINT8_MAX; - PRINT_SET_VAL(mk_wheel_time_to_max); - break; - } -} - -static void mousekey_param_dec(uint8_t param, uint8_t dec) { - switch (param) { - case 1: - if (mk_delay > dec) - mk_delay -= dec; - else - mk_delay = 0; - PRINT_SET_VAL(mk_delay); - break; - case 2: - if (mk_interval > dec) - mk_interval -= dec; - else - mk_interval = 0; - PRINT_SET_VAL(mk_interval); - break; - case 3: - if (mk_max_speed > dec) - mk_max_speed -= dec; - else - mk_max_speed = 0; - PRINT_SET_VAL(mk_max_speed); - break; - case 4: - if (mk_time_to_max > dec) - mk_time_to_max -= dec; - else - mk_time_to_max = 0; - PRINT_SET_VAL(mk_time_to_max); - break; - case 5: - if (mk_wheel_max_speed > dec) - mk_wheel_max_speed -= dec; - else - mk_wheel_max_speed = 0; - PRINT_SET_VAL(mk_wheel_max_speed); - break; - case 6: - if (mk_wheel_time_to_max > dec) - mk_wheel_time_to_max -= dec; - else - mk_wheel_time_to_max = 0; - PRINT_SET_VAL(mk_wheel_time_to_max); - break; - } -} - -static void mousekey_console_help(void) { - print("\n\t- Mousekey -\n" - "ESC/q: quit\n" - "1: delay(*10ms)\n" - "2: interval(ms)\n" - "3: max_speed\n" - "4: time_to_max\n" - "5: wheel_max_speed\n" - "6: wheel_time_to_max\n" - "\n" - "p: print values\n" - "d: set defaults\n" - "up: +1\n" - "down: -1\n" - "pgup: +10\n" - "pgdown: -10\n" - "\n" - "speed = delta * max_speed * (repeat / time_to_max)\n"); - xprintf("where delta: cursor=%d, wheel=%d\n" - "See http://en.wikipedia.org/wiki/Mouse_keys\n", - MOUSEKEY_MOVE_DELTA, MOUSEKEY_WHEEL_DELTA); -} - -static bool mousekey_console(uint8_t code) { - switch (code) { - case KC_H: - case KC_SLASH: /* ? */ - mousekey_console_help(); - break; - case KC_Q: - case KC_ESC: - if (mousekey_param) { - mousekey_param = 0; - } else { - print("C> "); - command_state = CONSOLE; - return false; - } - break; - case KC_P: - mousekey_param_print(); - break; - case KC_1: - case KC_2: - case KC_3: - case KC_4: - case KC_5: - case KC_6: - mousekey_param = numkey2num(code); - break; - case KC_UP: - mousekey_param_inc(mousekey_param, 1); - break; - case KC_DOWN: - mousekey_param_dec(mousekey_param, 1); - break; - case KC_PGUP: - mousekey_param_inc(mousekey_param, 10); - break; - case KC_PGDN: - mousekey_param_dec(mousekey_param, 10); - break; - case KC_D: - mk_delay = MOUSEKEY_DELAY / 10; - mk_interval = MOUSEKEY_INTERVAL; - mk_max_speed = MOUSEKEY_MAX_SPEED; - mk_time_to_max = MOUSEKEY_TIME_TO_MAX; - mk_wheel_max_speed = MOUSEKEY_WHEEL_MAX_SPEED; - mk_wheel_time_to_max = MOUSEKEY_WHEEL_TIME_TO_MAX; - print("set default\n"); - break; - default: - print("?"); - return false; - } - if (mousekey_param) { - xprintf("M%d> ", mousekey_param); - } else { - print("M>"); - } - return true; -} -#endif - -/*********************************************************** - * Utilities - ***********************************************************/ -uint8_t numkey2num(uint8_t code) { - switch (code) { - case KC_1: - return 1; - case KC_2: - return 2; - case KC_3: - return 3; - case KC_4: - return 4; - case KC_5: - return 5; - case KC_6: - return 6; - case KC_7: - return 7; - case KC_8: - return 8; - case KC_9: - return 9; - case KC_0: - return 0; - } - return 0; -} - -static void switch_default_layer(uint8_t layer) { - xprintf("L%d\n", layer); - default_layer_set(1UL << layer); - clear_keyboard(); -} diff --git a/tmk_core/common/command.h b/tmk_core/common/command.h deleted file mode 100644 index 4f77be085c..0000000000 --- a/tmk_core/common/command.h +++ /dev/null @@ -1,163 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 - -/* FIXME: Add doxygen comments for the behavioral defines in here. */ - -/* TODO: Refactoring */ -typedef enum { ONESHOT, CONSOLE, MOUSEKEY } command_state_t; -extern command_state_t command_state; - -/* This allows to extend commands. Return false when command is not processed. */ -bool command_extra(uint8_t code); -bool command_console_extra(uint8_t code); - -#ifdef COMMAND_ENABLE -uint8_t numkey2num(uint8_t code); -bool command_proc(uint8_t code); -#else -# define command_proc(code) false -#endif - -#ifndef IS_COMMAND -# define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT) -#endif - -#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -# define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -#endif - -#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -# define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -#endif - -#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -# define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false -#endif - -#ifndef MAGIC_KEY_HELP -# define MAGIC_KEY_HELP H -#endif - -#ifndef MAGIC_KEY_HELP_ALT -# define MAGIC_KEY_HELP_ALT SLASH -#endif - -#ifndef MAGIC_KEY_DEBUG -# define MAGIC_KEY_DEBUG D -#endif - -#ifndef MAGIC_KEY_DEBUG_MATRIX -# define MAGIC_KEY_DEBUG_MATRIX X -#endif - -#ifndef MAGIC_KEY_DEBUG_KBD -# define MAGIC_KEY_DEBUG_KBD K -#endif - -#ifndef MAGIC_KEY_DEBUG_MOUSE -# define MAGIC_KEY_DEBUG_MOUSE M -#endif - -#ifndef MAGIC_KEY_VERSION -# define MAGIC_KEY_VERSION V -#endif - -#ifndef MAGIC_KEY_STATUS -# define MAGIC_KEY_STATUS S -#endif - -#ifndef MAGIC_KEY_CONSOLE -# define MAGIC_KEY_CONSOLE C -#endif - -#ifndef MAGIC_KEY_LAYER0 -# define MAGIC_KEY_LAYER0 0 -#endif - -#ifndef MAGIC_KEY_LAYER0_ALT -# define MAGIC_KEY_LAYER0_ALT GRAVE -#endif - -#ifndef MAGIC_KEY_LAYER1 -# define MAGIC_KEY_LAYER1 1 -#endif - -#ifndef MAGIC_KEY_LAYER2 -# define MAGIC_KEY_LAYER2 2 -#endif - -#ifndef MAGIC_KEY_LAYER3 -# define MAGIC_KEY_LAYER3 3 -#endif - -#ifndef MAGIC_KEY_LAYER4 -# define MAGIC_KEY_LAYER4 4 -#endif - -#ifndef MAGIC_KEY_LAYER5 -# define MAGIC_KEY_LAYER5 5 -#endif - -#ifndef MAGIC_KEY_LAYER6 -# define MAGIC_KEY_LAYER6 6 -#endif - -#ifndef MAGIC_KEY_LAYER7 -# define MAGIC_KEY_LAYER7 7 -#endif - -#ifndef MAGIC_KEY_LAYER8 -# define MAGIC_KEY_LAYER8 8 -#endif - -#ifndef MAGIC_KEY_LAYER9 -# define MAGIC_KEY_LAYER9 9 -#endif - -#ifndef MAGIC_KEY_BOOTLOADER -# define MAGIC_KEY_BOOTLOADER B -#endif - -#ifndef MAGIC_KEY_BOOTLOADER_ALT -# define MAGIC_KEY_BOOTLOADER_ALT ESC -#endif - -#ifndef MAGIC_KEY_LOCK -# define MAGIC_KEY_LOCK CAPS -#endif - -#ifndef MAGIC_KEY_EEPROM -# define MAGIC_KEY_EEPROM E -#endif - -#ifndef MAGIC_KEY_EEPROM_CLEAR -# define MAGIC_KEY_EEPROM_CLEAR BSPACE -#endif - -#ifndef MAGIC_KEY_NKRO -# define MAGIC_KEY_NKRO N -#endif - -#ifndef MAGIC_KEY_SLEEP_LED -# define MAGIC_KEY_SLEEP_LED Z - -#endif - -#define XMAGIC_KC(key) KC_##key -#define MAGIC_KC(key) XMAGIC_KC(key) diff --git a/tmk_core/common/led.h b/tmk_core/common/led.h deleted file mode 100644 index 0fe38ea035..0000000000 --- a/tmk_core/common/led.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 -#include - -/* FIXME: Add doxygen comments here. */ - -/* keyboard LEDs */ -#define USB_LED_NUM_LOCK 0 -#define USB_LED_CAPS_LOCK 1 -#define USB_LED_SCROLL_LOCK 2 -#define USB_LED_COMPOSE 3 -#define USB_LED_KANA 4 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef union { - uint8_t raw; - struct { - bool num_lock : 1; - bool caps_lock : 1; - bool scroll_lock : 1; - bool compose : 1; - bool kana : 1; - uint8_t reserved : 3; - }; -} led_t; - -void led_set(uint8_t usb_led); - -void led_init_ports(void); - -#ifdef __cplusplus -} -#endif diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h deleted file mode 100644 index b570227a31..0000000000 --- a/tmk_core/common/matrix.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 -#include - -#if (MATRIX_COLS <= 8) -typedef uint8_t matrix_row_t; -#elif (MATRIX_COLS <= 16) -typedef uint16_t matrix_row_t; -#elif (MATRIX_COLS <= 32) -typedef uint32_t matrix_row_t; -#else -# error "MATRIX_COLS: invalid value" -#endif - -#define MATRIX_ROW_SHIFTER ((matrix_row_t)1) - -#ifdef __cplusplus -extern "C" { -#endif - -/* number of matrix rows */ -uint8_t matrix_rows(void); -/* number of matrix columns */ -uint8_t matrix_cols(void); -/* should be called at early stage of startup before matrix_init.(optional) */ -void matrix_setup(void); -/* intialize matrix for scaning. */ -void matrix_init(void); -/* scan all key states on matrix */ -uint8_t matrix_scan(void); -/* whether modified from previous scan. used after matrix_scan. */ -bool matrix_is_modified(void) __attribute__((deprecated)); -/* whether a switch is on */ -bool matrix_is_on(uint8_t row, uint8_t col); -/* matrix state on row */ -matrix_row_t matrix_get_row(uint8_t row); -/* print matrix for debug */ -void matrix_print(void); -/* delay between changing matrix pin state and reading values */ -void matrix_io_delay(void); - -/* power control */ -void matrix_power_up(void); -void matrix_power_down(void); - -/* executes code for Quantum */ -void matrix_init_quantum(void); -void matrix_scan_quantum(void); - -void matrix_init_kb(void); -void matrix_scan_kb(void); - -void matrix_init_user(void); -void matrix_scan_user(void); - -#ifdef __cplusplus -} -#endif diff --git a/tmk_core/common/util.c b/tmk_core/common/util.c deleted file mode 100644 index 861cca0054..0000000000 --- a/tmk_core/common/util.c +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 "util.h" - -// bit population - return number of on-bit -__attribute__((noinline)) uint8_t bitpop(uint8_t bits) { - uint8_t c; - for (c = 0; bits; c++) bits &= bits - 1; - return c; - /* - const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; - return bit_count[bits>>4] + bit_count[bits&0x0F] - */ -} - -uint8_t bitpop16(uint16_t bits) { - uint8_t c; - for (c = 0; bits; c++) bits &= bits - 1; - return c; -} - -uint8_t bitpop32(uint32_t bits) { - uint8_t c; - for (c = 0; bits; c++) bits &= bits - 1; - return c; -} - -// most significant on-bit - return highest location of on-bit -// NOTE: return 0 when bit0 is on or all bits are off -__attribute__((noinline)) uint8_t biton(uint8_t bits) { - uint8_t n = 0; - if (bits >> 4) { - bits >>= 4; - n += 4; - } - if (bits >> 2) { - bits >>= 2; - n += 2; - } - if (bits >> 1) { - bits >>= 1; - n += 1; - } - return n; -} - -uint8_t biton16(uint16_t bits) { - uint8_t n = 0; - if (bits >> 8) { - bits >>= 8; - n += 8; - } - if (bits >> 4) { - bits >>= 4; - n += 4; - } - if (bits >> 2) { - bits >>= 2; - n += 2; - } - if (bits >> 1) { - bits >>= 1; - n += 1; - } - return n; -} - -uint8_t biton32(uint32_t bits) { - uint8_t n = 0; - if (bits >> 16) { - bits >>= 16; - n += 16; - } - if (bits >> 8) { - bits >>= 8; - n += 8; - } - if (bits >> 4) { - bits >>= 4; - n += 4; - } - if (bits >> 2) { - bits >>= 2; - n += 2; - } - if (bits >> 1) { - bits >>= 1; - n += 1; - } - return n; -} - -__attribute__((noinline)) uint8_t bitrev(uint8_t bits) { - bits = (bits & 0x0f) << 4 | (bits & 0xf0) >> 4; - bits = (bits & 0b00110011) << 2 | (bits & 0b11001100) >> 2; - bits = (bits & 0b01010101) << 1 | (bits & 0b10101010) >> 1; - return bits; -} - -uint16_t bitrev16(uint16_t bits) { - bits = bitrev(bits & 0x00ff) << 8 | bitrev((bits & 0xff00) >> 8); - return bits; -} - -uint32_t bitrev32(uint32_t bits) { - bits = (uint32_t)bitrev16(bits & 0x0000ffff) << 16 | bitrev16((bits & 0xffff0000) >> 16); - return bits; -} diff --git a/tmk_core/common/util.h b/tmk_core/common/util.h deleted file mode 100644 index db57f268c3..0000000000 --- a/tmk_core/common/util.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2011 Jun Wako - -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 - -// convert to L string -#define LSTR(s) XLSTR(s) -#define XLSTR(s) L## #s -// convert to string -#define STR(s) XSTR(s) -#define XSTR(s) #s - -#ifdef __cplusplus -extern "C" { -#endif - -uint8_t bitpop(uint8_t bits); -uint8_t bitpop16(uint16_t bits); -uint8_t bitpop32(uint32_t bits); - -uint8_t biton(uint8_t bits); -uint8_t biton16(uint16_t bits); -uint8_t biton32(uint32_t bits); - -uint8_t bitrev(uint8_t bits); -uint16_t bitrev16(uint16_t bits); -uint32_t bitrev32(uint32_t bits); - -#ifdef __cplusplus -} -#endif diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix.c b/tmk_core/protocol/arm_atsam/md_rgb_matrix.c index 439aaf8b38..0ea7e38395 100644 --- a/tmk_core/protocol/arm_atsam/md_rgb_matrix.c +++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix.c @@ -16,7 +16,7 @@ along with this program. If not, see . */ #include "arm_atsam_protocol.h" -#include "tmk_core/common/led.h" +#include "led.h" #include "rgb_matrix.h" #include #include diff --git a/tmk_core/ring_buffer.h b/tmk_core/ring_buffer.h deleted file mode 100644 index 8f887c8f74..0000000000 --- a/tmk_core/ring_buffer.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -/*-------------------------------------------------------------------- - * Ring buffer to store scan codes from keyboard - *------------------------------------------------------------------*/ -#ifndef RBUF_SIZE -# define RBUF_SIZE 32 -#endif -#include -#include -#include -static uint8_t rbuf[RBUF_SIZE]; -static uint8_t rbuf_head = 0; -static uint8_t rbuf_tail = 0; -static inline bool rbuf_enqueue(uint8_t data) { - bool ret = false; - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { - uint8_t next = (rbuf_head + 1) % RBUF_SIZE; - if (next != rbuf_tail) { - rbuf[rbuf_head] = data; - rbuf_head = next; - ret = true; - } - } - return ret; -} -static inline uint8_t rbuf_dequeue(void) { - uint8_t val = 0; - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { - if (rbuf_head != rbuf_tail) { - val = rbuf[rbuf_tail]; - rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE; - } - } - - return val; -} -static inline bool rbuf_has_data(void) { - bool has_data; - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { has_data = (rbuf_head != rbuf_tail); } - return has_data; -} -static inline void rbuf_clear(void) { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { rbuf_head = rbuf_tail = 0; } -} -- cgit v1.2.3