fc660c: Add unimap

This commit is contained in:
tmk 2017-04-04 09:58:56 +09:00
parent 2ed3abb6da
commit 4befc879f6
7 changed files with 1422 additions and 106 deletions

View file

@ -73,9 +73,9 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control
CONSOLE_ENABLE ?= yes # Console for debug CONSOLE_ENABLE ?= yes # Console for debug
COMMAND_ENABLE ?= yes # Commands for debug and configuration COMMAND_ENABLE ?= yes # Commands for debug and configuration
NKRO_ENABLE ?= yes # USB Nkey Rollover NKRO_ENABLE ?= yes # USB Nkey Rollover
#UNIMAP_ENABLE ?= yes # Universal keymap #ACTIONMAP_ENABLE ?= yes # Use 16bit actionmap instead of 8bit keymap
ACTIONMAP_ENABLE ?= yes # Use 16bit actionmap instead of 8bit keymap UNIMAP_ENABLE ?= yes # Universal keymap
#KEYMAP_SECTION_ENABLE ?= yes # fixed address keymap for keymap editor KEYMAP_SECTION_ENABLE ?= yes # fixed address keymap for keymap editor
#OPT_DEFS += -DNO_ACTION_TAPPING #OPT_DEFS += -DNO_ACTION_TAPPING
#OPT_DEFS += -DNO_ACTION_LAYER #OPT_DEFS += -DNO_ACTION_LAYER
@ -87,6 +87,7 @@ ACTIONMAP_ENABLE ?= yes # Use 16bit actionmap instead of 8bit keymap
# #
ifeq (yes,$(strip $(UNIMAP_ENABLE))) ifeq (yes,$(strip $(UNIMAP_ENABLE)))
KEYMAP_FILE = unimap KEYMAP_FILE = unimap
TARGET := $(TARGET)_unimap
else else
ifeq (yes,$(strip $(ACTIONMAP_ENABLE))) ifeq (yes,$(strip $(ACTIONMAP_ENABLE)))
KEYMAP_FILE = actionmap KEYMAP_FILE = actionmap

View file

@ -65,7 +65,7 @@ Row5-7 have no key, you can omit scaning on those lines. Topre original controll
| 7| | | | | | | | | | | | | | | | | | 7| | | | | | | | | | | | | | | | |
Logic analyzer pics: Logic analyzer pics:
- https://i.imgur.com/9SZUzYo.jpg - http://i.imgur.com/9XoNTev.png
- https://i.imgur.com/5FCP1Ay.png - https://i.imgur.com/5FCP1Ay.png
This code emuluates what original cotnroller does for matrix scan. This code emuluates what original cotnroller does for matrix scan.
@ -129,11 +129,15 @@ Datasheets
3.3V power supply 3.3V power supply
----------------- -----------------
LV07A and LVC138A are 5V-tolerant and can be powered with 5V, the keyboard will work only with 5V power supply. LV07A and LVC138A are 5V-tolerant and can be powered with 5V, the keyboard will work only with 5V power supply. It may not be completely safe to operate LV138A with 5V Vcc, its datasheet says:
It may not be completely safe to operate LV138A with 5V Vcc, its datasheet says:
> Exposure to absolute-maximum-rated conditions for extended periods may affect device reliability. > Exposure to absolute-maximum-rated conditions for extended periods may affect device reliability.
Digipot AD5258
--------------
Controller can operate AD5258 via I2C to change actuation point of keys. This may make keyboard unusable accidentally and it will be difficult to recovery in some situation. For safety firmware doesn't support it at this point, though.
Lower value of RDAC register causes shallower actuation point.
Resources Resources
--------- ---------

View file

@ -1,86 +0,0 @@
#include "action.h"
#include "actionmap.h"
#include "hook.h"
#define AMAP( \
K13, K10, K11, K12, K14, K16, K17, K15, K1B, K18, K19, K1A, K1C, K1E, K1F, \
K03, K00, K01, K02, K04, K06, K07, K05, K0B, K08, K09, K0A, K0C, K0E, K0F, \
K43, K40, K41, K42, K44, K46, K47, K45, K4B, K48, K49, K4A, K4E, \
K33, K31, K32, K34, K36, K37, K35, K3B, K38, K39, K3A, K3C, K3D, \
K23, K21, K22, K27, K28, K2A, K2C, K2E, K2D, K2F \
) { \
{ AC_##K00, AC_##K01, AC_##K02, AC_##K03, AC_##K04, AC_##K05, AC_##K06, AC_##K07, \
AC_##K08, AC_##K09, AC_##K0A, AC_##K0B, AC_##K0C, AC_NO, AC_##K0E, AC_##K0F }, \
{ AC_##K10, AC_##K11, AC_##K12, AC_##K13, AC_##K14, AC_##K15, AC_##K16, AC_##K17, \
AC_##K18, AC_##K19, AC_##K1A, AC_##K1B, AC_##K1C, AC_NO, AC_##K1E, AC_##K1F }, \
{ AC_NO, AC_##K21, AC_##K22, AC_##K23, AC_NO, AC_NO, AC_NO, AC_##K27, \
AC_##K28, AC_NO, AC_##K2A, AC_NO, AC_##K2C, AC_##K2D, AC_##K2E, AC_##K2F }, \
{ AC_NO, AC_##K31, AC_##K32, AC_##K33, AC_##K34, AC_##K35, AC_##K36, AC_##K37, \
AC_##K38, AC_##K39, AC_##K3A, AC_##K3B, AC_##K3C, AC_##K3D, AC_NO, AC_NO }, \
{ AC_##K40, AC_##K41, AC_##K42, AC_##K43, AC_##K44, AC_##K45, AC_##K46, AC_##K47, \
AC_##K48, AC_##K49, AC_##K4A, AC_##K4B, AC_NO, AC_NO, AC_##K4E, AC_NO }, \
{ AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \
AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \
{ AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \
AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \
{ AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \
AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO } \
}
#define AC_L3 ACTION_LAYER_MOMENTARY(3)
#define AC_L4 ACTION_LAYER_MOMENTARY(4)
#define AC_LS_2 ACTION_LAYER_MODS(2, MOD_LSFT)
#define AC_RS_2 ACTION_LAYER_MODS(2, MOD_RSFT)
#define AC_TGL1 ACTION_LAYER_TOGGLE(1)
// emulates FC660C default keymap
const action_t actionmaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
[0] = AMAP( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LS_2,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RS_2,UP, \
LCTL,LGUI,LALT, SPC, RALT,RCTL,L3, LEFT,DOWN,RGHT \
),
[1] = AMAP( \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,UP, \
LCTL,LGUI,LALT, SPC, RALT,RCTL,L4, LEFT,DOWN,RGHT \
),
[2] = AMAP( \
GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS \
),
[3] = AMAP( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \
TRNS,TRNS,TRNS, TRNS, TRNS,APP, L3, HOME,PGDN,END \
),
[4] = AMAP( \
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \
TRNS,TRNS,TRNS, TRNS, TRNS,APP, L4, HOME,PGDN,END \
),
};
void hook_layer_change(uint32_t layer_state)
{
// lights LED on Insert when layer 1 is enabled
if (layer_state & (1L<<1)) {
PORTB &= ~(1<<5);
} else {
PORTB |= (1<<5);
}
}

File diff suppressed because it is too large Load diff

View file

@ -26,9 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "util.h" #include "util.h"
#include "timer.h" #include "timer.h"
#include "matrix.h" #include "matrix.h"
#include <avr/wdt.h>
#include "suspend.h"
#include "lufa.h"
#include "led.h" #include "led.h"
#include "fc660c.h" #include "fc660c.h"
@ -137,3 +134,28 @@ void led_set(uint8_t usb_led)
PORTB |= (1<<6); PORTB |= (1<<6);
} }
} }
#ifdef UNIMAP_ENABLE
#include <avr/pgmspace.h>
#include "unimap.h"
const uint8_t PROGMEM unimap_trans[MATRIX_ROWS][MATRIX_COLS] = {
{ UNIMAP_Q, UNIMAP_W, UNIMAP_E, UNIMAP_TAB, UNIMAP_R, UNIMAP_U, UNIMAP_T, UNIMAP_Y,
UNIMAP_O, UNIMAP_P, UNIMAP_LBRC, UNIMAP_I, UNIMAP_RBRC, UNIMAP_NO, UNIMAP_BSLS, UNIMAP_DEL },
{ UNIMAP_1, UNIMAP_2, UNIMAP_3, UNIMAP_GRV, UNIMAP_4, UNIMAP_7, UNIMAP_5, UNIMAP_6,
UNIMAP_9, UNIMAP_0, UNIMAP_MINS, UNIMAP_8, UNIMAP_EQL, UNIMAP_NO, UNIMAP_BSPC, UNIMAP_INS },
{ UNIMAP_NO, UNIMAP_LGUI, UNIMAP_LALT, UNIMAP_LCTL, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_SPC,
UNIMAP_RALT, UNIMAP_NO, UNIMAP_RCTL, UNIMAP_NO, UNIMAP_RGUI, UNIMAP_DOWN, UNIMAP_LEFT, UNIMAP_RGHT },
{ UNIMAP_NO, UNIMAP_Z, UNIMAP_X, UNIMAP_LSFT, UNIMAP_C, UNIMAP_N, UNIMAP_V, UNIMAP_B,
UNIMAP_COMM, UNIMAP_DOT, UNIMAP_SLSH, UNIMAP_M, UNIMAP_RSFT, UNIMAP_UP, UNIMAP_NO, UNIMAP_NO },
{ UNIMAP_A, UNIMAP_S, UNIMAP_D, UNIMAP_CAPS, UNIMAP_F, UNIMAP_J, UNIMAP_G, UNIMAP_H,
UNIMAP_L, UNIMAP_SCLN, UNIMAP_QUOT, UNIMAP_K, UNIMAP_NO, UNIMAP_NO, UNIMAP_ENT, UNIMAP_NO },
{ UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO,
UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO },
{ UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO,
UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO },
{ UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO,
UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO }
};
#endif

View file

@ -6,6 +6,8 @@
#include <avr/io.h> #include <avr/io.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <util/delay.h> #include <util/delay.h>
#include "timer.h"
#include "unimap.h"
// Timer resolution check // Timer resolution check
@ -14,17 +16,6 @@
#endif #endif
/*
* HHKB Matrix I/O
*
* row: HC4051[A,B,C] selects scan row0-7
* row-ext: [En0,En1] row extention for JP
* col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
* key: on: 0/off: 1
* prev: hysteresis control: assert(1) when previous key state is on
*/
/* /*
* Pin configuration for ATMega32U4 * Pin configuration for ATMega32U4
* *
@ -67,4 +58,50 @@ static inline void SET_COL(uint8_t COL)
PORTB = (PORTB & 0xE0) | ((COL & 0x08) ? 1<<4 : 1<<3) | (COL & 0x07); PORTB = (PORTB & 0xE0) | ((COL & 0x08) ? 1<<4 : 1<<3) | (COL & 0x07);
} }
#ifdef UNIMAP_ENABLE
/* unimap */
#define KMAP( \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K31, K4C, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, \
K79,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K7D,K52, \
K78,K7B,K7A, K2C, K7E,K7C,K7F,K50,K51,K4F \
) UNIMAP( \
NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, \
NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,NO, K2A, K49,NO, NO, NO, NO, NO, NO, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K31, K4C,NO, NO, NO, NO, NO, NO, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, NO, K28, NO, NO, NO, NO, \
K79,NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, NO, K7D, K52, NO, NO, NO, NO, \
K78,K7B,K7A,NO, K2C, NO, NO, K7E,K7F,NO, K7C, K50,K51,K4F, NO, NO, NO \
)
#else
/* actionmap */
#define KMAP( \
K13, K10, K11, K12, K14, K16, K17, K15, K1B, K18, K19, K1A, K1C, K1E, K1F, \
K03, K00, K01, K02, K04, K06, K07, K05, K0B, K08, K09, K0A, K0C, K0E, K0F, \
K43, K40, K41, K42, K44, K46, K47, K45, K4B, K48, K49, K4A, K4E, \
K33, K31, K32, K34, K36, K37, K35, K3B, K38, K39, K3A, K3C, K3D, \
K23, K21, K22, K27, K28, K2A, K2C, K2E, K2D, K2F \
) { \
{ AC_##K00, AC_##K01, AC_##K02, AC_##K03, AC_##K04, AC_##K05, AC_##K06, AC_##K07, \
AC_##K08, AC_##K09, AC_##K0A, AC_##K0B, AC_##K0C, AC_NO, AC_##K0E, AC_##K0F }, \
{ AC_##K10, AC_##K11, AC_##K12, AC_##K13, AC_##K14, AC_##K15, AC_##K16, AC_##K17, \
AC_##K18, AC_##K19, AC_##K1A, AC_##K1B, AC_##K1C, AC_NO, AC_##K1E, AC_##K1F }, \
{ AC_NO, AC_##K21, AC_##K22, AC_##K23, AC_NO, AC_NO, AC_NO, AC_##K27, \
AC_##K28, AC_NO, AC_##K2A, AC_NO, AC_##K2C, AC_##K2D, AC_##K2E, AC_##K2F }, \
{ AC_NO, AC_##K31, AC_##K32, AC_##K33, AC_##K34, AC_##K35, AC_##K36, AC_##K37, \
AC_##K38, AC_##K39, AC_##K3A, AC_##K3B, AC_##K3C, AC_##K3D, AC_NO, AC_NO }, \
{ AC_##K40, AC_##K41, AC_##K42, AC_##K43, AC_##K44, AC_##K45, AC_##K46, AC_##K47, \
AC_##K48, AC_##K49, AC_##K4A, AC_##K4B, AC_NO, AC_NO, AC_##K4E, AC_NO }, \
{ AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \
AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \
{ AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \
AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \
{ AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \
AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO } \
}
#endif
#endif #endif

66
keyboard/fc660c/unimap.c Normal file
View file

@ -0,0 +1,66 @@
#include "action.h"
#include "actionmap.h"
#include "hook.h"
#include "fc660c.h"
#define AC_L3 ACTION_LAYER_MOMENTARY(3)
#define AC_L4 ACTION_LAYER_MOMENTARY(4)
#define AC_LS_2 ACTION_LAYER_MODS(2, MOD_LSFT)
#define AC_RS_2 ACTION_LAYER_MODS(2, MOD_RSFT)
#define AC_TGL1 ACTION_LAYER_TOGGLE(1)
// emulates FC660C default keymap
#ifdef KEYMAP_SECTION_ENABLE
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
#else
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
#endif
[0] = KMAP( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LS_2,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RS_2,UP, \
LCTL,LGUI,LALT, SPC, RALT,RCTL,L3, LEFT,DOWN,RGHT \
),
[1] = KMAP( \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,UP, \
LCTL,LGUI,LALT, SPC, RALT,RCTL,L4, LEFT,DOWN,RGHT \
),
[2] = KMAP( \
GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS \
),
[3] = KMAP( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \
TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \
TRNS,TRNS,TRNS, TRNS, TRNS,APP, L3, HOME,PGDN,END \
),
[4] = KMAP( \
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \
TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \
TRNS,TRNS,TRNS, TRNS, TRNS,APP, L4, HOME,PGDN,END \
),
};
void hook_layer_change(uint32_t layer_state)
{
// lights LED on Insert when layer 1 is enabled
if (layer_state & (1L<<1)) {
PORTB &= ~(1<<5);
} else {
PORTB |= (1<<5);
}
}