Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Mouse clicks (&mkp LCLK etc) stopped working? #2798

Closed
siadat opened this issue Jan 26, 2025 · 3 comments
Closed

Mouse clicks (&mkp LCLK etc) stopped working? #2798

siadat opened this issue Jan 26, 2025 · 3 comments

Comments

@siadat
Copy link

siadat commented Jan 26, 2025

Mouse clicking used to work a few weeks ago, but it stopped working when I built the same layout today. I use Glove80's layout editor and builder with the keymap pasted at the end.

The way I enabled clicks:

  • Added #include <dt-bindings/zmk/mouse.h>
  • Added &mkp LCLK, &mkp MCLK, &mkp RCLK

Afaict, Glove80 web layout builder (https://my.glove80.com/#/layout/) uses a fork of ZMK, probably https://github.com/moergo-sc/zmk. I wonder if the following PR changed anything related to this: #2477

I will see if I can reproduce it in https://github.com/siadat/glove80-zmk-config

Keymap file
/*
 * Copyright (c) 2020 The ZMK Contributors
 * Copyright (c) 2023 Innaworks Development Limited, trading as MoErgo
 *
 * SPDX-License-Identifier: MIT
 */


/* THIS FILE WAS GENERATED BY GLOVE80 LAYOUT EDITOR
 *
 * This file was generated automatically. You may or may not want to
 * edit it directly.
 */

#include <behaviors.dtsi>
/* Include all behavior includes needed */
#include <dt-bindings/zmk/outputs.h>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/rgb.h>

/* On demand includes */


/* Automatically generated layer name #define */
#define LAYER_QWERTY 0
#define LAYER_symboles 1
#define LAYER_Navigation 2
#define LAYER_Magic 3

/* To deal with the situation where there is no Lower layer, to keep &lower happy */
#ifndef LAYER_Lower
#define LAYER_Lower 0
#endif

/* Custom Device-tree */
#include <dt-bindings/zmk/mouse.h>


/* Glove80 system behavior & macros */
/ {
    behaviors {
        // For the "layer" key, it'd nice to be able to use it as either a shift or a toggle.
        // Configure it as a tap dance, so the first tap (or hold) is a &mo and the second tap is a &to
        lower: lower {
            compatible = "zmk,behavior-tap-dance";
            label = "LAYER_TAP_DANCE";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&mo LAYER_Lower>, <&to LAYER_Lower>;
        };
    };
};

/ {
    macros {
        rgb_ug_status_macro: rgb_ug_status_macro {
            label = "RGB_UG_STATUS";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&rgb_ug RGB_STATUS>;
        };
    };
};


/ {
#ifdef BT_DISC_CMD
    behaviors {
        bt_0: bt_0 {
            compatible = "zmk,behavior-tap-dance";
            label = "BT_0";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&bt_select_0>, <&bt BT_DISC 0>;
        };
        bt_1: bt_1 {
            compatible = "zmk,behavior-tap-dance";
            label = "BT_1";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&bt_select_1>, <&bt BT_DISC 1>;
        };
        bt_2: bt_2 {
            compatible = "zmk,behavior-tap-dance";
            label = "BT_2";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&bt_select_2>, <&bt BT_DISC 2>;
        };
        bt_3: bt_3 {
            compatible = "zmk,behavior-tap-dance";
            label = "BT_3";
            #binding-cells = <0>;
            tapping-term-ms = <200>;
            bindings = <&bt_select_3>, <&bt BT_DISC 3>;
        };
    };
    macros {
        bt_select_0: bt_select_0 {
            label = "BT_SELECT_0";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 0>;
        };
        bt_select_1: bt_select_1 {
            label = "BT_SELECT_1";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 1>;
        };
        bt_select_2: bt_select_2 {
            label = "BT_SELECT_2";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 2>;
        };
        bt_select_3: bt_select_3 {
            label = "BT_SELECT_3";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 3>;
        };
    };
#else
    macros {
        bt_0: bt_0 {
            label = "BT_0";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 0>;
        };
        bt_1: bt_1 {
            label = "BT_1";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 1>;
        };
        bt_2: bt_2 {
            label = "BT_2";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 2>;
        };
        bt_3: bt_3 {
            label = "BT_3";
            compatible = "zmk,behavior-macro";
            #binding-cells = <0>;
            bindings
                = <&out OUT_BLE>,
                  <&bt BT_SEL 3>;
        };
    };
#endif
};

/ {
    behaviors {
        magic: magic {
            compatible = "zmk,behavior-hold-tap";
            label = "MAGIC_HOLD_TAP";
            #binding-cells = <2>;
            flavor = "tap-preferred";
            tapping-term-ms = <200>;
            bindings = <&mo>, <&rgb_ug_status_macro>;
        };
    };
};

/* #define for key positions */
#define POS_LH_T1 52
#define POS_LH_T2 53
#define POS_LH_T3 54
#define POS_LH_T4 69
#define POS_LH_T5 70
#define POS_LH_T6 71
#define POS_LH_C1R2 15
#define POS_LH_C1R3 27
#define POS_LH_C1R4 39
#define POS_LH_C1R5 51
#define POS_LH_C2R1 4
#define POS_LH_C2R2 14
#define POS_LH_C2R3 26
#define POS_LH_C2R4 38
#define POS_LH_C2R5 50
#define POS_LH_C2R6 68
#define POS_LH_C3R1 3
#define POS_LH_C3R2 13
#define POS_LH_C3R3 25
#define POS_LH_C3R4 37
#define POS_LH_C3R5 49
#define POS_LH_C3R6 67
#define POS_LH_C4R1 2
#define POS_LH_C4R2 12
#define POS_LH_C4R3 24
#define POS_LH_C4R4 36
#define POS_LH_C4R5 48
#define POS_LH_C4R6 66
#define POS_LH_C5R1 1
#define POS_LH_C5R2 11
#define POS_LH_C5R3 23
#define POS_LH_C5R4 35
#define POS_LH_C5R5 47
#define POS_LH_C5R6 65
#define POS_LH_C6R1 0
#define POS_LH_C6R2 10
#define POS_LH_C6R3 22
#define POS_LH_C6R4 34
#define POS_LH_C6R5 46
#define POS_LH_C6R6 64
#define POS_RH_T1 57
#define POS_RH_T2 56
#define POS_RH_T3 55
#define POS_RH_T4 74
#define POS_RH_T5 73
#define POS_RH_T6 72
#define POS_RH_C1R2 16
#define POS_RH_C1R3 28
#define POS_RH_C1R4 40
#define POS_RH_C1R5 58
#define POS_RH_C2R1 5
#define POS_RH_C2R2 17
#define POS_RH_C2R3 29
#define POS_RH_C2R4 41
#define POS_RH_C2R5 59
#define POS_RH_C2R6 75
#define POS_RH_C3R1 6
#define POS_RH_C3R2 18
#define POS_RH_C3R3 30
#define POS_RH_C3R4 42
#define POS_RH_C3R5 60
#define POS_RH_C3R6 76
#define POS_RH_C4R1 7
#define POS_RH_C4R2 19
#define POS_RH_C4R3 31
#define POS_RH_C4R4 43
#define POS_RH_C4R5 61
#define POS_RH_C4R6 77
#define POS_RH_C5R1 8
#define POS_RH_C5R2 20
#define POS_RH_C5R3 32
#define POS_RH_C5R4 44
#define POS_RH_C5R5 62
#define POS_RH_C5R6 78
#define POS_RH_C6R1 9
#define POS_RH_C6R2 21
#define POS_RH_C6R3 33
#define POS_RH_C6R4 45
#define POS_RH_C6R5 63
#define POS_RH_C6R6 79

/* Custom Defined Behaviors */
/ {

};

/* Automatically generated macro definitions */
/ {
    macros {

    };
};

/* Automatically generated behavior definitions */
/ {
    behaviors {
    
    };
};

/* Automatically generated combos definitions */


/* Automatically generated keymap */
/ {
    keymap {
        compatible = "zmk,keymap";


        layer_QWERTY {
            bindings = <
    &trans  &trans     &trans     &trans     &trans                                                                             &trans     &trans     &trans    &trans         &trans
 &kp EQUAL  &kp N1     &kp N2     &kp N3     &kp N4  &kp N5                                                          &kp N6     &kp N7     &kp N8     &kp N9    &kp N0      &kp MINUS
   &kp TAB   &kp Q      &kp W      &kp E      &kp R   &kp T                                                           &kp Y      &kp U      &kp I      &kp O     &kp P       &kp BSLH
 &kp LSHFT   &kp A      &kp S      &kp D      &kp F   &kp G                                                           &kp H      &kp J      &kp K      &kp L  &kp SEMI  &mt RSHFT SQT
    &trans   &kp Z      &kp X      &kp C      &kp V   &kp B     &trans    &trans    &trans   &trans  &trans  &trans   &kp N      &kp M  &kp COMMA    &kp DOT  &kp FSLH         &trans
 &kp LCTRL  &trans  &mkp RCLK  &mkp MCLK  &mkp LCLK          &kp SPACE  &kp LGUI  &kp LALT  &kp RET   &mo 2   &mo 1          &mkp LCLK  &mkp MCLK  &mkp RCLK    &trans         &trans
            >;
        };

        layer_symboles {
            bindings = <
 &magic LAYER_Magic 0       &none          &none       &none       &none                                                                               &none       &none         &none     &none   &none
                &none       &none          &none       &none       &none       &none                                                       &none       &none       &none         &none     &none   &none
            &kp GRAVE       &none          &none  &kp LS(N9)  &kp LS(N0)       &none                                                       &none       &none   &kp EQUAL         &none     &none   &none
               &trans    &kp FSLH  &kp LS(GRAVE)    &kp LBKT    &kp RBKT     &kp RET                                                    &kp BSPC     &kp SQT   &kp MINUS     &kp GRAVE  &kp BSLH  &trans
               &trans  &kp LS(N1)     &kp LS(N2)  &kp LS(N3)  &kp LS(N4)  &kp LS(N5)  &trans  &trans  &trans  &trans  &trans  &trans  &kp LS(N6)  &kp LS(N7)  &kp LS(N8)  &kp LS(FSLH)     &none  &trans
               &trans       &none          &none       &none       &none              &trans  &trans  &trans  &trans  &trans  &trans                   &none       &none         &none     &none  &trans
            >;
        };

        layer_Navigation {
            bindings = <
   &none   &none   &none   &none   &none                                                                           &kp C_MUTE     &kp C_VOL_DN  &kp C_VOL_UP              &none   &none
  &trans   &none   &none   &none   &none   &none                                                     &none              &none     &kp C_BRI_DN  &kp C_BRI_UP              &none   &none
 &kp ESC   &none  &kp N1  &kp N2  &kp N3   &none                                                     &none  &kp LS(LC(PG_UP))  &kp LS(LC(TAB))   &kp LC(TAB)  &kp LS(LC(PG_DN))   &none
  &trans  &kp N0  &kp N4  &kp N5  &kp N6   &none                                                  &kp LEFT           &kp DOWN           &kp UP     &kp RIGHT              &none  &trans
  &trans   &none  &kp N7  &kp N8  &kp N9   &none  &trans  &trans  &trans  &trans  &trans  &trans     &none              &none            &none         &none              &none  &trans
  &trans   &none   &none   &none   &none          &trans  &trans  &trans  &trans  &trans  &trans                        &none            &none         &none              &none  &trans
            >;
        };

        layer_Magic {
            bindings = <
  &bt BT_CLR            &none            &none            &none            &none                                                                                  &none   &none   &none   &none  &bt BT_CLR_ALL
       &none            &none            &none            &none            &none            &none                                                         &none   &none   &none   &none   &none           &none
       &none  &rgb_ug RGB_SPI  &rgb_ug RGB_SAI  &rgb_ug RGB_HUI  &rgb_ug RGB_BRI  &rgb_ug RGB_TOG                                                         &none   &none   &none   &none   &none           &none
 &bootloader  &rgb_ug RGB_SPD  &rgb_ug RGB_SAD  &rgb_ug RGB_HUD  &rgb_ug RGB_BRD  &rgb_ug RGB_EFF                                                         &none   &none   &none   &none   &none     &bootloader
  &sys_reset            &none            &none            &none            &none            &none   &bt_2   &bt_3         &none   &none   &none   &none   &none   &none   &none   &none   &none      &sys_reset
       &none            &none            &none            &none            &none                    &bt_0   &bt_1  &out OUT_USB   &none   &none   &none           &none   &none   &none   &none           &none
            >;
        };

    };
};
@siadat siadat changed the title Mouse clicks (LCLK etc) don't work Mouse clicks (LCLK etc) stopped working Jan 26, 2025
@siadat siadat changed the title Mouse clicks (LCLK etc) stopped working Mouse clicks (&mkp LCLK etc) stopped working Jan 26, 2025
@siadat siadat changed the title Mouse clicks (&mkp LCLK etc) stopped working Mouse clicks (&mkp LCLK etc) stopped working? Jan 26, 2025
@petejohanson
Copy link
Contributor

I have no idea the state of the MoErgo fork, I'd recommend trying against ZMK main and if that works as expected, ask the MoErgo folks for help.

@caksoylar
Copy link
Contributor

I think it might be that the HID report descriptor was updated between their previous firmware versions and 24.01 that they released recently. Given that, it is worth trying https://zmk.dev/docs/features/bluetooth#refreshing-the-hid-descriptor. Also note that the header include has changed: https://zmk.dev/docs/keymaps/behaviors/mouse-emulation#mouse-emulation-defines

That being said, Pete is right, this is not the right venue to debug this. If you want to follow up please post on their Discord, I'll see it and respond.

@siadat
Copy link
Author

siadat commented Jan 26, 2025

Thank you for the valuable inputs and apologies for opening the issue here. I performed a reset factory, but couldn't get it to work, not sure if am performing this corretly. I will discuss this in Discord as well. For now, I was able to build the previous version like this siadat/glove80-zmk-config@d9c8bd3#diff-4d2a8eefdf2a9783512a35da4dc7676a66404b6f3826a8af9aad038722da6823R11.

@siadat siadat closed this as completed Jan 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants