2013-01-31 08:50:53 +00:00
/*
Copyright 2013 Jun Wako < wakojun @ gmail . com >
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/>.
*/
2013-02-20 02:16:13 +00:00
# include <avr/pgmspace.h>
2013-01-31 08:50:53 +00:00
# include "keymap.h"
# include "report.h"
# include "keycode.h"
2013-02-20 02:16:13 +00:00
# include "layer_switch.h"
2013-02-13 02:20:47 +00:00
# include "action.h"
2013-02-25 06:30:37 +00:00
# include "action_macro.h"
2013-02-20 02:16:13 +00:00
# include "debug.h"
2013-01-31 08:50:53 +00:00
2013-02-20 02:16:13 +00:00
static action_t keycode_to_action ( uint8_t keycode ) ;
2013-03-11 05:39:06 +00:00
2013-02-20 02:16:13 +00:00
/* converts key to action */
action_t action_for_key ( uint8_t layer , key_t key )
{
uint8_t keycode = keymap_key_to_keycode ( layer , key ) ;
switch ( keycode ) {
case KC_FN0 . . . KC_FN31 :
return keymap_fn_to_action ( keycode ) ;
default :
return keycode_to_action ( keycode ) ;
}
}
2013-03-11 05:39:06 +00:00
/* Macro */
2013-03-05 06:41:21 +00:00
__attribute__ ( ( weak ) )
2013-03-11 05:39:06 +00:00
const prog_macro_t * action_get_macro ( keyrecord_t * record , uint8_t id , uint8_t opt )
{
return MACRO_NONE ;
}
2013-03-05 06:41:21 +00:00
2013-03-11 05:39:06 +00:00
/* Function */
2013-03-05 06:41:21 +00:00
__attribute__ ( ( weak ) )
2013-03-11 05:39:06 +00:00
void action_function ( keyrecord_t * record , uint8_t id , uint8_t opt )
{
}
2013-03-05 06:41:21 +00:00
2013-02-20 02:16:13 +00:00
/* translates keycode to action */
static action_t keycode_to_action ( uint8_t keycode )
2013-01-31 08:50:53 +00:00
{
action_t action ;
2013-02-13 02:20:47 +00:00
switch ( keycode ) {
2013-01-31 08:50:53 +00:00
case KC_A . . . KC_EXSEL :
2013-03-11 05:39:06 +00:00
case KC_LCTRL . . . KC_RGUI :
2013-02-13 02:20:47 +00:00
action . code = ACTION_KEY ( keycode ) ;
2013-01-31 08:50:53 +00:00
break ;
case KC_SYSTEM_POWER . . . KC_SYSTEM_WAKE :
2013-02-13 02:20:47 +00:00
action . code = ACTION_USAGE_SYSTEM ( KEYCODE2SYSTEM ( keycode ) ) ;
2013-01-31 08:50:53 +00:00
break ;
case KC_AUDIO_MUTE . . . KC_WWW_FAVORITES :
2013-02-13 02:20:47 +00:00
action . code = ACTION_USAGE_CONSUMER ( KEYCODE2CONSUMER ( keycode ) ) ;
2013-01-31 08:50:53 +00:00
break ;
case KC_MS_UP . . . KC_MS_ACCEL2 :
2013-02-13 02:20:47 +00:00
action . code = ACTION_MOUSEKEY ( keycode ) ;
2013-01-31 08:50:53 +00:00
break ;
2013-02-13 02:20:47 +00:00
case KC_TRNS :
action . code = ACTION_TRANSPARENT ;
2013-01-31 08:50:53 +00:00
break ;
default :
action . code = ACTION_NO ;
break ;
}
return action ;
}
2013-03-11 05:39:06 +00:00
# ifdef USE_LEGACY_KEYMAP
/*
* Legacy keymap support
* Consider using new keymap API instead .
*/
__attribute__ ( ( weak ) )
uint8_t keymap_key_to_keycode ( uint8_t layer , key_t key )
{
return keymap_get_keycode ( layer , key . row , key . col ) ;
}
/* Legacy keymap support */
__attribute__ ( ( weak ) )
action_t keymap_fn_to_action ( uint8_t keycode )
{
action_t action = { . code = ACTION_NO } ;
switch ( keycode ) {
case KC_FN0 . . . KC_FN31 :
{
uint8_t layer = keymap_fn_layer ( FN_INDEX ( keycode ) ) ;
uint8_t key = keymap_fn_keycode ( FN_INDEX ( keycode ) ) ;
if ( key ) {
action . code = ACTION_KEYMAP_TAP_KEY ( layer , key ) ;
} else {
action . code = ACTION_KEYMAP_MOMENTARY ( layer ) ;
}
}
return action ;
default :
return action ;
}
}
# endif