static void mrg_apply_transition(const mrg_transition_matrix* mat, const mrg_state* st, mrg_state* r) { #ifdef __MTA__ uint_fast64_t s = mat->s; uint_fast64_t t = mat->t; uint_fast64_t u = mat->u; uint_fast64_t v = mat->v; uint_fast64_t w = mat->w; uint_fast64_t z1 = st->z1; uint_fast64_t z2 = st->z2; uint_fast64_t z3 = st->z3; uint_fast64_t z4 = st->z4; uint_fast64_t z5 = st->z5; uint_fast64_t temp = s * z1 + t * z2 + u * z3 + v * z4; r->z5 = mod_down(mod_down_fast(temp) + w * z5); uint_fast64_t a = mod_down(107374182 * s + t); uint_fast64_t sy = mod_down(104480 * s); r->z4 = mod_down(mod_down_fast(a * z1 + u * z2 + v * z3) + w * z4 + sy * z5); uint_fast64_t b = mod_down(107374182 * a + u); uint_fast64_t ay = mod_down(104480 * a); r->z3 = mod_down(mod_down_fast(b * z1 + v * z2 + w * z3) + sy * z4 + ay * z5); uint_fast64_t c = mod_down(107374182 * b + v); uint_fast64_t by = mod_down(104480 * b); r->z2 = mod_down(mod_down_fast(c * z1 + w * z2 + sy * z3) + ay * z4 + by * z5); uint_fast64_t d = mod_down(107374182 * c + w); uint_fast64_t cy = mod_down(104480 * c); r->z1 = mod_down(mod_down_fast(d * z1 + sy * z2 + ay * z3) + by * z4 + cy * z5); /* A^n = [d s*y a*y b*y c*y] */ /* [c w s*y a*y b*y] */ /* [b v w s*y a*y] */ /* [a u v w s*y] */ /* [s t u v w ] */ #else uint_fast32_t o1 = mod_mac_y(mod_mul(mat->d, st->z1), mod_mac4(0, mat->s, st->z2, mat->a, st->z3, mat->b, st->z4, mat->c, st->z5)); uint_fast32_t o2 = mod_mac_y(mod_mac2(0, mat->c, st->z1, mat->w, st->z2), mod_mac3(0, mat->s, st->z3, mat->a, st->z4, mat->b, st->z5)); uint_fast32_t o3 = mod_mac_y(mod_mac3(0, mat->b, st->z1, mat->v, st->z2, mat->w, st->z3), mod_mac2(0, mat->s, st->z4, mat->a, st->z5)); uint_fast32_t o4 = mod_mac_y(mod_mac4(0, mat->a, st->z1, mat->u, st->z2, mat->v, st->z3, mat->w, st->z4), mod_mul(mat->s, st->z5)); uint_fast32_t o5 = mod_mac2(mod_mac3(0, mat->s, st->z1, mat->t, st->z2, mat->u, st->z3), mat->v, st->z4, mat->w, st->z5); r->z1 = o1; r->z2 = o2; r->z3 = o3; r->z4 = o4; r->z5 = o5; #endif }
void handle_code_actuate(const uint8_t code, const uint8_t action, const uint8_t tapkey) { const uint8_t modaction = (action & MOD_ACTION_MASK); if (modaction) { g_autokey_modifier = modaction; } switch(code) { case HID_KEYBOARD_SC_A: case HID_KEYBOARD_SC_B: case HID_KEYBOARD_SC_C: case HID_KEYBOARD_SC_D: case HID_KEYBOARD_SC_E: case HID_KEYBOARD_SC_F: case HID_KEYBOARD_SC_G: case HID_KEYBOARD_SC_H: case HID_KEYBOARD_SC_I: case HID_KEYBOARD_SC_J: case HID_KEYBOARD_SC_K: case HID_KEYBOARD_SC_L: case HID_KEYBOARD_SC_M: case HID_KEYBOARD_SC_N: case HID_KEYBOARD_SC_O: case HID_KEYBOARD_SC_P: case HID_KEYBOARD_SC_Q: case HID_KEYBOARD_SC_R: case HID_KEYBOARD_SC_S: case HID_KEYBOARD_SC_T: case HID_KEYBOARD_SC_U: case HID_KEYBOARD_SC_V: case HID_KEYBOARD_SC_W: case HID_KEYBOARD_SC_X: case HID_KEYBOARD_SC_Y: case HID_KEYBOARD_SC_Z: case HID_KEYBOARD_SC_1_AND_EXCLAMATION: case HID_KEYBOARD_SC_2_AND_AT: case HID_KEYBOARD_SC_3_AND_HASHMARK: case HID_KEYBOARD_SC_4_AND_DOLLAR: case HID_KEYBOARD_SC_5_AND_PERCENTAGE: case HID_KEYBOARD_SC_6_AND_CARET: case HID_KEYBOARD_SC_7_AND_AMPERSAND: case HID_KEYBOARD_SC_8_AND_ASTERISK: case HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS: case HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS: case HID_KEYBOARD_SC_ENTER: case HID_KEYBOARD_SC_ESCAPE: case HID_KEYBOARD_SC_BACKSPACE: case HID_KEYBOARD_SC_TAB: case HID_KEYBOARD_SC_SPACE: case HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE: case HID_KEYBOARD_SC_EQUAL_AND_PLUS: case HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE: case HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE: case HID_KEYBOARD_SC_BACKSLASH_AND_PIPE: case HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE: case HID_KEYBOARD_SC_SEMICOLON_AND_COLON: case HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE: case HID_KEYBOARD_SC_GRAVE_ACCENT_AND_TILDE: case HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN: case HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN: case HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK: case HID_KEYBOARD_SC_CAPS_LOCK: case HID_KEYBOARD_SC_F1: case HID_KEYBOARD_SC_F2: case HID_KEYBOARD_SC_F3: case HID_KEYBOARD_SC_F4: case HID_KEYBOARD_SC_F5: case HID_KEYBOARD_SC_F6: case HID_KEYBOARD_SC_F7: case HID_KEYBOARD_SC_F8: case HID_KEYBOARD_SC_F9: case HID_KEYBOARD_SC_F10: case HID_KEYBOARD_SC_F11: case HID_KEYBOARD_SC_F12: case HID_KEYBOARD_SC_PRINT_SCREEN: case HID_KEYBOARD_SC_SCROLL_LOCK: case HID_KEYBOARD_SC_PAUSE: case HID_KEYBOARD_SC_INSERT: case HID_KEYBOARD_SC_HOME: case HID_KEYBOARD_SC_PAGE_UP: case HID_KEYBOARD_SC_DELETE: case HID_KEYBOARD_SC_END: case HID_KEYBOARD_SC_PAGE_DOWN: case HID_KEYBOARD_SC_RIGHT_ARROW: case HID_KEYBOARD_SC_LEFT_ARROW: case HID_KEYBOARD_SC_DOWN_ARROW: case HID_KEYBOARD_SC_UP_ARROW: case HID_KEYBOARD_SC_NUM_LOCK: case HID_KEYBOARD_SC_KEYPAD_SLASH: case HID_KEYBOARD_SC_KEYPAD_ASTERISK: case HID_KEYBOARD_SC_KEYPAD_MINUS: case HID_KEYBOARD_SC_KEYPAD_PLUS: case HID_KEYBOARD_SC_KEYPAD_ENTER: case HID_KEYBOARD_SC_KEYPAD_1_AND_END: case HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW: case HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN: case HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW: case HID_KEYBOARD_SC_KEYPAD_5: case HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW: case HID_KEYBOARD_SC_KEYPAD_7_AND_HOME: case HID_KEYBOARD_SC_KEYPAD_8_AND_UP_ARROW: case HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP: case HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT: case HID_KEYBOARD_SC_KEYPAD_DOT_AND_DELETE: case HID_KEYBOARD_SC_NON_US_BACKSLASH_AND_PIPE: case HID_KEYBOARD_SC_APPLICATION: case HID_KEYBOARD_SC_POWER: case HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN: case HID_KEYBOARD_SC_F13: case HID_KEYBOARD_SC_F14: case HID_KEYBOARD_SC_F15: case HID_KEYBOARD_SC_F16: case HID_KEYBOARD_SC_F17: case HID_KEYBOARD_SC_F18: case HID_KEYBOARD_SC_F19: case HID_KEYBOARD_SC_F20: case HID_KEYBOARD_SC_F21: case HID_KEYBOARD_SC_F22: case HID_KEYBOARD_SC_F23: case HID_KEYBOARD_SC_F24: #ifdef MACRO_RAM_SIZE if (g_recording_macro) record_stroke(code); #endif /* MACRO_RAM_SIZE */ alpha_down(code, action); break; case HID_KEYBOARD_SC_LOCKING_CAPS_LOCK: queue_autokeys(HID_KEYBOARD_SC_CAPS_LOCK, g_modifier_state); break; case HID_KEYBOARD_SC_LOCKING_NUM_LOCK: queue_autokeys(HID_KEYBOARD_SC_NUM_LOCK, g_modifier_state); break; case HID_KEYBOARD_SC_LOCKING_SCROLL_LOCK: queue_autokeys(HID_KEYBOARD_SC_SCROLL_LOCK, g_modifier_state); break; #ifdef MAX_NUMBER_OF_BACKLIGHTS case SCANCODE_BL_DIMMER: backlight_dimmer(); break; case SCANCODE_BL_MODE: backlight_mode(); break; case SCANCODE_BL_ENABLE: backlight_enable(); break; #else case SCANCODE_BL_DIMMER: led_dimmer(); break; #endif /* MAX_NUMBER_OF_BACKLIGHTS */ #ifdef MACRO_RAM_SIZE case SCANCODE_PASSWORD1: case SCANCODE_PASSWORD2: case SCANCODE_PASSWORD3: case SCANCODE_PASSWORD4: if (!g_recording_macro) start_password_record(code); break; #endif /* MACRO_RAM_SIZE */ case SCANCODE_KEYLOCK: g_keylock_flag ^= 1; break; case SCANCODE_WINLOCK: g_winlock_flag ^= 1; if (g_winlock_flag == 0) led_host_off(LED_WIN_LOCK); else led_host_on(LED_WIN_LOCK); break; case SCANCODE_ESCGRAVE: break; case SCANCODE_BOOT: g_reset_requested = RESET_TO_BOOT; break; case SCANCODE_CONFIG: if (g_console_state == CONSOLE_IDLE) g_console_state = CONSOLE_MENU_MAIN; break; case SCANCODE_MUTE: case SCANCODE_VOL_INC: case SCANCODE_VOL_DEC: case SCANCODE_BASS_BOOST: case SCANCODE_NEXT_TRACK: case SCANCODE_PREV_TRACK: case SCANCODE_STOP: case SCANCODE_PLAY_PAUSE: case SCANCODE_BACK: case SCANCODE_FORWARD: case SCANCODE_MEDIA: case SCANCODE_MAIL: case SCANCODE_CALC: case SCANCODE_MYCOMP: case SCANCODE_SEARCH: case SCANCODE_BROWSER: set_media(code); break; #ifdef ENABLE_MOUSE case SCANCODE_MOUSE1: case SCANCODE_MOUSE2: case SCANCODE_MOUSE3: case SCANCODE_MOUSE4: case SCANCODE_MOUSE5: set_mousebutton(code); break; case SCANCODE_MOUSEXR: g_mouse_req_X++; goto mousemove; case SCANCODE_MOUSEXL: g_mouse_req_X--; goto mousemove; case SCANCODE_MOUSEYU: g_mouse_req_Y--; goto mousemove; case SCANCODE_MOUSEYD: g_mouse_req_Y++; mousemove: if ((g_mouse_active == 0) || (g_mouse_multiply < g_double_tap_repeat)) g_mouse_multiply = g_double_tap_repeat; break; #endif /* ENABLE_MOUSE */ case SCANCODE_M1: case SCANCODE_M2: case SCANCODE_M3: case SCANCODE_M4: case SCANCODE_M5: case SCANCODE_M6: case SCANCODE_M7: case SCANCODE_M8: case SCANCODE_M9: case SCANCODE_M10: case SCANCODE_M11: case SCANCODE_M12: case SCANCODE_M13: case SCANCODE_M14: play_macro(code); break; #ifdef MACRO_RAM_SIZE case SCANCODE_MRAM_RECORD: toggle_macro_record(); break; case SCANCODE_MRAM_PLAY: if (!g_recording_macro) queue_ram_macro(g_ram_macro, g_ram_macro_length); break; #endif /* MACRO_RAM_SIZE */ case HID_KEYBOARD_SC_LEFT_CONTROL: case HID_KEYBOARD_SC_LEFT_SHIFT: case HID_KEYBOARD_SC_LEFT_ALT: case HID_KEYBOARD_SC_LEFT_GUI: case HID_KEYBOARD_SC_RIGHT_CONTROL: case HID_KEYBOARD_SC_RIGHT_SHIFT: case HID_KEYBOARD_SC_RIGHT_ALT: case HID_KEYBOARD_SC_RIGHT_GUI: mod_down(code, action); break; case SCANCODE_FN: case SCANCODE_FN2: case SCANCODE_FN3: case SCANCODE_FN4: case SCANCODE_FN5: case SCANCODE_FN6: case SCANCODE_FN7: case SCANCODE_FN8: case SCANCODE_FN9: fn_down(code, action); break; default: report_event(EVENT_CODE_KEYMAP_INVALID_CODE, code, MODE_UPDATE); break; } g_last_keypress = code; }