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