test: using indices to an array of fn ptrs in layout matrices
so that _kb_layout_press... and ...release... are of type uint8_t instead of kbfun_funptr_t (saving 1 byte per key per layer per matrix = 40% of the total layout size). this brings the total firmware size with 10 layers to 6574 bytes instead of 8302 bytes. the teensy 2.0 has 32256 bytes of flash. i'm going to revert to the old way. partly because the space savings don't seem consequential compared to what we have to work with. mostly because doing it with an array separates the function pointer to macro (or const var) correlation in qwerty.c, and because i then have to extern the _kb_layout_functions[6] array in layout.h (or qwerty.h). also, using an enum instead of macros with manually assigned numbers corresponding to the array indices would be more error prone, i think, because (since it has to be visible outside qwerty.c) it would have to be declared in a header. hopefully all that makes sense. i'm in a bit of a hurry. but look at the code: i think, even with a bit of formatting help, it'd still look less cleanpartial-rewrite
parent
068a3546f6
commit
fe545d83d6
|
@ -71,23 +71,33 @@
|
|||
#endif
|
||||
|
||||
#ifndef kb_layout_press_get
|
||||
extern kbfun_funptr_t PROGMEM \
|
||||
extern kbfun_funptr_t PROGMEM _kb_layout_functions[6];
|
||||
extern uint8_t PROGMEM \
|
||||
_kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS];
|
||||
|
||||
#define kb_layout_press_get(layer,row,column) \
|
||||
( (kbfun_funptr_t) \
|
||||
pgm_read_word(&( \
|
||||
_kb_layout_press[layer][row][column] )) )
|
||||
( (kbfun_funptr_t) \
|
||||
pgm_read_word(&( \
|
||||
_kb_layout_functions[ \
|
||||
( (uint8_t) \
|
||||
pgm_read_byte(&( \
|
||||
_kb_layout_press[layer][row][column] \
|
||||
)) ) ] )) )
|
||||
#endif
|
||||
|
||||
#ifndef kb_layout_release_get
|
||||
extern kbfun_funptr_t PROGMEM \
|
||||
extern kbfun_funptr_t PROGMEM _kb_layout_functions[6];
|
||||
extern uint8_t PROGMEM \
|
||||
_kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS];
|
||||
|
||||
#define kb_layout_release_get(layer,row,column) \
|
||||
( (kbfun_funptr_t) \
|
||||
pgm_read_word(&( \
|
||||
_kb_layout_release[layer][row][column] )) )
|
||||
( (kbfun_funptr_t) \
|
||||
pgm_read_word(&( \
|
||||
_kb_layout_functions[ \
|
||||
( (uint8_t) \
|
||||
pgm_read_byte(&( \
|
||||
_kb_layout_release[layer][row][column] \
|
||||
)) ) ] )) )
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -19,14 +19,27 @@
|
|||
#include "../layout.h"
|
||||
|
||||
|
||||
#include "../../../lib/key-functions.h"
|
||||
// aliases
|
||||
#define f_press &kbfun_press
|
||||
#define f_relea &kbfun_release
|
||||
#define f_l_set &kbfun_layer_set
|
||||
#define f_l_inc &kbfun_layer_inc
|
||||
#define f_l_dec &kbfun_layer_dec
|
||||
#define f_2kcap &kbfun_2_keys_capslock_press_release
|
||||
// #define f_press &kbfun_press
|
||||
// #define f_relea &kbfun_release
|
||||
// #define f_l_set &kbfun_layer_set
|
||||
// #define f_l_inc &kbfun_layer_inc
|
||||
// #define f_l_dec &kbfun_layer_dec
|
||||
// #define f_2kcap &kbfun_2_keys_capslock_press_release
|
||||
kbfun_funptr_t PROGMEM _kb_layout_functions[6] = {
|
||||
&kbfun_press,
|
||||
&kbfun_release,
|
||||
&kbfun_layer_set,
|
||||
&kbfun_layer_inc,
|
||||
&kbfun_layer_dec,
|
||||
&kbfun_2_keys_capslock_press_release
|
||||
};
|
||||
#define f_press 0
|
||||
#define f_relea 1
|
||||
#define f_l_set 2
|
||||
#define f_l_inc 3
|
||||
#define f_l_dec 4
|
||||
#define f_2kcap 5
|
||||
|
||||
|
||||
uint8_t PROGMEM _kb_layout[KB_LAYERS][KB_ROWS][KB_COLUMNS] = {
|
||||
|
@ -78,11 +91,11 @@ _altR, _pageU, _pageD )
|
|||
};
|
||||
|
||||
|
||||
kbfun_funptr_t PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = {
|
||||
uint8_t PROGMEM _kb_layout_press[KB_LAYERS][KB_ROWS][KB_COLUMNS] = {
|
||||
// ----------------------------------------------------------------------------
|
||||
LAYER( // layer 0: default
|
||||
// unused
|
||||
NULL,
|
||||
0,
|
||||
// left hand
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
|
@ -104,12 +117,12 @@ f_press,f_press,f_press ),
|
|||
// ----------------------------------------------------------------------------
|
||||
LAYER( // layer 1: function and symbol keys
|
||||
// unused
|
||||
NULL,
|
||||
0,
|
||||
// left hand
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press, NULL,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press, 0,
|
||||
f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,
|
||||
f_press, f_press,
|
||||
|
@ -118,7 +131,7 @@ f_press,f_press,f_press,f_press,f_press,
|
|||
f_press,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
NULL,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
0,f_press,f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,f_press,f_press,f_press,f_press,
|
||||
f_press,
|
||||
f_press, f_press,
|
||||
|
@ -127,11 +140,11 @@ f_press,f_press,f_press )
|
|||
};
|
||||
|
||||
|
||||
kbfun_funptr_t PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = {
|
||||
uint8_t PROGMEM _kb_layout_release[KB_LAYERS][KB_ROWS][KB_COLUMNS] = {
|
||||
// ----------------------------------------------------------------------------
|
||||
LAYER( // layer 0: default
|
||||
// unused
|
||||
NULL,
|
||||
0,
|
||||
// left hand
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
|
@ -153,12 +166,12 @@ f_relea,f_relea,f_relea ),
|
|||
// ----------------------------------------------------------------------------
|
||||
LAYER( // layer 1: function and symbol keys
|
||||
// unused
|
||||
NULL,
|
||||
0,
|
||||
// left hand
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea, NULL,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea, 0,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,
|
||||
f_relea, f_relea,
|
||||
|
@ -167,7 +180,7 @@ f_relea,f_relea,f_relea,f_relea,f_relea,
|
|||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
NULL,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
0,f_relea,f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,f_relea,f_relea,f_relea,f_relea,
|
||||
f_relea,
|
||||
f_relea, f_relea,
|
||||
|
|
Loading…
Reference in New Issue