2014-08-23 15:16:16 +00:00
/*
Copyright 2014 Ralf Schmitt < ralf @ bunkertor . net >
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation , either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# include <stdint.h>
# include <stdbool.h>
# include <avr/pgmspace.h>
# include "keycode.h"
# include "action.h"
# include "action_macro.h"
# include "report.h"
# include "host.h"
# include "debug.h"
# include "keymap.h"
/* Map physical keyboard layout to matrix array */
# define KEYMAP( \
K5A , K5B , K5C , K5D , \
K4A , K4B , K4C , K4D , \
K3A , K3B , K3C , K3D , \
K2A , K2B , K2C , \
K1A , K1B , K1C , K1D , \
K0A , K0B , K0C \
) { \
/* 0 1 2 3 */ \
/* 5 */ { KC_ # # K5A , KC_ # # K5B , KC_ # # K5C , KC_ # # K5D } , \
/* 4 */ { KC_ # # K4A , KC_ # # K4B , KC_ # # K4C , KC_ # # K4D } , \
/* 3 */ { KC_ # # K3A , KC_ # # K3B , KC_ # # K3C , KC_ # # K3D } , \
/* 2 */ { KC_ # # K2A , KC_ # # K2B , KC_ # # K2C , KC_NO } , \
/* 1 */ { KC_ # # K1A , KC_ # # K1B , KC_ # # K1C , KC_ # # K1D } , \
/* 0 */ { KC_ # # K0A , KC_ # # K0B , KC_ # # K0C , KC_NO , } \
}
# include "keymap_lightpad.h"
# define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0]))
# define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
/* translates key to keycode */
2014-11-24 06:14:52 +00:00
uint8_t keymap_key_to_keycode ( uint8_t layer , keypos_t key )
2014-08-23 15:16:16 +00:00
{
if ( layer < KEYMAPS_SIZE ) {
return pgm_read_byte ( & keymaps [ ( layer ) ] [ ( key . row ) ] [ ( key . col ) ] ) ;
} else {
// fall back to layer 0
return pgm_read_byte ( & keymaps [ 0 ] [ ( key . row ) ] [ ( key . col ) ] ) ;
}
}
/* translates Fn keycode to action */
action_t keymap_fn_to_action ( uint8_t keycode )
{
action_t action ;
if ( FN_INDEX ( keycode ) < FN_ACTIONS_SIZE ) {
action . code = pgm_read_word ( & fn_actions [ FN_INDEX ( keycode ) ] ) ;
} else {
action . code = ACTION_NO ;
}
return action ;
}