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
#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
#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;
    }
}