Author Topic: tmk usb2usb my layer switching scheme not working, please help  (Read 2251 times)

0 Members and 1 Guest are viewing this topic.

Offline tokyo

  • Thread Starter
  • Posts: 17
I got a Usb2usb converter from Hasu.
I somehow devised a layer switching layer scheme, but it doesn't work, please help.

layer 5:
dedicated layer switching layer
problem: if hold FN0 key for long then release, this layer not seem to turn off
FN11 key not seem to turn on layer 1

FN4 (now key R) on layer 1 (now on when spc key held), activate layer 1 itself (trying to stay in layer 1 after spc key release)
doesn't work either

2016/05/25 downloaded from git codes
My codes are as follows:
config.h
Code: [Select]

#ifndef CONFIG_H
#define CONFIG_H








#define NO_DEBUG
#define NO_PRINT


#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x005B
#define DEVICE_VER      0x0814

#define MANUFACTURER    Dell
#define PRODUCT         USB keyboard
#define DESCRIPTION     USB keyboard



#define TAPPING_TERM    300   
#define TAPPING_TOGGLE 3

#define ONESHOT_TIMEOUT 400




#define MATRIX_ROWS 16
#define MATRIX_COLS 16


#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))

#endif

make file
KEYMAP_SECTION_ENABLE = yes   # fixed address keymap for keymap editor



keymap.c
Code: [Select]

#include "keymap_common.h"
#include "action_layer.h"


const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {

    KEYMAP_ALL(
              F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,

              ESC,      F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,    VOLD,VOLU,MUTE,PWR,     HELP,
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, FN0,BSPC,     INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,    STOP,AGIN,
    FN6, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     BSLS,     DEL, END, PGDN,    P7,  P8,  P9,  PPLS,    MENU,UNDO,
    FN5,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     NUHS,ENT,                         P4,  P5,  P6,  PCMM,    SLCT,COPY,
    FN7,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     RO,  FN8,          UP,           P1,  P2,  P3,  PEQL,    EXEC,PSTE,
    LCTL,LGUI,LALT,FN2,HANJ,     FN1,      HAEN,FN0, FN3,RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT,    FIND, CUT
    ),




    [1] = \
    KEYMAP(
    TRNS, TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS, TRNS, TRNS,           PSCR,SLCK,BRK,
    TRNS, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,      INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
    TRNS, ESC,LGUI,PGUP,  FN4,F12, JYEN,PGUP,TRNS,HOME, TRNS,  TRNS,  TRNS,  TRNS,     DEL, END, PGDN,    P7,  P8,  P9,
    TRNS,TRNS,  LEFT,PGDN,RGHT,TRNS,  LEFT,DOWN,UP,  RGHT,KP_PLUS,  TRNS,       TRNS,                         P4,  P5,  P6,  PPLS,
    TRNS,FN10,  DEL,  EQL,  TRNS,  BSPC,  END,FN9,FN13,FN14, TRNS,          TRNS,          UP,           P1,  P2,  P3,
    TRNS,TRNS,TRNS,          TRNS,                     TRNS,TRNS,TRNS, TRNS,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
            ),



    [2] =                                       \
    KEYMAP(
    TRNS, TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS, TRNS, TRNS,           PSCR,SLCK,BRK,
    TRNS, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,      INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
    TRNS, TRNS,TRNS,TRNS,  TRNS,TRNS, TRNS,TRNS,F4,TRNS, TRNS,  TRNS,  TRNS,  TRNS,     DEL, END, PGDN,    P7,  P8,  P9,
    TRNS,TRNS,  FN12,DOWN,TAB,TRNS,  FN12,DOWN,UP,  TAB,TRNS,  TRNS,       TRNS,                         P4,  P5,  P6,  PPLS,
    TRNS,TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,TRNS,TRNS,TRNS, TRNS,          TRNS,          UP,           P1,  P2,  P3,
    TRNS,TRNS,TRNS,          TRNS,                     TRNS,TRNS,TRNS, TRNS,     FN12,DOWN,TAB,    P0,       PDOT,PENT
            ),


    [3] = \
    KEYMAP(
    TRNS, TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS, TRNS, TRNS,           PSCR,SLCK,BRK,
    TRNS, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,      INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
    TRNS, TRNS,TRNS,TRNS,  TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,  TRNS,  TRNS,  TRNS,     DEL, END, PGDN,    P7,  P8,  P9,
    TRNS,TRNS,  LEFT,DOWN,RGHT,TRNS,  LEFT,DOWN,UP,  RIGHT,TRNS,  TRNS,       TRNS,                         P4,  P5,  P6,  PPLS,
    TRNS,TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,TRNS,TRNS,TRNS, TRNS,          TRNS,          UP,           P1,  P2,  P3,
    TRNS,TRNS,TRNS,          TRNS,                     TRNS,TRNS,TRNS, TRNS,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
            ),


    [4] = \
    KEYMAP(
    TRNS, TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS,  TRNS, TRNS, TRNS,           PSCR,SLCK,BRK,
    TRNS, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,      INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
    NO, FN9,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD,NO,      DEL, END, PGDN,    P7,  P8,  P9,
    LCTL,ACL0,ACL1,ACL2,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,TRNS,NO,       ENT,                         P4,  P5,  P6,  PPLS,
    LSFT,FN10,  NO,  NO,  NO,  BTN3,BTN2,BTN1,BTN4,BTN5,NO,            RSFT,          UP,           P1,  P2,  P3,
    LCTL,LGUI,LALT,          BTN1,                    RALT,TRNS,TRNS,RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
            ),


    [5] = \
    KEYMAP(
    NO, NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, NO, NO,           PSCR,SLCK,BRK,
    NO, NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, NO, NO, NO,      INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
    NO, NO,NO,NO,  NO,NO, NO,NO,NO,NO, NO,  NO,  NO,  NO,     DEL, END, PGDN,    P7,  P8,  P9,
    NO,NO,  NO,NO,NO,NO,  NO,NO,NO,  NO,NO,  NO,       NO,                         P4,  P5,  P6,  PPLS,
    NO,FN10,  NO,  NO,  FN11,  NO,  NO,NO,NO,NO, NO,          NO,          UP,           P1,  P2,  P3,
    NO,NO,NO,          NO,                     NO,NO,NO, NO,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
            )
};



enum function_id {
        LALT_TAB,
        LSFT_DQT,

};


const uint16_t fn_actions[] PROGMEM = {

        [0] = ACTION_LAYER_TAP_KEY(5, KC_ENT)   ,
        [1] = ACTION_LAYER_TAP_KEY(1, KC_SPC)   ,
        [2] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_RO),
        [3] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_BSPC),
        [4] = ACTION_LAYER_ON(1, ON_PRESS),

        [5] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_RBRC),
        [6] = ACTION_FUNCTION_TAP(LALT_TAB),
        [7] = ACTION_FUNCTION_TAP(LSFT_DQT),
        [8] = ACTION_MODS_TAP_TOGGLE(MOD_RSFT),

        [9] = ACTION_LAYER_TOGGLE(4),



        [10] = ACTION_LAYER_SET_CLEAR(0),
        [11] = ACTION_LAYER_TOGGLE(1),
        [12] = ACTION_MODS_KEY(MOD_RSFT, KC_TAB),
        [13] = ACTION_MODS_KEY(MOD_RSFT | MOD_RCTL, KC_TAB),
        [14] = ACTION_MODS_KEY(MOD_RCTL, KC_TAB)

};




void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{





    switch (id) {
        case LALT_TAB:
            if (record->event.pressed) {
                if (record->tap.count > 0 && !record->tap.interrupted) {
                        if (record->tap.interrupted) {

                                layer_on(2);
                        register_mods(MOD_BIT(KC_LALT));

                        register_code(KC_TAB);
                        unregister_code(KC_TAB);
                    }
                } else {
                    layer_on(2);
                    register_mods(MOD_BIT(KC_LALT));

                    register_code(KC_TAB);
                        unregister_code(KC_TAB);
                }
            } else {
                if (record->tap.count > 0 && !(record->tap.interrupted)) {


                    register_code(KC_TAB);
                    unregister_code(KC_TAB);


                    record->tap.count = 0;
                } else {
                    unregister_mods(MOD_BIT(KC_LALT));
                    layer_off(2);
                }
            }
            break;
    case LSFT_DQT:
            if (record->event.pressed) {
                if (record->tap.count > 0 && !record->tap.interrupted) {
                        if (record->tap.interrupted) {

                                register_mods(MOD_BIT(KC_LSHIFT));
                    }
                } else {
                        register_mods(MOD_BIT(KC_LSHIFT));
                }
            } else {
                if (record->tap.count > 0 && !(record->tap.interrupted)) {
                    add_weak_mods(MOD_BIT(KC_LSHIFT));

                    register_code(KC_2);
                    unregister_code(KC_2);
                    del_weak_mods(MOD_BIT(KC_LSHIFT));

                    record->tap.count = 0;
                } else {
                    unregister_mods(MOD_BIT(KC_LSHIFT));
                }
            }
            break;
    }
}


Offline hasu

  • Posts: 3475
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
Re: tmk usb2usb my layer switching scheme not working, please help
« Reply #1 on: Sat, 04 June 2016, 22:33:34 »
I got a Usb2usb converter from Hasu.
I somehow devised a layer switching layer scheme, but it doesn't work, please help.

layer 5:
dedicated layer switching layer
problem: if hold FN0 key for long then release, this layer not seem to turn off
FN11 key not seem to turn on layer 1

https://github.com/tmk/tmk_keyboard/wiki/FAQ-Keymap#modifierlayer-stuck
In short, use TRNS instead of NO on layer 5.

Quote
FN4 (now key R) on layer 1 (now on when spc key held), activate layer 1 itself (trying to stay in layer 1 after spc key release)
doesn't work either
it doesn't work.  Think these.
1. press FN1(space on layer 0)  => layer 1 is activated
2. press FN4(R onlayer1) => layer 1 is activated(no effect in fact)
3. release FN4 => no action
5. release FN1=> layer 1 is deactivated(back to ayer 0 now)

one of work around  is: copy content of layer 1 as layer 6 for example and change layer1 to 6 in FN4 action.
another is: default layer may work.
https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#012-the-default-layer

Offline tokyo

  • Thread Starter
  • Posts: 17
Re: tmk usb2usb my layer switching scheme not working, please help
« Reply #2 on: Wed, 08 June 2016, 16:29:38 »
Thanks Hasu!

the other thing to note is that better keep the "layer switching layer" low in the stack, I keep it at layer 1 rather than layer 5 now

My dumb question:
How to keep a layer same to another layer without literal codes copy?  (in above case: layer 6 same as layer 1)
C programming is so difficult  :-X

Offline suicidal_orange

  • * Global Moderator
  • Posts: 4771
  • Location: England
Re: tmk usb2usb my layer switching scheme not working, please help
« Reply #3 on: Wed, 08 June 2016, 16:55:46 »
If you use TRNS instead of NO you get whatever the key was on the previous layer, if you always go to layer 6 from layer 1 that would work.

If you also go to layer 6 from another layer (your config is too complicated for me to follow!) you will need to copy it and make changes.
120/100g linear Zealio R1  
GMK Hyperfuse
'Split everything' perfection  
MX Clear
SA Hack'd by Geeks     
EasyAVR mod

Offline tokyo

  • Thread Starter
  • Posts: 17
Re: tmk usb2usb my layer switching scheme not working, please help
« Reply #4 on: Thu, 09 June 2016, 07:20:02 »
Isn't there any C trick?   :D

Offline suicidal_orange

  • * Global Moderator
  • Posts: 4771
  • Location: England
Re: tmk usb2usb my layer switching scheme not working, please help
« Reply #5 on: Thu, 09 June 2016, 11:55:38 »
C no, but this works

copy layer 6 to a new text file
Edit -> replace NO, with TRNS,
copy it back

Sure beats writing TRNS 50 times :thumb:
120/100g linear Zealio R1  
GMK Hyperfuse
'Split everything' perfection  
MX Clear
SA Hack'd by Geeks     
EasyAVR mod