@ -321,50 +321,97 @@ bool process_record_quantum(keyrecord_t *record) {
return process_action_kb ( record ) ;
}
__attribute__ ( ( weak ) ) const bool ascii_to_shift_lut [ 128 ] 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 } ;
__attribute__ ( ( weak ) ) const bool ascii_to_altgr_lut [ 128 ] 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 ,
// clang-format off
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 , 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 } ;
/* Bit-Packed look-up table to convert an ASCII character to whether
* [ Shift ] needs to be sent with the keycode .
*/
__attribute__ ( ( weak ) ) const uint8_t ascii_to_shift_lut [ 16 ] PROGMEM = {
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 ) ,
KCLUT_ENTRY ( 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 ) ,
KCLUT_ENTRY ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ) ,
KCLUT_ENTRY ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ) ,
KCLUT_ENTRY ( 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ) ,
KCLUT_ENTRY ( 1 , 1 , 1 , 0 , 0 , 0 , 1 , 1 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 ) ,
} ;
/* Bit-Packed look-up table to convert an ASCII character to whether
* [ AltGr ] needs to be sent with the keycode .
*/
__attribute__ ( ( weak ) ) const uint8_t ascii_to_altgr_lut [ 16 ] PROGMEM = {
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
KCLUT_ENTRY ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ,
} ;
/* Look-up table to convert an ASCII character to a keycode.
*/
__attribute__ ( ( weak ) ) const uint8_t ascii_to_keycode_lut [ 128 ] PROGMEM = {
// NUL SOH STX ETX EOT ENQ ACK BEL
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// BS TAB LF VT FF CR SO SI
KC_BSPC , KC_TAB , KC_ENT , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// CAN EM SUB ESC FS GS RS US
XXXXXXX , XXXXXXX , XXXXXXX , KC_ESC , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// ! " # $ % & '
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 ,
// 0 1 2 3 4 5 6 7
KC_0 , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
// 8 9 : ; < = > ?
KC_8 , KC_9 , KC_SCLN , KC_SCLN , KC_COMM , KC_EQL , KC_DOT , KC_SLSH ,
// @ A B C D E F G
KC_2 , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
// H I J K L M N O
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
// P Q R S T U V W
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
// X Y Z [ \ ] ^ _
KC_X , KC_Y , KC_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_6 , KC_MINS ,
// ` a b c d e f g
KC_GRV , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
// h i j k l m n o
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
// p q r s t u v w
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
// x y z { | } ~ DEL
KC_X , KC_Y , KC_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_GRV , KC_DEL
} ;
// clang-format off
__attribute__ ( ( weak ) ) const uint8_t ascii_to_keycode_lut [ 128 ] PROGMEM = { // NUL SOH STX ETX EOT ENQ ACK BEL
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// BS TAB LF VT FF CR SO SI
KC_BSPC , KC_TAB , KC_ENT , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// DLE DC1 DC2 DC3 DC4 NAK SYN ETB
XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// CAN EM SUB ESC FS GS RS US
XXXXXXX , XXXXXXX , XXXXXXX , KC_ESC , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX ,
// ! " # $ % & '
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 ,
// 0 1 2 3 4 5 6 7
KC_0 , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 ,
// 8 9 : ; < = > ?
KC_8 , KC_9 , KC_SCLN , KC_SCLN , KC_COMM , KC_EQL , KC_DOT , KC_SLSH ,
// @ A B C D E F G
KC_2 , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
// H I J K L M N O
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
// P Q R S T U V W
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
// X Y Z [ \ ] ^ _
KC_X , KC_Y , KC_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_6 , KC_MINS ,
// ` a b c d e f g
KC_GRV , KC_A , KC_B , KC_C , KC_D , KC_E , KC_F , KC_G ,
// h i j k l m n o
KC_H , KC_I , KC_J , KC_K , KC_L , KC_M , KC_N , KC_O ,
// p q r s t u v w
KC_P , KC_Q , KC_R , KC_S , KC_T , KC_U , KC_V , KC_W ,
// x y z { | } ~ DEL
KC_X , KC_Y , KC_Z , KC_LBRC , KC_BSLS , KC_RBRC , KC_GRV , KC_DEL } ;
// clang-format on
// Note: we bit-pack in "reverse" order to optimize loading
# define PGM_LOADBIT(mem, pos) ((pgm_read_byte(&((mem)[(pos) / 8])) >> ((pos) % 8)) & 0x01)
void send_string ( const char * str ) { send_string_with_delay ( str , 0 ) ; }
void send_string_P ( const char * str ) { send_string_with_delay_P ( str , 0 ) ; }
@ -462,8 +509,8 @@ void send_char(char ascii_code) {
# endif
uint8_t keycode = pgm_read_byte ( & ascii_to_keycode_lut [ ( uint8_t ) ascii_code ] ) ;
bool is_shifted = pgm_read_byte( & ascii_to_shift_lut [ ( uint8_t ) ascii_code ] ) ;
bool is_altgred = pgm_read_byte( & ascii_to_altgr_lut [ ( uint8_t ) ascii_code ] ) ;
bool is_shifted = PGM_LOADBIT( ascii_to_shift_lut , ( uint8_t ) ascii_code ) ;
bool is_altgred = PGM_LOADBIT( ascii_to_altgr_lut , ( uint8_t ) ascii_code ) ;
if ( is_shifted ) {
register_code ( KC_LSFT ) ;