@ -455,103 +455,29 @@ bool process_record_quantum(keyrecord_t *record) {
return process_action_kb ( record ) ;
return process_action_kb ( record ) ;
}
}
# ifdef JIS_KEYCODE
# if defined SENDSTRING_JIS_KEYCODE
static const uint16_t ascii_to_shift_lut [ 8 ] PROGMEM = {
/* for users with JIS keyboards */
0x0000 , /*0, 0, 0, 0, 0, 0, 0, 0,
const bool ascii_to_shift_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , */
0x0000 , /*0, 0, 0, 0, 0, 0, 0, 0,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , */
0x7ff0 , /*0, 1, 1, 1, 1, 1, 1, 1,
1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , */
0x000f , /*0, 0, 0, 0, 0, 0, 0, 0,
0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , */
0x7fff , /*0, 1, 1, 1, 1, 1, 1, 1,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , */
0xffe1 , /*1, 1, 1, 1, 1, 1, 1, 1,
1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , */
0x8000 , /*1, 0, 0, 0, 0, 0, 0, 0,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , */
0x001e , /*0, 0, 0, 0, 0, 0, 0, 0,
0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 */
} ;
static const struct {
uint8_t controls_0 [ 16 ] ,
controls_1 [ 16 ] ,
numerics [ 16 ] ,
alphabets_0 [ 16 ] ,
alphabets_1 [ 16 ] ;
} lower_to_keycode PROGMEM = {
. controls_0 = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
} ,
. controls_1 = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , KC_ESC , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
} ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
. numerics = {
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
KC_0 , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 ,
KC_8 , KC_9 , KC_QUOT , KC_SCLN , KC_COMM , KC_MINS , KC_DOT , KC_SLSH ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
} ,
0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 ,
. alphabets_0 = {
0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
KC_LBRC , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
} ,
1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 ,
. alphabets_1 = {
1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_X , KC_Y , KC_Z , KC_RBRC , KC_JYEN , KC_BSLS , KC_EQL , KC_RO ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
} ,
0 , 0 , 0 , 1 , 1 , 1 , 1 , 0
} ;
static const uint8_t * ascii_to_keycode_lut [ 8 ] = {
lower_to_keycode . controls_0 ,
lower_to_keycode . controls_1 ,
lower_to_keycode . numerics ,
lower_to_keycode . numerics ,
lower_to_keycode . alphabets_0 ,
lower_to_keycode . alphabets_1 ,
lower_to_keycode . alphabets_0 ,
lower_to_keycode . alphabets_1
} ;
} ;
void send_string ( const char * str ) {
while ( 1 ) {
uint8_t keycode ;
bool shift ;
uint8_t ascii_code = pgm_read_byte ( str ) ;
if ( ascii_code = = 0x00u ) { break ; }
else if ( ascii_code = = 0x20u ) {
keycode = KC_SPC ;
shift = false ;
}
else if ( ascii_code = = 0x7Fu ) {
keycode = KC_DEL ;
shift = false ;
}
else {
int hi = ascii_code > > 4 & 0x0f ,
lo = ascii_code & 0x0f ;
keycode = pgm_read_byte ( & ascii_to_keycode_lut [ hi ] [ lo ] ) ;
shift = ! ! ( pgm_read_word ( & ascii_to_shift_lut [ hi ] ) & ( 0x8000u > > lo ) ) ;
}
if ( shift ) {
register_code ( KC_LSFT ) ;
register_code ( keycode ) ;
unregister_code ( keycode ) ;
unregister_code ( KC_LSFT ) ;
}
else {
register_code ( keycode ) ;
unregister_code ( keycode ) ;
}
+ + str ;
}
}
# else
# else
static const bool ascii_to_qwerty_shift_lut [ 0x80 ] PROGMEM = {
/* for standard keycodes */
const bool ascii_to_shift_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
@ -569,8 +495,73 @@ static const bool ascii_to_qwerty_shift_lut[0x80] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 1 , 1 , 1 , 1 , 0
0 , 0 , 0 , 1 , 1 , 1 , 1 , 0
} ;
} ;
# endif
static const uint8_t ascii_to_qwerty_keycode_lut [ 0x80 ] PROGMEM = {
# if defined SENDSTRING_JIS_KEYCODE
/* for users with JIS keyboards */
const uint8_t ascii_to_keycode_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , KC_ESC , 0 , 0 , 0 , 0 ,
KC_SPC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
KC_8 , KC_9 , KC_QUOT , KC_SCLN , KC_COMM , KC_MINS , KC_DOT , KC_SLSH ,
KC_0 , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
KC_8 , KC_9 , KC_QUOT , KC_SCLN , KC_COMM , KC_MINS , KC_DOT , KC_SLSH ,
KC_LBRC , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
KC_X , KC_Y , KC_Z , KC_RBRC , KC_JYEN , KC_BSLS , KC_EQL , KC_RO ,
KC_LBRC , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
KC_X , KC_Y , KC_Z , KC_RBRC , KC_JYEN , KC_BSLS , KC_EQL , KC_DEL ,
} ;
# elif defined SENDSTRING_COLEMAK_KEYCODE
/* for users whose OSes are set to Colemak */
# include "keymap_colemak.h"
const uint8_t ascii_to_keycode_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , KC_ESC , 0 , 0 , 0 , 0 ,
KC_SPC , KC_1 , KC_QUOT , KC_3 , KC_4 , KC_5 , KC_7 , KC_QUOT ,
KC_9 , KC_0 , KC_8 , KC_EQL , KC_COMM , KC_MINS , KC_DOT , KC_SLSH ,
KC_0 , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
KC_8 , KC_9 , CM_SCLN , CM_SCLN , KC_COMM , KC_EQL , KC_DOT , KC_SLSH ,
KC_2 , CM_A , CM_B , CM_C , CM_D , CM_E , CM_F , CM_G ,
CM_H , CM_I , CM_J , CM_K , CM_L , CM_M , CM_N , CM_O ,
CM_P , CM_Q , CM_R , CM_S , CM_T , CM_U , CM_V , CM_W ,
CM_X , CM_Y , CM_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_6 , KC_MINS ,
KC_GRV , CM_A , CM_B , CM_C , CM_D , CM_E , CM_F , CM_G ,
CM_H , CM_I , CM_J , CM_K , CM_L , CM_M , CM_N , CM_O ,
CM_P , CM_Q , CM_R , CM_S , CM_T , CM_U , CM_V , CM_W ,
CM_X , CM_Y , CM_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_GRV , KC_DEL
} ;
# elif defined SENDSTRING_DVORAK_KEYCODE
/* for users whose OSes are set to Dvorak */
# include "keymap_dvorak.h"
const uint8_t ascii_to_keycode_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , KC_ESC , 0 , 0 , 0 , 0 ,
KC_SPC , DV_1 , DV_QUOT , DV_3 , DV_4 , DV_5 , DV_7 , DV_QUOT ,
DV_9 , DV_0 , DV_8 , DV_EQL , DV_COMM , DV_MINS , DV_DOT , DV_SLSH ,
DV_0 , DV_1 , DV_2 , DV_3 , DV_4 , DV_5 , DV_6 , DV_7 ,
DV_8 , DV_9 , DV_SCLN , DV_SCLN , DV_COMM , DV_EQL , DV_DOT , DV_SLSH ,
DV_2 , DV_A , DV_B , DV_C , DV_D , DV_E , DV_F , DV_G ,
DV_H , DV_I , DV_J , DV_K , DV_L , DV_M , DV_N , DV_O ,
DV_P , DV_Q , DV_R , DV_S , DV_T , DV_U , DV_V , DV_W ,
DV_X , DV_Y , DV_Z , DV_LBRC , DV_BSLS , DV_RBRC , DV_6 , DV_MINS ,
DV_GRV , DV_A , DV_B , DV_C , DV_D , DV_E , DV_F , DV_G ,
DV_H , DV_I , DV_J , DV_K , DV_L , DV_M , DV_N , DV_O ,
DV_P , DV_Q , DV_R , DV_S , DV_T , DV_U , DV_V , DV_W ,
DV_X , DV_Y , DV_Z , DV_LBRC , DV_BSLS , DV_RBRC , DV_GRV , KC_DEL
} ;
# else
/* For users with default keyboard layout in OS */
const uint8_t ascii_to_keycode_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
@ -588,14 +579,19 @@ static const uint8_t ascii_to_qwerty_keycode_lut[0x80] PROGMEM = {
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
KC_X , KC_Y , KC_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_GRV , KC_DEL
KC_X , KC_Y , KC_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_GRV , KC_DEL
} ;
} ;
# endif
void send_string ( const char * str ) {
void send_string ( const char * str ) {
send_string_with_delay ( str , 0 ) ;
}
void send_string_with_delay ( const char * str , uint8_t interval ) {
while ( 1 ) {
while ( 1 ) {
uint8_t keycode ;
uint8_t keycode ;
uint8_t ascii_code = pgm_read_byte ( str ) ;
uint8_t ascii_code = pgm_read_byte ( str ) ;
if ( ! ascii_code ) break ;
if ( ! ascii_code ) break ;
keycode = pgm_read_byte ( & ascii_to_ qwerty_ keycode_lut[ ascii_code ] ) ;
keycode = pgm_read_byte ( & ascii_to_ keycode_lut[ ascii_code ] ) ;
if ( pgm_read_byte ( & ascii_to_ qwerty_ shift_lut[ ascii_code ] ) ) {
if ( pgm_read_byte ( & ascii_to_ shift_lut[ ascii_code ] ) ) {
register_code ( KC_LSFT ) ;
register_code ( KC_LSFT ) ;
register_code ( keycode ) ;
register_code ( keycode ) ;
unregister_code ( keycode ) ;
unregister_code ( keycode ) ;
@ -606,55 +602,11 @@ void send_string(const char *str) {
unregister_code ( keycode ) ;
unregister_code ( keycode ) ;
}
}
+ + str ;
+ + str ;
// interval
{ uint8_t ms = interval ; while ( ms - - ) wait_ms ( 1 ) ; }
}
}
}
}
# endif
/* for users whose OSes are set to Colemak */
#if 0
# include "keymap_colemak.h"
const bool ascii_to_colemak_shift_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 ,
1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 0 , 0 , 0 , 1 , 1 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 1 , 1 , 1 , 1 , 0
} ;
const uint8_t ascii_to_colemak_keycode_lut [ 0x80 ] PROGMEM = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
KC_BSPC , KC_TAB , KC_ENT , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , KC_ESC , 0 , 0 , 0 , 0 ,
KC_SPC , KC_1 , KC_QUOT , KC_3 , KC_4 , KC_5 , KC_7 , KC_QUOT ,
KC_9 , KC_0 , KC_8 , KC_EQL , KC_COMM , KC_MINS , KC_DOT , KC_SLSH ,
KC_0 , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
KC_8 , KC_9 , CM_SCLN , CM_SCLN , KC_COMM , KC_EQL , KC_DOT , KC_SLSH ,
KC_2 , CM_A , CM_B , CM_C , CM_D , CM_E , CM_F , CM_G ,
CM_H , CM_I , CM_J , CM_K , CM_L , CM_M , CM_N , CM_O ,
CM_P , CM_Q , CM_R , CM_S , CM_T , CM_U , CM_V , CM_W ,
CM_X , CM_Y , CM_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_6 , KC_MINS ,
KC_GRV , CM_A , CM_B , CM_C , CM_D , CM_E , CM_F , CM_G ,
CM_H , CM_I , CM_J , CM_K , CM_L , CM_M , CM_N , CM_O ,
CM_P , CM_Q , CM_R , CM_S , CM_T , CM_U , CM_V , CM_W ,
CM_X , CM_Y , CM_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_GRV , KC_DEL
} ;
# endif
void update_tri_layer ( uint8_t layer1 , uint8_t layer2 , uint8_t layer3 ) {
void update_tri_layer ( uint8_t layer1 , uint8_t layer2 , uint8_t layer3 ) {
if ( IS_LAYER_ON ( layer1 ) & & IS_LAYER_ON ( layer2 ) ) {
if ( IS_LAYER_ON ( layer1 ) & & IS_LAYER_ON ( layer2 ) ) {
layer_on ( layer3 ) ;
layer_on ( layer3 ) ;