mirror of
https://github.com/qmk/qmk_firmware.git
synced 2026-10-01 06:19:16 +02:00
Merge remote-tracking branch 'origin/develop' into xap
This commit is contained in:
+11
-16
@@ -24,17 +24,20 @@
|
||||
# else
|
||||
# define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key)) && tapping_key.keycode == r->keycode)
|
||||
# endif
|
||||
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < GET_TAPPING_TERM(get_record_keycode(&tapping_key, false), &tapping_key))
|
||||
|
||||
# ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
uint16_t g_tapping_term = TAPPING_TERM;
|
||||
|
||||
__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
|
||||
return g_tapping_term;
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef TAPPING_TERM_PER_KEY
|
||||
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < get_tapping_term(get_record_keycode(&tapping_key, false), &tapping_key))
|
||||
# else
|
||||
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < g_tapping_term)
|
||||
__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
|
||||
# ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
return g_tapping_term;
|
||||
# else
|
||||
return TAPPING_TERM;
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef TAPPING_FORCE_HOLD_PER_KEY
|
||||
@@ -165,15 +168,7 @@ bool process_tapping(keyrecord_t *keyp) {
|
||||
else if (
|
||||
(
|
||||
(
|
||||
(
|
||||
# ifdef TAPPING_TERM_PER_KEY
|
||||
get_tapping_term(tapping_keycode, &tapping_key)
|
||||
# else
|
||||
g_tapping_term
|
||||
# endif
|
||||
>= 500
|
||||
)
|
||||
|
||||
GET_TAPPING_TERM(tapping_keycode, &tapping_key) >= 500
|
||||
# ifdef PERMISSIVE_HOLD_PER_KEY
|
||||
|| get_permissive_hold(tapping_keycode, &tapping_key)
|
||||
# elif defined(PERMISSIVE_HOLD)
|
||||
|
||||
@@ -44,3 +44,11 @@ bool get_retro_tapping(uint16_t keycode, keyrecord_t *record);
|
||||
#ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
extern uint16_t g_tapping_term;
|
||||
#endif
|
||||
|
||||
#ifdef TAPPING_TERM_PER_KEY
|
||||
# define GET_TAPPING_TERM(keycode, record) get_tapping_term(keycode, record)
|
||||
#elif defined(DYNAMIC_TAPPING_TERM_ENABLE)
|
||||
# define GET_TAPPING_TERM(keycode, record) g_tapping_term
|
||||
#else
|
||||
# define GET_TAPPING_TERM(keycode, record) (TAPPING_TERM)
|
||||
#endif
|
||||
|
||||
@@ -131,6 +131,12 @@ static bool qp_drawimage_prepare_frame_for_stream_read(painter_device_t device,
|
||||
// Ensure we aren't reusing any palette
|
||||
qp_internal_invalidate_palette();
|
||||
|
||||
if (!qp_internal_bpp_capable(info->bpp)) {
|
||||
qp_dprintf("qp_drawimage_recolor: fail (image bpp too high (%d), check QUANTUM_PAINTER_SUPPORTS_256_PALETTE)\n", (int)info->bpp);
|
||||
qp_comms_stop(device);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Handle palette if needed
|
||||
const uint16_t palette_entries = 1u << info->bpp;
|
||||
bool needs_pixconvert = false;
|
||||
@@ -146,12 +152,6 @@ static bool qp_drawimage_prepare_frame_for_stream_read(painter_device_t device,
|
||||
needs_pixconvert = qp_internal_interpolate_palette(fg_hsv888, bg_hsv888, palette_entries);
|
||||
}
|
||||
|
||||
if (!qp_internal_bpp_capable(info->bpp)) {
|
||||
qp_dprintf("qp_drawimage_recolor: fail (image bpp too high (%d), check QUANTUM_PAINTER_SUPPORTS_256_PALETTE)\n", (int)info->bpp);
|
||||
qp_comms_stop(device);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (needs_pixconvert) {
|
||||
// Convert the palette to native format
|
||||
if (!driver->driver_vtable->palette_convert(device, palette_entries, qp_internal_global_pixel_lookup_table)) {
|
||||
|
||||
@@ -98,17 +98,9 @@ const pointing_device_driver_t pointing_device_driver = {
|
||||
// clang-format on
|
||||
#elif defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_i2c) || defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_spi)
|
||||
# ifndef CIRQUE_PINNACLE_TAPPING_TERM
|
||||
# ifdef TAPPING_TERM_PER_KEY
|
||||
# include "action.h"
|
||||
# include "action_tapping.h"
|
||||
# define CIRQUE_PINNACLE_TAPPING_TERM get_tapping_term(KC_BTN1, &(keyrecord_t){})
|
||||
# else
|
||||
# ifdef TAPPING_TERM
|
||||
# define CIRQUE_PINNACLE_TAPPING_TERM TAPPING_TERM
|
||||
# else
|
||||
# define CIRQUE_PINNACLE_TAPPING_TERM 200
|
||||
# endif
|
||||
# endif
|
||||
# include "action.h"
|
||||
# include "action_tapping.h"
|
||||
# define CIRQUE_PINNACLE_TAPPING_TERM GET_TAPPING_TERM(KC_BTN1, &(keyrecord_t){})
|
||||
# endif
|
||||
# ifndef CIRQUE_PINNACLE_TOUCH_DEBOUNCE
|
||||
# define CIRQUE_PINNACLE_TOUCH_DEBOUNCE (CIRQUE_PINNACLE_TAPPING_TERM * 8)
|
||||
|
||||
@@ -182,12 +182,7 @@ static bool autoshift_press(uint16_t keycode, uint16_t now, keyrecord_t *record)
|
||||
# endif
|
||||
) &&
|
||||
# endif
|
||||
TIMER_DIFF_16(now, autoshift_time) <
|
||||
# ifdef TAPPING_TERM_PER_KEY
|
||||
get_tapping_term(autoshift_lastkey, record)
|
||||
# else
|
||||
TAPPING_TERM
|
||||
# endif
|
||||
TIMER_DIFF_16(now, autoshift_time) < GET_TAPPING_TERM(autoshift_lastkey, record)
|
||||
) {
|
||||
// clang-format on
|
||||
// Allow a tap-then-hold for keyrepeat.
|
||||
|
||||
@@ -26,7 +26,7 @@ bool process_secure(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
}
|
||||
if (keycode == SECURE_UNLOCK) {
|
||||
secure_lock();
|
||||
secure_unlock();
|
||||
return false;
|
||||
}
|
||||
if (keycode == SECURE_TOGGLE) {
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
#include <stdbool.h>
|
||||
#include "action.h"
|
||||
|
||||
/** \brief Intercept keycodes and detect unlock sequences
|
||||
*/
|
||||
bool preprocess_secure(uint16_t keycode, keyrecord_t *record);
|
||||
|
||||
/** \brief Handle any secure specific keycodes
|
||||
*/
|
||||
bool process_secure(uint16_t keycode, keyrecord_t *record);
|
||||
|
||||
@@ -93,12 +93,7 @@ void perform_space_cadet(keyrecord_t *record, uint16_t sc_keycode, uint8_t holdM
|
||||
register_mods(MOD_BIT(holdMod));
|
||||
}
|
||||
} else {
|
||||
#ifdef TAPPING_TERM_PER_KEY
|
||||
if (sc_last == holdMod && timer_elapsed(sc_timer) < get_tapping_term(sc_keycode, record))
|
||||
#else
|
||||
if (sc_last == holdMod && timer_elapsed(sc_timer) < TAPPING_TERM)
|
||||
#endif
|
||||
{
|
||||
if (sc_last == holdMod && timer_elapsed(sc_timer) < GET_TAPPING_TERM(sc_keycode, record)) {
|
||||
if (holdMod != tapMod) {
|
||||
if (IS_MOD(holdMod)) {
|
||||
unregister_mods(MOD_BIT(holdMod));
|
||||
|
||||
@@ -174,11 +174,7 @@ void tap_dance_task() {
|
||||
if (action->custom_tapping_term > 0) {
|
||||
tap_user_defined = action->custom_tapping_term;
|
||||
} else {
|
||||
#ifdef TAPPING_TERM_PER_KEY
|
||||
tap_user_defined = get_tapping_term(action->state.keycode, &(keyrecord_t){});
|
||||
#else
|
||||
tap_user_defined = TAPPING_TERM;
|
||||
#endif
|
||||
tap_user_defined = GET_TAPPING_TERM(action->state.keycode, &(keyrecord_t){});
|
||||
}
|
||||
if (action->state.count && timer_elapsed(action->state.timer) > tap_user_defined) {
|
||||
process_tap_dance_action_on_dance_finished(action);
|
||||
|
||||
@@ -7,6 +7,10 @@ RGB_MATRIX_EFFECT(TYPING_HEATMAP)
|
||||
# endif
|
||||
|
||||
void process_rgb_matrix_typing_heatmap(uint8_t row, uint8_t col) {
|
||||
# ifdef RGB_MATRIX_TYPING_HEATMAP_SLIM
|
||||
// Limit effect to pressed keys
|
||||
g_rgb_frame_buffer[row][col] = qadd8(g_rgb_frame_buffer[row][col], 32);
|
||||
# else
|
||||
uint8_t m_row = row - 1;
|
||||
uint8_t p_row = row + 1;
|
||||
uint8_t m_col = col - 1;
|
||||
@@ -27,6 +31,7 @@ void process_rgb_matrix_typing_heatmap(uint8_t row, uint8_t col) {
|
||||
g_rgb_frame_buffer[m_row][col] = qadd8(g_rgb_frame_buffer[m_row][col], 16);
|
||||
if (p_col < MATRIX_COLS) g_rgb_frame_buffer[m_row][p_col] = qadd8(g_rgb_frame_buffer[m_row][p_col], 13);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
// A timer to track the last time we decremented all heatmap values.
|
||||
|
||||
@@ -826,6 +826,21 @@ void rgblight_blink_layer_repeat(uint8_t layer, uint16_t duration_ms, uint8_t ti
|
||||
_repeat_timer = sync_timer_read() + duration_ms;
|
||||
}
|
||||
|
||||
void rgblight_unblink_layer(uint8_t layer) {
|
||||
rgblight_set_layer_state(layer, false);
|
||||
_blinking_layer_mask &= ~((rgblight_layer_mask_t)1 << layer);
|
||||
}
|
||||
|
||||
void rgblight_unblink_all_but_layer(uint8_t layer) {
|
||||
for (uint8_t i = 0; i < RGBLIGHT_MAX_LAYERS; i++) {
|
||||
if (i != layer) {
|
||||
if ((_blinking_layer_mask & (rgblight_layer_mask_t)1 << i) != 0) {
|
||||
rgblight_unblink_layer(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void rgblight_blink_layer_repeat_helper(void) {
|
||||
if (_blinking_layer_mask != 0 && timer_expired(sync_timer_read(), _repeat_timer)) {
|
||||
for (uint8_t layer = 0; layer < RGBLIGHT_MAX_LAYERS; layer++) {
|
||||
|
||||
@@ -216,7 +216,25 @@ extern const rgblight_segment_t *const *rgblight_layers;
|
||||
# ifdef RGBLIGHT_LAYER_BLINK
|
||||
# define RGBLIGHT_USE_TIMER
|
||||
void rgblight_blink_layer(uint8_t layer, uint16_t duration_ms);
|
||||
void rgblight_blink_layer_repeat(uint8_t layer, uint16_t duration_ms, uint8_t times);
|
||||
void rgblight_blink_layer_repeat(uint8_t layer, uint16_ duration_ms, uint8_t times);
|
||||
/**
|
||||
* \brief Stop blinking on one layer.
|
||||
*
|
||||
* Stop a layer that is blinking. If the layer is not blinking it will
|
||||
* be unaffected.
|
||||
*
|
||||
* \param layer Layer number to stop blinking.
|
||||
*/
|
||||
void rgblight_unblink_layer(uint8_t layer);
|
||||
/**
|
||||
* \brief Stop blinking all layers except one.
|
||||
*
|
||||
* Stop all layers that are blinking except for one specific layer.
|
||||
* Layers that are not blinking are unaffected.
|
||||
*
|
||||
* \param layer Layer number to keep blinking.
|
||||
*/
|
||||
void rgblight_unblink_all_but_layer(uint8_t layer);
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
+3
-3
@@ -19,9 +19,9 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
secure_status_t secure_status = SECURE_LOCKED;
|
||||
static uint32_t unlock_time = 0;
|
||||
static uint32_t idle_time = 0;
|
||||
static secure_status_t secure_status = SECURE_LOCKED;
|
||||
static uint32_t unlock_time = 0;
|
||||
static uint32_t idle_time = 0;
|
||||
|
||||
secure_status_t secure_get_status(void) {
|
||||
return secure_status;
|
||||
|
||||
Reference in New Issue
Block a user