// Author: redlineo, romanov.pd@gmail.com #include "kc_to_ascii.h" uint8_t shift_tracker = 0; uint8_t write_keycode(uint8_t up_key, uint8_t low_key, keyrecord_t *record, uint8_t readed_key[], uint8_t *count_char_key) { if (record->event.pressed) { if (shift_tracker == 1) { // shift_tracker = 0; readed_key[*count_char_key] = up_key; } else { readed_key[*count_char_key] = low_key; } #ifdef USE_RED_CRY_DEBUG dprintf("%d", readed_key[*count_char_key]); #endif *count_char_key = *count_char_key + 1; } return RED_KEY_READ; }; uint8_t kc_to_ascii(uint16_t keycode, keyrecord_t *record, uint8_t readed_key[], uint8_t *count_char_key) { switch (keycode) { case KC_LEFT_SHIFT: if (record->event.pressed) { shift_tracker = 1; } else { shift_tracker = 0; } return RED_KEY_READ; break; case KC_A: return write_keycode(ASCII_UP_A, ASCII_LOW_A, record, readed_key, count_char_key); break; case KC_B: return write_keycode(ASCII_UP_B, ASCII_LOW_B, record, readed_key, count_char_key); break; case KC_C: return write_keycode(ASCII_UP_C, ASCII_LOW_C, record, readed_key, count_char_key); break; case KC_D: return write_keycode(ASCII_UP_D, ASCII_LOW_D, record, readed_key, count_char_key); break; case KC_E: return write_keycode(ASCII_UP_E, ASCII_LOW_E, record, readed_key, count_char_key); break; case KC_F: return write_keycode(ASCII_UP_F, ASCII_LOW_F, record, readed_key, count_char_key); break; case KC_G: return write_keycode(ASCII_UP_G, ASCII_LOW_G, record, readed_key, count_char_key); break; case KC_H: return write_keycode(ASCII_UP_H, ASCII_LOW_H, record, readed_key, count_char_key); break; case KC_I: return write_keycode(ASCII_UP_I, ASCII_LOW_I, record, readed_key, count_char_key); break; case KC_J: return write_keycode(ASCII_UP_J, ASCII_LOW_J, record, readed_key, count_char_key); break; case KC_K: return write_keycode(ASCII_UP_K, ASCII_LOW_K, record, readed_key, count_char_key); break; case KC_L: return write_keycode(ASCII_UP_L, ASCII_LOW_L, record, readed_key, count_char_key); break; case KC_M: return write_keycode(ASCII_UP_M, ASCII_LOW_M, record, readed_key, count_char_key); break; case KC_N: return write_keycode(ASCII_UP_N, ASCII_LOW_N, record, readed_key, count_char_key); break; case KC_O: return write_keycode(ASCII_UP_O, ASCII_LOW_O, record, readed_key, count_char_key); break; case KC_P: return write_keycode(ASCII_UP_P, ASCII_LOW_P, record, readed_key, count_char_key); break; case KC_Q: return write_keycode(ASCII_UP_Q, ASCII_LOW_Q, record, readed_key, count_char_key); break; case KC_R: return write_keycode(ASCII_UP_R, ASCII_LOW_R, record, readed_key, count_char_key); break; case KC_S: return write_keycode(ASCII_UP_S, ASCII_LOW_S, record, readed_key, count_char_key); break; case KC_T: return write_keycode(ASCII_UP_T, ASCII_LOW_T, record, readed_key, count_char_key); break; case KC_U: return write_keycode(ASCII_UP_U, ASCII_LOW_U, record, readed_key, count_char_key); break; case KC_V: return write_keycode(ASCII_UP_V, ASCII_LOW_V, record, readed_key, count_char_key); break; case KC_W: return write_keycode(ASCII_UP_W, ASCII_LOW_W, record, readed_key, count_char_key); break; case KC_X: return write_keycode(ASCII_UP_X, ASCII_LOW_X, record, readed_key, count_char_key); break; case KC_Y: return write_keycode(ASCII_UP_Y, ASCII_LOW_Y, record, readed_key, count_char_key); break; case KC_Z: return write_keycode(ASCII_UP_Z, ASCII_LOW_Z, record, readed_key, count_char_key); break; case KC_1: return write_keycode(ASCII_UP_1, ASCII_LOW_1, record, readed_key, count_char_key); break; case KC_2: return write_keycode(ASCII_UP_2, ASCII_LOW_2, record, readed_key, count_char_key); break; case KC_3: return write_keycode(ASCII_UP_3, ASCII_LOW_3, record, readed_key, count_char_key); break; case KC_4: return write_keycode(ASCII_UP_4, ASCII_LOW_4, record, readed_key, count_char_key); break; case KC_5: return write_keycode(ASCII_UP_5, ASCII_LOW_5, record, readed_key, count_char_key); break; case KC_6: return write_keycode(ASCII_UP_6, ASCII_LOW_6, record, readed_key, count_char_key); break; case KC_7: return write_keycode(ASCII_UP_7, ASCII_LOW_7, record, readed_key, count_char_key); break; case KC_8: return write_keycode(ASCII_UP_8, ASCII_LOW_8, record, readed_key, count_char_key); break; case KC_9: return write_keycode(ASCII_UP_9, ASCII_LOW_9, record, readed_key, count_char_key); break; case KC_0: return write_keycode(ASCII_UP_0, ASCII_LOW_0, record, readed_key, count_char_key); break; case KC_SPACE: return write_keycode(ASCII_SPACE, ASCII_SPACE, record, readed_key, count_char_key); break; case KC_MINUS: return write_keycode(ASCII_UP_MINUS, ASCII_LOW_MINUS, record, readed_key, count_char_key); break; case KC_EQUAL: return write_keycode(ASCII_UP_EQUAL, ASCII_LOW_EQUAL, record, readed_key, count_char_key); break; case KC_LEFT_BRACKET: return write_keycode(ASCII_UP_LEFT_BR, ASCII_LOW_LEFT_BR, record, readed_key, count_char_key); break; case KC_RIGHT_BRACKET: return write_keycode(ASCII_UP_RIGHT_BR, ASCII_LOW_RIGHT_BR, record, readed_key, count_char_key); break; case KC_BACKSLASH: return write_keycode(ASCII_UP_BACKSLASH, ASCII_LOW_BACKSLASH, record, readed_key, count_char_key); break; case KC_NONUS_HASH: return write_keycode(ASCII_UP_HASH, ASCII_GRAVE, record, readed_key, count_char_key); break; case KC_SEMICOLON: return write_keycode(ASCII_UP_SEMICOLON, ASCII_LOW_SEMICOLON, record, readed_key, count_char_key); break; case KC_QUOTE: return write_keycode(ASCII_UP_QUOTE, ASCII_LOW_QUOTE, record, readed_key, count_char_key); break; // i am not sure about KC_GRAVE and KC_NONUS_HASH // need to test case KC_GRAVE: return write_keycode(ASCII_NON_PRINTABLE, ASCII_GRAVE, record, readed_key, count_char_key); break; case KC_COMMA: return write_keycode(ASCII_UP_COMMA, ASCII_LOW_COMMA, record, readed_key, count_char_key); break; case KC_DOT: return write_keycode(ASCII_UP_DOT, ASCII_LOW_DOT, record, readed_key, count_char_key); break; case KC_SLASH: return write_keycode(ASCII_UP_SLASH, ASCII_LOW_SLASH, record, readed_key, count_char_key); break; default: break; } return RED_IDLE; }