Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

process_keycode: remove direct quantum.h includes #21486

Merged
merged 6 commits into from
Jul 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions quantum/action_layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include "keyboard.h"
#include "action.h"
#include "bitwise.h"

#ifdef DYNAMIC_KEYMAP_ENABLE
# ifndef DYNAMIC_KEYMAP_LAYER_COUNT
Expand Down
4 changes: 4 additions & 0 deletions quantum/midi/qmk_midi.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
#include "usb_descriptor.h"
#include "process_midi.h"

#ifdef AUDIO_ENABLE
# include "audio.h"
#endif

/*******************************************************************************
* MIDI
******************************************************************************/
Expand Down
4 changes: 4 additions & 0 deletions quantum/process_keycode/process_audio.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#pragma once

#include <stdint.h>
#include <stdbool.h>
#include "action.h"

float compute_freq_for_midi_note(uint8_t note);

bool process_audio(uint16_t keycode, keyrecord_t *record);
Expand Down
169 changes: 84 additions & 85 deletions quantum/process_keycode/process_auto_shift.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,28 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#ifdef AUTO_SHIFT_ENABLE

# include <stdbool.h>
# include "process_auto_shift.h"

# ifndef AUTO_SHIFT_DISABLED_AT_STARTUP
# define AUTO_SHIFT_STARTUP_STATE true /* enabled */
# else
# define AUTO_SHIFT_STARTUP_STATE false /* disabled */
# endif
#include "process_auto_shift.h"
#include "quantum.h"
#include "action_util.h"
#include "timer.h"
#include "keycodes.h"

#ifndef AUTO_SHIFT_DISABLED_AT_STARTUP
# define AUTO_SHIFT_STARTUP_STATE true /* enabled */
#else
# define AUTO_SHIFT_STARTUP_STATE false /* disabled */
#endif

// Stores the last Auto Shift key's up or down time, for evaluation or keyrepeat.
static uint16_t autoshift_time = 0;
# if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
#if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
// Stores the last key's up or down time, to replace autoshift_time so that Tap Hold times are accurate.
static uint16_t retroshift_time = 0;
// Stores a possibly Retro Shift key's up or down time, as retroshift_time needs
// to be set before the Retro Shift key is evaluated if it is interrupted by an
// Auto Shifted key.
static uint16_t last_retroshift_time;
# endif
#endif
static uint16_t autoshift_timeout = AUTO_SHIFT_TIMEOUT;
static uint16_t autoshift_lastkey = KC_NO;
static keyrecord_t autoshift_lastrecord;
Expand Down Expand Up @@ -68,23 +69,23 @@ __attribute__((weak)) bool get_custom_auto_shifted_key(uint16_t keycode, keyreco
/** \brief Called on physical press, returns whether is Auto Shift key */
__attribute__((weak)) bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
# ifndef NO_AUTO_SHIFT_ALPHA
#ifndef NO_AUTO_SHIFT_ALPHA
case AUTO_SHIFT_ALPHA:
# endif
# ifndef NO_AUTO_SHIFT_NUMERIC
#endif
#ifndef NO_AUTO_SHIFT_NUMERIC
case AUTO_SHIFT_NUMERIC:
# endif
# ifndef NO_AUTO_SHIFT_SPECIAL
# ifndef NO_AUTO_SHIFT_TAB
#endif
#ifndef NO_AUTO_SHIFT_SPECIAL
# ifndef NO_AUTO_SHIFT_TAB
case KC_TAB:
# endif
# ifndef NO_AUTO_SHIFT_SYMBOLS
# endif
# ifndef NO_AUTO_SHIFT_SYMBOLS
case AUTO_SHIFT_SYMBOLS:
# endif
# endif
# ifdef AUTO_SHIFT_ENTER
#endif
#ifdef AUTO_SHIFT_ENTER
case KC_ENT:
# endif
#endif
return true;
}
return get_custom_auto_shifted_key(keycode, record);
Expand Down Expand Up @@ -130,9 +131,9 @@ bool get_autoshift_shift_state(uint16_t keycode) {
/** \brief Restores the shift key if it was cancelled by Auto Shift */
static void autoshift_flush_shift(void) {
autoshift_flags.holding_shift = false;
# ifdef CAPS_WORD_ENABLE
#ifdef CAPS_WORD_ENABLE
if (!is_caps_word_on())
# endif // CAPS_WORD_ENABLE
#endif // CAPS_WORD_ENABLE
{
del_weak_mods(MOD_BIT(KC_LSFT));
}
Expand All @@ -154,46 +155,46 @@ static void autoshift_flush_shift(void) {
static bool autoshift_press(uint16_t keycode, uint16_t now, keyrecord_t *record) {
// clang-format off
if ((get_mods()
# if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
#if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
| get_oneshot_mods()
# endif
#endif
) & (~MOD_BIT(KC_LSFT))
) {
// clang-format on
// Prevents keyrepeating unshifted value of key after using it in a key combo.
autoshift_lastkey = KC_NO;
# ifndef AUTO_SHIFT_MODIFIERS
#ifndef AUTO_SHIFT_MODIFIERS
// We can't return true here anymore because custom unshifted values are
// possible and there's no good way to tell whether the press returned
// true upon release.
set_autoshift_shift_state(keycode, false);
autoshift_press_user(keycode, false, record);
# if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
# if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
set_oneshot_mods(get_oneshot_mods() & (~MOD_BIT(KC_LSFT)));
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
# endif
return false;
# endif
return false;
#endif
}

// Store record to be sent to user functions if there's no release record then.
autoshift_lastrecord = *record;
autoshift_lastrecord.event.pressed = false;
autoshift_lastrecord.event.time = 0;
// clang-format off
# if defined(AUTO_SHIFT_REPEAT) || defined(AUTO_SHIFT_REPEAT_PER_KEY)
#if defined(AUTO_SHIFT_REPEAT) || defined(AUTO_SHIFT_REPEAT_PER_KEY)
if (keycode == autoshift_lastkey &&
# ifdef AUTO_SHIFT_REPEAT_PER_KEY
# ifdef AUTO_SHIFT_REPEAT_PER_KEY
get_auto_shift_repeat(autoshift_lastkey, record) &&
# endif
# if !defined(AUTO_SHIFT_NO_AUTO_REPEAT) || defined(AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY)
# endif
# if !defined(AUTO_SHIFT_NO_AUTO_REPEAT) || defined(AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY)
(
!autoshift_flags.lastshifted
# ifdef AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY
# ifdef AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY
|| get_auto_shift_no_auto_repeat(autoshift_lastkey, record)
# endif
) &&
# endif
) &&
# endif
TIMER_DIFF_16(now, autoshift_time) < GET_TAPPING_TERM(autoshift_lastkey, record)
) {
// clang-format on
Expand All @@ -210,23 +211,23 @@ static bool autoshift_press(uint16_t keycode, uint16_t now, keyrecord_t *record)
autoshift_press_user(autoshift_lastkey, autoshift_flags.lastshifted, record);
return false;
}
# endif
#endif

// Use physical shift state of press event to be more like normal typing.
# if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
#if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
autoshift_flags.lastshifted = (get_mods() | get_oneshot_mods()) & MOD_BIT(KC_LSFT);
set_oneshot_mods(get_oneshot_mods() & (~MOD_BIT(KC_LSFT)));
# else
#else
autoshift_flags.lastshifted = get_mods() & MOD_BIT(KC_LSFT);
# endif
#endif
// Record the keycode so we can simulate it later.
autoshift_lastkey = keycode;
autoshift_time = now;
autoshift_flags.in_progress = true;

# if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
#if !defined(NO_ACTION_ONESHOT) && !defined(NO_ACTION_TAPPING)
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
# endif
#endif
return false;
}

Expand All @@ -247,11 +248,11 @@ static void autoshift_end(uint16_t keycode, uint16_t now, bool matrix_trigger, k
autoshift_flags.lastshifted =
autoshift_flags.lastshifted
|| TIMER_DIFF_16(now, autoshift_time) >=
# ifdef AUTO_SHIFT_TIMEOUT_PER_KEY
#ifdef AUTO_SHIFT_TIMEOUT_PER_KEY
get_autoshift_timeout(autoshift_lastkey, record)
# else
#else
autoshift_timeout
# endif
#endif
;
// clang-format on
set_autoshift_shift_state(autoshift_lastkey, autoshift_flags.lastshifted);
Expand All @@ -266,23 +267,23 @@ static void autoshift_end(uint16_t keycode, uint16_t now, bool matrix_trigger, k
autoshift_press_user(autoshift_lastkey, autoshift_flags.lastshifted, record);

// clang-format off
# if (defined(AUTO_SHIFT_REPEAT) || defined(AUTO_SHIFT_REPEAT_PER_KEY)) && (!defined(AUTO_SHIFT_NO_AUTO_REPEAT) || defined(AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY))
#if (defined(AUTO_SHIFT_REPEAT) || defined(AUTO_SHIFT_REPEAT_PER_KEY)) && (!defined(AUTO_SHIFT_NO_AUTO_REPEAT) || defined(AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY))
if (matrix_trigger
# ifdef AUTO_SHIFT_REPEAT_PER_KEY
# ifdef AUTO_SHIFT_REPEAT_PER_KEY
&& get_auto_shift_repeat(autoshift_lastkey, record)
# endif
# ifdef AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY
# endif
# ifdef AUTO_SHIFT_NO_AUTO_REPEAT_PER_KEY
&& !get_auto_shift_no_auto_repeat(autoshift_lastkey, record)
# endif
# endif
) {
// Prevents release.
return;
}
# endif
#endif
// clang-format on
# if TAP_CODE_DELAY > 0
#if TAP_CODE_DELAY > 0
wait_ms(TAP_CODE_DELAY);
# endif
#endif

autoshift_release_user(autoshift_lastkey, autoshift_flags.lastshifted, record);
autoshift_flush_shift();
Expand Down Expand Up @@ -310,11 +311,11 @@ void autoshift_matrix_scan(void) {
if (autoshift_flags.in_progress) {
const uint16_t now = timer_read();
if (TIMER_DIFF_16(now, autoshift_time) >=
# ifdef AUTO_SHIFT_TIMEOUT_PER_KEY
#ifdef AUTO_SHIFT_TIMEOUT_PER_KEY
get_autoshift_timeout(autoshift_lastkey, &autoshift_lastrecord)
# else
#else
autoshift_timeout
# endif
#endif
) {
autoshift_end(autoshift_lastkey, now, true, &autoshift_lastrecord);
}
Expand All @@ -335,18 +336,18 @@ void autoshift_disable(void) {
autoshift_flush_shift();
}

# ifndef AUTO_SHIFT_NO_SETUP
#ifndef AUTO_SHIFT_NO_SETUP
void autoshift_timer_report(void) {
# ifdef SEND_STRING_ENABLE
# ifdef SEND_STRING_ENABLE
const char *autoshift_timeout_str = get_u16_str(autoshift_timeout, ' ');
// Skip padding spaces
while (*autoshift_timeout_str == ' ') {
autoshift_timeout_str++;
}
send_string(autoshift_timeout_str);
# endif
}
# endif
}
#endif

bool get_autoshift_state(void) {
return autoshift_flags.enabled;
Expand All @@ -368,11 +369,11 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
// https://github.com/qmk/qmk_firmware/pull/9826#issuecomment-733559550
// clang-format off
const uint16_t now =
# if !defined(RETRO_SHIFT) || defined(NO_ACTION_TAPPING)
#if !defined(RETRO_SHIFT) || defined(NO_ACTION_TAPPING)
timer_read()
# else
#else
(record->event.pressed) ? retroshift_time : timer_read()
# endif
#endif
;
// clang-format on

Expand All @@ -393,7 +394,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
autoshift_disable();
break;

# ifndef AUTO_SHIFT_NO_SETUP
#ifndef AUTO_SHIFT_NO_SETUP
case AS_UP:
autoshift_timeout += 5;
break;
Expand All @@ -403,27 +404,27 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
case AS_RPT:
autoshift_timer_report();
break;
# endif
#endif
}
// If Retro Shift is disabled, possible custom actions shouldn't happen.
// clang-format off
# if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
#if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
const bool is_hold_on_interrupt = get_hold_on_other_key_press(keycode, record);
# else
# else
const bool is_hold_on_interrupt = false;
# endif
# endif
# endif
#endif
if (IS_RETRO(keycode)
# if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
#if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
// Not tapped or #defines mean that rolls should use hold action.
&& (
record->tap.count == 0
# ifdef RETRO_TAPPING_PER_KEY
# ifdef RETRO_TAPPING_PER_KEY
|| !get_retro_tapping(keycode, record)
# endif
|| (record->tap.interrupted && is_hold_on_interrupt))
# endif
|| (record->tap.interrupted && is_hold_on_interrupt))
#endif
) {
// clang-format on
autoshift_lastkey = KC_NO;
Expand All @@ -439,21 +440,21 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
// tap.count gets set to 0 in process_action
// clang-format off
else if (IS_RETRO(keycode)
# if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
#if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
&& (
record->tap.count == 0
# ifdef RETRO_TAPPING_PER_KEY
# ifdef RETRO_TAPPING_PER_KEY
|| !get_retro_tapping(keycode, record)
# endif
)
# endif
)
#endif
) {
// Fixes modifiers not being applied to rolls with AUTO_SHIFT_MODIFIERS set.
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
#ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
if (autoshift_flags.in_progress && get_hold_on_other_key_press(keycode, record)) {
autoshift_end(KC_NO, now, false, &autoshift_lastrecord);
}
# endif
#endif
// clang-format on
return true;
}
Expand All @@ -479,7 +480,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
return true;
}

# if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
#if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
// Called to record time before possible delays by action_tapping_process.
void retroshift_poll_time(keyevent_t *event) {
last_retroshift_time = retroshift_time;
Expand All @@ -493,6 +494,4 @@ void retroshift_swap_times(void) {
last_retroshift_time = temp;
}
}
# endif

#endif
Loading