core: Add unimap support
This commit is contained in:
parent
1b5266cb6e
commit
e84a5981e3
6 changed files with 333 additions and 8 deletions
57
tmk_core/common/unimap.c
Normal file
57
tmk_core/common/unimap.c
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#include "keyboard.h"
|
||||
#include "action.h"
|
||||
#include "unimap.h"
|
||||
#include "print.h"
|
||||
#if defined(__AVR__)
|
||||
# include <avr/pgmspace.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* Keymapping with 16bit action codes */
|
||||
extern const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS];
|
||||
|
||||
// table translates matrix to universal keymap
|
||||
extern const uint8_t unimap_trans[MATRIX_ROWS][MATRIX_COLS];
|
||||
|
||||
|
||||
|
||||
// translates raw matrix to universal map
|
||||
keypos_t unimap_translate(keypos_t key)
|
||||
{
|
||||
uint8_t unimap_pos =
|
||||
#if defined(__AVR__)
|
||||
pgm_read_byte(&unimap_trans[key.row][key.col]);
|
||||
#else
|
||||
unimap_trans[key.row][key.col];
|
||||
#endif
|
||||
return (keypos_t) {
|
||||
.row = ((unimap_pos & 0x70) >> 4),
|
||||
.col = (unimap_pos & 0x0F)
|
||||
};
|
||||
}
|
||||
|
||||
/* Converts key to action */
|
||||
__attribute__ ((weak))
|
||||
action_t action_for_key(uint8_t layer, keypos_t key)
|
||||
{
|
||||
keypos_t uni = unimap_translate(key);
|
||||
if ((uni.row << 4 | uni.col) == UNIMAP_NO) return (action_t)ACTION_NO;
|
||||
#if defined(__AVR__)
|
||||
return (action_t)pgm_read_word(&actionmaps[(layer)][(uni.row)][(uni.col)]);
|
||||
#else
|
||||
return actionmaps[(layer)][(uni.row)][(uni.col)];
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Macro */
|
||||
__attribute__ ((weak))
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
return MACRO_NONE;
|
||||
}
|
||||
|
||||
/* Function */
|
||||
__attribute__ ((weak))
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue