From af04c9474baeb6a6ff43ae41887ef5ab854c4db2 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 14:48:03 +0900 Subject: [PATCH 01/13] =?UTF-8?q?feat:=20=E8=87=AA=E5=88=86=E7=94=A8?= =?UTF-8?q?=E3=81=AEkeymap=E4=BD=9C=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../keyboards/keyball/keyball39/keyball39.c | 22 +++++ .../keyball/keyball39/keymaps/myapp/config.h | 39 ++++++++ .../keyball/keyball39/keymaps/myapp/keymap.c | 94 +++++++++++++++++++ .../keyball/keyball39/keymaps/myapp/rules.mk | 3 + 5 files changed, 159 insertions(+) create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk diff --git a/.gitignore b/.gitignore index 3fec32c84..eca1c9fab 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ tmp/ +.idea \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keyball39.c b/qmk_firmware/keyboards/keyball/keyball39/keyball39.c index 5472a0d48..a92c9153f 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keyball39.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keyball39.c @@ -14,6 +14,28 @@ 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 . +------------------------------------------------------------------- +参考文献: +- リポジトリ: + https://github.com/kamiichi99/keyball/tree/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai +- keyballの販売ページ + https://shirogane-lab.com/collections/all +コード表: +- 公式ファームウェアのキーコード: + KBC_RST(0x5DA5): Keyball 設定のリセット + KBC_SAVE(0x5DA6): 現在の Keyball 設定を EEPROM に保存します + CPI_I100(0x5DA7): CPI を 100 増加させます(最大:12000) + CPI_D100(0x5DA8): CPI を 100 減少させます(最小:100) + CPI_I1K(0x5DA9): CPI を 1000 増加させます(最大:12000) + CPI_D1K(0x5DAA): CPI を 1000 減少させます(最小:100) + SCRL_TO(0x5DAB): タップごとにスクロールモードの ON/OFF を切り替えます + SCRL_MO(0x5DAC): キーを押している間、スクロールモードになります + SCRL_DVI(0x5DAD): スクロール除数を1つ上げます(max D7 = 1/128)← 最もスクロール遅い + SCRL_DVD(0x5DAE): スクロール除数を1つ下げます(min D0 = 1/1)← 最もスクロール速い +- オリジナルのキーコード: + KC_BACK_TO_LAYER0_BTN1(0x5DAF): レイヤー0に遷移できるBTN1 + KC_DOUBLE_CLICK_BTN1(0x5DB0): 1タップでダブルクリックできるBTN1 + KC_TRIPLE_CLICK_BTN1(0x5DB1): 1タップでトリプルクリックできるBTN1 */ #include QMK_KEYBOARD_H diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h new file mode 100644 index 000000000..ec062cf45 --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h @@ -0,0 +1,39 @@ +/* +This is the c configuration file for the keymap + +Copyright 2022 @Yowkees +Copyright 2022 MURAOKA Taro (aka KoRoN, @kaoriya) + +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 + +#ifdef RGBLIGHT_ENABLE +# define RGBLIGHT_EFFECT_BREATHING +# define RGBLIGHT_EFFECT_RAINBOW_MOOD +# define RGBLIGHT_EFFECT_RAINBOW_SWIRL +# define RGBLIGHT_EFFECT_SNAKE +# define RGBLIGHT_EFFECT_KNIGHT +# define RGBLIGHT_EFFECT_CHRISTMAS +# define RGBLIGHT_EFFECT_STATIC_GRADIENT +# define RGBLIGHT_EFFECT_RGB_TEST +# define RGBLIGHT_EFFECT_ALTERNATING +# define RGBLIGHT_EFFECT_TWINKLE +#endif + +#define TAP_CODE_DELAY 5 + +#define POINTING_DEVICE_AUTO_MOUSE_ENABLE +#define AUTO_MOUSE_DEFAULT_LAYER 1 diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c new file mode 100644 index 000000000..16b819cbe --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c @@ -0,0 +1,94 @@ +/* +Copyright 2022 @Yowkees +Copyright 2022 MURAOKA Taro (aka KoRoN, @kaoriya) + +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 QMK_KEYBOARD_H + +#include "quantum.h" + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // keymap for default + [0] = LAYOUT_universal( + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_MINS , + KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , + KC_LCTL , KC_LGUI , KC_LALT ,LSFT_T(KC_LNG2),LT(1,KC_SPC),LT(3,KC_LNG1),KC_BSPC,LT(2,KC_ENT),LSFT_T(KC_LNG2),KC_RALT,KC_RGUI, KC_RSFT + ), + + [1] = LAYOUT_universal( + KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_RBRC , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , + KC_F5 , KC_EXLM , S(KC_6) ,S(KC_INT3), S(KC_8) , S(KC_INT1), KC_BTN1 , KC_PGUP , KC_BTN2 , KC_SCLN , + S(KC_EQL),S(KC_LBRC),S(KC_7) , S(KC_2) ,S(KC_RBRC), KC_LBRC , KC_DLR , KC_PGDN , KC_BTN3 , KC_F11 , + KC_INT1 , KC_EQL , S(KC_3) , _______ , _______ , _______ , TO(2) , TO(0) , _______ , KC_RALT , KC_RGUI , KC_F12 + ), + + [2] = LAYOUT_universal( + KC_TAB , KC_7 , KC_8 , KC_9 , KC_MINS , KC_NUHS , _______ , KC_BTN3 , _______ , KC_BSPC , + S(KC_QUOT), KC_4 , KC_5 , KC_6 ,S(KC_SCLN), S(KC_9) , KC_BTN1 , KC_UP , KC_BTN2 , KC_QUOT , + KC_SLSH , KC_1 , KC_2 , KC_3 ,S(KC_MINS), S(KC_NUHS), KC_LEFT , KC_DOWN , KC_RGHT , _______ , + KC_ESC , KC_0 , KC_DOT , KC_DEL , KC_ENT , KC_BSPC , _______ , _______ , _______ , _______ , _______ , _______ + ), + + [3] = LAYOUT_universal( + RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , + RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , + RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , + QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT + ), + + [4] = LAYOUT_universal( + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ), + + [5] = LAYOUT_universal( + _______ , _______ , _______ , _______ , _______ , _______ , SCRL_DVI , CPI_I100 , _______ , RGB_TOG , + _______ , _______ , _______ , _______ , _______ , SCRL_DVD , CPI_D100 , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , _______ , _______ , _______ , _______ + ), + + [6] = LAYOUT_universal( + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + KC_LALT , KC_LSFT , _______ ,KC_MS_BTN1, _______ , _______ ,KC_MS_BTN1,KC_MS_BTN3,KC_MS_BTN2, _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ) +}; +// clang-format on + +layer_state_t layer_state_set_user(layer_state_t state) { + // Auto enable scroll mode when the highest layer is 3 + // keyball_set_scroll_mode(get_highest_layer(state) == 3); + // 自動スクロール有効化 + keyball_set_scroll_mode(get_highest_layer(state) == 1 || get_highest_layer(state) == 3); + return state; +} + +#ifdef OLED_ENABLE + +# include "lib/oledkit/oledkit.h" + +void oledkit_render_info_user(void) { + keyball_oled_render_keyinfo(); + keyball_oled_render_ballinfo(); + keyball_oled_render_layerinfo(); +} +#endif diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk b/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk new file mode 100644 index 000000000..a1dc59227 --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk @@ -0,0 +1,3 @@ +RGBLIGHT_ENABLE = no + +OLED_ENABLE = yes From be525c3878401971e402c0b49a1f09c3a18235d8 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 15:27:25 +0900 Subject: [PATCH 02/13] feat: via my --- .../keymaps/{myapp => viamy}/config.h | 18 ++++++------ .../keymaps/{myapp => viamy}/keymap.c | 29 +++++++++---------- .../keymaps/{myapp => viamy}/rules.mk | 2 ++ 3 files changed, 25 insertions(+), 24 deletions(-) rename qmk_firmware/keyboards/keyball/keyball39/keymaps/{myapp => viamy}/config.h (72%) rename qmk_firmware/keyboards/keyball/keyball39/keymaps/{myapp => viamy}/keymap.c (72%) rename qmk_firmware/keyboards/keyball/keyball39/keymaps/{myapp => viamy}/rules.mk (68%) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h similarity index 72% rename from qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h rename to qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h index ec062cf45..9736eae89 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/config.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h @@ -21,16 +21,16 @@ along with this program. If not, see . #pragma once #ifdef RGBLIGHT_ENABLE -# define RGBLIGHT_EFFECT_BREATHING -# define RGBLIGHT_EFFECT_RAINBOW_MOOD -# define RGBLIGHT_EFFECT_RAINBOW_SWIRL -# define RGBLIGHT_EFFECT_SNAKE -# define RGBLIGHT_EFFECT_KNIGHT -# define RGBLIGHT_EFFECT_CHRISTMAS +//# define RGBLIGHT_EFFECT_BREATHING +//# define RGBLIGHT_EFFECT_RAINBOW_MOOD +//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL +//# define RGBLIGHT_EFFECT_SNAKE +//# define RGBLIGHT_EFFECT_KNIGHT +//# define RGBLIGHT_EFFECT_CHRISTMAS # define RGBLIGHT_EFFECT_STATIC_GRADIENT -# define RGBLIGHT_EFFECT_RGB_TEST -# define RGBLIGHT_EFFECT_ALTERNATING -# define RGBLIGHT_EFFECT_TWINKLE +//# define RGBLIGHT_EFFECT_RGB_TEST +//# define RGBLIGHT_EFFECT_ALTERNATING +//# define RGBLIGHT_EFFECT_TWINKLE #endif #define TAP_CODE_DELAY 5 diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c similarity index 72% rename from qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c rename to qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index 16b819cbe..2658ac996 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -22,7 +22,7 @@ along with this program. If not, see . // clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // keymap for default + // keymap for default (VIA) [0] = LAYOUT_universal( KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_MINS , @@ -52,32 +52,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [4] = LAYOUT_universal( - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , + RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , + RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , + QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT ), [5] = LAYOUT_universal( - _______ , _______ , _______ , _______ , _______ , _______ , SCRL_DVI , CPI_I100 , _______ , RGB_TOG , - _______ , _______ , _______ , _______ , _______ , SCRL_DVD , CPI_D100 , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , _______ , _______ , _______ , _______ + RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , + RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , + RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , + QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT ), [6] = LAYOUT_universal( - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - KC_LALT , KC_LSFT , _______ ,KC_MS_BTN1, _______ , _______ ,KC_MS_BTN1,KC_MS_BTN3,KC_MS_BTN2, _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , - _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ - ) + RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , + RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , + RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , + QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT + ), }; // clang-format on layer_state_t layer_state_set_user(layer_state_t state) { // Auto enable scroll mode when the highest layer is 3 // keyball_set_scroll_mode(get_highest_layer(state) == 3); - // 自動スクロール有効化 keyball_set_scroll_mode(get_highest_layer(state) == 1 || get_highest_layer(state) == 3); return state; } diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk similarity index 68% rename from qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk rename to qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk index a1dc59227..7ca4f9c37 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/myapp/rules.mk +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk @@ -1,3 +1,5 @@ RGBLIGHT_ENABLE = no OLED_ENABLE = yes + +VIA_ENABLE = yes From 67341b17245a37da263ed489b6f6d1a3a1bd7d9a Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 15:44:30 +0900 Subject: [PATCH 03/13] fix: bugs --- .../keyball/keyball39/keymaps/viamy/config.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h index 9736eae89..dbb23fc1d 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h @@ -20,20 +20,32 @@ along with this program. If not, see . #pragma once -#ifdef RGBLIGHT_ENABLE +//#ifdef RGBLIGHT_ENABLE //# define RGBLIGHT_EFFECT_BREATHING //# define RGBLIGHT_EFFECT_RAINBOW_MOOD //# define RGBLIGHT_EFFECT_RAINBOW_SWIRL //# define RGBLIGHT_EFFECT_SNAKE //# define RGBLIGHT_EFFECT_KNIGHT //# define RGBLIGHT_EFFECT_CHRISTMAS -# define RGBLIGHT_EFFECT_STATIC_GRADIENT +//# define RGBLIGHT_EFFECT_STATIC_GRADIENT //# define RGBLIGHT_EFFECT_RGB_TEST //# define RGBLIGHT_EFFECT_ALTERNATING //# define RGBLIGHT_EFFECT_TWINKLE -#endif +//#endif #define TAP_CODE_DELAY 5 +#define DYNAMIC_KEYMAP_LAYER_COUNT 7 + +#define KEYBALL_CPI_DEFAULT 700 // 光学センサーPMW3360DM の解像度 (CPI) の規定値 +#define KEYBALL_SCROLL_DIV_DEFAULT 4 // スクロール速度の規定値 #define POINTING_DEVICE_AUTO_MOUSE_ENABLE #define AUTO_MOUSE_DEFAULT_LAYER 1 + +// ファームウェアのサイズを削減 +#define NO_ACTION_ONESHOT // 392バイト + +#define IGNORE_MOD_TAP_INTERRUPT // 10バイト +// #define TAPPING_FORCE_HOLD // 34バイト +// 下記三つで444バイト +#define TAPPING_TERM 175 \ No newline at end of file From adf53d0b45c468ed2bbcee4c6a4904e9d2793c32 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 15:47:33 +0900 Subject: [PATCH 04/13] =?UTF-8?q?fix:=20=E3=81=84=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=95=E3=81=9D=E3=81=86=E3=81=AA=E3=81=82=E3=82=8C=E3=81=93?= =?UTF-8?q?=E3=82=8C=E3=82=92=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=A2?= =?UTF-8?q?=E3=82=A6=E3=83=88=E3=81=97=E3=81=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyboards/keyball/keyball39/keymaps/viamy/config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h index dbb23fc1d..aa3ed02b5 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h @@ -43,9 +43,9 @@ along with this program. If not, see . #define AUTO_MOUSE_DEFAULT_LAYER 1 // ファームウェアのサイズを削減 -#define NO_ACTION_ONESHOT // 392バイト +//#define NO_ACTION_ONESHOT // 392バイト -#define IGNORE_MOD_TAP_INTERRUPT // 10バイト +//#define IGNORE_MOD_TAP_INTERRUPT // 10バイト // #define TAPPING_FORCE_HOLD // 34バイト // 下記三つで444バイト #define TAPPING_TERM 175 \ No newline at end of file From e90ae658a9336bd5f29a64351f02df8853c568cd Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:01:28 +0900 Subject: [PATCH 05/13] =?UTF-8?q?feat:=20kamidai=20=E3=81=95=E3=82=93?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E3=81=9D=E3=81=86=E3=81=AA=E3=82=82=E3=81=AE=E3=82=92=E5=8F=96?= =?UTF-8?q?=E3=82=8A=E8=BE=BC=E3=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyball/keyball39/keymaps/viamy/config.h | 8 +- .../keymaps/viamy/features/auto_click_layer.h | 146 +++++ .../keyball39/keymaps/viamy/features/combo.h | 58 ++ .../keymaps/viamy/features/macro_keys.h | 537 ++++++++++++++++++ .../keymaps/viamy/features/swipe_gesture.h | 129 +++++ .../keyball/keyball39/keymaps/viamy/keymap.c | 5 + .../keyball/keyball39/keymaps/viamy/rules.mk | 6 + .../keyball39/keymaps/viamy/utils/functions.h | 6 + 8 files changed, 893 insertions(+), 2 deletions(-) create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/combo.h create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h index aa3ed02b5..10c733657 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h @@ -33,6 +33,10 @@ along with this program. If not, see . //# define RGBLIGHT_EFFECT_TWINKLE //#endif +#define COMBO_COUNT 9 + +#define KEYBALL_SCROLLSNAP_ENABLE 0 // scrollsnapをオフにする + #define TAP_CODE_DELAY 5 #define DYNAMIC_KEYMAP_LAYER_COUNT 7 @@ -43,9 +47,9 @@ along with this program. If not, see . #define AUTO_MOUSE_DEFAULT_LAYER 1 // ファームウェアのサイズを削減 -//#define NO_ACTION_ONESHOT // 392バイト +#define NO_ACTION_ONESHOT // 392バイト -//#define IGNORE_MOD_TAP_INTERRUPT // 10バイト +#define IGNORE_MOD_TAP_INTERRUPT // 10バイト // #define TAPPING_FORCE_HOLD // 34バイト // 下記三つで444バイト #define TAPPING_TERM 175 \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h new file mode 100644 index 000000000..d3e23373e --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h @@ -0,0 +1,146 @@ + +// https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai/features/auto_click_layer.h + +enum ball_state { + NONE = 0, + WAITING, // マウスレイヤーが有効になるのを待つ + CLICKABLE, // マウスレイヤー有効になりクリック入力が取れる + CLICKING, // クリック中 + CLICKED, // クリック直後 + SWIPE, // スワイプモードが有効になりスワイプ入力が取れる + SWIPING // スワイプ中 + +}; + +enum ball_state state; // 現在のクリック入力受付の状態 +uint16_t click_timer; // タイマー。状態に応じて時間で判定する + +uint16_t clicked_stay_time = 150; // CLICKEDの滞在時間(千分の一秒)。その後、クリックレイヤーが無効になる +uint16_t clickable_stay_time = 1400; // CLICKABLEの滞在時間(千分の一秒)。その後、クリックレイヤーが無効になる + +const int16_t to_clickable_movement = 0; // クリックレイヤーが有効になるしきい値 +const uint16_t click_layer = 6; // マウス入力が可能になった際に有効になるレイヤー + +int16_t mouse_record_threshold = 30; // ポインターの動きを一時的に記録するフレーム数 +int16_t mouse_move_count_ratio = 5; // ポインターの動きを再生する際の移動フレームの係数 + +// Modifierが絡むときの挙動が理想とは違ったので、一旦コメントアウト +// const uint16_t ignore_disable_mouse_layer_keys[] = {KC_LANG1, KC_LANG2}; // この配列で指定されたキーはマウスレイヤー中に押下してもマウスレイヤーを解除しない + +int16_t mouse_movement; + +// クリック用のレイヤーを有効にする +void enable_click_layer(void) { + layer_on(click_layer); + click_timer = timer_read(); + state = CLICKABLE; +} + +// クリック用のレイヤーを無効にする +void disable_click_layer(void) { + state = NONE; + layer_off(click_layer); +} + +// マウスレポートを受け取り、それに基づいて様々なアクションを実行する関数 +report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { + int16_t current_x = mouse_report.x; // 現在のマウスのX座標 + int16_t current_y = mouse_report.y; // 現在のマウスのY座標 + + // マウスが動いているかどうかチェック + if (current_x != 0 || current_y != 0) { + // マウスが動いたときのアクションを各状態ごとに制御する + switch (state) { + case WAITING: + mouse_movement += my_abs(current_x) + my_abs(current_y); // マウスの移動距離を加算 + + // マウスの移動距離が閾値を超えた場合 + if (mouse_movement >= to_clickable_movement) { + mouse_movement = 0; // マウスの動きを0にリセット + enable_click_layer(); // クリック可能状態( state = CLICKABLE )に遷移 + } + break; + + case CLICKABLE: + click_timer = timer_read(); // タイマーをリセット + break; + + case CLICKING: + // 状態が"クリック中"のときは何もしない + break; + + case SWIPE: + click_timer = timer_read(); // タイマーをリセット + + // マウスの移動が閾値を超えた場合、スワイプを処理 + if (my_abs(current_x) >= SWIPE_THRESHOLD || my_abs(current_y) >= SWIPE_THRESHOLD) { + rgblight_sethsv(HSV_PINK); // LEDをピンクに変更 + process_swipe_gesture(current_x, current_y); // スワイプジェスチャを処理 + is_swiped = true; + + // 一度のスワイプにつき、一回のジェスチャーを処理する + if (is_repeat == false) { + state = SWIPING; // スワイプ中状態に遷移 + } + } + break; + + case SWIPING: + // 状態が"スワイプ中"のときは何もしない + break; + + default: + click_timer = timer_read(); // タイマーをリセット + state = WAITING; + mouse_movement = 0; // マウスの動きを0にリセット + } + } else { + // マウスが動いていないとき、各状態ごとに以下のアクションに実行する + switch (state) { + case WAITING: + // 一定時間が経過したら、マウスの動きを0にリセットし、状態をNONEに変更 + if (timer_elapsed(click_timer) > 50) { + mouse_movement = 0; + state = NONE; + } + break; + + case CLICKABLE: + // クリック可能状態が一定時間持続したら、クリックレイヤーを無効化 + if (timer_elapsed(click_timer) > clickable_stay_time) { + disable_click_layer(); + } + break; + + case CLICKING: + // 状態が"クリック中"のときは何もしない + break; + + case CLICKED: + // クリック後一定時間経過でクリックレイヤーを無効化 + if (timer_elapsed(click_timer) > clicked_stay_time) { + disable_click_layer(); + } + break; + + case SWIPE: + rgblight_sethsv(HSV_SPRINGGREEN); // LEDをスプリング・グリーンに変更 + break; + + case SWIPING: + // 一定時間が経過したら、状態をSWIPEに変更 + if (timer_elapsed(click_timer) > 300) { + state = SWIPE; + } + break; + + default: + mouse_movement = 0; // マウスの動きを0にリセット + state = NONE; + } + } + mouse_report.x = current_x; // 新しいマウスのX座標をマウスレポートにセット + mouse_report.y = current_y; // 新しいマウスのY座標をマウスレポートにセット + + return mouse_report; // マウスレポートを返す +} \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/combo.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/combo.h new file mode 100644 index 000000000..85140830f --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/combo.h @@ -0,0 +1,58 @@ +/* Copyright 2023 kamidai (@d_kamiichi) + * + * 参考ページ + * 公式:https://docs.qmk.fm/#/ja/feature_combo?id=%e3%82%b3%e3%83%b3%e3%83%9c + * + * 注意: 以下の設定が必要です + * rules.mk: COMBO_ENABLE = yes + * config.h: #define COMBO_COUNT 2(=実際に設定するコンボ数) + */ + +enum combos { + COMBO_F14, + COMBO_F15 +}; + +// const uint16_t PROGMEM f14_combo[] = {KC_DOWN, KC_I, COMBO_END}; +// const uint16_t PROGMEM f15_combo[] = {G(KC_C), KC_UP, COMBO_END}; +// const uint16_t PROGMEM combo_layer_1[] = {KC_F, KC_D, COMBO_END}; +// const uint16_t PROGMEM combo_layer_2[] = {KC_J, KC_K, COMBO_END}; +// const uint16_t PROGMEM combo_layer_3[] = {KC_D, KC_S, COMBO_END}; +// const uint16_t PROGMEM combo_layer_3[] = {KC_S, KC_A, COMBO_END}; + +const uint16_t PROGMEM combo_BRC[] = {KC_LBRC, KC_RBRC, COMBO_END}; +const uint16_t PROGMEM combo_select_BRC[] = {KC_LBRC, S(KC_EQUAL), COMBO_END}; + +const uint16_t PROGMEM combo_S9_S0[] = {S(KC_9), S(KC_0), COMBO_END}; +const uint16_t PROGMEM combo_select_S9_S0[] = {S(KC_9), KC_MINUS, COMBO_END}; + +const uint16_t PROGMEM combo_S_BRC[] = {S(KC_LBRC), S(KC_RBRC), COMBO_END}; +const uint16_t PROGMEM combo_select_S_BRC[] = {S(KC_LBRC), KC_RBRC, COMBO_END}; + +const uint16_t PROGMEM combo_sumitsuki_BRC[] = {SFT_T(KC_GRAVE), KC_LBRC, COMBO_END}; +const uint16_t PROGMEM combo_select_sumitsuki_BRC[] = {SFT_T(KC_GRAVE), S(KC_0), COMBO_END}; + +const uint16_t PROGMEM combo_MINUS_SPACE[] = {KC_RBRC, S(KC_EQUAL), COMBO_END}; + +combo_t key_combos[] = { + // [COMBO_F14] = COMBO(f14_combo, KC_F14), + // [COMBO_F15] = COMBO(f15_combo, KC_F15) + // COMBO(combo_layer_1, MO(3)), + // COMBO(combo_layer_2, MO(3)), + // COMBO(combo_layer_3, MO(2)), + + COMBO(combo_BRC, COMBO_BRC), + COMBO(combo_select_BRC, COMBO_select_BRC), + + COMBO(combo_S9_S0, COMBO_S9_S0), + COMBO(combo_select_S9_S0, COMBO_select_S9_S0), + + COMBO(combo_S_BRC, COMBO_S_BRC), + COMBO(combo_select_S_BRC, COMBO_select_S_BRC), + + COMBO(combo_sumitsuki_BRC, COMBO_sumitsuki_BRC), + COMBO(combo_select_sumitsuki_BRC, COMBO_select_sumitsuki_BRC), + + COMBO(combo_MINUS_SPACE, COMBO_MINUS_SPACE), + +}; \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h new file mode 100644 index 000000000..70ca73365 --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h @@ -0,0 +1,537 @@ +// https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai/features/macro_keys.h +/* Copyright 2023 kamidai (@d_kamiichi) + * + * 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 . + * + * コード表: + * - 公式ファームウェアのキーコード: + * KBC_RST(0x5DA5): Keyball 設定のリセット + * KBC_SAVE(0x5DA6): 現在の Keyball 設定を EEPROM に保存します + * CPI_I100(0x5DA7): CPI を 100 増加させます(最大:12000) + * CPI_D100(0x5DA8): CPI を 100 減少させます(最小:100) + * CPI_I1K(0x5DA9): CPI を 1000 増加させます(最大:12000) + * CPI_D1K(0x5DAA): CPI を 1000 減少させます(最小:100) + * SCRL_TO(0x5DAB): タップごとにスクロールモードの ON/OFF を切り替えます + * SCRL_MO(0x5DAC): キーを押している間、スクロールモードになります + * SCRL_DVI(0x5DAD): スクロール除数を1つ上げます(max D7 = 1/128)← 最もスクロール遅い + * SCRL_DVD(0x5DAE): スクロール除数を1つ下げます(min D0 = 1/1)← 最もスクロール速い + */ + +enum custom_keycodes { + KC_BACK_TO_LAYER0_BTN1 = KEYBALL_SAFE_RANGE, // (0x5DAF): レイヤー0に遷移できるBTN1 + KC_DOUBLE_CLICK_BTN1, // (0x5DB0): 1タップでダブルクリックできるBTN1 + KC_TRIPLE_CLICK_BTN1, // (0x5DB1): 1タップでトリプルクリックできるBTN1 + SFT_T_G_KC_A, // (0x5DB2): + SFT_T_S_KC_SCOLON, // (0x5DB3): + COMBO_BRC, // (0x5DB5): + COMBO_select_BRC, // (0x5DB5): + COMBO_S9_S0, // (0x5DB5): + COMBO_select_S9_S0, // (0x5DB5): + COMBO_S_BRC, // (0x5DB5): + COMBO_select_S_BRC, // (0x5DB5): + COMBO_sumitsuki_BRC, // (0x5DB5): + COMBO_select_sumitsuki_BRC, // (0x5DB5): + COMBO_MINUS_SPACE, // (0x5DB5): + // CUSTOM_LT1_LEFT, // + // CUSTOM_LT1_LEFT, // + // CUSTOM_S9, // + // CUSTOM_S0, // + // KC_ALT_BTN1, // + // select_BRC, + // CMD_SCRL, +}; + +// マクロキーの処理を行う関数 +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + current_keycode = keycode; // 押下されたキーコードを保存する + bool mod_pressed = (get_mods() != 0); // 修飾キーが押されているかを判定(0でなければ修飾キーが押されている) + + static bool is_gui_active = false; + static bool is_ctrl_active = false; + + static bool is_lt1_pressed = false; // レイヤー1の状態を追跡する変数 + static bool is_lt2_pressed = false; // レイヤー2の状態を追跡する変数 + static bool is_lt3_pressed = false; // レイヤー3の状態を追跡する変数 + + // static bool is_eisuu = false; // レイヤー1の状態を追跡する変数 + static bool is_kana = false; // レイヤー1の状態を追跡する変数 + + switch (keycode) { + // デフォルトのマウスキーを自動クリックレイヤーで使用可能にする + case KC_MS_BTN1: + case KC_MS_BTN2: + case KC_MS_BTN3: + case KC_MS_BTN4: + case KC_MS_BTN5: { + if (click_layer && get_highest_layer(layer_state) == click_layer) { + if (record->event.pressed) { + // キーダウン時: 状態をCLICKINGに設定 + state = CLICKING; + } else { + // キーアップ時: クリックレイヤーを有効にして、状態をCLICKEDに設定 + enable_click_layer(); + state = CLICKED; + } + } + return true; + } + + // 以下のキーは自動クリックレイヤーで使用可能にする + case KC_LALT: + case KC_LSFT: { + return true; + } + + // レイヤー1の間は、TABは "command + タブ" になる + // レイヤー3の間は、TABは "control + タブ" になる + case KC_TAB: { + if (record->event.pressed) { + is_gui_active = true; + + if (get_highest_layer(layer_state) == 1) { + // キーダウン時: + register_code(KC_LGUI); + is_gui_active = true; + // tap_code(KC_TAB); + enable_click_layer(); + } else if (get_highest_layer(layer_state) == 3) { + // キーダウン時: + register_code(KC_LCTRL); + is_ctrl_active = true; + // tap_code(KC_TAB); + enable_click_layer(); + } + } + return true; + } + + // 上位レイヤーから下位レイヤーへ移動できるようにする + // case LT(1, KC_LANG2): + // case LT(1, KC_LANG1): + // case LT(2, KC_V): + // case S(KC_8): { + // // int16_t hlayer = get_highest_layer(layer_state); + // // if (get_highest_layer(layer_state) == 2) { + // if (record->event.pressed) { + // // キーダウン時: + // lt_timer = timer_read(); // 現在のタイマー値を記録 + // previous_layer = get_highest_layer(layer_state); // 現在の最上位レイヤーを記録 + // layer_off(previous_layer); // 現在のレイヤーをオフにする + + // if (keycode == LT(1, KC_LANG2) || keycode == LT(1, KC_LANG1)) { + // layer_on(1); + // } else if (keycode == LT(2, KC_V) || keycode == S(KC_8)) { + // layer_on(2); + // } + // } else { + // // キーアップ時: + // layer_on(previous_layer); // 前のレイヤーをオンにする + // if (keycode == LT(1, KC_LANG2) || keycode == LT(1, KC_LANG1)) { + // layer_off(1); + // } else if (keycode == LT(2, KC_V) || keycode == S(KC_8)) { + // layer_off(2); + // } + // if (timer_elapsed(lt_timer) < TAPPING_TERM) { + // // タッピングタイム内に放された場合はタップ動作 + // if (keycode == LT(1, KC_LANG2)) { + // tap_code(KC_LANG2); + // } else if (keycode == LT(1, KC_LANG1)) { + // tap_code(KC_LANG1); + // } else if (keycode == LT(2, KC_V)) { + // tap_code(KC_V); + // } else if (keycode == S(KC_8)) { + // tap_code16(S(KC_8)); + // } + // } + + // } + // } + // return false; + // } + + static bool is_lt1_lang2_pressed = false; // LT(1, KC_LANG2)の状態を追跡 + static bool is_lt1_lang1_pressed = false; // LT(1, KC_LANG1)の状態を追跡 + + // 上位レイヤーから下位レイヤーへ移動できるようにする + case LT(1, KC_LANG2): // レイヤー1へのキー + case LT(1, KC_LANG1): // レイヤー1へのキー + if (record->event.pressed) { + click_timer = timer_read(); + is_lt1_pressed = true; + if (keycode == LT(1, KC_LANG2)) { + is_lt1_lang2_pressed = true; + } else if (keycode == LT(1, KC_LANG1)) { + is_lt1_lang1_pressed = true; + } + layer_on(1); // レイヤー1をオンにする + disable_click_layer(); + + if (is_lt2_pressed) { + layer_off(2); // LT2が既に押されていればレイヤー2をオフにする + } else if (is_lt3_pressed) { + layer_off(3); // LT3が既に押されていればレイヤー3をオフにする + } + } else { + is_lt1_pressed = false; + if (keycode == LT(1, KC_LANG2)) { + is_lt1_lang2_pressed = false; + } else if (keycode == LT(1, KC_LANG1)) { + is_lt1_lang1_pressed = false; + } + if (!is_lt1_lang2_pressed && !is_lt1_lang1_pressed) { + layer_off(1); + } + if (is_lt2_pressed) { + layer_on(2); // LT2が押されていればレイヤー2をオンにする + } else if (is_lt3_pressed) { + layer_on(3); // LT3が押されていればレイヤー3をオンにする + } + + if (timer_elapsed(click_timer) < TAPPING_TERM) { + // タッピングタイム内に放された場合はタップ動作 + if (keycode == LT(1, KC_LANG2)) { + tap_code(KC_LANG2); + // is_eisuu = true; + is_kana = false; + } else if (keycode == LT(1, KC_LANG1)) { + tap_code(KC_LANG1); + is_kana = true; + } + } + + if (is_gui_active) { + unregister_code(KC_LGUI); + is_gui_active = false; + } + } + return false; + + case LT(2, KC_V): // レイヤー2へのキー + case S(KC_DOT): // レイヤー2へのキー + if (record->event.pressed) { + click_timer = timer_read(); + is_lt2_pressed = true; + layer_on(2); // レイヤー2をオンにする + disable_click_layer(); + + if (is_lt1_pressed) { + layer_off(1); // LT1が既に押されていればレイヤー1をオフにする + } else if (is_lt3_pressed) { + layer_off(3); // LT3が既に押されていればレイヤー3をオフにする + } + } else { + is_lt2_pressed = false; + layer_off(2); // LTが押されていなければレイヤー2をオフにする + + if (is_lt1_pressed) { + layer_on(1); // LT1が押されていればレイヤー1をオンにする + } else if (is_lt3_pressed) { + layer_on(3); // LT1が押されていればレイヤー1をオンにする + } + + if (timer_elapsed(click_timer) < TAPPING_TERM) { + // タッピングタイム内に放された場合はタップ動作 + if (keycode == LT(2, KC_V)) { + tap_code(KC_V); + } else if (keycode == S(KC_DOT)) { + tap_code16(S(KC_DOT)); + } + } + } + return false; + + case LT(3, KC_ESC): // レイヤー3へのキー + if (record->event.pressed) { + click_timer = timer_read(); + is_lt3_pressed = true; + layer_on(3); // レイヤー3をオンにする + disable_click_layer(); + + if (is_lt1_pressed) { + layer_off(1); // LT1が既に押されていればレイヤー1をオフにする + } else if (is_lt2_pressed) { + layer_off(2); // LT2が既に押されていればレイヤー2をオフにする + } + } else { + is_lt3_pressed = false; + layer_off(3); // LT3をオフにする + + if (is_lt1_pressed) { + layer_on(1); // LT1が押されていればレイヤー1をオンにする + } else if (is_lt2_pressed) { + layer_on(2); // LT2が押されていればレイヤー2をオンにする + } + + if (timer_elapsed(click_timer) < TAPPING_TERM) { + // タッピングタイム内に放された場合はタップ動作 + tap_code(KC_ESC); + } + + if (is_ctrl_active) { + unregister_code(KC_LCTRL); + is_ctrl_active = false; + } + } + return false; + + // SFT_Tのカスタムキーコード + case SFT_T_G_KC_A: + case SFT_T_S_KC_SCOLON: + if (record->event.pressed) { + // キーが押されたとき + click_timer = timer_read(); + register_code(KC_LSFT); + } else { + // キーが放されたとき + unregister_code(KC_LSFT); + + if (timer_elapsed(click_timer) < TAPPING_TERM) { + // タッピングタイム内に放された場合はタップ動作 + if (keycode == SFT_T_G_KC_A) { + tap_code16(G(KC_A)); + } + if (keycode == SFT_T_S_KC_SCOLON) { + tap_code16(S(KC_SCOLON)); + } + } + } + return false; + + // コンボ + case COMBO_MINUS_SPACE: + if (record->event.pressed) { + tap_code(KC_LANG2); // + tap_code(KC_MINUS); // - を送信 + tap_code(KC_SPACE); // スペース を送信 + tap_code(KC_LANG1); // + } + return false; + + case COMBO_BRC: + case COMBO_select_BRC: + case COMBO_S9_S0: + case COMBO_select_S9_S0: + case COMBO_S_BRC: + case COMBO_select_S_BRC: + case COMBO_sumitsuki_BRC: + case COMBO_select_sumitsuki_BRC: + if (record->event.pressed) { + // 選択バージョン + if (keycode == COMBO_select_BRC || keycode == COMBO_select_S9_S0 || keycode == COMBO_select_S_BRC || keycode == COMBO_select_sumitsuki_BRC) { + tap_code16(G(KC_X)); // カット + } + + // if (keycode == COMBO_BRC || keycode == COMBO_S9_S0 || keycode == COMBO_S_BRC || keycode == COMBO_sumitsuki_BRC) { + if (keycode == COMBO_BRC || keycode == COMBO_select_BRC) { + tap_code(KC_LBRC); // 「 を送信 + tap_code(KC_RBRC); // 」 を送信 + } else if (keycode == COMBO_S9_S0 || keycode == COMBO_select_S9_S0) { + tap_code16(S(KC_9)); // ( を送信 + tap_code16(S(KC_0)); // ) を送信 + } else if (keycode == COMBO_S_BRC || keycode == COMBO_select_S_BRC) { + tap_code16(S(KC_LBRC)); // 『 を送信 + tap_code16(S(KC_RBRC)); // 』 を送信 + } else if (keycode == COMBO_sumitsuki_BRC || keycode == COMBO_select_sumitsuki_BRC) { + tap_code16(A(KC_9)); //  を送信 + tap_code16(A(KC_0)); // ) を送信 + } + // かなの場合にKC_ENTを送信 + if (is_kana) { + tap_code(KC_ENT); + } + // KC_LEFT を送信 + tap_code(KC_LEFT); + // } + + // 選択バージョン + if (keycode == COMBO_select_BRC || keycode == COMBO_select_S9_S0 || keycode == COMBO_select_S_BRC || keycode == COMBO_select_sumitsuki_BRC) { + tap_code16(G(KC_V)); // ペースト + wait_ms(130); // 0.1秒(1300ミリ秒)待機 + tap_code(KC_RIGHT); + } + + // KC_RIGHT を送信 + // if (keycode == COMBO_select_BRC || keycode == COMBO_select_S9_S0) { + // wait_ms(100); // 1秒(1000ミリ秒)待機 + // tap_code(KC_RIGHT); + // } + + // if (keycode == COMBO_select_BRC) { + // if (keycode == COMBO_select_BRC) { + // tap_code16(G(KC_X)); // カット + // tap_code(KC_LBRC); // 「 を送信 + + // // かなの場合にKC_ENTを送信 + // if (is_kana) { + // tap_code(KC_ENT); + // } + + // tap_code16(G(KC_V)); // ペースト + // wait_ms(1000); // 1秒(1000ミリ秒)待機 + + // tap_code(KC_RBRC); // 」 を送信 + + // // かなの場合にKC_ENTを送信 + // if (is_kana) { + // tap_code(KC_ENT); + // } + // } + // } + } + return false; + + // karabinerでのコンボ用 + // case CUSTOM_S9: + // if (record->event.pressed) { + // register_code(KC_LSFT); + // register_code(KC_9); + // } else { + // unregister_code(KC_9); + // unregister_code(KC_LSFT); + // } + // return false; + // case CUSTOM_S0: + // if (record->event.pressed) { + // register_code(KC_LSFT); + // register_code(KC_0); + // } else { + // unregister_code(KC_0); + // unregister_code(KC_LSFT); + // } + // return false; + + // case select_BRC: { + // if (record->event.pressed) { + // register_code16(G(KC_X)); + // register_code(KC_LBRC); + // register_code(KC_ENT); + // register_code16(G(KC_V)); + // register_code(KC_RBRC); + // register_code(KC_ENT); + // } else { + // } + // return false; + // } + + // case CMD_SCRL: { + // if (record->event.pressed) { + // register_code16(G(SCRL_MO)); + // } else { + // unregister_code16(G(SCRL_MO)); + // } + // return false; + // } + + // 以下スワイプジェスチャー + // クリックすると state が SWIPE になり、離したら NONE になる + case CMD_T(KC_SPACE): + case SFT_T(KC_LANG2): + case ALT_T(KC_F13): { + if (record->event.pressed) { + // キーダウン時 + state = SWIPE; + } else { + // キーアップ時 + clear_mods(); // すべての修飾キーの状態をクリアする + disable_click_layer(); // クリックレイヤーを無効化する + } + + // 複数の修飾キーが押された場合、LEDをオフにし、スワイプ状態を解除する + if (mod_pressed) { + rgblight_sethsv(HSV_OFF); + state = NONE; + return true; // キーのデフォルトの動作を続行させる + } + + // スワイプが行われた場合、スワイプフラグをリセット + if (is_swiped) { + is_swiped = false; + return false; // キーのデフォルトの動作をスキップする + } + + // スワイプが行われていなかった場合、キーのデフォルトの動作を続行させる + if (!is_swiped) { + return true; + } + } + + // MOD系 + // case KC_LCMD: + // case KC_LALT: + // if (record->event.pressed) + // { + // // キーダウン時 + // state = SWIPE; + // register_code(keycode); + // } + // else + // { + // // キーアップ時 + // clear_mods(); + // disable_click_layer(); + // is_repeat = false; + // } + // return false; + + // TAP系 + // case KC_F: + // case KC_D: + // case KC_S: + // uint16_t alt_tab_timer = 0; + + // TAP系(キーリピートあり) + // case LT(2, KC_ESC): + // if (record->event.pressed) + // { + // // キーダウン時 + // state = SWIPE; + // tap_code(keycode); + // } + // else + // { + // // キーアップ時 + // if (is_swiped == true) + // { + // tap_code(KC_BSPC); + // } + // disable_click_layer(); + // is_repeat = false; + // is_swiped = false; + // } + // return false; + + // TAP系(フリック風) + // case KC_S: + // if (record->event.pressed) + // { + // // キーダウン時 + // state = SWIPE; + // tap_code(keycode); + // } + // else + // { + // // キーアップ時 + // disable_click_layer(); + // } + // return false; + + // その他のキーコードの場合 + default: + if (record->event.pressed) { + // キーダウン時 + disable_click_layer(); // クリックレイヤーを無効化 + } + } + return true; +} \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h new file mode 100644 index 000000000..1e26330ee --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h @@ -0,0 +1,129 @@ +/* Copyright 2023 kamidai (@d_kamiichi) + * + * 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 . + * + * ------------------------------------------------------------------- + * + * 参考文献: + * - 以下のリソースを参考にしました: + * https://www.reddit.com/r/ploopy/comments/pbmrh3/qmk_options_on_ploopy_mouse_gestures/ + * https://github.com/RobertCurry0216/qmk_firmware/blob/59f83aac8fa06010c3a1a0a53fcd453d96ce2f80/keyboards/ploopyco/trackball/keymaps/robertcurry0216/keymap.c + * + */ + +// NOTE https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai/features/swipe_gesture.h +// ここから持ってきたけど一旦使わないかも + +int16_t current_keycode; +const int16_t SWIPE_THRESHOLD = 10; +bool is_swiped = false; +bool is_repeat = false; + +// スワイプジェスチャーで何が起こるかを処理する関数です +// 上、下、左、右の4つのオプションがあります +void process_swipe_gesture(int16_t x, int16_t y) { + // Alt + if (current_keycode == ALT_T(KC_F13)) { + unregister_code(KC_LALT); + + // 拡大と縮小 + if (my_abs(x) < my_abs(y)) { + register_code(KC_LCMD); + + if (y < 0) { + // swipe up: 拡大 + tap_code(KC_EQUAL); + } else { + // swipe down: 縮小 + tap_code(KC_MINUS); + } + } + + // 次のモニターへ移動 + if (my_abs(x) > my_abs(y)) { + register_code(KC_LCTRL); + + if (x < 0) { + // swipe left: + tap_code(KC_7); + } else { + // swipe right: + tap_code(KC_7); + } + } + unregister_code(KC_LCMD); + unregister_code(KC_LCTRL); + + register_code(KC_LALT); + } + + // shift + if (current_keycode == SFT_T(KC_LANG2)) { + unregister_code(KC_LALT); + register_code(KC_LCMD); + + // CMD + J + if (my_abs(x) < my_abs(y)) { + if (y < 0) { + // swipe up: + tap_code(KC_J); + } else { + // swipe down: + tap_code(KC_J); + } + } + // ページの戻る、進む + if (my_abs(x) > my_abs(y)) { + if (x < 0) { + // swipe left: 戻る + tap_code(KC_LBRACKET); + } else { + // swipe right: 進む + tap_code(KC_RBRACKET); + } + } + unregister_code(KC_LCMD); + register_code(KC_LALT); + } + + // CMD + if (current_keycode == CMD_T(KC_SPACE)) { + unregister_code(KC_LCMD); + register_code(KC_LCTRL); + + // ウインドウのサイズ変更と移動(BetterTouchToolで設定) + if (my_abs(x) < my_abs(y)) { + if (y < 0) { + // swipe up: ウィンドウを最大化 + tap_code(KC_8); + } else { + // swipe down: ウインドウを最小サイズで中央へ + tap_code(KC_2); + } + } + // ウインドウのサイズ変更と移動(BetterTouchToolで設定) + if (my_abs(x) > my_abs(y)) { + if (x < 0) { + // swipe left: ウインドウを1/2サイズで左へ + tap_code(KC_4); + } else { + // swipe right: ウインドウを1/2サイズで右へ + tap_code(KC_6); + } + } + + unregister_code(KC_LCTRL); + register_code(KC_LCMD); + } +} \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index 2658ac996..44646a38a 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -20,6 +20,11 @@ along with this program. If not, see . #include "quantum.h" +#include "utils/functions.h" + +#include "features/auto_click_layer.h" +#include "features/macro_keys.h" + // clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // keymap for default (VIA) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk index 7ca4f9c37..24b9d93e0 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk @@ -3,3 +3,9 @@ RGBLIGHT_ENABLE = no OLED_ENABLE = yes VIA_ENABLE = yes + +COMBO_ENABLE = yes + +# ファームウェアのサイズを削減 +EXTRAFLAGS += -flto +GRAVE_ESC_ENABLE = no \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h new file mode 100644 index 000000000..722688b74 --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h @@ -0,0 +1,6 @@ +int16_t my_abs(int16_t num) { + if (num < 0) { + num = -num; + } + return num; +} \ No newline at end of file From 333821b2303ccdd64172832022d1dc25247ad867 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:07:12 +0900 Subject: [PATCH 06/13] fix: fix error nx --- .../keyball39/keymaps/viamy/features/auto_click_layer.h | 4 ++-- .../keyboards/keyball/keyball39/keymaps/viamy/keymap.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h index d3e23373e..10b64b930 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h @@ -74,7 +74,7 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { // マウスの移動が閾値を超えた場合、スワイプを処理 if (my_abs(current_x) >= SWIPE_THRESHOLD || my_abs(current_y) >= SWIPE_THRESHOLD) { - rgblight_sethsv(HSV_PINK); // LEDをピンクに変更 +// rgblight_sethsv(HSV_PINK); // LEDをピンクに変更 process_swipe_gesture(current_x, current_y); // スワイプジェスチャを処理 is_swiped = true; @@ -124,7 +124,7 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { break; case SWIPE: - rgblight_sethsv(HSV_SPRINGGREEN); // LEDをスプリング・グリーンに変更 +// rgblight_sethsv(HSV_SPRINGGREEN); // LEDをスプリング・グリーンに変更 break; case SWIPING: diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index 44646a38a..513607af2 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -22,6 +22,7 @@ along with this program. If not, see . #include "utils/functions.h" +#include "features/swipe_gesture.h" #include "features/auto_click_layer.h" #include "features/macro_keys.h" From 97ec1b489d1f8f1719330c3f87f274f0bcdbb565 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:12:55 +0900 Subject: [PATCH 07/13] fix: errors 2 --- .../keymaps/viamy/features/macro_keys.h | 130 ------------------ .../keyball/keyball39/keymaps/viamy/keymap.c | 2 +- .../keyball/keyball39/keymaps/viamy/rules.mk | 2 +- 3 files changed, 2 insertions(+), 132 deletions(-) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h index 70ca73365..ff1f938ce 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h @@ -360,79 +360,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { wait_ms(130); // 0.1秒(1300ミリ秒)待機 tap_code(KC_RIGHT); } - - // KC_RIGHT を送信 - // if (keycode == COMBO_select_BRC || keycode == COMBO_select_S9_S0) { - // wait_ms(100); // 1秒(1000ミリ秒)待機 - // tap_code(KC_RIGHT); - // } - - // if (keycode == COMBO_select_BRC) { - // if (keycode == COMBO_select_BRC) { - // tap_code16(G(KC_X)); // カット - // tap_code(KC_LBRC); // 「 を送信 - - // // かなの場合にKC_ENTを送信 - // if (is_kana) { - // tap_code(KC_ENT); - // } - - // tap_code16(G(KC_V)); // ペースト - // wait_ms(1000); // 1秒(1000ミリ秒)待機 - - // tap_code(KC_RBRC); // 」 を送信 - - // // かなの場合にKC_ENTを送信 - // if (is_kana) { - // tap_code(KC_ENT); - // } - // } - // } } return false; - // karabinerでのコンボ用 - // case CUSTOM_S9: - // if (record->event.pressed) { - // register_code(KC_LSFT); - // register_code(KC_9); - // } else { - // unregister_code(KC_9); - // unregister_code(KC_LSFT); - // } - // return false; - // case CUSTOM_S0: - // if (record->event.pressed) { - // register_code(KC_LSFT); - // register_code(KC_0); - // } else { - // unregister_code(KC_0); - // unregister_code(KC_LSFT); - // } - // return false; - - // case select_BRC: { - // if (record->event.pressed) { - // register_code16(G(KC_X)); - // register_code(KC_LBRC); - // register_code(KC_ENT); - // register_code16(G(KC_V)); - // register_code(KC_RBRC); - // register_code(KC_ENT); - // } else { - // } - // return false; - // } - - // case CMD_SCRL: { - // if (record->event.pressed) { - // register_code16(G(SCRL_MO)); - // } else { - // unregister_code16(G(SCRL_MO)); - // } - // return false; - // } - // 以下スワイプジェスチャー // クリックすると state が SWIPE になり、離したら NONE になる case CMD_T(KC_SPACE): @@ -466,66 +396,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } - // MOD系 - // case KC_LCMD: - // case KC_LALT: - // if (record->event.pressed) - // { - // // キーダウン時 - // state = SWIPE; - // register_code(keycode); - // } - // else - // { - // // キーアップ時 - // clear_mods(); - // disable_click_layer(); - // is_repeat = false; - // } - // return false; - - // TAP系 - // case KC_F: - // case KC_D: - // case KC_S: - // uint16_t alt_tab_timer = 0; - - // TAP系(キーリピートあり) - // case LT(2, KC_ESC): - // if (record->event.pressed) - // { - // // キーダウン時 - // state = SWIPE; - // tap_code(keycode); - // } - // else - // { - // // キーアップ時 - // if (is_swiped == true) - // { - // tap_code(KC_BSPC); - // } - // disable_click_layer(); - // is_repeat = false; - // is_swiped = false; - // } - // return false; - - // TAP系(フリック風) - // case KC_S: - // if (record->event.pressed) - // { - // // キーダウン時 - // state = SWIPE; - // tap_code(keycode); - // } - // else - // { - // // キーアップ時 - // disable_click_layer(); - // } - // return false; - // その他のキーコードの場合 default: if (record->event.pressed) { diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index 513607af2..4642fd221 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -24,7 +24,7 @@ along with this program. If not, see . #include "features/swipe_gesture.h" #include "features/auto_click_layer.h" -#include "features/macro_keys.h" +//#include "features/macro_keys.h" // clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk index 24b9d93e0..0f2e0ffbc 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk @@ -4,7 +4,7 @@ OLED_ENABLE = yes VIA_ENABLE = yes -COMBO_ENABLE = yes +# COMBO_ENABLE = yes # ファームウェアのサイズを削減 EXTRAFLAGS += -flto From 7c3c50caa961a46e453a1a75be4f7efce4fd6c51 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:20:08 +0900 Subject: [PATCH 08/13] fix: add keycode --- .../keyball39/keymaps/viamy/utils/keycode.txt | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt new file mode 100644 index 000000000..840741a9b --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt @@ -0,0 +1,197 @@ +KC_NO XXXXXXX このキーを無視します (何もしません) 。 N/A N/A N/A +KC_TRANSPARENT KC_TRNS, _______ 次に低いレイヤーの非透過キーを使う N/A N/A N/A +KC_A a と A ✔ ✔ ✔ +KC_B b と B ✔ ✔ ✔ +KC_C c と C ✔ ✔ ✔ +KC_D d と D ✔ ✔ ✔ +KC_E e と E ✔ ✔ ✔ +KC_F f と F ✔ ✔ ✔ +KC_G g と G ✔ ✔ ✔ +KC_H h と H ✔ ✔ ✔ +KC_I i と I ✔ ✔ ✔ +KC_J j と J ✔ ✔ ✔ +KC_K k と K ✔ ✔ ✔ +KC_L l と L +KC_M m と M ✔ ✔ ✔ +KC_N n と N ✔ ✔ ✔ +KC_O o と O ✔ ✔ ✔ +KC_P p と P ✔ ✔ ✔ +KC_Q q と Q ✔ ✔ ✔ +KC_R r と R ✔ ✔ ✔ +KC_S s と S ✔ ✔ ✔ +KC_T t と T ✔ ✔ ✔ +KC_U u と U ✔ ✔ ✔ +KC_V v と V +KC_W w と W ✔ ✔ ✔ +KC_X x と X ✔ ✔ ✔ +KC_Y y と Y ✔ ✔ ✔ +KC_Z z と Z ✔ ✔ ✔ +KC_1 1 と ! ✔ ✔ ✔ +KC_2 2 と @ ✔ ✔ ✔ +KC_3 3 と # ✔ ✔ ✔ +KC_4 4 と $ ✔ ✔ ✔ +KC_5 5 と % ✔ ✔ ✔ +KC_6 6 と ^ ✔ ✔ ✔ +KC_7 7 と & ✔ ✔ ✔ +KC_8 8 と * ✔ ✔ ✔ +KC_9 9 と ( ✔ ✔ ✔ +KC_0 0 と ) +KC_ENTER KC_ENT Return (Enter) ✔ ✔ ✔ +KC_ESCAPE KC_ESC Escape ✔ ✔ ✔ +KC_BSPACE KC_BSPC Delete (Backspace) ✔ ✔ ✔ +KC_TAB Tab ✔ ✔ ✔ +KC_SPACE KC_SPC Spacebar ✔ ✔ ✔ +KC_MINUS KC_MINS - と _ ✔ ✔ ✔ +KC_EQUAL KC_EQL = と + ✔ ✔ ✔ +KC_LBRACKET KC_LBRC [ と { ✔ ✔ ✔ +KC_RBRACKET KC_RBRC ] と } ✔ ✔ ✔ +KC_BSLASH KC_BSLS \ と | ✔ ✔ ✔ +KC_NONUS_HASH KC_NUHS Non-US # と ~ ✔ ✔ ✔ +KC_SCOLON KC_SCLN ; と : ✔ ✔ ✔ +KC_QUOTE KC_QUOT ' と " ✔ ✔ ✔ +KC_GRAVE KC_GRV, KC_ZKHK ` と ~, JIS 全角/半角 ✔ ✔ ✔ +KC_COMMA KC_COMM , と < ✔ ✔ ✔ +KC_DOT . と > ✔ ✔ ✔ +KC_SLASH KC_SLSH / と ? ✔ ✔ ✔ +KC_CAPSLOCK KC_CLCK, KC_CAPS Caps Lock +KC_F1 F1 ✔ ✔ ✔ +KC_F2 F2 ✔ ✔ ✔ +KC_F3 F3 ✔ ✔ ✔ +KC_F4 F4 ✔ ✔ ✔ +KC_F5 F5 ✔ ✔ ✔ +KC_F6 F6 ✔ ✔ ✔ +KC_F7 F7 ✔ ✔ ✔ +KC_F8 F8 ✔ ✔ ✔ +KC_F9 F9 ✔ ✔ ✔ +KC_F10 F10 ✔ ✔ ✔ +KC_F11 F11 ✔ ✔ ✔ +KC_F12 F12 +KC_PSCREEN KC_PSCR Print Screen ✔ ✔2 ✔ +KC_SCROLLLOCK KC_SCRL, KC_BRMD Scroll Lock, 画面の明るさダウン (macOS) ✔ ✔2 ✔ +KC_PAUSE KC_PAUS, KC_BRK, KC_BRMU Pause, 画面の明るさアップ (macOS) ✔ ✔2 ✔ +KC_INSERT KC_INS Insert ✔ ✔ +KC_HOME Home ✔ ✔ ✔ +KC_PGUP Page Up ✔ ✔ ✔ +KC_DELETE KC_DEL Forward Delete ✔ ✔ ✔ +KC_END End ✔ ✔ ✔ +KC_PGDOWN KC_PGDN Page Down ✔ ✔ ✔ +KC_RIGHT KC_RGHT 右矢印 ✔ ✔ ✔ +KC_LEFT 左矢印 ✔ ✔ ✔ +KC_DOWN 下矢印 ✔ ✔ ✔ +KC_UP 上矢印 ✔ ✔ ✔ +KC_NUMLOCK KC_NUM テンキー Num Lock と Clear +KC_KP_SLASH KC_PSLS テンキー / ✔ ✔ ✔ +KC_KP_ASTERISK KC_PAST テンキー * ✔ ✔ ✔ +KC_KP_MINUS KC_PMNS テンキー - ✔ ✔ ✔ +KC_KP_PLUS KC_PPLS テンキー + ✔ ✔ ✔ +KC_KP_ENTER KC_PENT テンキー Enter ✔ ✔ ✔ +KC_KP_1 KC_P1 テンキー 1 と End ✔ ✔ ✔ +KC_KP_2 KC_P2 テンキー 2 と下矢印 ✔ ✔ ✔ +KC_KP_3 KC_P3 テンキー 3 と Page Down ✔ ✔ ✔ +KC_KP_4 KC_P4 テンキー 4 と左矢印 ✔ ✔ ✔ +KC_KP_5 KC_P5 テンキー 5 ✔ ✔ ✔ +KC_KP_6 KC_P6 テンキー 6 と右矢印 ✔ ✔ ✔ +KC_KP_7 KC_P7 テンキー 7 と Home ✔ ✔ ✔ +KC_KP_8 KC_P8 テンキー 8 と上矢印 ✔ ✔ ✔ +KC_KP_9 KC_P9 テンキー 9 と Page Up ✔ ✔ ✔ +KC_KP_0 KC_P0 テンキー 0 と Insert ✔ ✔ ✔ +KC_KP_DOT KC_PDOT テンキー . と Delete ✔ ✔ ✔ +KC_NONUS_BSLASH KC_NUBS Non-US \ と | +KC_APPLICATION KC_APP アプリケーションキー (Windows コンテキストメニューキー) ✔ ✔ +KC_POWER システム電源 ✔3 ✔ +KC_KP_EQUAL KC_PEQL テンキー = ✔ ✔ ✔ +KC_F13 F13 ✔ ✔ ✔ +KC_F14 F14 ✔ ✔ ✔ +KC_F15 F15 ✔ ✔ ✔ +KC_F16 F16 ✔ ✔ ✔ +KC_F17 F17 ✔ ✔ ✔ +KC_F18 F18 ✔ ✔ ✔ +KC_F19 F19 ✔ ✔ ✔ +KC_F20 F20 ✔ ✔ +KC_F21 F21 ✔ ✔ +KC_F22 F22 ✔ ✔ +KC_F23 F23 ✔ ✔ +KC_F24 F24 ✔ ✔ +KC_EXECUTE KC_EXEC Execute ✔ +KC_HELP Help ✔ +KC_MENU Menu ✔ +KC_SELECT KC_SLCT Select ✔ +KC_STOP Stop ✔ +KC_AGAIN KC_AGIN Again ✔ +KC_UNDO アンドゥ ✔ +KC_CUT カット ✔ +KC_COPY コピー ✔ +KC_PASTE KC_PSTE ペースト ✔ +KC_FIND 検索 +KC__MUTE ミュート ✔ ✔ +KC__VOLUP 音量アップ ✔ ✔ +KC__VOLDOWN 音量ダウン ✔ ✔ +KC_LOCKING_CAPS KC_LCAP Caps Lock のロック ✔ ✔ +KC_LOCKING_NUM KC_LNUM Num Lock のロック ✔ ✔ +KC_LOCKING_SCROLL KC_LSCR Scroll Lock のロック ✔ ✔ +KC_KP_COMMA KC_PCMM テンキー , ✔ +KC_KP_EQUAL_AS400 AS/400 キーボードのテンキー = +KC_INT1 KC_RO JIS \ と _ ✔ ✔ +KC_INT2 KC_KANA JIS カタカナ/ひらがな ✔ ✔ +KC_INT3 KC_JYEN JIS ¥ と | ✔ ✔ +KC_INT4 KC_HENK JIS 変換 ✔ ✔ +KC_INT5 KC_MHEN JIS 無変換 ✔ ✔ +KC_INT6 JIS テンキー , ✔ +KC_INT7 International 7 +KC_INT8 International 8 +KC_INT9 International 9 +KC_LANG1 KC_HAEN ハングル/英語 ✔ +KC_LANG2 KC_HANJ 韓文漢字 ✔ +KC_LANG3 JIS カタカナ ✔ +KC_LANG4 JIS ひらがな ✔ +KC_LANG5 JIS 全角/半角 ✔ +KC_LANG6 Language 6 +KC_LANG7 Language 7 +KC_LANG8 Language 8 +KC_LANG9 Language 9 +KC_ALT_ERASE KC_ERAS Alternate Erase +KC_SYSREQ SysReq/Attention +KC_CANCEL Cancel +KC_CLEAR KC_CLR Clear ✔ +KC_PRIOR Prior +KC_RETURN Return +KC_SEPARATOR Separator +KC_OUT Out +KC_OPER Oper +KC_CLEAR_AGAIN Clear/Again +KC_CRSEL CrSel/Props +KC_EXSEL ExSel +KC_LCTRL KC_LCTL 左 Control ✔ ✔ ✔ +KC_LSHIFT KC_LSFT 左 Shift ✔ ✔ ✔ +KC_LALT KC_LOPT 左 Alt (Option) ✔ ✔ ✔ +KC_LGUI KC_LCMD, KC_LWIN 左 GUI (Windows/Command/Meta key) ✔ ✔ ✔ +KC_RCTRL KC_RCTL 右 Control ✔ ✔ ✔ +KC_RSHIFT KC_RSFT 右 Shift ✔ ✔ ✔ +KC_RALT KC_ROPT, KC_ALGR 右 Alt (Option/AltGr) ✔ ✔ ✔ +KC_RGUI KC_RCMD, KC_RWIN 右 GUI (Windows/Command/Meta key) +KC_SYSTEM_POWER KC_PWR システム電源オフ ✔ ✔3 ✔ +KC_SYSTEM_SLEEP KC_SLEP システムスリープ ✔ ✔3 ✔ +KC_SYSTEM_WAKE KC_WAKE システムスリープ解除 ✔3 ✔ +KC_AUDIO_MUTE KC_MUTE ミュート ✔ ✔ ✔ +KC_AUDIO_VOL_UP KC_VOLU 音量アップ ✔ ✔4 ✔ +KC_AUDIO_VOL_DOWN KC_VOLD 音量ダウン ✔ ✔4 ✔ +KC_MEDIA_NEXT_TRACK KC_MNXT 次の曲へ ✔ ✔5 ✔ +KC_MEDIA_PREV_TRACK KC_MPRV 前の曲へ ✔ ✔5 ✔ +KC_MEDIA_STOP KC_MSTP 再生停止 ✔ ✔ +KC_MEDIA_PLAY_PAUSE KC_MPLY 再生/一時停止 ✔ ✔ ✔ +KC_MEDIA_SELECT KC_MSEL Media Player 起動 ✔ ✔ +KC_MEDIA_EJECT KC_EJCT イジェクト ✔ ✔ +KC_MAIL メール起動 ✔ ✔ +KC_CALCULATOR KC_CALC 電卓起動 ✔ ✔ +KC_MY_COMPUTER KC_MYCM マイコンピュータを開く ✔ ✔ +KC_WWW_SEARCH KC_WSCH ブラウザ検索 ✔ ✔ +KC_WWW_HOME KC_WHOM ブラウザホーム画面 ✔ ✔ +KC_WWW_BACK KC_WBAK ブラウザ戻る ✔ ✔ +KC_WWW_FORWARD KC_WFWD ブラウザ進む ✔ ✔ +KC_WWW_STOP KC_WSTP ブラウザ読み込み中止 ✔ ✔ +KC_WWW_REFRESH KC_WREF ブラウザ再読み込み ✔ ✔ +KC_WWW_FAVORITES KC_WFAV ブラウザお気に入り ✔ ✔ +KC_MEDIA_FAST_FORWARD KC_MFFD 次の曲へ ✔ ✔5 ✔ +KC_MEDIA_REWIND KC_MRWD 前の曲へ ✔6 ✔5 ✔ +KC_BRIGHTNESS_UP KC_BRIU 画面の明るさアップ ✔ ✔ ✔ +KC_BRIGHTNESS_DOWN KC_BRID 画面の明るさダウン \ No newline at end of file From 8cfd3bcaf10f71ee23847d6dd780843ec1318196 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:26:27 +0900 Subject: [PATCH 09/13] =?UTF-8?q?fix:=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=82=A6=E3=83=88=E3=81=97=E3=81=A6=E3=81=BF?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index 4642fd221..763588dfe 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -22,7 +22,7 @@ along with this program. If not, see . #include "utils/functions.h" -#include "features/swipe_gesture.h" +//#include "features/swipe_gesture.h" #include "features/auto_click_layer.h" //#include "features/macro_keys.h" From bd35863d9e0c3ba99824ea644fc6f7eb41a1367c Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:33:11 +0900 Subject: [PATCH 10/13] fix: auto click layer --- .../keymaps/viamy/features/auto_click_layer.h | 138 +++++++++--------- 1 file changed, 72 insertions(+), 66 deletions(-) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h index 10b64b930..e1bd93b2e 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/auto_click_layer.h @@ -1,146 +1,152 @@ - -// https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai/features/auto_click_layer.h +/* Copyright 2023 kamidai (@d_kamiichi) + * + * 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 . + */ + +//////////////////////////////////// +/// +/// 自動マウスレイヤーの実装 ここから +/// 参考にさせていただいたページ +/// https://zenn.dev/takashicompany/articles/69b87160cda4b9 +/// +//////////////////////////////////// enum ball_state { NONE = 0, - WAITING, // マウスレイヤーが有効になるのを待つ - CLICKABLE, // マウスレイヤー有効になりクリック入力が取れる - CLICKING, // クリック中 - CLICKED, // クリック直後 - SWIPE, // スワイプモードが有効になりスワイプ入力が取れる - SWIPING // スワイプ中 - + WAITING, // マウスレイヤーが有効になるのを待つ。 Wait for mouse layer to activate. + CLICKABLE, // マウスレイヤー有効になりクリック入力が取れる。 Mouse layer is enabled to take click input. + CLICKING, // クリック中。 Clicking. + CLICKED, // クリック直後。 Clicked. + SWIPE, // スワイプモードが有効になりスワイプ入力が取れる。 Swipe mode is enabled to take swipe input. + SWIPING // スワイプ中。 swiping. }; -enum ball_state state; // 現在のクリック入力受付の状態 -uint16_t click_timer; // タイマー。状態に応じて時間で判定する +enum ball_state state; // 現在のクリック入力受付の状態 Current click input reception status +uint16_t click_timer; // タイマー。状態に応じて時間で判定する。 Timer. Time to determine the state of the system. -uint16_t clicked_stay_time = 150; // CLICKEDの滞在時間(千分の一秒)。その後、クリックレイヤーが無効になる -uint16_t clickable_stay_time = 1400; // CLICKABLEの滞在時間(千分の一秒)。その後、クリックレイヤーが無効になる +uint16_t clicked_stay_time = 200; // CLICKEDの滞在時間(千分の一秒)。その後、クリックレイヤーが無効になる。 For this number of seconds (milliseconds), the click layer is disabled if in CLICKED state. +uint16_t clickable_stay_time = 1600; // CLICKABLEの滞在時間(千分の一秒)。その後、クリックレイヤーが無効になる。 For this number of seconds (milliseconds), the click layer is disabled if in CLICKABLE state. const int16_t to_clickable_movement = 0; // クリックレイヤーが有効になるしきい値 -const uint16_t click_layer = 6; // マウス入力が可能になった際に有効になるレイヤー +const uint16_t click_layer = 6; // マウス入力が可能になった際に有効になるレイヤー。Layers enabled when mouse input is enabled -int16_t mouse_record_threshold = 30; // ポインターの動きを一時的に記録するフレーム数 -int16_t mouse_move_count_ratio = 5; // ポインターの動きを再生する際の移動フレームの係数 +int16_t mouse_record_threshold = 30; // ポインターの動きを一時的に記録するフレーム数。 Number of frames in which the pointer movement is temporarily recorded. +int16_t mouse_move_count_ratio = 5; // ポインターの動きを再生する際の移動フレームの係数。 The coefficient of the moving frame when replaying the pointer movement. // Modifierが絡むときの挙動が理想とは違ったので、一旦コメントアウト // const uint16_t ignore_disable_mouse_layer_keys[] = {KC_LANG1, KC_LANG2}; // この配列で指定されたキーはマウスレイヤー中に押下してもマウスレイヤーを解除しない int16_t mouse_movement; -// クリック用のレイヤーを有効にする +// クリック用のレイヤーを有効にする。 Enable layers for clicks void enable_click_layer(void) { layer_on(click_layer); click_timer = timer_read(); state = CLICKABLE; } -// クリック用のレイヤーを無効にする +// クリック用のレイヤーを無効にする。 Disable layers for clicks. void disable_click_layer(void) { state = NONE; layer_off(click_layer); } -// マウスレポートを受け取り、それに基づいて様々なアクションを実行する関数 +// report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) { - int16_t current_x = mouse_report.x; // 現在のマウスのX座標 - int16_t current_y = mouse_report.y; // 現在のマウスのY座標 + int16_t current_x = mouse_report.x; + int16_t current_y = mouse_report.y; - // マウスが動いているかどうかチェック if (current_x != 0 || current_y != 0) { - // マウスが動いたときのアクションを各状態ごとに制御する switch (state) { - case WAITING: - mouse_movement += my_abs(current_x) + my_abs(current_y); // マウスの移動距離を加算 - - // マウスの移動距離が閾値を超えた場合 - if (mouse_movement >= to_clickable_movement) { - mouse_movement = 0; // マウスの動きを0にリセット - enable_click_layer(); // クリック可能状態( state = CLICKABLE )に遷移 - } - break; - case CLICKABLE: - click_timer = timer_read(); // タイマーをリセット + click_timer = timer_read(); break; case CLICKING: - // 状態が"クリック中"のときは何もしない + break; + + case WAITING: + mouse_movement += my_abs(current_x) + my_abs(current_y); + + if (mouse_movement >= to_clickable_movement) { + mouse_movement = 0; + enable_click_layer(); + } break; case SWIPE: - click_timer = timer_read(); // タイマーをリセット + click_timer = timer_read(); - // マウスの移動が閾値を超えた場合、スワイプを処理 if (my_abs(current_x) >= SWIPE_THRESHOLD || my_abs(current_y) >= SWIPE_THRESHOLD) { -// rgblight_sethsv(HSV_PINK); // LEDをピンクに変更 - process_swipe_gesture(current_x, current_y); // スワイプジェスチャを処理 +// rgblight_sethsv(HSV_PINK); + process_swipe_gesture(current_x, current_y); is_swiped = true; - // 一度のスワイプにつき、一回のジェスチャーを処理する if (is_repeat == false) { - state = SWIPING; // スワイプ中状態に遷移 + state = SWIPING; } } break; case SWIPING: - // 状態が"スワイプ中"のときは何もしない break; default: - click_timer = timer_read(); // タイマーをリセット + click_timer = timer_read(); state = WAITING; - mouse_movement = 0; // マウスの動きを0にリセット + mouse_movement = 0; } } else { - // マウスが動いていないとき、各状態ごとに以下のアクションに実行する switch (state) { - case WAITING: - // 一定時間が経過したら、マウスの動きを0にリセットし、状態をNONEに変更 - if (timer_elapsed(click_timer) > 50) { - mouse_movement = 0; - state = NONE; - } + case CLICKING: break; + case CLICKED: + if (timer_elapsed(click_timer) > clicked_stay_time) { + disable_click_layer(); + } + break; case CLICKABLE: - // クリック可能状態が一定時間持続したら、クリックレイヤーを無効化 if (timer_elapsed(click_timer) > clickable_stay_time) { disable_click_layer(); } break; - case CLICKING: - // 状態が"クリック中"のときは何もしない - break; - - case CLICKED: - // クリック後一定時間経過でクリックレイヤーを無効化 - if (timer_elapsed(click_timer) > clicked_stay_time) { - disable_click_layer(); + case WAITING: + if (timer_elapsed(click_timer) > 50) { + mouse_movement = 0; + state = NONE; } break; case SWIPE: -// rgblight_sethsv(HSV_SPRINGGREEN); // LEDをスプリング・グリーンに変更 +// rgblight_sethsv(HSV_SPRINGGREEN); break; case SWIPING: - // 一定時間が経過したら、状態をSWIPEに変更 if (timer_elapsed(click_timer) > 300) { state = SWIPE; } break; default: - mouse_movement = 0; // マウスの動きを0にリセット + mouse_movement = 0; state = NONE; } } - mouse_report.x = current_x; // 新しいマウスのX座標をマウスレポートにセット - mouse_report.y = current_y; // 新しいマウスのY座標をマウスレポートにセット + mouse_report.x = current_x; + mouse_report.y = current_y; - return mouse_report; // マウスレポートを返す + return mouse_report; } \ No newline at end of file From 91e74f973ad303bc347d09e759c2eb8103b891c7 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:39:23 +0900 Subject: [PATCH 11/13] =?UTF-8?q?fix:=20release=20=E5=81=B4=E3=81=8B?= =?UTF-8?q?=E3=82=89=E6=8C=81=E3=81=A3=E3=81=A6=E3=81=8F=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyball/keyball39/keymaps/viamy/config.h | 16 +- .../keymaps/viamy/features/functions.h | 15 + .../keymaps/viamy/features/macro_keys.h | 452 ++++-------------- .../keymaps/viamy/features/swipe_gesture.h | 117 ++--- .../keyball/keyball39/keymaps/viamy/keymap.c | 35 +- .../keyball/keyball39/keymaps/viamy/rules.mk | 6 - 6 files changed, 167 insertions(+), 474 deletions(-) create mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/functions.h diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h index 10c733657..d9ff8668e 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/config.h @@ -33,9 +33,9 @@ along with this program. If not, see . //# define RGBLIGHT_EFFECT_TWINKLE //#endif -#define COMBO_COUNT 9 +//#define COMBO_COUNT 9 -#define KEYBALL_SCROLLSNAP_ENABLE 0 // scrollsnapをオフにする +//#define KEYBALL_SCROLLSNAP_ENABLE 0 // scrollsnapをオフにする #define TAP_CODE_DELAY 5 #define DYNAMIC_KEYMAP_LAYER_COUNT 7 @@ -43,13 +43,5 @@ along with this program. If not, see . #define KEYBALL_CPI_DEFAULT 700 // 光学センサーPMW3360DM の解像度 (CPI) の規定値 #define KEYBALL_SCROLL_DIV_DEFAULT 4 // スクロール速度の規定値 -#define POINTING_DEVICE_AUTO_MOUSE_ENABLE -#define AUTO_MOUSE_DEFAULT_LAYER 1 - -// ファームウェアのサイズを削減 -#define NO_ACTION_ONESHOT // 392バイト - -#define IGNORE_MOD_TAP_INTERRUPT // 10バイト -// #define TAPPING_FORCE_HOLD // 34バイト -// 下記三つで444バイト -#define TAPPING_TERM 175 \ No newline at end of file +//#define POINTING_DEVICE_AUTO_MOUSE_ENABLE +//#define AUTO_MOUSE_DEFAULT_LAYER 1 diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/functions.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/functions.h new file mode 100644 index 000000000..bb30523c6 --- /dev/null +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/functions.h @@ -0,0 +1,15 @@ +// 自前の絶対数を返す関数。 Functions that return absolute numbers. +int16_t my_abs(int16_t num) { + if (num < 0) { + num = -num; + } + return num; +} + +// 自前の符号を返す関数。 Function to return the sign. +int16_t mmouse_move_y_sign(int16_t num) { + if (num < 0) { + return -1; + } + return 1; +} \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h index ff1f938ce..46dae9a9e 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/macro_keys.h @@ -1,4 +1,3 @@ -// https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai/features/macro_keys.h /* Copyright 2023 kamidai (@d_kamiichi) * * This program is free software: you can redistribute it and/or modify @@ -13,395 +12,136 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * - * コード表: - * - 公式ファームウェアのキーコード: - * KBC_RST(0x5DA5): Keyball 設定のリセット - * KBC_SAVE(0x5DA6): 現在の Keyball 設定を EEPROM に保存します - * CPI_I100(0x5DA7): CPI を 100 増加させます(最大:12000) - * CPI_D100(0x5DA8): CPI を 100 減少させます(最小:100) - * CPI_I1K(0x5DA9): CPI を 1000 増加させます(最大:12000) - * CPI_D1K(0x5DAA): CPI を 1000 減少させます(最小:100) - * SCRL_TO(0x5DAB): タップごとにスクロールモードの ON/OFF を切り替えます - * SCRL_MO(0x5DAC): キーを押している間、スクロールモードになります - * SCRL_DVI(0x5DAD): スクロール除数を1つ上げます(max D7 = 1/128)← 最もスクロール遅い - * SCRL_DVD(0x5DAE): スクロール除数を1つ下げます(min D0 = 1/1)← 最もスクロール速い */ -enum custom_keycodes { - KC_BACK_TO_LAYER0_BTN1 = KEYBALL_SAFE_RANGE, // (0x5DAF): レイヤー0に遷移できるBTN1 - KC_DOUBLE_CLICK_BTN1, // (0x5DB0): 1タップでダブルクリックできるBTN1 - KC_TRIPLE_CLICK_BTN1, // (0x5DB1): 1タップでトリプルクリックできるBTN1 - SFT_T_G_KC_A, // (0x5DB2): - SFT_T_S_KC_SCOLON, // (0x5DB3): - COMBO_BRC, // (0x5DB5): - COMBO_select_BRC, // (0x5DB5): - COMBO_S9_S0, // (0x5DB5): - COMBO_select_S9_S0, // (0x5DB5): - COMBO_S_BRC, // (0x5DB5): - COMBO_select_S_BRC, // (0x5DB5): - COMBO_sumitsuki_BRC, // (0x5DB5): - COMBO_select_sumitsuki_BRC, // (0x5DB5): - COMBO_MINUS_SPACE, // (0x5DB5): - // CUSTOM_LT1_LEFT, // - // CUSTOM_LT1_LEFT, // - // CUSTOM_S9, // - // CUSTOM_S0, // - // KC_ALT_BTN1, // - // select_BRC, - // CMD_SCRL, -}; - -// マクロキーの処理を行う関数 +// マクロキーを設定 bool process_record_user(uint16_t keycode, keyrecord_t *record) { - current_keycode = keycode; // 押下されたキーコードを保存する - bool mod_pressed = (get_mods() != 0); // 修飾キーが押されているかを判定(0でなければ修飾キーが押されている) - - static bool is_gui_active = false; - static bool is_ctrl_active = false; - - static bool is_lt1_pressed = false; // レイヤー1の状態を追跡する変数 - static bool is_lt2_pressed = false; // レイヤー2の状態を追跡する変数 - static bool is_lt3_pressed = false; // レイヤー3の状態を追跡する変数 - - // static bool is_eisuu = false; // レイヤー1の状態を追跡する変数 - static bool is_kana = false; // レイヤー1の状態を追跡する変数 + current_keycode = keycode; switch (keycode) { - // デフォルトのマウスキーを自動クリックレイヤーで使用可能にする - case KC_MS_BTN1: - case KC_MS_BTN2: - case KC_MS_BTN3: - case KC_MS_BTN4: - case KC_MS_BTN5: { - if (click_layer && get_highest_layer(layer_state) == click_layer) { - if (record->event.pressed) { - // キーダウン時: 状態をCLICKINGに設定 - state = CLICKING; - } else { - // キーアップ時: クリックレイヤーを有効にして、状態をCLICKEDに設定 - enable_click_layer(); - state = CLICKED; - } - } - return true; - } - - // 以下のキーは自動クリックレイヤーで使用可能にする - case KC_LALT: - case KC_LSFT: { - return true; - } - - // レイヤー1の間は、TABは "command + タブ" になる - // レイヤー3の間は、TABは "control + タブ" になる - case KC_TAB: { - if (record->event.pressed) { - is_gui_active = true; + case KC_MY_BTN0: + case KC_MY_BTN1: + case KC_MY_BTN2: + case KC_MY_BTN3: { + report_mouse_t currentReport = pointing_device_get_report(); - if (get_highest_layer(layer_state) == 1) { - // キーダウン時: - register_code(KC_LGUI); - is_gui_active = true; - // tap_code(KC_TAB); - enable_click_layer(); - } else if (get_highest_layer(layer_state) == 3) { - // キーダウン時: - register_code(KC_LCTRL); - is_ctrl_active = true; - // tap_code(KC_TAB); - enable_click_layer(); - } - } - return true; - } - - // 上位レイヤーから下位レイヤーへ移動できるようにする - // case LT(1, KC_LANG2): - // case LT(1, KC_LANG1): - // case LT(2, KC_V): - // case S(KC_8): { - // // int16_t hlayer = get_highest_layer(layer_state); - // // if (get_highest_layer(layer_state) == 2) { - // if (record->event.pressed) { - // // キーダウン時: - // lt_timer = timer_read(); // 現在のタイマー値を記録 - // previous_layer = get_highest_layer(layer_state); // 現在の最上位レイヤーを記録 - // layer_off(previous_layer); // 現在のレイヤーをオフにする - - // if (keycode == LT(1, KC_LANG2) || keycode == LT(1, KC_LANG1)) { - // layer_on(1); - // } else if (keycode == LT(2, KC_V) || keycode == S(KC_8)) { - // layer_on(2); - // } - // } else { - // // キーアップ時: - // layer_on(previous_layer); // 前のレイヤーをオンにする - // if (keycode == LT(1, KC_LANG2) || keycode == LT(1, KC_LANG1)) { - // layer_off(1); - // } else if (keycode == LT(2, KC_V) || keycode == S(KC_8)) { - // layer_off(2); - // } - // if (timer_elapsed(lt_timer) < TAPPING_TERM) { - // // タッピングタイム内に放された場合はタップ動作 - // if (keycode == LT(1, KC_LANG2)) { - // tap_code(KC_LANG2); - // } else if (keycode == LT(1, KC_LANG1)) { - // tap_code(KC_LANG1); - // } else if (keycode == LT(2, KC_V)) { - // tap_code(KC_V); - // } else if (keycode == S(KC_8)) { - // tap_code16(S(KC_8)); - // } - // } - - // } - // } - // return false; - // } - - static bool is_lt1_lang2_pressed = false; // LT(1, KC_LANG2)の状態を追跡 - static bool is_lt1_lang1_pressed = false; // LT(1, KC_LANG1)の状態を追跡 + // どこのビットを対象にするか。 Which bits are to be targeted? + uint8_t btn = 1 << (keycode - KC_MY_BTN1); - // 上位レイヤーから下位レイヤーへ移動できるようにする - case LT(1, KC_LANG2): // レイヤー1へのキー - case LT(1, KC_LANG1): // レイヤー1へのキー if (record->event.pressed) { - click_timer = timer_read(); - is_lt1_pressed = true; - if (keycode == LT(1, KC_LANG2)) { - is_lt1_lang2_pressed = true; - } else if (keycode == LT(1, KC_LANG1)) { - is_lt1_lang1_pressed = true; - } - layer_on(1); // レイヤー1をオンにする - disable_click_layer(); - - if (is_lt2_pressed) { - layer_off(2); // LT2が既に押されていればレイヤー2をオフにする - } else if (is_lt3_pressed) { - layer_off(3); // LT3が既に押されていればレイヤー3をオフにする - } - } else { - is_lt1_pressed = false; - if (keycode == LT(1, KC_LANG2)) { - is_lt1_lang2_pressed = false; - } else if (keycode == LT(1, KC_LANG1)) { - is_lt1_lang1_pressed = false; - } - if (!is_lt1_lang2_pressed && !is_lt1_lang1_pressed) { - layer_off(1); - } - if (is_lt2_pressed) { - layer_on(2); // LT2が押されていればレイヤー2をオンにする - } else if (is_lt3_pressed) { - layer_on(3); // LT3が押されていればレイヤー3をオンにする - } - - if (timer_elapsed(click_timer) < TAPPING_TERM) { - // タッピングタイム内に放された場合はタップ動作 - if (keycode == LT(1, KC_LANG2)) { - tap_code(KC_LANG2); - // is_eisuu = true; - is_kana = false; - } else if (keycode == LT(1, KC_LANG1)) { - tap_code(KC_LANG1); - is_kana = true; - } - } - - if (is_gui_active) { - unregister_code(KC_LGUI); - is_gui_active = false; - } - } - return false; - - case LT(2, KC_V): // レイヤー2へのキー - case S(KC_DOT): // レイヤー2へのキー - if (record->event.pressed) { - click_timer = timer_read(); - is_lt2_pressed = true; - layer_on(2); // レイヤー2をオンにする - disable_click_layer(); - - if (is_lt1_pressed) { - layer_off(1); // LT1が既に押されていればレイヤー1をオフにする - } else if (is_lt3_pressed) { - layer_off(3); // LT3が既に押されていればレイヤー3をオフにする - } - } else { - is_lt2_pressed = false; - layer_off(2); // LTが押されていなければレイヤー2をオフにする - - if (is_lt1_pressed) { - layer_on(1); // LT1が押されていればレイヤー1をオンにする - } else if (is_lt3_pressed) { - layer_on(3); // LT1が押されていればレイヤー1をオンにする - } - - if (timer_elapsed(click_timer) < TAPPING_TERM) { - // タッピングタイム内に放された場合はタップ動作 - if (keycode == LT(2, KC_V)) { - tap_code(KC_V); - } else if (keycode == S(KC_DOT)) { - tap_code16(S(KC_DOT)); - } - } - } - return false; - - case LT(3, KC_ESC): // レイヤー3へのキー - if (record->event.pressed) { - click_timer = timer_read(); - is_lt3_pressed = true; - layer_on(3); // レイヤー3をオンにする - disable_click_layer(); - - if (is_lt1_pressed) { - layer_off(1); // LT1が既に押されていればレイヤー1をオフにする - } else if (is_lt2_pressed) { - layer_off(2); // LT2が既に押されていればレイヤー2をオフにする - } - } else { - is_lt3_pressed = false; - layer_off(3); // LT3をオフにする - - if (is_lt1_pressed) { - layer_on(1); // LT1が押されていればレイヤー1をオンにする - } else if (is_lt2_pressed) { - layer_on(2); // LT2が押されていればレイヤー2をオンにする - } - - if (timer_elapsed(click_timer) < TAPPING_TERM) { - // タッピングタイム内に放された場合はタップ動作 - tap_code(KC_ESC); - } - - if (is_ctrl_active) { - unregister_code(KC_LCTRL); - is_ctrl_active = false; - } - } - return false; - - // SFT_Tのカスタムキーコード - case SFT_T_G_KC_A: - case SFT_T_S_KC_SCOLON: - if (record->event.pressed) { - // キーが押されたとき - click_timer = timer_read(); - register_code(KC_LSFT); + // キーダウン時 + // ビットORは演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットのどちらかが「1」の場合に「1」にします。 + // Bit OR compares bits in the same position on the left and right sides of the operator and sets them to "1" if either of both bits is "1". + currentReport.buttons |= btn; + state = CLICKING; } else { - // キーが放されたとき - unregister_code(KC_LSFT); + // キーアップ時 + // ビットANDは演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットが共に「1」の場合だけ「1」にします。 + // Bit AND compares the bits in the same position on the left and right sides of the operator and sets them to "1" only if both bits are "1" together. + currentReport.buttons &= ~btn; + enable_click_layer(); + state = CLICKED; - if (timer_elapsed(click_timer) < TAPPING_TERM) { - // タッピングタイム内に放された場合はタップ動作 - if (keycode == SFT_T_G_KC_A) { - tap_code16(G(KC_A)); - } - if (keycode == SFT_T_S_KC_SCOLON) { - tap_code16(S(KC_SCOLON)); - } + if (keycode == KC_MY_BTN0) { + disable_click_layer(); } } - return false; - - // コンボ - case COMBO_MINUS_SPACE: - if (record->event.pressed) { - tap_code(KC_LANG2); // - tap_code(KC_MINUS); // - を送信 - tap_code(KC_SPACE); // スペース を送信 - tap_code(KC_LANG1); // - } - return false; - case COMBO_BRC: - case COMBO_select_BRC: - case COMBO_S9_S0: - case COMBO_select_S9_S0: - case COMBO_S_BRC: - case COMBO_select_S_BRC: - case COMBO_sumitsuki_BRC: - case COMBO_select_sumitsuki_BRC: - if (record->event.pressed) { - // 選択バージョン - if (keycode == COMBO_select_BRC || keycode == COMBO_select_S9_S0 || keycode == COMBO_select_S_BRC || keycode == COMBO_select_sumitsuki_BRC) { - tap_code16(G(KC_X)); // カット - } - - // if (keycode == COMBO_BRC || keycode == COMBO_S9_S0 || keycode == COMBO_S_BRC || keycode == COMBO_sumitsuki_BRC) { - if (keycode == COMBO_BRC || keycode == COMBO_select_BRC) { - tap_code(KC_LBRC); // 「 を送信 - tap_code(KC_RBRC); // 」 を送信 - } else if (keycode == COMBO_S9_S0 || keycode == COMBO_select_S9_S0) { - tap_code16(S(KC_9)); // ( を送信 - tap_code16(S(KC_0)); // ) を送信 - } else if (keycode == COMBO_S_BRC || keycode == COMBO_select_S_BRC) { - tap_code16(S(KC_LBRC)); // 『 を送信 - tap_code16(S(KC_RBRC)); // 』 を送信 - } else if (keycode == COMBO_sumitsuki_BRC || keycode == COMBO_select_sumitsuki_BRC) { - tap_code16(A(KC_9)); //  を送信 - tap_code16(A(KC_0)); // ) を送信 - } - // かなの場合にKC_ENTを送信 - if (is_kana) { - tap_code(KC_ENT); - } - // KC_LEFT を送信 - tap_code(KC_LEFT); - // } - - // 選択バージョン - if (keycode == COMBO_select_BRC || keycode == COMBO_select_S9_S0 || keycode == COMBO_select_S_BRC || keycode == COMBO_select_sumitsuki_BRC) { - tap_code16(G(KC_V)); // ペースト - wait_ms(130); // 0.1秒(1300ミリ秒)待機 - tap_code(KC_RIGHT); - } - } + pointing_device_set_report(currentReport); + pointing_device_send(); return false; + } // 以下スワイプジェスチャー // クリックすると state が SWIPE になり、離したら NONE になる - case CMD_T(KC_SPACE): - case SFT_T(KC_LANG2): - case ALT_T(KC_F13): { + // モッドタップ系 + case KC_GESTURE1: + case KC_GESTURE2: + case KC_GESTURE3: { if (record->event.pressed) { // キーダウン時 state = SWIPE; } else { // キーアップ時 - clear_mods(); // すべての修飾キーの状態をクリアする - disable_click_layer(); // クリックレイヤーを無効化する - } - - // 複数の修飾キーが押された場合、LEDをオフにし、スワイプ状態を解除する - if (mod_pressed) { - rgblight_sethsv(HSV_OFF); - state = NONE; - return true; // キーのデフォルトの動作を続行させる + clear_mods(); + disable_click_layer(); } - // スワイプが行われた場合、スワイプフラグをリセット - if (is_swiped) { + if (is_swiped == true) { is_swiped = false; - return false; // キーのデフォルトの動作をスキップする + return false; } - - // スワイプが行われていなかった場合、キーのデフォルトの動作を続行させる - if (!is_swiped) { + if (is_swiped == false) { return true; } } - // その他のキーコードの場合 + // MOD系 + // case KC_LCMD: + // case KC_LALT: + // if (record->event.pressed) + // { + // // キーダウン時 + // state = SWIPE; + // register_code(keycode); + // } + // else + // { + // // キーアップ時 + // clear_mods(); + // disable_click_layer(); + // is_repeat = false; + // } + // return false; + + // TAP系 + // case KC_F: + // case KC_D: + // case KC_S: + // uint16_t alt_tab_timer = 0; + + // TAP系(キーリピートあり) + // case LT(2, KC_ESC): + // if (record->event.pressed) + // { + // // キーダウン時 + // state = SWIPE; + // tap_code(keycode); + // } + // else + // { + // // キーアップ時 + // if (is_swiped == true) + // { + // tap_code(KC_BSPC); + // } + // disable_click_layer(); + // is_repeat = false; + // is_swiped = false; + // } + // return false; + + // TAP系(フリック風) + // case KC_S: + // if (record->event.pressed) + // { + // // キーダウン時 + // state = SWIPE; + // tap_code(keycode); + // } + // else + // { + // // キーアップ時 + // disable_click_layer(); + // } + // return false; + default: if (record->event.pressed) { // キーダウン時 - disable_click_layer(); // クリックレイヤーを無効化 + disable_click_layer(); } } + return true; } \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h index 1e26330ee..457818323 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/features/swipe_gesture.h @@ -1,129 +1,82 @@ /* Copyright 2023 kamidai (@d_kamiichi) * - * 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 . - * - * ------------------------------------------------------------------- - * - * 参考文献: - * - 以下のリソースを参考にしました: - * https://www.reddit.com/r/ploopy/comments/pbmrh3/qmk_options_on_ploopy_mouse_gestures/ - * https://github.com/RobertCurry0216/qmk_firmware/blob/59f83aac8fa06010c3a1a0a53fcd453d96ce2f80/keyboards/ploopyco/trackball/keymaps/robertcurry0216/keymap.c + * 参考にさせていただいたページ + * https://www.reddit.com/r/ploopy/comments/pbmrh3/qmk_options_on_ploopy_mouse_gestures/ + * https://github.com/RobertCurry0216/qmk_firmware/blob/59f83aac8fa06010c3a1a0a53fcd453d96ce2f80/keyboards/ploopyco/trackball/keymaps/robertcurry0216/keymap.c * */ -// NOTE https://github.com/kamiichi99/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball39/keymaps/kamidai/features/swipe_gesture.h -// ここから持ってきたけど一旦使わないかも - int16_t current_keycode; const int16_t SWIPE_THRESHOLD = 10; bool is_swiped = false; bool is_repeat = false; -// スワイプジェスチャーで何が起こるかを処理する関数です -// 上、下、左、右の4つのオプションがあります +// スワイプジェスチャーで何が起こるかを実際に処理する関数 +// 上、下、左、右、スワイプなしの5つのオプションがあります void process_swipe_gesture(int16_t x, int16_t y) { - // Alt - if (current_keycode == ALT_T(KC_F13)) { - unregister_code(KC_LALT); - - // 拡大と縮小 + // KC_GESTURE1 + if (current_keycode == KC_GESTURE1) { if (my_abs(x) < my_abs(y)) { - register_code(KC_LCMD); - if (y < 0) { - // swipe up: 拡大 - tap_code(KC_EQUAL); + // swipe up + tap_code(KC_F13); } else { - // swipe down: 縮小 - tap_code(KC_MINUS); + // swipe down + tap_code(KC_F14); } } - - // 次のモニターへ移動 if (my_abs(x) > my_abs(y)) { - register_code(KC_LCTRL); - if (x < 0) { - // swipe left: - tap_code(KC_7); + // swipe left + tap_code(KC_F15); } else { - // swipe right: - tap_code(KC_7); + // swipe right + tap_code(KC_F16); } } - unregister_code(KC_LCMD); - unregister_code(KC_LCTRL); - - register_code(KC_LALT); } - // shift - if (current_keycode == SFT_T(KC_LANG2)) { - unregister_code(KC_LALT); - register_code(KC_LCMD); - - // CMD + J + // KC_GESTURE2 + if (current_keycode == KC_GESTURE2) { if (my_abs(x) < my_abs(y)) { if (y < 0) { - // swipe up: - tap_code(KC_J); + // swipe up + tap_code(KC_F17); } else { - // swipe down: - tap_code(KC_J); + // swipe down + tap_code(KC_F18); } } - // ページの戻る、進む if (my_abs(x) > my_abs(y)) { if (x < 0) { - // swipe left: 戻る - tap_code(KC_LBRACKET); + // swipe left + tap_code(KC_F19); } else { - // swipe right: 進む - tap_code(KC_RBRACKET); + // swipe right + tap_code(KC_F20); } } - unregister_code(KC_LCMD); - register_code(KC_LALT); } - // CMD - if (current_keycode == CMD_T(KC_SPACE)) { - unregister_code(KC_LCMD); - register_code(KC_LCTRL); - - // ウインドウのサイズ変更と移動(BetterTouchToolで設定) + // KC_GESTURE3 + if (current_keycode == KC_GESTURE3) { if (my_abs(x) < my_abs(y)) { if (y < 0) { - // swipe up: ウィンドウを最大化 - tap_code(KC_8); + // swipe up + tap_code(KC_F21); } else { - // swipe down: ウインドウを最小サイズで中央へ - tap_code(KC_2); + // swipe down + tap_code(KC_F22); } } - // ウインドウのサイズ変更と移動(BetterTouchToolで設定) if (my_abs(x) > my_abs(y)) { if (x < 0) { - // swipe left: ウインドウを1/2サイズで左へ - tap_code(KC_4); + // swipe left + tap_code(KC_F23); } else { - // swipe right: ウインドウを1/2サイズで右へ - tap_code(KC_6); + // swipe right + tap_code(KC_F24); } } - - unregister_code(KC_LCTRL); - register_code(KC_LCMD); } } \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index 763588dfe..df5672304 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -20,11 +20,10 @@ along with this program. If not, see . #include "quantum.h" -#include "utils/functions.h" - -//#include "features/swipe_gesture.h" +#include "features/functions.h" +#include "features/swipe_gesture.h" #include "features/auto_click_layer.h" -//#include "features/macro_keys.h" +#include "features/macro_keys.h" // clang-format off const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -58,25 +57,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [4] = LAYOUT_universal( - RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , - RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , - RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , - QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ), [5] = LAYOUT_universal( - RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , - RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , - RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , - QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ), [6] = LAYOUT_universal( - RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , _______ , SSNP_HOR , SSNP_VRT , SSNP_FRE , - RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , SCRL_DVI , _______ , _______ , _______ , _______ , _______ , - RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , SCRL_DVD , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , - QK_BOOT , KBC_RST , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KBC_RST , QK_BOOT - ), + _______ ,KC_GESTURE1,KC_GESTURE2,KC_GESTURE3,_______, _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ ,KC_MY_BTN1,KC_MY_BTN3,KC_MY_BTN2, _______ , + _______ , _______ , _______ ,KC_MY_BTN0,KC_MY_BTN0, _______ , _______ , _______ , _______ , _______ , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ + ) }; // clang-format on @@ -89,7 +88,7 @@ layer_state_t layer_state_set_user(layer_state_t state) { #ifdef OLED_ENABLE -# include "lib/oledkit/oledkit.h" +#include "lib/oledkit/oledkit.h" void oledkit_render_info_user(void) { keyball_oled_render_keyinfo(); diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk index 0f2e0ffbc..7ca4f9c37 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/rules.mk @@ -3,9 +3,3 @@ RGBLIGHT_ENABLE = no OLED_ENABLE = yes VIA_ENABLE = yes - -# COMBO_ENABLE = yes - -# ファームウェアのサイズを削減 -EXTRAFLAGS += -flto -GRAVE_ESC_ENABLE = no \ No newline at end of file From 970b9aa164232e2918d5f59faaad82221cdec1d9 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:39:39 +0900 Subject: [PATCH 12/13] =?UTF-8?q?fix:=20=E3=81=84=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=82=E3=81=AE=E3=82=92=E6=B6=88=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyball39/keymaps/viamy/utils/functions.h | 6 - .../keyball39/keymaps/viamy/utils/keycode.txt | 197 ------------------ 2 files changed, 203 deletions(-) delete mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h delete mode 100644 qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h deleted file mode 100644 index 722688b74..000000000 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/functions.h +++ /dev/null @@ -1,6 +0,0 @@ -int16_t my_abs(int16_t num) { - if (num < 0) { - num = -num; - } - return num; -} \ No newline at end of file diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt deleted file mode 100644 index 840741a9b..000000000 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/utils/keycode.txt +++ /dev/null @@ -1,197 +0,0 @@ -KC_NO XXXXXXX このキーを無視します (何もしません) 。 N/A N/A N/A -KC_TRANSPARENT KC_TRNS, _______ 次に低いレイヤーの非透過キーを使う N/A N/A N/A -KC_A a と A ✔ ✔ ✔ -KC_B b と B ✔ ✔ ✔ -KC_C c と C ✔ ✔ ✔ -KC_D d と D ✔ ✔ ✔ -KC_E e と E ✔ ✔ ✔ -KC_F f と F ✔ ✔ ✔ -KC_G g と G ✔ ✔ ✔ -KC_H h と H ✔ ✔ ✔ -KC_I i と I ✔ ✔ ✔ -KC_J j と J ✔ ✔ ✔ -KC_K k と K ✔ ✔ ✔ -KC_L l と L -KC_M m と M ✔ ✔ ✔ -KC_N n と N ✔ ✔ ✔ -KC_O o と O ✔ ✔ ✔ -KC_P p と P ✔ ✔ ✔ -KC_Q q と Q ✔ ✔ ✔ -KC_R r と R ✔ ✔ ✔ -KC_S s と S ✔ ✔ ✔ -KC_T t と T ✔ ✔ ✔ -KC_U u と U ✔ ✔ ✔ -KC_V v と V -KC_W w と W ✔ ✔ ✔ -KC_X x と X ✔ ✔ ✔ -KC_Y y と Y ✔ ✔ ✔ -KC_Z z と Z ✔ ✔ ✔ -KC_1 1 と ! ✔ ✔ ✔ -KC_2 2 と @ ✔ ✔ ✔ -KC_3 3 と # ✔ ✔ ✔ -KC_4 4 と $ ✔ ✔ ✔ -KC_5 5 と % ✔ ✔ ✔ -KC_6 6 と ^ ✔ ✔ ✔ -KC_7 7 と & ✔ ✔ ✔ -KC_8 8 と * ✔ ✔ ✔ -KC_9 9 と ( ✔ ✔ ✔ -KC_0 0 と ) -KC_ENTER KC_ENT Return (Enter) ✔ ✔ ✔ -KC_ESCAPE KC_ESC Escape ✔ ✔ ✔ -KC_BSPACE KC_BSPC Delete (Backspace) ✔ ✔ ✔ -KC_TAB Tab ✔ ✔ ✔ -KC_SPACE KC_SPC Spacebar ✔ ✔ ✔ -KC_MINUS KC_MINS - と _ ✔ ✔ ✔ -KC_EQUAL KC_EQL = と + ✔ ✔ ✔ -KC_LBRACKET KC_LBRC [ と { ✔ ✔ ✔ -KC_RBRACKET KC_RBRC ] と } ✔ ✔ ✔ -KC_BSLASH KC_BSLS \ と | ✔ ✔ ✔ -KC_NONUS_HASH KC_NUHS Non-US # と ~ ✔ ✔ ✔ -KC_SCOLON KC_SCLN ; と : ✔ ✔ ✔ -KC_QUOTE KC_QUOT ' と " ✔ ✔ ✔ -KC_GRAVE KC_GRV, KC_ZKHK ` と ~, JIS 全角/半角 ✔ ✔ ✔ -KC_COMMA KC_COMM , と < ✔ ✔ ✔ -KC_DOT . と > ✔ ✔ ✔ -KC_SLASH KC_SLSH / と ? ✔ ✔ ✔ -KC_CAPSLOCK KC_CLCK, KC_CAPS Caps Lock -KC_F1 F1 ✔ ✔ ✔ -KC_F2 F2 ✔ ✔ ✔ -KC_F3 F3 ✔ ✔ ✔ -KC_F4 F4 ✔ ✔ ✔ -KC_F5 F5 ✔ ✔ ✔ -KC_F6 F6 ✔ ✔ ✔ -KC_F7 F7 ✔ ✔ ✔ -KC_F8 F8 ✔ ✔ ✔ -KC_F9 F9 ✔ ✔ ✔ -KC_F10 F10 ✔ ✔ ✔ -KC_F11 F11 ✔ ✔ ✔ -KC_F12 F12 -KC_PSCREEN KC_PSCR Print Screen ✔ ✔2 ✔ -KC_SCROLLLOCK KC_SCRL, KC_BRMD Scroll Lock, 画面の明るさダウン (macOS) ✔ ✔2 ✔ -KC_PAUSE KC_PAUS, KC_BRK, KC_BRMU Pause, 画面の明るさアップ (macOS) ✔ ✔2 ✔ -KC_INSERT KC_INS Insert ✔ ✔ -KC_HOME Home ✔ ✔ ✔ -KC_PGUP Page Up ✔ ✔ ✔ -KC_DELETE KC_DEL Forward Delete ✔ ✔ ✔ -KC_END End ✔ ✔ ✔ -KC_PGDOWN KC_PGDN Page Down ✔ ✔ ✔ -KC_RIGHT KC_RGHT 右矢印 ✔ ✔ ✔ -KC_LEFT 左矢印 ✔ ✔ ✔ -KC_DOWN 下矢印 ✔ ✔ ✔ -KC_UP 上矢印 ✔ ✔ ✔ -KC_NUMLOCK KC_NUM テンキー Num Lock と Clear -KC_KP_SLASH KC_PSLS テンキー / ✔ ✔ ✔ -KC_KP_ASTERISK KC_PAST テンキー * ✔ ✔ ✔ -KC_KP_MINUS KC_PMNS テンキー - ✔ ✔ ✔ -KC_KP_PLUS KC_PPLS テンキー + ✔ ✔ ✔ -KC_KP_ENTER KC_PENT テンキー Enter ✔ ✔ ✔ -KC_KP_1 KC_P1 テンキー 1 と End ✔ ✔ ✔ -KC_KP_2 KC_P2 テンキー 2 と下矢印 ✔ ✔ ✔ -KC_KP_3 KC_P3 テンキー 3 と Page Down ✔ ✔ ✔ -KC_KP_4 KC_P4 テンキー 4 と左矢印 ✔ ✔ ✔ -KC_KP_5 KC_P5 テンキー 5 ✔ ✔ ✔ -KC_KP_6 KC_P6 テンキー 6 と右矢印 ✔ ✔ ✔ -KC_KP_7 KC_P7 テンキー 7 と Home ✔ ✔ ✔ -KC_KP_8 KC_P8 テンキー 8 と上矢印 ✔ ✔ ✔ -KC_KP_9 KC_P9 テンキー 9 と Page Up ✔ ✔ ✔ -KC_KP_0 KC_P0 テンキー 0 と Insert ✔ ✔ ✔ -KC_KP_DOT KC_PDOT テンキー . と Delete ✔ ✔ ✔ -KC_NONUS_BSLASH KC_NUBS Non-US \ と | -KC_APPLICATION KC_APP アプリケーションキー (Windows コンテキストメニューキー) ✔ ✔ -KC_POWER システム電源 ✔3 ✔ -KC_KP_EQUAL KC_PEQL テンキー = ✔ ✔ ✔ -KC_F13 F13 ✔ ✔ ✔ -KC_F14 F14 ✔ ✔ ✔ -KC_F15 F15 ✔ ✔ ✔ -KC_F16 F16 ✔ ✔ ✔ -KC_F17 F17 ✔ ✔ ✔ -KC_F18 F18 ✔ ✔ ✔ -KC_F19 F19 ✔ ✔ ✔ -KC_F20 F20 ✔ ✔ -KC_F21 F21 ✔ ✔ -KC_F22 F22 ✔ ✔ -KC_F23 F23 ✔ ✔ -KC_F24 F24 ✔ ✔ -KC_EXECUTE KC_EXEC Execute ✔ -KC_HELP Help ✔ -KC_MENU Menu ✔ -KC_SELECT KC_SLCT Select ✔ -KC_STOP Stop ✔ -KC_AGAIN KC_AGIN Again ✔ -KC_UNDO アンドゥ ✔ -KC_CUT カット ✔ -KC_COPY コピー ✔ -KC_PASTE KC_PSTE ペースト ✔ -KC_FIND 検索 -KC__MUTE ミュート ✔ ✔ -KC__VOLUP 音量アップ ✔ ✔ -KC__VOLDOWN 音量ダウン ✔ ✔ -KC_LOCKING_CAPS KC_LCAP Caps Lock のロック ✔ ✔ -KC_LOCKING_NUM KC_LNUM Num Lock のロック ✔ ✔ -KC_LOCKING_SCROLL KC_LSCR Scroll Lock のロック ✔ ✔ -KC_KP_COMMA KC_PCMM テンキー , ✔ -KC_KP_EQUAL_AS400 AS/400 キーボードのテンキー = -KC_INT1 KC_RO JIS \ と _ ✔ ✔ -KC_INT2 KC_KANA JIS カタカナ/ひらがな ✔ ✔ -KC_INT3 KC_JYEN JIS ¥ と | ✔ ✔ -KC_INT4 KC_HENK JIS 変換 ✔ ✔ -KC_INT5 KC_MHEN JIS 無変換 ✔ ✔ -KC_INT6 JIS テンキー , ✔ -KC_INT7 International 7 -KC_INT8 International 8 -KC_INT9 International 9 -KC_LANG1 KC_HAEN ハングル/英語 ✔ -KC_LANG2 KC_HANJ 韓文漢字 ✔ -KC_LANG3 JIS カタカナ ✔ -KC_LANG4 JIS ひらがな ✔ -KC_LANG5 JIS 全角/半角 ✔ -KC_LANG6 Language 6 -KC_LANG7 Language 7 -KC_LANG8 Language 8 -KC_LANG9 Language 9 -KC_ALT_ERASE KC_ERAS Alternate Erase -KC_SYSREQ SysReq/Attention -KC_CANCEL Cancel -KC_CLEAR KC_CLR Clear ✔ -KC_PRIOR Prior -KC_RETURN Return -KC_SEPARATOR Separator -KC_OUT Out -KC_OPER Oper -KC_CLEAR_AGAIN Clear/Again -KC_CRSEL CrSel/Props -KC_EXSEL ExSel -KC_LCTRL KC_LCTL 左 Control ✔ ✔ ✔ -KC_LSHIFT KC_LSFT 左 Shift ✔ ✔ ✔ -KC_LALT KC_LOPT 左 Alt (Option) ✔ ✔ ✔ -KC_LGUI KC_LCMD, KC_LWIN 左 GUI (Windows/Command/Meta key) ✔ ✔ ✔ -KC_RCTRL KC_RCTL 右 Control ✔ ✔ ✔ -KC_RSHIFT KC_RSFT 右 Shift ✔ ✔ ✔ -KC_RALT KC_ROPT, KC_ALGR 右 Alt (Option/AltGr) ✔ ✔ ✔ -KC_RGUI KC_RCMD, KC_RWIN 右 GUI (Windows/Command/Meta key) -KC_SYSTEM_POWER KC_PWR システム電源オフ ✔ ✔3 ✔ -KC_SYSTEM_SLEEP KC_SLEP システムスリープ ✔ ✔3 ✔ -KC_SYSTEM_WAKE KC_WAKE システムスリープ解除 ✔3 ✔ -KC_AUDIO_MUTE KC_MUTE ミュート ✔ ✔ ✔ -KC_AUDIO_VOL_UP KC_VOLU 音量アップ ✔ ✔4 ✔ -KC_AUDIO_VOL_DOWN KC_VOLD 音量ダウン ✔ ✔4 ✔ -KC_MEDIA_NEXT_TRACK KC_MNXT 次の曲へ ✔ ✔5 ✔ -KC_MEDIA_PREV_TRACK KC_MPRV 前の曲へ ✔ ✔5 ✔ -KC_MEDIA_STOP KC_MSTP 再生停止 ✔ ✔ -KC_MEDIA_PLAY_PAUSE KC_MPLY 再生/一時停止 ✔ ✔ ✔ -KC_MEDIA_SELECT KC_MSEL Media Player 起動 ✔ ✔ -KC_MEDIA_EJECT KC_EJCT イジェクト ✔ ✔ -KC_MAIL メール起動 ✔ ✔ -KC_CALCULATOR KC_CALC 電卓起動 ✔ ✔ -KC_MY_COMPUTER KC_MYCM マイコンピュータを開く ✔ ✔ -KC_WWW_SEARCH KC_WSCH ブラウザ検索 ✔ ✔ -KC_WWW_HOME KC_WHOM ブラウザホーム画面 ✔ ✔ -KC_WWW_BACK KC_WBAK ブラウザ戻る ✔ ✔ -KC_WWW_FORWARD KC_WFWD ブラウザ進む ✔ ✔ -KC_WWW_STOP KC_WSTP ブラウザ読み込み中止 ✔ ✔ -KC_WWW_REFRESH KC_WREF ブラウザ再読み込み ✔ ✔ -KC_WWW_FAVORITES KC_WFAV ブラウザお気に入り ✔ ✔ -KC_MEDIA_FAST_FORWARD KC_MFFD 次の曲へ ✔ ✔5 ✔ -KC_MEDIA_REWIND KC_MRWD 前の曲へ ✔6 ✔5 ✔ -KC_BRIGHTNESS_UP KC_BRIU 画面の明るさアップ ✔ ✔ ✔ -KC_BRIGHTNESS_DOWN KC_BRID 画面の明るさダウン \ No newline at end of file From d1e435998318db334af78641cf8010561475d942 Mon Sep 17 00:00:00 2001 From: shotaCoffee Date: Mon, 9 Dec 2024 16:43:11 +0900 Subject: [PATCH 13/13] fix: add keycodes --- .../keyboards/keyball/keyball39/keymaps/viamy/keymap.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c index df5672304..4770dc061 100644 --- a/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c +++ b/qmk_firmware/keyboards/keyball/keyball39/keymaps/viamy/keymap.c @@ -20,6 +20,16 @@ along with this program. If not, see . #include "quantum.h" +enum custom_keycodes { + KC_MY_BTN0 = KEYBALL_SAFE_RANGE, // Remap上では 0x5DAF(レイヤー0に遷移できるBTN1) + KC_MY_BTN1, // Remap上では 0x5DB0 + KC_MY_BTN2, // Remap上では 0x5DB1 + KC_MY_BTN3, // Remap上では 0x5DB2 + KC_GESTURE1, // Remap上では 0x5DB3(ジェスチャーボタン1) + KC_GESTURE2, // Remap上では 0x5DB4(ジェスチャーボタン2) + KC_GESTURE3, // Remap上では 0x5DB5(ジェスチャーボタン3) +}; + #include "features/functions.h" #include "features/swipe_gesture.h" #include "features/auto_click_layer.h"