2011-07-20 15:32:52 +00:00
/*
Copyright 2011 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/>.
*/
2011-02-12 15:15:51 +00:00
# include <stdint.h>
# include <stdbool.h>
# include <util/delay.h>
2012-10-09 05:36:13 +00:00
# include "keycode.h"
2011-02-12 15:15:51 +00:00
# include "host.h"
2013-01-28 05:06:42 +00:00
# include "keymap.h"
2011-02-12 15:15:51 +00:00
# include "print.h"
# include "debug.h"
# include "util.h"
# include "timer.h"
2012-10-05 17:23:12 +00:00
# include "keyboard.h"
2011-09-22 07:56:36 +00:00
# include "bootloader.h"
2011-02-12 15:15:51 +00:00
# include "command.h"
2012-10-16 02:20:49 +00:00
# ifdef MOUSEKEY_ENABLE
# include "mousekey.h"
# endif
2011-02-12 15:15:51 +00:00
# ifdef HOST_PJRC
# include "usb_keyboard.h"
2011-09-17 13:39:50 +00:00
# ifdef EXTRAKEY_ENABLE
2011-02-12 15:15:51 +00:00
# include "usb_extra.h"
# endif
# endif
2011-09-17 13:39:50 +00:00
# ifdef HOST_VUSB
# include "usbdrv.h"
# endif
2011-02-12 15:15:51 +00:00
2012-10-16 02:20:49 +00:00
static bool command_common ( uint8_t code ) ;
2012-10-16 18:44:01 +00:00
static void command_common_help ( void ) ;
static bool command_console ( uint8_t code ) ;
static void command_console_help ( void ) ;
2012-10-17 15:10:20 +00:00
# ifdef MOUSEKEY_ENABLE
2012-10-16 18:44:01 +00:00
static bool mousekey_console ( uint8_t code ) ;
static void mousekey_console_help ( void ) ;
2012-10-17 15:10:20 +00:00
# endif
2012-10-16 18:44:01 +00:00
2012-10-17 15:10:20 +00:00
static uint8_t numkey2num ( uint8_t code ) ;
2011-02-12 15:15:51 +00:00
static void switch_layer ( uint8_t layer ) ;
2012-10-16 18:44:01 +00:00
typedef enum { ONESHOT , CONSOLE , MOUSEKEY } cmdstate_t ;
static cmdstate_t state = ONESHOT ;
2011-02-12 15:15:51 +00:00
2011-09-17 13:39:50 +00:00
2012-10-16 02:20:49 +00:00
bool command_proc ( uint8_t code )
{
2012-10-16 18:44:01 +00:00
switch ( state ) {
case ONESHOT :
if ( ! IS_COMMAND ( ) )
return false ;
return ( command_extra ( code ) | | command_common ( code ) ) ;
case CONSOLE :
command_console ( code ) ;
break ;
2012-10-17 15:10:20 +00:00
# ifdef MOUSEKEY_ENABLE
2012-10-16 18:44:01 +00:00
case MOUSEKEY :
mousekey_console ( code ) ;
break ;
2012-10-17 15:10:20 +00:00
# endif
2012-10-16 18:44:01 +00:00
default :
state = ONESHOT ;
return false ;
2011-09-17 13:39:50 +00:00
}
2012-10-16 18:44:01 +00:00
return true ;
2011-09-17 13:39:50 +00:00
}
2012-10-16 18:44:01 +00:00
/* This allows to define extra commands. return false when not processed. */
2012-10-16 02:20:49 +00:00
bool command_extra ( uint8_t code ) __attribute__ ( ( weak ) ) ;
bool command_extra ( uint8_t code )
2011-09-17 13:39:50 +00:00
{
2012-10-16 02:20:49 +00:00
return false ;
2011-09-17 13:39:50 +00:00
}
2012-10-16 18:44:01 +00:00
/***********************************************************
* Command common
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void command_common_help ( void )
{
print_enable = true ;
print ( " \n \n ----- Command Help ----- \n " ) ;
print ( " c: enter console mode \n " ) ;
print ( " d: toggle debug enable \n " ) ;
print ( " x: toggle matrix debug \n " ) ;
print ( " k: toggle keyboard debug \n " ) ;
print ( " m: toggle mouse debug \n " ) ;
print ( " p: toggle print enable \n " ) ;
print ( " v: print device version & info \n " ) ;
print ( " t: print timer count \n " ) ;
print ( " s: print status \n " ) ;
# ifdef NKRO_ENABLE
print ( " n: toggle NKRO \n " ) ;
# endif
print ( " 0/F10: switch to Layer0 \n " ) ;
print ( " 1/F1: switch to Layer1 \n " ) ;
print ( " 2/F2: switch to Layer2 \n " ) ;
print ( " 3/F3: switch to Layer3 \n " ) ;
print ( " 4/F4: switch to Layer4 \n " ) ;
print ( " PScr: power down/remote wake-up \n " ) ;
2012-10-17 15:10:20 +00:00
print ( " Caps: Lock Keyboard(Child Proof) \n " ) ;
2012-10-16 18:44:01 +00:00
print ( " Paus: jump to bootloader \n " ) ;
}
2012-10-16 02:20:49 +00:00
static bool command_common ( uint8_t code )
2011-09-17 13:39:50 +00:00
{
2012-10-17 15:10:20 +00:00
static host_driver_t * host_driver = 0 ;
2012-10-16 02:20:49 +00:00
switch ( code ) {
2012-10-17 15:10:20 +00:00
case KC_CAPSLOCK :
if ( host_get_driver ( ) ) {
host_driver = host_get_driver ( ) ;
host_set_driver ( 0 ) ;
print ( " Locked. \n " ) ;
} else {
host_set_driver ( host_driver ) ;
print ( " Unlocked. \n " ) ;
}
break ;
2012-10-09 05:36:13 +00:00
case KC_H :
2012-10-16 18:44:01 +00:00
case KC_SLASH : /* ? */
command_common_help ( ) ;
2011-02-12 15:15:51 +00:00
break ;
2012-10-16 18:44:01 +00:00
case KC_C :
print_enable = true ;
debug_matrix = false ;
debug_keyboard = false ;
debug_mouse = false ;
debug_enable = false ;
command_console_help ( ) ;
print ( " \n Enter Console Mode \n " ) ;
print ( " C> " ) ;
state = CONSOLE ;
break ;
case KC_PAUSE :
2012-10-16 02:20:49 +00:00
clear_keyboard ( ) ;
2012-10-16 18:44:01 +00:00
print ( " \n \n Jump to bootloader... " ) ;
2011-02-12 15:15:51 +00:00
_delay_ms ( 1000 ) ;
2011-09-22 07:56:36 +00:00
bootloader_jump ( ) ; // not return
print ( " not supported. \n " ) ;
2011-02-12 15:15:51 +00:00
break ;
2012-10-09 05:36:13 +00:00
case KC_D :
2011-02-12 15:15:51 +00:00
if ( debug_enable ) {
2012-10-16 18:44:01 +00:00
print ( " \n DEBUG: disabled. \n " ) ;
debug_matrix = false ;
2011-02-12 15:15:51 +00:00
debug_keyboard = false ;
2012-10-16 18:44:01 +00:00
debug_mouse = false ;
debug_enable = false ;
} else {
print ( " \n DEBUG: enabled. \n " ) ;
debug_enable = true ;
2011-02-12 15:15:51 +00:00
}
break ;
2012-10-09 05:36:13 +00:00
case KC_X : // debug matrix toggle
2011-02-12 15:15:51 +00:00
debug_matrix = ! debug_matrix ;
2012-10-16 18:44:01 +00:00
if ( debug_matrix ) {
print ( " \n DEBUG: matrix enabled. \n " ) ;
debug_enable = true ;
} else {
print ( " \n DEBUG: matrix disabled. \n " ) ;
}
2011-02-12 15:15:51 +00:00
break ;
2012-10-09 05:36:13 +00:00
case KC_K : // debug keyboard toggle
2011-02-12 15:15:51 +00:00
debug_keyboard = ! debug_keyboard ;
2012-10-16 18:44:01 +00:00
if ( debug_keyboard ) {
print ( " \n DEBUG: keyboard enabled. \n " ) ;
debug_enable = true ;
} else {
print ( " \n DEBUG: keyboard disabled. \n " ) ;
}
2011-02-12 15:15:51 +00:00
break ;
2012-10-09 05:36:13 +00:00
case KC_M : // debug mouse toggle
2011-02-12 15:15:51 +00:00
debug_mouse = ! debug_mouse ;
2012-10-16 18:44:01 +00:00
if ( debug_mouse ) {
print ( " \n DEBUG: mouse enabled. \n " ) ;
debug_enable = true ;
} else {
print ( " \n DEBUG: mouse disabled. \n " ) ;
}
2011-02-12 15:15:51 +00:00
break ;
2012-10-09 05:36:13 +00:00
case KC_V : // print version & information
2012-10-16 18:44:01 +00:00
print ( " \n \n ----- Version ----- \n " ) ;
2011-02-12 15:15:51 +00:00
print ( STR ( DESCRIPTION ) " \n " ) ;
2012-10-16 18:44:01 +00:00
print ( STR ( MANUFACTURER ) " ( " STR ( VENDOR_ID ) " )/ " ) ;
print ( STR ( PRODUCT ) " ( " STR ( PRODUCT_ID ) " ) " ) ;
print ( " VERSION: " STR ( DEVICE_VER ) " \n " ) ;
2011-02-12 15:15:51 +00:00
break ;
2012-10-09 05:36:13 +00:00
case KC_T : // print timer
2012-10-24 18:28:25 +00:00
print_val_hex32 ( timer_count ) ;
2011-02-12 15:15:51 +00:00
break ;
2012-10-09 05:36:13 +00:00
case KC_P : // print toggle
2012-10-16 18:44:01 +00:00
if ( print_enable ) {
2011-02-12 15:15:51 +00:00
print ( " print disabled. \n " ) ;
2012-10-16 18:44:01 +00:00
print_enable = false ;
2011-02-12 15:15:51 +00:00
} else {
2012-10-16 18:44:01 +00:00
print_enable = true ;
2011-02-12 15:15:51 +00:00
print ( " print enabled. \n " ) ;
}
break ;
2012-10-09 05:36:13 +00:00
case KC_S :
2012-10-16 18:44:01 +00:00
print ( " \n \n ----- Status ----- \n " ) ;
2012-10-24 18:28:25 +00:00
print_val_hex8 ( host_keyboard_leds ( ) ) ;
2011-02-12 15:15:51 +00:00
# ifdef HOST_PJRC
2012-10-24 18:28:25 +00:00
print_val_hex8 ( UDCON ) ;
print_val_hex8 ( UDIEN ) ;
print_val_hex8 ( UDINT ) ;
print_val_hex8 ( usb_keyboard_leds ) ;
print_val_hex8 ( usb_keyboard_protocol ) ;
print_val_hex8 ( usb_keyboard_idle_config ) ;
print_val_hex8 ( usb_keyboard_idle_count ) ;
2011-09-17 13:39:50 +00:00
# endif
# ifdef HOST_VUSB
# if USB_COUNT_SOF
2012-10-24 18:28:25 +00:00
print_val_hex8 ( usbSofCount ) ;
2011-09-17 13:39:50 +00:00
# endif
2011-02-12 15:15:51 +00:00
# endif
break ;
2011-09-17 13:39:50 +00:00
# ifdef NKRO_ENABLE
2012-10-09 05:36:13 +00:00
case KC_N :
2011-02-12 15:15:51 +00:00
keyboard_nkro = ! keyboard_nkro ;
if ( keyboard_nkro )
2011-09-17 13:39:50 +00:00
print ( " NKRO: enabled \n " ) ;
2011-02-12 15:15:51 +00:00
else
2011-09-17 13:39:50 +00:00
print ( " NKRO: disabled \n " ) ;
2011-02-12 15:15:51 +00:00
break ;
# endif
2011-09-17 13:39:50 +00:00
# ifdef EXTRAKEY_ENABLE
2012-10-16 18:44:01 +00:00
case KC_PSCREEN :
// TODO: Power key should take this feature? otherwise any key during suspend.
2011-05-21 01:28:57 +00:00
# ifdef HOST_PJRC
2011-02-12 15:15:51 +00:00
if ( suspend & & remote_wakeup ) {
usb_remote_wakeup ( ) ;
} else {
2011-05-21 01:28:57 +00:00
host_system_send ( SYSTEM_POWER_DOWN ) ;
2011-06-30 16:10:55 +00:00
host_system_send ( 0 ) ;
_delay_ms ( 500 ) ;
2011-02-12 15:15:51 +00:00
}
2011-05-21 01:28:57 +00:00
# else
host_system_send ( SYSTEM_POWER_DOWN ) ;
2012-10-17 15:10:20 +00:00
_delay_ms ( 100 ) ;
2011-06-30 16:10:55 +00:00
host_system_send ( 0 ) ;
_delay_ms ( 500 ) ;
2011-05-21 01:28:57 +00:00
# endif
2011-02-12 15:15:51 +00:00
break ;
# endif
2012-10-09 05:36:13 +00:00
case KC_0 :
2012-10-16 02:20:49 +00:00
case KC_F10 :
2011-02-12 15:15:51 +00:00
switch_layer ( 0 ) ;
break ;
2012-10-09 05:36:13 +00:00
case KC_1 :
2012-10-16 02:20:49 +00:00
case KC_F1 :
2011-02-12 15:15:51 +00:00
switch_layer ( 1 ) ;
break ;
2012-10-09 05:36:13 +00:00
case KC_2 :
2012-10-16 02:20:49 +00:00
case KC_F2 :
2011-02-12 15:15:51 +00:00
switch_layer ( 2 ) ;
break ;
2012-10-09 05:36:13 +00:00
case KC_3 :
2012-10-16 02:20:49 +00:00
case KC_F3 :
2011-02-12 15:15:51 +00:00
switch_layer ( 3 ) ;
break ;
2012-10-09 05:36:13 +00:00
case KC_4 :
2012-10-16 02:20:49 +00:00
case KC_F4 :
2011-02-12 15:15:51 +00:00
switch_layer ( 4 ) ;
break ;
default :
2012-10-16 18:44:01 +00:00
print ( " ? " ) ;
2012-10-16 02:20:49 +00:00
return false ;
2011-02-12 15:15:51 +00:00
}
2012-10-16 02:20:49 +00:00
return true ;
2011-02-12 15:15:51 +00:00
}
2012-10-16 18:44:01 +00:00
/***********************************************************
* Command console
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void command_console_help ( void )
2011-02-12 15:15:51 +00:00
{
2012-10-16 18:44:01 +00:00
print_enable = true ;
print ( " \n \n ----- Console Help ----- \n " ) ;
print ( " ESC/q: quit \n " ) ;
# ifdef MOUSEKEY_ENABLE
print ( " m: mousekey \n " ) ;
# endif
}
static bool command_console ( uint8_t code )
{
switch ( code ) {
case KC_H :
case KC_SLASH : /* ? */
command_console_help ( ) ;
break ;
case KC_Q :
case KC_ESC :
print ( " \n Quit Console Mode \n " ) ;
state = ONESHOT ;
return false ;
# ifdef MOUSEKEY_ENABLE
case KC_M :
mousekey_console_help ( ) ;
print ( " \n Enter Mousekey Console \n " ) ;
print ( " M0> " ) ;
state = MOUSEKEY ;
return true ;
# endif
default :
print ( " ? " ) ;
return false ;
}
print ( " C> " ) ;
return true ;
}
# ifdef MOUSEKEY_ENABLE
/***********************************************************
* Mousekey console
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static uint8_t mousekey_param = 0 ;
static void mousekey_param_print ( void )
{
print ( " \n \n ----- Mousekey Parameters ----- \n " ) ;
print ( " 1: mk_delay(*10ms): " ) ; pdec ( mk_delay ) ; print ( " \n " ) ;
print ( " 2: mk_interval(ms): " ) ; pdec ( mk_interval ) ; print ( " \n " ) ;
print ( " 3: mk_max_speed: " ) ; pdec ( mk_max_speed ) ; print ( " \n " ) ;
print ( " 4: mk_time_to_max: " ) ; pdec ( mk_time_to_max ) ; print ( " \n " ) ;
print ( " 5: mk_wheel_max_speed: " ) ; pdec ( mk_wheel_max_speed ) ; print ( " \n " ) ;
print ( " 6: mk_wheel_time_to_max: " ) ; pdec ( mk_wheel_time_to_max ) ; print ( " \n " ) ;
}
2012-10-24 18:28:25 +00:00
# define PRINT_SET_VAL(v) print(#v " = "); print_dec(v); print("\n");
2012-10-16 18:44:01 +00:00
static void mousekey_param_inc ( uint8_t param , uint8_t inc )
{
switch ( param ) {
case 1 :
if ( mk_delay + inc < UINT8_MAX )
mk_delay + = inc ;
else
mk_delay = UINT8_MAX ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_delay ) ;
2012-10-16 18:44:01 +00:00
break ;
case 2 :
if ( mk_interval + inc < UINT8_MAX )
mk_interval + = inc ;
else
mk_interval = UINT8_MAX ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_interval ) ;
2012-10-16 18:44:01 +00:00
break ;
case 3 :
if ( mk_max_speed + inc < UINT8_MAX )
mk_max_speed + = inc ;
else
mk_max_speed = UINT8_MAX ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_max_speed ) ;
2012-10-16 18:44:01 +00:00
break ;
case 4 :
if ( mk_time_to_max + inc < UINT8_MAX )
mk_time_to_max + = inc ;
else
mk_time_to_max = UINT8_MAX ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_time_to_max ) ;
2012-10-16 18:44:01 +00:00
break ;
case 5 :
if ( mk_wheel_max_speed + inc < UINT8_MAX )
mk_wheel_max_speed + = inc ;
else
mk_wheel_max_speed = UINT8_MAX ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_wheel_max_speed ) ;
2012-10-16 18:44:01 +00:00
break ;
case 6 :
if ( mk_wheel_time_to_max + inc < UINT8_MAX )
mk_wheel_time_to_max + = inc ;
else
mk_wheel_time_to_max = UINT8_MAX ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_wheel_time_to_max ) ;
2012-10-16 18:44:01 +00:00
break ;
}
}
static void mousekey_param_dec ( uint8_t param , uint8_t dec )
{
switch ( param ) {
case 1 :
if ( mk_delay > dec )
mk_delay - = dec ;
else
mk_delay = 0 ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_delay ) ;
2012-10-16 18:44:01 +00:00
break ;
case 2 :
if ( mk_interval > dec )
mk_interval - = dec ;
else
mk_interval = 0 ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_interval ) ;
2012-10-16 18:44:01 +00:00
break ;
case 3 :
if ( mk_max_speed > dec )
mk_max_speed - = dec ;
else
mk_max_speed = 0 ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_max_speed ) ;
2012-10-16 18:44:01 +00:00
break ;
case 4 :
if ( mk_time_to_max > dec )
mk_time_to_max - = dec ;
else
mk_time_to_max = 0 ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_time_to_max ) ;
2012-10-16 18:44:01 +00:00
break ;
case 5 :
if ( mk_wheel_max_speed > dec )
mk_wheel_max_speed - = dec ;
else
mk_wheel_max_speed = 0 ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_wheel_max_speed ) ;
2012-10-16 18:44:01 +00:00
break ;
case 6 :
if ( mk_wheel_time_to_max > dec )
mk_wheel_time_to_max - = dec ;
else
mk_wheel_time_to_max = 0 ;
2012-10-22 17:14:36 +00:00
PRINT_SET_VAL ( mk_wheel_time_to_max ) ;
2012-10-16 18:44:01 +00:00
break ;
}
}
static void mousekey_console_help ( void )
{
print ( " \n \n ----- Mousekey Parameters Help ----- \n " ) ;
print ( " ESC/q: quit \n " ) ;
print ( " 1: select mk_delay(*10ms) \n " ) ;
print ( " 2: select mk_interval(ms) \n " ) ;
print ( " 3: select mk_max_speed \n " ) ;
print ( " 4: select mk_time_to_max \n " ) ;
print ( " 5: select mk_wheel_max_speed \n " ) ;
print ( " 6: select mk_wheel_time_to_max \n " ) ;
print ( " p: print prameters \n " ) ;
print ( " d: set default values \n " ) ;
print ( " up: increase prameters(+1) \n " ) ;
print ( " down: decrease prameters(-1) \n " ) ;
print ( " pgup: increase prameters(+10) \n " ) ;
print ( " pgdown: decrease prameters(-10) \n " ) ;
print ( " \n speed = delta * max_speed * (repeat / time_to_max) \n " ) ;
print ( " where delta: cursor= " ) ; pdec ( MOUSEKEY_MOVE_DELTA ) ;
print ( " , wheel= " ) ; pdec ( MOUSEKEY_WHEEL_DELTA ) ; print ( " \n " ) ;
print ( " See http://en.wikipedia.org/wiki/Mouse_keys \n " ) ;
}
static bool mousekey_console ( uint8_t code )
{
switch ( code ) {
case KC_H :
case KC_SLASH : /* ? */
mousekey_console_help ( ) ;
break ;
case KC_Q :
case KC_ESC :
mousekey_param = 0 ;
print ( " \n Quit Mousekey Console \n " ) ;
print ( " C> " ) ;
state = CONSOLE ;
return false ;
case KC_P :
mousekey_param_print ( ) ;
break ;
case KC_1 :
case KC_2 :
case KC_3 :
case KC_4 :
case KC_5 :
case KC_6 :
case KC_7 :
case KC_8 :
case KC_9 :
case KC_0 :
2012-10-17 15:10:20 +00:00
mousekey_param = numkey2num ( code ) ;
2012-10-16 18:44:01 +00:00
print ( " selected parameter: " ) ; pdec ( mousekey_param ) ; print ( " \n " ) ;
break ;
case KC_UP :
mousekey_param_inc ( mousekey_param , 1 ) ;
break ;
case KC_DOWN :
mousekey_param_dec ( mousekey_param , 1 ) ;
break ;
case KC_PGUP :
mousekey_param_inc ( mousekey_param , 10 ) ;
break ;
case KC_PGDN :
mousekey_param_dec ( mousekey_param , 10 ) ;
break ;
case KC_D :
mk_delay = MOUSEKEY_DELAY / 10 ;
mk_interval = MOUSEKEY_INTERVAL ;
mk_max_speed = MOUSEKEY_MAX_SPEED ;
mk_time_to_max = MOUSEKEY_TIME_TO_MAX ;
mk_wheel_max_speed = MOUSEKEY_WHEEL_MAX_SPEED ;
mk_wheel_time_to_max = MOUSEKEY_WHEEL_TIME_TO_MAX ;
print ( " set default values. \n " ) ;
break ;
default :
print ( " ? " ) ;
return false ;
}
print ( " M " ) ; pdec ( mousekey_param ) ; print ( " > " ) ;
return true ;
}
2011-02-12 15:15:51 +00:00
# endif
2012-10-16 18:44:01 +00:00
/***********************************************************
* Utilities
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2012-10-17 15:10:20 +00:00
static uint8_t numkey2num ( uint8_t code )
2012-10-16 18:44:01 +00:00
{
switch ( code ) {
case KC_1 : return 1 ;
case KC_2 : return 2 ;
case KC_3 : return 3 ;
case KC_4 : return 4 ;
case KC_5 : return 5 ;
case KC_6 : return 6 ;
case KC_7 : return 7 ;
case KC_8 : return 8 ;
case KC_9 : return 9 ;
case KC_0 : return 0 ;
}
return 0 ;
2011-02-12 15:15:51 +00:00
}
static void switch_layer ( uint8_t layer )
{
2012-10-24 18:28:25 +00:00
print_val_hex8 ( current_layer ) ;
print_val_hex8 ( default_layer ) ;
2011-02-12 15:15:51 +00:00
current_layer = layer ;
default_layer = layer ;
2012-10-24 18:28:25 +00:00
print ( " switch to " ) ; print_val_hex8 ( layer ) ;
2011-02-12 15:15:51 +00:00
}