common.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "common.h"
  2. #include <furi/furi.h>
  3. #include <furi_hal.h>
  4. #include "../../services/convert/convert.h"
  5. static const uint8_t hid_number_keys[10] = {
  6. HID_KEYBOARD_0,
  7. HID_KEYBOARD_1,
  8. HID_KEYBOARD_2,
  9. HID_KEYBOARD_3,
  10. HID_KEYBOARD_4,
  11. HID_KEYBOARD_5,
  12. HID_KEYBOARD_6,
  13. HID_KEYBOARD_7,
  14. HID_KEYBOARD_8,
  15. HID_KEYBOARD_9};
  16. static uint32_t get_keystroke_delay(TokenAutomationFeature features) {
  17. if(features & TOKEN_AUTOMATION_FEATURE_TYPE_SLOWER) {
  18. return 100;
  19. }
  20. return 30;
  21. }
  22. static uint32_t get_keypress_delay(TokenAutomationFeature features) {
  23. if(features & TOKEN_AUTOMATION_FEATURE_TYPE_SLOWER) {
  24. return 60;
  25. }
  26. return 30;
  27. }
  28. static void totp_type_code_worker_press_key(
  29. uint8_t key,
  30. TOTP_AUTOMATION_KEY_HANDLER key_press_fn,
  31. TOTP_AUTOMATION_KEY_HANDLER key_release_fn,
  32. TokenAutomationFeature features) {
  33. (*key_press_fn)(key);
  34. furi_delay_ms(get_keypress_delay(features));
  35. (*key_release_fn)(key);
  36. }
  37. void totp_type_code_worker_execute_automation(
  38. TOTP_AUTOMATION_KEY_HANDLER key_press_fn,
  39. TOTP_AUTOMATION_KEY_HANDLER key_release_fn,
  40. const char* string,
  41. uint8_t string_length,
  42. TokenAutomationFeature features) {
  43. furi_delay_ms(500);
  44. uint8_t i = 0;
  45. while(i < string_length && string[i] != 0) {
  46. uint8_t digit = CONVERT_CHAR_TO_DIGIT(string[i]);
  47. if(digit > 9) break;
  48. uint8_t hid_kb_key = hid_number_keys[digit];
  49. totp_type_code_worker_press_key(hid_kb_key, key_press_fn, key_release_fn, features);
  50. furi_delay_ms(get_keystroke_delay(features));
  51. i++;
  52. }
  53. if(features & TOKEN_AUTOMATION_FEATURE_ENTER_AT_THE_END) {
  54. furi_delay_ms(get_keystroke_delay(features));
  55. totp_type_code_worker_press_key(
  56. HID_KEYBOARD_RETURN, key_press_fn, key_release_fn, features);
  57. }
  58. if(features & TOKEN_AUTOMATION_FEATURE_TAB_AT_THE_END) {
  59. furi_delay_ms(get_keystroke_delay(features));
  60. totp_type_code_worker_press_key(HID_KEYBOARD_TAB, key_press_fn, key_release_fn, features);
  61. }
  62. }